diff --git a/Dockerfile b/Dockerfile index 011f39929..7f0a37ea5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,4 +24,4 @@ RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSIO ENV PATH ${ANDROID_NDK_HOME}:$PATH ENV PATH ${ANDROID_NDK_HOME}/prebuilt/linux-x86_64/bin/:$PATH -CMD mkdir -p /home/source/TMessagesProj/build/outputs/apk && mkdir -p /home/source/TMessagesProj/build/outputs/native-debug-symbols && cp -R /home/source/. /home/gradle && cd /home/gradle && gradle assembleRelease && cp -R /home/gradle/TMessagesProj/build/outputs/apk/. /home/source/TMessagesProj/build/outputs/apk && cp -R /home/gradle/TMessagesProj/build/outputs/native-debug-symbols/. /home/source/TMessagesProj/build/outputs/native-debug-symbols +CMD mkdir -p /home/source/TMessagesProj/build/outputs/apk && mkdir -p /home/source/TMessagesProj/build/outputs/native-debug-symbols && cp -R /home/source/. /home/gradle && cd /home/gradle && gradle assembleRelease && gradle assembleStandalone && cp -R /home/gradle/TMessagesProj/build/outputs/apk/. /home/source/TMessagesProj/build/outputs/apk && cp -R /home/gradle/TMessagesProj/build/outputs/native-debug-symbols/. /home/source/TMessagesProj/build/outputs/native-debug-symbols diff --git a/TMessagesProj/build.gradle b/TMessagesProj/build.gradle index 68e83acd4..cf50a975a 100644 --- a/TMessagesProj/build.gradle +++ b/TMessagesProj/build.gradle @@ -143,6 +143,17 @@ android { ndk.debugSymbolLevel = 'FULL' } + standalone { + debuggable false + jniDebuggable false + signingConfig signingConfigs.release + applicationIdSuffix ".web" + minifyEnabled true + multiDexEnabled true + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + ndk.debugSymbolLevel = 'FULL' + } + release { debuggable false jniDebuggable false @@ -167,6 +178,10 @@ android { manifest.srcFile 'config/debug/AndroidManifest.xml' } + sourceSets.standalone { + manifest.srcFile 'config/release/AndroidManifest.xml' + } + sourceSets.release { manifest.srcFile 'config/release/AndroidManifest.xml' } @@ -243,9 +258,6 @@ android { sourceSets.debug { manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml' } - /*sourceSets.debugAsan { - manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml' - }*/ sourceSets.release { manifest.srcFile 'config/release/AndroidManifest_SDK23.xml' } @@ -276,19 +288,19 @@ android { sourceSets.debug { manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml' } - /*sourceSets.debugAsan { - manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml' - }*/ sourceSets.release { manifest.srcFile 'config/release/AndroidManifest_SDK23.xml' } + sourceSets.standalone { + manifest.srcFile 'config/release/AndroidManifest_standalone.xml' + } ext { abiVersionCode = 9 } } } - defaultConfig.versionCode = 2274 + defaultConfig.versionCode = 2284 applicationVariants.all { variant -> variant.outputs.all { output -> @@ -307,7 +319,7 @@ android { defaultConfig { minSdkVersion 16 targetSdkVersion 29 - versionName "7.6.1" + versionName "7.7.0" vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi'] diff --git a/TMessagesProj/config/release/AndroidManifest_standalone.xml b/TMessagesProj/config/release/AndroidManifest_standalone.xml new file mode 100644 index 000000000..3c87a4403 --- /dev/null +++ b/TMessagesProj/config/release/AndroidManifest_standalone.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TMessagesProj/google-services.json b/TMessagesProj/google-services.json index 019c926bc..640e841b2 100755 --- a/TMessagesProj/google-services.json +++ b/TMessagesProj/google-services.json @@ -6,35 +6,6 @@ "storage_bucket": "tmessages2.appspot.com" }, "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:760348033671:android:dc022572c167a16c", - "android_client_info": { - "package_name": "org.telegram.messenger.beta" - } - }, - "oauth_client": [ - { - "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyA-t0jLPjUt2FxrA8VPK2EiYHcYcboIR6k" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "760348033671-jiv412evc1r36rl4k7vhl1ba83atdmot.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, { "client_info": { "mobilesdk_app_id": "1:760348033671:android:f6afd7b67eae3860", @@ -57,7 +28,65 @@ "appinvite_service": { "other_platform_oauth_client": [ { - "client_id": "760348033671-jiv412evc1r36rl4k7vhl1ba83atdmot.apps.googleusercontent.com", + "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:760348033671:android:dc022572c167a16c", + "android_client_info": { + "package_name": "org.telegram.messenger.beta" + } + }, + "oauth_client": [ + { + "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA-t0jLPjUt2FxrA8VPK2EiYHcYcboIR6k" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:760348033671:android:7396e651423888c3f66e22", + "android_client_info": { + "package_name": "org.telegram.messenger.web" + } + }, + "oauth_client": [ + { + "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyA-t0jLPjUt2FxrA8VPK2EiYHcYcboIR6k" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "760348033671-2hh8ebmuflsnjoc0kldkfells9rhtfni.apps.googleusercontent.com", "client_type": 3 } ] @@ -66,4 +95,4 @@ } ], "configuration_version": "1" -} +} \ No newline at end of file diff --git a/TMessagesProj/jni/CMakeLists.txt b/TMessagesProj/jni/CMakeLists.txt index 579b8ec23..d955668c6 100644 --- a/TMessagesProj/jni/CMakeLists.txt +++ b/TMessagesProj/jni/CMakeLists.txt @@ -399,7 +399,7 @@ target_compile_definitions(sqlite PUBLIC #voip include(${CMAKE_HOME_DIRECTORY}/voip/CMakeLists.txt) -set(NATIVE_LIB "tmessages.37") +set(NATIVE_LIB "tmessages.38") #tmessages add_library(${NATIVE_LIB} SHARED diff --git a/TMessagesProj/jni/TgNetWrapper.cpp b/TMessagesProj/jni/TgNetWrapper.cpp index 84f9bb4cd..aa7c4c933 100644 --- a/TMessagesProj/jni/TgNetWrapper.cpp +++ b/TMessagesProj/jni/TgNetWrapper.cpp @@ -371,7 +371,7 @@ void setSystemLangCode(JNIEnv *env, jclass c, jint instanceNum, jstring langCode } } -void init(JNIEnv *env, jclass c, jint instanceNum, jint version, jint layer, jint apiId, jstring deviceModel, jstring systemVersion, jstring appVersion, jstring langCode, jstring systemLangCode, jstring configPath, jstring logPath, jstring regId, jstring cFingerprint, jstring installerId, jint timezoneOffset, jint userId, jboolean enablePushConnection, jboolean hasNetwork, jint networkType) { +void init(JNIEnv *env, jclass c, jint instanceNum, jint version, jint layer, jint apiId, jstring deviceModel, jstring systemVersion, jstring appVersion, jstring langCode, jstring systemLangCode, jstring configPath, jstring logPath, jstring regId, jstring cFingerprint, jstring installerId, jstring packageId, jint timezoneOffset, jint userId, jboolean enablePushConnection, jboolean hasNetwork, jint networkType) { const char *deviceModelStr = env->GetStringUTFChars(deviceModel, 0); const char *systemVersionStr = env->GetStringUTFChars(systemVersion, 0); const char *appVersionStr = env->GetStringUTFChars(appVersion, 0); @@ -382,8 +382,9 @@ void init(JNIEnv *env, jclass c, jint instanceNum, jint version, jint layer, jin const char *regIdStr = env->GetStringUTFChars(regId, 0); const char *cFingerprintStr = env->GetStringUTFChars(cFingerprint, 0); const char *installerIdStr = env->GetStringUTFChars(installerId, 0); + const char *packageIdStr = env->GetStringUTFChars(packageId, 0); - ConnectionsManager::getInstance(instanceNum).init((uint32_t) version, layer, apiId, std::string(deviceModelStr), std::string(systemVersionStr), std::string(appVersionStr), std::string(langCodeStr), std::string(systemLangCodeStr), std::string(configPathStr), std::string(logPathStr), std::string(regIdStr), std::string(cFingerprintStr), std::string(installerIdStr), timezoneOffset, userId, true, enablePushConnection, hasNetwork, networkType); + ConnectionsManager::getInstance(instanceNum).init((uint32_t) version, layer, apiId, std::string(deviceModelStr), std::string(systemVersionStr), std::string(appVersionStr), std::string(langCodeStr), std::string(systemLangCodeStr), std::string(configPathStr), std::string(logPathStr), std::string(regIdStr), std::string(cFingerprintStr), std::string(installerIdStr), std::string(packageIdStr), timezoneOffset, userId, true, enablePushConnection, hasNetwork, networkType); if (deviceModelStr != 0) { env->ReleaseStringUTFChars(deviceModel, deviceModelStr); @@ -415,6 +416,9 @@ void init(JNIEnv *env, jclass c, jint instanceNum, jint version, jint layer, jin if (installerIdStr != 0) { env->ReleaseStringUTFChars(installerId, installerIdStr); } + if (packageIdStr != 0) { + env->ReleaseStringUTFChars(packageId, packageIdStr); + } } void setJava(JNIEnv *env, jclass c, jboolean useJavaByteBuffers) { @@ -440,7 +444,7 @@ static JNINativeMethod ConnectionsManagerMethods[] = { {"native_setProxySettings", "(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", (void *) setProxySettings}, {"native_getConnectionState", "(I)I", (void *) getConnectionState}, {"native_setUserId", "(II)V", (void *) setUserId}, - {"native_init", "(IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZZI)V", (void *) init}, + {"native_init", "(IIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIZZI)V", (void *) init}, {"native_setLangCode", "(ILjava/lang/String;)V", (void *) setLangCode}, {"native_setRegId", "(ILjava/lang/String;)V", (void *) setRegId}, {"native_setSystemLangCode", "(ILjava/lang/String;)V", (void *) setSystemLangCode}, diff --git a/TMessagesProj/jni/tgnet/ApiScheme.cpp b/TMessagesProj/jni/tgnet/ApiScheme.cpp index 62c23955a..e638324f9 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.cpp +++ b/TMessagesProj/jni/tgnet/ApiScheme.cpp @@ -1172,7 +1172,7 @@ UserProfilePhoto *UserProfilePhoto::TLdeserialize(NativeByteBuffer *stream, uint case 0x4f11bae1: result = new TL_userProfilePhotoEmpty(); break; - case 0x69d3ab26: + case 0xcc656077: result = new TL_userProfilePhoto(); break; default: @@ -1194,6 +1194,9 @@ void TL_userProfilePhoto::readParams(NativeByteBuffer *stream, int32_t instanceN photo_id = stream->readInt64(&error); photo_small = std::unique_ptr(FileLocation::TLdeserialize(stream, stream->readUint32(&error), instanceNum, error)); photo_big = std::unique_ptr(FileLocation::TLdeserialize(stream, stream->readUint32(&error), instanceNum, error)); + if ((flags & 2) != 0) { + stripped_thumb = std::unique_ptr(stream->readByteArray(&error)); + } dc_id = stream->readInt32(&error); } @@ -1204,6 +1207,9 @@ void TL_userProfilePhoto::serializeToStream(NativeByteBuffer *stream) { stream->writeInt64(photo_id); photo_small->serializeToStream(stream); photo_big->serializeToStream(stream); + if ((flags & 2) != 0) { + stream->writeByteArray(stripped_thumb.get()); + } stream->writeInt32(dc_id); } diff --git a/TMessagesProj/jni/tgnet/ApiScheme.h b/TMessagesProj/jni/tgnet/ApiScheme.h index 330579d37..132441805 100644 --- a/TMessagesProj/jni/tgnet/ApiScheme.h +++ b/TMessagesProj/jni/tgnet/ApiScheme.h @@ -257,6 +257,7 @@ public: int64_t photo_id; std::unique_ptr photo_small; std::unique_ptr photo_big; + std::unique_ptr stripped_thumb; int32_t dc_id; static UserProfilePhoto *TLdeserialize(NativeByteBuffer *stream, uint32_t constructor, int32_t instanceNum, bool &error); @@ -273,7 +274,7 @@ public: class TL_userProfilePhoto : public UserProfilePhoto { public: - static const uint32_t constructor = 0x69d3ab26; + static const uint32_t constructor = 0xcc656077; void readParams(NativeByteBuffer *stream, int32_t instanceNum, bool &error); void serializeToStream(NativeByteBuffer *stream); diff --git a/TMessagesProj/jni/tgnet/ConnectionsManager.cpp b/TMessagesProj/jni/tgnet/ConnectionsManager.cpp index 5a8a92362..518c6d17f 100644 --- a/TMessagesProj/jni/tgnet/ConnectionsManager.cpp +++ b/TMessagesProj/jni/tgnet/ConnectionsManager.cpp @@ -2494,6 +2494,7 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t if (request->rawRequest->initFunc != nullptr) { request->rawRequest->initFunc(request->messageId); } + if (LOGS_ENABLED) DEBUG_D("messageId for token = %d, 0x%" PRIx64, request->requestToken, request->messageId); uint32_t requestLength = request->rpcRequest->getObjectSize(); if (request->requestFlags & RequestFlagCanCompress) { @@ -2593,8 +2594,8 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t Datacenter *datacenter = getDatacenterWithId(iter->first); if (datacenter != nullptr) { bool scannedPreviousRequests = false; - int64_t lastSentMessageRpcId = 0; bool needQuickAck = false; + int64_t lastSentMessageRpcId = 0; std::vector> &array = iter->second; size_t count = array.size(); for (uint32_t b = 0; b < count; b++) { @@ -2609,13 +2610,18 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t std::vector currentRequests; for (uint32_t a = 0; a < count; a++) { NetworkMessage *currentNetworkMessage = array[a].get(); - TL_message *currentMessage = currentNetworkMessage->message.get(); if (currentNetworkMessage->invokeAfter) { - currentRequests.push_back(currentMessage->msg_id); + currentRequests.push_back(currentNetworkMessage->message->msg_id); } } int64_t maxRequestId = 0; + if (lastInvokeAfterMessageId != 0) { + int64_t timeMessage = (int64_t) (lastInvokeAfterMessageId / 4294967296.0); + if (getCurrentTime() - timeMessage <= 30) { + maxRequestId = lastInvokeAfterMessageId; + } + } for (requestsIter iter2 = runningRequests.begin(); iter2 != runningRequests.end(); iter2++) { Request *request = iter2->get(); if (request->requestFlags & RequestFlagInvokeAfter) { @@ -2634,11 +2640,11 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t TL_invokeAfterMsg *request = new TL_invokeAfterMsg(); request->msg_id = lastSentMessageRpcId; if (message->outgoingBody != nullptr) { - if (LOGS_ENABLED) DEBUG_D("wrap outgoingBody(%p, %s) to TL_invokeAfterMsg", message->outgoingBody, typeid(*message->outgoingBody).name()); + if (LOGS_ENABLED) DEBUG_D("wrap outgoingBody(%p, %s) to TL_invokeAfterMsg, token = %d, after 0x%" PRIx64, message->outgoingBody, typeid(*message->outgoingBody).name(), networkMessage->requestId, request->msg_id); request->outgoingQuery = message->outgoingBody; message->outgoingBody = nullptr; } else { - if (LOGS_ENABLED) DEBUG_D("wrap body(%p, %s) to TL_invokeAfterMsg", message->body.get(), typeid(*(message->body.get())).name()); + if (LOGS_ENABLED) DEBUG_D("wrap body(%p, %s) to TL_invokeAfterMsg, token = %d, after 0x%" PRIx64, message->body.get(), typeid(*(message->body.get())).name(), networkMessage->requestId, request->msg_id); request->query = std::move(message->body); } message->body = std::unique_ptr(request); @@ -2646,6 +2652,7 @@ void ConnectionsManager::processRequestQueue(uint32_t connectionTypes, uint32_t } lastSentMessageRpcId = message->msg_id; + lastInvokeAfterMessageId = message->msg_id; } } @@ -2764,6 +2771,13 @@ std::unique_ptr ConnectionsManager::wrapInLayer(TLObject *object, Data objectValue->key = "installer"; objectValue->value = std::unique_ptr(jsonString); + objectValue = new TL_jsonObjectValue(); + jsonObject->value.push_back(std::unique_ptr(objectValue)); + jsonString = new TL_jsonString(); + jsonString->value = package; + objectValue->key = "package_id"; + objectValue->value = std::unique_ptr(jsonString); + objectValue = new TL_jsonObjectValue(); jsonObject->value.push_back(std::unique_ptr(objectValue)); @@ -3212,7 +3226,7 @@ void ConnectionsManager::applyDnsConfig(NativeByteBuffer *buffer, std::string ph }); } -void ConnectionsManager::init(uint32_t version, int32_t layer, int32_t apiId, std::string deviceModel, std::string systemVersion, std::string appVersion, std::string langCode, std::string systemLangCode, std::string configPath, std::string logPath, std::string regId, std::string cFingerpting, std::string installerId, int32_t timezoneOffset, int32_t userId, bool isPaused, bool enablePushConnection, bool hasNetwork, int32_t networkType) { +void ConnectionsManager::init(uint32_t version, int32_t layer, int32_t apiId, std::string deviceModel, std::string systemVersion, std::string appVersion, std::string langCode, std::string systemLangCode, std::string configPath, std::string logPath, std::string regId, std::string cFingerpting, std::string installerId, std::string packageId, int32_t timezoneOffset, int32_t userId, bool isPaused, bool enablePushConnection, bool hasNetwork, int32_t networkType) { currentVersion = version; currentLayer = layer; currentApiId = apiId; @@ -3224,6 +3238,7 @@ void ConnectionsManager::init(uint32_t version, int32_t layer, int32_t apiId, st currentRegId = regId; certFingerprint = cFingerpting; installer = installerId; + package = packageId; currentDeviceTimezone = timezoneOffset; currentSystemLangCode = systemLangCode; currentUserId = userId; diff --git a/TMessagesProj/jni/tgnet/ConnectionsManager.h b/TMessagesProj/jni/tgnet/ConnectionsManager.h index d44a9d589..740e86830 100644 --- a/TMessagesProj/jni/tgnet/ConnectionsManager.h +++ b/TMessagesProj/jni/tgnet/ConnectionsManager.h @@ -63,7 +63,7 @@ public: void pauseNetwork(); void setNetworkAvailable(bool value, int32_t type, bool slow); void setIpStrategy(uint8_t value); - void init(uint32_t version, int32_t layer, int32_t apiId, std::string deviceModel, std::string systemVersion, std::string appVersion, std::string langCode, std::string systemLangCode, std::string configPath, std::string logPath, std::string regId, std::string cFingerprint, std::string installerId, int32_t timezoneOffset, int32_t userId, bool isPaused, bool enablePushConnection, bool hasNetwork, int32_t networkType); + void init(uint32_t version, int32_t layer, int32_t apiId, std::string deviceModel, std::string systemVersion, std::string appVersion, std::string langCode, std::string systemLangCode, std::string configPath, std::string logPath, std::string regId, std::string cFingerprint, std::string installerId, std::string packageId, int32_t timezoneOffset, int32_t userId, bool isPaused, bool enablePushConnection, bool hasNetwork, int32_t networkType); void setProxySettings(std::string address, uint16_t port, std::string username, std::string password, std::string secret); void setLangCode(std::string langCode); void setRegId(std::string regId); @@ -206,6 +206,7 @@ private: requestsList runningRequests; std::vector requestingSaltsForDc; int32_t lastPingId = 0; + int64_t lastInvokeAfterMessageId = 0; int32_t currentNetworkType = NETWORK_TYPE_WIFI; uint32_t currentVersion = 1; @@ -218,6 +219,7 @@ private: std::string currentRegId; std::string certFingerprint; std::string installer; + std::string package; int32_t currentDeviceTimezone = 0; std::string currentSystemLangCode; std::string currentConfigPath; diff --git a/TMessagesProj/src/main/AndroidManifest.xml b/TMessagesProj/src/main/AndroidManifest.xml index f09039892..a25e951b0 100644 --- a/TMessagesProj/src/main/AndroidManifest.xml +++ b/TMessagesProj/src/main/AndroidManifest.xml @@ -75,8 +75,6 @@ android:name="org.telegram.messenger.ApplicationLoader" android:allowBackup="false" android:hardwareAccelerated="@bool/useHardwareAcceleration" - android:icon="@mipmap/ic_launcher" - android:roundIcon="@mipmap/ic_launcher_round" android:largeHeap="true" android:theme="@style/Theme.TMessages.Start" android:manageSpaceActivity="org.telegram.ui.ExternalActionActivity" diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java index d4038df6a..1b80d906b 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/AndroidUtilities.java @@ -49,6 +49,7 @@ import android.provider.MediaStore; import android.provider.Settings; import androidx.core.content.FileProvider; +import androidx.core.graphics.ColorUtils; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; @@ -185,6 +186,8 @@ public class AndroidUtilities { private static Paint roundPaint; private static RectF bitmapRect; + public static final RectF rectTmp = new RectF(); + public static Pattern WEB_URL = null; static { @@ -365,6 +368,22 @@ public class AndroidUtilities { int end; } + private static Boolean standaloneApp; + public static boolean isStandaloneApp() { + if (standaloneApp == null) { + standaloneApp = "org.telegram.messenger.web".equals(ApplicationLoader.applicationContext.getPackageName()); + } + return standaloneApp; + } + + private static Boolean betaApp; + public static boolean isBetaApp() { + if (betaApp == null) { + betaApp = "org.telegram.messenger.beta".equals(ApplicationLoader.applicationContext.getPackageName()); + } + return betaApp; + } + private static String makeUrl(String url, String[] prefixes, Matcher matcher) { boolean hasPrefix = false; for (int i = 0; i < prefixes.length; i++) { @@ -2477,6 +2496,17 @@ public class AndroidUtilities { } } + public static String formatFullDuration(int duration) { + int h = duration / 3600; + int m = duration / 60 % 60; + int s = duration % 60; + if (duration < 0) { + return String.format(Locale.US, "-%02d:%02d:%02d", Math.abs(h), Math.abs(m), Math.abs(s)); + } else { + return String.format(Locale.US, "%02d:%02d:%02d", h, m, s); + } + } + public static String formatDurationNoHours(int duration, boolean isLong) { int m = duration / 60; int s = duration % 60; @@ -3666,10 +3696,9 @@ public class AndroidUtilities { view.setScaleY(1f); } view.setTag(1); - } else { + } else if (!show && view.getTag() != null){ view.animate().setListener(null).cancel(); if (animated) { - view.animate().alpha(1f).scaleY(1f).scaleX(1f).setDuration(150).start(); view.animate().alpha(0).scaleY(scaleFactor).scaleX(scaleFactor).setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { @@ -3680,6 +3709,13 @@ public class AndroidUtilities { view.setVisibility(View.GONE); } view.setTag(null); + } else if (!animated) { + view.animate().setListener(null).cancel(); + view.setVisibility(show ? View.VISIBLE : View.GONE); + view.setTag(show ? 1 : null); + view.setAlpha(1f); + view.setScaleX(1f); + view.setScaleY(1f); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java index fc2b16a07..e34e8528f 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/BuildVars.java @@ -18,8 +18,8 @@ public class BuildVars { public static boolean LOGS_ENABLED = false; public static boolean USE_CLOUD_STRINGS = true; public static boolean CHECK_UPDATES = true; - public static int BUILD_VERSION = 2274; - public static String BUILD_VERSION_STRING = "7.6.0"; + public static int BUILD_VERSION = 2284; + public static String BUILD_VERSION_STRING = "7.7.0"; public static int APP_ID = 4; public static String APP_HASH = "014b35b6184100b085b0d0572f9b5103"; public static String APPCENTER_HASH = "a5b5c4f5-51da-dedc-9918-d9766a22ca7c"; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java index 43512c885..571a75a6d 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ChatObject.java @@ -100,7 +100,7 @@ public class ChatObject { loadMembers(true); } - public void addSelfDummyParticipant() { + public void addSelfDummyParticipant(boolean notify) { int selfId = getSelfId(); if (participants.indexOfKey(selfId) >= 0) { return; @@ -109,16 +109,29 @@ public class ChatObject { selfDummyParticipant.peer = selfPeer; selfDummyParticipant.muted = true; selfDummyParticipant.self = true; - selfDummyParticipant.can_self_unmute = !call.join_muted; - selfDummyParticipant.date = currentAccount.getConnectionsManager().getCurrentTime(); TLRPC.Chat chat = currentAccount.getMessagesController().getChat(chatId); + selfDummyParticipant.can_self_unmute = !call.join_muted || ChatObject.canManageCalls(chat); + selfDummyParticipant.date = currentAccount.getConnectionsManager().getCurrentTime(); if (ChatObject.canManageCalls(chat) || !ChatObject.isChannel(chat) || chat.megagroup || selfDummyParticipant.can_self_unmute) { selfDummyParticipant.active_date = currentAccount.getConnectionsManager().getCurrentTime(); } + if (selfId > 0) { + TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount.getCurrentAccount()).getUserFull(selfId); + if (userFull != null) { + selfDummyParticipant.about = userFull.about; + } + } else { + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount.getCurrentAccount()).getChatFull(-selfId); + if (chatFull != null) { + selfDummyParticipant.about = chatFull.about; + } + } participants.put(selfId, selfDummyParticipant); sortedParticipants.add(selfDummyParticipant); sortParticipants(); - currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false); + if (notify) { + currentAccount.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, chatId, call.id, false); + } } public void migrateToChat(TLRPC.Chat chat) { @@ -129,6 +142,14 @@ public class ChatObject { } } + public boolean shouldShowPanel() { + return call.participants_count > 0 || isScheduled(); + } + + public boolean isScheduled() { + return (call.flags & 128) != 0; + } + private int getSelfId() { int selfId; if (selfPeer != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java index 56dc589c4..dbbf415c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/DownloadController.java @@ -400,7 +400,7 @@ public class DownloadController extends BaseController implements NotificationCe if (type == AUTODOWNLOAD_TYPE_PHOTO) { return PRESET_SIZE_NUM_PHOTO; } else if (type == AUTODOWNLOAD_TYPE_AUDIO) { - return PRESET_SIZE_NUM_AUDIO; + return PRESET_SIZE_NUM_DOCUMENT; } else if (type == AUTODOWNLOAD_TYPE_VIDEO) { return PRESET_SIZE_NUM_VIDEO; } else if (type == AUTODOWNLOAD_TYPE_DOCUMENT) { @@ -663,7 +663,12 @@ public class DownloadController extends BaseController implements NotificationCe preset = getCurrentMobilePreset(); } int mask = preset.mask[index]; - int maxSize = preset.sizes[typeToIndex(type)]; + int maxSize; + if (type == AUTODOWNLOAD_TYPE_AUDIO) { + maxSize = Math.max(512 * 1024, preset.sizes[typeToIndex(type)]); + } else { + maxSize = preset.sizes[typeToIndex(type)]; + } int size = MessageObject.getMessageSize(message); if (isVideo && preset.preloadVideo && size > maxSize && maxSize > 2 * 1024 * 1024) { return (mask & type) != 0 ? 2 : 0; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java index 47696f882..62edaffb8 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/FileLoadOperation.java @@ -196,7 +196,7 @@ public class FileLoadOperation { location.id = imageLocation.location.volume_id; location.volume_id = imageLocation.location.volume_id; location.local_id = imageLocation.location.local_id; - location.big = imageLocation.photoPeerBig; + location.big = imageLocation.photoPeerType == ImageLocation.TYPE_BIG; location.peer = imageLocation.photoPeer; } else if (imageLocation.stickerSet != null) { location = new TLRPC.TL_inputStickerSetThumb(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLocation.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLocation.java index 2b42979fc..e89e5593c 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageLocation.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageLocation.java @@ -23,7 +23,7 @@ public class ImageLocation { public TLRPC.PhotoSize photoSize; public TLRPC.Photo photo; - public boolean photoPeerBig; + public int photoPeerType; public TLRPC.InputPeer photoPeer; public TLRPC.InputStickerSet stickerSet; public int imageType; @@ -99,14 +99,37 @@ public class ImageLocation { } else { dc_id = photoSize.location.dc_id; } - return getForPhoto(photoSize.location, photoSize.size, photo, null, null, false, dc_id, null, photoSize.type); + return getForPhoto(photoSize.location, photoSize.size, photo, null, null, TYPE_SMALL, dc_id, null, photoSize.type); } - public static ImageLocation getForUser(TLRPC.User user, boolean big) { + public static final int TYPE_BIG = 0; + public static final int TYPE_SMALL = 1; + public static final int TYPE_STRIPPED = 2; + + public static ImageLocation getForUserOrChat(TLObject object, int type) { + if (object instanceof TLRPC.User) { + return getForUser((TLRPC.User) object, type); + } else if (object instanceof TLRPC.Chat) { + return getForChat((TLRPC.Chat) object, type); + } + return null; + } + + public static ImageLocation getForUser(TLRPC.User user, int type) { if (user == null || user.access_hash == 0 || user.photo == null) { return null; } - TLRPC.FileLocation fileLocation = big ? user.photo.photo_big : user.photo.photo_small; + if (type == TYPE_STRIPPED) { + if (user.photo.stripped_thumb == null) { + return null; + } + ImageLocation imageLocation = new ImageLocation(); + imageLocation.photoSize = new TLRPC.TL_photoStrippedSize(); + imageLocation.photoSize.type = "s"; + imageLocation.photoSize.bytes = user.photo.stripped_thumb; + return imageLocation; + } + TLRPC.FileLocation fileLocation = type == TYPE_BIG ? user.photo.photo_big : user.photo.photo_small; if (fileLocation == null) { return null; } @@ -119,14 +142,24 @@ public class ImageLocation { } else { dc_id = fileLocation.dc_id; } - return getForPhoto(fileLocation, 0, null, null, inputPeer, big, dc_id, null, null); + return getForPhoto(fileLocation, 0, null, null, inputPeer, type, dc_id, null, null); } - public static ImageLocation getForChat(TLRPC.Chat chat, boolean big) { + public static ImageLocation getForChat(TLRPC.Chat chat, int type) { if (chat == null || chat.photo == null) { return null; } - TLRPC.FileLocation fileLocation = big ? chat.photo.photo_big : chat.photo.photo_small; + if (type == TYPE_STRIPPED) { + if (chat.photo.stripped_thumb == null) { + return null; + } + ImageLocation imageLocation = new ImageLocation(); + imageLocation.photoSize = new TLRPC.TL_photoStrippedSize(); + imageLocation.photoSize.type = "s"; + imageLocation.photoSize.bytes = chat.photo.stripped_thumb; + return imageLocation; + } + TLRPC.FileLocation fileLocation = type == TYPE_BIG ? chat.photo.photo_big : chat.photo.photo_small; if (fileLocation == null) { return null; } @@ -148,7 +181,7 @@ public class ImageLocation { } else { dc_id = fileLocation.dc_id; } - return getForPhoto(fileLocation, 0, null, null, inputPeer, big, dc_id, null, null); + return getForPhoto(fileLocation, 0, null, null, inputPeer, type, dc_id, null, null); } public static ImageLocation getForSticker(TLRPC.PhotoSize photoSize, TLRPC.Document sticker) { @@ -163,7 +196,7 @@ public class ImageLocation { if (stickerSet == null) { return null; } - ImageLocation imageLocation = getForPhoto(photoSize.location, photoSize.size, null, null, null, false, sticker.dc_id, stickerSet, photoSize.type); + ImageLocation imageLocation = getForPhoto(photoSize.location, photoSize.size, null, null, null, TYPE_SMALL, sticker.dc_id, stickerSet, photoSize.type); if (MessageObject.isAnimatedStickerDocument(sticker, true)) { imageLocation.imageType = FileLoader.IMAGE_TYPE_LOTTIE; } @@ -174,7 +207,7 @@ public class ImageLocation { if (videoSize == null || document == null) { return null; } - ImageLocation location = getForPhoto(videoSize.location, videoSize.size, null, document, null, false, document.dc_id, null, videoSize.type); + ImageLocation location = getForPhoto(videoSize.location, videoSize.size, null, document, null, TYPE_SMALL, document.dc_id, null, videoSize.type); location.imageType = FileLoader.IMAGE_TYPE_ANIMATION; return location; } @@ -183,7 +216,7 @@ public class ImageLocation { if (videoSize == null || photo == null) { return null; } - ImageLocation location = getForPhoto(videoSize.location, videoSize.size, photo, null, null, false, photo.dc_id, null, videoSize.type); + ImageLocation location = getForPhoto(videoSize.location, videoSize.size, photo, null, null, TYPE_SMALL, photo.dc_id, null, videoSize.type); location.imageType = FileLoader.IMAGE_TYPE_ANIMATION; if ((videoSize.flags & 1) != 0) { location.videoSeekTo = (int) (videoSize.video_start_ts * 1000); @@ -199,7 +232,7 @@ public class ImageLocation { } else if (photoSize == null || document == null) { return null; } - return getForPhoto(photoSize.location, photoSize.size, null, document, null, false, document.dc_id, null, photoSize.type); + return getForPhoto(photoSize.location, photoSize.size, null, document, null, TYPE_SMALL, document.dc_id, null, photoSize.type); } public static ImageLocation getForLocal(TLRPC.FileLocation location) { @@ -215,7 +248,7 @@ public class ImageLocation { return imageLocation; } - private static ImageLocation getForPhoto(TLRPC.FileLocation location, int size, TLRPC.Photo photo, TLRPC.Document document, TLRPC.InputPeer photoPeer, boolean photoPeerBig, int dc_id, TLRPC.InputStickerSet stickerSet, String thumbSize) { + private static ImageLocation getForPhoto(TLRPC.FileLocation location, int size, TLRPC.Photo photo, TLRPC.Document document, TLRPC.InputPeer photoPeer, int photoPeerType, int dc_id, TLRPC.InputStickerSet stickerSet, String thumbSize) { if (location == null || photo == null && photoPeer == null && stickerSet == null && document == null) { return null; } @@ -224,7 +257,7 @@ public class ImageLocation { imageLocation.photo = photo; imageLocation.currentSize = size; imageLocation.photoPeer = photoPeer; - imageLocation.photoPeerBig = photoPeerBig; + imageLocation.photoPeerType = photoPeerType; imageLocation.stickerSet = stickerSet; if (location instanceof TLRPC.TL_fileLocationToBeDeprecated) { imageLocation.location = (TLRPC.TL_fileLocationToBeDeprecated) location; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java index c5ce9f6db..bee51b37f 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/ImageReceiver.java @@ -313,6 +313,10 @@ public class ImageReceiver implements NotificationCenter.NotificationCenterDeleg setImage(imageLocation, imageFilter, thumbLocation, thumbFilter, null, size, ext, parentObject, cacheType); } + public void setImage(ImageLocation fileLocation, String fileFilter, ImageLocation thumbLocation, String thumbFilter, Drawable thumb, Object parentObject, int cacheType) { + setImage(null, null, fileLocation, fileFilter, thumbLocation, thumbFilter, thumb, 0, null, parentObject, cacheType); + } + public void setImage(ImageLocation fileLocation, String fileFilter, ImageLocation thumbLocation, String thumbFilter, Drawable thumb, int size, String ext, Object parentObject, int cacheType) { setImage(null, null, fileLocation, fileFilter, thumbLocation, thumbFilter, thumb, size, ext, parentObject, cacheType); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java index 3add96e88..c59af7456 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/LocaleController.java @@ -65,7 +65,7 @@ public class LocaleController { public FastDateFormat formatterScheduleDay; public FastDateFormat formatterScheduleYear; public FastDateFormat formatterMonthYear; - public FastDateFormat[] formatterScheduleSend = new FastDateFormat[6]; + public FastDateFormat[] formatterScheduleSend = new FastDateFormat[15]; private HashMap allRules = new HashMap<>(); @@ -1087,7 +1087,53 @@ public class LocaleController { } } + private static char[] defaultNumbers = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + private static char[][] otherNumbers = new char[][]{ + {'٠', '١', '٢', '٣', '٤', '٥', '٦', '٧', '٨', '٩'}, + {'۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'}, + {'०', '१', '२', '३', '४', '५', '६', '७', '८', '९'}, + {'૦', '૧', '૨', '૩', '૪', '૫', '૬', '૭', '૮', '૯'}, + {'੦', '੧', '੨', '੩', '੪', '੫', '੬', '੭', '੮', '੯'}, + {'০', '১', '২', '৩', '৪', '৫', '৬', '৭', '৮', '৯'}, + {'೦', '೧', '೨', '೩', '೪', '೫', '೬', '೭', '೮', '೯'}, + {'୦', '୧', '୨', '୩', '୪', '୫', '୬', '୭', '୮', '୯'}, + {'൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯'}, + {'௦', '௧', '௨', '௩', '௪', '௫', '௬', '௭', '௮', '௯'}, + {'౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯'}, + {'၀', '၁', '၂', '၃', '၄', '၅', '၆', '၇', '၈', '၉'}, + {'༠', '༡', '༢', '༣', '༤', '༥', '༦', '༧', '༨', '༩'}, + {'᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙'}, + {'០', '១', '២', '៣', '៤', '៥', '៦', '៧', '៨', '៩'}, + {'๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'}, + {'໐', '໑', '໒', '໓', '໔', '໕', '໖', '໗', '໘', '໙'}, + {'꧐', '꧑', '꧒', '꧓', '꧔', '꧕', '꧖', '꧗', '꧘', '꧙'} + }; + + public static String fixNumbers(CharSequence numbers) { + StringBuilder builder = new StringBuilder(numbers); + for (int c = 0, N = builder.length(); c < N; c++) { + char ch = builder.charAt(c); + if (ch >= '0' && ch <= '9' || ch == '.' || ch == ',') { + continue; + } + for (int a = 0; a < otherNumbers.length; a++) { + for (int b = 0; b < otherNumbers[a].length; b++) { + if (ch == otherNumbers[a][b]) { + builder.setCharAt(c, defaultNumbers[b]); + a = otherNumbers.length; + break; + } + } + } + } + return builder.toString(); + } + public String formatCurrencyString(long amount, String type) { + return formatCurrencyString(amount, true, type); + } + + public String formatCurrencyString(long amount, boolean fixAnything, String type) { type = type.toUpperCase(); String customFormat; double doubleAmount; @@ -1102,7 +1148,7 @@ public class LocaleController { case "IRR": doubleAmount = amount / 100.0f; - if (amount % 100 == 0) { + if (fixAnything && amount % 100 == 0) { customFormat = " %.0f"; } else { customFormat = " %.2f"; @@ -1158,7 +1204,7 @@ public class LocaleController { if (currency != null) { NumberFormat format = NumberFormat.getCurrencyInstance(currentLocale != null ? currentLocale : systemDefaultLocale); format.setCurrency(currency); - if (type.equals("IRR")) { + if (fixAnything && type.equals("IRR")) { format.setMaximumFractionDigits(0); } return (discount ? "-" : "") + format.format(doubleAmount); @@ -1166,6 +1212,46 @@ public class LocaleController { return (discount ? "-" : "") + String.format(Locale.US, type + customFormat, doubleAmount); } + public static int getCurrencyExpDivider(String type) { + switch (type) { + case "CLF": + return 10000; + case "BHD": + case "IQD": + case "JOD": + case "KWD": + case "LYD": + case "OMR": + case "TND": + return 1000; + case "BIF": + case "BYR": + case "CLP": + case "CVE": + case "DJF": + case "GNF": + case "ISK": + case "JPY": + case "KMF": + case "KRW": + case "MGA": + case "PYG": + case "RWF": + case "UGX": + case "UYI": + case "VND": + case "VUV": + case "XAF": + case "XOF": + case "XPF": + return 1; + case "MRO": + return 10; + default: + return 100; + } + } + public String formatCurrencyDecimalString(long amount, String type, boolean inludeType) { type = type.toUpperCase(); String customFormat; @@ -1559,12 +1645,57 @@ public class LocaleController { formatterScheduleSend[3] = createFormatter(locale, getStringInternal("RemindTodayAt", R.string.RemindTodayAt), "'Remind today at' HH:mm"); formatterScheduleSend[4] = createFormatter(locale, getStringInternal("RemindDayAt", R.string.RemindDayAt), "'Remind on' MMM d 'at' HH:mm"); formatterScheduleSend[5] = createFormatter(locale, getStringInternal("RemindDayYearAt", R.string.RemindDayYearAt), "'Remind on' MMM d yyyy 'at' HH:mm"); + formatterScheduleSend[6] = createFormatter(locale, getStringInternal("StartTodayAt", R.string.StartTodayAt), "'Start today at' HH:mm"); + formatterScheduleSend[7] = createFormatter(locale, getStringInternal("StartDayAt", R.string.StartDayAt), "'Start on' MMM d 'at' HH:mm"); + formatterScheduleSend[8] = createFormatter(locale, getStringInternal("StartDayYearAt", R.string.StartDayYearAt), "'Start on' MMM d yyyy 'at' HH:mm"); + formatterScheduleSend[9] = createFormatter(locale, getStringInternal("StartShortTodayAt", R.string.StartShortTodayAt), "'Today,' HH:mm"); + formatterScheduleSend[10] = createFormatter(locale, getStringInternal("StartShortDayAt", R.string.StartShortDayAt), "MMM d',' HH:mm"); + formatterScheduleSend[11] = createFormatter(locale, getStringInternal("StartShortDayYearAt", R.string.StartShortDayYearAt), "MMM d yyyy, HH:mm"); + formatterScheduleSend[12] = createFormatter(locale, getStringInternal("StartsTodayAt", R.string.StartsTodayAt), "'Starts today at' HH:mm"); + formatterScheduleSend[13] = createFormatter(locale, getStringInternal("StartsDayAt", R.string.StartsDayAt), "'Starts on' MMM d 'at' HH:mm"); + formatterScheduleSend[14] = createFormatter(locale, getStringInternal("StartsDayYearAt", R.string.StartsDayYearAt), "'Starts on' MMM d yyyy 'at' HH:mm"); } public static boolean isRTLCharacter(char ch) { return Character.getDirectionality(ch) == Character.DIRECTIONALITY_RIGHT_TO_LEFT || Character.getDirectionality(ch) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC || Character.getDirectionality(ch) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING || Character.getDirectionality(ch) == Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE; } + public static String formatStartsTime(long date, int type) { + return formatStartsTime(date, type, true); + } + + public static String formatStartsTime(long date, int type, boolean needToday) { + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int currentYear = calendar.get(Calendar.YEAR); + int currentDay = calendar.get(Calendar.DAY_OF_YEAR); + + calendar.setTimeInMillis(date * 1000); + int selectedYear = calendar.get(Calendar.YEAR); + int selectedDay = calendar.get(Calendar.DAY_OF_YEAR); + + int num; + if (currentYear == selectedYear) { + if (needToday && selectedDay == currentDay) { + num = 0; + } else { + num = 1; + } + } else { + num = 2; + } + if (type == 1) { + num += 3; + } else if (type == 2) { + num += 6; + } else if (type == 3) { + num += 9; + } else if (type == 4) { + num += 12; + } + return LocaleController.getInstance().formatterScheduleSend[num].format(calendar.getTimeInMillis()); + } + public static String formatSectionDate(long date) { try { date *= 1000; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java index acd7aa99c..b7ebe4032 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaController.java @@ -883,7 +883,7 @@ public class MediaController implements AudioManager.OnAudioFocusChangeListener, } proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); PowerManager powerManager = (PowerManager) ApplicationLoader.applicationContext.getSystemService(Context.POWER_SERVICE); - proximityWakeLock = powerManager.newWakeLock(0x00000020, "proximity"); + proximityWakeLock = powerManager.newWakeLock(0x00000020, "telegram:proximity_lock"); } catch (Exception e) { FileLog.e(e); } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java index 4dfe444a5..f164f841e 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MediaDataController.java @@ -144,6 +144,8 @@ public class MediaDataController extends BaseController { public static final int TYPE_FEATURED = 3; public static final int TYPE_EMOJI = 4; + public static final int TYPE_GREETINGS = 3; + private ArrayList[] stickerSets = new ArrayList[]{new ArrayList<>(), new ArrayList<>(), new ArrayList<>(0), new ArrayList<>(), new ArrayList<>()}; private LongSparseArray[] stickersByIds = new LongSparseArray[]{new LongSparseArray<>(), new LongSparseArray<>(), new LongSparseArray<>(), new LongSparseArray<>(), new LongSparseArray<>()}; private LongSparseArray stickerSetsById = new LongSparseArray<>(); @@ -168,9 +170,9 @@ public class MediaDataController extends BaseController { private HashMap> allStickers = new HashMap<>(); private HashMap> allStickersFeatured = new HashMap<>(); - private ArrayList[] recentStickers = new ArrayList[]{new ArrayList<>(), new ArrayList<>(), new ArrayList<>()}; - private boolean[] loadingRecentStickers = new boolean[3]; - private boolean[] recentStickersLoaded = new boolean[3]; + private ArrayList[] recentStickers = new ArrayList[]{new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>()}; + private boolean[] loadingRecentStickers = new boolean[4]; + private boolean[] recentStickersLoaded = new boolean[4]; private ArrayList recentGifs = new ArrayList<>(); private boolean loadingRecentGifs; @@ -185,8 +187,10 @@ public class MediaDataController extends BaseController { private boolean loadingFeaturedStickers; private boolean featuredStickersLoaded; + private TLRPC.Document greetingsSticker; + public void cleanup() { - for (int a = 0; a < 3; a++) { + for (int a = 0; a < recentStickers.length; a++) { recentStickers[a].clear(); loadingRecentStickers[a] = false; recentStickersLoaded[a] = false; @@ -283,7 +287,7 @@ public class MediaDataController extends BaseController { } public void addRecentSticker(final int type, Object parentObject, TLRPC.Document document, int date, boolean remove) { - if (!MessageObject.isStickerDocument(document) && !MessageObject.isAnimatedStickerDocument(document, true)) { + if (type == TYPE_GREETINGS || !MessageObject.isStickerDocument(document) && !MessageObject.isAnimatedStickerDocument(document, true)) { return; } boolean found = false; @@ -749,6 +753,8 @@ public class MediaDataController extends BaseController { cacheType = 3; } else if (type == TYPE_MASK) { cacheType = 4; + } else if (type == TYPE_GREETINGS) { + cacheType = 6; } else { cacheType = 5; } @@ -777,6 +783,9 @@ public class MediaDataController extends BaseController { loadingRecentStickers[type] = false; recentStickersLoaded[type] = true; } + if (type == TYPE_GREETINGS) { + preloadNextGreetingsSticker(); + } getNotificationCenter().postNotificationName(NotificationCenter.recentDocumentsDidLoad, gif, type); loadRecents(type, gif, false, false); }); @@ -794,6 +803,8 @@ public class MediaDataController extends BaseController { lastLoadTime = preferences.getLong("lastStickersLoadTime", 0); } else if (type == TYPE_MASK) { lastLoadTime = preferences.getLong("lastStickersLoadTimeMask", 0); + } else if (type == TYPE_GREETINGS) { + lastLoadTime = preferences.getLong("lastStickersLoadTimeGreet", 0); } else { lastLoadTime = preferences.getLong("lastStickersLoadTimeFavs", 0); } @@ -823,6 +834,11 @@ public class MediaDataController extends BaseController { TLRPC.TL_messages_getFavedStickers req = new TLRPC.TL_messages_getFavedStickers(); req.hash = calcDocumentsHash(recentStickers[type]); request = req; + } else if (type == TYPE_GREETINGS) { + TLRPC.TL_messages_getStickers req = new TLRPC.TL_messages_getStickers(); + req.emoticon = "\uD83D\uDC4B" + Emoji.fixEmoji("⭐"); + req.hash = calcDocumentsHash(recentStickers[type]); + request = req; } else { TLRPC.TL_messages_getRecentStickers req = new TLRPC.TL_messages_getRecentStickers(); req.hash = calcDocumentsHash(recentStickers[type]); @@ -831,7 +847,12 @@ public class MediaDataController extends BaseController { } getConnectionsManager().sendRequest(request, (response, error) -> { ArrayList arrayList = null; - if (type == TYPE_FAVE) { + if (type == TYPE_GREETINGS) { + if (response instanceof TLRPC.TL_messages_stickers) { + TLRPC.TL_messages_stickers res = (TLRPC.TL_messages_stickers) response; + arrayList = res.stickers; + } + } else if (type == TYPE_FAVE) { if (response instanceof TLRPC.TL_messages_favedStickers) { TLRPC.TL_messages_favedStickers res = (TLRPC.TL_messages_favedStickers) response; arrayList = res.stickers; @@ -842,12 +863,26 @@ public class MediaDataController extends BaseController { arrayList = res.stickers; } } - processLoadedRecentDocuments(type, arrayList, gif, 0, true); + processLoadedRecentDocuments(type, arrayList, false, 0, true); }); } } } + private void preloadNextGreetingsSticker() { + if (recentStickers[TYPE_GREETINGS].isEmpty()) { + return; + } + greetingsSticker = recentStickers[TYPE_GREETINGS].get(Utilities.random.nextInt(recentStickers[TYPE_GREETINGS].size())); + getFileLoader().loadFile(ImageLocation.getForDocument(greetingsSticker), greetingsSticker, null, 0, 1); + } + + public TLRPC.Document getGreetingsSticker() { + TLRPC.Document result = greetingsSticker; + preloadNextGreetingsSticker(); + return result; + } + protected void processLoadedRecentDocuments(final int type, final ArrayList documents, final boolean gif, final int date, boolean replace) { if (documents != null) { getMessagesStorage().getStorageQueue().postRunnable(() -> { @@ -857,7 +892,9 @@ public class MediaDataController extends BaseController { if (gif) { maxCount = getMessagesController().maxRecentGifsCount; } else { - if (type == TYPE_FAVE) { + if (type == TYPE_GREETINGS) { + maxCount = 200; + } else if (type == TYPE_FAVE) { maxCount = getMessagesController().maxFaveStickersCount; } else { maxCount = getMessagesController().maxRecentStickersCount; @@ -874,6 +911,8 @@ public class MediaDataController extends BaseController { cacheType = 3; } else if (type == TYPE_MASK) { cacheType = 4; + } else if (type == TYPE_GREETINGS) { + cacheType = 6; } else { cacheType = 5; } @@ -899,9 +938,7 @@ public class MediaDataController extends BaseController { document.serializeToStream(data); state.bindByteBuffer(10, data); state.step(); - if (data != null) { - data.reuse(); - } + data.reuse(); } state.dispose(); database.commitTransaction(); @@ -931,6 +968,8 @@ public class MediaDataController extends BaseController { editor.putLong("lastStickersLoadTime", System.currentTimeMillis()).commit(); } else if (type == TYPE_MASK) { editor.putLong("lastStickersLoadTimeMask", System.currentTimeMillis()).commit(); + } else if (type == TYPE_GREETINGS) { + editor.putLong("lastStickersLoadTimeGreet", System.currentTimeMillis()).commit(); } else { editor.putLong("lastStickersLoadTimeFavs", System.currentTimeMillis()).commit(); } @@ -941,6 +980,9 @@ public class MediaDataController extends BaseController { } else { recentStickers[type] = documents; } + if (type == TYPE_GREETINGS) { + preloadNextGreetingsSticker(); + } getNotificationCenter().postNotificationName(NotificationCenter.recentDocumentsDidLoad, gif, type); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java index 5dcce812e..65cd9ca53 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessageObject.java @@ -2424,7 +2424,10 @@ public class MessageObject { if (messageOwner instanceof TLRPC.TL_messageService) { if (messageOwner.action != null) { - if (messageOwner.action instanceof TLRPC.TL_messageActionGroupCall) { + if (messageOwner.action instanceof TLRPC.TL_messageActionGroupCallScheduled) { + TLRPC.TL_messageActionGroupCallScheduled action = (TLRPC.TL_messageActionGroupCallScheduled) messageOwner.action; + messageText = LocaleController.formatString("ActionGroupCallScheduled", R.string.ActionGroupCallScheduled, LocaleController.formatStartsTime(action.schedule_date, 3, false)); + } else if (messageOwner.action instanceof TLRPC.TL_messageActionGroupCall) { if (messageOwner.action.duration != 0) { String time; int days = messageOwner.action.duration / (3600 * 24); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java index 2850da41d..3f5acd008 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesController.java @@ -313,9 +313,6 @@ public class MessagesController extends BaseController implements NotificationCe public volatile boolean ignoreSetOnline; - private ArrayList preloadedStickers = new ArrayList<>(); - private boolean preloadingSticker; - public static class FaqSearchResult { public String title; @@ -2390,7 +2387,7 @@ public class MessagesController extends BaseController implements NotificationCe editor = emojiPreferences.edit(); editor.putLong("lastGifLoadTime", 0).putLong("lastStickersLoadTime", 0).putLong("lastStickersLoadTimeMask", 0).putLong("lastStickersLoadTimeFavs", 0).commit(); editor = mainPreferences.edit(); - editor.remove("archivehint").remove("proximityhint").remove("archivehint_l").remove("gifhint").remove("soundHint").remove("dcDomainName2").remove("webFileDatacenterId").remove("themehint").remove("showFiltersTooltip").commit(); + editor.remove("archivehint").remove("proximityhint").remove("archivehint_l").remove("gifhint").remove("reminderhint").remove("soundHint").remove("dcDomainName2").remove("webFileDatacenterId").remove("themehint").remove("showFiltersTooltip").commit(); SharedPreferences preferences = ApplicationLoader.applicationContext.getSharedPreferences("shortcut_widget", Activity.MODE_PRIVATE); SharedPreferences.Editor widgetEditor = null; @@ -3006,6 +3003,9 @@ public class MessagesController extends BaseController implements NotificationCe })); } } + if (result != null && result.call instanceof TLRPC.TL_groupCallDiscarded) { + return null; + } return result; } @@ -8885,14 +8885,11 @@ public class MessagesController extends BaseController implements NotificationCe } public void updateChatAbout(int chat_id, final String about, final TLRPC.ChatFull info) { - if (info == null) { - return; - } TLRPC.TL_messages_editChatAbout req = new TLRPC.TL_messages_editChatAbout(); req.peer = getInputPeer(-chat_id); req.about = about; getConnectionsManager().sendRequest(req, (response, error) -> { - if (response instanceof TLRPC.TL_boolTrue) { + if (response instanceof TLRPC.TL_boolTrue && info != null) { AndroidUtilities.runOnUIThread(() -> { info.about = about; getMessagesStorage().updateChatInfo(info, false); @@ -9141,7 +9138,7 @@ public class MessagesController extends BaseController implements NotificationCe } } - public void changeChatAvatar(int chat_id, TLRPC.TL_inputChatPhoto oldPhoto, TLRPC.InputFile inputPhoto, final TLRPC.InputFile inputVideo, double videoStartTimestamp, String videoPath, TLRPC.FileLocation smallSize, TLRPC.FileLocation bigSize) { + public void changeChatAvatar(int chat_id, TLRPC.TL_inputChatPhoto oldPhoto, TLRPC.InputFile inputPhoto, final TLRPC.InputFile inputVideo, double videoStartTimestamp, String videoPath, TLRPC.FileLocation smallSize, TLRPC.FileLocation bigSize, Runnable callback) { TLObject request; TLRPC.InputChatPhoto inputChatPhoto; if (oldPhoto != null) { @@ -9221,7 +9218,12 @@ public class MessagesController extends BaseController implements NotificationCe } } processUpdates(updates, false); - AndroidUtilities.runOnUIThread(() -> getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_AVATAR)); + AndroidUtilities.runOnUIThread(() -> { + if (callback != null) { + callback.run(); + } + getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_AVATAR); + }); }, ConnectionsManager.RequestFlagInvokeAfter); } @@ -13977,7 +13979,7 @@ public class MessagesController extends BaseController implements NotificationCe } for (int a = 0, N = reasons.size(); a < N; a++) { TLRPC.TL_restrictionReason reason = reasons.get(a); - if ("all".equals(reason.platform) || "android".equals(reason.platform)) { + if ("all".equals(reason.platform) || !AndroidUtilities.isStandaloneApp() && !AndroidUtilities.isBetaApp() && "android".equals(reason.platform)) { return reason.text; } } @@ -14238,9 +14240,6 @@ public class MessagesController extends BaseController implements NotificationCe if (callback != null) { callback.onMessagesLoaded(isCache); } - if (lower_part > 0 && size == 0) { - preloadGreetingsSticker(); - } } } else if (id == NotificationCenter.loadingMessagesFailed && (Integer) args[0] == classGuid) { getNotificationCenter().removeObserver(this, NotificationCenter.messagesDidLoadWithoutProcess); @@ -14263,34 +14262,6 @@ public class MessagesController extends BaseController implements NotificationCe } } - public void preloadGreetingsSticker() { - if (preloadingSticker) { - return; - } - preloadingSticker = true; - TLRPC.TL_messages_getStickers req = new TLRPC.TL_messages_getStickers(); - req.emoticon = "\uD83D\uDC4B" + Emoji.fixEmoji("⭐"); - ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> { - if (response instanceof TLRPC.TL_messages_stickers) { - ArrayList list = ((TLRPC.TL_messages_stickers) response).stickers; - if (!list.isEmpty()) { - AndroidUtilities.runOnUIThread(() -> { - for (int i = 0; i < list.size(); i++) { - TLRPC.Document sticker = list.get(i); - FileLoader.getInstance(currentAccount).loadFile(ImageLocation.getForDocument(sticker), sticker, null, 0, 1); - preloadedStickers.add(sticker); - } - NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.greetingsStickerLoaded); - }); - } - } - }); - } - - public TLRPC.Document getPreloadedSticker() { - return !preloadedStickers.isEmpty() ? preloadedStickers.get(Utilities.random.nextInt(preloadedStickers.size())) : null; - } - public interface MessagesLoadedCallback { void onMessagesLoaded(boolean fromCache); void onError(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java index 027d952bc..effd95114 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/MessagesStorage.java @@ -6562,6 +6562,7 @@ public class MessagesStorage extends BaseController { } int minId = Integer.MAX_VALUE; int maxId = Integer.MIN_VALUE; + ArrayList messageIdsToFix = null; if (cursor != null) { while (cursor.next()) { messagesCount++; @@ -6572,7 +6573,14 @@ public class MessagesStorage extends BaseController { if (data != null) { TLRPC.Message message = TLRPC.Message.TLdeserialize(data, data.readInt32(false), false); message.send_state = cursor.intValue(2); - message.id = cursor.intValue(3); + long fullMid = cursor.longValue(3); + message.id = (int) fullMid; + if ((fullMid & 0xffffffff00000000L) == 0xffffffff00000000L && message.id > 0) { + if (messageIdsToFix == null) { + messageIdsToFix = new ArrayList<>(); + } + messageIdsToFix.add(fullMid); + } if (message.id > 0 && message.send_state != 0 && message.send_state != 3) { message.send_state = 0; } @@ -6678,6 +6686,18 @@ public class MessagesStorage extends BaseController { } cursor.dispose(); } + if (messageIdsToFix != null) { //TODO remove later + SQLitePreparedStatement state = database.executeFast("UPDATE messages SET mid = ? WHERE mid = ?"); + for (int a = 0, N = messageIdsToFix.size(); a < N; a++) { + long id = messageIdsToFix.get(a); + state.requery(); + state.bindLong(1, (int) id); + state.bindLong(2, id); + state.step(); + } + state.dispose(); + } + Collections.sort(res.messages, (lhs, rhs) -> { if (lhs.id > 0 && rhs.id > 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NativeLoader.java b/TMessagesProj/src/main/java/org/telegram/messenger/NativeLoader.java index 80cba1486..03c91b1ad 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NativeLoader.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NativeLoader.java @@ -22,7 +22,7 @@ import java.util.zip.ZipFile; public class NativeLoader { - private final static int LIB_VERSION = 37; + private final static int LIB_VERSION = 38; private final static String LIB_NAME = "tmessages." + LIB_VERSION; private final static String LIB_SO_NAME = "lib" + LIB_NAME + ".so"; private final static String LOCALE_LIB_SO_NAME = "lib" + LIB_NAME + "loc.so"; diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java index 0327aa6f2..436821059 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationCenter.java @@ -213,7 +213,6 @@ public class NotificationCenter { public static final int webRtcMicAmplitudeEvent = totalEvents++; public static final int webRtcSpeakerAmplitudeEvent = totalEvents++; public static final int showBulletin = totalEvents++; - public static final int greetingsStickerLoaded = totalEvents++; private SparseArray> observers = new SparseArray<>(); private SparseArray> removeAfterBroadcast = new SparseArray<>(); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java index 036581e2a..dface0ef3 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/NotificationsController.java @@ -1404,6 +1404,8 @@ public class NotificationsController extends BaseController { } } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionGroupCall) { return LocaleController.formatString("NotificationGroupCreatedCall", R.string.NotificationGroupCreatedCall, name, chat.title); + } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionGroupCallScheduled) { + return messageObject.messageText.toString(); } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionInviteToGroupCall) { int singleUserId = messageObject.messageOwner.action.user_id; if (singleUserId == 0 && messageObject.messageOwner.action.users.size() == 1) { @@ -2023,6 +2025,8 @@ public class NotificationsController extends BaseController { } } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionGroupCall) { msg = LocaleController.formatString("NotificationGroupCreatedCall", R.string.NotificationGroupCreatedCall, name, chat.title); + } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionGroupCallScheduled) { + msg = messageObject.messageText.toString(); } else if (messageObject.messageOwner.action instanceof TLRPC.TL_messageActionInviteToGroupCall) { int singleUserId = messageObject.messageOwner.action.user_id; if (singleUserId == 0 && messageObject.messageOwner.action.users.size() == 1) { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java index 28ba33868..cd34b18f6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SendMessagesHelper.java @@ -42,6 +42,7 @@ import android.widget.Toast; import androidx.annotation.UiThread; import androidx.core.view.inputmethod.InputContentInfoCompat; +import org.json.JSONObject; import org.telegram.messenger.audioinfo.AudioInfo; import org.telegram.messenger.support.SparseLongArray; import org.telegram.tgnet.ConnectionsManager; @@ -1616,7 +1617,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe TLRPC.TL_keyboardButtonRow newRow = null; for (int c = 0, N2 = oldRow.buttons.size(); c < N2; c++) { TLRPC.KeyboardButton button = oldRow.buttons.get(c); - if (button instanceof TLRPC.TL_keyboardButtonUrlAuth || button instanceof TLRPC.TL_keyboardButtonUrl || button instanceof TLRPC.TL_keyboardButtonSwitchInline) { + if (button instanceof TLRPC.TL_keyboardButtonUrlAuth || button instanceof TLRPC.TL_keyboardButtonUrl || button instanceof TLRPC.TL_keyboardButtonSwitchInline || button instanceof TLRPC.TL_keyboardButtonBuy) { if (button instanceof TLRPC.TL_keyboardButtonUrlAuth) { TLRPC.TL_keyboardButtonUrlAuth auth = new TLRPC.TL_keyboardButtonUrlAuth(); auth.flags = button.flags; @@ -2541,9 +2542,9 @@ public class SendMessagesHelper extends BaseController implements NotificationCe if (response instanceof TLRPC.TL_payments_paymentForm) { final TLRPC.TL_payments_paymentForm form = (TLRPC.TL_payments_paymentForm) response; getMessagesController().putUsers(form.users, false); - parentFragment.presentFragment(new PaymentFormActivity(form, messageObject)); + parentFragment.presentFragment(new PaymentFormActivity(form, messageObject, parentFragment)); } else if (response instanceof TLRPC.TL_payments_paymentReceipt) { - parentFragment.presentFragment(new PaymentFormActivity(messageObject, (TLRPC.TL_payments_paymentReceipt) response)); + parentFragment.presentFragment(new PaymentFormActivity((TLRPC.TL_payments_paymentReceipt) response)); } } else { TLRPC.TL_messages_botCallbackAnswer res = (TLRPC.TL_messages_botCallbackAnswer) response; @@ -2730,10 +2731,26 @@ public class SendMessagesHelper extends BaseController implements NotificationCe if ((messageObject.messageOwner.media.flags & 4) == 0) { TLRPC.TL_payments_getPaymentForm req = new TLRPC.TL_payments_getPaymentForm(); req.msg_id = messageObject.getId(); + req.peer = getMessagesController().getInputPeer(messageObject.messageOwner.peer_id); + try { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("bg_color", Theme.getColor(Theme.key_windowBackgroundWhite)); + jsonObject.put("text_color", Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + jsonObject.put("hint_color", Theme.getColor(Theme.key_windowBackgroundWhiteHintText)); + jsonObject.put("link_color", Theme.getColor(Theme.key_windowBackgroundWhiteLinkText)); + jsonObject.put("button_color", Theme.getColor(Theme.key_featuredStickers_addButton)); + jsonObject.put("button_text_color", Theme.getColor(Theme.key_featuredStickers_buttonText)); + req.theme_params = new TLRPC.TL_dataJSON(); + req.theme_params.data = jsonObject.toString(); + req.flags |= 1; + } catch (Exception e) { + FileLog.e(e); + } getConnectionsManager().sendRequest(req, requestDelegate, ConnectionsManager.RequestFlagFailOnServerErrors); } else { TLRPC.TL_payments_getPaymentReceipt req = new TLRPC.TL_payments_getPaymentReceipt(); req.msg_id = messageObject.messageOwner.media.receipt_msg_id; + req.peer = getMessagesController().getInputPeer(messageObject.messageOwner.peer_id); getConnectionsManager().sendRequest(req, requestDelegate, ConnectionsManager.RequestFlagFailOnServerErrors); } } else { @@ -2815,38 +2832,42 @@ public class SendMessagesHelper extends BaseController implements NotificationCe } public void sendMessage(MessageObject retryMessageObject) { - sendMessage(null, null, null, null, null, null, null, null, null, retryMessageObject.getDialogId(), retryMessageObject.messageOwner.attachPath, null, null, null, true, retryMessageObject, null, retryMessageObject.messageOwner.reply_markup, retryMessageObject.messageOwner.params, !retryMessageObject.messageOwner.silent, retryMessageObject.scheduled ? retryMessageObject.messageOwner.date : 0, 0, null); + sendMessage(null, null, null, null, null, null, null, null, null, null, retryMessageObject.getDialogId(), retryMessageObject.messageOwner.attachPath, null, null, null, true, retryMessageObject, null, retryMessageObject.messageOwner.reply_markup, retryMessageObject.messageOwner.params, !retryMessageObject.messageOwner.silent, retryMessageObject.scheduled ? retryMessageObject.messageOwner.date : 0, 0, null); } public void sendMessage(TLRPC.User user, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { - sendMessage(null, null, null, null, null, user, null, null, null, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); + sendMessage(null, null, null, null, null, user, null, null, null, null, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); + } + + public void sendMessage(TLRPC.TL_messageMediaInvoice invoice, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { + sendMessage(null, null, null, null, null, null, null, null, null, invoice, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); } public void sendMessage(TLRPC.TL_document document, VideoEditedInfo videoEditedInfo, String path, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, String caption, ArrayList entities, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate, int ttl, Object parentObject) { - sendMessage(null, caption, null, null, videoEditedInfo, null, document, null, null, peer, path, replyToMsg, replyToTopMsg, null, true, null, entities, replyMarkup, params, notify, scheduleDate, ttl, parentObject); + sendMessage(null, caption, null, null, videoEditedInfo, null, document, null, null, null, peer, path, replyToMsg, replyToTopMsg, null, true, null, entities, replyMarkup, params, notify, scheduleDate, ttl, parentObject); } public void sendMessage(String message, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.WebPage webPage, boolean searchLinks, ArrayList entities, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { - sendMessage(message, null, null, null, null, null, null, null, null, peer, null, replyToMsg, replyToTopMsg, webPage, searchLinks, null, entities, replyMarkup, params, notify, scheduleDate, 0, null); + sendMessage(message, null, null, null, null, null, null, null, null, null, peer, null, replyToMsg, replyToTopMsg, webPage, searchLinks, null, entities, replyMarkup, params, notify, scheduleDate, 0, null); } public void sendMessage(TLRPC.MessageMedia location, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { - sendMessage(null, null, location, null, null, null, null, null, null, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); + sendMessage(null, null, location, null, null, null, null, null, null, null, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); } public void sendMessage(TLRPC.TL_messageMediaPoll poll, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { - sendMessage(null, null, null, null, null, null, null, null, poll, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); + sendMessage(null, null, null, null, null, null, null, null, poll, null, peer, null, replyToMsg, replyToTopMsg, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); } public void sendMessage(TLRPC.TL_game game, long peer, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate) { - sendMessage(null, null, null, null, null, null, null, game, null, peer, null, null, null, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); + sendMessage(null, null, null, null, null, null, null, game, null, null, peer, null, null, null, null, true, null, null, replyMarkup, params, notify, scheduleDate, 0, null); } public void sendMessage(TLRPC.TL_photo photo, String path, long peer, MessageObject replyToMsg, MessageObject replyToTopMsg, String caption, ArrayList entities, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate, int ttl, Object parentObject) { - sendMessage(null, caption, null, photo, null, null, null, null, null, peer, path, replyToMsg, replyToTopMsg, null, true, null, entities, replyMarkup, params, notify, scheduleDate, ttl, parentObject); + sendMessage(null, caption, null, photo, null, null, null, null, null, null, peer, path, replyToMsg, replyToTopMsg, null, true, null, entities, replyMarkup, params, notify, scheduleDate, ttl, parentObject); } - private void sendMessage(String message, String caption, TLRPC.MessageMedia location, TLRPC.TL_photo photo, VideoEditedInfo videoEditedInfo, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_game game, TLRPC.TL_messageMediaPoll poll, long peer, String path, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.WebPage webPage, boolean searchLinks, MessageObject retryMessageObject, ArrayList entities, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate, int ttl, Object parentObject) { + private void sendMessage(String message, String caption, TLRPC.MessageMedia location, TLRPC.TL_photo photo, VideoEditedInfo videoEditedInfo, TLRPC.User user, TLRPC.TL_document document, TLRPC.TL_game game, TLRPC.TL_messageMediaPoll poll, TLRPC.TL_messageMediaInvoice invoice, long peer, String path, MessageObject replyToMsg, MessageObject replyToTopMsg, TLRPC.WebPage webPage, boolean searchLinks, MessageObject retryMessageObject, ArrayList entities, TLRPC.ReplyMarkup replyMarkup, HashMap params, boolean notify, int scheduleDate, int ttl, Object parentObject) { if (user != null && user.phone == null) { return; } @@ -3053,6 +3074,12 @@ public class SendMessagesHelper extends BaseController implements NotificationCe if (params != null && params.containsKey("query_id")) { type = 9; } + } else if (invoice != null) { + newMsg = new TLRPC.TL_message(); + newMsg.media = invoice; + if (params != null && params.containsKey("query_id")) { + type = 9; + } } else if (user != null) { if (encryptedChat != null) { newMsg = new TLRPC.TL_message_secret(); @@ -5040,7 +5067,7 @@ public class SendMessagesHelper extends BaseController implements NotificationCe newMsgObj.flags |= TLRPC.MESSAGE_FLAG_HAS_MEDIA; ImageLoader.saveMessageThumbs(newMsgObj); } - if (res.media instanceof TLRPC.TL_messageMediaGame && !TextUtils.isEmpty(res.message)) { + if ((res.media instanceof TLRPC.TL_messageMediaGame || res.media instanceof TLRPC.TL_messageMediaInvoice) && !TextUtils.isEmpty(res.message)) { newMsgObj.message = res.message; } if (!newMsgObj.entities.isEmpty()) { @@ -5207,7 +5234,6 @@ public class SendMessagesHelper extends BaseController implements NotificationCe getNotificationCenter().postNotificationName(NotificationCenter.messageReceivedByAck, msg_id); }); }, ConnectionsManager.RequestFlagCanCompress | ConnectionsManager.RequestFlagInvokeAfter | (req instanceof TLRPC.TL_messages_sendMessage ? ConnectionsManager.RequestFlagNeedQuickAck : 0)); - if (parentMessage != null) { parentMessage.sendDelayedRequests(); } @@ -5435,12 +5461,16 @@ public class SendMessagesHelper extends BaseController implements NotificationCe } else if (sentMessage.media instanceof TLRPC.TL_messageMediaGeo) { sentMessage.media.geo.lat = newMsg.media.geo.lat; sentMessage.media.geo._long = newMsg.media.geo._long; - } else if (sentMessage.media instanceof TLRPC.TL_messageMediaGame) { + } else if (sentMessage.media instanceof TLRPC.TL_messageMediaGame || sentMessage.media instanceof TLRPC.TL_messageMediaInvoice) { newMsg.media = sentMessage.media; - if (newMsg.media instanceof TLRPC.TL_messageMediaGame && !TextUtils.isEmpty(sentMessage.message)) { + if (!TextUtils.isEmpty(sentMessage.message)) { newMsg.entities = sentMessage.entities; newMsg.message = sentMessage.message; } + if (sentMessage.reply_markup != null) { + newMsg.reply_markup = sentMessage.reply_markup; + newMsg.flags |= TLRPC.MESSAGE_FLAG_HAS_MARKUP; + } } else if (sentMessage.media instanceof TLRPC.TL_messageMediaPoll) { newMsg.media = sentMessage.media; } @@ -6438,6 +6468,24 @@ public class SendMessagesHelper extends BaseController implements NotificationCe reason.reason = ""; user.restriction_reason.add(reason); accountInstance.getSendMessagesHelper().sendMessage(user, dialogId, replyToMsg, replyToTopMsg, result.send_message.reply_markup, params, notify, scheduleDate); + } else if (result.send_message instanceof TLRPC.TL_botInlineMessageMediaInvoice) { + if (DialogObject.isSecretDialogId(dialogId)) { + return; //doesn't work in secret chats for now + } + TLRPC.TL_botInlineMessageMediaInvoice invoice = (TLRPC.TL_botInlineMessageMediaInvoice) result.send_message; + TLRPC.TL_messageMediaInvoice messageMediaInvoice = new TLRPC.TL_messageMediaInvoice(); + messageMediaInvoice.shipping_address_requested = invoice.shipping_address_requested; + messageMediaInvoice.test = invoice.test; + messageMediaInvoice.title = invoice.title; + messageMediaInvoice.description = invoice.description; + if (invoice.photo != null) { + messageMediaInvoice.photo = invoice.photo; + messageMediaInvoice.flags |= 1; + } + messageMediaInvoice.currency = invoice.currency; + messageMediaInvoice.total_amount = invoice.total_amount; + messageMediaInvoice.start_param = ""; + accountInstance.getSendMessagesHelper().sendMessage(messageMediaInvoice, dialogId, replyToMsg, replyToTopMsg, result.send_message.reply_markup, params, notify, scheduleDate); } } @@ -7360,6 +7408,9 @@ public class SendMessagesHelper extends BaseController implements NotificationCe orientation[0] = fileDrawable.getOrientation(); } fileDrawable.recycle(); + if (bitmap == null) { + return createVideoThumbnailAtTime(filePath, time, orientation, false); + } } else { MediaMetadataRetriever retriever = new MediaMetadataRetriever(); try { diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/SvgHelper.java b/TMessagesProj/src/main/java/org/telegram/messenger/SvgHelper.java index 87917f7e4..3cf989a84 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/SvgHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/SvgHelper.java @@ -260,7 +260,11 @@ public class SvgHelper { placeholderMatrix = new Matrix(); placeholderGradient.setLocalMatrix(placeholderMatrix); for (Paint paint : paints.values()) { - paint.setShader(new ComposeShader(placeholderGradient, backgroundGradient, PorterDuff.Mode.ADD)); + if (Build.VERSION.SDK_INT <= 22) { + paint.setShader(backgroundGradient); + } else { + paint.setShader(new ComposeShader(placeholderGradient, backgroundGradient, PorterDuff.Mode.ADD)); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/WearDataLayerListenerService.java b/TMessagesProj/src/main/java/org/telegram/messenger/WearDataLayerListenerService.java index 4f7ab88a5..6f9adebb6 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/WearDataLayerListenerService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/WearDataLayerListenerService.java @@ -96,7 +96,7 @@ public class WearDataLayerListenerService extends WearableListenerService { }; AndroidUtilities.runOnUIThread(() -> { NotificationCenter.getInstance(currentAccount).addObserver(listener, NotificationCenter.fileDidLoad); - FileLoader.getInstance(currentAccount).loadFile(ImageLocation.getForUser(user, false), user, null, 1, 1); + FileLoader.getInstance(currentAccount).loadFile(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), user, null, 1, 1); }); try { barrier.await(10, TimeUnit.SECONDS); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPBaseService.java b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPBaseService.java index e3d56498e..fc8f5edde 100644 --- a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPBaseService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPBaseService.java @@ -195,6 +195,7 @@ public abstract class VoIPBaseService extends Service implements SensorEventList protected int mySource; protected String myJson; protected boolean createGroupCall; + protected int scheduleDate; protected TLRPC.InputPeer groupCallPeer; public boolean hasFewPeers; protected String joinHash; @@ -1281,38 +1282,42 @@ public abstract class VoIPBaseService extends Service implements SensorEventList protected Bitmap getRoundAvatarBitmap(TLObject userOrChat) { Bitmap bitmap = null; - if (userOrChat instanceof TLRPC.User) { - TLRPC.User user = (TLRPC.User) userOrChat; - if (user.photo != null && user.photo.photo_small != null) { - BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(user.photo.photo_small, null, "50_50"); - if (img != null) { - bitmap = img.getBitmap().copy(Bitmap.Config.ARGB_8888, true); - } else { - try { - BitmapFactory.Options opts = new BitmapFactory.Options(); - opts.inMutable = true; - bitmap = BitmapFactory.decodeFile(FileLoader.getPathToAttach(user.photo.photo_small, true).toString(), opts); - } catch (Throwable e) { - FileLog.e(e); - } - } - } - } else { - TLRPC.Chat chat = (TLRPC.Chat) userOrChat; - if (chat.photo != null && chat.photo.photo_small != null) { - BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(chat.photo.photo_small, null, "50_50"); - if (img != null) { - bitmap = img.getBitmap().copy(Bitmap.Config.ARGB_8888, true); - } else { - try { - BitmapFactory.Options opts = new BitmapFactory.Options(); - opts.inMutable = true; - bitmap = BitmapFactory.decodeFile(FileLoader.getPathToAttach(chat.photo.photo_small, true).toString(), opts); - } catch (Throwable e) { - FileLog.e(e); + try { + if (userOrChat instanceof TLRPC.User) { + TLRPC.User user = (TLRPC.User) userOrChat; + if (user.photo != null && user.photo.photo_small != null) { + BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(user.photo.photo_small, null, "50_50"); + if (img != null) { + bitmap = img.getBitmap().copy(Bitmap.Config.ARGB_8888, true); + } else { + try { + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inMutable = true; + bitmap = BitmapFactory.decodeFile(FileLoader.getPathToAttach(user.photo.photo_small, true).toString(), opts); + } catch (Throwable e) { + FileLog.e(e); + } + } + } + } else { + TLRPC.Chat chat = (TLRPC.Chat) userOrChat; + if (chat.photo != null && chat.photo.photo_small != null) { + BitmapDrawable img = ImageLoader.getInstance().getImageFromMemory(chat.photo.photo_small, null, "50_50"); + if (img != null) { + bitmap = img.getBitmap().copy(Bitmap.Config.ARGB_8888, true); + } else { + try { + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inMutable = true; + bitmap = BitmapFactory.decodeFile(FileLoader.getPathToAttach(chat.photo.photo_small, true).toString(), opts); + } catch (Throwable e) { + FileLog.e(e); + } } } } + } catch (Throwable e) { + FileLog.e(e); } if (bitmap == null) { Theme.createDialogsResources(this); diff --git a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java index f9b4b203d..bd26486d9 100755 --- a/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java +++ b/TMessagesProj/src/main/java/org/telegram/messenger/voip/VoIPService.java @@ -237,6 +237,7 @@ public class VoIPService extends VoIPBaseService { groupCallPeer.user_id = peerUserId; groupCallPeer.access_hash = intent.getLongExtra("peerAccessHash", 0); } + scheduleDate = intent.getIntExtra("scheduleDate", 0); isOutgoing = intent.getBooleanExtra("is_outgoing", false); videoCall = intent.getBooleanExtra("video_call", false); @@ -1328,6 +1329,10 @@ public class VoIPService extends VoIPBaseService { TLRPC.TL_phone_createGroupCall req = new TLRPC.TL_phone_createGroupCall(); req.peer = MessagesController.getInputPeer(chat); req.random_id = Utilities.random.nextInt(); + if (scheduleDate != 0) { + req.schedule_date = scheduleDate; + req.flags |= 2; + } ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> { if (response != null) { TLRPC.Updates updates = (TLRPC.Updates) response; @@ -1673,8 +1678,7 @@ public class VoIPService extends VoIPBaseService { connectingSoundRunnable = null; } } else { - Utilities.globalQueue.postRunnable(() -> soundPool.play(spVoiceChatStartId, 1.0f, 1.0f, 0, 0, 1)); - playedConnectedSound = true; + playConnectedSound(); } if (!wasConnected) { wasConnected = true; @@ -1866,6 +1870,11 @@ public class VoIPService extends VoIPBaseService { } } + public void playConnectedSound() { + Utilities.globalQueue.postRunnable(() -> soundPool.play(spVoiceChatStartId, 1.0f, 1.0f, 0, 0, 1)); + playedConnectedSound = true; + } + private void startConnectingSound() { Utilities.globalQueue.postRunnable(() -> { if (spPlayId != 0) { diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java index 2893c40b0..1d3c0a9a6 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/ConnectionsManager.java @@ -376,8 +376,17 @@ public class ConnectionsManager extends BaseController { if (installer == null) { installer = ""; } + String packageId = ""; + try { + packageId = ApplicationLoader.applicationContext.getPackageName(); + } catch (Throwable ignore) { - native_init(currentAccount, version, layer, apiId, deviceModel, systemVersion, appVersion, langCode, systemLangCode, configPath, logPath, regId, cFingerprint, installer, timezoneOffset, userId, enablePushConnection, ApplicationLoader.isNetworkOnline(), ApplicationLoader.getCurrentNetworkType()); + } + if (packageId == null) { + packageId = ""; + } + + native_init(currentAccount, version, layer, apiId, deviceModel, systemVersion, appVersion, langCode, systemLangCode, configPath, logPath, regId, cFingerprint, installer, packageId, timezoneOffset, userId, enablePushConnection, ApplicationLoader.isNetworkOnline(), ApplicationLoader.getCurrentNetworkType()); checkConnection(); } @@ -688,7 +697,7 @@ public class ConnectionsManager extends BaseController { public static native void native_applyDatacenterAddress(int currentAccount, int datacenterId, String ipAddress, int port); public static native int native_getConnectionState(int currentAccount); public static native void native_setUserId(int currentAccount, int id); - public static native void native_init(int currentAccount, int version, int layer, int apiId, String deviceModel, String systemVersion, String appVersion, String langCode, String systemLangCode, String configPath, String logPath, String regId, String cFingerprint, String installer, int timezoneOffset, int userId, boolean enablePushConnection, boolean hasNetwork, int networkType); + public static native void native_init(int currentAccount, int version, int layer, int apiId, String deviceModel, String systemVersion, String appVersion, String langCode, String systemLangCode, String configPath, String logPath, String regId, String cFingerprint, String installer, String packageId, int timezoneOffset, int userId, boolean enablePushConnection, boolean hasNetwork, int networkType); public static native void native_setProxySettings(int currentAccount, String address, int port, String username, String password, String secret); public static native void native_setLangCode(int currentAccount, String langCode); public static native void native_setRegId(int currentAccount, String regId); diff --git a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java index 82cad21d8..7a20689c2 100644 --- a/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java +++ b/TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java @@ -62,7 +62,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 = 126; + public static final int LAYER = 127; public static class TL_stats_megagroupStats extends TLObject { public static int constructor = 0xef7ff916; @@ -400,6 +400,7 @@ public class TLRPC { public boolean has_video; public FileLocation photo_small; public FileLocation photo_big; + public byte[] stripped_thumb; public int dc_id; public static ChatPhoto TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -415,6 +416,9 @@ public class TLRPC { result = new TL_chatPhoto_layer97(); break; case 0xd20b9f3c: + result = new TL_chatPhoto_layer126(); + break; + case 0x4790ee05: result = new TL_chatPhoto(); break; } @@ -471,7 +475,7 @@ public class TLRPC { } } - public static class TL_chatPhoto extends ChatPhoto { + public static class TL_chatPhoto_layer126 extends TL_chatPhoto { public static int constructor = 0xd20b9f3c; @@ -493,6 +497,34 @@ public class TLRPC { } } + public static class TL_chatPhoto extends ChatPhoto { + public static int constructor = 0x4790ee05; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_video = (flags & 1) != 0; + photo_small = FileLocation.TLdeserialize(stream, stream.readInt32(exception), exception); + photo_big = FileLocation.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 2) != 0) { + stripped_thumb = stream.readByteArray(exception); + } + dc_id = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_video ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + photo_small.serializeToStream(stream); + photo_big.serializeToStream(stream); + if ((flags & 2) != 0) { + stream.writeByteArray(stripped_thumb); + } + stream.writeInt32(dc_id); + } + } + public static class TL_help_termsOfService extends TLObject { public static int constructor = 0x780a0310; @@ -559,90 +591,110 @@ public class TLRPC { } } - public static class TL_payments_paymentReceipt extends TLObject { - public static int constructor = 0x500911e1; + public static class TL_payments_paymentReceipt extends TLObject { + public static int constructor = 0x10b555d0; - public int flags; - public int date; - public int bot_id; - public TL_invoice invoice; - public int provider_id; - public TL_paymentRequestedInfo info; - public TL_shippingOption shipping; - public String currency; - public long total_amount; - public String credentials_title; - public ArrayList users = new ArrayList<>(); + public int flags; + public int date; + public int bot_id; + public int provider_id; + public String title; + public String description; + public WebDocument photo; + public TL_invoice invoice; + public TL_paymentRequestedInfo info; + public TL_shippingOption shipping; + public long tip_amount; + public String currency; + public long total_amount; + public String credentials_title; + public ArrayList users = new ArrayList<>(); - public static TL_payments_paymentReceipt TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - if (TL_payments_paymentReceipt.constructor != constructor) { - if (exception) { - throw new RuntimeException(String.format("can't parse magic %x in TL_payments_paymentReceipt", constructor)); - } else { - return null; - } - } - TL_payments_paymentReceipt result = new TL_payments_paymentReceipt(); - result.readParams(stream, exception); - return result; - } + public static TL_payments_paymentReceipt TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_payments_paymentReceipt.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_payments_paymentReceipt", constructor)); + } else { + return null; + } + } + TL_payments_paymentReceipt result = new TL_payments_paymentReceipt(); + result.readParams(stream, exception); + return result; + } - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - date = stream.readInt32(exception); - bot_id = stream.readInt32(exception); - invoice = TL_invoice.TLdeserialize(stream, stream.readInt32(exception), exception); - provider_id = stream.readInt32(exception); - if ((flags & 1) != 0) { - info = TL_paymentRequestedInfo.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 2) != 0) { - shipping = TL_shippingOption.TLdeserialize(stream, stream.readInt32(exception), exception); - } - currency = stream.readString(exception); - total_amount = stream.readInt64(exception); - credentials_title = 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++) { - User object = User.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - users.add(object); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + date = stream.readInt32(exception); + bot_id = stream.readInt32(exception); + provider_id = stream.readInt32(exception); + title = stream.readString(exception); + description = stream.readString(exception); + if ((flags & 4) != 0) { + photo = WebDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + invoice = TL_invoice.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 1) != 0) { + info = TL_paymentRequestedInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 2) != 0) { + shipping = TL_shippingOption.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 8) != 0) { + tip_amount = stream.readInt64(exception); + } + currency = stream.readString(exception); + total_amount = stream.readInt64(exception); + credentials_title = 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++) { + User object = 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); - stream.writeInt32(date); - stream.writeInt32(bot_id); - invoice.serializeToStream(stream); - stream.writeInt32(provider_id); - if ((flags & 1) != 0) { - info.serializeToStream(stream); - } - if ((flags & 2) != 0) { - shipping.serializeToStream(stream); - } - stream.writeString(currency); - stream.writeInt64(total_amount); - stream.writeString(credentials_title); - stream.writeInt32(0x1cb5c415); - int count = users.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - users.get(a).serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt32(date); + stream.writeInt32(bot_id); + stream.writeInt32(provider_id); + stream.writeString(title); + stream.writeString(description); + if ((flags & 4) != 0) { + photo.serializeToStream(stream); + } + invoice.serializeToStream(stream); + if ((flags & 1) != 0) { + info.serializeToStream(stream); + } + if ((flags & 2) != 0) { + shipping.serializeToStream(stream); + } + if ((flags & 8) != 0) { + stream.writeInt64(tip_amount); + } + stream.writeString(currency); + stream.writeInt64(total_amount); + stream.writeString(credentials_title); + stream.writeInt32(0x1cb5c415); + int count = users.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + users.get(a).serializeToStream(stream); + } + } + } public static abstract class NotifyPeer extends TLObject { @@ -1876,15 +1928,17 @@ public class TLRPC { public boolean join_muted; public boolean can_change_join_muted; public boolean join_date_asc; + public boolean schedule_start_subscribed; public long id; public long access_hash; - public int duration; public int participants_count; public TL_dataJSON params; public String title; public int stream_dc_id; public int record_start_date; + public int schedule_date; public int version; + public int duration; public static GroupCall TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { GroupCall result = null; @@ -1892,7 +1946,7 @@ public class TLRPC { case 0x7780bcb4: result = new TL_groupCallDiscarded(); break; - case 0xc0c2052e: + case 0xc95c6654: result = new TL_groupCall(); break; } @@ -1925,7 +1979,7 @@ public class TLRPC { } public static class TL_groupCall extends GroupCall { - public static int constructor = 0xc0c2052e; + public static int constructor = 0xc95c6654; public void readParams(AbstractSerializedData stream, boolean exception) { @@ -1933,6 +1987,7 @@ public class TLRPC { join_muted = (flags & 2) != 0; can_change_join_muted = (flags & 4) != 0; join_date_asc = (flags & 64) != 0; + schedule_start_subscribed = (flags & 256) != 0; id = stream.readInt64(exception); access_hash = stream.readInt64(exception); participants_count = stream.readInt32(exception); @@ -1948,6 +2003,9 @@ public class TLRPC { if ((flags & 32) != 0) { record_start_date = stream.readInt32(exception); } + if ((flags & 128) != 0) { + schedule_date = stream.readInt32(exception); + } version = stream.readInt32(exception); } @@ -1956,6 +2014,7 @@ public class TLRPC { flags = join_muted ? (flags | 2) : (flags &~ 2); flags = can_change_join_muted ? (flags | 4) : (flags &~ 4); flags = join_date_asc ? (flags | 64) : (flags &~ 64); + flags = schedule_start_subscribed ? (flags | 256) : (flags &~ 256); stream.writeInt32(flags); stream.writeInt64(id); stream.writeInt64(access_hash); @@ -1972,6 +2031,9 @@ public class TLRPC { if ((flags & 32) != 0) { stream.writeInt32(record_start_date); } + if ((flags & 128) != 0) { + stream.writeInt32(schedule_date); + } stream.writeInt32(version); } } @@ -2873,101 +2935,104 @@ public class TLRPC { } } - public static class TL_payments_paymentForm extends TLObject { - public static int constructor = 0x3f56aea3; + public static class TL_payments_paymentForm extends TLObject { + public static int constructor = 0x8d0b2415; - public int flags; - public boolean can_save_credentials; - public boolean password_missing; - public int bot_id; - public TL_invoice invoice; - public int provider_id; - public String url; - public String native_provider; - public TL_dataJSON native_params; - public TL_paymentRequestedInfo saved_info; - public TL_paymentSavedCredentialsCard saved_credentials; - public ArrayList users = new ArrayList<>(); + public int flags; + public boolean can_save_credentials; + public boolean password_missing; + public long form_id; + public int bot_id; + public TL_invoice invoice; + public int provider_id; + public String url; + public String native_provider; + public TL_dataJSON native_params; + public TL_paymentRequestedInfo saved_info; + public TL_paymentSavedCredentialsCard saved_credentials; + public ArrayList users = new ArrayList<>(); - public static TL_payments_paymentForm TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - if (TL_payments_paymentForm.constructor != constructor) { - if (exception) { - throw new RuntimeException(String.format("can't parse magic %x in TL_payments_paymentForm", constructor)); - } else { - return null; - } - } - TL_payments_paymentForm result = new TL_payments_paymentForm(); - result.readParams(stream, exception); - return result; - } + public static TL_payments_paymentForm TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_payments_paymentForm.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_payments_paymentForm", constructor)); + } else { + return null; + } + } + TL_payments_paymentForm result = new TL_payments_paymentForm(); + result.readParams(stream, exception); + return result; + } - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - can_save_credentials = (flags & 4) != 0; - password_missing = (flags & 8) != 0; - bot_id = stream.readInt32(exception); - invoice = TL_invoice.TLdeserialize(stream, stream.readInt32(exception), exception); - provider_id = stream.readInt32(exception); - url = stream.readString(exception); - if ((flags & 16) != 0) { - native_provider = stream.readString(exception); - } - if ((flags & 16) != 0) { - native_params = TL_dataJSON.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 1) != 0) { - saved_info = TL_paymentRequestedInfo.TLdeserialize(stream, stream.readInt32(exception), exception); - } - if ((flags & 2) != 0) { - saved_credentials = TL_paymentSavedCredentialsCard.TLdeserialize(stream, stream.readInt32(exception), 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++) { - User object = User.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - users.add(object); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + can_save_credentials = (flags & 4) != 0; + password_missing = (flags & 8) != 0; + form_id = stream.readInt64(exception); + bot_id = stream.readInt32(exception); + invoice = TL_invoice.TLdeserialize(stream, stream.readInt32(exception), exception); + provider_id = stream.readInt32(exception); + url = stream.readString(exception); + if ((flags & 16) != 0) { + native_provider = stream.readString(exception); + } + if ((flags & 16) != 0) { + native_params = TL_dataJSON.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 1) != 0) { + saved_info = TL_paymentRequestedInfo.TLdeserialize(stream, stream.readInt32(exception), exception); + } + if ((flags & 2) != 0) { + saved_credentials = TL_paymentSavedCredentialsCard.TLdeserialize(stream, stream.readInt32(exception), 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++) { + User object = User.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + users.add(object); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - flags = can_save_credentials ? (flags | 4) : (flags &~ 4); - flags = password_missing ? (flags | 8) : (flags &~ 8); - stream.writeInt32(flags); - stream.writeInt32(bot_id); - invoice.serializeToStream(stream); - stream.writeInt32(provider_id); - stream.writeString(url); - if ((flags & 16) != 0) { - stream.writeString(native_provider); - } - if ((flags & 16) != 0) { - native_params.serializeToStream(stream); - } - if ((flags & 1) != 0) { - saved_info.serializeToStream(stream); - } - if ((flags & 2) != 0) { - saved_credentials.serializeToStream(stream); - } - stream.writeInt32(0x1cb5c415); - int count = users.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - users.get(a).serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = can_save_credentials ? (flags | 4) : (flags &~ 4); + flags = password_missing ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeInt64(form_id); + stream.writeInt32(bot_id); + invoice.serializeToStream(stream); + stream.writeInt32(provider_id); + stream.writeString(url); + if ((flags & 16) != 0) { + stream.writeString(native_provider); + } + if ((flags & 16) != 0) { + native_params.serializeToStream(stream); + } + if ((flags & 1) != 0) { + saved_info.serializeToStream(stream); + } + if ((flags & 2) != 0) { + saved_credentials.serializeToStream(stream); + } + stream.writeInt32(0x1cb5c415); + int count = users.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + users.get(a).serializeToStream(stream); + } + } + } public static abstract class ContactLink_layer101 extends TLObject { @@ -13981,323 +14046,326 @@ public class TLRPC { } } - public static abstract class BotInlineMessage extends TLObject { - public int flags; - public GeoPoint geo; - public String title; - public String address; - public String provider; - public String venue_id; - public String venue_type; - public ReplyMarkup reply_markup; - public String message; - public ArrayList entities = new ArrayList<>(); - public String phone_number; - public String first_name; - public String last_name; - public String vcard; - public boolean no_webpage; - public int period; + public static abstract class BotInlineMessage extends TLObject { + public int flags; + public GeoPoint geo; + public String title; + public String address; + public String provider; + public String venue_id; + public String venue_type; + public ReplyMarkup reply_markup; + public String message; + public ArrayList entities = new ArrayList<>(); + public String phone_number; + public String first_name; + public String last_name; + public String vcard; + public boolean no_webpage; + public int period; public int heading; public int proximity_notification_radius; - public static BotInlineMessage TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - BotInlineMessage result = null; - switch (constructor) { - case 0x4366232e: - result = new TL_botInlineMessageMediaVenue_layer77(); - break; - case 0x8a86659c: - result = new TL_botInlineMessageMediaVenue(); - break; - case 0x3a8fd8b8: - result = new TL_botInlineMessageMediaGeo_layer71(); - break; - case 0x764cf810: - result = new TL_botInlineMessageMediaAuto(); - break; - case 0xa74b15b: - result = new TL_botInlineMessageMediaAuto_layer74(); - break; - case 0x35edb4d4: - result = new TL_botInlineMessageMediaContact_layer81(); - break; - case 0x18d1cdc2: - result = new TL_botInlineMessageMediaContact(); - break; - case 0x8c7f65e2: - result = new TL_botInlineMessageText(); - break; - case 0xb722de65: - result = new TL_botInlineMessageMediaGeo_layer119(); - break; + public static BotInlineMessage TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + BotInlineMessage result = null; + switch (constructor) { + case 0x4366232e: + result = new TL_botInlineMessageMediaVenue_layer77(); + break; + case 0x8a86659c: + result = new TL_botInlineMessageMediaVenue(); + break; + case 0x3a8fd8b8: + result = new TL_botInlineMessageMediaGeo_layer71(); + break; + case 0x764cf810: + result = new TL_botInlineMessageMediaAuto(); + break; + case 0xa74b15b: + result = new TL_botInlineMessageMediaAuto_layer74(); + break; + case 0x35edb4d4: + result = new TL_botInlineMessageMediaContact_layer81(); + break; + case 0x18d1cdc2: + result = new TL_botInlineMessageMediaContact(); + break; + case 0x8c7f65e2: + result = new TL_botInlineMessageText(); + break; + case 0xb722de65: + result = new TL_botInlineMessageMediaGeo_layer119(); + break; case 0x51846fd: result = new TL_botInlineMessageMediaGeo(); break; - } - if (result == null && exception) { - throw new RuntimeException(String.format("can't parse magic %x in BotInlineMessage", constructor)); - } - if (result != null) { - result.readParams(stream, exception); - } - return result; - } - } + case 0x354a9b09: + result = new TL_botInlineMessageMediaInvoice(); + break; + } + if (result == null && exception) { + throw new RuntimeException(String.format("can't parse magic %x in BotInlineMessage", constructor)); + } + if (result != null) { + result.readParams(stream, exception); + } + return result; + } + } - public static class TL_botInlineMessageMediaVenue_layer77 extends TL_botInlineMessageMediaVenue { - public static int constructor = 0x4366232e; + public static class TL_botInlineMessageMediaVenue_layer77 extends TL_botInlineMessageMediaVenue { + public static int constructor = 0x4366232e; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); - title = stream.readString(exception); - address = stream.readString(exception); - provider = stream.readString(exception); - venue_id = stream.readString(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); + title = stream.readString(exception); + address = stream.readString(exception); + provider = stream.readString(exception); + venue_id = stream.readString(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - geo.serializeToStream(stream); - stream.writeString(title); - stream.writeString(address); - stream.writeString(provider); - stream.writeString(venue_id); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + geo.serializeToStream(stream); + stream.writeString(title); + stream.writeString(address); + stream.writeString(provider); + stream.writeString(venue_id); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaVenue extends BotInlineMessage { - public static int constructor = 0x8a86659c; + public static class TL_botInlineMessageMediaVenue extends BotInlineMessage { + public static int constructor = 0x8a86659c; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); - title = stream.readString(exception); - address = stream.readString(exception); - provider = stream.readString(exception); - venue_id = stream.readString(exception); - venue_type = stream.readString(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); + title = stream.readString(exception); + address = stream.readString(exception); + provider = stream.readString(exception); + venue_id = stream.readString(exception); + venue_type = stream.readString(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - geo.serializeToStream(stream); - stream.writeString(title); - stream.writeString(address); - stream.writeString(provider); - stream.writeString(venue_id); - stream.writeString(venue_type); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + geo.serializeToStream(stream); + stream.writeString(title); + stream.writeString(address); + stream.writeString(provider); + stream.writeString(venue_id); + stream.writeString(venue_type); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaGeo_layer71 extends TL_botInlineMessageMediaGeo { - public static int constructor = 0x3a8fd8b8; + public static class TL_botInlineMessageMediaGeo_layer71 extends TL_botInlineMessageMediaGeo { + public static int constructor = 0x3a8fd8b8; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - geo.serializeToStream(stream); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + geo.serializeToStream(stream); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaAuto extends BotInlineMessage { - public static int constructor = 0x764cf810; + public static class TL_botInlineMessageMediaAuto extends BotInlineMessage { + public static int constructor = 0x764cf810; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - message = stream.readString(exception); - 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++) { - MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - entities.add(object); - } - } - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + message = stream.readString(exception); + 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++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } + } + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - stream.writeString(message); - if ((flags & 2) != 0) { - stream.writeInt32(0x1cb5c415); - int count = entities.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - entities.get(a).serializeToStream(stream); - } - } - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(message); + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaAuto_layer74 extends TL_botInlineMessageMediaAuto { - public static int constructor = 0xa74b15b; + public static class TL_botInlineMessageMediaAuto_layer74 extends TL_botInlineMessageMediaAuto { + public static int constructor = 0xa74b15b; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - message = stream.readString(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + message = stream.readString(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - stream.writeString(message); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(message); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaContact_layer81 extends TL_botInlineMessageMediaContact { - public static int constructor = 0x35edb4d4; + public static class TL_botInlineMessageMediaContact_layer81 extends TL_botInlineMessageMediaContact { + public static int constructor = 0x35edb4d4; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - phone_number = stream.readString(exception); - first_name = stream.readString(exception); - last_name = stream.readString(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + phone_number = stream.readString(exception); + first_name = stream.readString(exception); + last_name = stream.readString(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - stream.writeString(phone_number); - stream.writeString(first_name); - stream.writeString(last_name); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(phone_number); + stream.writeString(first_name); + stream.writeString(last_name); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageMediaContact extends BotInlineMessage { - public static int constructor = 0x18d1cdc2; + public static class TL_botInlineMessageMediaContact extends BotInlineMessage { + public static int constructor = 0x18d1cdc2; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - phone_number = stream.readString(exception); - first_name = stream.readString(exception); - last_name = stream.readString(exception); - vcard = stream.readString(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + phone_number = stream.readString(exception); + first_name = stream.readString(exception); + last_name = stream.readString(exception); + vcard = stream.readString(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - stream.writeString(phone_number); - stream.writeString(first_name); - stream.writeString(last_name); - stream.writeString(vcard); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeString(phone_number); + stream.writeString(first_name); + stream.writeString(last_name); + stream.writeString(vcard); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } - public static class TL_botInlineMessageText extends BotInlineMessage { - public static int constructor = 0x8c7f65e2; + public static class TL_botInlineMessageText extends BotInlineMessage { + public static int constructor = 0x8c7f65e2; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - no_webpage = (flags & 1) != 0; - message = stream.readString(exception); - 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++) { - MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - entities.add(object); - } - } - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + no_webpage = (flags & 1) != 0; + message = stream.readString(exception); + 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++) { + MessageEntity object = MessageEntity.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + entities.add(object); + } + } + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - flags = no_webpage ? (flags | 1) : (flags &~ 1); - stream.writeInt32(flags); - stream.writeString(message); - if ((flags & 2) != 0) { - stream.writeInt32(0x1cb5c415); - int count = entities.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - entities.get(a).serializeToStream(stream); - } - } - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = no_webpage ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + stream.writeString(message); + if ((flags & 2) != 0) { + stream.writeInt32(0x1cb5c415); + int count = entities.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + entities.get(a).serializeToStream(stream); + } + } + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } public static class TL_botInlineMessageMediaGeo extends BotInlineMessage { public static int constructor = 0x51846fd; @@ -14339,29 +14407,73 @@ public class TLRPC { } } - public static class TL_botInlineMessageMediaGeo_layer119 extends TL_botInlineMessageMediaGeo { - public static int constructor = 0xb722de65; + public static class TL_botInlineMessageMediaGeo_layer119 extends TL_botInlineMessageMediaGeo { + public static int constructor = 0xb722de65; - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); - period = stream.readInt32(exception); - if ((flags & 4) != 0) { - reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + geo = GeoPoint.TLdeserialize(stream, stream.readInt32(exception), exception); + period = stream.readInt32(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - geo.serializeToStream(stream); - stream.writeInt32(period); - if ((flags & 4) != 0) { - reply_markup.serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + geo.serializeToStream(stream); + stream.writeInt32(period); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } + + public static class TL_botInlineMessageMediaInvoice extends BotInlineMessage { + public static int constructor = 0x354a9b09; + + public boolean shipping_address_requested; + public boolean test; + public String description; + public WebDocument photo; + public String currency; + public long total_amount; + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + shipping_address_requested = (flags & 2) != 0; + test = (flags & 8) != 0; + title = stream.readString(exception); + description = stream.readString(exception); + if ((flags & 1) != 0) { + photo = WebDocument.TLdeserialize(stream, stream.readInt32(exception), exception); + } + currency = stream.readString(exception); + total_amount = stream.readInt64(exception); + if ((flags & 4) != 0) { + reply_markup = ReplyMarkup.TLdeserialize(stream, stream.readInt32(exception), exception); + } + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = shipping_address_requested ? (flags | 2) : (flags &~ 2); + flags = test ? (flags | 8) : (flags &~ 8); + stream.writeInt32(flags); + stream.writeString(title); + stream.writeString(description); + if ((flags & 1) != 0) { + photo.serializeToStream(stream); + } + stream.writeString(currency); + stream.writeInt64(total_amount); + if ((flags & 4) != 0) { + reply_markup.serializeToStream(stream); + } + } + } public static class TL_keyboardButtonRow extends TLObject { public static int constructor = 0x77608b83; @@ -18367,6 +18479,9 @@ public class TLRPC { case 0x92a72876: result = new TL_messageActionGameScore(); break; + case 0xb3a07661: + result = new TL_messageActionGroupCallScheduled(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in MessageAction", constructor)); @@ -18896,6 +19011,23 @@ public class TLRPC { } } + public static class TL_messageActionGroupCallScheduled extends MessageAction { + public static int constructor = 0xb3a07661; + + public int schedule_date; + + public void readParams(AbstractSerializedData stream, boolean exception) { + call = TL_inputGroupCall.TLdeserialize(stream, stream.readInt32(exception), exception); + schedule_date = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + call.serializeToStream(stream); + stream.writeInt32(schedule_date); + } + } + public static abstract class ReportReason extends TLObject { public static ReportReason TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { @@ -19411,82 +19543,111 @@ public class TLRPC { } } - public static class TL_invoice extends TLObject { - public static int constructor = 0xc30aa358; + public static class TL_invoice extends TLObject { + public static int constructor = 0xcd886e0; - public int flags; - public boolean test; - public boolean name_requested; - public boolean phone_requested; - public boolean email_requested; - public boolean shipping_address_requested; - public boolean flexible; - public boolean phone_to_provider; - public boolean email_to_provider; - public String currency; - public ArrayList prices = new ArrayList<>(); + public int flags; + public boolean test; + public boolean name_requested; + public boolean phone_requested; + public boolean email_requested; + public boolean shipping_address_requested; + public boolean flexible; + public boolean phone_to_provider; + public boolean email_to_provider; + public String currency; + public ArrayList prices = new ArrayList<>(); + public long max_tip_amount; + public ArrayList suggested_tip_amounts = new ArrayList<>(); - public static TL_invoice TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { - if (TL_invoice.constructor != constructor) { - if (exception) { - throw new RuntimeException(String.format("can't parse magic %x in TL_invoice", constructor)); - } else { - return null; - } - } - TL_invoice result = new TL_invoice(); - result.readParams(stream, exception); - return result; - } + public static TL_invoice TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { + if (TL_invoice.constructor != constructor) { + if (exception) { + throw new RuntimeException(String.format("can't parse magic %x in TL_invoice", constructor)); + } else { + return null; + } + } + TL_invoice result = new TL_invoice(); + result.readParams(stream, exception); + return result; + } - public void readParams(AbstractSerializedData stream, boolean exception) { - flags = stream.readInt32(exception); - test = (flags & 1) != 0; - name_requested = (flags & 2) != 0; - phone_requested = (flags & 4) != 0; - email_requested = (flags & 8) != 0; - shipping_address_requested = (flags & 16) != 0; - flexible = (flags & 32) != 0; - phone_to_provider = (flags & 64) != 0; - email_to_provider = (flags & 128) != 0; - currency = 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_labeledPrice object = TL_labeledPrice.TLdeserialize(stream, stream.readInt32(exception), exception); - if (object == null) { - return; - } - prices.add(object); - } - } + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + test = (flags & 1) != 0; + name_requested = (flags & 2) != 0; + phone_requested = (flags & 4) != 0; + email_requested = (flags & 8) != 0; + shipping_address_requested = (flags & 16) != 0; + flexible = (flags & 32) != 0; + phone_to_provider = (flags & 64) != 0; + email_to_provider = (flags & 128) != 0; + currency = 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_labeledPrice object = TL_labeledPrice.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + prices.add(object); + } + if ((flags & 256) != 0) { + max_tip_amount = stream.readInt64(exception); + } + if ((flags & 256) != 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++) { + suggested_tip_amounts.add(stream.readInt64(exception)); + } + } + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - flags = test ? (flags | 1) : (flags &~ 1); - flags = name_requested ? (flags | 2) : (flags &~ 2); - flags = phone_requested ? (flags | 4) : (flags &~ 4); - flags = email_requested ? (flags | 8) : (flags &~ 8); - flags = shipping_address_requested ? (flags | 16) : (flags &~ 16); - flags = flexible ? (flags | 32) : (flags &~ 32); - flags = phone_to_provider ? (flags | 64) : (flags &~ 64); - flags = email_to_provider ? (flags | 128) : (flags &~ 128); - stream.writeInt32(flags); - stream.writeString(currency); - stream.writeInt32(0x1cb5c415); - int count = prices.size(); - stream.writeInt32(count); - for (int a = 0; a < count; a++) { - prices.get(a).serializeToStream(stream); - } - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = test ? (flags | 1) : (flags &~ 1); + flags = name_requested ? (flags | 2) : (flags &~ 2); + flags = phone_requested ? (flags | 4) : (flags &~ 4); + flags = email_requested ? (flags | 8) : (flags &~ 8); + flags = shipping_address_requested ? (flags | 16) : (flags &~ 16); + flags = flexible ? (flags | 32) : (flags &~ 32); + flags = phone_to_provider ? (flags | 64) : (flags &~ 64); + flags = email_to_provider ? (flags | 128) : (flags &~ 128); + stream.writeInt32(flags); + stream.writeString(currency); + stream.writeInt32(0x1cb5c415); + int count = prices.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + prices.get(a).serializeToStream(stream); + } + if ((flags & 256) != 0) { + stream.writeInt64(max_tip_amount); + } + if ((flags & 256) != 0) { + stream.writeInt32(0x1cb5c415); + count = suggested_tip_amounts.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + stream.writeInt64(suggested_tip_amounts.get(a)); + } + } + } + } public static abstract class account_WallPapers extends TLObject { @@ -26695,13 +26856,14 @@ public class TLRPC { public long photo_id; public FileLocation photo_small; public FileLocation photo_big; + public byte[] stripped_thumb; public int dc_id; public static UserProfilePhoto TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { UserProfilePhoto result = null; switch (constructor) { case 0x69d3ab26: - result = new TL_userProfilePhoto(); + result = new TL_userProfilePhoto_layer126(); break; case 0xecd75d8c: result = new TL_userProfilePhoto_layer115(); @@ -26715,6 +26877,9 @@ public class TLRPC { case 0x990d1493: result = new TL_userProfilePhoto_old(); break; + case 0xcc656077: + result = new TL_userProfilePhoto(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in UserProfilePhoto", constructor)); @@ -26726,7 +26891,7 @@ public class TLRPC { } } - public static class TL_userProfilePhoto extends UserProfilePhoto { + public static class TL_userProfilePhoto_layer126 extends TL_userProfilePhoto { public static int constructor = 0x69d3ab26; @@ -26750,6 +26915,36 @@ public class TLRPC { } } + public static class TL_userProfilePhoto extends UserProfilePhoto { + public static int constructor = 0xcc656077; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + has_video = (flags & 1) != 0; + photo_id = stream.readInt64(exception); + photo_small = FileLocation.TLdeserialize(stream, stream.readInt32(exception), exception); + photo_big = FileLocation.TLdeserialize(stream, stream.readInt32(exception), exception); + if ((flags & 2) != 0) { + stripped_thumb = stream.readByteArray(exception); + } + dc_id = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = has_video ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + stream.writeInt64(photo_id); + photo_small.serializeToStream(stream); + photo_big.serializeToStream(stream); + if ((flags & 2) != 0) { + stream.writeByteArray(stripped_thumb); + } + stream.writeInt32(dc_id); + } + } + public static class TL_userProfilePhoto_layer115 extends TL_userProfilePhoto { public static int constructor = 0xecd75d8c; @@ -34359,6 +34554,7 @@ public class TLRPC { public int installed_date; public ArrayList thumbs = new ArrayList<>(); public int thumb_dc_id; + public int thumb_version; public static StickerSet TLdeserialize(AbstractSerializedData stream, int constructor, boolean exception) { StickerSet result = null; @@ -34376,11 +34572,14 @@ public class TLRPC { result = new TL_stickerSet_layer121(); break; case 0x40e237a8: - result = new TL_stickerSet(); + result = new TL_stickerSet_layer126(); break; case 0xcd303b41: result = new TL_stickerSet_layer75(); break; + case 0xd7df217a: + result = new TL_stickerSet(); + break; } if (result == null && exception) { throw new RuntimeException(String.format("can't parse magic %x in StickerSet", constructor)); @@ -34412,6 +34611,83 @@ public class TLRPC { } } + public static class TL_stickerSet extends StickerSet { + public static int constructor = 0xd7df217a; + + + public void readParams(AbstractSerializedData stream, boolean exception) { + flags = stream.readInt32(exception); + archived = (flags & 2) != 0; + official = (flags & 4) != 0; + masks = (flags & 8) != 0; + animated = (flags & 32) != 0; + if ((flags & 1) != 0) { + installed_date = stream.readInt32(exception); + } + id = stream.readInt64(exception); + access_hash = stream.readInt64(exception); + title = stream.readString(exception); + short_name = stream.readString(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++) { + PhotoSize object = PhotoSize.TLdeserialize(stream, stream.readInt32(exception), exception); + if (object == null) { + return; + } + thumbs.add(object); + } + } + if ((flags & 16) != 0) { + thumb_dc_id = stream.readInt32(exception); + } + if ((flags & 16) != 0) { + thumb_version = stream.readInt32(exception); + } + count = stream.readInt32(exception); + hash = stream.readInt32(exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = archived ? (flags | 2) : (flags &~ 2); + flags = official ? (flags | 4) : (flags &~ 4); + flags = masks ? (flags | 8) : (flags &~ 8); + flags = animated ? (flags | 32) : (flags &~ 32); + stream.writeInt32(flags); + if ((flags & 1) != 0) { + stream.writeInt32(installed_date); + } + stream.writeInt64(id); + stream.writeInt64(access_hash); + stream.writeString(title); + stream.writeString(short_name); + if ((flags & 16) != 0) { + stream.writeInt32(0x1cb5c415); + int count = thumbs.size(); + stream.writeInt32(count); + for (int a = 0; a < count; a++) { + thumbs.get(a).serializeToStream(stream); + } + } + if ((flags & 16) != 0) { + stream.writeInt32(thumb_dc_id); + } + if ((flags & 16) != 0) { + stream.writeInt32(thumb_version); + } + stream.writeInt32(count); + stream.writeInt32(hash); + } + } + public static class TL_stickerSet_layer96 extends TL_stickerSet { public static int constructor = 0x5585a139; @@ -34497,7 +34773,7 @@ public class TLRPC { } } - public static class TL_stickerSet extends StickerSet { + public static class TL_stickerSet_layer126 extends TL_stickerSet { public static int constructor = 0x40e237a8; @@ -38310,7 +38586,7 @@ public class TLRPC { } public static class TL_groupCallParticipant extends TLObject { - public static int constructor = 0x19adba89; + public static int constructor = 0xb96b25ee; public int flags; public boolean muted; @@ -38329,6 +38605,7 @@ public class TLRPC { public int volume; public String about; public long raise_hand_rating; + public TL_dataJSON params; public long lastSpeakTime; //custom; public float amplitude; //custom; public boolean hasVoice; //custom; @@ -38378,6 +38655,9 @@ public class TLRPC { if ((flags & 8192) != 0) { raise_hand_rating = stream.readInt64(exception); } + if ((flags & 64) != 0) { + params = TL_dataJSON.TLdeserialize(stream, stream.readInt32(exception), exception); + } } public void serializeToStream(AbstractSerializedData stream) { @@ -38407,6 +38687,9 @@ public class TLRPC { if ((flags & 8192) != 0) { stream.writeInt64(raise_hand_rating); } + if ((flags & 64) != 0) { + params.serializeToStream(stream); + } } } @@ -45165,10 +45448,13 @@ public class TLRPC { } public static class TL_phone_createGroupCall extends TLObject { - public static int constructor = 0xbd3dabe0; + public static int constructor = 0x48cdc6d8; + public int flags; public InputPeer peer; public int random_id; + public String title; + public int schedule_date; public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { return Updates.TLdeserialize(stream, constructor, exception); @@ -45176,8 +45462,15 @@ public class TLRPC { public void serializeToStream(AbstractSerializedData stream) { stream.writeInt32(constructor); + stream.writeInt32(flags); peer.serializeToStream(stream); stream.writeInt32(random_id); + if ((flags & 1) != 0) { + stream.writeString(title); + } + if ((flags & 2) != 0) { + stream.writeInt32(schedule_date); + } } } @@ -45453,35 +45746,152 @@ public class TLRPC { } } - public static class TL_payments_getPaymentForm extends TLObject { - public static int constructor = 0x99f09745; + public static class TL_phone_toggleGroupCallStartSubscription extends TLObject { + public static int constructor = 0x219c34e6; - public int msg_id; + public TL_inputGroupCall call; + public boolean subscribed; - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return TL_payments_paymentForm.TLdeserialize(stream, constructor, exception); - } + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Updates.TLdeserialize(stream, constructor, exception); + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(msg_id); - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + call.serializeToStream(stream); + stream.writeBool(subscribed); + } + } - public static class TL_payments_getPaymentReceipt extends TLObject { - public static int constructor = 0xa092a980; + public static class TL_phone_startScheduledGroupCall extends TLObject { + public static int constructor = 0x5680e342; - public int msg_id; + public TL_inputGroupCall call; - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return TL_payments_paymentReceipt.TLdeserialize(stream, constructor, exception); - } + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return Updates.TLdeserialize(stream, constructor, exception); + } - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(msg_id); - } - } + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + call.serializeToStream(stream); + } + } + + public static class TL_phone_saveDefaultGroupCallJoinAs extends TLObject { + public static int constructor = 0x575e1f8c; + + public InputPeer peer; + public InputPeer join_as; + + 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); + join_as.serializeToStream(stream); + } + } + + public static class TL_payments_getPaymentForm extends TLObject { + public static int constructor = 0x8a333c8d; + + public int flags; + public InputPeer peer; + public int msg_id; + public TL_dataJSON theme_params; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_payments_paymentForm.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + if ((flags & 1) != 0) { + theme_params.serializeToStream(stream); + } + } + } + + public static class TL_payments_getPaymentReceipt extends TLObject { + public static int constructor = 0x2478d1cc; + + public InputPeer peer; + public int msg_id; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_payments_paymentReceipt.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + } + } + + public static class TL_payments_validateRequestedInfo extends TLObject { + public static int constructor = 0xdb103170; + + public int flags; + public boolean save; + public InputPeer peer; + public int msg_id; + public TL_paymentRequestedInfo info; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return TL_payments_validatedRequestedInfo.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + flags = save ? (flags | 1) : (flags &~ 1); + stream.writeInt32(flags); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + info.serializeToStream(stream); + } + } + + public static class TL_payments_sendPaymentForm extends TLObject { + public static int constructor = 0x30c3bc9d; + + public int flags; + public long form_id; + public InputPeer peer; + public int msg_id; + public String requested_info_id; + public String shipping_option_id; + public InputPaymentCredentials credentials; + public long tip_amount; + + public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { + return payments_PaymentResult.TLdeserialize(stream, constructor, exception); + } + + public void serializeToStream(AbstractSerializedData stream) { + stream.writeInt32(constructor); + stream.writeInt32(flags); + stream.writeInt64(form_id); + peer.serializeToStream(stream); + stream.writeInt32(msg_id); + if ((flags & 1) != 0) { + stream.writeString(requested_info_id); + } + if ((flags & 2) != 0) { + stream.writeString(shipping_option_id); + } + credentials.serializeToStream(stream); + if ((flags & 4) != 0) { + stream.writeInt64(tip_amount); + } + } + } public static class TL_help_supportName extends TLObject { public static int constructor = 0x8c05f1c9; @@ -45573,54 +45983,6 @@ public class TLRPC { } } - public static class TL_payments_validateRequestedInfo extends TLObject { - public static int constructor = 0x770a8e74; - - public int flags; - public boolean save; - public int msg_id; - public TL_paymentRequestedInfo info; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return TL_payments_validatedRequestedInfo.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - flags = save ? (flags | 1) : (flags &~ 1); - stream.writeInt32(flags); - stream.writeInt32(msg_id); - info.serializeToStream(stream); - } - } - - public static class TL_payments_sendPaymentForm extends TLObject { - public static int constructor = 0x2b8879b3; - - public int flags; - public int msg_id; - public String requested_info_id; - public String shipping_option_id; - public InputPaymentCredentials credentials; - - public TLObject deserializeResponse(AbstractSerializedData stream, int constructor, boolean exception) { - return payments_PaymentResult.TLdeserialize(stream, constructor, exception); - } - - public void serializeToStream(AbstractSerializedData stream) { - stream.writeInt32(constructor); - stream.writeInt32(flags); - stream.writeInt32(msg_id); - if ((flags & 1) != 0) { - stream.writeString(requested_info_id); - } - if ((flags & 2) != 0) { - stream.writeString(shipping_option_id); - } - credentials.serializeToStream(stream); - } - } - public static class TL_payments_getSavedInfo extends TLObject { public static int constructor = 0x227d824b; 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 463588649..d8c9627de 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarLayout.java @@ -353,6 +353,11 @@ public class ActionBarLayout extends FrameLayout { public void setInnerTranslationX(float value) { innerTranslationX = value; invalidate(); + + if (fragmentsStack.size() >= 2) { + BaseFragment prevFragment = fragmentsStack.get(fragmentsStack.size() - 2); + prevFragment.onSlideProgress(false, value / containerView.getMeasuredWidth()); + } } @Keep @@ -528,9 +533,11 @@ public class ActionBarLayout extends FrameLayout { return; } BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); + lastFragment.prepareFragmentToSlide(true, false); lastFragment.onPause(); lastFragment.onFragmentDestroy(); lastFragment.setParentLayout(null); + fragmentsStack.remove(fragmentsStack.size() - 1); LayoutContainer temp = containerView; @@ -542,11 +549,16 @@ public class ActionBarLayout extends FrameLayout { currentActionBar = lastFragment.actionBar; lastFragment.onResume(); lastFragment.onBecomeFullyVisible(); + lastFragment.prepareFragmentToSlide(false, false); layoutToIgnore = containerView; } else { if (fragmentsStack.size() >= 2) { - BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2); + BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 1); + lastFragment.prepareFragmentToSlide(true, false); + + lastFragment = fragmentsStack.get(fragmentsStack.size() - 2); + lastFragment.prepareFragmentToSlide(false, false); lastFragment.onPause(); if (lastFragment.fragmentView != null) { ViewGroup parent = (ViewGroup) lastFragment.fragmentView.getParent(); @@ -614,6 +626,10 @@ public class ActionBarLayout extends FrameLayout { if (themeAnimatorSet != null) { presentingFragmentDescriptions = lastFragment.getThemeDescriptions(); } + + BaseFragment currentFragment = fragmentsStack.get(fragmentsStack.size() - 1); + currentFragment.prepareFragmentToSlide(true, true); + lastFragment.prepareFragmentToSlide(false, true); } public boolean onTouchEvent(MotionEvent ev) { @@ -685,19 +701,33 @@ public class ActionBarLayout extends FrameLayout { float distToMove; if (!backAnimation) { distToMove = containerView.getMeasuredWidth() - x; + int duration = Math.max((int) (200.0f / containerView.getMeasuredWidth() * distToMove), 50); animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, containerView.getMeasuredWidth()), - ObjectAnimator.ofFloat(this, "innerTranslationX", (float) containerView.getMeasuredWidth()) + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, containerView.getMeasuredWidth()).setDuration(duration), + ObjectAnimator.ofFloat(this, "innerTranslationX", (float) containerView.getMeasuredWidth()).setDuration(duration) ); } else { distToMove = x; + int duration = Math.max((int) (200.0f / containerView.getMeasuredWidth() * distToMove), 50); animatorSet.playTogether( - ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0), - ObjectAnimator.ofFloat(this, "innerTranslationX", 0.0f) + ObjectAnimator.ofFloat(containerView, View.TRANSLATION_X, 0).setDuration(duration), + ObjectAnimator.ofFloat(this, "innerTranslationX", 0.0f).setDuration(duration) ); } - animatorSet.setDuration(Math.max((int) (200.0f / containerView.getMeasuredWidth() * distToMove), 50)); + Animator customTransition = currentFragment.getCustomSlideTransition(false, backAnimation, distToMove); + if (customTransition != null) { + animatorSet.playTogether(customTransition); + } + + BaseFragment lastFragment = fragmentsStack.get(fragmentsStack.size() - 2); + if (lastFragment != null) { + customTransition = lastFragment.getCustomSlideTransition(false, backAnimation, distToMove); + if (customTransition != null) { + animatorSet.playTogether(customTransition); + } + } + animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animator) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java index 90da7b0fc..d3b548c6e 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenu.java @@ -17,7 +17,6 @@ import android.widget.LinearLayout; import org.telegram.messenger.AndroidUtilities; import org.telegram.ui.Adapters.FiltersView; import org.telegram.ui.Components.RLottieDrawable; -import org.telegram.ui.Components.RLottieImageView; public class ActionBarMenu extends LinearLayout { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java index 7798d4de2..15018c518 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/ActionBarMenuItem.java @@ -1685,12 +1685,12 @@ public class ActionBarMenuItem extends FrameLayout { avatarImageView.setImageDrawable(combinedDrawable); } else { avatarImageView.getImageReceiver().setRoundRadius(AndroidUtilities.dp(16)); - avatarImageView.getImageReceiver().setImage(ImageLocation.getForUser(user, false), "50_50", thumbDrawable, null, user, 0); + avatarImageView.getImageReceiver().setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", thumbDrawable, user, 0); } } else if (data.chat instanceof TLRPC.Chat) { TLRPC.Chat chat = (TLRPC.Chat) data.chat; avatarImageView.getImageReceiver().setRoundRadius(AndroidUtilities.dp(16)); - avatarImageView.getImageReceiver().setImage(ImageLocation.getForChat(chat, false), "50_50",thumbDrawable, null, chat, 0); + avatarImageView.getImageReceiver().setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", thumbDrawable, chat, 0); } } else if (data.filterType == FiltersView.FILTER_TYPE_ARCHIVE) { CombinedDrawable combinedDrawable = Theme.createCircleDrawableWithIcon(AndroidUtilities.dp(32), R.drawable.chats_archive); 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 f4d4b70f5..7775c20fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/AlertDialog.java @@ -68,6 +68,8 @@ public class AlertDialog extends Dialog implements Drawable.Callback { private AnimatorSet[] shadowAnimation = new AnimatorSet[2]; private int customViewOffset = 20; + private String dialogButtonColorKey = Theme.key_dialogButton; + private OnCancelListener onCancelListener; private AlertDialog cancelDialog; @@ -728,13 +730,13 @@ public class AlertDialog extends Dialog implements Drawable.Callback { textView.setMinWidth(AndroidUtilities.dp(64)); textView.setTag(Dialog.BUTTON_POSITIVE); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textView.setTextColor(getThemeColor(Theme.key_dialogButton)); + textView.setTextColor(getThemeColor(dialogButtonColorKey)); textView.setGravity(Gravity.CENTER); textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); // textView.setLines(1); // textView.setSingleLine(true); //TODO textView.setText(positiveButtonText.toString().toUpperCase()); - textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(Theme.key_dialogButton))); + textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(dialogButtonColorKey))); textView.setPadding(AndroidUtilities.dp(10), 0, AndroidUtilities.dp(10), 0); if (verticalButtons) { buttonsLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 36, LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT)); @@ -768,13 +770,13 @@ public class AlertDialog extends Dialog implements Drawable.Callback { textView.setMinWidth(AndroidUtilities.dp(64)); textView.setTag(Dialog.BUTTON_NEGATIVE); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textView.setTextColor(getThemeColor(Theme.key_dialogButton)); + textView.setTextColor(getThemeColor(dialogButtonColorKey)); textView.setGravity(Gravity.CENTER); textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setSingleLine(true); textView.setText(negativeButtonText.toString().toUpperCase()); - textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(Theme.key_dialogButton))); + textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(dialogButtonColorKey))); textView.setPadding(AndroidUtilities.dp(10), 0, AndroidUtilities.dp(10), 0); if (verticalButtons) { buttonsLayout.addView(textView, 0, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 36, LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT)); @@ -808,13 +810,13 @@ public class AlertDialog extends Dialog implements Drawable.Callback { textView.setMinWidth(AndroidUtilities.dp(64)); textView.setTag(Dialog.BUTTON_NEUTRAL); textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textView.setTextColor(getThemeColor(Theme.key_dialogButton)); + textView.setTextColor(getThemeColor(dialogButtonColorKey)); textView.setGravity(Gravity.CENTER); textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setSingleLine(true); textView.setText(neutralButtonText.toString().toUpperCase()); - textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(Theme.key_dialogButton))); + textView.setBackgroundDrawable(Theme.getRoundRectSelectorDrawable(getThemeColor(dialogButtonColorKey))); textView.setPadding(AndroidUtilities.dp(10), 0, AndroidUtilities.dp(10), 0); if (verticalButtons) { buttonsLayout.addView(textView, 1, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, 36, LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT)); @@ -1015,6 +1017,9 @@ public class AlertDialog extends Dialog implements Drawable.Callback { @Override public void dismiss() { + if (onDismissListener != null) { + onDismissListener.onDismiss(this); + } if (cancelDialog != null) { cancelDialog.dismiss(); } @@ -1176,8 +1181,8 @@ public class AlertDialog extends Dialog implements Drawable.Callback { private AlertDialog alertDialog; - protected Builder(AlertDialog alert){ - alertDialog=alert; + protected Builder(AlertDialog alert) { + alertDialog = alert; } public Builder(Context context) { @@ -1241,6 +1246,11 @@ public class AlertDialog extends Dialog implements Drawable.Callback { return this; } + public Builder setDialogButtonColorKey(String key) { + alertDialog.dialogButtonColorKey = key; + return this; + } + public Builder setTopAnimation(int resId, int backgroundColor) { alertDialog.topAnimationId = resId; alertDialog.topBackgroundColor = backgroundColor; @@ -1329,5 +1339,10 @@ public class AlertDialog extends Dialog implements Drawable.Callback { public void setButtonsVertical(boolean vertical) { alertDialog.verticalButtons = vertical; } + + public Builder setOnPreDismissListener(OnDismissListener onDismissListener) { + alertDialog.onDismissListener = onDismissListener; + return this; + } } } 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 54dea6608..448d01bac 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BaseFragment.java @@ -8,6 +8,7 @@ package org.telegram.ui.ActionBar; +import android.animation.Animator; import android.animation.AnimatorSet; import android.app.Activity; import android.app.Dialog; @@ -46,7 +47,7 @@ import org.telegram.ui.Components.LayoutHelper; import java.util.ArrayList; -public class BaseFragment { +public abstract class BaseFragment { private boolean isFinished; private boolean finishing; @@ -327,6 +328,10 @@ public class BaseFragment { } + public boolean isLastFragment() { + return parentLayout != null && !parentLayout.fragmentsStack.isEmpty() && parentLayout.fragmentsStack.get(parentLayout.fragmentsStack.size() - 1) == this; + } + public ActionBarLayout getParentLayout() { return parentLayout; } @@ -411,6 +416,10 @@ public class BaseFragment { } } + protected void onSlideProgress(boolean isOpen, float progress) { + + } + protected void onTransitionAnimationProgress(boolean isOpen, float progress) { } @@ -597,4 +606,16 @@ public class BaseFragment { public void saveKeyboardPositionBeforeTransition() { } + + protected Animator getCustomSlideTransition(boolean topFragment, boolean backAnimation, float distanceToMove) { + return null; + } + + protected void prepareFragmentToSlide(boolean topFragment, boolean beginSlide) { + + } + + public void setProgressToDrawerOpened(float v) { + + } } 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 214b35589..7ee178602 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/BottomSheet.java @@ -58,6 +58,7 @@ 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; @@ -107,6 +108,8 @@ public class BottomSheet extends Dialog { private boolean allowCustomAnimation = true; private boolean showWithoutAnimation; + protected int statusBarHeight = AndroidUtilities.statusBarHeight; + protected boolean calcMandatoryInsets; private int touchSlop; @@ -766,6 +769,10 @@ public class BottomSheet extends Dialog { if (Build.VERSION.SDK_INT >= 21) { container.setFitsSystemWindows(true); container.setOnApplyWindowInsetsListener((v, insets) -> { + int newTopInset = insets.getSystemWindowInsetTop(); + if ((newTopInset != 0 || AndroidUtilities.isInMultiwindow) && statusBarHeight != 0 && statusBarHeight != newTopInset) { + statusBarHeight = newTopInset; + } lastInsets = insets; v.requestLayout(); if (Build.VERSION.SDK_INT >= 30) { 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 7989b6833..38d0ce579 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/DrawerLayoutContainer.java @@ -193,6 +193,14 @@ public class DrawerLayoutContainer extends FrameLayout { if (drawerLayout.getVisibility() != newVisibility) { drawerLayout.setVisibility(newVisibility); } + BaseFragment currentFragment = parentActionBarLayout.fragmentsStack.get(0); + if (drawerPosition == drawerLayout.getMeasuredWidth()) { + currentFragment.setProgressToDrawerOpened(1f); + } else if (drawerPosition == 0){ + currentFragment.setProgressToDrawerOpened(0); + } else { + currentFragment.setProgressToDrawerOpened(drawerPosition / drawerLayout.getMeasuredWidth()); + } setScrimOpacity(drawerPosition / (float) drawerLayout.getMeasuredWidth()); } 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 bd8f3e4db..a6387e11f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/SimpleTextView.java @@ -27,6 +27,8 @@ import android.view.Gravity; import android.view.View; import android.view.accessibility.AccessibilityNodeInfo; +import com.google.android.exoplayer2.util.Log; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.LocaleController; import org.telegram.ui.Components.EmptyStubSpan; @@ -79,7 +81,7 @@ public class SimpleTextView extends View implements Drawable.Callback { private static final int SCROLL_SLOWDOWN_PX = 100; private int fullLayoutAdditionalWidth; private int fullLayoutLeftOffset; - private boolean crosfadeFullLayout; + private float fullLayoutLeftCharactersOffset; public SimpleTextView(Context context) { super(context); @@ -186,19 +188,15 @@ public class SimpleTextView extends View implements Drawable.Callback { } if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.CENTER_HORIZONTAL) { - offsetX = (width - textWidth) / 2; + offsetX = (width - textWidth) / 2 - (int) layout.getLineLeft(0); } else if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT) { - if (crosfadeFullLayout) { - offsetX = 0; - } else if (firstLineLayout != null) { + if (firstLineLayout != null) { offsetX = -(int) firstLineLayout.getLineLeft(0); } else { offsetX = -(int) layout.getLineLeft(0); } } else if (layout.getLineLeft(0) == 0) { - if (crosfadeFullLayout) { - offsetX = 0; - } else if (firstLineLayout != null) { + if (firstLineLayout != null) { offsetX = (int) (width - firstLineLayout.getLineWidth(0)); } else { offsetX = width - textWidth; @@ -208,6 +206,10 @@ public class SimpleTextView extends View implements Drawable.Callback { } offsetX += getPaddingLeft(); textDoesNotFit = textWidth > width; + + if (fullLayout != null && fullLayoutAdditionalWidth > 0) { + fullLayoutLeftCharactersOffset = fullLayout.getPrimaryHorizontal(0) - firstLineLayout.getPrimaryHorizontal(0); + } } } @@ -223,38 +225,30 @@ public class SimpleTextView extends View implements Drawable.Callback { width -= dw; width -= drawablePadding; } - crosfadeFullLayout = false; if (buildFullLayout) { CharSequence string = TextUtils.ellipsize(text, textPaint, width, TextUtils.TruncateAt.END); if (!string.equals(text)) { fullLayout = StaticLayoutEx.createStaticLayout(text, 0, text.length(), textPaint, width, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width, 3, false); if (fullLayout != null) { - if (LocaleController.isRTL || fullLayout.isRtlCharAt(0) && fullLayoutAdditionalWidth != 0) { - layout = StaticLayoutEx.createStaticLayout(text, 0, text.length(), textPaint, width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width, maxLines, false); - fullLayout = StaticLayoutEx.createStaticLayout(text, 0, text.length(), textPaint, width + fullLayoutAdditionalWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width + fullLayoutAdditionalWidth, 3, false); - partLayout = null; - firstLineLayout = null; - crosfadeFullLayout = true; + + int end = fullLayout.getLineEnd(0); + int start = fullLayout.getLineStart(1); + CharSequence substr = text.subSequence(0, end); + SpannableStringBuilder full = SpannableStringBuilder.valueOf(text); + full.setSpan(new EmptyStubSpan(), 0, start, 0); + CharSequence part; + if (end < string.length()) { + part = string.subSequence(end, string.length()); } else { - int end = fullLayout.getLineEnd(0); - int start = fullLayout.getLineStart(1); - CharSequence substr = text.subSequence(0, end); - SpannableStringBuilder full = SpannableStringBuilder.valueOf(text); - full.setSpan(new EmptyStubSpan(), 0, start, 0); - CharSequence part; - if (end < string.length()) { - part = string.subSequence(end, string.length()); - } else { - part = "…"; - } - firstLineLayout = new StaticLayout(string, 0, string.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); - layout = new StaticLayout(substr, 0, substr.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); - if (layout.getLineLeft(0) != 0) { - part = "\u200F" + part; - } - partLayout = new StaticLayout(part, 0, part.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); - fullLayout = StaticLayoutEx.createStaticLayout(full, 0, full.length(), textPaint, width + fullLayoutAdditionalWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width + fullLayoutAdditionalWidth, 3, false); + part = "…"; } + firstLineLayout = new StaticLayout(string, 0, string.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + layout = new StaticLayout(substr, 0, substr.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + if (layout.getLineLeft(0) != 0) { + part = "\u200F" + part; + } + partLayout = new StaticLayout(part, 0, part.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + fullLayout = StaticLayoutEx.createStaticLayout(full, 0, full.length(), textPaint, width + AndroidUtilities.dp(8) + fullLayoutAdditionalWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false, TextUtils.TruncateAt.END, width + fullLayoutAdditionalWidth, 3, false); } } else { layout = new StaticLayout(string, 0, string.length(), textPaint, scrollNonFitText ? AndroidUtilities.dp(2000) : width + AndroidUtilities.dp(8), Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); @@ -579,7 +573,7 @@ public class SimpleTextView extends View implements Drawable.Callback { } else { canvas.translate(layout.getLineWidth(0) - (partLayout.getText().length() == 1 ? AndroidUtilities.dp(4) : 0), 0); } - canvas.translate(-fullLayoutLeftOffset * fullAlpha, 0); + canvas.translate(-fullLayoutLeftOffset * fullAlpha + fullLayoutLeftCharactersOffset * fullAlpha, 0); partLayout.draw(canvas); canvas.restore(); textPaint.setAlpha(prevAlpha); @@ -588,10 +582,7 @@ public class SimpleTextView extends View implements Drawable.Callback { int prevAlpha = textPaint.getAlpha(); textPaint.setAlpha((int) (255 * fullAlpha)); - if (layout.getLineLeft(0) != 0) { - canvas.translate(-offsetX, 0); - } - canvas.translate(-fullLayoutLeftOffset * fullAlpha, 0); + canvas.translate(-fullLayoutLeftOffset * fullAlpha + fullLayoutLeftCharactersOffset * fullAlpha - fullLayoutLeftCharactersOffset, 0); fullLayout.draw(canvas); textPaint.setAlpha(prevAlpha); } @@ -625,17 +616,9 @@ public class SimpleTextView extends View implements Drawable.Callback { } private void drawLayout(Canvas canvas) { - if (crosfadeFullLayout && fullAlpha > 0) { - int prevAlpha = textPaint.getAlpha(); - textPaint.setAlpha((int) (255 * (1f - fullAlpha))); + if (fullAlpha > 0 && fullLayoutLeftOffset != 0) { canvas.save(); - canvas.translate(-fullLayoutLeftOffset * fullAlpha, 0); - layout.draw(canvas); - textPaint.setAlpha(prevAlpha); - canvas.restore(); - } else if (fullAlpha > 0 && fullLayoutLeftOffset != 0) { - canvas.save(); - canvas.translate(-fullLayoutLeftOffset * fullAlpha, 0); + canvas.translate(-fullLayoutLeftOffset * fullAlpha + fullLayoutLeftCharactersOffset * fullAlpha, 0); layout.draw(canvas); canvas.restore(); } else { @@ -703,6 +686,9 @@ public class SimpleTextView extends View implements Drawable.Callback { this.fullLayoutLeftOffset = fullLayoutLeftOffset; createLayout(getMeasuredWidth()); } + } + public int getTextColor() { + return textPaint.getColor(); } } 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 367cafc40..3f21352f7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ActionBar/Theme.java @@ -2172,6 +2172,7 @@ public class Theme { public static Drawable chat_replyIconDrawable; public static Drawable chat_goIconDrawable; public static Drawable chat_botLinkDrawalbe; + public static Drawable chat_botCardDrawalbe; public static Drawable chat_botInlineDrawable; public static Drawable chat_systemDrawable; public static Drawable chat_commentDrawable; @@ -7202,6 +7203,7 @@ public class Theme { chat_botLinkDrawalbe = resources.getDrawable(R.drawable.bot_link); chat_botInlineDrawable = resources.getDrawable(R.drawable.bot_lines); + chat_botCardDrawalbe = resources.getDrawable(R.drawable.bot_card); chat_commentDrawable = resources.getDrawable(R.drawable.msg_msgbubble); chat_commentStickerDrawable = resources.getDrawable(R.drawable.msg_msgbubble2); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java index d958a19c8..28b4661cb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DialogsAdapter.java @@ -204,8 +204,6 @@ public class DialogsAdapter extends RecyclerListView.SelectionAdapter { if (folderId == 0 && onlineContacts != null) { if (!hasContacts) { onlineContacts = null; - } else { - MessagesController.getInstance(currentAccount).preloadGreetingsSticker(); } } if (folderId == 1 && showArchiveHint) { @@ -508,12 +506,6 @@ public class DialogsAdapter extends RecyclerListView.SelectionAdapter { } cell.setChecked(selectedDialogs.contains(dialog.id), false); cell.setDialog(dialog, dialogsType, folderId); - if ((int) dialog.id > 0) { - MessageObject message = MessagesController.getInstance(currentAccount).dialogMessage.get(dialog.id); - if (MessageObject.isSystemSignUp(message)) { - MessagesController.getInstance(currentAccount).preloadGreetingsSticker(); - } - } if (preloader != null && i < 10) { preloader.add(dialog.id); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java index 79ecc9a16..ef6bc038c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/DrawerLayoutAdapter.java @@ -304,7 +304,7 @@ public class DrawerLayoutAdapter extends RecyclerListView.SelectionAdapter { items.add(new Item(8, LocaleController.getString("Settings", R.string.Settings), settingsIcon)); items.add(null); // divider items.add(new Item(7, LocaleController.getString("InviteFriends", R.string.InviteFriends), inviteIcon)); - items.add(new Item(9, LocaleController.getString("TelegramFAQ", R.string.TelegramFAQ), helpIcon)); + items.add(new Item(13, LocaleController.getString("TelegramFeatures", R.string.TelegramFeatures), helpIcon)); } public int getId(int position) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java index cbbf4cff1..4e4b52869 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java @@ -40,7 +40,6 @@ import org.telegram.ui.Components.CombinedDrawable; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RecyclerListView; -import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; @@ -49,7 +48,6 @@ import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.regex.Matcher; @@ -730,12 +728,12 @@ public class FiltersView extends RecyclerListView { avatarImageView.setImageDrawable(combinedDrawable); } else { avatarImageView.getImageReceiver().setRoundRadius(AndroidUtilities.dp(16)); - avatarImageView.getImageReceiver().setImage(ImageLocation.getForUser(user, false), "50_50", thumbDrawable, null, user, 0); + avatarImageView.getImageReceiver().setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", thumbDrawable, user, 0); } } else if (data.chat instanceof TLRPC.Chat) { TLRPC.Chat chat = (TLRPC.Chat) data.chat; avatarImageView.getImageReceiver().setRoundRadius(AndroidUtilities.dp(16)); - avatarImageView.getImageReceiver().setImage(ImageLocation.getForChat(chat, false), "50_50", thumbDrawable, null, chat, 0); + avatarImageView.getImageReceiver().setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", thumbDrawable, chat, 0); } } else { avatarImageView.setImageDrawable(thumbDrawable); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java index 9a975dd7d..f3464151a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ArticleViewer.java @@ -290,6 +290,8 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg TextSelectionHelper.ArticleTextSelectionHelper textSelectionHelper; TextSelectionHelper.ArticleTextSelectionHelper textSelectionHelperBottomSheet; + PinchToZoomHelper pinchToZoomHelper; + private int allowAnimationIndex = -1; private final String BOTTOM_SHEET_VIEW_TAG = "bottomSheet"; @@ -707,6 +709,10 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean dispatchTouchEvent(MotionEvent ev) { + if (pinchToZoomHelper.isInOverlayMode()) { + ev.offsetLocation(-containerView.getX(), -containerView.getY()); + return pinchToZoomHelper.onTouchEvent(ev); + } TextSelectionHelper.TextSelectionOverlay selectionOverlay = textSelectionHelper.getOverlayView(getContext()); MotionEvent textSelectionEv = MotionEvent.obtain(ev); textSelectionEv.offsetLocation(-containerView.getX(), -containerView.getY()); @@ -3657,6 +3663,22 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg }); containerView.addView(textSelectionHelper.getOverlayView(activity)); + pinchToZoomHelper = new PinchToZoomHelper(containerView); + pinchToZoomHelper.setClipBoundsListener(new PinchToZoomHelper.ClipBoundsListener() { + @Override + public void getClipTopBottom(float[] topBottom) { + topBottom[0] = currentHeaderHeight; + topBottom[1] = listView[0].getMeasuredHeight(); + } + }); + pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { + @Override + public void onZoomStarted(MessageObject messageObject) { + if (listView[0] != null) { + listView[0].cancelClickRunnables(true); + } + } + }); updatePaintColors(); } @@ -5952,6 +5974,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean onTouchEvent(MotionEvent event) { + if (pinchToZoomHelper.checkPinchToZoom(event, this, imageView, null)) { + return true; + } float x = event.getX(); float y = event.getY(); if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { @@ -6118,9 +6143,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (!imageView.hasBitmapImage() || imageView.getCurrentAlpha() != 1.0f) { canvas.drawRect(imageView.getDrawRegion(), photoBackgroundPaint); } - imageView.draw(canvas); - if (imageView.getVisible()) { - radialProgress.draw(canvas); + if (!pinchToZoomHelper.isInOverlayModeFor(this)) { + imageView.draw(canvas); + if (imageView.getVisible()) { + radialProgress.draw(canvas); + } } int count = 0; if (captionLayout != null) { @@ -9831,6 +9858,9 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg @Override public boolean onTouchEvent(MotionEvent event) { + if (pinchToZoomHelper.checkPinchToZoom(event, this, imageView, null)) { + return true; + } float x = event.getX(); float y = event.getY(); if (channelCell.getVisibility() == VISIBLE && y > channelCell.getTranslationY() && y < channelCell.getTranslationY() + AndroidUtilities.dp(39)) { @@ -9992,9 +10022,11 @@ public class ArticleViewer implements NotificationCenter.NotificationCenterDeleg if (!imageView.hasBitmapImage() || imageView.getCurrentAlpha() != 1.0f) { canvas.drawRect(imageView.getImageX(), imageView.getImageY(), imageView.getImageX2(), imageView.getImageY2(), photoBackgroundPaint); } - imageView.draw(canvas); - if (imageView.getVisible()) { - radialProgress.draw(canvas); + if (!pinchToZoomHelper.isInOverlayModeFor(this)) { + imageView.draw(canvas); + if (imageView.getVisible()) { + radialProgress.draw(canvas); + } } if (!TextUtils.isEmpty(currentBlock.url)) { int x = getMeasuredWidth() - AndroidUtilities.dp(11 + 24); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java b/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java index 67fd91bb7..3d9eceb18 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/AvatarPreviewer.java @@ -163,15 +163,15 @@ public class AvatarPreviewer { public static class Data { public static Data of(TLRPC.User user, int classGuid, MenuItem... menuItems) { - final ImageLocation imageLocation = ImageLocation.getForUser(user, true); - final ImageLocation thumbImageLocation = ImageLocation.getForUser(user, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_BIG); + final ImageLocation thumbImageLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL); final String thumbFilter = thumbImageLocation != null && thumbImageLocation.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; return new Data(imageLocation, thumbImageLocation, null, null, thumbFilter, null, null, user, menuItems, new UserInfoLoadTask(user, classGuid)); } public static Data of(TLRPC.UserFull userFull, MenuItem... menuItems) { - final ImageLocation imageLocation = ImageLocation.getForUser(userFull.user, true); - final ImageLocation thumbImageLocation = ImageLocation.getForUser(userFull.user, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(userFull.user, ImageLocation.TYPE_BIG); + final ImageLocation thumbImageLocation = ImageLocation.getForUserOrChat(userFull.user, ImageLocation.TYPE_SMALL); final String thumbFilter = thumbImageLocation != null && thumbImageLocation.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; final ImageLocation videoLocation; final String videoFileName; @@ -188,15 +188,15 @@ public class AvatarPreviewer { } public static Data of(TLRPC.Chat chat, int classGuid, MenuItem... menuItems) { - final ImageLocation imageLocation = ImageLocation.getForChat(chat, true); - final ImageLocation thumbImageLocation = ImageLocation.getForChat(chat, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); + final ImageLocation thumbImageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL); final String thumbFilter = thumbImageLocation != null && thumbImageLocation.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; return new Data(imageLocation, thumbImageLocation, null, null, thumbFilter, null, null, chat, menuItems, new ChatInfoLoadTask(chat, classGuid)); } public static Data of(TLRPC.Chat chat, TLRPC.ChatFull chatFull, MenuItem... menuItems) { - final ImageLocation imageLocation = ImageLocation.getForChat(chat, true); - final ImageLocation thumbImageLocation = ImageLocation.getForChat(chat, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); + final ImageLocation thumbImageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL); final String thumbFilter = thumbImageLocation != null && thumbImageLocation.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; final ImageLocation videoLocation; final String videoFileName; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/CancelAccountDeletionActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/CancelAccountDeletionActivity.java index 5ca7406f5..8daa702c2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/CancelAccountDeletionActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/CancelAccountDeletionActivity.java @@ -25,6 +25,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.telephony.PhoneNumberUtils; @@ -553,8 +554,8 @@ public class CancelAccountDeletionActivity extends BaseFragment { PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0); String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode); - Intent mailer = new Intent(Intent.ACTION_SEND); - mailer.setType("message/rfc822"); + Intent mailer = new Intent(Intent.ACTION_SENDTO); + mailer.setData(Uri.parse("mailto:")); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"sms@stel.com"}); mailer.putExtra(Intent.EXTRA_SUBJECT, "Android cancel account deletion issue " + version + " " + phone); mailer.putExtra(Intent.EXTRA_TEXT, "Phone: " + phone + "\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault() + "\nError: " + lastError); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AccountSelectCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AccountSelectCell.java index 6dc5efb73..b770c86e7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AccountSelectCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AccountSelectCell.java @@ -110,12 +110,12 @@ public class AccountSelectCell extends FrameLayout { TLRPC.User user = (TLRPC.User) object; avatarDrawable.setInfo(user); infoTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } else { TLRPC.Chat chat = (TLRPC.Chat) object; avatarDrawable.setInfo(chat); infoTextView.setText(chat.title); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } @@ -125,7 +125,7 @@ public class AccountSelectCell extends FrameLayout { avatarDrawable.setInfo(user); textView.setText(ContactsController.formatName(user.first_name, user.last_name)); imageView.getImageReceiver().setCurrentAccount(account); - imageView.setImage(ImageLocation.getForUser(user,false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user,ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); checkImageView.setVisibility(check && account == UserConfig.selectedAccount ? VISIBLE : INVISIBLE); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AdminedChannelCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AdminedChannelCell.java index 833781d5d..f5fc04de1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/AdminedChannelCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/AdminedChannelCell.java @@ -81,7 +81,7 @@ public class AdminedChannelCell extends FrameLayout { SpannableStringBuilder stringBuilder = new SpannableStringBuilder(url + channel.username); stringBuilder.setSpan(new URLSpanNoUnderline(""), url.length(), stringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); statusTextView.setText(stringBuilder); - avatarImageView.setImage(ImageLocation.getForChat(channel, false), "50_50", avatarDrawable, currentChannel); + avatarImageView.setImage(ImageLocation.getForUserOrChat(channel, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(channel, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChannel); isLast = last; } 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 a94138042..a53acbce7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ChatMessageCell.java @@ -126,6 +126,7 @@ import org.telegram.ui.Components.URLSpanBrowser; import org.telegram.ui.Components.URLSpanMono; import org.telegram.ui.Components.URLSpanNoUnderline; import org.telegram.ui.PhotoViewer; +import org.telegram.ui.PinchToZoomHelper; import org.telegram.ui.SecretMediaViewer; import java.io.File; @@ -257,6 +258,11 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate default boolean shouldDrawThreadProgress(ChatMessageCell cell) { return false; } + + default PinchToZoomHelper getPinchToZoomHelper() { + return null; + } + } private final static int DOCUMENT_ATTACH_TYPE_NONE = 0; @@ -775,6 +781,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate }; private SparseArray accessibilityVirtualViewBounds = new SparseArray<>(); private int currentFocusedVirtualView = -1; + public boolean drawFromPinchToZoom; public ChatMessageCell(Context context) { super(context); @@ -1930,6 +1937,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate boolean result = checkTextBlockMotionEvent(event); + if (!result) { + result = checkPinchToZoom(event); + } if (!result) { result = checkDateMotionEvent(event); } @@ -2196,6 +2206,17 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate return result; } + + private boolean checkPinchToZoom(MotionEvent ev) { + PinchToZoomHelper pinchToZoomHelper = delegate == null ? null : delegate.getPinchToZoomHelper(); + if (currentMessageObject == null || !photoImage.hasNotThumb() || pinchToZoomHelper == null || currentMessageObject.isSticker() || + currentMessageObject.isAnimatedEmoji() || (currentMessageObject.isVideo() && !autoPlayingMedia) || + currentMessageObject.isRoundVideo() || currentMessageObject.isAnimatedSticker() || (currentMessageObject.isDocument() && !currentMessageObject.isGif()) || currentMessageObject.needDrawBluredPreview()) { + return false; + } + return pinchToZoomHelper.checkPinchToZoom(ev, this, photoImage, currentMessageObject); + } + private boolean checkTextSelection(MotionEvent event) { TextSelectionHelper.ChatListTextSelectionHelper textSelectionHelper = delegate.getTextSelectionHelper(); if (textSelectionHelper == null) { @@ -3144,10 +3165,10 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } if (user != null) { commentAvatarDrawables[a].setInfo(user); - commentAvatarImages[a].setImage(ImageLocation.getForUser(user, false), "50_50", commentAvatarDrawables[a], null, user, 0); + commentAvatarImages[a].setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", commentAvatarDrawables[a], user, 0); } else if (chat != null) { commentAvatarDrawables[a].setInfo(chat); - commentAvatarImages[a].setImage(ImageLocation.getForChat(chat, false), "50_50", commentAvatarDrawables[a], null, chat, 0); + commentAvatarImages[a].setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", commentAvatarDrawables[a], chat, 0); } else { commentAvatarDrawables[a].setInfo(id, "", ""); } @@ -3236,9 +3257,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate hasInvoicePreview = messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaInvoice; hasLinkPreview = !messageObject.isRestrictedMessage && messageObject.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage && messageObject.messageOwner.media.webpage instanceof TLRPC.TL_webPage; drawInstantView = hasLinkPreview && messageObject.messageOwner.media.webpage.cached_page != null; - hasEmbed = hasLinkPreview && !TextUtils.isEmpty(messageObject.messageOwner.media.webpage.embed_url) && !messageObject.isGif(); - boolean slideshow = false; String siteName = hasLinkPreview ? messageObject.messageOwner.media.webpage.site_name : null; + hasEmbed = hasLinkPreview && !TextUtils.isEmpty(messageObject.messageOwner.media.webpage.embed_url) && !messageObject.isGif() && !"instangram".equalsIgnoreCase(siteName); + boolean slideshow = false; String webpageType = hasLinkPreview ? messageObject.messageOwner.media.webpage.type : null; TLRPC.Document androidThemeDocument = null; TLRPC.TL_themeSettings androidThemeSettings = null; @@ -3908,8 +3929,21 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate width = height = maxPhotoWidth; } else { if (hasGamePreview || hasInvoicePreview) { - width = 640; - height = 360; + if (hasInvoicePreview) { + width = 640; + height = 360; + for (int a = 0, N = webDocument.attributes.size(); a < N; a++) { + TLRPC.DocumentAttribute attribute = webDocument.attributes.get(a); + if (attribute instanceof TLRPC.TL_documentAttributeImageSize) { + width = attribute.w; + height = attribute.h; + break; + } + } + } else { + width = 640; + height = 360; + } float scale = width / (float) (maxPhotoWidth - AndroidUtilities.dp(2)); width /= scale; height /= scale; @@ -4202,7 +4236,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else { hasName = false; } - photoImage.setImage(ImageLocation.getForUser(user, false), "50_50", hasName ? contactAvatarDrawable : Theme.chat_contactDrawable[messageObject.isOutOwner() ? 1 : 0], null, messageObject, 0); + photoImage.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", hasName ? contactAvatarDrawable : Theme.chat_contactDrawable[messageObject.isOutOwner() ? 1 : 0], messageObject, 0); CharSequence phone; if (!TextUtils.isEmpty(messageObject.vCardData)) { @@ -4394,7 +4428,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(id); if (user != null) { pollAvatarDrawables[a].setInfo(user); - pollAvatarImages[a].setImage(ImageLocation.getForUser(user, false), "50_50", pollAvatarDrawables[a], null, user, 0); + pollAvatarImages[a].setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", pollAvatarDrawables[a], user, 0); } else { pollAvatarDrawables[a].setInfo(id, "", ""); } @@ -4728,13 +4762,13 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate updateCurrentUserAndChat(); if (currentUser != null) { contactAvatarDrawable.setInfo(currentUser); - locationImageReceiver.setImage(ImageLocation.getForUser(currentUser, false), "50_50", contactAvatarDrawable, null, currentUser, 0); + locationImageReceiver.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", contactAvatarDrawable, currentUser, 0); } else if (currentChat != null) { if (currentChat.photo != null) { currentPhoto = currentChat.photo.photo_small; } contactAvatarDrawable.setInfo(currentChat); - locationImageReceiver.setImage(ImageLocation.getForChat(currentChat, false), "50_50", contactAvatarDrawable, null, currentChat, 0); + locationImageReceiver.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", contactAvatarDrawable, currentChat, 0); } else { locationImageReceiver.setImage(null, null, contactAvatarDrawable, null, null, 0); } @@ -4809,7 +4843,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else if (currentMapProvider == 2) { if (currentWebFile != null) { ImageLocation lastLocation = lastWebFile == null ? null : ImageLocation.getForWebFile(lastWebFile); - photoImage.setImage(ImageLocation.getForWebFile(currentWebFile), null, lastLocation, null, null, messageObject, 0); + photoImage.setImage(ImageLocation.getForWebFile(currentWebFile), null, lastLocation, null, (Drawable) null, messageObject, 0); } } else { if (currentMapProvider == 3 || currentMapProvider == 4) { @@ -7097,7 +7131,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate buttonY = this.buttonY = (int) (photoImage.getImageY() + (photoImage.getImageHeight() - size) / 2.0f); radialProgress.setProgressRect((int) buttonX, (int ) buttonY, (int) buttonX + size, (int) buttonY + size); } - imageDrawn = photoImage.draw(canvas); + if (delegate == null || delegate.getPinchToZoomHelper() == null || !delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + imageDrawn = photoImage.draw(canvas); + } } linkPreviewY += photoImage.getImageHeight() + AndroidUtilities.dp(6); } @@ -7180,7 +7216,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate imageDrawn = true; drawTime = true; } else { - imageDrawn = photoImage.draw(canvas); + if (delegate == null || delegate.getPinchToZoomHelper() == null || !delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + imageDrawn = photoImage.draw(canvas); + } } } if (documentAttachType == DOCUMENT_ATTACH_TYPE_VIDEO || documentAttachType == DOCUMENT_ATTACH_TYPE_GIF) { @@ -7330,7 +7368,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } else { photoImage.setSideClip(0); } - imageDrawn = photoImage.draw(canvas); + if (delegate == null || delegate.getPinchToZoomHelper() == null || !delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + imageDrawn = photoImage.draw(canvas); + } boolean drawTimeOld = drawTime; drawTime = photoImage.getVisible(); if (currentPosition != null && drawTimeOld != drawTime) { @@ -7796,11 +7836,19 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate setDrawableBounds(Theme.chat_botInlineDrawable, x, y + AndroidUtilities.dp(3)); Theme.chat_botInlineDrawable.draw(canvas); } else if (button.button instanceof TLRPC.TL_keyboardButtonCallback || button.button instanceof TLRPC.TL_keyboardButtonRequestGeoLocation || button.button instanceof TLRPC.TL_keyboardButtonGame || button.button instanceof TLRPC.TL_keyboardButtonBuy || button.button instanceof TLRPC.TL_keyboardButtonUrlAuth) { + if (button.button instanceof TLRPC.TL_keyboardButtonBuy) { + int x = button.x + button.width - AndroidUtilities.dp(5) - Theme.chat_botCardDrawalbe.getIntrinsicWidth() + addX; + setDrawableBounds(Theme.chat_botCardDrawalbe, x, y + AndroidUtilities.dp(4)); + Theme.chat_botCardDrawalbe.draw(canvas); + } boolean drawProgress = (button.button instanceof TLRPC.TL_keyboardButtonCallback || button.button instanceof TLRPC.TL_keyboardButtonGame || button.button instanceof TLRPC.TL_keyboardButtonBuy || button.button instanceof TLRPC.TL_keyboardButtonUrlAuth) && SendMessagesHelper.getInstance(currentAccount).isSendingCallback(currentMessageObject, button.button) || button.button instanceof TLRPC.TL_keyboardButtonRequestGeoLocation && SendMessagesHelper.getInstance(currentAccount).isSendingCurrentLocation(currentMessageObject, button.button); if (drawProgress || button.progressAlpha != 0) { Theme.chat_botProgressPaint.setAlpha(Math.min(255, (int) (button.progressAlpha * 255))); int x = button.x + button.width - AndroidUtilities.dp(9 + 3) + addX; + if (button.button instanceof TLRPC.TL_keyboardButtonBuy) { + y += AndroidUtilities.dp(26); + } rect.set(x, y + AndroidUtilities.dp(4), x + AndroidUtilities.dp(8), y + AndroidUtilities.dp(8 + 4)); canvas.drawArc(rect, button.angle, 220, false, Theme.chat_botProgressPaint); invalidate(); @@ -9150,7 +9198,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentPhoto = null; } avatarDrawable.setInfo(currentUser); - avatarImage.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, null, currentUser, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser, 0); } else if (currentChat != null) { if (currentChat.photo != null) { currentPhoto = currentChat.photo.photo_small; @@ -9158,7 +9206,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate currentPhoto = null; } avatarDrawable.setInfo(currentChat); - avatarImage.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, null, currentChat, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChat, 0); } else { currentPhoto = null; avatarDrawable.setInfo(messageObject.getFromChatId(), null, null); @@ -11020,7 +11068,7 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate return !forceNotDrawTime; } - private boolean shouldDrawTimeOnMedia() { + public boolean shouldDrawTimeOnMedia() { if (overideShouldDrawTimeOnMedia != 0) { return overideShouldDrawTimeOnMedia == 1; } @@ -11028,6 +11076,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } public void drawTime(Canvas canvas, float alpha, boolean fromParent) { + if (!drawFromPinchToZoom && delegate != null && delegate.getPinchToZoomHelper() != null && delegate.getPinchToZoomHelper().isInOverlayModeFor(this) && shouldDrawTimeOnMedia()) { + return; + } for (int i = 0; i < 2; i++) { float curentAplha = alpha; if (i == 0 && isDrawSelectionBackground() && currentSelectedBackgroundAlpha == 1f && !shouldDrawTimeOnMedia()) { @@ -11828,6 +11879,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate } public void drawOverlays(Canvas canvas) { + if (!drawFromPinchToZoom && delegate != null && delegate.getPinchToZoomHelper() != null && delegate.getPinchToZoomHelper().isInOverlayModeFor(this)) { + return; + } long newAnimationTime = SystemClock.elapsedRealtime(); long animationDt = newAnimationTime - lastAnimationTime; if (animationDt > 17) { @@ -13127,6 +13181,9 @@ public class ChatMessageCell extends BaseCell implements SeekBar.SeekBarDelegate info.setParent(ChatMessageCell.this); info.setPackageName(getContext().getPackageName()); if (virtualViewId >= LINK_IDS_START) { + if (!(currentMessageObject.messageText instanceof Spannable)) { + return null; + } Spannable buffer = (Spannable) currentMessageObject.messageText; ClickableSpan link = getLinkById(virtualViewId); if (link == null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxUserCell.java index 040e158e9..490c179fe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/CheckBoxUserCell.java @@ -77,7 +77,7 @@ public class CheckBoxUserCell extends FrameLayout { textView.setText(ContactsController.formatName(user.first_name, user.last_name)); checkBox.setChecked(checked, false); avatarDrawable.setInfo(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); needDivider = divider; setWillNotDraw(!divider); } 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 0b46bad2a..ef3c8af61 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogCell.java @@ -981,7 +981,7 @@ public class DialogCell extends BaseCell { } thumbImage.setImage(ImageLocation.getForObject(bigThumb, message.photoThumbsObject), "20_20", ImageLocation.getForObject(smallThumb, message.photoThumbsObject), "20_20", size, null, message, 0); } else { - thumbImage.setImage(null, null, ImageLocation.getForObject(smallThumb, message.photoThumbsObject), "20_20", null, message, 0); + thumbImage.setImage(null, null, ImageLocation.getForObject(smallThumb, message.photoThumbsObject), "20_20", (Drawable) null, message, 0); } needEmoji = false; } @@ -2113,11 +2113,11 @@ public class DialogCell extends BaseCell { avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_SAVED); avatarImage.setImage(null, null, avatarDrawable, null, user, 0); } else { - avatarImage.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, null, user, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user, 0); } } else if (chat != null) { avatarDrawable.setInfo(chat); - avatarImage.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, null, chat, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat, 0); } } @@ -2236,7 +2236,10 @@ public class DialogCell extends BaseCell { boolean needInvalidate = false; if (currentDialogFolderId != 0 && archivedChatsDrawable != null && archivedChatsDrawable.outProgress == 0.0f && translationX == 0.0f) { + canvas.save(); + canvas.clipRect(0, 0, getMeasuredWidth(), getMeasuredHeight()); archivedChatsDrawable.draw(canvas); + canvas.restore(); return; } @@ -2892,7 +2895,10 @@ public class DialogCell extends BaseCell { canvas.restore(); } if (currentDialogFolderId != 0 && translationX == 0 && archivedChatsDrawable != null) { + canvas.save(); + canvas.clipRect(0, 0, getMeasuredWidth(), getMeasuredHeight()); archivedChatsDrawable.draw(canvas); + canvas.restore(); } if (useSeparator) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogMeUrlCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogMeUrlCell.java index 9d6db96b2..d4226ea95 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogMeUrlCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DialogMeUrlCell.java @@ -129,7 +129,7 @@ public class DialogMeUrlCell extends BaseCell { } nameString = chat.title; avatarDrawable.setInfo(chat); - avatarImage.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, null, recentMeUrl, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, recentMeUrl, 0); } else if (recentMeUrl instanceof TLRPC.TL_recentMeUrlUser) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(recentMeUrl.user_id); if (!LocaleController.isRTL) { @@ -153,7 +153,7 @@ public class DialogMeUrlCell extends BaseCell { } nameString = UserObject.getUserName(user); avatarDrawable.setInfo(user); - avatarImage.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, null, recentMeUrl, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, recentMeUrl, 0); } else if (recentMeUrl instanceof TLRPC.TL_recentMeUrlStickerSet) { if (!LocaleController.isRTL) { nameLeft = AndroidUtilities.dp(AndroidUtilities.leftBaseline); @@ -180,7 +180,7 @@ public class DialogMeUrlCell extends BaseCell { nameLockTop = AndroidUtilities.dp(17.5f); } drawVerified = recentMeUrl.chat_invite.chat.verified; - avatarImage.setImage(ImageLocation.getForChat(recentMeUrl.chat_invite.chat, false), "50_50", avatarDrawable, null, recentMeUrl, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(recentMeUrl.chat_invite.chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(recentMeUrl.chat_invite.chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, recentMeUrl, 0); } else { nameString = recentMeUrl.chat_invite.title; avatarDrawable.setInfo(5, recentMeUrl.chat_invite.title, null); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java index 112a8d315..c24c458dc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerProfileCell.java @@ -351,7 +351,7 @@ public class DrawerProfileCell extends FrameLayout { phoneTextView.setText(PhoneFormat.getInstance().format("+" + user.phone)); AvatarDrawable avatarDrawable = new AvatarDrawable(user); avatarDrawable.setColor(Theme.getColor(Theme.key_avatar_backgroundInProfileBlue)); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); applyBackground(true); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerUserCell.java index 7b7650656..53a9857bd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/DrawerUserCell.java @@ -91,7 +91,7 @@ public class DrawerUserCell extends FrameLayout { avatarDrawable.setInfo(user); textView.setText(ContactsController.formatName(user.first_name, user.last_name)); imageView.getImageReceiver().setCurrentAccount(account); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); checkBox.setVisibility(account == UserConfig.selectedAccount ? VISIBLE : INVISIBLE); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallInvitedCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallInvitedCell.java index e7a5e73ec..9d33cfb42 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallInvitedCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallInvitedCell.java @@ -91,7 +91,7 @@ public class GroupCallInvitedCell extends FrameLayout { nameTextView.setText(lastName); avatarImageView.getImageReceiver().setCurrentAccount(account); - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } public void setDrawDivider(boolean draw) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallUserCell.java index bbfd123fa..2e5d92d71 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCallUserCell.java @@ -45,8 +45,8 @@ import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RLottieImageView; +import org.telegram.ui.Components.RadialProgressView; import org.telegram.ui.Components.WaveDrawable; -import org.telegram.ui.ProfileActivity; import java.util.ArrayList; @@ -57,10 +57,13 @@ public class GroupCallUserCell extends FrameLayout { private BackupImageView avatarImageView; private SimpleTextView nameTextView; private SimpleTextView[] statusTextView = new SimpleTextView[5]; + private SimpleTextView fullAboutTextView; private RLottieImageView muteButton; private RLottieDrawable muteDrawable; private RLottieDrawable shakeHandDrawable; + private RadialProgressView avatarProgressView; + private AvatarDrawable avatarDrawable; private ChatObject.Call currentCall; @@ -81,7 +84,6 @@ public class GroupCallUserCell extends FrameLayout { private int currentStatus; private int selfId; - private Runnable shakeHandCallback = () -> { shakeHandDrawable.setOnFinishCallback(null, 0); muteDrawable.setOnFinishCallback(null, 0); @@ -132,6 +134,7 @@ public class GroupCallUserCell extends FrameLayout { private boolean updateRunnableScheduled; private boolean updateVoiceRunnableScheduled; private boolean isSpeaking; + private boolean hasAvatar; private Drawable speakingDrawable; @@ -142,17 +145,29 @@ public class GroupCallUserCell extends FrameLayout { public void setProgressToAvatarPreview(float progressToAvatarPreview) { this.progressToAvatarPreview = progressToAvatarPreview; nameTextView.setTranslationX((LocaleController.isRTL ? AndroidUtilities.dp(53) : -AndroidUtilities.dp(53)) * progressToAvatarPreview); - for (int i = 0; i < statusTextView.length; i++) { - if (!TextUtils.isEmpty(statusTextView[4].getText()) && statusTextView[4].getLineCount() > 1) { - statusTextView[i].setFullLayoutAdditionalWidth(AndroidUtilities.dp(92), LocaleController.isRTL ? AndroidUtilities.dp(48) : AndroidUtilities.dp(53)); - statusTextView[i].setFullAlpha(progressToAvatarPreview); - statusTextView[i].setTranslationX(0); - statusTextView[i].invalidate(); - } else { - statusTextView[i].setTranslationX((LocaleController.isRTL ? AndroidUtilities.dp(53) : -AndroidUtilities.dp(53)) * progressToAvatarPreview); - statusTextView[i].setFullLayoutAdditionalWidth(0, 0); + + if (isSelfUser() && progressToAvatarPreview > 0) { + fullAboutTextView.setTranslationX((LocaleController.isRTL ? -AndroidUtilities.dp(53) : AndroidUtilities.dp(53)) * (1f - progressToAvatarPreview)); + fullAboutTextView.setVisibility(View.VISIBLE); + fullAboutTextView.setAlpha(progressToAvatarPreview); + statusTextView[4].setAlpha(1f - progressToAvatarPreview); + statusTextView[4].setTranslationX((LocaleController.isRTL ? AndroidUtilities.dp(53) : -AndroidUtilities.dp(53)) * progressToAvatarPreview); + } else { + fullAboutTextView.setVisibility(View.GONE); + + for (int i = 0; i < statusTextView.length; i++) { + if (!TextUtils.isEmpty(statusTextView[4].getText()) && statusTextView[4].getLineCount() > 1) { + statusTextView[i].setFullLayoutAdditionalWidth(AndroidUtilities.dp(92), LocaleController.isRTL ? AndroidUtilities.dp(48) : AndroidUtilities.dp(53)); + statusTextView[i].setFullAlpha(progressToAvatarPreview); + statusTextView[i].setTranslationX(0); + statusTextView[i].invalidate(); + } else { + statusTextView[i].setTranslationX((LocaleController.isRTL ? AndroidUtilities.dp(53) : -AndroidUtilities.dp(53)) * progressToAvatarPreview); + statusTextView[i].setFullLayoutAdditionalWidth(0, 0); + } } } + avatarImageView.setAlpha(progressToAvatarPreview == 0 ? 1f : 0); avatarWavesDrawable.setShowWaves(isSpeaking && progressToAvatarPreview == 0, this); @@ -160,6 +175,8 @@ public class GroupCallUserCell extends FrameLayout { muteButton.setAlpha(1f - progressToAvatarPreview); muteButton.setScaleX(0.6f + 0.4f * (1f - progressToAvatarPreview)); muteButton.setScaleY(0.6f + 0.4f * (1f - progressToAvatarPreview)); + + invalidate(); } @@ -167,6 +184,15 @@ public class GroupCallUserCell extends FrameLayout { return avatarWavesDrawable; } + public void setUploadProgress(float progress, boolean animated) { + avatarProgressView.setProgress(progress); + if (progress < 1f) { + AndroidUtilities.updateViewVisibilityAnimated(avatarProgressView, true, 1f, animated); + } else { + AndroidUtilities.updateViewVisibilityAnimated(avatarProgressView, false, 1f, animated); + } + } + private static class VerifiedDrawable extends Drawable { private Drawable[] drawables = new Drawable[2]; @@ -227,6 +253,28 @@ public class GroupCallUserCell extends FrameLayout { avatarImageView.setRoundRadius(AndroidUtilities.dp(24)); addView(avatarImageView, LayoutHelper.createFrame(46, 46, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 0 : 11, 6, LocaleController.isRTL ? 11 : 0, 0)); + avatarProgressView = new RadialProgressView(context) { + private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + { + paint.setColor(0x55000000); + } + + @Override + protected void onDraw(Canvas canvas) { + if (avatarImageView.getImageReceiver().hasNotThumb() && avatarImageView.getAlpha() > 0) { + paint.setAlpha((int) (0x55 * avatarImageView.getImageReceiver().getCurrentAlpha() * avatarImageView.getAlpha())); + canvas.drawCircle(getMeasuredWidth() / 2.0f, getMeasuredHeight() / 2.0f, getMeasuredWidth() / 2.0f, paint); + } + avatarProgressView.setProgressColor(ColorUtils.setAlphaComponent(0xffffffff, (int) (255 * avatarImageView.getImageReceiver().getCurrentAlpha() * avatarImageView.getAlpha()))); + super.onDraw(canvas); + } + }; + avatarProgressView.setSize(AndroidUtilities.dp(26)); + avatarProgressView.setProgressColor(0xffffffff); + avatarProgressView.setNoProgress(false); + addView(avatarProgressView, LayoutHelper.createFrame(46, 46, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 0 : 11, 6, LocaleController.isRTL ? 11 : 0, 0)); + AndroidUtilities.updateViewVisibilityAnimated(avatarProgressView, false, 1f, false); + nameTextView = new SimpleTextView(context); nameTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); nameTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); @@ -247,15 +295,18 @@ public class GroupCallUserCell extends FrameLayout { @Override public void setAlpha(float alpha) { originalAlpha = alpha; + float alphaOverride; if (num == 4) { - float alphaOverride = statusTextView[4].getFullAlpha(); - if (alphaOverride > 0) { + alphaOverride = statusTextView[4].getFullAlpha(); + if (isSelfUser() && progressToAvatarPreview > 0) { + super.setAlpha(1f - progressToAvatarPreview); + } else if (alphaOverride > 0) { super.setAlpha(Math.max(alpha, alphaOverride)); } else { super.setAlpha(alpha); } } else { - float alphaOverride = 1.0f - statusTextView[4].getFullAlpha(); + alphaOverride = 1.0f - statusTextView[4].getFullAlpha(); super.setAlpha(alpha * alphaOverride); } } @@ -306,6 +357,13 @@ public class GroupCallUserCell extends FrameLayout { } } + fullAboutTextView = new SimpleTextView(context); + fullAboutTextView.setMaxLines(3); + fullAboutTextView.setTextSize(15); + fullAboutTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_mutedIcon)); + fullAboutTextView.setVisibility(View.GONE); + addView(fullAboutTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 20 * 3, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 14, 32, 14, 0)); + muteDrawable = new RLottieDrawable(R.raw.voice_outlined2, "" + R.raw.voice_outlined2, AndroidUtilities.dp(34), AndroidUtilities.dp(32), true, null); shakeHandDrawable = new RLottieDrawable(R.raw.hand_1, "" + R.raw.hand_1, AndroidUtilities.dp(34), AndroidUtilities.dp(32), true, null); @@ -333,10 +391,16 @@ public class GroupCallUserCell extends FrameLayout { } public int getClipHeight() { - int lineCount = statusTextView[4].getLineCount(); + SimpleTextView aboutTextView; + if (!TextUtils.isEmpty(fullAboutTextView.getText()) && hasAvatar) { + aboutTextView = fullAboutTextView; + } else { + aboutTextView = statusTextView[4]; + } + int lineCount = aboutTextView.getLineCount(); if (lineCount > 1) { - int h = statusTextView[4].getTextHeight(); - return statusTextView[4].getTop() + h + AndroidUtilities.dp(8); + int h = aboutTextView.getTextHeight(); + return aboutTextView.getTop() + h + AndroidUtilities.dp(8); } return getMeasuredHeight(); } @@ -377,7 +441,7 @@ public class GroupCallUserCell extends FrameLayout { return avatarImageView.getImageReceiver().hasNotThumb(); } - public void setData(AccountInstance account, TLRPC.TL_groupCallParticipant groupCallParticipant, ChatObject.Call call, int self) { + public void setData(AccountInstance account, TLRPC.TL_groupCallParticipant groupCallParticipant, ChatObject.Call call, int self, TLRPC.FileLocation uploadingAvatar) { currentCall = call; accountInstance = account; selfId = self; @@ -393,7 +457,14 @@ public class GroupCallUserCell extends FrameLayout { nameTextView.setText(UserObject.getUserName(currentUser)); nameTextView.setRightDrawable(currentUser != null && currentUser.verified ? new VerifiedDrawable(getContext()) : null); avatarImageView.getImageReceiver().setCurrentAccount(account.getCurrentAccount()); - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + if (uploadingAvatar != null) { + hasAvatar = true; + avatarImageView.setImage(ImageLocation.getForLocal(uploadingAvatar), "50_50", avatarDrawable, null); + } else { + ImageLocation imageLocation = ImageLocation.getForUser(currentUser, ImageLocation.TYPE_SMALL); + hasAvatar = imageLocation != null; + avatarImageView.setImage(imageLocation, "50_50", avatarDrawable, currentUser); + } } else { currentChat = accountInstance.getMessagesController().getChat(-id); currentUser = null; @@ -403,9 +474,17 @@ public class GroupCallUserCell extends FrameLayout { nameTextView.setText(currentChat.title); nameTextView.setRightDrawable(currentChat.verified ? new VerifiedDrawable(getContext()) : null); avatarImageView.getImageReceiver().setCurrentAccount(account.getCurrentAccount()); - avatarImageView.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, currentChat); + if (uploadingAvatar != null) { + hasAvatar = true; + avatarImageView.setImage(ImageLocation.getForLocal(uploadingAvatar), "50_50", avatarDrawable, null); + } else { + ImageLocation imageLocation = ImageLocation.getForChat(currentChat, ImageLocation.TYPE_SMALL); + hasAvatar = imageLocation != null; + avatarImageView.setImage(imageLocation, "50_50", avatarDrawable, currentChat); + } } } + applyParticipantChanges(false); } public void setDrawDivider(boolean draw) { @@ -578,18 +657,45 @@ public class GroupCallUserCell extends FrameLayout { } } - if (isSelfUser()) { - statusTextView[4].setTextColor(Theme.getColor(Theme.key_voipgroup_listeningText)); - } else { + if (!isSelfUser()) { statusTextView[4].setTextColor(Theme.getColor(grayIconColor)); } if (isSelfUser()) { - statusTextView[4].setText(LocaleController.getString("ThisIsYou", R.string.ThisIsYou)); + if (!hasAbout && !hasAvatar) { + if (currentUser != null) { + statusTextView[4].setText(LocaleController.getString("TapToAddPhotoOrBio", R.string.TapToAddPhotoOrBio)); + } else { + statusTextView[4].setText(LocaleController.getString("TapToAddPhotoOrDescription", R.string.TapToAddPhotoOrDescription)); + } + statusTextView[4].setTextColor(Theme.getColor(grayIconColor)); + } else if (!hasAbout ){ + if (currentUser != null) { + statusTextView[4].setText(LocaleController.getString("TapToAddBio", R.string.TapToAddBio)); + } else { + statusTextView[4].setText(LocaleController.getString("TapToAddDescription", R.string.TapToAddDescription)); + } + statusTextView[4].setTextColor(Theme.getColor(grayIconColor)); + } else if (!hasAvatar) { + statusTextView[4].setText(LocaleController.getString("TapToAddPhoto", R.string.TapToAddPhoto)); + statusTextView[4].setTextColor(Theme.getColor(grayIconColor)); + } else { + statusTextView[4].setText(LocaleController.getString("ThisIsYou", R.string.ThisIsYou)); + statusTextView[4].setTextColor(Theme.getColor(Theme.key_voipgroup_listeningText)); + } + if (hasAbout) { + fullAboutTextView.setText(AndroidUtilities.replaceNewLines(participant.about)); + fullAboutTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_mutedIcon)); + } else { + fullAboutTextView.setText(statusTextView[newStatus].getText()); + fullAboutTextView.setTextColor(statusTextView[newStatus].getTextColor()); + } } else if (hasAbout) { statusTextView[4].setText(AndroidUtilities.replaceNewLines(participant.about)); + fullAboutTextView.setText(""); } else { statusTextView[4].setText(""); + fullAboutTextView.setText(""); } boolean somethingChanged = false; if (animatorSet != null) { @@ -626,7 +732,7 @@ public class GroupCallUserCell extends FrameLayout { int volume = vol / 100; if (volume != 100) { statusTextView[1].setLeftDrawable(speakingDrawable); - statusTextView[1].setText((vol < 100 ? 1 : volume) + "% " + LocaleController.getString("Speaking", R.string.Speaking)); + statusTextView[1].setText(LocaleController.formatString("SpeakingWithVolume", R.string.SpeakingWithVolume, vol < 100 ? 1 : volume)); } else { statusTextView[1].setLeftDrawable(null); statusTextView[1].setText(LocaleController.getString("Speaking", R.string.Speaking)); @@ -766,6 +872,8 @@ public class GroupCallUserCell extends FrameLayout { avatarImageView.setScaleX(avatarWavesDrawable.getAvatarScale()); avatarImageView.setScaleY(avatarWavesDrawable.getAvatarScale()); + avatarProgressView.setScaleX(avatarWavesDrawable.getAvatarScale()); + avatarProgressView.setScaleY(avatarWavesDrawable.getAvatarScale()); super.dispatchDraw(canvas); } @@ -913,6 +1021,7 @@ public class GroupCallUserCell extends FrameLayout { return avatarImageView; } + @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCreateUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCreateUserCell.java index c3004876f..78dad291a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCreateUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/GroupCreateUserCell.java @@ -330,7 +330,7 @@ public class GroupCreateUserCell extends FrameLayout { } } - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else { TLRPC.Chat currentChat = (TLRPC.Chat) currentObject; if (currentChat.photo != null) { @@ -390,7 +390,7 @@ public class GroupCreateUserCell extends FrameLayout { } } - avatarImageView.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, currentChat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChat); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HintDialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HintDialogCell.java index 801e04156..d18cddd94 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/HintDialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/HintDialogCell.java @@ -11,8 +11,6 @@ package org.telegram.ui.Cells; import android.content.Context; import android.graphics.Canvas; import android.graphics.RectF; -import android.text.Layout; -import android.text.StaticLayout; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; @@ -130,7 +128,7 @@ public class HintDialogCell extends FrameLayout { nameTextView.setText(""); } avatarDrawable.setInfo(currentUser); - imageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + imageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-uid); if (name != null) { @@ -142,7 +140,7 @@ public class HintDialogCell extends FrameLayout { } avatarDrawable.setInfo(chat); currentUser = null; - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } if (counter) { update(0); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/JoinSheetUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/JoinSheetUserCell.java index a134e6922..1c21246f4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/JoinSheetUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/JoinSheetUserCell.java @@ -58,7 +58,7 @@ public class JoinSheetUserCell extends FrameLayout { public void setUser(TLRPC.User user) { nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); avatarDrawable.setInfo(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } public void setCount(int count) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ManageChatUserCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ManageChatUserCell.java index c08857730..22fcc3a87 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ManageChatUserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ManageChatUserCell.java @@ -260,7 +260,7 @@ public class ManageChatUserCell extends FrameLayout { } } lastAvatar = photo; - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else if (currentObject instanceof TLRPC.Chat) { TLRPC.Chat currentChat = (TLRPC.Chat) currentObject; @@ -317,7 +317,7 @@ public class ManageChatUserCell extends FrameLayout { } } lastAvatar = photo; - avatarImageView.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, currentChat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChat); } else if (currentObject instanceof Integer) { nameTextView.setText(currentName); statusTextView.setTextColor(statusColor); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/MentionCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/MentionCell.java index 0152ee1a0..a3bc21010 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/MentionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/MentionCell.java @@ -76,7 +76,7 @@ public class MentionCell extends LinearLayout { } avatarDrawable.setInfo(user); if (user.photo != null && user.photo.photo_small != null) { - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } else { imageView.setImageDrawable(avatarDrawable); } @@ -99,7 +99,7 @@ public class MentionCell extends LinearLayout { } avatarDrawable.setInfo(chat); if (chat.photo != null && chat.photo.photo_small != null) { - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } else { imageView.setImageDrawable(avatarDrawable); } @@ -140,7 +140,7 @@ public class MentionCell extends LinearLayout { imageView.setVisibility(VISIBLE); avatarDrawable.setInfo(user); if (user.photo != null && user.photo.photo_small != null) { - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } else { imageView.setImageDrawable(avatarDrawable); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/PaymentInfoCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PaymentInfoCell.java index da858bba3..66fb58991 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/PaymentInfoCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/PaymentInfoCell.java @@ -60,25 +60,27 @@ public class PaymentInfoCell extends FrameLayout { detailExTextView = new TextView(context); detailExTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2)); - detailExTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13); + detailExTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); detailExTextView.setLines(1); detailExTextView.setMaxLines(1); detailExTextView.setSingleLine(true); detailExTextView.setEllipsize(TextUtils.TruncateAt.END); detailExTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - addView(detailExTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 10 : 123, 90, LocaleController.isRTL ? 123 : 10, 0)); + addView(detailExTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 10 : 123, 90, LocaleController.isRTL ? 123 : 10, 9)); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(120), MeasureSpec.EXACTLY)); - } - - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - top = detailTextView.getBottom() + AndroidUtilities.dp(3); - detailExTextView.layout(detailExTextView.getLeft(), top, detailExTextView.getRight(), top + detailExTextView.getMeasuredHeight()); + int h; + if (imageView.getVisibility() != GONE) { + h = MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(120), MeasureSpec.EXACTLY); + } else { + h = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); + measureChildWithMargins(detailTextView, widthMeasureSpec, 0, heightMeasureSpec, 0); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) detailExTextView.getLayoutParams(); + layoutParams.topMargin = AndroidUtilities.dp(33) + detailTextView.getMeasuredHeight() + AndroidUtilities.dp(3); + } + super.onMeasure(MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY), h); } public void setInvoice(TLRPC.TL_messageMediaInvoice invoice, String botname) { @@ -107,7 +109,38 @@ public class PaymentInfoCell extends FrameLayout { } else { nameTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 9, 17, 0)); detailTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 33, 17, 0)); - detailExTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 90, 17, 0)); + detailExTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 90, 17, 9)); + imageView.setVisibility(GONE); + } + } + + public void setReceipt(TLRPC.TL_payments_paymentReceipt receipt, String botname) { + nameTextView.setText(receipt.title); + detailTextView.setText(receipt.description); + detailExTextView.setText(botname); + + int maxPhotoWidth; + if (AndroidUtilities.isTablet()) { + maxPhotoWidth = (int) (AndroidUtilities.getMinTabletSide() * 0.7f); + } else { + maxPhotoWidth = (int) (Math.min(AndroidUtilities.displaySize.x, AndroidUtilities.displaySize.y) * 0.7f); + } + int width = 640; + int height = 360; + float scale = width / (float) (maxPhotoWidth - AndroidUtilities.dp(2)); + width /= scale; + height /= scale; + if (receipt.photo != null && receipt.photo.mime_type.startsWith("image/")) { + nameTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 10 : 123, 9, LocaleController.isRTL ? 123 : 10, 0)); + detailTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 10 : 123, 33, LocaleController.isRTL ? 123 : 10, 0)); + detailExTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, LocaleController.isRTL ? 10 : 123, 90, LocaleController.isRTL ? 123 : 10, 0)); + imageView.setVisibility(VISIBLE); + String filter = String.format(Locale.US, "%d_%d", width, height); + imageView.getImageReceiver().setImage(ImageLocation.getForWebFile(WebFile.createWithWebDocument(receipt.photo)), filter, null, null, -1, null, receipt, 1); + } else { + nameTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 9, 17, 0)); + detailTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 33, 17, 0)); + detailExTextView.setLayoutParams(LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 17, 90, 17, 9)); imageView.setVisibility(GONE); } } 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 1e1381fdf..0b6a00721 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ProfileSearchCell.java @@ -501,14 +501,14 @@ public class ProfileSearchCell extends BaseCell { if (user.photo != null) { photo = user.photo.photo_small; } - avatarImage.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, null, user, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user, 0); } } else if (chat != null) { if (chat.photo != null) { photo = chat.photo.photo_small; } avatarDrawable.setInfo(chat); - avatarImage.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, null, chat, 0); + avatarImage.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat, 0); } else { avatarDrawable.setInfo(0, null, null); avatarImage.setImage(null, null, avatarDrawable, null, null, 0); 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 f45fbb681..1793545f6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SessionCell.java @@ -183,7 +183,7 @@ public class SessionCell extends FrameLayout { if (user != null) { avatarDrawable.setInfo(user); name = UserObject.getFirstName(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } else { name = ""; } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ShareDialogCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ShareDialogCell.java index 43b396b3f..90557001c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/ShareDialogCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/ShareDialogCell.java @@ -41,58 +41,68 @@ public class ShareDialogCell extends FrameLayout { private CheckBox2 checkBox; private AvatarDrawable avatarDrawable = new AvatarDrawable(); private TLRPC.User user; - private boolean darkTheme; + private int currentType; private float onlineProgress; private long lastUpdateTime; + private long currentDialog; private int currentAccount = UserConfig.selectedAccount; - public ShareDialogCell(Context context, boolean forCall) { + public static final int TYPE_SHARE = 0; + public static final int TYPE_CALL = 1; + public static final int TYPE_CREATE = 2; + + public ShareDialogCell(Context context, int type) { super(context); setWillNotDraw(false); - darkTheme = forCall; + currentType = type; imageView = new BackupImageView(context); imageView.setRoundRadius(AndroidUtilities.dp(28)); - addView(imageView, LayoutHelper.createFrame(56, 56, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 7, 0, 0)); + if (type == TYPE_CREATE) { + addView(imageView, LayoutHelper.createFrame(48, 48, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 7, 0, 0)); + } else { + addView(imageView, LayoutHelper.createFrame(56, 56, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 7, 0, 0)); + } nameTextView = new TextView(context); - nameTextView.setTextColor(Theme.getColor(forCall ? Theme.key_voipgroup_nameText : Theme.key_dialogTextBlack)); + nameTextView.setTextColor(Theme.getColor(type == TYPE_CALL ? Theme.key_voipgroup_nameText : Theme.key_dialogTextBlack)); nameTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); nameTextView.setMaxLines(2); nameTextView.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL); nameTextView.setLines(2); nameTextView.setEllipsize(TextUtils.TruncateAt.END); - addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 6, 66, 6, 0)); + addView(nameTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 6, currentType == TYPE_CREATE ? 58 : 66, 6, 0)); checkBox = new CheckBox2(context, 21); - checkBox.setColor(Theme.key_dialogRoundCheckBox, forCall ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_dialogBackground, Theme.key_dialogRoundCheckBoxCheck); + checkBox.setColor(Theme.key_dialogRoundCheckBox, type == TYPE_CALL ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_dialogBackground, Theme.key_dialogRoundCheckBoxCheck); checkBox.setDrawUnchecked(false); checkBox.setDrawBackgroundAsArc(4); checkBox.setProgressDelegate(progress -> { float scale = 1.0f - (1.0f - 0.857f) * checkBox.getProgress(); imageView.setScaleX(scale); imageView.setScaleY(scale); + invalidate(); }); - addView(checkBox, LayoutHelper.createFrame(24, 24, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 19, 42, 0, 0)); + addView(checkBox, LayoutHelper.createFrame(24, 24, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 19, currentType == TYPE_CREATE ? -40 : 42, 0, 0)); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(103), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(currentType == TYPE_CREATE ? 95 : 103), MeasureSpec.EXACTLY)); } public void setDialog(int uid, boolean checked, CharSequence name) { if (uid > 0) { user = MessagesController.getInstance(currentAccount).getUser(uid); avatarDrawable.setInfo(user); - if (UserObject.isReplyUser(user)) { + if (currentType != TYPE_CREATE && UserObject.isReplyUser(user)) { nameTextView.setText(LocaleController.getString("RepliesTitle", R.string.RepliesTitle)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_REPLIES); imageView.setImage(null, null, avatarDrawable, user); - } else if (UserObject.isUserSelf(user)) { + } else if (currentType != TYPE_CREATE && UserObject.isUserSelf(user)) { nameTextView.setText(LocaleController.getString("SavedMessages", R.string.SavedMessages)); avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_SAVED); imageView.setImage(null, null, avatarDrawable, user); @@ -104,7 +114,7 @@ public class ShareDialogCell extends FrameLayout { } else { nameTextView.setText(""); } - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { user = null; @@ -117,11 +127,16 @@ public class ShareDialogCell extends FrameLayout { nameTextView.setText(""); } avatarDrawable.setInfo(chat); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } + currentDialog = uid; checkBox.setChecked(checked, false); } + public long getCurrentDialog() { + return currentDialog; + } + public void setChecked(boolean checked, boolean animated) { checkBox.setChecked(checked, animated); } @@ -129,7 +144,7 @@ public class ShareDialogCell extends FrameLayout { @Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { boolean result = super.drawChild(canvas, child, drawingTime); - if (child == imageView) { + if (child == imageView && currentType != TYPE_CREATE) { if (user != null && !MessagesController.isSupportUser(user)) { long newTime = SystemClock.elapsedRealtime(); long dt = newTime - lastUpdateTime; @@ -142,7 +157,7 @@ public class ShareDialogCell extends FrameLayout { if (isOnline || onlineProgress != 0) { int top = imageView.getBottom() - AndroidUtilities.dp(6); int left = imageView.getRight() - AndroidUtilities.dp(10); - Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(darkTheme ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_windowBackgroundWhite)); + Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(currentType == TYPE_CALL ? Theme.key_voipgroup_inviteMembersBackground : Theme.key_windowBackgroundWhite)); canvas.drawCircle(left, top, AndroidUtilities.dp(7) * onlineProgress, Theme.dialogs_onlineCirclePaint); Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_chats_onlineCircle)); canvas.drawCircle(left, top, AndroidUtilities.dp(5) * onlineProgress, Theme.dialogs_onlineCirclePaint); @@ -177,6 +192,6 @@ public class ShareDialogCell extends FrameLayout { int cy = imageView.getTop() + imageView.getMeasuredHeight() / 2; Theme.checkboxSquare_checkPaint.setColor(Theme.getColor(Theme.key_dialogRoundCheckBox)); Theme.checkboxSquare_checkPaint.setAlpha((int) (checkBox.getProgress() * 255)); - canvas.drawCircle(cx, cy, AndroidUtilities.dp(28), Theme.checkboxSquare_checkPaint); + canvas.drawCircle(cx, cy, AndroidUtilities.dp(24), Theme.checkboxSquare_checkPaint); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharingLiveLocationCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharingLiveLocationCell.java index acaa813a0..aabcfacc4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharingLiveLocationCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/SharingLiveLocationCell.java @@ -124,14 +124,14 @@ public class SharingLiveLocationCell extends FrameLayout { if (user != null) { avatarDrawable = new AvatarDrawable(user); name = UserObject.getUserName(user); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-lowerId); if (chat != null) { avatarDrawable = new AvatarDrawable(chat); name = chat.title; - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } nameTextView.setText(name); @@ -177,14 +177,14 @@ public class SharingLiveLocationCell extends FrameLayout { if (user != null) { avatarDrawable = new AvatarDrawable(user); name = UserObject.getUserName(user); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-fromId); if (chat != null) { avatarDrawable = new AvatarDrawable(chat); name = chat.title; - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } } @@ -216,14 +216,14 @@ public class SharingLiveLocationCell extends FrameLayout { if (user != null) { avatarDrawable.setInfo(user); nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-lower_id); if (chat != null) { avatarDrawable.setInfo(chat); nameTextView.setText(chat.title); - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } @@ -249,14 +249,14 @@ public class SharingLiveLocationCell extends FrameLayout { if (user != null) { avatarDrawable.setInfo(user); nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-lower_id); if (chat != null) { avatarDrawable.setInfo(chat); nameTextView.setText(chat.title); - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/StatisticPostInfoCell.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/StatisticPostInfoCell.java index e66fd1887..cbc76b726 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/StatisticPostInfoCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/StatisticPostInfoCell.java @@ -113,7 +113,7 @@ public class StatisticPostInfoCell extends FrameLayout { public void setData(StatisticActivity.MemberData memberData) { avatarDrawable.setInfo(memberData.user); - imageView.setImage(ImageLocation.getForUser(memberData.user, false), "50_50", avatarDrawable, memberData.user); + imageView.setImage(ImageLocation.getForUserOrChat(memberData.user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(memberData.user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, memberData.user); imageView.setRoundRadius(AndroidUtilities.dp(46) >> 1); message.setText(memberData.user.first_name); date.setText(memberData.description); 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 7fe3538c9..68f59d26b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell.java @@ -493,9 +493,9 @@ public class UserCell extends FrameLayout { lastAvatar = photo; if (currentUser != null) { - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else if (currentChat != null) { - avatarImageView.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, currentChat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChat); } else { avatarImageView.setImageDrawable(avatarDrawable); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell2.java b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell2.java index 86c747fd1..8bfb329a0 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell2.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Cells/UserCell2.java @@ -260,7 +260,7 @@ public class UserCell2 extends FrameLayout { statusTextView.setText(LocaleController.formatUserStatus(currentAccount, currentUser)); } } - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else if (currentChat != null) { statusTextView.setTextColor(statusColor); if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { @@ -282,7 +282,7 @@ public class UserCell2 extends FrameLayout { statusTextView.setText(LocaleController.getString("MegaPublic", R.string.MegaPublic)); } } - avatarImageView.setImage(ImageLocation.getForChat(currentChat, false), "50_50", avatarDrawable, currentObject); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentObject); } else { avatarImageView.setImageDrawable(avatarDrawable); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChangePhoneActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChangePhoneActivity.java index b8733a762..375847929 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChangePhoneActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChangePhoneActivity.java @@ -27,6 +27,7 @@ import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.telephony.PhoneNumberUtils; @@ -981,8 +982,8 @@ public class ChangePhoneActivity extends BaseFragment { PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0); String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode); - Intent mailer = new Intent(Intent.ACTION_SEND); - mailer.setType("message/rfc822"); + Intent mailer = new Intent(Intent.ACTION_SENDTO); + mailer.setData(Uri.parse("mailto:")); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"sms@stel.com"}); mailer.putExtra(Intent.EXTRA_SUBJECT, "Android registration/login issue " + version + " " + emailPhone); mailer.putExtra(Intent.EXTRA_TEXT, "Phone: " + requestPhone + "\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault() + "\nError: " + lastError); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java index 0ed2568ea..085368ecf 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelAdminLogActivity.java @@ -2754,7 +2754,7 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio themeDescriptions.add(new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText)); themeDescriptions.add(new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink)); - themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_shareIconDrawable, Theme.chat_botInlineDrawable, Theme.chat_botLinkDrawalbe, Theme.chat_goIconDrawable, Theme.chat_commentStickerDrawable}, null, Theme.key_chat_serviceIcon)); + themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_botCardDrawalbe, Theme.chat_shareIconDrawable, Theme.chat_botInlineDrawable, Theme.chat_botLinkDrawalbe, Theme.chat_goIconDrawable, Theme.chat_commentStickerDrawable}, null, Theme.key_chat_serviceIcon)); themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, ChatActionCell.class}, null, null, null, Theme.key_chat_serviceBackground)); themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, ChatActionCell.class}, null, null, null, Theme.key_chat_serviceBackgroundSelected)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java index 203d005f3..470a6c109 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChannelCreateActivity.java @@ -1003,7 +1003,7 @@ public class ChannelCreateActivity extends BaseFragment implements NotificationC bundle.putInt("chat_id", chat_id); bundle.putBoolean("canCreatePublic", canCreatePublic); if (inputPhoto != null || inputVideo != null) { - MessagesController.getInstance(currentAccount).changeChatAvatar(chat_id, null, inputPhoto, inputVideo, videoTimestamp, inputVideoPath, avatar, avatarBig); + MessagesController.getInstance(currentAccount).changeChatAvatar(chat_id, null, inputPhoto, inputVideo, videoTimestamp, inputVideoPath, avatar, avatarBig, null); } presentFragment(new ChannelCreateActivity(bundle), true); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java index 1fe23d464..e5f01c9fc 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatActivity.java @@ -737,6 +737,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private boolean invalidateMessagesVisiblePart; private boolean scrollByTouch; + private PinchToZoomHelper pinchToZoomHelper; + public float getChatListViewPadding() { return chatListViewPaddingTop; } @@ -1666,6 +1668,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (chatListItemAnimator != null) { chatListItemAnimator.onDestroy(); } + if (pinchToZoomHelper != null) { + pinchToZoomHelper.clear(); + } } @Override @@ -1824,7 +1829,19 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not alert.setDelegate(new ClearHistoryAlert.ClearHistoryAlertDelegate() { @Override public void onClearHistory(boolean revoke) { - performHistoryClear(revoke); + if (revoke && currentUser != null) { + getMessagesStorage().getMessagesCount(currentUser.id, (count) -> { + if (count >= 50) { + AlertsCreator.createClearOrDeleteDialogAlert(ChatActivity.this, true, false, true, null, currentUser, false, false, (param) -> { + performHistoryClear(true); + }); + } else { + performHistoryClear(true); + } + }); + } else { + performHistoryClear(revoke); + } } @Override @@ -1960,6 +1977,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not avatarContainer.onDestroy(); } avatarContainer = new ChatAvatarContainer(context, this, currentEncryptedChat != null); + AndroidUtilities.updateViewVisibilityAnimated(avatarContainer, true, 1f, false); if (inPreviewMode || inBubbleMode) { avatarContainer.setOccupyStatusBar(false); } @@ -2401,6 +2419,10 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } } + if (pinchToZoomHelper.isInOverlayMode()) { + return pinchToZoomHelper.onTouchEvent(ev); + } + if (AvatarPreviewer.hasVisibleInstance()) { AvatarPreviewer.getInstance().onTouchEvent(ev); return true; @@ -5566,6 +5588,26 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } TLRPC.BotInlineResult result = (TLRPC.BotInlineResult) object; + if (currentEncryptedChat != null) { + int error = 0; + if (result.send_message instanceof TLRPC.TL_botInlineMessageMediaAuto && "game".equals(result.type)) { + error = 1; + } else if (result.send_message instanceof TLRPC.TL_botInlineMessageMediaInvoice) { + error = 2; + } + if (error != 0) { + AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("SendMessageTitle", R.string.SendMessageTitle)); + if (error == 1) { + builder.setMessage(LocaleController.getString("GameCantSendSecretChat", R.string.GameCantSendSecretChat)); + } else { + builder.setMessage(LocaleController.getString("InvoiceCantSendSecretChat", R.string.InvoiceCantSendSecretChat)); + } + builder.setNegativeButton(LocaleController.getString("OK", R.string.OK), null); + showDialog(builder.create()); + return; + } + } if ((result.type.equals("photo") && (result.photo != null || result.content != null) || result.type.equals("gif") && (result.document != null || result.content != null) || result.type.equals("video") && (result.document != null/* || result.content_url != null*/))) { @@ -5743,7 +5785,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } }); - topUndoView = new UndoView(context, true) { + topUndoView = new UndoView(context, this, true) { @Override public void didPressUrl(CharacterStyle span) { didPressMessageUrl(span, false, null, null); @@ -6362,10 +6404,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not replyLayout.setOnClickListener(v -> { if (forwardingMessages != null && !forwardingMessages.isEmpty()) { int hasPoll = 0; + boolean hasInvoice = false; for (int a = 0, N = forwardingMessages.size(); a < N; a++) { MessageObject messageObject = forwardingMessages.get(a); - if (hasPoll != 2 && messageObject.isPoll()) { - hasPoll = messageObject.isPublicPoll() ? 2 : 1; + if (messageObject.isPoll()) { + if (hasPoll != 2) { + hasPoll = messageObject.isPublicPoll() ? 2 : 1; + } + } else if (messageObject.isInvoice()) { + hasInvoice = true; } selectedMessagesIds[0].put(messageObject.getId(), messageObject); } @@ -6373,6 +6420,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not args.putBoolean("onlySelect", true); args.putInt("dialogsType", 3); args.putInt("hasPoll", hasPoll); + args.putBoolean("hasInvoice", hasInvoice); args.putInt("messagesCount", forwardingMessages.size()); DialogsActivity fragment = new DialogsActivity(args); fragment.setDelegate(ChatActivity.this); @@ -6422,10 +6470,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not builder.setNegativeButton(LocaleController.getString("SelectOtherChat", R.string.SelectOtherChat), (dialogInterface, i) -> { if (forwardingMessages != null && !forwardingMessages.isEmpty()) { int hasPoll = 0; + boolean hasInvoice = false; for (int a = 0, N = forwardingMessages.size(); a < N; a++) { MessageObject messageObject = forwardingMessages.get(a); - if (hasPoll != 2 && messageObject.isPoll()) { - hasPoll = messageObject.isPublicPoll() ? 2 : 1; + if (messageObject.isPoll()) { + if (hasPoll != 2) { + hasPoll = messageObject.isPublicPoll() ? 2 : 1; + } + } else if (messageObject.isInvoice()) { + hasInvoice = true; } selectedMessagesIds[0].put(messageObject.getId(), messageObject); } @@ -6433,6 +6486,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not args.putBoolean("onlySelect", true); args.putInt("dialogsType", 3); args.putInt("hasPoll", hasPoll); + args.putBoolean("hasInvoice", hasInvoice); args.putInt("messagesCount", forwardingMessages.size()); DialogsActivity fragment = new DialogsActivity(args); fragment.setDelegate(ChatActivity.this); @@ -6911,7 +6965,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not contentView.addView(searchContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 51, Gravity.BOTTOM)); - undoView = new UndoView(context); + undoView = new UndoView(context, this); undoView.setAdditionalTranslationY(AndroidUtilities.dp(51)); contentView.addView(undoView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.LEFT, 8, 0, 8, 8)); @@ -7006,6 +7060,109 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (replyingMessageObject != null) { chatActivityEnterView.setReplyingMessageObject(replyingMessageObject); } + + ViewGroup decorView; + if (Build.VERSION.SDK_INT >= 21) { + decorView = (ViewGroup) getParentActivity().getWindow().getDecorView(); + } else { + decorView = contentView; + } + pinchToZoomHelper = new PinchToZoomHelper(decorView) { + @Override + protected void drawOverlays(Canvas canvas, float alpha, float parentOffsetX, float parentOffsetY, float clipTop, float clipBottom) { + if (alpha > 0) { + View view = getChild(); + if (view instanceof ChatMessageCell) { + ChatMessageCell cell = (ChatMessageCell) view; + + int top = (int) Math.max(clipTop, parentOffsetY); + int bottom = (int) Math.min(clipBottom, parentOffsetY + cell.getMeasuredHeight()); + AndroidUtilities.rectTmp.set(parentOffsetX, top, parentOffsetX + cell.getMeasuredWidth(), bottom); + canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG); + canvas.translate(parentOffsetX, parentOffsetY); + cell.drawFromPinchToZoom = true; + cell.drawOverlays(canvas); + if (cell.shouldDrawTimeOnMedia() && cell.getCurrentMessagesGroup() == null) { + cell.drawTime(canvas, 1f, false); + } + cell.drawFromPinchToZoom = false; + canvas.restore(); + } + } + } + }; + pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { + + @Override + public TextureView getCurrentTextureView() { + return videoTextureView; + } + + @Override + public void onZoomStarted(MessageObject messageObject) { + chatListView.cancelClickRunnables(true); + chatListView.stopScroll(); + if (MediaController.getInstance().isPlayingMessage(messageObject)) { + contentView.removeView(videoPlayerContainer); + videoPlayerContainer = null; + videoTextureView = null; + aspectRatioFrameLayout = null; + } + + for (int i = 0; i < chatListView.getChildCount(); i++) { + if (chatListView.getChildAt(i) instanceof ChatMessageCell) { + ChatMessageCell cell = (ChatMessageCell) chatListView.getChildAt(i); + if (cell.getMessageObject().getId() == messageObject.getId()) { + cell.getPhotoImage().setVisible(false, true); + } + } + } + } + + @Override + public void onZoomFinished(MessageObject messageObject) { + if (messageObject == null) { + return; + } + if (MediaController.getInstance().isPlayingMessage(messageObject)) { + for (int i = 0; i < chatListView.getChildCount(); i++) { + if (chatListView.getChildAt(i) instanceof ChatMessageCell) { + ChatMessageCell cell = (ChatMessageCell) chatListView.getChildAt(i); + if (cell.getMessageObject().getId() == messageObject.getId()) { + AnimatedFileDrawable animation = cell.getPhotoImage().getAnimation(); + if (animation.isRunning()) { + animation.stop(); + } + if (animation != null) { + Bitmap bitmap = animation.getAnimatedBitmap(); + if (bitmap != null) { + try { + Bitmap src = pinchToZoomHelper.getVideoBitmap(bitmap.getWidth(), bitmap.getHeight()); + Canvas canvas = new Canvas(bitmap); + canvas.drawBitmap(src, 0, 0, null); + src.recycle(); + } catch (Throwable e) { + FileLog.e(e); + } + } + } + } + } + } + createTextureView(true); + MediaController.getInstance().setTextureView(videoTextureView, aspectRatioFrameLayout, videoPlayerContainer, true); + } + chatListView.invalidate(); + } + + }); + pinchToZoomHelper.setClipBoundsListener(new PinchToZoomHelper.ClipBoundsListener() { + @Override + public void getClipTopBottom(float[] topBottom) { + topBottom[1] = chatListView.getBottom(); + topBottom[0] = chatListView.getTop() + chatListViewPaddingTop - AndroidUtilities.dp(4); + } + }); return fragmentView; } @@ -7597,6 +7754,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private void openForward() { int hasPoll = 0; + boolean hasInvoice = false; for (int a = 0; a < 2; a++) { for (int b = 0; b < selectedMessagesIds[a].size(); b++) { MessageObject messageObject = selectedMessagesIds[a].valueAt(b); @@ -7605,6 +7763,8 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (hasPoll == 2) { break; } + } else if (messageObject.isInvoice()) { + hasInvoice = true; } } if (hasPoll == 2) { @@ -7616,6 +7776,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not args.putInt("dialogsType", 3); args.putInt("messagesCount", canForwardMessagesCount); args.putInt("hasPoll", hasPoll); + args.putBoolean("hasInvoice", hasInvoice); DialogsActivity fragment = new DialogsActivity(args); fragment.setDelegate(ChatActivity.this); presentFragment(fragment); @@ -7851,7 +8012,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } if (chatAttachAlert == null) { - chatAttachAlert = new ChatAttachAlert(getParentActivity(), this) { + chatAttachAlert = new ChatAttachAlert(getParentActivity(), this, false) { @Override public void dismissInternal() { if (chatAttachAlert.isShowing()) { @@ -9805,7 +9966,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not } private void moveScrollToLastMessage() { - if (chatListView != null && !messages.isEmpty()) { + if (chatListView != null && !messages.isEmpty() && !pinchToZoomHelper.isInOverlayMode()) { chatLayoutManager.scrollToPositionWithOffset(0, 0); chatListView.stopScroll(); } @@ -18050,11 +18211,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } - MessageObject message = null; + MessageObject message; if (v instanceof ChatMessageCell) { message = ((ChatMessageCell) v).getMessageObject(); } else if (v instanceof ChatActionCell) { message = ((ChatActionCell) v).getMessageObject(); + } else { + message = null; } if (message == null) { return; @@ -18072,7 +18235,17 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (avatarContainer.openSetTimer()) { return; } - } else if (message.messageOwner.action instanceof TLRPC.TL_messageActionGroupCall || message.messageOwner.action instanceof TLRPC.TL_messageActionInviteToGroupCall) { + } else if (message.messageOwner.action instanceof TLRPC.TL_messageActionPaymentSent && message.replyMessageObject != null && message.replyMessageObject.isInvoice()) { + TLRPC.TL_payments_getPaymentReceipt req = new TLRPC.TL_payments_getPaymentReceipt(); + req.msg_id = message.getId(); + req.peer = getMessagesController().getInputPeer(message.messageOwner.peer_id); + getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (response instanceof TLRPC.TL_payments_paymentReceipt) { + presentFragment(new PaymentFormActivity((TLRPC.TL_payments_paymentReceipt) response)); + } + }), ConnectionsManager.RequestFlagFailOnServerErrors); + return; + } 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; } @@ -18080,7 +18253,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (sharedInstance != null) { if (sharedInstance.groupCall != null && message.messageOwner.action.call.id == sharedInstance.groupCall.call.id) { if (getParentActivity() instanceof LaunchActivity) { - GroupCallActivity.create((LaunchActivity) getParentActivity(), AccountInstance.getInstance(currentAccount)); + GroupCallActivity.create((LaunchActivity) getParentActivity(), AccountInstance.getInstance(currentAccount), null, null, false, null); } else { Intent intent = new Intent(getParentActivity(), LaunchActivity.class).setAction("voip_chat"); intent.putExtra("currentAccount", VoIPService.getSharedInstance().getAccount()); @@ -18093,7 +18266,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not return; } else if (fragmentContextView != null && getGroupCall() != null) { if (VoIPService.getSharedInstance() != null) { - GroupCallActivity.create((LaunchActivity) getParentActivity(), AccountInstance.getInstance(VoIPService.getSharedInstance().getAccount())); + GroupCallActivity.create((LaunchActivity) getParentActivity(), AccountInstance.getInstance(VoIPService.getSharedInstance().getAccount()), null, null, false, null); } else { ChatObject.Call call = getGroupCall(); if (call == null) { @@ -19077,6 +19250,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not args.putInt("dialogsType", 3); args.putInt("messagesCount", forwardingMessageGroup == null ? 1 : forwardingMessageGroup.messages.size()); args.putInt("hasPoll", forwardingMessage.isPoll() ? (forwardingMessage.isPublicPoll() ? 2 : 1) : 0); + args.putBoolean("hasInvoice", forwardingMessage.isInvoice()); DialogsActivity fragment = new DialogsActivity(args); fragment.setDelegate(this); presentFragment(fragment); @@ -21550,6 +21724,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not fireworksOverlay.start(); fireworksOverlay.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); } + + @Override + public PinchToZoomHelper getPinchToZoomHelper() { + return pinchToZoomHelper; + } }); if (currentEncryptedChat == null) { chatMessageCell.setAllowAssistant(true); @@ -22406,6 +22585,9 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not public void onStartAnimation() { super.onStartAnimation(); scrollCallbackAnimationIndex = getNotificationCenter().setAnimationInProgress(scrollCallbackAnimationIndex, allowedNotificationsDuringChatListAnimations); + if (pinchToZoomHelper.isInOverlayMode()) { + pinchToZoomHelper.finishZoom(); + } } @Override @@ -22562,7 +22744,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not themeDescriptions.add(new ThemeDescription(chatListView, ThemeDescription.FLAG_TEXTCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceText)); themeDescriptions.add(new ThemeDescription(chatListView, ThemeDescription.FLAG_LINKCOLOR, new Class[]{ChatActionCell.class}, Theme.chat_actionTextPaint, null, null, Theme.key_chat_serviceLink)); - themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_shareIconDrawable, Theme.chat_replyIconDrawable, Theme.chat_botInlineDrawable, Theme.chat_botLinkDrawalbe, Theme.chat_goIconDrawable, Theme.chat_commentStickerDrawable}, null, Theme.key_chat_serviceIcon)); + themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class}, null, new Drawable[]{Theme.chat_botCardDrawalbe, Theme.chat_shareIconDrawable, Theme.chat_replyIconDrawable, Theme.chat_botInlineDrawable, Theme.chat_botLinkDrawalbe, Theme.chat_goIconDrawable, Theme.chat_commentStickerDrawable}, null, Theme.key_chat_serviceIcon)); themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, ChatActionCell.class}, null, null, null, Theme.key_chat_serviceBackground)); themeDescriptions.add(new ThemeDescription(chatListView, 0, new Class[]{ChatMessageCell.class, ChatActionCell.class}, null, null, null, Theme.key_chat_serviceBackgroundSelected)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java index 9e065c7d6..490ef9351 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatEditActivity.java @@ -584,7 +584,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image setAvatarCell.setColors(Theme.key_windowBackgroundWhiteBlueIcon, Theme.key_windowBackgroundWhiteBlueButton); setAvatarCell.setOnClickListener(v -> imageUpdater.openMenu(avatar != null, () -> { avatar = null; - MessagesController.getInstance(currentAccount).changeChatAvatar(chatId, null, null, null, 0, null, null, null); + MessagesController.getInstance(currentAccount).changeChatAvatar(chatId, null, null, null, 0, null, null, null, null); showAvatarProgress(false, true); avatarImage.setImage(null, null, avatarDrawable, currentChat); }, null)); @@ -775,7 +775,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image blockCell = new TextCell(context); blockCell.setBackgroundDrawable(Theme.getSelectorDrawable(false)); - blockCell.setVisibility(ChatObject.isChannel(currentChat) || currentChat.creator ? View.VISIBLE : View.GONE); + blockCell.setVisibility(ChatObject.isChannel(currentChat) || currentChat.creator || ChatObject.hasAdminRights(currentChat) && ChatObject.canChangeChatInfo(currentChat) ? View.VISIBLE : View.GONE); blockCell.setOnClickListener(v -> { Bundle args = new Bundle(); args.putInt("chat_id", chatId); @@ -937,8 +937,8 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image boolean hasPhoto; if (currentChat.photo != null) { avatar = currentChat.photo.photo_small; - ImageLocation location = ImageLocation.getForChat(currentChat, false); - avatarImage.setImage(location, "50_50", avatarDrawable, currentChat); + ImageLocation location = ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL); + avatarImage.setImage(location, "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentChat); hasPhoto = location != null; } else { avatarImage.setImageDrawable(avatarDrawable); @@ -1001,7 +1001,7 @@ public class ChatEditActivity extends BaseFragment implements ImageUpdater.Image AndroidUtilities.runOnUIThread(() -> { avatar = smallSize.location; if (photo != null || video != null) { - MessagesController.getInstance(currentAccount).changeChatAvatar(chatId, null, photo, video, videoStartTimestamp, videoPath, smallSize.location, bigSize.location); + MessagesController.getInstance(currentAccount).changeChatAvatar(chatId, null, photo, video, videoStartTimestamp, videoPath, smallSize.location, bigSize.location, null); if (createAfterUpload) { try { if (progressDialog != null && progressDialog.isShowing()) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatLinkActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatLinkActivity.java index 9ade21d3a..08f7c6873 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatLinkActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatLinkActivity.java @@ -499,7 +499,7 @@ public class ChatLinkActivity extends BaseFragment implements NotificationCenter frameLayout2.addView(textView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, (LocaleController.isRTL ? 21 : 76), 11, (LocaleController.isRTL ? 76 : 21), 0)); frameLayout2.addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 24, 57, 24, 9)); avatarDrawable.setInfo(chat); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); builder.setPositiveButton(LocaleController.getString("DiscussionLinkGroup", R.string.DiscussionLinkGroup), (dialogInterface, i) -> { if (chatFull.hidden_prehistory) { MessagesController.getInstance(currentAccount).toogleChannelInvitesHistory(chat.id, false); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java index 18584bfff..02243691d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ChatUsersActivity.java @@ -514,7 +514,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente if (slowmodeInfoRow == -1 && gigaHeaderRow == -1 || removedUsersRow != -1) { participantsDividerRow = rowCount++; } - if (ChatObject.canBlockUsers(currentChat)) { + if (ChatObject.canBlockUsers(currentChat) && (ChatObject.isChannel(currentChat) || currentChat.creator)) { addNewRow = rowCount++; } @@ -726,6 +726,9 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente } else { searchItem.setSearchFieldHint(LocaleController.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_done, AndroidUtilities.dp(56), LocaleController.getString("Done", R.string.Done)); @@ -2109,7 +2112,7 @@ public class ChatUsersActivity extends BaseFragment implements NotificationCente if (type != TYPE_KICKED) { return; } - if (!ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { + if (currentChat.creator && !ChatObject.isChannel(currentChat) && selectedSlowmode != initialSlowmode && info != null) { MessagesController.getInstance(currentAccount).convertToMegaGroup(getParentActivity(), chatId, this, param -> { if (param != 0) { chatId = param; 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 a573767a1..08a786a04 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AlertsCreator.java @@ -28,22 +28,28 @@ import android.os.Build; import android.os.Bundle; import android.os.Vibrator; import android.provider.Settings; +import android.text.Editable; import android.text.Html; +import android.text.InputFilter; import android.text.InputType; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; +import android.text.Spanned; import android.text.TextUtils; +import android.text.TextWatcher; import android.text.style.URLSpan; import android.util.Base64; import android.util.SparseArray; import android.util.TypedValue; import android.view.Gravity; import android.view.HapticFeedbackConstants; +import android.view.KeyEvent; import android.view.View; import android.view.ViewOutlineProvider; import android.view.inputmethod.EditorInfo; import android.widget.Button; +import android.widget.EditText; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; @@ -89,6 +95,7 @@ import org.telegram.ui.ChatActivity; import org.telegram.ui.Components.voip.VoIPHelper; import org.telegram.ui.LanguageSelectActivity; import org.telegram.ui.LaunchActivity; +import org.telegram.ui.LoginActivity; import org.telegram.ui.NotificationsCustomSettingsActivity; import org.telegram.ui.NotificationsSettingsActivity; import org.telegram.ui.ProfileNotificationsActivity; @@ -285,7 +292,7 @@ public class AlertsCreator { } } else if (request instanceof TLRPC.TL_account_sendChangePhoneCode) { if (error.text.contains("PHONE_NUMBER_INVALID")) { - showSimpleAlert(fragment, LocaleController.getString("InvalidPhoneNumber", R.string.InvalidPhoneNumber)); + LoginActivity.needShowInvalidAlert(fragment, (String) args[0], false); } else if (error.text.contains("PHONE_CODE_EMPTY") || error.text.contains("PHONE_CODE_INVALID")) { showSimpleAlert(fragment, LocaleController.getString("InvalidCode", R.string.InvalidCode)); } else if (error.text.contains("PHONE_CODE_EXPIRED")) { @@ -294,6 +301,8 @@ public class AlertsCreator { showSimpleAlert(fragment, LocaleController.getString("FloodWait", R.string.FloodWait)); } else if (error.text.startsWith("PHONE_NUMBER_OCCUPIED")) { showSimpleAlert(fragment, LocaleController.formatString("ChangePhoneNumberOccupied", R.string.ChangePhoneNumberOccupied, args[0])); + } else if (error.text.startsWith("PHONE_NUMBER_BANNED")) { + LoginActivity.needShowInvalidAlert(fragment, (String) args[0], true); } else { showSimpleAlert(fragment, LocaleController.getString("ErrorOccurred", R.string.ErrorOccurred)); } @@ -837,10 +846,26 @@ public class AlertsCreator { } } } + if (callback != null) { callback.run(i); } builder.getDismissRunnable().run(); + int setting = -1; + if (i == 0) { + setting = NotificationsController.SETTING_MUTE_UNMUTE; + } else if (i == 1) { + setting = NotificationsController.SETTING_MUTE_HOUR; + } else if (i == 2) { + setting = NotificationsController.SETTING_MUTE_2_DAYS; + } else if (i == 4){ + setting = NotificationsController.SETTING_MUTE_FOREVER; + } + if (setting >= 0) { + if (BulletinFactory.canShowBulletin(parentFragment)) { + BulletinFactory.createMuteBulletin(parentFragment, setting).show(); + } + } }); } builder.setTitle(LocaleController.getString("Notifications", R.string.Notifications)); @@ -1136,11 +1161,11 @@ public class AlertsCreator { } else { avatarDrawable.setSmallSize(false); avatarDrawable.setInfo(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { avatarDrawable.setInfo(chat); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } messageTextView.setText(AndroidUtilities.replaceTags(message)); @@ -1304,11 +1329,11 @@ public class AlertsCreator { } else { avatarDrawable.setSmallSize(false); avatarDrawable.setInfo(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } else { avatarDrawable.setInfo(chat); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } if (second) { @@ -1474,7 +1499,7 @@ public class AlertsCreator { BackupImageView imageView = new BackupImageView(context); imageView.setRoundRadius(AndroidUtilities.dp(20)); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); frameLayout.addView(imageView, LayoutHelper.createFrame(40, 40, (LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP, 22, 5, 22, 0)); TextView textView = new TextView(context); @@ -1500,6 +1525,292 @@ public class AlertsCreator { fragment.showDialog(dialog); } + public static void createChangeBioAlert(String currentBio, int peerId, Context context, int currentAccount) { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(peerId > 0 ? LocaleController.getString("UserBio", R.string.UserBio) : LocaleController.getString("DescriptionPlaceholder", R.string.DescriptionPlaceholder)); + builder.setMessage(peerId > 0 ? LocaleController.getString("VoipGroupBioEditAlertText", R.string.VoipGroupBioEditAlertText) : LocaleController.getString("DescriptionInfo", R.string.DescriptionInfo)); + FrameLayout dialogView = new FrameLayout(context); + dialogView.setClipChildren(false); + + if (peerId < 0) { + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(-peerId); + if (chatFull == null) { + MessagesController.getInstance(currentAccount).loadFullChat(-peerId, ConnectionsManager.generateClassGuid(), true); + } + } + + NumberTextView checkTextView = new NumberTextView(context); + EditText editTextView = new EditText(context); + editTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + editTextView.setHint(peerId > 0 ? LocaleController.getString("UserBio", R.string.UserBio) : LocaleController.getString("DescriptionPlaceholder", R.string.DescriptionPlaceholder)); + editTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + editTextView.setBackground(Theme.createEditTextDrawable(context, true)); + + editTextView.setMaxLines(4); + editTextView.setRawInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + editTextView.setImeOptions(EditorInfo.IME_ACTION_DONE); + + InputFilter[] inputFilters = new InputFilter[1]; + int maxSymbolsCount = peerId > 0 ? 70 : 255; + inputFilters[0] = new CodepointsLengthInputFilter(maxSymbolsCount) { + @Override + public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { + CharSequence result = super.filter(source, start, end, dest, dstart, dend); + if (result != null && source != null && result.length() != source.length()) { + Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); + if (v != null) { + v.vibrate(200); + } + AndroidUtilities.shakeView(checkTextView, 2, 0); + } + return result; + } + }; + editTextView.setFilters(inputFilters); + + checkTextView.setCenterAlign(true); + checkTextView.setTextSize(15); + checkTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText4)); + checkTextView.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO); + dialogView.addView(checkTextView, LayoutHelper.createFrame(20, 20, LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT, 0, 14, 21, 0)); + editTextView.setPadding(LocaleController.isRTL ? AndroidUtilities.dp(24) : 0, AndroidUtilities.dp(8), LocaleController.isRTL ? 0 : AndroidUtilities.dp(24), AndroidUtilities.dp(8)); + editTextView.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable s) { + int count = maxSymbolsCount - Character.codePointCount(s, 0, s.length()); + if (count < 30) { + checkTextView.setNumber(count, checkTextView.getVisibility() == View.VISIBLE); + AndroidUtilities.updateViewVisibilityAnimated(checkTextView, true); + } else { + AndroidUtilities.updateViewVisibilityAnimated(checkTextView, false); + } + } + }); + AndroidUtilities.updateViewVisibilityAnimated(checkTextView, false, 0, false); + editTextView.setText(currentBio); + editTextView.setSelection(editTextView.getText().toString().length()); + + builder.setView(dialogView); + DialogInterface.OnClickListener onDoneListener = (dialogInterface, i) -> { + if (peerId > 0) { + final TLRPC.UserFull userFull = MessagesController.getInstance(currentAccount).getUserFull(UserConfig.getInstance(currentAccount).getClientUserId()); + final String newName = editTextView.getText().toString().replace("\n", " ").replaceAll(" +", " ").trim(); + if (userFull != null) { + String currentName = userFull.about; + if (currentName == null) { + currentName = ""; + } + if (currentName.equals(newName)) { + AndroidUtilities.hideKeyboard(editTextView); + dialogInterface.dismiss(); + return; + } + userFull.about = newName; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.userInfoDidLoad, peerId, userFull); + } + + final TLRPC.TL_account_updateProfile req = new TLRPC.TL_account_updateProfile(); + req.about = newName; + req.flags |= 4; + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_BIO_CHANGED, peerId); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> { + + }, ConnectionsManager.RequestFlagFailOnServerErrors); + } else { + TLRPC.ChatFull chatFull = MessagesController.getInstance(currentAccount).getChatFull(-peerId); + final String newAbout = editTextView.getText().toString(); + if (chatFull != null) { + String currentName = chatFull.about; + if (currentName == null) { + currentName = ""; + } + if (currentName.equals(newAbout)) { + AndroidUtilities.hideKeyboard(editTextView); + dialogInterface.dismiss(); + return; + } + chatFull.about = newAbout; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.chatInfoDidLoad, chatFull, 0, false, false); + } + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_BIO_CHANGED, peerId); + MessagesController.getInstance(currentAccount).updateChatAbout(-peerId, newAbout, chatFull); + } + dialogInterface.dismiss(); + }; + builder.setPositiveButton(LocaleController.getString("Save", R.string.Save), onDoneListener); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setOnPreDismissListener(dialogInterface -> AndroidUtilities.hideKeyboard(editTextView)); + dialogView.addView(editTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 23, 12, 23, 21)); + editTextView.requestFocus(); + AndroidUtilities.showKeyboard(editTextView); + + AlertDialog dialog = builder.create(); + editTextView.setOnEditorActionListener((textView, i, keyEvent) -> { + if ((i == EditorInfo.IME_ACTION_DONE || (peerId > 0 && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER)) && dialog.isShowing()) { + onDoneListener.onClick(dialog, 0); + return true; + } + return false; + }); + + dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); + dialog.show(); + dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + + } + + public static void createChangeNameAlert(int peerId, Context context, int currentAccount) { + String currentName; + String currentLastName = null; + if (peerId > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(peerId); + currentName = user.first_name; + currentLastName = user.last_name; + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-peerId); + currentName = chat.title; + } + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle(peerId > 0 ? LocaleController.getString("VoipEditName", R.string.VoipEditName) : LocaleController.getString("VoipEditTitle", R.string.VoipEditTitle)); + LinearLayout dialogView = new LinearLayout(context); + dialogView.setOrientation(LinearLayout.VERTICAL); + + EditText firstNameEditTextView = new EditText(context); + firstNameEditTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + firstNameEditTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + firstNameEditTextView.setMaxLines(1); + firstNameEditTextView.setLines(1); + firstNameEditTextView.setSingleLine(true); + firstNameEditTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + firstNameEditTextView.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); + firstNameEditTextView.setImeOptions(peerId > 0 ? EditorInfo.IME_ACTION_NEXT : EditorInfo.IME_ACTION_DONE); + firstNameEditTextView.setHint(peerId > 0 ? LocaleController.getString("FirstName", R.string.FirstName) : LocaleController.getString("VoipEditTitleHint", R.string.VoipEditTitleHint)); + firstNameEditTextView.setBackground(Theme.createEditTextDrawable(context, true)); + firstNameEditTextView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + firstNameEditTextView.requestFocus(); + + EditText lastNameEditTextView = null; + if (peerId > 0) { + lastNameEditTextView = new EditText(context); + lastNameEditTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + lastNameEditTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + lastNameEditTextView.setMaxLines(1); + lastNameEditTextView.setLines(1); + lastNameEditTextView.setSingleLine(true); + lastNameEditTextView.setGravity(LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT); + lastNameEditTextView.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT); + lastNameEditTextView.setImeOptions(EditorInfo.IME_ACTION_DONE); + lastNameEditTextView.setHint(LocaleController.getString("LastName", R.string.LastName)); + lastNameEditTextView.setBackground(Theme.createEditTextDrawable(context, true)); + lastNameEditTextView.setPadding(0, AndroidUtilities.dp(8), 0, AndroidUtilities.dp(8)); + } + + AndroidUtilities.showKeyboard(firstNameEditTextView); + + dialogView.addView(firstNameEditTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 23, 12, 23, 21)); + if (lastNameEditTextView != null) { + dialogView.addView(lastNameEditTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, 0, 23, 12, 23, 21)); + } + + firstNameEditTextView.setText(currentName); + firstNameEditTextView.setSelection(firstNameEditTextView.getText().toString().length()); + + if (lastNameEditTextView != null) { + lastNameEditTextView.setText(currentLastName); + lastNameEditTextView.setSelection(lastNameEditTextView.getText().toString().length()); + } + + + builder.setView(dialogView); + EditText finalLastNameEditTextView = lastNameEditTextView; + DialogInterface.OnClickListener onDoneListener = (dialogInterface, i) -> { + if (firstNameEditTextView.getText() == null) { + return; + } + if (peerId > 0) { + TLRPC.User currentUser = MessagesController.getInstance(currentAccount).getUser(peerId); + + String newFirst = firstNameEditTextView.getText().toString(); + String newLast = finalLastNameEditTextView.getText().toString(); + String oldFirst = currentUser.first_name; + String oldLast = currentUser.last_name; + if (oldFirst == null) { + oldFirst = ""; + } + if (oldLast == null) { + oldLast = ""; + } + if (oldFirst.equals(newFirst) && oldLast.equals(newLast)) { + dialogInterface.dismiss(); + return; + } + TLRPC.TL_account_updateProfile req = new TLRPC.TL_account_updateProfile(); + req.flags = 3; + currentUser.first_name = req.first_name = newFirst; + currentUser.last_name = req.last_name = newLast; + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(UserConfig.getInstance(currentAccount).getClientUserId()); + if (user != null) { + user.first_name = req.first_name; + user.last_name = req.last_name; + } + UserConfig.getInstance(currentAccount).saveConfig(true); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.mainUserInfoChanged); + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_NAME); + ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> { + + }); + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_NAME_CHANGED, peerId); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-peerId); + String newFirst = firstNameEditTextView.getText().toString(); + if (chat.title != null && chat.title.equals(newFirst)) { + dialogInterface.dismiss(); + return; + } + chat.title = newFirst; + NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_CHAT_NAME); + MessagesController.getInstance(currentAccount).changeChatTitle(-peerId, newFirst); + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.showBulletin, Bulletin.TYPE_NAME_CHANGED, peerId); + } + dialogInterface.dismiss(); + }; + builder.setPositiveButton(LocaleController.getString("Save", R.string.Save), onDoneListener); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + builder.setOnPreDismissListener(dialogInterface -> { + AndroidUtilities.hideKeyboard(firstNameEditTextView); + AndroidUtilities.hideKeyboard(finalLastNameEditTextView); + }); + AlertDialog dialog = builder.create(); + + dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); + dialog.show(); + dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + + TextView.OnEditorActionListener actionListener = (textView, i, keyEvent) -> { + if ((i == EditorInfo.IME_ACTION_DONE || keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) && dialog.isShowing()) { + onDoneListener.onClick(dialog, 0); + return true; + } + return false; + }; + if (lastNameEditTextView != null) { + lastNameEditTextView.setOnEditorActionListener(actionListener); + } else { + firstNameEditTextView.setOnEditorActionListener(actionListener); + } + + } + public interface BlockDialogCallback { void run(boolean report, boolean delete); } @@ -1640,16 +1951,28 @@ public class AlertsCreator { return builder; } - private static boolean checkScheduleDate(TextView button, boolean reminder, NumberPicker dayPicker, NumberPicker hourPicker, NumberPicker minutePicker) { + public static boolean checkScheduleDate(TextView button, TextView infoText, int type, NumberPicker dayPicker, NumberPicker hourPicker, NumberPicker minutePicker) { + return checkScheduleDate(button, infoText, 0, type, dayPicker, hourPicker, minutePicker); + } + + public static boolean checkScheduleDate(TextView button, TextView infoText, long maxDate, int type, NumberPicker dayPicker, NumberPicker hourPicker, NumberPicker minutePicker) { int day = dayPicker.getValue(); int hour = hourPicker.getValue(); int minute = minutePicker.getValue(); - Calendar calendar = Calendar.getInstance(); + long systemTime = System.currentTimeMillis(); calendar.setTimeInMillis(systemTime); int currentYear = calendar.get(Calendar.YEAR); int currentDay = calendar.get(Calendar.DAY_OF_YEAR); + if (maxDate > 0) { + maxDate *= 1000; + calendar.setTimeInMillis(systemTime + maxDate); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + maxDate = calendar.getTimeInMillis(); + } calendar.setTimeInMillis(System.currentTimeMillis() + (long) day * 24 * 3600 * 1000); calendar.set(Calendar.HOUR_OF_DAY, hour); @@ -1658,11 +1981,18 @@ public class AlertsCreator { if (currentTime <= systemTime + 60000L) { calendar.setTimeInMillis(systemTime + 60000L); + if (currentDay != calendar.get(Calendar.DAY_OF_YEAR)) { dayPicker.setValue(day = 1); } hourPicker.setValue(hour = calendar.get(Calendar.HOUR_OF_DAY)); minutePicker.setValue(minute = calendar.get(Calendar.MINUTE)); + } else if (maxDate > 0 && currentTime > maxDate) { + calendar.setTimeInMillis(maxDate); + + dayPicker.setValue(day = 7); + hourPicker.setValue(hour = calendar.get(Calendar.HOUR_OF_DAY)); + minutePicker.setValue(minute = calendar.get(Calendar.MINUTE)); } int selectedYear = calendar.get(Calendar.YEAR); @@ -1670,8 +2000,8 @@ public class AlertsCreator { calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, minute); + long time = calendar.getTimeInMillis(); if (button != null) { - long time = calendar.getTimeInMillis(); int num; if (day == 0) { num = 0; @@ -1680,11 +2010,33 @@ public class AlertsCreator { } else { num = 2; } - if (reminder) { + if (type == 1) { num += 3; + } else if (type == 2) { + num += 6; + } else if (type == 3) { + num += 9; } button.setText(LocaleController.getInstance().formatterScheduleSend[num].format(time)); } + if (infoText != null) { + int diff = (int) ((time - systemTime) / 1000); + String t; + if (diff > 24 * 60 * 60) { + t = LocaleController.formatPluralString("DaysSchedule", diff / (24 * 60 * 60)); + } else if (diff >= 60 * 60) { + t = LocaleController.formatPluralString("HoursSchedule", diff / (60 * 60)); + } else if (diff >= 60) { + t = LocaleController.formatPluralString("MinutesSchedule", diff / 60); + } else { + t = LocaleController.formatPluralString("SecondsSchedule", diff); + } + if (infoText.getTag() != null) { + infoText.setText(LocaleController.formatString("VoipGroupScheduleInfo", R.string.VoipGroupScheduleInfo, t)); + } else { + infoText.setText(LocaleController.formatString("VoipChannelScheduleInfo", R.string.VoipChannelScheduleInfo, t)); + } + } return currentTime - systemTime > 60000L; } @@ -1892,7 +2244,7 @@ public class AlertsCreator { } catch (Exception ignore) { } - checkScheduleDate(buttonTextView, selfUserId == dialogId, dayPicker, hourPicker, minutePicker); + checkScheduleDate(buttonTextView, null, selfUserId == dialogId ? 1 : 0, dayPicker, hourPicker, minutePicker); }; dayPicker.setOnValueChangedListener(onValueChangeListener); @@ -1926,7 +2278,7 @@ public class AlertsCreator { } final boolean[] canceled = {true}; - checkScheduleDate(buttonTextView, selfUserId == dialogId, dayPicker, hourPicker, minutePicker); + checkScheduleDate(buttonTextView, null, selfUserId == dialogId ? 1 : 0, dayPicker, hourPicker, minutePicker); buttonTextView.setPadding(AndroidUtilities.dp(34), 0, AndroidUtilities.dp(34), 0); buttonTextView.setGravity(Gravity.CENTER); @@ -1937,7 +2289,7 @@ public class AlertsCreator { container.addView(buttonTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.BOTTOM, 16, 15, 16, 16)); buttonTextView.setOnClickListener(v -> { canceled[0] = false; - boolean setSeconds = checkScheduleDate(null, selfUserId == dialogId, dayPicker, hourPicker, minutePicker); + boolean setSeconds = checkScheduleDate(null, null, selfUserId == dialogId ? 1 : 0, dayPicker, hourPicker, minutePicker); calendar.setTimeInMillis(System.currentTimeMillis() + (long) dayPicker.getValue() * 24 * 3600 * 1000); calendar.set(Calendar.HOUR_OF_DAY, hourPicker.getValue()); calendar.set(Calendar.MINUTE, minutePicker.getValue()); @@ -2078,7 +2430,7 @@ public class AlertsCreator { } catch (Exception ignore) { } - checkScheduleDate(null, false, dayPicker, hourPicker, minutePicker); + checkScheduleDate(null, null, 0, dayPicker, hourPicker, minutePicker); }; dayPicker.setOnValueChangedListener(onValueChangeListener); @@ -2110,9 +2462,8 @@ public class AlertsCreator { dayPicker.setValue(days); } } - final boolean[] canceled = {true}; - checkScheduleDate(null, false, dayPicker, hourPicker, minutePicker); + checkScheduleDate(null, null, 0, dayPicker, hourPicker, minutePicker); buttonTextView.setPadding(AndroidUtilities.dp(34), 0, AndroidUtilities.dp(34), 0); buttonTextView.setGravity(Gravity.CENTER); @@ -2123,8 +2474,7 @@ public class AlertsCreator { buttonTextView.setText(LocaleController.getString("SetTimeLimit", R.string.SetTimeLimit)); container.addView(buttonTextView, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48, Gravity.LEFT | Gravity.BOTTOM, 16, 15, 16, 16)); buttonTextView.setOnClickListener(v -> { - canceled[0] = false; - boolean setSeconds = checkScheduleDate(null, false, dayPicker, hourPicker, minutePicker); + boolean setSeconds = checkScheduleDate(null, null, 0, dayPicker, hourPicker, minutePicker); calendar.setTimeInMillis(System.currentTimeMillis() + (long) dayPicker.getValue() * 24 * 3600 * 1000); calendar.set(Calendar.HOUR_OF_DAY, hourPicker.getValue()); calendar.set(Calendar.MINUTE, minutePicker.getValue()); @@ -3011,7 +3361,7 @@ public class AlertsCreator { BackupImageView imageView = new BackupImageView(activity); imageView.setRoundRadius(AndroidUtilities.dp(26)); - imageView.setImage(ImageLocation.getForUser(selfUser, false), "50_50", (Drawable) null, selfUser); + imageView.setImage(ImageLocation.getForUserOrChat(selfUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(selfUser, ImageLocation.TYPE_STRIPPED), "50_50", (Drawable) null, selfUser); frameLayout.addView(imageView, LayoutHelper.createFrame(52, 52, Gravity.CENTER, 0, 0, 0, 11)); builder.setTopView(frameLayout); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarsImageView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarsImageView.java index 56357b3fb..12e8addb4 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarsImageView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/AvatarsImageView.java @@ -234,9 +234,9 @@ public class AvatarsImageView extends FrameLayout { animatingStates[index].id = -currentChat.id; } if (currentUser != null) { - animatingStates[index].imageReceiver.setImage(ImageLocation.getForUser(currentUser, false), "50_50", animatingStates[index].avatarDrawable, null, currentUser, 0); + animatingStates[index].imageReceiver.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", animatingStates[index].avatarDrawable, currentUser, 0); } else { - animatingStates[index].imageReceiver.setImage(ImageLocation.getForChat(currentChat, false), "50_50", animatingStates[index].avatarDrawable, null, currentChat, 0); + animatingStates[index].imageReceiver.setImage(ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_STRIPPED), "50_50", animatingStates[index].avatarDrawable, currentChat, 0); } animatingStates[index].imageReceiver.setRoundRadius(AndroidUtilities.dp(currentStyle == 4 ? 16 : 12)); int size = AndroidUtilities.dp(currentStyle == 4 ? 32 : 24); 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 a18de5f14..7750c3e3f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/Bulletin.java @@ -61,6 +61,8 @@ public final class Bulletin { public static final int TYPE_STICKER = 0; public static final int TYPE_ERROR = 1; + public static final int TYPE_BIO_CHANGED = 2; + public static final int TYPE_NAME_CHANGED = 3; public static Bulletin make(@NonNull FrameLayout containerLayout, @NonNull Layout contentLayout, int duration) { return new Bulletin(containerLayout, contentLayout, duration); @@ -1031,6 +1033,7 @@ public final class Bulletin { 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)); addView(textView, LayoutHelper.createFrameRelatively(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 56, 0, 16, 0)); } 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 04948ecc3..d07641a57 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/BulletinFactory.java @@ -116,6 +116,8 @@ public final class BulletinFactory { final Bulletin.LottieLayout layout = new Bulletin.LottieLayout(getContext()); layout.setAnimation(iconRawId, 36, 36); layout.textView.setText(text); + layout.textView.setSingleLine(false); + layout.textView.setMaxLines(2); return create(layout, Bulletin.DURATION_SHORT); } 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 6fdfd9ca3..f45b25c31 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatActivityEnterView.java @@ -49,6 +49,7 @@ import android.text.TextPaint; import android.text.TextUtils; import android.text.TextWatcher; import android.text.style.ImageSpan; +import android.util.Log; import android.util.Property; import android.util.TypedValue; import android.view.ActionMode; @@ -3457,7 +3458,9 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe showKeyboardOnResume = true; } AndroidUtilities.runOnUIThread(hideKeyboardRunnable = () -> { - closeKeyboard(); + if (parentFragment == null || parentFragment.isLastFragment()) { + closeKeyboard(); + } hideKeyboardRunnable = null; }, 500); } @@ -4819,7 +4822,7 @@ public class ChatActivityEnterView extends FrameLayout implements NotificationCe slideText.setTranslationX(0); recordCircle.showTooltipIfNeed(); - messageEditText.setVisibility(View.GONE); + messageEditText.setAlpha(0f); } }); runningAnimationAudio.setInterpolator(new DecelerateInterpolator()); 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 c079cedd7..7f94da8cb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlert.java @@ -391,6 +391,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N private Paint attachButtonPaint = new Paint(Paint.ANTI_ALIAS_FLAG); private float bottomPannelTranslation; + private boolean forceDarkTheme; private class AttachButton extends FrameLayout { @@ -552,7 +553,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N currentUser = user; nameTextView.setText(ContactsController.formatName(user.first_name, user.last_name)); avatarDrawable.setInfo(user); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); requestLayout(); } } @@ -563,8 +564,9 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N float currentPanTranslationY; @SuppressLint("ClickableViewAccessibility") - public ChatAttachAlert(Context context, final BaseFragment parentFragment) { + public ChatAttachAlert(Context context, final BaseFragment parentFragment, boolean forceDarkTheme) { super(context, false); + this.forceDarkTheme = forceDarkTheme; drawNavigationBar = true; inBubbleMode = parentFragment instanceof ChatActivity && parentFragment.isInBubbleMode(); openInterpolator = new OvershootInterpolator(0.7f); @@ -896,8 +898,9 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N shadowDrawable.setAlpha(viewAlpha); shadowDrawable.setBounds(0, top, getMeasuredWidth(), height); shadowDrawable.draw(canvas); + int backgroundColor = Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground); if (actionBarType == 2) { - Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + Theme.dialogs_onlineCirclePaint.setColor(backgroundColor); Theme.dialogs_onlineCirclePaint.setAlpha(viewAlpha); rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + AndroidUtilities.dp(24)); canvas.save(); @@ -909,7 +912,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N boolean result = super.drawChild(canvas, child, drawingTime); if (rad != 1.0f && actionBarType != 2) { - Theme.dialogs_onlineCirclePaint.setColor(Theme.getColor(Theme.key_dialogBackground)); + Theme.dialogs_onlineCirclePaint.setColor(backgroundColor); Theme.dialogs_onlineCirclePaint.setAlpha(viewAlpha); rect.set(backgroundPaddingLeft, backgroundPaddingTop + top, getMeasuredWidth() - backgroundPaddingLeft, backgroundPaddingTop + top + AndroidUtilities.dp(24)); canvas.save(); @@ -946,7 +949,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N if (inBubbleMode) { return; } - int color1 = Theme.getColor(Theme.key_dialogBackground); + int color1 = Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground); int finalColor = Color.argb((int) (255 * actionBar.getAlpha()), (int) (Color.red(color1) * 0.8f), (int) (Color.green(color1) * 0.8f), (int) (Color.blue(color1) * 0.8f)); Theme.dialogs_onlineCirclePaint.setColor(finalColor); canvas.drawRect(backgroundPaddingLeft, currentPanTranslationY, getMeasuredWidth() - backgroundPaddingLeft, AndroidUtilities.statusBarHeight + currentPanTranslationY, Theme.dialogs_onlineCirclePaint); @@ -1162,7 +1165,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N selectedTextView.setVisibility(View.INVISIBLE); selectedTextView.setAlpha(0.0f); - layouts[0] = photoLayout = new ChatAttachAlertPhotoLayout(this, context); + layouts[0] = photoLayout = new ChatAttachAlertPhotoLayout(this, context, forceDarkTheme); currentAttachLayout = photoLayout; selectedId = 1; containerView.addView(photoLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); @@ -1309,7 +1312,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N float alphaOffset = (frameLayout2.getMeasuredHeight() - AndroidUtilities.dp(84)) * (1f - getAlpha()); shadow.setTranslationY(-(frameLayout2.getMeasuredHeight() - AndroidUtilities.dp(84)) + captionEditTextTopOffset + currentPanTranslationY + bottomPannelTranslation + alphaOffset); - int newColor = Theme.getColor(Theme.key_dialogBackground); + int newColor = Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground); if (color != newColor) { color = newColor; p.setColor(color); @@ -1688,6 +1691,11 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N selectedCountView.setScaleX(0.2f); selectedCountView.setScaleY(0.2f); containerView.addView(selectedCountView, LayoutHelper.createFrame(42, 24, Gravity.RIGHT | Gravity.BOTTOM, 0, 0, -8, 9)); + + if (forceDarkTheme) { + checkColors(); + navBarColorKey = null; + } } @Override @@ -2130,18 +2138,18 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N for (int a = 0; a < count; a++) { applyAttachButtonColors(buttonsRecyclerView.getChildAt(a)); } - selectedTextView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); + selectedTextView.setTextColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItems) : Theme.getColor(Theme.key_dialogTextBlack)); doneItem.getTextView().setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueHeader)); - selectedMenuItem.setIconColor(Theme.getColor(Theme.key_dialogTextBlack)); - Theme.setDrawableColor(selectedMenuItem.getBackground(), Theme.getColor(Theme.key_dialogButtonSelector)); + selectedMenuItem.setIconColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItems) : Theme.getColor(Theme.key_dialogTextBlack)); + Theme.setDrawableColor(selectedMenuItem.getBackground(), forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItemsSelector) : Theme.getColor(Theme.key_dialogButtonSelector)); selectedMenuItem.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), false); selectedMenuItem.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), true); selectedMenuItem.redrawPopup(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - searchItem.setIconColor(Theme.getColor(Theme.key_dialogTextBlack)); - Theme.setDrawableColor(searchItem.getBackground(), Theme.getColor(Theme.key_dialogButtonSelector)); + searchItem.setIconColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItems) : Theme.getColor(Theme.key_dialogTextBlack)); + Theme.setDrawableColor(searchItem.getBackground(), forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItemsSelector) : Theme.getColor(Theme.key_dialogButtonSelector)); commentTextView.updateColors(); @@ -2149,7 +2157,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N for (int a = 0; a < itemCells.length; a++) { if (itemCells[a] != null) { itemCells[a].setColors(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), Theme.getColor(Theme.key_actionBarDefaultSubmenuItemIcon)); - itemCells[a].setSelectorColor(Theme.getColor(Theme.key_dialogButtonSelector)); + itemCells[a].setSelectorColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItemsSelector) : Theme.getColor(Theme.key_dialogButtonSelector)); } } sendPopupLayout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); @@ -2165,18 +2173,18 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N actionBarShadow.setBackgroundColor(Theme.getColor(Theme.key_dialogShadowLine)); buttonsRecyclerView.setGlowColor(Theme.getColor(Theme.key_dialogScrollGlow)); - buttonsRecyclerView.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground)); + buttonsRecyclerView.setBackgroundColor(Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground)); - frameLayout2.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground)); + frameLayout2.setBackgroundColor(Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground)); selectedCountView.invalidate(); - actionBar.setBackgroundColor(Theme.getColor(Theme.key_dialogBackground)); - actionBar.setItemsColor(Theme.getColor(Theme.key_dialogTextBlack), false); - actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_dialogButtonSelector), false); - actionBar.setTitleColor(Theme.getColor(Theme.key_dialogTextBlack)); + actionBar.setBackgroundColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBar) : Theme.getColor(Theme.key_dialogBackground)); + actionBar.setItemsColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItems) : Theme.getColor(Theme.key_dialogTextBlack), false); + actionBar.setItemsBackgroundColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItemsSelector) : Theme.getColor(Theme.key_dialogButtonSelector), false); + actionBar.setTitleColor(forceDarkTheme ? Theme.getColor(Theme.key_voipgroup_actionBarItems) : Theme.getColor(Theme.key_dialogTextBlack)); - Theme.setDrawableColor(shadowDrawable, Theme.getColor(Theme.key_dialogBackground)); + Theme.setDrawableColor(shadowDrawable, Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_listViewBackground : Theme.key_dialogBackground)); containerView.invalidate(); @@ -2489,7 +2497,7 @@ public class ChatAttachAlert extends BottomSheet implements NotificationCenter.N if (baseFragment == null) { return; } - if (baseFragment instanceof ChatActivity) { + if (baseFragment instanceof ChatActivity && avatarPicker != 2) { TLRPC.Chat chat = ((ChatActivity) baseFragment).getCurrentChat(); TLRPC.User user = ((ChatActivity) baseFragment).getCurrentUser(); if (chat != null) { 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 5fab1da19..be2606fc8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertContactsLayout.java @@ -208,7 +208,7 @@ public class ChatAttachAlertContactsLayout extends ChatAttachAlert.AttachAlertLa lastAvatar = photo; if (currentUser != null) { - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else { avatarImageView.setImageDrawable(avatarDrawable); } 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 f2f33559a..4ee764590 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAttachAlertPhotoLayout.java @@ -190,6 +190,8 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou private final static int compress = 1; private final static int open_in = 2; + boolean forceDarkTheme; + private class BasePhotoProvider extends PhotoViewer.EmptyPhotoViewerProvider { @Override public boolean isPhotoChecked(int index) { @@ -433,8 +435,9 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou return arrayList; } - public ChatAttachAlertPhotoLayout(ChatAttachAlert alert, Context context) { + public ChatAttachAlertPhotoLayout(ChatAttachAlert alert, Context context, boolean forceDarkTheme) { super(alert, context); + this.forceDarkTheme = forceDarkTheme; NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.albumsDidLoad); NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.cameraInitied); FrameLayout container = alert.getContainer(); @@ -596,16 +599,15 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou PhotoViewer.getInstance().setMaxSelectedPhotos(parentAlert.maxSelectedPhotos, parentAlert.allowOrder); ChatActivity chatActivity; int type; - if (parentAlert.baseFragment instanceof ChatActivity) { + if (parentAlert.avatarPicker != 0) { + chatActivity = null; + type = PhotoViewer.SELECT_TYPE_AVATAR; + } else if (parentAlert.baseFragment instanceof ChatActivity) { chatActivity = (ChatActivity) parentAlert.baseFragment; type = 0; } else { chatActivity = null; - if (parentAlert.avatarPicker != 0) { - type = PhotoViewer.SELECT_TYPE_AVATAR; - } else { - type = 4; - } + type = 4; } AndroidUtilities.hideKeyboard(parentAlert.baseFragment.getFragmentView().findFocus()); AndroidUtilities.hideKeyboard(parentAlert.getContainer().findFocus()); @@ -1247,16 +1249,15 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou ChatActivity chatActivity; int type; - if (parentAlert.baseFragment instanceof ChatActivity) { + if (parentAlert.avatarPicker != 0) { + type = PhotoViewer.SELECT_TYPE_AVATAR; + chatActivity = null; + } else if (parentAlert.baseFragment instanceof ChatActivity) { chatActivity = (ChatActivity) parentAlert.baseFragment; type = 2; } else { chatActivity = null; - if (parentAlert.avatarPicker != 0) { - type = PhotoViewer.SELECT_TYPE_AVATAR; - } else { - type = 5; - } + type = 5; } ArrayList arrayList; int index; @@ -1490,7 +1491,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou } public void checkCamera(boolean request) { - if (parentAlert.baseFragment == null) { + if (parentAlert.baseFragment == null || parentAlert.baseFragment.getParentActivity() == null) { return; } boolean old = deviceHasGoodCamera; @@ -2363,6 +2364,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou if (cameraIcon != null) { cameraIcon.invalidate(); } + String textColor = forceDarkTheme ? Theme.key_voipgroup_actionBarItems : Theme.key_dialogTextBlack; Theme.setDrawableColor(cameraDrawable, Theme.getColor(Theme.key_dialogCameraIcon)); progressView.setTextColor(Theme.getColor(Theme.key_emptyListPlaceholder)); gridView.setGlowColor(Theme.getColor(Theme.key_dialogScrollGlow)); @@ -2371,11 +2373,11 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou ((PhotoAttachCameraCell) holder.itemView).getImageView().setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_dialogCameraIcon), PorterDuff.Mode.MULTIPLY)); } - dropDown.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); - dropDownContainer.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), false); - dropDownContainer.setPopupItemsColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem), true); - dropDownContainer.redrawPopup(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground)); - Theme.setDrawableColor(dropDownDrawable, Theme.getColor(Theme.key_dialogTextBlack)); + dropDown.setTextColor(Theme.getColor(textColor)); + dropDownContainer.setPopupItemsColor(Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_actionBarItems : Theme.key_actionBarDefaultSubmenuItem), false); + dropDownContainer.setPopupItemsColor(Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_actionBarItems :Theme.key_actionBarDefaultSubmenuItem), true); + dropDownContainer.redrawPopup(Theme.getColor(forceDarkTheme ? Theme.key_voipgroup_actionBarUnscrolled : Theme.key_actionBarDefaultSubmenuBackground)); + Theme.setDrawableColor(dropDownDrawable, Theme.getColor(textColor)); } @Override @@ -2389,7 +2391,7 @@ public class ChatAttachAlertPhotoLayout extends ChatAttachAlert.AttachAlertLayou cameraIcon.setAlpha(mediaEnabled ? 1.0f : 0.2f); cameraIcon.setEnabled(mediaEnabled); } - if (parentAlert.baseFragment instanceof ChatActivity) { + if (parentAlert.baseFragment instanceof ChatActivity && parentAlert.avatarPicker == 0) { galleryAlbumEntry = MediaController.allMediaAlbumEntry; if (mediaEnabled) { progressView.setText(LocaleController.getString("NoPhotos", R.string.NoPhotos)); 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 c803d239e..6a1ec32a6 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatAvatarContainer.java @@ -589,7 +589,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent public void setChatAvatar(TLRPC.Chat chat) { avatarDrawable.setInfo(chat); if (avatarImageView != null) { - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } @@ -615,7 +615,7 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent } else { avatarDrawable.setSmallSize(false); if (avatarImageView != null) { - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } } @@ -643,13 +643,13 @@ public class ChatAvatarContainer extends FrameLayout implements NotificationCent } else { avatarDrawable.setSmallSize(false); if (avatarImageView != null) { - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } } else if (chat != null) { avatarDrawable.setInfo(chat); if (avatarImageView != null) { - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatGreetingsView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatGreetingsView.java index 682995d14..d4acc5cfe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatGreetingsView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ChatGreetingsView.java @@ -9,25 +9,20 @@ import android.widget.TextView; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.DocumentObject; -import org.telegram.messenger.Emoji; import org.telegram.messenger.FileLoader; import org.telegram.messenger.ImageLocation; 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.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.Theme; -import java.util.ArrayList; import java.util.Locale; -import java.util.Random; -public class ChatGreetingsView extends LinearLayout implements NotificationCenter.NotificationCenterDelegate { +public class ChatGreetingsView extends LinearLayout { private TLRPC.Document preloadedGreetingsSticker; private TextView titleView; @@ -39,7 +34,7 @@ public class ChatGreetingsView extends LinearLayout implements NotificationCente public BackupImageView stickerToSendView; - public ChatGreetingsView(Context context, TLRPC.User user, int distance, int currentAccount, TLRPC.Document preloadedGreetingsSticker) { + public ChatGreetingsView(Context context, TLRPC.User user, int distance, int currentAccount, TLRPC.Document sticker) { super(context); setOrientation(VERTICAL); this.currentAccount = currentAccount; @@ -70,16 +65,17 @@ public class ChatGreetingsView extends LinearLayout implements NotificationCente descriptionView.setText(LocaleController.getString("NearbyPeopleGreetingsDescription", R.string.NearbyPeopleGreetingsDescription)); } - this.preloadedGreetingsSticker = preloadedGreetingsSticker; - + preloadedGreetingsSticker = sticker; if (preloadedGreetingsSticker == null) { - MessagesController.getInstance(currentAccount).preloadGreetingsSticker(); - } else { - setSticker(preloadedGreetingsSticker); + preloadedGreetingsSticker = MediaDataController.getInstance(currentAccount).getGreetingsSticker(); } + setSticker(preloadedGreetingsSticker); } private void setSticker(TLRPC.Document sticker) { + if (sticker == null) { + return; + } SvgHelper.SvgDrawable svgThumb = DocumentObject.getSvgThumb(sticker, Theme.key_chat_serviceBackground, 1.0f); if (svgThumb != null) { stickerToSendView.setImage(ImageLocation.getForDocument(sticker), createFilter(sticker), svgThumb, 0, sticker); @@ -177,26 +173,17 @@ public class ChatGreetingsView extends LinearLayout implements NotificationCente protected void onAttachedToWindow() { super.onAttachedToWindow(); fetchSticker(); - NotificationCenter.getInstance(currentAccount).addObserver(this, NotificationCenter.greetingsStickerLoaded); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.greetingsStickerLoaded); } private void fetchSticker() { if (preloadedGreetingsSticker == null) { - preloadedGreetingsSticker = MessagesController.getInstance(currentAccount).getPreloadedSticker(); - if (preloadedGreetingsSticker != null) { - setSticker(preloadedGreetingsSticker); - } + preloadedGreetingsSticker = MediaDataController.getInstance(currentAccount).getGreetingsSticker(); + setSticker(preloadedGreetingsSticker); } } - - @Override - public void didReceivedNotification(int id, int account, Object... args) { - fetchSticker(); - } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ContextProgressView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ContextProgressView.java index 361dad03d..15952d2b1 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ContextProgressView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ContextProgressView.java @@ -27,6 +27,8 @@ public class ContextProgressView extends View { private int currentColorType; private String innerKey; private String outerKey; + private int innerColor; + private int outerColor; public ContextProgressView(Context context, int colorType) { super(context); @@ -51,9 +53,25 @@ public class ContextProgressView extends View { updateColors(); } + public void setColors(int innerColor, int outerColor) { + innerKey = null; + outerKey = null; + this.innerColor = innerColor; + this.outerColor = outerColor; + updateColors(); + } + public void updateColors() { - innerPaint.setColor(Theme.getColor(innerKey)); - outerPaint.setColor(Theme.getColor(outerKey)); + if (innerKey != null) { + innerPaint.setColor(Theme.getColor(innerKey)); + } else { + innerPaint.setColor(innerColor); + } + if (outerKey != null) { + outerPaint.setColor(Theme.getColor(outerKey)); + } else { + outerPaint.setColor(outerColor); + } invalidate(); } 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 38c3110a9..c2c649252 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FilterTabsView.java @@ -1134,8 +1134,12 @@ public class FilterTabsView extends FrameLayout { } } if (indicatorWidth != 0) { + canvas.save(); + canvas.translate(listView.getTranslationX(), 0); + canvas.scale(listView.getScaleX(), 1f, listView.getPivotX() + listView.getX(), listView.getPivotY()); selectorDrawable.setBounds((int) indicatorX, height - AndroidUtilities.dpr(4), (int) (indicatorX + indicatorWidth), height); selectorDrawable.draw(canvas); + canvas.restore(); } } long newTime = SystemClock.elapsedRealtime(); @@ -1525,4 +1529,8 @@ public class FilterTabsView extends FrameLayout { viewHolder.itemView.setBackground(null); } } + + public RecyclerListView getListView() { + return listView; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextView.java index 8dccba721..cb8f5d383 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextView.java @@ -17,8 +17,13 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Canvas; +import android.graphics.LinearGradient; +import android.graphics.Matrix; +import android.graphics.Paint; import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; +import android.graphics.RectF; +import android.graphics.Shader; import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; @@ -26,8 +31,11 @@ import android.os.Bundle; import androidx.annotation.Keep; import android.os.SystemClock; +import android.text.Layout; import android.text.SpannableStringBuilder; import android.text.Spanned; +import android.text.StaticLayout; +import android.text.TextPaint; import android.text.TextUtils; import android.util.TypedValue; import android.view.Gravity; @@ -104,6 +112,42 @@ public class FragmentContextView extends FrameLayout implements NotificationCent private boolean supportsCalls = true; private AvatarsImageView avatars; + private Paint gradientPaint; + private LinearGradient linearGradient; + private Matrix matrix; + private int gradientWidth; + private TextPaint gradientTextPaint; + private StaticLayout timeLayout; + private RectF rect = new RectF(); + private boolean scheduleRunnableScheduled; + private Runnable updateScheduleTimeRunnable = new Runnable() { + @Override + public void run() { + if (gradientTextPaint == null || !(fragment instanceof ChatActivity)) { + scheduleRunnableScheduled = false; + return; + } + ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); + if (call == null || !call.isScheduled()) { + timeLayout = null; + scheduleRunnableScheduled = false; + return; + } + int currentTime = fragment.getConnectionsManager().getCurrentTime(); + int diff = call.call.schedule_date - currentTime; + String str; + if (diff >= 24 * 60 * 60) { + str = LocaleController.formatPluralString("Days", Math.round(diff / (24 * 60 * 60.0f))); + } else { + str = AndroidUtilities.formatFullDuration(call.call.schedule_date - currentTime); + } + int width = (int) Math.ceil(gradientTextPaint.measureText(str)); + timeLayout = new StaticLayout(str, gradientTextPaint, width, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false); + AndroidUtilities.runOnUIThread(updateScheduleTimeRunnable, 1000); + frameLayout.invalidate(); + } + }; + private final int account = UserConfig.selectedAccount; private boolean isLocation; @@ -173,6 +217,44 @@ public class FragmentContextView extends FrameLayout implements NotificationCent avatars.invalidate(); } } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (currentStyle == 4 && timeLayout != null) { + int width = (int) Math.ceil(timeLayout.getLineWidth(0)) + AndroidUtilities.dp(24); + if (width != gradientWidth) { + linearGradient = new LinearGradient(0, 0, width * 1.7f, 0, new int[]{0xff648CF4, 0xff8C69CF, 0xffD45979, 0xffD45979}, new float[]{0.0f, 0.294f, 0.588f, 1.0f}, Shader.TileMode.CLAMP); + gradientPaint.setShader(linearGradient); + gradientWidth = width; + } + ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); + float moveProgress = 0.0f; + if (fragment != null && call != null && call.isScheduled()) { + long diff = ((long) call.call.schedule_date) * 1000 - fragment.getConnectionsManager().getCurrentTimeMillis(); + if (diff < 0) { + moveProgress = 1.0f; + } else if (diff < 5000) { + moveProgress = 1.0f - diff / 5000.0f; + } + if (diff < 6000) { + invalidate(); + } + } + matrix.reset(); + matrix.postTranslate(-gradientWidth * 0.7f * moveProgress, 0); + linearGradient.setLocalMatrix(matrix); + int x = getMeasuredWidth() - width - AndroidUtilities.dp(10); + int y = AndroidUtilities.dp(12); + rect.set(0, 0, width, AndroidUtilities.dp(24)); + canvas.save(); + canvas.translate(x, y); + canvas.drawRoundRect(rect, AndroidUtilities.dp(12), AndroidUtilities.dp(12), gradientPaint); + canvas.translate(AndroidUtilities.dp(12), AndroidUtilities.dp(4)); + timeLayout.draw(canvas); + canvas.restore(); + } + } }; addView(frameLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 36, Gravity.TOP | Gravity.LEFT, 0, 0, 0, 0)); @@ -528,7 +610,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent } } else if (currentStyle == 3) { if (VoIPService.getSharedInstance() != null && getContext() instanceof LaunchActivity) { - GroupCallActivity.create((LaunchActivity) getContext(), AccountInstance.getInstance(VoIPService.getSharedInstance().getAccount())); + GroupCallActivity.create((LaunchActivity) getContext(), AccountInstance.getInstance(VoIPService.getSharedInstance().getAccount()), null, null, false, null); } } else if (currentStyle == 4) { if (fragment.getParentActivity() == null) { @@ -614,7 +696,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent show = true; } else if (fragment instanceof ChatActivity && fragment.getSendMessagesHelper().getImportingHistory(((ChatActivity) fragment).getDialogId()) != null && !isPlayingVoice()) { show = true; - } else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && ((ChatActivity) fragment).getGroupCall().call.participants_count > 0 && !GroupCallPip.isShowing() && !isPlayingVoice()) { + } else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && ((ChatActivity) fragment).getGroupCall().shouldShowPanel() && !GroupCallPip.isShowing() && !isPlayingVoice()) { show = true; } else { MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject(); @@ -656,6 +738,10 @@ public class FragmentContextView extends FrameLayout implements NotificationCent } } currentStyle = style; + frameLayout.setWillNotDraw(currentStyle != 4); + if (style != 4) { + timeLayout = null; + } if (avatars != null) { avatars.setStyle(currentStyle); @@ -738,9 +824,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent frameLayout.setBackgroundColor(Theme.getColor(Theme.key_inappPlayerBackground)); frameLayout.setTag(Theme.key_inappPlayerBackground); muteButton.setVisibility(GONE); - subtitleTextView.setVisibility(VISIBLE); - joinButton.setVisibility(VISIBLE); for (int i = 0; i < 2; i++) { TextView textView = i == 0 ? titleTextView.getTextView() : titleTextView.getNextTextView(); @@ -754,7 +838,6 @@ public class FragmentContextView extends FrameLayout implements NotificationCent } titleTextView.setTag(Theme.key_inappPlayerPerformer); titleTextView.setPadding(0, 0, 0, 0); - titleTextView.setText(LocaleController.getString("VoipGroupVoiceChat", R.string.VoipGroupVoiceChat), false); importingImageView.setVisibility(GONE); importingImageView.stopAnimation(); @@ -820,6 +903,10 @@ public class FragmentContextView extends FrameLayout implements NotificationCent animatorSet.cancel(); animatorSet = null; } + if (scheduleRunnableScheduled) { + AndroidUtilities.cancelRunOnUIThread(updateScheduleTimeRunnable); + scheduleRunnableScheduled = false; + } visible = false; NotificationCenter.getInstance(account).onAnimationFinish(animationIndex); topPadding = 0; @@ -885,7 +972,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent checkCall(true); } else if (fragment instanceof ChatActivity && fragment.getSendMessagesHelper().getImportingHistory(((ChatActivity) fragment).getDialogId()) != null && !isPlayingVoice()) { checkImport(true); - } else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && ((ChatActivity) fragment).getGroupCall().call.participants_count > 0 && !GroupCallPip.isShowing() && !isPlayingVoice()) { + } else if (fragment instanceof ChatActivity && ((ChatActivity) fragment).getGroupCall() != null && ((ChatActivity) fragment).getGroupCall().shouldShowPanel() && !GroupCallPip.isShowing() && !isPlayingVoice()) { checkCall(true); } else { checkPlayer(true); @@ -905,6 +992,11 @@ public class FragmentContextView extends FrameLayout implements NotificationCent muteDrawable.setCurrentFrame(muteDrawable.getCustomEndFrame() - 1, false, true); muteButton.invalidate(); } + } else if (currentStyle == 4) { + if (!scheduleRunnableScheduled) { + scheduleRunnableScheduled = true; + updateScheduleTimeRunnable.run(); + } } if (visible && topPadding == 0) { @@ -963,7 +1055,9 @@ public class FragmentContextView extends FrameLayout implements NotificationCent if (visible && currentStyle == 4) { ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); if (call != null) { - if (call.call.participants_count == 0) { + if (call.isScheduled()) { + subtitleTextView.setText(LocaleController.formatStartsTime(call.call.schedule_date, 4), false); + } else if (call.call.participants_count == 0) { subtitleTextView.setText(LocaleController.getString("MembersTalkingNobody", R.string.MembersTalkingNobody), false); } else { subtitleTextView.setText(LocaleController.formatPluralString("Participants", call.call.participants_count), false); @@ -1226,7 +1320,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent boolean callAvailable = supportsCalls && VoIPService.getSharedInstance() != null && !VoIPService.getSharedInstance().isHangingUp() && VoIPService.getSharedInstance().getCallState() != VoIPService.STATE_WAITING_INCOMING && !GroupCallPip.isShowing(); if (!isPlayingVoice() && !callAvailable && fragment instanceof ChatActivity && !GroupCallPip.isShowing()) { ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); - callAvailable = call != null && call.call.participants_count > 0; + callAvailable = call != null && call.shouldShowPanel(); } if (callAvailable) { checkCall(false); @@ -1558,7 +1652,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent groupActive = false; if (!isPlayingVoice() && !GroupCallActivity.groupCallUiVisible && supportsCalls && !callAvailable && fragment instanceof ChatActivity) { ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); - if (call != null && call.call.participants_count > 0) { + if (call != null && call.shouldShowPanel()) { callAvailable = true; groupActive = true; } @@ -1614,7 +1708,7 @@ public class FragmentContextView extends FrameLayout implements NotificationCent int newStyle; if (groupActive) { newStyle = 4; - } else if (voIPService != null && voIPService.groupCall != null) { + } else if (voIPService.groupCall != null) { newStyle = 3; } else { newStyle = 1; @@ -1653,11 +1747,37 @@ public class FragmentContextView extends FrameLayout implements NotificationCent updateStyle(4); ChatObject.Call call = ((ChatActivity) fragment).getGroupCall(); + if (call.isScheduled()) { + if (gradientPaint == null) { + gradientTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + gradientTextPaint.setColor(0xffffffff); + gradientTextPaint.setTextSize(AndroidUtilities.dp(14)); + gradientTextPaint.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); - if (call.call.participants_count == 0) { - subtitleTextView.setText(LocaleController.getString("MembersTalkingNobody", R.string.MembersTalkingNobody), false); + gradientPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + gradientPaint.setColor(0xffffffff); + + matrix = new Matrix(); + } + joinButton.setVisibility(GONE); + if (!TextUtils.isEmpty(call.call.title)) { + titleTextView.setText(call.call.title, false); + } else { + titleTextView.setText(LocaleController.getString("VoipGroupScheduledVoiceChat", R.string.VoipGroupScheduledVoiceChat), false); + } + subtitleTextView.setText(LocaleController.formatStartsTime(call.call.schedule_date, 2), false); + if (!scheduleRunnableScheduled) { + scheduleRunnableScheduled = true; + updateScheduleTimeRunnable.run(); + } } else { - subtitleTextView.setText(LocaleController.formatPluralString("Participants", call.call.participants_count), false); + joinButton.setVisibility(VISIBLE); + titleTextView.setText(LocaleController.getString("VoipGroupVoiceChat", R.string.VoipGroupVoiceChat), false); + if (call.call.participants_count == 0) { + subtitleTextView.setText(LocaleController.getString("MembersTalkingNobody", R.string.MembersTalkingNobody), false); + } else { + subtitleTextView.setText(LocaleController.formatPluralString("Participants", call.call.participants_count), false); + } } updateAvatars(avatars.wasDraw && updateAnimated); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextViewWavesDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextViewWavesDrawable.java index 1434d1ff6..aaa17915d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextViewWavesDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/FragmentContextViewWavesDrawable.java @@ -10,6 +10,8 @@ import android.graphics.Shader; import android.os.SystemClock; import android.view.View; +import com.google.android.exoplayer2.util.Log; + import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ChatObject; import org.telegram.messenger.Utilities; @@ -78,7 +80,11 @@ public class FragmentContextViewWavesDrawable { if (dt > 20) { dt = 17; } - + if (dt < 3) { + update = false; + } + } + if (update) { if (animateToAmplitude != amplitude) { amplitude += animateAmplitudeDiff * dt; if (animateAmplitudeDiff > 0) { @@ -145,7 +151,7 @@ public class FragmentContextViewWavesDrawable { lineBlobDrawable2.minRadius = AndroidUtilities.dp(0); lineBlobDrawable2.maxRadius = AndroidUtilities.dp(3) + AndroidUtilities.dp(9) * amplitude; - if (i == 1) { + if (i == 1 && update) { lineBlobDrawable.update(amplitude, 0.3f); lineBlobDrawable1.update(amplitude, 0.7f); lineBlobDrawable2.update(amplitude, 0.7f); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/GroupCreateSpan.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/GroupCreateSpan.java index 2c9d4bc59..8a2fb3ef8 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/GroupCreateSpan.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/GroupCreateSpan.java @@ -143,7 +143,7 @@ public class GroupCreateSpan extends View { } else { avatarDrawable.setInfo(user); firstName = UserObject.getFirstName(user); - imageLocation = ImageLocation.getForUser(user, false); + imageLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL); imageParent = user; } } else if (object instanceof TLRPC.Chat) { @@ -151,7 +151,7 @@ public class GroupCreateSpan extends View { avatarDrawable.setInfo(chat); uid = -chat.id; firstName = chat.title; - imageLocation = ImageLocation.getForChat(chat, false); + imageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL); imageParent = chat; } else { avatarDrawable.setInfo(0, contact.first_name, contact.last_name); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/HintView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/HintView.java index 41bcba6e6..0ce4f090d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/HintView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/HintView.java @@ -331,12 +331,14 @@ public class HintView extends FrameLayout { top += AndroidUtilities.dp(4); } else if (currentType == 6) { top += view.getMeasuredHeight() + getMeasuredHeight() + AndroidUtilities.dp(10); - } else if (currentType == 7 || currentType == 8) { + } else if (currentType == 7 || currentType == 8 && isTopArrow) { top += view.getMeasuredHeight() + getMeasuredHeight() + AndroidUtilities.dp(8); + } else if (currentType == 8) { + top -= AndroidUtilities.dp(10); } int centerX; - if (currentType == 8) { + if (currentType == 8 && isTopArrow) { if (view instanceof SimpleTextView) { SimpleTextView textView = (SimpleTextView) view; Drawable drawable = textView.getRightDrawable(); @@ -374,7 +376,9 @@ public class HintView extends FrameLayout { leftMargin = ((MarginLayoutParams) getLayoutParams()).leftMargin; rightMargin = ((MarginLayoutParams) getLayoutParams()).rightMargin; } - if (centerX > parentView.getMeasuredWidth() / 2) { + if (currentType == 8 && !isTopArrow) { + offset = (parentWidth - leftMargin - rightMargin - getMeasuredWidth()) / 2; + } else if (centerX > parentView.getMeasuredWidth() / 2) { if (currentType == TYPE_SEARCH_AS_LIST) { offset = (int) (parentWidth - getMeasuredWidth() * 1.5f); } else { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java index 31eb257ca..e400484c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ImageUpdater.java @@ -88,6 +88,7 @@ public class ImageUpdater implements NotificationCenter.NotificationCenterDelega private double videoTimestamp; private boolean canSelectVideo; + private boolean forceDarkTheme; private final static int attach_photo = 0; @@ -208,6 +209,11 @@ public class ImageUpdater implements NotificationCenter.NotificationCenterDelega useAttachMenu = searchAvailable = value; } + public void setSearchAvailable(boolean value, boolean useAttachMenu) { + this.useAttachMenu = useAttachMenu; + searchAvailable = value; + } + public void setUploadAfterSelect(boolean value) { uploadAfterSelect = value; } @@ -319,7 +325,7 @@ public class ImageUpdater implements NotificationCenter.NotificationCenterDelega return; } if (chatAttachAlert == null) { - chatAttachAlert = new ChatAttachAlert(parentFragment.getParentActivity(), parentFragment); + chatAttachAlert = new ChatAttachAlert(parentFragment.getParentActivity(), parentFragment, forceDarkTheme); chatAttachAlert.setAvatarPicker(canSelectVideo ? 2 : 1, searchAvailable); chatAttachAlert.setDelegate(new ChatAttachAlert.ChatAttachViewDelegate() { @@ -882,4 +888,8 @@ public class ImageUpdater implements NotificationCenter.NotificationCenterDelega parentFragment.getFileLoader().uploadFile(uploadingVideo, false, false, (int) convertingVideo.videoEditedInfo.estimatedSize, ConnectionsManager.FileTypeVideo, false); } } + + public void setForceDarkTheme(boolean forceDarkTheme) { + this.forceDarkTheme = forceDarkTheme; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallAlert.java index 4022e1699..a3292eedb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallAlert.java @@ -39,7 +39,7 @@ import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.BottomSheet; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Cells.GroupCreateUserCell; -import org.telegram.ui.ContentPreviewViewer; +import org.telegram.ui.Cells.ShareDialogCell; import java.util.ArrayList; @@ -67,6 +67,7 @@ public class JoinCallAlert extends BottomSheet { private TLRPC.Peer selectedPeer; private TLRPC.Peer currentPeer; private TLRPC.InputPeer selectAfterDismiss; + private boolean schedule; private boolean animationInProgress; @@ -101,21 +102,26 @@ public class JoinCallAlert extends BottomSheet { } public interface JoinCallAlertDelegate { - void didSelectChat(TLRPC.InputPeer peer, boolean hasFewPeers); + void didSelectChat(TLRPC.InputPeer peer, boolean hasFewPeers, boolean schedule); } public class BottomSheetCell extends FrameLayout { private View background; private TextView[] textView = new TextView[2]; - private LinearLayout linearLayout; + private boolean hasBackground; - public BottomSheetCell(Context context) { + public BottomSheetCell(Context context, boolean withoutBackground) { super(context); + hasBackground = !withoutBackground; + setBackground(null); + background = new View(context); - background.setBackground(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(4), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); - addView(background, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, 0, 16, 16, 16, 16)); + if (hasBackground) { + background.setBackground(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(4), Theme.getColor(Theme.key_featuredStickers_addButton), Theme.getColor(Theme.key_featuredStickers_addButtonPressed))); + } + addView(background, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, 0, 16, withoutBackground ? 0 : 16, 16, 16)); for (int a = 0; a < 2; a++) { textView[a] = new TextView(context); @@ -124,9 +130,14 @@ public class JoinCallAlert extends BottomSheet { textView[a].setGravity(Gravity.CENTER_HORIZONTAL); textView[a].setEllipsize(TextUtils.TruncateAt.END); textView[a].setGravity(Gravity.CENTER); - textView[a].setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText)); + if (hasBackground) { + textView[a].setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText)); + textView[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + } else { + textView[a].setTextColor(Theme.getColor(Theme.key_featuredStickers_addButton)); + } textView[a].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); - textView[a].setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + textView[a].setPadding(0, 0, 0, hasBackground ? 0 : AndroidUtilities.dp(13)); addView(textView[a], LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER)); if (a == 1) { textView[a].setAlpha(0.0f); @@ -136,7 +147,7 @@ public class JoinCallAlert extends BottomSheet { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(80), MeasureSpec.EXACTLY)); + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(hasBackground ? 80 : 50), MeasureSpec.EXACTLY)); } public void setText(CharSequence text, boolean animated) { @@ -201,16 +212,16 @@ public class JoinCallAlert extends BottomSheet { } } - public static void open(Context context, int did, AccountInstance accountInstance, BaseFragment fragment, int type, JoinCallAlertDelegate delegate) { + public static void open(Context context, int did, AccountInstance accountInstance, BaseFragment fragment, int type, TLRPC.Peer scheduledPeer, JoinCallAlertDelegate delegate) { if (context == null || delegate == null) { return; } if (lastCachedAccount == accountInstance.getCurrentAccount() && lastCacheDid == did && cachedChats != null && SystemClock.elapsedRealtime() - lastCacheTime < 5 * 60 * 1000) { - if (cachedChats.size() == 1) { + if (cachedChats.size() == 1 && type != TYPE_CREATE) { TLRPC.InputPeer peer = accountInstance.getMessagesController().getInputPeer(MessageObject.getPeerId(cachedChats.get(0))); - delegate.didSelectChat(peer, false); + delegate.didSelectChat(peer, false, false); } else { - showAlert(context, cachedChats, fragment, type, delegate); + showAlert(context, did, cachedChats, fragment, type, scheduledPeer, delegate); } } else { final AlertDialog progressDialog = new AlertDialog(context, 3); @@ -226,7 +237,7 @@ public class JoinCallAlert extends BottomSheet { TLRPC.TL_phone_joinAsPeers res = (TLRPC.TL_phone_joinAsPeers) response; if (res.peers.size() == 1) { TLRPC.InputPeer peer = accountInstance.getMessagesController().getInputPeer(MessageObject.getPeerId(res.peers.get(0))); - delegate.didSelectChat(peer, false); + delegate.didSelectChat(peer, false, false); return; } cachedChats = res.peers; @@ -235,7 +246,7 @@ public class JoinCallAlert extends BottomSheet { lastCachedAccount = accountInstance.getCurrentAccount(); accountInstance.getMessagesController().putChats(res.chats, false); accountInstance.getMessagesController().putUsers(res.users, false); - showAlert(context, res.peers, fragment, type, delegate); + showAlert(context, did, res.peers, fragment, type, scheduledPeer, delegate); } })); progressDialog.setOnCancelListener(dialog -> accountInstance.getConnectionsManager().cancelRequest(reqId, true)); @@ -247,8 +258,8 @@ public class JoinCallAlert extends BottomSheet { } } - private static void showAlert(Context context, ArrayList peers, BaseFragment fragment, int type, JoinCallAlertDelegate delegate) { - JoinCallAlert alert = new JoinCallAlert(context, peers, type, delegate); + private static void showAlert(Context context, long dialogId, ArrayList peers, BaseFragment fragment, int type, TLRPC.Peer scheduledPeer, JoinCallAlertDelegate delegate) { + JoinCallAlert alert = new JoinCallAlert(context, dialogId, peers, type, scheduledPeer, delegate); if (fragment != null) { if (fragment.getParentActivity() != null) { fragment.showDialog(alert); @@ -258,14 +269,13 @@ public class JoinCallAlert extends BottomSheet { } } - private JoinCallAlert(Context context, ArrayList chats, int type, JoinCallAlertDelegate delegate) { + private JoinCallAlert(Context context, long dialogId, ArrayList arrayList, int type, TLRPC.Peer scheduledPeer, JoinCallAlertDelegate delegate) { super(context, false); setApplyBottomPadding(false); - this.chats = chats; + chats = new ArrayList<>(arrayList); this.delegate = delegate; currentType = type; - shadowDrawable = context.getResources().getDrawable(R.drawable.sheet_shadow_round).mutate(); if (type == TYPE_DISPLAY) { if (VoIPService.getSharedInstance() != null) { @@ -277,6 +287,15 @@ public class JoinCallAlert extends BottomSheet { break; } } + } else if (scheduledPeer != null) { + long did = MessageObject.getPeerId(scheduledPeer); + for (int a = 0, N = chats.size(); a < N; a++) { + TLRPC.Peer p = chats.get(a); + if (MessageObject.getPeerId(p) == did) { + selectedPeer = currentPeer = p; + break; + } + } } else { selectedPeer = chats.get(0); } @@ -286,77 +305,119 @@ public class JoinCallAlert extends BottomSheet { selectedPeer = chats.get(0); } - containerView = new FrameLayout(context) { + ViewGroup internalLayout; + if (currentType == TYPE_CREATE) { + LinearLayout linearLayout = new LinearLayout(context) { - @Override - public boolean onInterceptTouchEvent(MotionEvent ev) { - if (ev.getAction() == MotionEvent.ACTION_DOWN && scrollOffsetY != 0 && ev.getY() < scrollOffsetY) { - dismiss(); - return true; + boolean sorted; + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (currentType == TYPE_CREATE) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int totalWidth = chats.size() * AndroidUtilities.dp(95); + LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) listView.getLayoutParams(); + if (totalWidth > width) { + layoutParams.width = LayoutHelper.MATCH_PARENT; + layoutParams.gravity = Gravity.TOP | Gravity.LEFT; + if (!sorted) { + if (selectedPeer != null) { + chats.remove(selectedPeer); + chats.add(0, selectedPeer); + } + sorted = true; + } + } else { + layoutParams.width = LayoutHelper.WRAP_CONTENT; + layoutParams.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; + if (!sorted) { + if (selectedPeer != null) { + int idx; + if (chats.size() % 2 == 0) { + idx = Math.max(0, chats.size() / 2 - 1); + } else { + idx = chats.size() / 2; + } + chats.remove(selectedPeer); + chats.add(idx, selectedPeer); + } + sorted = true; + } + } + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); } - return super.onInterceptTouchEvent(ev); - } + }; + linearLayout.setOrientation(LinearLayout.VERTICAL); + setCustomView(internalLayout = linearLayout); + } else { + containerView = new FrameLayout(context) { - @Override - public boolean onTouchEvent(MotionEvent e) { - return !isDismissed() && super.onTouchEvent(e); - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - int height = MeasureSpec.getSize(heightMeasureSpec); - if (Build.VERSION.SDK_INT >= 21) { - height -= AndroidUtilities.statusBarHeight; + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && scrollOffsetY != 0 && ev.getY() < scrollOffsetY) { + dismiss(); + return true; + } + return super.onInterceptTouchEvent(ev); } - measureChildWithMargins(messageTextView, widthMeasureSpec, 0, heightMeasureSpec, 0); - int h = messageTextView.getMeasuredHeight(); - ((LayoutParams) listView.getLayoutParams()).topMargin = AndroidUtilities.dp(65) + h; - int measuredWidth = getMeasuredWidth(); - int padding; - int contentSize = AndroidUtilities.dp(80) + chats.size() * AndroidUtilities.dp(58) + backgroundPaddingTop + AndroidUtilities.dp(55) + h; - if (contentSize < height / 5 * 3) { - padding = height - contentSize; - } else { - padding = height / 5 * 2; - } - if (listView.getPaddingTop() != padding) { - ignoreLayout = true; - listView.setPadding(0, padding, 0, 0); - ignoreLayout = false; - } - super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); - } - @Override - protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - updateLayout(); - } - - @Override - public void requestLayout() { - if (ignoreLayout) { - return; + @Override + public boolean onTouchEvent(MotionEvent e) { + return !isDismissed() && super.onTouchEvent(e); } - super.requestLayout(); - } - @Override - protected void onDraw(Canvas canvas) { - shadowDrawable.setBounds(0, scrollOffsetY - backgroundPaddingTop, getMeasuredWidth(), getMeasuredHeight()); - shadowDrawable.draw(canvas); - } - }; - containerView.setWillNotDraw(false); - containerView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int height = MeasureSpec.getSize(heightMeasureSpec); + if (Build.VERSION.SDK_INT >= 21) { + height -= AndroidUtilities.statusBarHeight; + } + measureChildWithMargins(messageTextView, widthMeasureSpec, 0, heightMeasureSpec, 0); + int h = messageTextView.getMeasuredHeight(); + ((LayoutParams) listView.getLayoutParams()).topMargin = AndroidUtilities.dp(65) + h; + int measuredWidth = getMeasuredWidth(); + int padding; + int contentSize = AndroidUtilities.dp(80) + chats.size() * AndroidUtilities.dp(58) + backgroundPaddingTop + AndroidUtilities.dp(55) + h; + if (contentSize < height / 5 * 3) { + padding = height - contentSize; + } else { + padding = height / 5 * 2; + } + if (listView.getPaddingTop() != padding) { + ignoreLayout = true; + listView.setPadding(0, padding, 0, 0); + ignoreLayout = false; + } + super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + updateLayout(); + } + + @Override + public void requestLayout() { + if (ignoreLayout) { + return; + } + super.requestLayout(); + } + + @Override + protected void onDraw(Canvas canvas) { + shadowDrawable.setBounds(0, scrollOffsetY - backgroundPaddingTop, getMeasuredWidth(), getMeasuredHeight()); + shadowDrawable.draw(canvas); + } + }; + internalLayout = containerView; + containerView.setWillNotDraw(false); + containerView.setPadding(backgroundPaddingLeft, 0, backgroundPaddingLeft, 0); + } listView = new RecyclerListView(context) { - @Override - public boolean onInterceptTouchEvent(MotionEvent event) { - boolean result = ContentPreviewViewer.getInstance().onInterceptTouchEvent(event, listView, 0, null); - return super.onInterceptTouchEvent(event) || result; - } - @Override public void requestLayout() { if (ignoreLayout) { @@ -365,7 +426,7 @@ public class JoinCallAlert extends BottomSheet { super.requestLayout(); } }; - listView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); + listView.setLayoutManager(new LinearLayoutManager(getContext(), currentType == TYPE_CREATE ? LinearLayoutManager.HORIZONTAL : LinearLayoutManager.VERTICAL, false)); listView.setAdapter(new ListAdapter(context)); listView.setVerticalScrollBarEnabled(false); listView.setClipToPadding(false); @@ -381,18 +442,41 @@ public class JoinCallAlert extends BottomSheet { if (animationInProgress || chats.get(position) == selectedPeer) { return; } - GroupCreateUserCell cell = (GroupCreateUserCell) view; selectedPeer = chats.get(position); - cell.setChecked(true, true); + if (view instanceof GroupCreateUserCell) { + ((GroupCreateUserCell) view).setChecked(true, true); + } else if (view instanceof ShareDialogCell) { + ((ShareDialogCell) view).setChecked(true, true); + view.invalidate(); + } for (int a = 0, N = listView.getChildCount(); a < N; a++) { - GroupCreateUserCell child = (GroupCreateUserCell) listView.getChildAt(a); - if (child != cell) { - child.setChecked(false, true); + View child = listView.getChildAt(a); + if (child != view) { + if (view instanceof GroupCreateUserCell) { + ((GroupCreateUserCell) child).setChecked(false, true); + } else if (view instanceof ShareDialogCell) { + ((ShareDialogCell) child).setChecked(false, true); + } } } - updateDoneButton(true); + if (currentType != TYPE_CREATE) { + updateDoneButton(true); + } }); - containerView.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 0, 100, 0, 80)); + if (type != TYPE_CREATE) { + internalLayout.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 0, 100, 0, 80)); + } else { + listView.setSelectorDrawableColor(0); + listView.setPadding(AndroidUtilities.dp(10), 0, AndroidUtilities.dp(10), 0); + } + + if (type == TYPE_CREATE) { + RLottieImageView imageView = new RLottieImageView(context); + imageView.setAutoRepeat(true); + imageView.setAnimation(R.raw.utyan_schedule, 120, 120); + imageView.playAnimation(); + internalLayout.addView(imageView, LayoutHelper.createLinear(160, 160, Gravity.CENTER_HORIZONTAL | Gravity.TOP, 17, 8, 17, 0)); + } textView = new TextView(context); textView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); @@ -402,16 +486,19 @@ public class JoinCallAlert extends BottomSheet { } else { textView.setTextColor(Theme.getColor(Theme.key_dialogTextBlack)); } - if (type == TYPE_DISPLAY) { - textView.setText(LocaleController.getString("VoipGroupDisplayAs", R.string.VoipGroupDisplayAs)); - } else if (type == TYPE_CREATE) { - textView.setText(LocaleController.getString("VoipGroupStartAs", R.string.VoipGroupStartAs)); - } else { - textView.setText(LocaleController.getString("VoipGroupJoinAs", R.string.VoipGroupJoinAs)); - } textView.setSingleLine(true); textView.setEllipsize(TextUtils.TruncateAt.END); - containerView.addView(textView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 23, 0, 23, 0)); + if (type == TYPE_CREATE) { + textView.setText(LocaleController.getString("StartVoipChatTitle", R.string.StartVoipChatTitle)); + internalLayout.addView(textView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 23, 16, 23, 0)); + } else { + if (type == TYPE_DISPLAY) { + textView.setText(LocaleController.getString("VoipGroupDisplayAs", R.string.VoipGroupDisplayAs)); + } else { + textView.setText(LocaleController.getString("VoipGroupJoinAs", R.string.VoipGroupJoinAs)); + } + internalLayout.addView(textView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 23, 8, 23, 0)); + } messageTextView = new TextView(getContext()); if (type == TYPE_DISPLAY) { @@ -431,45 +518,86 @@ public class JoinCallAlert extends BottomSheet { } } } - if (hasGroup) { - messageTextView.setText(LocaleController.getString("VoipGroupStartAsInfoGroup", R.string.VoipGroupStartAsInfoGroup)); - } else { - messageTextView.setText(LocaleController.getString("VoipGroupStartAsInfo", R.string.VoipGroupStartAsInfo)); - } messageTextView.setMovementMethod(new AndroidUtilities.LinkMovementMethodMy()); messageTextView.setLinkTextColor(Theme.getColor(Theme.key_dialogTextLink)); - messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); - containerView.addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 23, 0, 23, 5)); + if (type == TYPE_CREATE) { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat((int) -dialogId); + StringBuilder builder = new StringBuilder(); + if (ChatObject.isChannel(chat) && !chat.megagroup) { + builder.append(LocaleController.getString("VoipChannelStart2", R.string.VoipChannelStart2)); + } else { + builder.append(LocaleController.getString("VoipGroupStart2", R.string.VoipGroupStart2)); + } + if (chats.size() > 1) { + builder.append("\n\n").append(LocaleController.getString("VoipChatDisplayedAs", R.string.VoipChatDisplayedAs)); + } else { + listView.setVisibility(View.GONE); + } + messageTextView.setText(builder); + messageTextView.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.TOP); + internalLayout.addView(messageTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 23, 0, 23, 5)); + } else { + if (hasGroup) { + messageTextView.setText(LocaleController.getString("VoipGroupStartAsInfoGroup", R.string.VoipGroupStartAsInfoGroup)); + } else { + messageTextView.setText(LocaleController.getString("VoipGroupStartAsInfo", R.string.VoipGroupStartAsInfo)); + } + messageTextView.setGravity((LocaleController.isRTL ? Gravity.RIGHT : Gravity.LEFT) | Gravity.TOP); + internalLayout.addView(messageTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.LEFT, 23, 0, 23, 5)); + } - doneButton = new BottomSheetCell(context); - doneButton.setBackground(null); + if (type == TYPE_CREATE) { + internalLayout.addView(listView, LayoutHelper.createLinear(chats.size() < 5 ? LayoutHelper.WRAP_CONTENT : LayoutHelper.MATCH_PARENT, 95, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 6, 0, 0)); + } + + doneButton = new BottomSheetCell(context, false); doneButton.background.setOnClickListener(v -> { TLRPC.InputPeer peer = MessagesController.getInstance(currentAccount).getInputPeer(MessageObject.getPeerId(selectedPeer)); if (currentType == TYPE_DISPLAY) { if (selectedPeer != currentPeer) { - delegate.didSelectChat(peer, chats.size() > 1); + delegate.didSelectChat(peer, chats.size() > 1, false); } } else { selectAfterDismiss = peer; } dismiss(); }); - containerView.addView(doneButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 50, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 0)); + if (currentType == TYPE_CREATE) { + internalLayout.addView(doneButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 0)); + + BottomSheetCell scheduleButton = new BottomSheetCell(context, true); + scheduleButton.setText(LocaleController.getString("VoipGroupScheduleVoiceChat", R.string.VoipGroupScheduleVoiceChat), false); + scheduleButton.background.setOnClickListener(v -> { + selectAfterDismiss = MessagesController.getInstance(currentAccount).getInputPeer(MessageObject.getPeerId(selectedPeer)); + schedule = true; + dismiss(); + }); + internalLayout.addView(scheduleButton, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50, Gravity.LEFT | Gravity.TOP, 0, 0, 0, 0)); + } else { + internalLayout.addView(doneButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 50, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 0)); + } updateDoneButton(false); } private void updateDoneButton(boolean animated) { - int did = MessageObject.getPeerId(selectedPeer); - if (did > 0) { - TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); - doneButton.setText(LocaleController.formatString("VoipGroupContinueAs", R.string.VoipGroupContinueAs, UserObject.getFirstName(user)), animated); + if (currentType == TYPE_CREATE) { + doneButton.setText(LocaleController.formatString("VoipGroupStartVoiceChat", R.string.VoipGroupStartVoiceChat), animated); } else { - TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); - doneButton.setText(LocaleController.formatString("VoipGroupContinueAs", R.string.VoipGroupContinueAs, chat != null ? chat.title : ""), animated); + int did = MessageObject.getPeerId(selectedPeer); + if (did > 0) { + TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(did); + doneButton.setText(LocaleController.formatString("VoipGroupContinueAs", R.string.VoipGroupContinueAs, UserObject.getFirstName(user)), animated); + } else { + TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); + doneButton.setText(LocaleController.formatString("VoipGroupContinueAs", R.string.VoipGroupContinueAs, chat != null ? chat.title : ""), animated); + } } } private void updateLayout() { + if (currentType == TYPE_CREATE) { + return; + } if (listView.getChildCount() <= 0) { listView.setTopGlowOffset(scrollOffsetY = listView.getPaddingTop()); containerView.invalidate(); @@ -491,7 +619,7 @@ public class JoinCallAlert extends BottomSheet { public void dismissInternal() { super.dismissInternal(); if (selectAfterDismiss != null) { - delegate.didSelectChat(selectAfterDismiss, chats.size() > 1); + delegate.didSelectChat(selectAfterDismiss, chats.size() > 1, schedule); } } @@ -525,30 +653,41 @@ public class JoinCallAlert extends BottomSheet { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View view = new GroupCreateUserCell(context, 2, 0, false, currentType == TYPE_DISPLAY); + View view; + if (currentType == TYPE_CREATE) { + view = new ShareDialogCell(context, ShareDialogCell.TYPE_CREATE); + view.setLayoutParams(new RecyclerView.LayoutParams(AndroidUtilities.dp(80), AndroidUtilities.dp(100))); + } else { + view = new GroupCreateUserCell(context, 2, 0, false, currentType == TYPE_DISPLAY); + } return new RecyclerListView.Holder(view); } @Override public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { int position = holder.getAdapterPosition(); - GroupCreateUserCell cell = (GroupCreateUserCell) holder.itemView; - Object object = cell.getObject(); - if (object != null) { - int did = MessageObject.getPeerId(selectedPeer); - int id; - if (object instanceof TLRPC.Chat) { - id = -((TLRPC.Chat) object).id; - } else { - id = ((TLRPC.User) object).id; + long did = MessageObject.getPeerId(selectedPeer); + if (holder.itemView instanceof GroupCreateUserCell) { + GroupCreateUserCell cell = (GroupCreateUserCell) holder.itemView; + Object object = cell.getObject(); + long id = 0; + if (object != null) { + if (object instanceof TLRPC.Chat) { + id = -((TLRPC.Chat) object).id; + } else { + id = ((TLRPC.User) object).id; + } } cell.setChecked(did == id, false); + } else { + ShareDialogCell cell = (ShareDialogCell) holder.itemView; + long id = cell.getCurrentDialog(); + cell.setChecked(did == id, false); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - GroupCreateUserCell cell = (GroupCreateUserCell) holder.itemView; int did = MessageObject.getPeerId(chats.get(position)); TLObject object; String status; @@ -559,7 +698,13 @@ public class JoinCallAlert extends BottomSheet { object = MessagesController.getInstance(currentAccount).getChat(-did); status = null; } - cell.setObject(object, null, status, position != getItemCount() - 1); + if (currentType == TYPE_CREATE) { + ShareDialogCell cell = (ShareDialogCell) holder.itemView; + cell.setDialog(did, did == MessageObject.getPeerId(selectedPeer), null); + } else { + GroupCreateUserCell cell = (GroupCreateUserCell) holder.itemView; + cell.setObject(object, null, status, position != getItemCount() - 1); + } } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallByUrlAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallByUrlAlert.java index 669b20453..7596f5f7d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallByUrlAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinCallByUrlAlert.java @@ -80,7 +80,7 @@ public class JoinCallByUrlAlert extends BottomSheet { linearLayout.addView(avatarImageView, LayoutHelper.createLinear(90, 90, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 29, 0, 0)); AvatarDrawable avatarDrawable = new AvatarDrawable(chat); - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); TextView percentTextView = new TextView(context); percentTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinGroupAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinGroupAlert.java index 6f9813fd7..1ca621e0b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinGroupAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/JoinGroupAlert.java @@ -68,7 +68,7 @@ public class JoinGroupAlert extends BottomSheet { avatarDrawable = new AvatarDrawable(invite.chat); title = invite.chat.title; participants_count = invite.chat.participants_count; - avatarImageView.setImage(ImageLocation.getForChat(invite.chat, false), "50_50", avatarDrawable, invite); + avatarImageView.setImage(ImageLocation.getForUserOrChat(invite.chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(invite.chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, invite); } else { avatarDrawable = new AvatarDrawable(); avatarDrawable.setInfo(0, invite.title, null); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/NumberPicker.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/NumberPicker.java index ecad7aa38..e10abe87c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/NumberPicker.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/NumberPicker.java @@ -232,6 +232,7 @@ public class NumberPicker extends LinearLayout { public NumberPicker(Context context) { this(context, 18); } + public NumberPicker(Context context, int textSize) { super(context); mTextSize = AndroidUtilities.dp(textSize); 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 4e0aeca48..114f7a971 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PhonebookShareAlert.java @@ -117,7 +117,7 @@ public class PhonebookShareAlert extends BottomSheet { BackupImageView avatarImageView = new BackupImageView(context); avatarImageView.setRoundRadius(AndroidUtilities.dp(40)); - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); addView(avatarImageView, LayoutHelper.createLinear(80, 80, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 32, 0, 0)); TextView textView = new TextView(context); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PollVotesAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PollVotesAlert.java index 3e995aac7..8d4955509 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PollVotesAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PollVotesAlert.java @@ -375,7 +375,7 @@ public class PollVotesAlert extends BottomSheet { lastAvatar = photo; if (currentUser != null) { - avatarImageView.setImage(ImageLocation.getForUser(currentUser, false), "50_50", avatarDrawable, currentUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, currentUser); } else { avatarImageView.setImageDrawable(avatarDrawable); } 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 0686f3e09..a716ee0fb 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ProfileGalleryView.java @@ -13,7 +13,6 @@ import android.graphics.PointF; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.text.TextUtils; -import android.util.Log; import android.util.SparseArray; import android.view.MotionEvent; import android.view.View; @@ -31,6 +30,7 @@ import org.telegram.messenger.UserConfig; import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; +import org.telegram.ui.PinchToZoomHelper; import org.telegram.ui.ProfileActivity; import java.util.ArrayList; @@ -55,6 +55,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio private boolean scrolledByUser; private boolean isDownReleased; private final boolean isProfileFragment; + private ImageLocation uploadingImageLocation; private int currentAccount = UserConfig.selectedAccount; @@ -70,21 +71,29 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio private ArrayList imagesLocations = new ArrayList<>(); private ArrayList thumbsLocations = new ArrayList<>(); private ArrayList imagesLocationsSizes = new ArrayList<>(); + private ArrayList imagesUploadProgress = new ArrayList<>(); private int settingMainPhoto; private final SparseArray radialProgresses = new SparseArray<>(); - private OnPageChangeListener onPageChangeListener; + private boolean createThumbFromParent = true; + private boolean forceResetPosition; + private boolean invalidateWithParent; + + PinchToZoomHelper pinchToZoomHelper; private static class Item { - private BackupImageView imageView; + private AvatarImageView imageView; } public interface Callback { void onDown(boolean left); + void onRelease(); + void onPhotosLoaded(); + void onVideoSet(); } @@ -238,7 +247,6 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio MessagesController.getInstance(currentAccount).loadDialogPhotos((int) dialogId, 80, 0, true, parentClassGuid); } - public void onDestroy() { NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.dialogPhotosLoaded); NotificationCenter.getInstance(currentAccount).removeObserver(this, NotificationCenter.fileDidLoad); @@ -302,8 +310,21 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio cancelEvent.recycle(); return false; } - final int action = ev.getAction(); + + if (pinchToZoomHelper != null) { + if (action != MotionEvent.ACTION_DOWN && isDownReleased && !pinchToZoomHelper.isInOverlayMode()) { + pinchToZoomHelper.checkPinchToZoom(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0), this, getCurrentItemView().getImageReceiver(), null); + } else if (pinchToZoomHelper.checkPinchToZoom(ev, this, getCurrentItemView().getImageReceiver(), null)) { + if (!isDownReleased) { + isDownReleased = true; + callback.onRelease(); + } + return true; + } + } + + if (action == MotionEvent.ACTION_DOWN) { isScrollingListView = true; isSwipingViewPager = true; @@ -393,6 +414,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio videoLocations.set(0, null); videoFileNames.add(0, null); } + imagesUploadProgress.set(0, null); adapter.notifyDataSetChanged(); } } @@ -402,8 +424,13 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio return false; } if (prevImageLocation == null || prevImageLocation.location.local_id != imageLocation.location.local_id) { - imagesLocations.clear(); - MessagesController.getInstance(currentAccount).loadDialogPhotos((int) dialogId, 80, 0, true, parentClassGuid); + if (!imagesLocations.isEmpty()) { + prevImageLocation = imageLocation; + MessagesController.getInstance(currentAccount).loadDialogPhotos((int) dialogId, 80, 0, true, parentClassGuid); + return true; + } else { + MessagesController.getInstance(currentAccount).loadDialogPhotos((int) dialogId, 80, 0, true, parentClassGuid); + } } if (!imagesLocations.isEmpty()) { return false; @@ -416,11 +443,39 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio videoLocations.add(null); photos.add(null); imagesLocationsSizes.add(-1); + imagesUploadProgress.add(null); getAdapter().notifyDataSetChanged(); - resetCurrentItem(); + // resetCurrentItem(); return true; } + ImageLocation currentUploadingImageLocation; + ImageLocation curreantUploadingThumbLocation; + + public void addUploadingImage(ImageLocation imageLocation, ImageLocation thumbLocation) { + prevImageLocation = imageLocation; + thumbsFileNames.add(0, null); + videoFileNames.add(0, null); + imagesLocations.add(0, imageLocation); + thumbsLocations.add(0, thumbLocation); + videoLocations.add(0, null); + photos.add(0, null); + imagesLocationsSizes.add(0, -1); + imagesUploadProgress.add(0, 0f); + adapter.notifyDataSetChanged(); + resetCurrentItem(); + + currentUploadingImageLocation = imageLocation; + curreantUploadingThumbLocation = thumbLocation; + + } + + public void removeUploadingImage(ImageLocation imageLocation) { + uploadingImageLocation = imageLocation; + currentUploadingImageLocation = null; + curreantUploadingThumbLocation = null; + } + public ImageLocation getImageLocation(int index) { if (index < 0 || index >= imagesLocations.size()) { return null; @@ -576,6 +631,10 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio imagesLocationsSizes.remove(index); imagesLocationsSizes.add(0, size); + Float uploadProgress = imagesUploadProgress.get(index); + imagesUploadProgress.remove(index); + imagesUploadProgress.add(0, uploadProgress); + prevImageLocation = imagesLocations.get(0); } @@ -596,6 +655,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio thumbsLocations.remove(index); imagesLocationsSizes.remove(index); radialProgresses.delete(index); + imagesUploadProgress.remove(index); if (index == 0 && !imagesLocations.isEmpty()) { prevImageLocation = imagesLocations.get(0); } @@ -640,13 +700,14 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio thumbsLocations.clear(); photos.clear(); imagesLocationsSizes.clear(); + imagesUploadProgress.clear(); ImageLocation currentImageLocation = null; if (did < 0) { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-did); - currentImageLocation = ImageLocation.getForChat(chat, true); + currentImageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); if (currentImageLocation != null) { imagesLocations.add(currentImageLocation); - thumbsLocations.add(ImageLocation.getForChat(chat, false)); + thumbsLocations.add(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL)); thumbsFileNames.add(null); if (chatInfo != null && FileLoader.isSamePhoto(currentImageLocation.location, chatInfo.chat_photo)) { photos.add(chatInfo.chat_photo); @@ -664,6 +725,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio videoLocations.add(null); } imagesLocationsSizes.add(-1); + imagesUploadProgress.add(null); } } for (int a = 0; a < arrayList.size(); a++) { @@ -717,20 +779,24 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio } photos.add(photo); imagesLocationsSizes.add(sizeFull.size); + imagesUploadProgress.add(null); } } } loadNeighboringThumbs(); getAdapter().notifyDataSetChanged(); if (isProfileFragment) { - if (!scrolledByUser) { + if (!scrolledByUser || forceResetPosition) { resetCurrentItem(); } } else { - resetCurrentItem(); - getAdapter().notifyDataSetChanged(); + if (!scrolledByUser || forceResetPosition) { + resetCurrentItem(); + getAdapter().notifyDataSetChanged(); + } } + forceResetPosition = false; if (fromCache) { MessagesController.getInstance(currentAccount).loadDialogPhotos(did, 80, 0, false, parentClassGuid); @@ -738,6 +804,9 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio if (callback != null) { callback.onPhotosLoaded(); } + if (currentUploadingImageLocation != null) { + addUploadingImage(currentUploadingImageLocation, curreantUploadingThumbLocation); + } } } else if (id == NotificationCenter.fileDidLoad) { final String fileName = (String) args[0]; @@ -817,147 +886,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio final Item item = objects.get(position); if (item.imageView == null) { - item.imageView = new BackupImageView(context) { - - private final int radialProgressSize = AndroidUtilities.dp(64f); - - private RadialProgress2 radialProgress; - private ValueAnimator radialProgressHideAnimator; - private float radialProgressHideAnimatorStartValue; - private long firstDrawTime = -1; - private boolean isVideo; - - { - getImageReceiver().setAllowDecodeSingleFrame(true); - final int realPosition = getRealPosition(position); - boolean needProgress = false; - if (realPosition == 0) { - Drawable drawable = parentAvatarImageView == null ? null : parentAvatarImageView.getImageReceiver().getDrawable(); - if (drawable instanceof AnimatedFileDrawable && ((AnimatedFileDrawable) drawable).hasBitmap()) { - AnimatedFileDrawable animatedFileDrawable = (AnimatedFileDrawable) drawable; - setImageDrawable(drawable); - animatedFileDrawable.addSecondParentView(this); - animatedFileDrawable.setInvalidateParentViewWithSecond(true); - } else { - ImageLocation videoLocation = videoLocations.get(realPosition); - isVideo = videoLocation != null; - needProgress = true; - String filter; - if (isProfileFragment && videoLocation != null && videoLocation.imageType == FileLoader.IMAGE_TYPE_ANIMATION) { - filter = ImageLoader.AUTOPLAY_FILTER; - } else { - filter = null; - } - Bitmap thumb = parentAvatarImageView == null ? null : parentAvatarImageView.getImageReceiver().getBitmap(); - setImageMedia(videoLocations.get(realPosition), filter, imagesLocations.get(realPosition), null, thumb, imagesLocationsSizes.get(realPosition), 1, "avatar_" + dialogId); - } - } else { - final ImageLocation videoLocation = videoLocations.get(realPosition); - isVideo = videoLocation != null; - needProgress = true; - ImageLocation location = thumbsLocations.get(realPosition); - String filter = location.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; - setImageMedia(videoLocation, null, imagesLocations.get(realPosition), null, thumbsLocations.get(realPosition), filter, null, imagesLocationsSizes.get(realPosition), 1, location); - } - if (needProgress) { - radialProgress = radialProgresses.get(realPosition); - if (radialProgress == null) { - radialProgress = new RadialProgress2(this); - radialProgress.setOverrideAlpha(0.0f); - radialProgress.setIcon(MediaActionDrawable.ICON_EMPTY, false, false); - radialProgress.setColors(0x42000000, 0x42000000, Color.WHITE, Color.WHITE); - radialProgresses.append(realPosition, radialProgress); - } - postInvalidateOnAnimation(); - } - getImageReceiver().setDelegate(new ImageReceiver.ImageReceiverDelegate() { - @Override - public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb, boolean memCache) { - - } - - @Override - public void onAnimationReady(ImageReceiver imageReceiver) { - callback.onVideoSet(); - } - }); - getImageReceiver().setCrossfadeAlpha((byte) 2); - } - - @Override - protected void onSizeChanged(int w, int h, int oldw, int oldh) { - super.onSizeChanged(w, h, oldw, oldh); - if (radialProgress != null) { - int paddingTop = (parentActionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + ActionBar.getCurrentActionBarHeight(); - int paddingBottom = AndroidUtilities.dp2(80f); - radialProgress.setProgressRect((w - radialProgressSize) / 2, paddingTop + (h - paddingTop - paddingBottom - radialProgressSize) / 2, (w + radialProgressSize) / 2, paddingTop + (h - paddingTop - paddingBottom + radialProgressSize) / 2); - } - } - - @Override - protected void onDraw(Canvas canvas) { - if (radialProgress != null) { - final Drawable drawable = getImageReceiver().getDrawable(); - if (drawable != null && (!isVideo || (drawable instanceof AnimatedFileDrawable && ((AnimatedFileDrawable) drawable).getDurationMs() > 0))) { - if (radialProgressHideAnimator == null) { - long startDelay = 0; - if (radialProgress.getProgress() < 1f) { - radialProgress.setProgress(1f, true); - startDelay = 100; - } - radialProgressHideAnimatorStartValue = radialProgress.getOverrideAlpha(); - radialProgressHideAnimator = ValueAnimator.ofFloat(0f, 1f); - radialProgressHideAnimator.setStartDelay(startDelay); - radialProgressHideAnimator.setDuration((long) (radialProgressHideAnimatorStartValue * 250f)); - radialProgressHideAnimator.setInterpolator(CubicBezierInterpolator.DEFAULT); - radialProgressHideAnimator.addUpdateListener(anim -> radialProgress.setOverrideAlpha(AndroidUtilities.lerp(radialProgressHideAnimatorStartValue, 0f, anim.getAnimatedFraction()))); - radialProgressHideAnimator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - radialProgress = null; - radialProgresses.delete(getRealPosition(position)); - } - }); - radialProgressHideAnimator.start(); - } - } else { - if (firstDrawTime < 0) { - firstDrawTime = System.currentTimeMillis(); - } else { - final long elapsedTime = System.currentTimeMillis() - firstDrawTime; - final long startDelay = isVideo ? 250 : 750; - final long duration = 250; - if (elapsedTime <= startDelay + duration) { - if (elapsedTime > startDelay) { - radialProgress.setOverrideAlpha(CubicBezierInterpolator.DEFAULT.getInterpolation((elapsedTime - startDelay) / (float) duration)); - } - } - } - postInvalidateOnAnimation(); - } - if (roundTopRadius == 0 && roundBottomRadius == 0) { - canvas.drawRect(0, 0, getWidth(), getHeight(), placeholderPaint); - } else if (roundTopRadius == roundBottomRadius) { - rect.set(0, 0, getWidth(), getHeight()); - canvas.drawRoundRect(rect, roundTopRadius, roundTopRadius, placeholderPaint); - } else { - path.reset(); - rect.set(0, 0, getWidth(), getHeight()); - for (int i = 0; i < 4; i++) { - radii[i] = roundTopRadius; - radii[4 + i] = roundBottomRadius; - } - path.addRoundRect(rect, radii, Path.Direction.CW); - canvas.drawPath(path, placeholderPaint); - } - } - super.onDraw(canvas); - - if (radialProgress != null && radialProgress.getOverrideAlpha() > 0f) { - radialProgress.draw(canvas); - } - } - }; + item.imageView = new AvatarImageView(context, position, placeholderPaint); imageViews.set(position, item.imageView); } @@ -965,6 +894,76 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio container.addView(item.imageView); } + item.imageView.getImageReceiver().setAllowDecodeSingleFrame(true); + final int realPosition = getRealPosition(position); + boolean needProgress = false; + if (realPosition == 0) { + Drawable drawable = parentAvatarImageView == null ? null : parentAvatarImageView.getImageReceiver().getDrawable(); + if (drawable instanceof AnimatedFileDrawable && ((AnimatedFileDrawable) drawable).hasBitmap()) { + AnimatedFileDrawable animatedFileDrawable = (AnimatedFileDrawable) drawable; + item.imageView.setImageDrawable(drawable); + animatedFileDrawable.addSecondParentView(item.imageView); + animatedFileDrawable.setInvalidateParentViewWithSecond(true); + } else { + ImageLocation videoLocation = videoLocations.get(realPosition); + item.imageView.isVideo = videoLocation != null; + needProgress = true; + String filter; + if (isProfileFragment && videoLocation != null && videoLocation.imageType == FileLoader.IMAGE_TYPE_ANIMATION) { + filter = ImageLoader.AUTOPLAY_FILTER; + } else { + filter = null; + } + ImageLocation location = thumbsLocations.get(realPosition); + Bitmap thumb = (parentAvatarImageView == null || !createThumbFromParent) ? null : parentAvatarImageView.getImageReceiver().getBitmap(); + if (thumb != null) { + item.imageView.setImageMedia(videoLocations.get(realPosition), filter, imagesLocations.get(realPosition), null, thumb, imagesLocationsSizes.get(realPosition), 1, location); + } else if (uploadingImageLocation != null) { + item.imageView.setImageMedia(videoLocations.get(realPosition), filter, imagesLocations.get(realPosition), null, uploadingImageLocation, null, null, imagesLocationsSizes.get(realPosition), 1, location); + } else { + String thumbFilter = location.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; + item.imageView.setImageMedia(videoLocation, null, imagesLocations.get(realPosition), null, thumbsLocations.get(realPosition), thumbFilter, null, imagesLocationsSizes.get(realPosition), 1, location); + } + } + } else { + final ImageLocation videoLocation = videoLocations.get(realPosition); + item.imageView.isVideo = videoLocation != null; + needProgress = true; + ImageLocation location = thumbsLocations.get(realPosition); + String filter = location.photoSize instanceof TLRPC.TL_photoStrippedSize ? "b" : null; + item.imageView.setImageMedia(videoLocation, null, imagesLocations.get(realPosition), null, thumbsLocations.get(realPosition), filter, null, imagesLocationsSizes.get(realPosition), 1, location); + } + if (imagesUploadProgress.get(realPosition) != null) { + needProgress = true; + } + if (needProgress) { + item.imageView.radialProgress = radialProgresses.get(realPosition); + if (item.imageView.radialProgress == null) { + item.imageView.radialProgress = new RadialProgress2(item.imageView); + item.imageView.radialProgress.setOverrideAlpha(0.0f); + item.imageView.radialProgress.setIcon(MediaActionDrawable.ICON_EMPTY, false, false); + item.imageView.radialProgress.setColors(0x42000000, 0x42000000, Color.WHITE, Color.WHITE); + radialProgresses.append(realPosition, item.imageView.radialProgress); + } + if (invalidateWithParent) { + invalidate(); + } else { + postInvalidateOnAnimation(); + } + } + item.imageView.getImageReceiver().setDelegate(new ImageReceiver.ImageReceiverDelegate() { + @Override + public void didSetImage(ImageReceiver imageReceiver, boolean set, boolean thumb, boolean memCache) { + + } + + @Override + public void onAnimationReady(ImageReceiver imageReceiver) { + callback.onVideoSet(); + } + }); + item.imageView.getImageReceiver().setCrossfadeAlpha((byte) 2); + item.imageView.setRoundRadius(roundTopRadius, roundTopRadius, roundBottomRadius, roundBottomRadius); return item; @@ -981,6 +980,7 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio } imageView.setRoundRadius(0); container.removeView(imageView); + imageView.getImageReceiver().cancelLoadImage(); } @Nullable @@ -1021,6 +1021,8 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio resetCurrentItem(); return; } + forceResetPosition = true; + adapter.notifyDataSetChanged(); reset(); this.dialogId = dialogId; MessagesController.getInstance(currentAccount).loadDialogPhotos((int) dialogId, 80, 0, true, parentClassGuid); @@ -1034,8 +1036,9 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio imagesLocations.clear(); thumbsLocations.clear(); imagesLocationsSizes.clear(); + imagesUploadProgress.clear(); adapter.notifyDataSetChanged(); - resetCurrentItem(); + uploadingImageLocation = null; } public void setRoundRadius(int topRadius, int bottomRadius) { @@ -1055,4 +1058,150 @@ public class ProfileGalleryView extends CircularViewPager implements Notificatio adapter.parentAvatarImageView = parentImageView; } } + + public void setUploadProgress(ImageLocation imageLocation, float p) { + if (imageLocation == null) { + return; + } + for (int i = 0; i < imagesLocations.size(); i++) { + if (imagesLocations.get(i) == imageLocation) { + imagesUploadProgress.set(i, p); + if (radialProgresses.get(i) != null) { + radialProgresses.get(i).setProgress(p, true); + } + break; + } + } + for (int i = 0; i < getChildCount(); i++) { + getChildAt(i).invalidate(); + } + } + + public void setCreateThumbFromParent(boolean createThumbFromParent) { + this.createThumbFromParent = createThumbFromParent; + } + + private class AvatarImageView extends BackupImageView { + + private final int radialProgressSize = AndroidUtilities.dp(64f); + + private RadialProgress2 radialProgress; + private ValueAnimator radialProgressHideAnimator; + private float radialProgressHideAnimatorStartValue; + private long firstDrawTime = -1; + public boolean isVideo; + private final int position; + private final Paint placeholderPaint; + + public AvatarImageView(Context context, int position, Paint placeholderPaint) { + super(context); + this.position = position; + this.placeholderPaint = placeholderPaint; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (radialProgress != null) { + int paddingTop = (parentActionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + ActionBar.getCurrentActionBarHeight(); + int paddingBottom = AndroidUtilities.dp2(80f); + radialProgress.setProgressRect((w - radialProgressSize) / 2, paddingTop + (h - paddingTop - paddingBottom - radialProgressSize) / 2, (w + radialProgressSize) / 2, paddingTop + (h - paddingTop - paddingBottom + radialProgressSize) / 2); + } + } + + @Override + protected void onDraw(Canvas canvas) { + if (pinchToZoomHelper != null && pinchToZoomHelper.isInOverlayMode()) { + return; + } + if (radialProgress != null) { + final int realPosition = getRealPosition(position); + final Drawable drawable = getImageReceiver().getDrawable(); + boolean hideProgress; + if (realPosition < imagesUploadProgress.size() && imagesUploadProgress.get(realPosition) != null) { + hideProgress = imagesUploadProgress.get(realPosition) >= 1f; + } else { + hideProgress = drawable != null && (!isVideo || (drawable instanceof AnimatedFileDrawable && ((AnimatedFileDrawable) drawable).getDurationMs() > 0)); + } + if (hideProgress) { + if (radialProgressHideAnimator == null) { + long startDelay = 0; + if (radialProgress.getProgress() < 1f) { + radialProgress.setProgress(1f, true); + startDelay = 100; + } + radialProgressHideAnimatorStartValue = radialProgress.getOverrideAlpha(); + radialProgressHideAnimator = ValueAnimator.ofFloat(0f, 1f); + radialProgressHideAnimator.setStartDelay(startDelay); + radialProgressHideAnimator.setDuration((long) (radialProgressHideAnimatorStartValue * 250f)); + radialProgressHideAnimator.setInterpolator(CubicBezierInterpolator.DEFAULT); + radialProgressHideAnimator.addUpdateListener(anim -> radialProgress.setOverrideAlpha(AndroidUtilities.lerp(radialProgressHideAnimatorStartValue, 0f, anim.getAnimatedFraction()))); + radialProgressHideAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + radialProgress = null; + radialProgresses.delete(getRealPosition(position)); + } + }); + radialProgressHideAnimator.start(); + } + } else { + if (firstDrawTime < 0) { + firstDrawTime = System.currentTimeMillis(); + } else { + final long elapsedTime = System.currentTimeMillis() - firstDrawTime; + final long startDelay = isVideo ? 250 : 750; + final long duration = 250; + if (elapsedTime <= startDelay + duration) { + if (elapsedTime > startDelay) { + radialProgress.setOverrideAlpha(CubicBezierInterpolator.DEFAULT.getInterpolation((elapsedTime - startDelay) / (float) duration)); + } + } + } + if (invalidateWithParent) { + invalidate(); + } else { + postInvalidateOnAnimation(); + } + invalidate(); + } + if (roundTopRadius == 0 && roundBottomRadius == 0) { + canvas.drawRect(0, 0, getWidth(), getHeight(), placeholderPaint); + } else if (roundTopRadius == roundBottomRadius) { + rect.set(0, 0, getWidth(), getHeight()); + canvas.drawRoundRect(rect, roundTopRadius, roundTopRadius, placeholderPaint); + } else { + path.reset(); + rect.set(0, 0, getWidth(), getHeight()); + for (int i = 0; i < 4; i++) { + radii[i] = roundTopRadius; + radii[4 + i] = roundBottomRadius; + } + path.addRoundRect(rect, radii, Path.Direction.CW); + canvas.drawPath(path, placeholderPaint); + } + } + super.onDraw(canvas); + + if (radialProgress != null && radialProgress.getOverrideAlpha() > 0f) { + radialProgress.draw(canvas); + } + } + + @Override + public void invalidate() { + super.invalidate(); + if (invalidateWithParent) { + ProfileGalleryView.this.invalidate(); + } + } + } + + public void setPinchToZoomHelper(PinchToZoomHelper pinchToZoomHelper) { + this.pinchToZoomHelper = pinchToZoomHelper; + } + + public void setInvalidateWithParent(boolean invalidateWithParent) { + this.invalidateWithParent = invalidateWithParent; + } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/PullForegroundDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/PullForegroundDrawable.java index a79fa4293..72b695a1a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/PullForegroundDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/PullForegroundDrawable.java @@ -468,7 +468,7 @@ public class PullForegroundDrawable { } public void startOutAnimation() { - if (animateOut) { + if (animateOut || listView == null) { return; } if (outAnimator != null) { 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 b3814a033..23657cdda 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/RecyclerListView.java @@ -773,7 +773,7 @@ public class RecyclerListView extends RecyclerView { } protected void onChildPressed(View child, float x, float y, boolean pressed) { - if (disableHighlightState) { + if (disableHighlightState || child == null) { return; } child.setPressed(pressed); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTabStrip.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTabStrip.java index 9c3585cb2..cc2a12055 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTabStrip.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ScrollSlidingTabStrip.java @@ -284,7 +284,7 @@ public class ScrollSlidingTabStrip extends HorizontalScrollView { BackupImageView imageView = new BackupImageView(getContext()); imageView.setLayerNum(1); imageView.setRoundRadius(AndroidUtilities.dp(15)); - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); imageView.setAspectFit(true); tab.addView(imageView, LayoutHelper.createFrame(30, 30, Gravity.CENTER)); } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java index 2baca1604..d2a65baad 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/ShareAlert.java @@ -1601,7 +1601,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi View view; switch (viewType) { case 0: { - view = new ShareDialogCell(context, darkTheme); + view = new ShareDialogCell(context, darkTheme ? ShareDialogCell.TYPE_CALL : ShareDialogCell.TYPE_SHARE); view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, AndroidUtilities.dp(100))); break; } @@ -1901,8 +1901,8 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi if (becomeEmpty) { topBeforeSwitch = getCurrentTop(); } - searchAdapterHelper.mergeResults(searchResult); searchResult = result; + searchAdapterHelper.mergeResults(searchResult); notifyDataSetChanged(); if (!isEmpty && !becomeEmpty && topBeforeSwitch > 0) { layoutManager.scrollToPositionWithOffset(0, -topBeforeSwitch); @@ -1995,7 +1995,7 @@ public class ShareAlert extends BottomSheet implements NotificationCenter.Notifi View view; switch (viewType) { case 0: { - view = new ShareDialogCell(context, darkTheme); + view = new ShareDialogCell(context, darkTheme ? ShareDialogCell.TYPE_CALL : ShareDialogCell.TYPE_SHARE); view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, AndroidUtilities.dp(100))); break; } 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 bea492f20..d0b28c3d2 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/SharedMediaLayout.java @@ -485,8 +485,28 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return null; } final RecyclerListView listView = mediaPages[0].listView; + int firstVisiblePosition = -1; + int lastVisiblePosition = -1; for (int a = 0, count = listView.getChildCount(); a < count; a++) { View view = listView.getChildAt(a); + int visibleHeight = mediaPages[0].listView.getMeasuredHeight(); + View parent = (View) getParent(); + if (parent != null) { + if (getY() + getMeasuredHeight() > parent.getMeasuredHeight()) { + visibleHeight -= getBottom() - parent.getMeasuredHeight(); + } + } + + if (view.getTop() >= visibleHeight) { + continue; + } + int adapterPosition = listView.getChildAdapterPosition(view); + if (adapterPosition < firstVisiblePosition || firstVisiblePosition == -1) { + firstVisiblePosition = adapterPosition; + } + if (adapterPosition > lastVisiblePosition || lastVisiblePosition == -1) { + lastVisiblePosition = adapterPosition; + } int[] coords = new int[2]; ImageReceiver imageReceiver = null; if (view instanceof SharedPhotoVideoCell) { @@ -564,6 +584,18 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter return object; } } + if (mediaPages[0].selectedType == 0 && firstVisiblePosition >= 0 && lastVisiblePosition >= 0) { + int position = photoVideoAdapter.getPositionForIndex(index); + + if (position <= firstVisiblePosition) { + mediaPages[0].layoutManager.scrollToPositionWithOffset(position, 0); + profileActivity.scrollToSharedMedia(); + } else if (position >= lastVisiblePosition && lastVisiblePosition >= 0) { + mediaPages[0].layoutManager.scrollToPositionWithOffset(position, 0, true); + profileActivity.scrollToSharedMedia(); + } + } + return null; } }; @@ -3487,6 +3519,10 @@ public class SharedMediaLayout extends FrameLayout implements NotificationCenter mContext = context; } + public int getPositionForIndex(int i) { + return i / columnsCount; + } + @Override public int getItemCount() { if (sharedMediaData[0].messages.size() == 0 && !sharedMediaData[0].loading) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java index 845862e02..7c3ed9c4b 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/UndoView.java @@ -44,8 +44,11 @@ import org.telegram.messenger.MessagesController; import org.telegram.messenger.R; import org.telegram.messenger.UserConfig; import org.telegram.messenger.UserObject; +import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLRPC; +import org.telegram.ui.ActionBar.BaseFragment; import org.telegram.ui.ActionBar.Theme; +import org.telegram.ui.PaymentFormActivity; @SuppressWarnings("FieldCanBeLocal") public class UndoView extends FrameLayout { @@ -59,6 +62,8 @@ public class UndoView extends FrameLayout { private LinearLayout undoButton; private int undoViewHeight; + private BaseFragment parentFragment; + private Object currentInfoObject; private int currentAccount = UserConfig.selectedAccount; @@ -149,6 +154,8 @@ public class UndoView extends FrameLayout { public final static int ACTION_GIGAGROUP_CANCEL = 75; public final static int ACTION_GIGAGROUP_SUCCESS = 76; + public final static int ACTION_PAYMENT_SUCCESS = 77; + private CharSequence infoText; public class LinkMovementMethodMy extends LinkMovementMethod { @@ -175,11 +182,16 @@ public class UndoView extends FrameLayout { } public UndoView(Context context) { - this(context, false); + this(context, null, false); } - public UndoView(Context context, boolean top) { + public UndoView(Context context, BaseFragment parent) { + this(context, parent, false); + } + + public UndoView(Context context, BaseFragment parent, boolean top) { super(context); + parentFragment = parent; fromTop = top; infoTextView = new TextView(context); @@ -280,7 +292,7 @@ public class UndoView extends FrameLayout { currentAction == ACTION_CHAT_UNARCHIVED || currentAction == ACTION_VOIP_MUTED || currentAction == ACTION_VOIP_UNMUTED || currentAction == ACTION_VOIP_REMOVED || currentAction == ACTION_VOIP_LINK_COPIED || currentAction == ACTION_VOIP_INVITED || currentAction == ACTION_VOIP_MUTED_FOR_YOU || currentAction == ACTION_VOIP_UNMUTED_FOR_YOU || currentAction == ACTION_REPORT_SENT || currentAction == ACTION_VOIP_USER_CHANGED || currentAction == ACTION_VOIP_CAN_NOW_SPEAK || currentAction == ACTION_VOIP_RECORDING_STARTED || - currentAction == ACTION_VOIP_RECORDING_FINISHED || currentAction == ACTION_VOIP_SOUND_MUTED || currentAction == ACTION_VOIP_SOUND_UNMUTED; + currentAction == ACTION_VOIP_RECORDING_FINISHED || currentAction == ACTION_VOIP_SOUND_MUTED || currentAction == ACTION_VOIP_SOUND_UNMUTED || currentAction == ACTION_PAYMENT_SUCCESS; } private boolean hasSubInfo() { @@ -412,6 +424,9 @@ public class UndoView extends FrameLayout { boolean infoOnly = false; boolean reversedPlay = false; int reversedPlayEndFrame = 0; + setOnClickListener(null); + setOnTouchListener((v, event) -> true); + infoTextView.setMovementMethod(new LinkMovementMethodMy()); if (isTooltipAction()) { CharSequence infoText; @@ -434,7 +449,7 @@ public class UndoView extends FrameLayout { AvatarDrawable avatarDrawable = new AvatarDrawable(); avatarDrawable.setTextSize(AndroidUtilities.dp(12)); avatarDrawable.setInfo(user); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); avatarImageView.setVisibility(VISIBLE); timeLeft = 3000; } else if (action == ACTION_VOIP_USER_CHANGED) { @@ -444,12 +459,12 @@ public class UndoView extends FrameLayout { if (infoObject instanceof TLRPC.User) { TLRPC.User user = (TLRPC.User) infoObject; avatarDrawable.setInfo(user); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); name = ContactsController.formatName(user.first_name, user.last_name); } else { TLRPC.Chat chat = (TLRPC.Chat) infoObject; avatarDrawable.setInfo(chat); - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); name = chat.title; } infoText = AndroidUtilities.replaceTags(LocaleController.formatString("VoipGroupUserChanged", R.string.VoipGroupUserChanged, name)); @@ -462,6 +477,27 @@ public class UndoView extends FrameLayout { subInfoText = null; icon = R.raw.voip_invite; timeLeft = 3000; + } else if (action == ACTION_PAYMENT_SUCCESS) { + infoText = (CharSequence) infoObject; + subInfoText = null; + icon = R.raw.payment_success; + timeLeft = 5000; + if (parentFragment != null && infoObject2 instanceof TLRPC.Message) { + TLRPC.Message message = (TLRPC.Message) infoObject2; + setOnTouchListener(null); + infoTextView.setMovementMethod(null); + setOnClickListener(v -> { + hide(true, 1); + TLRPC.TL_payments_getPaymentReceipt req = new TLRPC.TL_payments_getPaymentReceipt(); + req.msg_id = message.id; + req.peer = parentFragment.getMessagesController().getInputPeer(message.peer_id); + parentFragment.getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (response instanceof TLRPC.TL_payments_paymentReceipt) { + parentFragment.presentFragment(new PaymentFormActivity((TLRPC.TL_payments_paymentReceipt) response)); + } + }), ConnectionsManager.RequestFlagFailOnServerErrors); + }); + } } else if (action == ACTION_VOIP_MUTED) { String name; if (infoObject instanceof TLRPC.User) { @@ -670,7 +706,7 @@ public class UndoView extends FrameLayout { } } subInfoText = null; - icon = R.raw.contact_check; + icon = action == ACTION_ADDED_TO_FOLDER ? R.raw.folder_in : R.raw.folder_out; } else if (action == ACTION_CACHE_WAS_CLEARED) { infoText = this.infoText; subInfoText = null; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoForwardDrawable.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoForwardDrawable.java index 4b9539dd8..4dbc78593 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoForwardDrawable.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoForwardDrawable.java @@ -21,13 +21,25 @@ public class VideoForwardDrawable extends Drawable { private final static int[] playPath = new int[] {10, 7, 26, 16, 10, 25}; private float animationProgress; + private float enterAnimationProgress; private boolean animating; + private boolean isOneShootAnimation; + private boolean showing; private long lastAnimationTime; private VideoForwardDrawableDelegate delegate; - long time; - String timeStr; + private long time; + private String timeStr; + + public void setTime(long dt) { + time = dt; + if (time >= 1000) { + timeStr = LocaleController.formatPluralString("Seconds", (int) (time / 1000)); + } else { + timeStr = null; + } + } public interface VideoForwardDrawableDelegate { void onAnimationEnd(); @@ -61,8 +73,17 @@ public class VideoForwardDrawable extends Drawable { invalidateSelf(); } + public void setOneShootAnimation(boolean isOneShootAnimation) { + if (this.isOneShootAnimation != isOneShootAnimation) { + this.isOneShootAnimation = isOneShootAnimation; + timeStr = null; + time = 0; + animationProgress = 0f; + } + } + public void setLeftSide(boolean value) { - if (leftSide == value && animationProgress >= 1.0f) { + if (leftSide == value && animationProgress >= 1.0f && isOneShootAnimation) { return; } if (leftSide != value) { @@ -111,12 +132,17 @@ public class VideoForwardDrawable extends Drawable { canvas.save(); canvas.clipRect(rect.left, rect.top, rect.right, rect.bottom); - if (animationProgress <= 0.7f) { - paint.setAlpha((int) (80 * Math.min(1.0f, animationProgress / 0.3f))); - textPaint.setAlpha((int) (255 * Math.min(1.0f, animationProgress / 0.3f))); + if (!isOneShootAnimation) { + paint.setAlpha((int) (80 * enterAnimationProgress)); + textPaint.setAlpha((int) (255 * enterAnimationProgress)); } else { - paint.setAlpha((int) (80 * (1.0f - (animationProgress - 0.7f) / 0.3f))); - textPaint.setAlpha((int) (255 * (1.0f - (animationProgress - 0.7f) / 0.3f))); + if (animationProgress <= 0.7f) { + paint.setAlpha((int) (80 * Math.min(1.0f, animationProgress / 0.3f))); + textPaint.setAlpha((int) (255 * Math.min(1.0f, animationProgress / 0.3f))); + } else { + paint.setAlpha((int) (80 * (1.0f - (animationProgress - 0.7f) / 0.3f))); + textPaint.setAlpha((int) (255 * (1.0f - (animationProgress - 0.7f) / 0.3f))); + } } canvas.drawCircle(x + Math.max(rect.width(), rect.height()) / 4 * (leftSide ? -1 : 1), y + AndroidUtilities.dp(16), Math.max(rect.width(), rect.height()) / 2, paint); canvas.restore(); @@ -131,31 +157,46 @@ public class VideoForwardDrawable extends Drawable { } canvas.translate(x, y); if (animationProgress <= 0.6f) { + int a; if (animationProgress < 0.4f) { - paint.setAlpha(Math.min(255, (int) (255 * animationProgress / 0.2f))); + a = Math.min(255, (int) (255 * animationProgress / 0.2f)); } else { - paint.setAlpha((int) (255 * (1.0f - (animationProgress - 0.4f) / 0.2f))); + a = (int) (255 * (1.0f - (animationProgress - 0.4f) / 0.2f)); } + if (!isOneShootAnimation) { + a = (int) (a * enterAnimationProgress); + } + paint.setAlpha(a); canvas.drawPath(path1, paint); } canvas.translate(AndroidUtilities.dp(18), 0); if (animationProgress >= 0.2f && animationProgress <= 0.8f) { float progress = animationProgress - 0.2f; + int a; if (progress < 0.4f) { - paint.setAlpha(Math.min(255, (int) (255 * progress / 0.2f))); + a = Math.min(255, (int) (255 * progress / 0.2f)); } else { - paint.setAlpha((int) (255 * (1.0f - (progress - 0.4f) / 0.2f))); + a = (int) (255 * (1.0f - (progress - 0.4f) / 0.2f)); } + if (!isOneShootAnimation) { + a = (int) (a * enterAnimationProgress); + } + paint.setAlpha(a); canvas.drawPath(path1, paint); } canvas.translate(AndroidUtilities.dp(18), 0); if (animationProgress >= 0.4f && animationProgress <= 1.0f) { float progress = animationProgress - 0.4f; + int a; if (progress < 0.4f) { - paint.setAlpha(Math.min(255, (int) (255 * progress / 0.2f))); + a = Math.min(255, (int) (255 * progress / 0.2f)); } else { - paint.setAlpha((int) (255 * (1.0f - (progress - 0.4f) / 0.2f))); + a = (int) (255 * (1.0f - (progress - 0.4f) / 0.2f)); } + if (!isOneShootAnimation) { + a = (int) (a * enterAnimationProgress); + } + paint.setAlpha(a); canvas.drawPath(path1, paint); } canvas.restore(); @@ -169,24 +210,57 @@ public class VideoForwardDrawable extends Drawable { lastAnimationTime = newTime; if (animationProgress < 1.0f) { animationProgress += dt / 800.0f; - if (animationProgress >= 1.0f) { - animationProgress = 0.0f; - animating = false; - time = 0; - timeStr = null; - if (delegate != null) { - delegate.onAnimationEnd(); + if (!isOneShootAnimation) { + if (animationProgress >= 1.0f) { + if (showing) { + animationProgress = 0f; + } else { + animationProgress = 1f; + } + } + } else { + if (animationProgress >= 1.0f) { + animationProgress = 0.0f; + animating = false; + time = 0; + timeStr = null; + if (delegate != null) { + delegate.onAnimationEnd(); + } } } - if (delegate != null) { - delegate.invalidate(); - } else { - invalidateSelf(); + invalidate(); + } + if (!isOneShootAnimation) { + if (showing && enterAnimationProgress != 1f) { + enterAnimationProgress += 16 / 150f; + invalidate(); + } else if (!showing && enterAnimationProgress != 0) { + enterAnimationProgress -= 16 / 150f; + invalidate(); + } + if (enterAnimationProgress < 0) { + enterAnimationProgress = 0f; + } else if (enterAnimationProgress > 1f) { + enterAnimationProgress = 1f; } } } } + public void setShowing(boolean showing) { + this.showing = showing; + invalidate(); + } + + private void invalidate() { + if (delegate != null) { + delegate.invalidate(); + } else { + invalidateSelf(); + } + } + @Override public int getIntrinsicWidth() { return AndroidUtilities.dp(32); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayerSeekBar.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayerSeekBar.java index 67fd64bb6..6f893a021 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayerSeekBar.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/VideoPlayerSeekBar.java @@ -11,6 +11,7 @@ package org.telegram.ui.Components; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.graphics.Path; import android.graphics.RectF; import android.os.SystemClock; import android.view.MotionEvent; @@ -18,6 +19,8 @@ import android.view.View; import androidx.core.graphics.ColorUtils; +import com.google.android.exoplayer2.util.Log; + import org.telegram.messenger.AndroidUtilities; public class VideoPlayerSeekBar { @@ -45,6 +48,9 @@ public class VideoPlayerSeekBar { private int backgroundSelectedColor; private RectF rect = new RectF(); private boolean selected; + private float animateFromBufferedProgress; + private boolean animateResetBuffering; + private float bufferedAnimationValue = 1f; private float bufferedProgress; private float currentRadius; private long lastUpdateTime; @@ -133,11 +139,20 @@ public class VideoPlayerSeekBar { } public void setProgress(float progress, boolean animated) { + int newThumb = (int) Math.ceil((width - thumbWidth) * progress); + if (animated) { - animateThumbProgress = 0; - fromThumbX = thumbX; + if (Math.abs(newThumb - thumbX) > AndroidUtilities.dp(10)) { + float progressInterpolated = CubicBezierInterpolator.DEFAULT.getInterpolation(animateThumbProgress); + fromThumbX = (int) (thumbX * progressInterpolated + fromThumbX * (1f - progressInterpolated)); + animateThumbProgress = 0; + } else if (animateThumbProgress == 1f) { + animateThumbProgress = 0; + fromThumbX = thumbX; + } } - thumbX = (int) Math.ceil((width - thumbWidth) * progress); + thumbX = newThumb; + if (thumbX < 0) { thumbX = 0; } else if (thumbX > width - thumbWidth) { @@ -150,7 +165,12 @@ public class VideoPlayerSeekBar { } public void setBufferedProgress(float value) { - bufferedProgress = value; + if (value != bufferedProgress) { + animateFromBufferedProgress = bufferedProgress; + animateResetBuffering = value < bufferedProgress; + bufferedProgress = value; + bufferedAnimationValue = 0; + } } public float getProgress() { @@ -206,7 +226,7 @@ public class VideoPlayerSeekBar { float currentThumbX = thumbX; if (animateThumbProgress != 1f) { - animateThumbProgress += 16 / 150f; + animateThumbProgress += 16 / 220f; if (animateThumbProgress >= 1f) { animateThumbProgress = 1f; } else { @@ -220,11 +240,34 @@ public class VideoPlayerSeekBar { setPaintColor(selected ? backgroundSelectedColor : backgroundColor, 1f - transitionProgress); canvas.drawRoundRect(rect, radius, radius, paint); + if (bufferedAnimationValue != 1f) { + bufferedAnimationValue += 16 / 100f; + if (bufferedAnimationValue > 1) { + bufferedAnimationValue = 1f; + } else { + parentView.invalidate(); + } + } + // buffered - if (bufferedProgress > 0) { - rect.right = horizontalPadding + AndroidUtilities.lerp(thumbWidth / 2f + bufferedProgress * (width - thumbWidth), parentView.getWidth() - horizontalPadding * 2f, transitionProgress); - setPaintColor(selected ? backgroundSelectedColor : cacheColor, 1f - transitionProgress); - canvas.drawRoundRect(rect, radius, radius, paint); + if (animateResetBuffering) { + if (animateFromBufferedProgress > 0) { + rect.right = horizontalPadding + AndroidUtilities.lerp(thumbWidth / 2f + animateFromBufferedProgress * (width - thumbWidth), parentView.getWidth() - horizontalPadding * 2f, transitionProgress); + setPaintColor(selected ? backgroundSelectedColor : cacheColor, (1f - transitionProgress) * (1f - bufferedAnimationValue)); + canvas.drawRoundRect(rect, radius, radius, paint); + } + if (bufferedProgress > 0) { + rect.right = horizontalPadding + AndroidUtilities.lerp(thumbWidth / 2f + bufferedProgress * (width - thumbWidth), parentView.getWidth() - horizontalPadding * 2f, transitionProgress); + setPaintColor(selected ? backgroundSelectedColor : cacheColor, 1f - transitionProgress); + canvas.drawRoundRect(rect, radius, radius, paint); + } + } else { + float currentBufferedProgress = animateFromBufferedProgress * (1f - bufferedAnimationValue) + bufferedProgress * bufferedAnimationValue; + if (currentBufferedProgress > 0) { + rect.right = horizontalPadding + AndroidUtilities.lerp(thumbWidth / 2f + currentBufferedProgress * (width - thumbWidth), parentView.getWidth() - horizontalPadding * 2f, transitionProgress); + setPaintColor(selected ? backgroundSelectedColor : cacheColor, 1f - transitionProgress); + canvas.drawRoundRect(rect, radius, radius, paint); + } } // progress diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPHelper.java index 9396b7ba5..bdab37c21 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPHelper.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPHelper.java @@ -217,7 +217,7 @@ public class VoIPHelper { if (!TextUtils.isEmpty(hash)) { voIPService.setGroupCallHash(hash); } - GroupCallActivity.create((LaunchActivity) activity, AccountInstance.getInstance(UserConfig.selectedAccount)); + GroupCallActivity.create((LaunchActivity) activity, AccountInstance.getInstance(UserConfig.selectedAccount), null, null, false, null); } } } else if (VoIPService.callIShouldHavePutIntoIntent == null) { @@ -256,8 +256,10 @@ public class VoIPHelper { } } if (checkJoiner && chat != null) { - JoinCallAlert.open(activity, -chat.id, accountInstance, fragment, createCall ? JoinCallAlert.TYPE_CREATE : JoinCallAlert.TYPE_JOIN, (selectedPeer, hasFew) -> { - if (!hasFew && hash != null) { + JoinCallAlert.open(activity, -chat.id, accountInstance, fragment, createCall ? JoinCallAlert.TYPE_CREATE : JoinCallAlert.TYPE_JOIN, null, (selectedPeer, hasFew, schedule) -> { + if (createCall && schedule) { + GroupCallActivity.create((LaunchActivity) activity, accountInstance, chat, selectedPeer, hasFew, hash); + } else if (!hasFew && hash != null) { JoinCallByUrlAlert alert = new JoinCallByUrlAlert(activity, chat) { @Override protected void onJoin() { @@ -302,6 +304,13 @@ public class VoIPHelper { } } } + if (chat != null && !createCall) { + ChatObject.Call call = accountInstance.getMessagesController().getGroupCall(chat.id, false); + if (call != null && call.isScheduled()) { + GroupCallActivity.create((LaunchActivity) activity, accountInstance, chat, peer, hasFewPeers, hash); + return; + } + } lastCallTime = SystemClock.elapsedRealtime(); Intent intent = new Intent(activity, VoIPService.class); @@ -715,7 +724,7 @@ public class VoIPHelper { return; } JoinCallAlert.checkFewUsers(fragment.getParentActivity(), -currentChat.id, accountInstance, param -> { - if (param) { + /*if (param) { if (fragment.getParentActivity() == null) { return; } @@ -740,9 +749,9 @@ public class VoIPHelper { }); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); fragment.showDialog(builder.create()); - } else { + } else {*/ startCall(currentChat, peer, null, true, fragment.getParentActivity(), fragment, accountInstance); - } + //} }); } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPToggleButton.java b/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPToggleButton.java index 9c68940ec..6d3a9b6dd 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPToggleButton.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/Components/voip/VoIPToggleButton.java @@ -5,7 +5,6 @@ import android.animation.AnimatorListenerAdapter; 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; @@ -27,6 +26,7 @@ import androidx.core.content.ContextCompat; import androidx.core.graphics.ColorUtils; import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLog; import org.telegram.ui.ActionBar.Theme; import org.telegram.ui.Components.CubicBezierInterpolator; import org.telegram.ui.Components.LayoutHelper; @@ -35,6 +35,7 @@ public class VoIPToggleButton extends FrameLayout { Paint circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); private boolean drawBackground = true; + private boolean animateBackground; Drawable[] icon = new Drawable[2]; TextView[] textView = new TextView[2]; @@ -116,7 +117,7 @@ public class VoIPToggleButton extends FrameLayout { @SuppressLint("DrawAllocation") @Override protected void onDraw(Canvas canvas) { - if (replaceProgress != 0) { + if (animateBackground && replaceProgress != 0) { circlePaint.setColor(ColorUtils.blendARGB(backgroundColor, animateToBackgroundColor, replaceProgress)); } else { circlePaint.setColor(backgroundColor); @@ -231,6 +232,16 @@ public class VoIPToggleButton extends FrameLayout { setData(iconRes, iconColor, backgroundColor, 1.0f, true, text, cross, animated); } + public void setEnabled(boolean enabled, boolean animated) { + super.setEnabled(enabled); + if (animated) { + animate().alpha(enabled ? 1.0f : 0.5f).setDuration(180).start(); + } else { + clearAnimation(); + setAlpha(enabled ? 1.0f : 0.5f); + } + } + public void setData(int iconRes, int iconColor, int backgroundColor, float selectorAlpha, boolean recreateRipple, String text, boolean cross, boolean animated) { if (getVisibility() != View.VISIBLE) { animated = false; @@ -254,6 +265,7 @@ public class VoIPToggleButton extends FrameLayout { if (replaceAnimator != null) { replaceAnimator.cancel(); } + animateBackground = currentBackgroundColor != backgroundColor; iconChangeColor = currentIconRes == iconRes; if (iconChangeColor) { @@ -372,8 +384,11 @@ public class VoIPToggleButton extends FrameLayout { this.checkable = checkable; } - public void setChecked(boolean checked, boolean animated) { - this.checked = checked; + public void setChecked(boolean value, boolean animated) { + if (checked == value) { + return; + } + checked = value; if (checkable) { if (animated) { if (checkAnimator != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java index 45dcaab08..cfcbc8b14 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ContactAddActivity.java @@ -277,7 +277,7 @@ public class ContactAddActivity extends BaseFragment implements NotificationCent } } onlineTextView.setText(LocaleController.formatUserStatus(currentAccount, user)); - avatarImage.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable = new AvatarDrawable(user), user); + avatarImage.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable = new AvatarDrawable(user), user); } public void didReceivedNotification(int id, int account, Object... args) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java index 895d8db23..a270276fe 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/DialogsActivity.java @@ -73,6 +73,8 @@ import androidx.recyclerview.widget.LinearSmoothScrollerCustom; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; +import com.google.android.exoplayer2.util.Log; + import org.telegram.messenger.AccountInstance; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; @@ -249,6 +251,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. private int messagesCount; private int hasPoll; + private boolean hasInvoice; private PacmanAnimation pacmanAnimation; @@ -524,6 +527,19 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. if (child == viewPages[0] || (viewPages.length > 1 && child == viewPages[1]) || child == fragmentContextView || child == fragmentLocationContextView || child == searchViewPager) { canvas.save(); canvas.clipRect(0, -getY() + actionBar.getY() + getActionBarFullHeight(), getMeasuredWidth(), getMeasuredHeight()); + if (slideFragmentProgress != 1f) { + float s = 1f - 0.05f * (1f - slideFragmentProgress); + canvas.translate((isDrawerTransition ? AndroidUtilities.dp(4) : -AndroidUtilities.dp(4)) * (1f - slideFragmentProgress), 0); + canvas.scale(s, s, isDrawerTransition ? getMeasuredWidth() : 0, -getY() + actionBar.getY() + getActionBarFullHeight()); + } + + result = super.drawChild(canvas, child, drawingTime); + canvas.restore(); + } else if (child == actionBar && slideFragmentProgress != 1f) { + canvas.save(); + float s = 1f - 0.05f * (1f - slideFragmentProgress); + canvas.translate((isDrawerTransition ? AndroidUtilities.dp(4) : -AndroidUtilities.dp(4)) * (1f - slideFragmentProgress), 0); + canvas.scale(s, s, isDrawerTransition ? getMeasuredWidth() : 0, (actionBar.getOccupyStatusBar() ? AndroidUtilities.statusBarHeight : 0) + ActionBar.getCurrentActionBarHeight() / 2f); result = super.drawChild(canvas, child, drawingTime); canvas.restore(); } else { @@ -633,6 +649,11 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. if (fragmentContextView != null && fragmentContextView.isCallStyle()) { canvas.save(); canvas.translate(fragmentContextView.getX(), fragmentContextView.getY()); + if (slideFragmentProgress != 1f) { + float s = 1f - 0.05f * (1f - slideFragmentProgress); + canvas.translate((isDrawerTransition ? AndroidUtilities.dp(4) : -AndroidUtilities.dp(4)) * (1f - slideFragmentProgress), 0); + canvas.scale(s, 1f, isDrawerTransition ? getMeasuredWidth() : 0, fragmentContextView.getY()); + } fragmentContextView.setDrawOverlay(true); fragmentContextView.draw(canvas); fragmentContextView.setDrawOverlay(false); @@ -729,6 +750,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. } else { child.setTranslationY(0); } + int transitionPadding = (isSlideBackTransition || isDrawerTransition) ? (int) (h * 0.05f) : 0; + h += transitionPadding; + child.setPadding(child.getPaddingLeft(), child.getPaddingTop(), child.getPaddingRight(), transitionPadding); child.measure(contentWidthSpec, View.MeasureSpec.makeMeasureSpec(Math.max(AndroidUtilities.dp(10), h), View.MeasureSpec.EXACTLY)); child.setPivotX(child.getMeasuredWidth() / 2); } else if (child == searchViewPager) { @@ -867,7 +891,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. @Override public boolean onTouchEvent(MotionEvent ev) { - if (filterTabsView != null && !filterTabsView.isEditing() && !searching && + if (parentLayout != null && filterTabsView != null && !filterTabsView.isEditing() && !searching && !parentLayout.checkTransitionAnimation() && !parentLayout.isInPreviewMode() && !parentLayout.isPreviewOpenAnimationInProgress() && !parentLayout.getDrawerLayoutContainer().isDrawerOpened() && (ev == null || startedTracking || ev.getY() > actionBar.getMeasuredHeight() + actionBar.getTranslationY()) && SharedConfig.getChatSwipeAction(currentAccount) == SwipeGestureSettingsView.SWIPE_GESTURE_FOLDERS) { if (ev != null) { @@ -1087,7 +1111,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. private boolean firstLayout = true; private boolean ignoreLayout; - private ViewPage parentPage; + private final ViewPage parentPage; private int appliedPaddingTop; private int lastTop; private int lastListPadding; @@ -1202,7 +1226,9 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - parentPage.recyclerItemsEnterAnimator.onDetached(); + if (parentPage != null && parentPage.recyclerItemsEnterAnimator != null) { + parentPage.recyclerItemsEnterAnimator.onDetached(); + } } @Override @@ -1750,6 +1776,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. resetDelegate = arguments.getBoolean("resetDelegate", true); messagesCount = arguments.getInt("messagesCount", 0); hasPoll = arguments.getInt("hasPoll", 0); + hasInvoice = arguments.getBoolean("hasInvoice", false); } if (initialDialogsType == 0) { @@ -1808,6 +1835,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. messagesController.loadUserInfo(accountInstance.getUserConfig().getCurrentUser(), false, 0); accountInstance.getContactsController().checkInviteText(); accountInstance.getMediaDataController().loadRecents(MediaDataController.TYPE_FAVE, false, true, false); + accountInstance.getMediaDataController().loadRecents(MediaDataController.TYPE_GREETINGS, false, true, false); accountInstance.getMediaDataController().checkFeaturedStickers(); for (String emoji : messagesController.diceEmojies) { accountInstance.getMediaDataController().loadStickersByEmojiOrName(emoji, true, true); @@ -2423,7 +2451,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. TLRPC.User user = getUserConfig().getCurrentUser(); avatarDrawable.setInfo(user); imageView.getImageReceiver().setCurrentAccount(currentAccount); - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); for (int a = 0; a < UserConfig.MAX_ACCOUNT_COUNT; a++) { TLRPC.User u = AccountInstance.getInstance(a).getUserConfig().getCurrentUser(); @@ -4661,7 +4689,7 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. if (getMessagesController().checkCanOpenChat(args, DialogsActivity.this)) { ChatActivity chatActivity = new ChatActivity(args); if (adapter instanceof DialogsAdapter && lower_part > 0 && (getMessagesController().dialogs_dict.get(dialogId) == null)) { - TLRPC.Document sticker = getMessagesController().getPreloadedSticker(); + TLRPC.Document sticker = getMediaDataController().getGreetingsSticker(); if (sticker != null) { chatActivity.setPreloadedSticker(sticker, true); } @@ -5504,6 +5532,10 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. private void scrollToTop() { int scrollDistance = viewPages[0].layoutManager.findFirstVisibleItemPosition() * AndroidUtilities.dp(SharedConfig.useThreeLinesLayout ? 78 : 72); int position = viewPages[0].dialogsType == 0 && hasHiddenArchive() ? 1 : 0; + RecyclerView.ItemAnimator animator = viewPages[0].listView.getItemAnimator(); +// if (animator != null) { +// animator.endAnimations(); +// } if (scrollDistance >= viewPages[0].listView.getMeasuredHeight() * 1.2f) { viewPages[0].scrollHelper.setScrollDirection(RecyclerAnimationScrollHelper.SCROLL_DIRECTION_UP); viewPages[0].scrollHelper.scrollToPosition(position, 0, false, true); @@ -6560,10 +6592,14 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. showDialog(builder.create()); return; } - } else if (lowerId == 0 && hasPoll != 0) { + } else if (lowerId == 0 && (hasPoll != 0 || hasInvoice)) { AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); builder.setTitle(LocaleController.getString("SendMessageTitle", R.string.SendMessageTitle)); - builder.setMessage(LocaleController.getString("PollCantForwardSecretChat", R.string.PollCantForwardSecretChat)); + if (hasPoll != 0) { + builder.setMessage(LocaleController.getString("PollCantForwardSecretChat", R.string.PollCantForwardSecretChat)); + } else { + builder.setMessage(LocaleController.getString("InvoiceCantForwardSecretChat", R.string.InvoiceCantForwardSecretChat)); + } builder.setNegativeButton(LocaleController.getString("OK", R.string.OK), null); showDialog(builder.create()); return; @@ -7199,4 +7235,138 @@ public class DialogsActivity extends BaseFragment implements NotificationCenter. return arrayList; } + + float slideFragmentProgress = 1f; + boolean isSlideBackTransition; + boolean isDrawerTransition; + ValueAnimator slideBackTransitionAnimator; + + @Override + protected Animator getCustomSlideTransition(boolean topFragment, boolean backAnimation, float distanceToMove) { + if (backAnimation) { + slideBackTransitionAnimator = ValueAnimator.ofFloat(slideFragmentProgress, 1f); + return slideBackTransitionAnimator; + } + int duration = (int) (Math.max((int) (200.0f / getLayoutContainer().getMeasuredWidth() * distanceToMove), 80) * 1.2f); + slideBackTransitionAnimator = ValueAnimator.ofFloat(slideFragmentProgress, 1f); + slideBackTransitionAnimator.addUpdateListener(valueAnimator -> setSlideTransitionProgress((float) valueAnimator.getAnimatedValue())); + slideBackTransitionAnimator.setInterpolator(CubicBezierInterpolator.EASE_OUT); + slideBackTransitionAnimator.setDuration(duration); + slideBackTransitionAnimator.start(); + return slideBackTransitionAnimator; + } + + @Override + protected void prepareFragmentToSlide(boolean topFragment, boolean beginSlide) { + if (!topFragment && beginSlide) { + isSlideBackTransition = true; + setFragmentIsSliding(true); + } else { + slideBackTransitionAnimator = null; + isSlideBackTransition = false; + setFragmentIsSliding(false); + setSlideTransitionProgress(1f); + } + } + + private void setFragmentIsSliding(boolean sliding) { + if (SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) { + return; + } + if (sliding) { + if (viewPages != null && viewPages[0] != null) { + viewPages[0].setLayerType(View.LAYER_TYPE_HARDWARE, null); + viewPages[0].setClipChildren(false); + viewPages[0].setClipToPadding(false); + viewPages[0].listView.setClipChildren(false); + } + + if (actionBar != null) { + actionBar.setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + if (filterTabsView != null) { + filterTabsView.getListView().setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + if (fragmentView != null) { + ((ViewGroup) fragmentView).setClipChildren(false); + fragmentView.requestLayout(); + } + } else { + + for (int i = 0; i < viewPages.length; i++) { + ViewPage page = viewPages[i]; + if (page != null) { + page.setLayerType(View.LAYER_TYPE_NONE, null); + page.setClipChildren(true); + page.setClipToPadding(true); + page.listView.setClipChildren(true); + } + } + + if (actionBar != null) { + actionBar.setLayerType(View.LAYER_TYPE_NONE, null); + } + + if (filterTabsView != null) { + filterTabsView.getListView().setLayerType(View.LAYER_TYPE_NONE, null); + } + if (fragmentView != null) { + ((ViewGroup) fragmentView).setClipChildren(true); + fragmentView.requestLayout(); + } + } + } + + @Override + protected void onSlideProgress(boolean isOpen, float progress) { + if (SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) { + return; + } + if (isSlideBackTransition && slideBackTransitionAnimator == null) { + setSlideTransitionProgress(progress); + } + } + + private void setSlideTransitionProgress(float progress) { + if (SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) { + return; + } + slideFragmentProgress = progress; + if (fragmentView != null) { + fragmentView.invalidate(); + } + + if (filterTabsView != null) { + float s = 1f - 0.05f * (1f - slideFragmentProgress); + filterTabsView.getListView().setScaleX(s); + filterTabsView.getListView().setScaleY(s); + filterTabsView.getListView().setTranslationX((isDrawerTransition ? AndroidUtilities.dp(4) : -AndroidUtilities.dp(4)) * (1f - slideFragmentProgress)); + filterTabsView.getListView().setPivotX(isDrawerTransition ? filterTabsView.getMeasuredWidth() : 0); + filterTabsView.getListView().setPivotY(0); + filterTabsView.invalidate(); + } + } + + @Override + public void setProgressToDrawerOpened(float progress) { + if (SharedConfig.getDevicePerformanceClass() == SharedConfig.PERFORMANCE_CLASS_LOW) { + return; + } + boolean drawerTransition = progress > 0; + if (searchIsShowed) { + drawerTransition = false; + progress = 0; + } + if (drawerTransition != isDrawerTransition) { + isDrawerTransition = drawerTransition; + if (isDrawerTransition) { + setFragmentIsSliding(true); + } else { + setFragmentIsSliding(false); + } + fragmentView.requestLayout(); + } + setSlideTransitionProgress(1f - progress); + } } + diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GroupCallActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GroupCallActivity.java index b3fea4957..2bc2c8943 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GroupCallActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GroupCallActivity.java @@ -8,6 +8,8 @@ import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; @@ -67,7 +69,9 @@ import androidx.viewpager.widget.ViewPager; import org.telegram.messenger.AccountInstance; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ChatObject; +import org.telegram.messenger.FileLoader; import org.telegram.messenger.FileLog; +import org.telegram.messenger.ImageLoader; import org.telegram.messenger.ImageLocation; import org.telegram.messenger.LocaleController; import org.telegram.messenger.MessageObject; @@ -78,6 +82,7 @@ import org.telegram.messenger.UserObject; import org.telegram.messenger.Utilities; import org.telegram.messenger.voip.VoIPBaseService; import org.telegram.messenger.voip.VoIPService; +import org.telegram.tgnet.ConnectionsManager; import org.telegram.tgnet.TLObject; import org.telegram.tgnet.TLRPC; import org.telegram.ui.ActionBar.ActionBar; @@ -108,8 +113,10 @@ import org.telegram.ui.Components.FillLastLinearLayoutManager; import org.telegram.ui.Components.GroupCallPip; import org.telegram.ui.Components.GroupVoipInviteAlert; import org.telegram.ui.Components.HintView; +import org.telegram.ui.Components.ImageUpdater; import org.telegram.ui.Components.JoinCallAlert; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.NumberPicker; import org.telegram.ui.Components.ProfileGalleryView; import org.telegram.ui.Components.RLottieDrawable; import org.telegram.ui.Components.RLottieImageView; @@ -120,7 +127,9 @@ import org.telegram.ui.Components.UndoView; import org.telegram.ui.Components.WaveDrawable; import org.telegram.ui.Components.voip.VoIPToggleButton; +import java.io.File; import java.util.ArrayList; +import java.util.Calendar; import java.util.Locale; public class GroupCallActivity extends BottomSheet implements NotificationCenter.NotificationCenterDelegate, VoIPBaseService.StateListener { @@ -140,6 +149,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private static final int MUTE_BUTTON_STATE_MUTED_BY_ADMIN = 2; private static final int MUTE_BUTTON_STATE_CONNECTING = 3; private static final int MUTE_BUTTON_STATE_RAISED_HAND = 4; + private static final int MUTE_BUTTON_STATE_START_NOW = 5; + private static final int MUTE_BUTTON_STATE_SET_REMINDER = 6; + private static final int MUTE_BUTTON_STATE_CANCEL_REMINDER = 7; public static GroupCallActivity groupCallInstance; public static boolean groupCallUiVisible; @@ -151,6 +163,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private ActionBar actionBar; private ListAdapter listAdapter; private RecyclerListView listView; + private LinearLayout scheduleTimerContainer; + private TextView scheduleInfoTextView; + private TextView scheduleButtonTextView; + private SimpleTextView scheduleStartInTextView; + private SimpleTextView scheduleTimeTextView; + private SimpleTextView scheduleStartAtTextView; private DefaultItemAnimator itemAnimator; private FillLastLinearLayoutManager layoutManager; private VoIPToggleButton soundButton; @@ -171,11 +189,15 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private View accountGap; private boolean changingPermissions; private HintView recordHintView; + private HintView reminderHintView; private ShareAlert shareAlert; private boolean delayedGroupCallUpdated; + private long creatingServiceTime; + private boolean callInitied; + private RectF rect = new RectF(); private boolean enterEventSent; @@ -209,10 +231,18 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private final Matrix radialMatrix; private final Paint radialPaint; + private float switchToButtonProgress; + private float switchToButtonInt2; + private float scheduleButtonsScale; + private ValueAnimator scheduleAnimator; + private ValueAnimator muteButtonAnimator; + private TLRPC.InputPeer schedulePeer; public TLRPC.Chat currentChat; public ChatObject.Call call; + private boolean scheduleHasFewPeers; + private String scheduledHash; private RecordCallDrawable recordCallDrawable; private AudioPlayerAlert.ClippingTextViewSwitcher titleTextView; @@ -233,10 +263,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private int muteButtonState = MUTE_BUTTON_STATE_UNMUTE; + private boolean startingGroupCall; + private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG); private Paint paintTmp = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG | Paint.FILTER_BITMAP_FLAG); private Paint leaveBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG); - private WeavingState[] states = new WeavingState[5]; + private WeavingState[] states = new WeavingState[8]; private float switchProgress = 1.0f; private WeavingState prevState; private WeavingState currentState; @@ -256,12 +288,49 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter private final int[] colorsTmp = new int[3]; View blurredView; + PinchToZoomHelper pinchToZoomHelper; private float progressToAvatarPreview; private View scrimPopupLayout; private boolean avatarsPreviewShowed; + ImageUpdater currentAvatarUpdater; + AvatarUpdaterDelegate avatarUpdaterDelegate; + + private int scheduleStartAt; + private boolean contentFullyOverlayed; + + private Runnable updateSchedeulRunnable = new Runnable() { + @Override + public void run() { + if (scheduleTimeTextView == null || isDismissed()) { + return; + } + int time; + if (call != null) { + time = call.call.schedule_date; + } else { + time = scheduleStartAt; + } + if (time == 0) { + return; + } + int diff = time - accountInstance.getConnectionsManager().getCurrentTime(); + if (diff >= 24 * 60 * 60) { + scheduleTimeTextView.setText(LocaleController.formatPluralString("Days", Math.round(diff / (24 * 60 * 60.0f)))); + } else { + scheduleTimeTextView.setText(AndroidUtilities.formatFullDuration(Math.abs(diff))); + if (diff < 0 && scheduleStartInTextView.getTag() == null) { + scheduleStartInTextView.setTag(1); + scheduleStartInTextView.setText(LocaleController.getString("VoipChatLateBy", R.string.VoipChatLateBy)); + } + } + scheduleStartAtTextView.setText(LocaleController.formatStartsTime(time, 3)); + AndroidUtilities.runOnUIThread(updateSchedeulRunnable, 1000); + } + }; + private Runnable unmuteRunnable = () -> { if (VoIPService.getSharedInstance() == null) { return; @@ -270,7 +339,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter }; private Runnable pressRunnable = () -> { - if (!scheduled || VoIPService.getSharedInstance() == null) { + if (call == null || !scheduled || VoIPService.getSharedInstance() == null) { return; } muteButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); @@ -293,6 +362,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter }; private final FrameLayout avatarPreviewContainer; private final AvatarPreviewPagerIndicator avatarPagerIndicator; + private ViewGroup currentOptionsLayout; private static class SmallRecordCallDrawable extends Drawable { @@ -638,9 +708,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter int id = MessageObject.getPeerId(currentParticipant.peer); TLObject object; if (id > 0) { - object = MessagesController.getInstance(currentAccount).getUser(id); + object = accountInstance.getMessagesController().getUser(id); } else { - object = MessagesController.getInstance(currentAccount).getChat(-id); + object = accountInstance.getMessagesController().getChat(-id); } if (currentParticipant.volume == 0) { if (scrimPopupWindow != null) { @@ -787,7 +857,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter float y = top + size * (startY + (targetY - startY) * interpolation) - 200; float s; - if (currentState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || currentState == MUTE_BUTTON_STATE_RAISED_HAND) { + if (isGradientState(currentState)) { s = 1f; } else { s = currentState == MUTE_BUTTON_STATE_MUTE ? 4 : 2.5f; @@ -801,7 +871,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void setTarget() { - if (currentState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || currentState == MUTE_BUTTON_STATE_RAISED_HAND) { + if (isGradientState(currentState)) { targetX = 0.85f + 0.20f * Utilities.random.nextInt(100) / 100f; targetY = 1f; } else if (currentState == MUTE_BUTTON_STATE_MUTE) { @@ -814,6 +884,10 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } + private static boolean isGradientState(int state) { + return state == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || state == MUTE_BUTTON_STATE_RAISED_HAND || state == MUTE_BUTTON_STATE_START_NOW || state == MUTE_BUTTON_STATE_SET_REMINDER || state == MUTE_BUTTON_STATE_CANCEL_REMINDER; + } + @SuppressWarnings("FieldCanBeLocal") private static class LabeledButton extends FrameLayout { @@ -901,11 +975,18 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.chatInfoDidLoad); accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.didLoadChatAdmins); accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.applyGroupCallVisibleParticipants); + accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.userInfoDidLoad); + accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.mainUserInfoChanged); + accountInstance.getNotificationCenter().removeObserver(this, NotificationCenter.updateInterfaces); NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.webRtcMicAmplitudeEvent); NotificationCenter.getGlobalInstance().removeObserver(this, NotificationCenter.didEndCall); super.dismiss(); } + private boolean isStillConnecting() { + return currentCallState == VoIPService.STATE_WAIT_INIT || currentCallState == VoIPService.STATE_WAIT_INIT_ACK || currentCallState == VoIPService.STATE_CREATING || currentCallState == VoIPService.STATE_RECONNECTING; + } + @Override public void didReceivedNotification(int id, int account, Object... args) { if (id == NotificationCenter.groupCallUpdated) { @@ -914,6 +995,38 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (call.call instanceof TLRPC.TL_groupCallDiscarded) { dismiss(); } else { + if (creatingServiceTime == 0 && (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER || muteButtonState == MUTE_BUTTON_STATE_START_NOW || muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) && !call.isScheduled()) { + try { + Intent intent = new Intent(parentActivity, VoIPService.class); + intent.putExtra("chat_id", currentChat.id); + intent.putExtra("createGroupCall", false); + intent.putExtra("hasFewPeers", scheduleHasFewPeers); + intent.putExtra("peerChannelId", schedulePeer.channel_id); + intent.putExtra("peerChatId", schedulePeer.chat_id); + intent.putExtra("peerUserId", schedulePeer.user_id); + intent.putExtra("hash", scheduledHash); + intent.putExtra("peerAccessHash", schedulePeer.access_hash); + intent.putExtra("is_outgoing", true); + intent.putExtra("start_incall_activity", false); + intent.putExtra("account", accountInstance.getCurrentAccount()); + intent.putExtra("scheduleDate", scheduleStartAt); + parentActivity.startService(intent); + } catch (Throwable e) { + FileLog.e(e); + } + creatingServiceTime = SystemClock.elapsedRealtime(); + AndroidUtilities.runOnUIThread(() -> { + if (!isStillConnecting()) { + return; + } + updateState(true, false); + }, 3000); + } + if (!callInitied && VoIPService.getSharedInstance() != null) { + call.addSelfDummyParticipant(false); + initCreatedGroupCall(); + VoIPService.getSharedInstance().playConnectedSound(); + } updateItems(); for (int a = 0, N = listView.getChildCount(); a < N; a++) { View child = listView.getChildAt(a); @@ -946,7 +1059,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } else if (id == NotificationCenter.webRtcMicAmplitudeEvent) { float amplitude = (float) args[0]; setAmplitude(amplitude * 4000.0f); - if (listView != null) { + if (call != null && listView != null) { TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); if (participant != null) { ArrayList array = delayedGroupCallUpdated ? oldParticipants : call.sortedParticipants; @@ -957,7 +1070,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter GroupCallUserCell cell = (GroupCallUserCell) holder.itemView; cell.setAmplitude(amplitude * 15.0f); if (holder.itemView == scrimView) { - containerView.invalidate(); + if (!contentFullyOverlayed) { + containerView.invalidate(); + } } } } @@ -994,6 +1109,27 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter updateItems(); updateState(isShowing(), false); } + int selfId = MessageObject.getPeerId(selfPeer); + if (call != null && chatFull.id == -selfId) { + TLRPC.TL_groupCallParticipant participant = call.participants.get(selfId); + if (participant != null) { + participant.about = chatFull.about; + applyCallParticipantUpdates(); + AndroidUtilities.updateVisibleRows(listView); + + if (currentOptionsLayout != null) { + for (int i = 0; i < currentOptionsLayout.getChildCount(); i++) { + View child = currentOptionsLayout.getChildAt(i); + if (child instanceof ActionBarMenuSubItem && child.getTag() != null && (Integer) child.getTag() == 10) { + ((ActionBarMenuSubItem) child).setTextAndIcon( + TextUtils.isEmpty(participant.about) ? LocaleController.getString("VoipAddDescription", R.string.VoipAddDescription) : LocaleController.getString("VoipEditDescription", R.string.VoipEditDescription), + TextUtils.isEmpty(participant.about) ? R.drawable.msg_addbio : R.drawable.msg_bio + ); + } + } + } + } + } } else if (id == NotificationCenter.didLoadChatAdmins) { int chatId = (Integer) args[0]; if (chatId == currentChat.id) { @@ -1011,11 +1147,42 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter cell.getParticipant().lastVisibleDate = time; } } + } else if (id == NotificationCenter.userInfoDidLoad) { + Integer uid = (Integer) args[0]; + int selfId = MessageObject.getPeerId(selfPeer); + if (call != null && selfId == uid) { + TLRPC.TL_groupCallParticipant participant = call.participants.get(selfId); + TLRPC.UserFull userInfo = (TLRPC.UserFull) args[1]; + participant.about = userInfo.about; + applyCallParticipantUpdates(); + AndroidUtilities.updateVisibleRows(listView); + + if (currentOptionsLayout != null) { + for (int i = 0; i < currentOptionsLayout.getChildCount(); i++) { + View child = currentOptionsLayout.getChildAt(i); + if (child instanceof ActionBarMenuSubItem && child.getTag() != null && (Integer) child.getTag() == 10) { + ((ActionBarMenuSubItem) child).setTextAndIcon( + TextUtils.isEmpty(participant.about) ? LocaleController.getString("VoipAddBio", R.string.VoipAddBio) : LocaleController.getString("VoipEditBio", R.string.VoipEditBio), + TextUtils.isEmpty(participant.about) ? R.drawable.msg_addbio : R.drawable.msg_bio + ); + } + } + } + } + } else if (id == NotificationCenter.mainUserInfoChanged) { + applyCallParticipantUpdates(); + AndroidUtilities.updateVisibleRows(listView); + } else if (id == NotificationCenter.updateInterfaces) { + int mask = (int) args[0]; + if ((mask & MessagesController.UPDATE_MASK_CHAT_NAME) != 0) { + applyCallParticipantUpdates(); + AndroidUtilities.updateVisibleRows(listView); + } } } private void applyCallParticipantUpdates() { - if (delayedGroupCallUpdated) { + if (call == null || delayedGroupCallUpdated) { return; } int self = MessageObject.getPeerId(call.selfPeer); @@ -1070,6 +1237,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateRecordCallText() { + if (call == null) { + return; + } int time = accountInstance.getConnectionsManager().getCurrentTime() - call.call.record_start_date; if (call.recording) { recordItem.setSubtext(AndroidUtilities.formatDuration(time, false)); @@ -1079,6 +1249,14 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateItems() { + if (call == null || call.isScheduled()) { + pipItem.setVisibility(View.INVISIBLE); + if (call == null) { + otherItem.setVisibility(View.GONE); + accountSwitchImageView.setVisibility(View.GONE); + return; + } + } if (changingPermissions) { return; } @@ -1096,7 +1274,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (ChatObject.canManageCalls(currentChat)) { leaveItem.setVisibility(View.VISIBLE); editTitleItem.setVisibility(View.VISIBLE); - recordItem.setVisibility(View.VISIBLE); + if (call.isScheduled()) { + recordItem.setVisibility(View.GONE); + } else { + recordItem.setVisibility(View.VISIBLE); + } anyVisible = true; recordCallDrawable.setRecording(call.recording); if (call.recording) { @@ -1129,7 +1311,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter otherItem.setVisibility(anyVisible ? View.VISIBLE : View.GONE); int margin = 48; - if (VoIPService.getSharedInstance() != null && VoIPService.getSharedInstance().hasFewPeers) { + if (VoIPService.getSharedInstance() != null && VoIPService.getSharedInstance().hasFewPeers || scheduleHasFewPeers) { if (!anyVisible) { anyVisible = true; accountSwitchImageView.getImageReceiver().setCurrentAccount(currentAccount); @@ -1137,11 +1319,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (peerId > 0) { TLRPC.User user = accountInstance.getMessagesController().getUser(peerId); accountSwitchAvatarDrawable.setInfo(user); - accountSwitchImageView.setImage(ImageLocation.getForUser(user, false), "50_50", accountSwitchAvatarDrawable, user); + accountSwitchImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", accountSwitchAvatarDrawable, user); } else { TLRPC.Chat chat = accountInstance.getMessagesController().getChat(-peerId); accountSwitchAvatarDrawable.setInfo(chat); - accountSwitchImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", accountSwitchAvatarDrawable, chat); + accountSwitchImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", accountSwitchAvatarDrawable, chat); } accountSelectCell.setVisibility(View.GONE); accountGap.setVisibility(View.GONE); @@ -1220,30 +1402,56 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } - public static void create(LaunchActivity activity, AccountInstance account) { - if (groupCallInstance != null || VoIPService.getSharedInstance() == null) { + public static void create(LaunchActivity activity, AccountInstance account, TLRPC.Chat scheduleChat, TLRPC.InputPeer schedulePeer, boolean hasFewPeers, String scheduledHash) { + if (groupCallInstance != null || schedulePeer == null && VoIPService.getSharedInstance() == null) { return; } - ChatObject.Call call = VoIPService.getSharedInstance().groupCall; - if (call == null) { - return; + if (schedulePeer != null) { + ChatObject.Call call = account.getMessagesController().getGroupCall(scheduleChat.id, false); + groupCallInstance = new GroupCallActivity(activity, account, call, scheduleChat, schedulePeer, hasFewPeers, scheduledHash); + } else { + ChatObject.Call call = VoIPService.getSharedInstance().groupCall; + if (call == null) { + return; + } + TLRPC.Chat chat = account.getMessagesController().getChat(call.chatId); + if (chat == null) { + return; + } + call.addSelfDummyParticipant(true); + groupCallInstance = new GroupCallActivity(activity, account, call, chat, null, hasFewPeers, scheduledHash); } - TLRPC.Chat chat = account.getMessagesController().getChat(call.chatId); - if (chat == null) { - return; - } - call.addSelfDummyParticipant(); - groupCallInstance = new GroupCallActivity(activity, account, call, chat); groupCallInstance.parentActivity = activity; groupCallInstance.show(); } - private GroupCallActivity(Context context, AccountInstance account, ChatObject.Call call, TLRPC.Chat chat) { + private GroupCallActivity(Context context, AccountInstance account, ChatObject.Call groupCall, TLRPC.Chat chat, TLRPC.InputPeer schedulePeer, boolean scheduleHasFewPeers, String scheduledHash) { super(context, false); this.accountInstance = account; - this.call = call; + this.call = groupCall; + this.schedulePeer = schedulePeer; this.currentChat = chat; + this.scheduledHash = scheduledHash; this.currentAccount = account.getCurrentAccount(); + this.scheduleHasFewPeers = scheduleHasFewPeers; + setDelegate(new BottomSheetDelegateInterface() { + @Override + public void onOpenAnimationStart() { + + } + + @Override + public void onOpenAnimationEnd() { + if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + showReminderHint(); + } + } + + @Override + public boolean canDismiss() { + return true; + } + }); drawNavigationBar = true; if (Build.VERSION.SDK_INT >= 30) { getWindow().setNavigationBarColor(0xff000000); @@ -1271,10 +1479,248 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter setDimBehindAlpha(75); - oldParticipants.addAll(call.sortedParticipants); - oldInvited.addAll(call.invitedUsers); + listAdapter = new ListAdapter(context); - TLRPC.InputPeer peer = VoIPService.getSharedInstance().getGroupCallPeer(); + actionBar = new ActionBar(context) { + @Override + public void setAlpha(float alpha) { + super.setAlpha(alpha); + containerView.invalidate(); + } + }; + actionBar.setBackButtonImage(R.drawable.ic_ab_back); + actionBar.setOccupyStatusBar(false); + actionBar.setAllowOverlayTitle(false); + actionBar.setItemsColor(Theme.getColor(Theme.key_voipgroup_actionBarItems), false); + actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), false); + actionBar.setTitleColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + actionBar.setSubtitleColor(Theme.getColor(Theme.key_voipgroup_lastSeenTextUnscrolled)); + actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { + @Override + public void onItemClick(int id) { + if (id == -1) { + dismiss(); + } else if (id == eveyone_can_speak_item) { + call.call.join_muted = false; + toggleAdminSpeak(); + } else if (id == admin_can_speak_item) { + call.call.join_muted = true; + toggleAdminSpeak(); + } else if (id == share_invite_link_item) { + getLink(false); + } else if (id == leave_item) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + + builder.setTitle(LocaleController.getString("VoipGroupEndAlertTitle", R.string.VoipGroupEndAlertTitle)); + builder.setMessage(LocaleController.getString("VoipGroupEndAlertText", R.string.VoipGroupEndAlertText)); + builder.setDialogButtonColorKey(Theme.key_voipgroup_listeningText); + + builder.setPositiveButton(LocaleController.getString("VoipGroupEnd", R.string.VoipGroupEnd), (dialogInterface, i) -> { + if (call.isScheduled()) { + TLRPC.ChatFull chatFull = accountInstance.getMessagesController().getChatFull(currentChat.id); + if (chatFull != null) { + chatFull.flags &=~ 2097152; + chatFull.call = null; + accountInstance.getNotificationCenter().postNotificationName(NotificationCenter.groupCallUpdated, currentChat.id, call.call.id, false); + } + TLRPC.TL_phone_discardGroupCall req = new TLRPC.TL_phone_discardGroupCall(); + req.call = call.getInputGroupCall(); + accountInstance.getConnectionsManager().sendRequest(req, (response, error) -> { + if (response instanceof TLRPC.TL_updates) { + TLRPC.TL_updates updates = (TLRPC.TL_updates) response; + accountInstance.getMessagesController().processUpdates(updates, false); + } + }); + } else if (VoIPService.getSharedInstance() != null) { + VoIPService.getSharedInstance().hangUp(1); + } + dismiss(); + NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.didStartedCall); + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); + AlertDialog dialog = builder.create(); + + dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); + dialog.show(); + TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE); + if (button != null) { + button.setTextColor(Theme.getColor(Theme.key_voipgroup_leaveCallMenu)); + } + dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); + } else if (id == start_record_item) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setDialogButtonColorKey(Theme.key_voipgroup_listeningText); + EditTextBoldCursor editText; + if (call.recording) { + builder.setTitle(LocaleController.getString("VoipGroupStopRecordingTitle", R.string.VoipGroupStopRecordingTitle)); + builder.setMessage(LocaleController.getString("VoipGroupStopRecordingText", R.string.VoipGroupStopRecordingText)); + editText = null; + } else { + enterEventSent = false; + builder.setTitle(LocaleController.getString("VoipGroupStartRecordingTitle", R.string.VoipGroupStartRecordingTitle)); + builder.setMessage(LocaleController.getString("VoipGroupStartRecordingText", R.string.VoipGroupStartRecordingText)); + builder.setCheckFocusable(false); + + editText = new EditTextBoldCursor(getContext()); + editText.setBackgroundDrawable(Theme.createEditTextDrawable(getContext(), true)); + + LinearLayout linearLayout = new LinearLayout(getContext()); + linearLayout.setOrientation(LinearLayout.VERTICAL); + builder.setView(linearLayout); + + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + editText.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); + editText.setMaxLines(1); + editText.setLines(1); + editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + editText.setGravity(Gravity.LEFT | Gravity.TOP); + editText.setSingleLine(true); + editText.setHint(LocaleController.getString("VoipGroupSaveFileHint", R.string.VoipGroupSaveFileHint)); + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setHintTextColor(Theme.getColor(Theme.key_voipgroup_lastSeenText)); + editText.setCursorColor(Theme.getColor(Theme.key_voipgroup_nameText)); + editText.setCursorSize(AndroidUtilities.dp(20)); + editText.setCursorWidth(1.5f); + editText.setPadding(0, AndroidUtilities.dp(4), 0, 0); + linearLayout.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 36, Gravity.TOP | Gravity.LEFT, 24, 0, 24, 12)); + editText.setOnEditorActionListener((textView, i2, keyEvent) -> { + AndroidUtilities.hideKeyboard(textView); + builder.create().getButton(AlertDialog.BUTTON_POSITIVE).callOnClick(); + return false; + }); + + final AlertDialog alertDialog = builder.create(); + alertDialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_inviteMembersBackground)); + alertDialog.setOnShowListener(dialog -> makeFocusable(null, alertDialog, editText, true)); + alertDialog.setOnDismissListener(dialog -> AndroidUtilities.hideKeyboard(editText)); + } + + builder.setPositiveButton(call.recording ? LocaleController.getString("Stop", R.string.Stop) : LocaleController.getString("Start", R.string.Start), (dialogInterface, i) -> { + if (editText == null) { + call.toggleRecord(null); + getUndoView().showWithAction(0, UndoView.ACTION_VOIP_RECORDING_FINISHED, null); + } else { + call.toggleRecord(editText.getText().toString()); + AndroidUtilities.hideKeyboard(editText); + getUndoView().showWithAction(0, UndoView.ACTION_VOIP_RECORDING_STARTED, null); + if (VoIPService.getSharedInstance() != null) { + VoIPService.getSharedInstance().playStartRecordSound(); + } + } + }); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> AndroidUtilities.hideKeyboard(editText)); + AlertDialog dialog = builder.create(); + dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); + dialog.show(); + dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); + if (editText != null) { + editText.requestFocus(); + } + } else if (id == permission_item) { + changingPermissions = true; + everyoneItem.setVisibility(View.VISIBLE); + adminItem.setVisibility(View.VISIBLE); + + accountGap.setVisibility(View.GONE); + inviteItem.setVisibility(View.GONE); + leaveItem.setVisibility(View.GONE); + permissionItem.setVisibility(View.GONE); + editTitleItem.setVisibility(View.GONE); + recordItem.setVisibility(View.GONE); + accountSelectCell.setVisibility(View.GONE); + otherItem.forceUpdatePopupPosition(); + } else if (id == edit_item) { + enterEventSent = false; + final EditTextBoldCursor editText = new EditTextBoldCursor(getContext()); + editText.setBackgroundDrawable(Theme.createEditTextDrawable(getContext(), true)); + + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setDialogButtonColorKey(Theme.key_voipgroup_listeningText); + builder.setTitle(LocaleController.getString("VoipGroupTitle", R.string.VoipGroupTitle)); + builder.setCheckFocusable(false); + builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> AndroidUtilities.hideKeyboard(editText)); + + LinearLayout linearLayout = new LinearLayout(getContext()); + linearLayout.setOrientation(LinearLayout.VERTICAL); + builder.setView(linearLayout); + + editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + editText.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); + editText.setMaxLines(1); + editText.setLines(1); + editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + editText.setGravity(Gravity.LEFT | Gravity.TOP); + editText.setSingleLine(true); + editText.setImeOptions(EditorInfo.IME_ACTION_DONE); + editText.setHint(currentChat.title); + editText.setHintTextColor(Theme.getColor(Theme.key_voipgroup_lastSeenText)); + editText.setCursorColor(Theme.getColor(Theme.key_voipgroup_nameText)); + editText.setCursorSize(AndroidUtilities.dp(20)); + editText.setCursorWidth(1.5f); + editText.setPadding(0, AndroidUtilities.dp(4), 0, 0); + linearLayout.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 36, Gravity.TOP | Gravity.LEFT, 24, 6, 24, 0)); + editText.setOnEditorActionListener((textView, i, keyEvent) -> { + AndroidUtilities.hideKeyboard(textView); + builder.create().getButton(AlertDialog.BUTTON_POSITIVE).callOnClick(); + return false; + }); + editText.addTextChangedListener(new TextWatcher() { + + boolean ignoreTextChange; + + @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 (ignoreTextChange) { + return; + } + if (s.length() > 40) { + ignoreTextChange = true; + s.delete(40, s.length()); + AndroidUtilities.shakeView(editText, 2, 0); + editText.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + ignoreTextChange = false; + } + } + }); + if (!TextUtils.isEmpty(call.call.title)) { + editText.setText(call.call.title); + editText.setSelection(editText.length()); + } + builder.setPositiveButton(LocaleController.getString("Save", R.string.Save), (dialog, which) -> { + AndroidUtilities.hideKeyboard(editText); + call.setTitle(editText.getText().toString()); + builder.getDismissRunnable().run(); + }); + + final AlertDialog alertDialog = builder.create(); + alertDialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_inviteMembersBackground)); + alertDialog.setOnShowListener(dialog -> makeFocusable(null, alertDialog, editText, true)); + alertDialog.setOnDismissListener(dialog -> AndroidUtilities.hideKeyboard(editText)); + alertDialog.show(); + alertDialog.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); + editText.requestFocus(); + } else if (id == user_item) { + accountSwitchImageView.callOnClick(); + } + } + }); + + TLRPC.InputPeer peer; + if (schedulePeer != null) { + peer = schedulePeer; + } else { + peer = VoIPService.getSharedInstance().getGroupCallPeer(); + } if (peer == null) { selfPeer = new TLRPC.TL_peerUser(); selfPeer.user_id = accountInstance.getUserConfig().getClientUserId(); @@ -1289,8 +1735,6 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter selfPeer.chat_id = peer.chat_id; } - currentCallState = VoIPService.getSharedInstance().getCallState(); - VoIPService.audioLevelsCallback = (uids, levels, voice) -> { for (int a = 0; a < uids.length; a++) { TLRPC.TL_groupCallParticipant participant = call.participantsBySources.get(uids[a]); @@ -1316,13 +1760,16 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.chatInfoDidLoad); accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.didLoadChatAdmins); accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.applyGroupCallVisibleParticipants); + accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.userInfoDidLoad); + accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.mainUserInfoChanged); + accountInstance.getNotificationCenter().addObserver(this, NotificationCenter.updateInterfaces); NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.webRtcMicAmplitudeEvent); NotificationCenter.getGlobalInstance().addObserver(this, NotificationCenter.didEndCall); shadowDrawable = context.getResources().getDrawable(R.drawable.sheet_shadow_round).mutate(); - bigMicDrawable = new RLottieDrawable(R.raw.voice_outlined2, "" + R.raw.voice_outlined2, AndroidUtilities.dp(57), AndroidUtilities.dp(55), true, null); - handDrawables = new RLottieDrawable(R.raw.hand_1, "" + R.raw.hand_1, AndroidUtilities.dp(57), AndroidUtilities.dp(55), true, null); + bigMicDrawable = new RLottieDrawable(R.raw.voip_filled, "" + R.raw.voip_filled, AndroidUtilities.dp(72), AndroidUtilities.dp(72), true, null); + handDrawables = new RLottieDrawable(R.raw.hand_2, "" + R.raw.hand_2, AndroidUtilities.dp(72), AndroidUtilities.dp(72), true, null); containerView = new FrameLayout(context) { @@ -1335,7 +1782,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter int totalHeight = MeasureSpec.getSize(heightMeasureSpec); if (Build.VERSION.SDK_INT >= 21) { ignoreLayout = true; - setPadding(backgroundPaddingLeft, AndroidUtilities.statusBarHeight, backgroundPaddingLeft, 0); + setPadding(backgroundPaddingLeft, statusBarHeight, backgroundPaddingLeft, 0); ignoreLayout = false; } int availableHeight = totalHeight - getPaddingTop() - AndroidUtilities.dp(14 + 231); @@ -1348,11 +1795,31 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter int contentSize = Math.max(AndroidUtilities.dp(64 + 50 + 58 * 2.5f), availableHeight / 5 * 3); int padding = Math.max(0, availableHeight - contentSize + AndroidUtilities.dp(8)); + ignoreLayout = true; if (listView.getPaddingTop() != padding) { - ignoreLayout = true; listView.setPadding(0, padding, 0, 0); - ignoreLayout = false; } + if (scheduleStartAtTextView != null) { + int y = padding + (availableHeight - padding + AndroidUtilities.dp(60)) / 2; + FrameLayout.LayoutParams layoutParams1 = (FrameLayout.LayoutParams) scheduleStartInTextView.getLayoutParams(); + layoutParams1.topMargin = y - AndroidUtilities.dp(30); + + FrameLayout.LayoutParams layoutParams2 = (FrameLayout.LayoutParams) scheduleStartAtTextView.getLayoutParams(); + layoutParams2.topMargin = y + AndroidUtilities.dp(80); + + FrameLayout.LayoutParams layoutParams3 = (FrameLayout.LayoutParams) scheduleTimeTextView.getLayoutParams(); + + if (layoutParams1.topMargin < ActionBar.getCurrentActionBarHeight() || layoutParams2.topMargin + AndroidUtilities.dp(20) > totalHeight - AndroidUtilities.dp(231)) { + scheduleStartInTextView.setVisibility(INVISIBLE); + scheduleStartAtTextView.setVisibility(INVISIBLE); + layoutParams3.topMargin = y - AndroidUtilities.dp(20); + } else { + scheduleStartInTextView.setVisibility(VISIBLE); + scheduleStartAtTextView.setVisibility(VISIBLE); + layoutParams3.topMargin = y; + } + } + ignoreLayout = false; super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(totalHeight, MeasureSpec.EXACTLY)); int currentSize = getMeasuredHeight() + (getMeasuredWidth() << 16); if (currentSize != lastSize) { @@ -1386,7 +1853,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter return true; } } - if (ev.getAction() == MotionEvent.ACTION_DOWN && scrollOffsetY != 0 && ev.getY() < scrollOffsetY - AndroidUtilities.dp(37) && actionBar.getAlpha() == 0.0f) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && scrollOffsetY != 0 && ev.getY() < scrollOffsetY - AndroidUtilities.dp(37) && actionBar.getAlpha() == 0.0f && !avatarsPreviewShowed) { dismiss(); return true; } @@ -1437,7 +1904,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter int finalColor = Color.argb((int) (255 * actionBar.getAlpha()), (int) (Color.red(backgroundColor) * 0.8f), (int) (Color.green(backgroundColor) * 0.8f), (int) (Color.blue(backgroundColor) * 0.8f)); Theme.dialogs_onlineCirclePaint.setColor(finalColor); - canvas.drawRect(backgroundPaddingLeft, 0, getMeasuredWidth() - backgroundPaddingLeft, AndroidUtilities.statusBarHeight, Theme.dialogs_onlineCirclePaint); + canvas.drawRect(backgroundPaddingLeft, 0, getMeasuredWidth() - backgroundPaddingLeft, statusBarHeight, Theme.dialogs_onlineCirclePaint); } @Override @@ -1451,7 +1918,6 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter Path roundPath = new Path(); int count = listView.getChildCount(); - float viewClipTop = listTop; float viewClipBottom = listView.getY() + listView.getMeasuredHeight(); for (int num = 0; num < count; num++) { @@ -1461,10 +1927,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } - if (viewClipTop < viewClipBottom) { -// + if (listTop < viewClipBottom) { canvas.save(); - canvas.clipRect(0, viewClipTop * (1f - progressToAvatarPreview), getMeasuredWidth(), viewClipBottom * (1f - progressToAvatarPreview) + getMeasuredHeight() * progressToAvatarPreview); + canvas.clipRect(0, listTop * (1f - progressToAvatarPreview), getMeasuredWidth(), viewClipBottom * (1f - progressToAvatarPreview) + getMeasuredHeight() * progressToAvatarPreview); float childY = (listView.getY() + child.getY()) * (1f - progressToAvatarPreview) + (avatarPreviewContainer.getTop() + avatarPreviewContainer.getMeasuredWidth()) * progressToAvatarPreview; float childX = (listView.getLeft() + child.getX()) * (1f - progressToAvatarPreview) + avatarPreviewContainer.getLeft() * progressToAvatarPreview; @@ -1473,7 +1938,6 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter float pr = 1.0f - CubicBezierInterpolator.EASE_OUT.getInterpolation(1.0f - progress); int h = (int) (scrimView.getMeasuredHeight() + (scrimView.getClipHeight() - scrimView.getMeasuredHeight()) * pr); rect.set(0, 0, child.getMeasuredWidth(), h); - //scrimView.setAboutVisibleProgress(listViewBackgroundPaint.getColor(), progressToAvatarPreview); scrimView.setProgressToAvatarPreview(progressToAvatarPreview); for (int i = 0; i < 4; i++) { radii[i] = AndroidUtilities.dp(13) * (1f - progressToAvatarPreview); @@ -1507,12 +1971,14 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } - canvas.save(); - canvas.clipRect(0, viewClipTop * (1f - progressToAvatarPreview), getMeasuredWidth(), viewClipBottom * (1f - progressToAvatarPreview) + getMeasuredHeight() * progressToAvatarPreview); - canvas.scale(avatarPreviewContainer.getScaleX(), avatarPreviewContainer.getScaleY(), avatarPreviewContainer.getX(), avatarPreviewContainer.getY()); - canvas.translate(avatarPreviewContainer.getX(), avatarPreviewContainer.getY()); - avatarPreviewContainer.draw(canvas); - canvas.restore(); + if (!pinchToZoomHelper.isInOverlayMode()) { + canvas.save(); + canvas.clipRect(0, listTop * (1f - progressToAvatarPreview), getMeasuredWidth(), viewClipBottom * (1f - progressToAvatarPreview) + getMeasuredHeight() * progressToAvatarPreview); + canvas.scale(avatarPreviewContainer.getScaleX(), avatarPreviewContainer.getScaleY(), avatarPreviewContainer.getX(), avatarPreviewContainer.getY()); + canvas.translate(avatarPreviewContainer.getX(), avatarPreviewContainer.getY()); + avatarPreviewContainer.draw(canvas); + canvas.restore(); + } } } else { if (scrimView != null) { @@ -1561,6 +2027,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (child == avatarPreviewContainer || child == scrimPopupLayout) { return true; } + if (contentFullyOverlayed) { + if (child == listView || child == buttonsContainer) { + return true; + } + } return super.drawChild(canvas, child, drawingTime); } @@ -1580,6 +2051,102 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter containerView.setKeepScreenOn(true); containerView.setClipChildren(false); + if (schedulePeer != null) { + scheduleStartInTextView = new SimpleTextView(context); + scheduleStartInTextView.setGravity(Gravity.CENTER); + scheduleStartInTextView.setTextColor(0xffffffff); + scheduleStartInTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + scheduleStartInTextView.setTextSize(18); + scheduleStartInTextView.setText(LocaleController.getString("VoipChatStartsIn", R.string.VoipChatStartsIn)); + containerView.addView(scheduleStartInTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 21, 0, 21, 231 + 80)); //-80 + + scheduleTimeTextView = new SimpleTextView(context) { + + private LinearGradient linearGradient; + private int lastTextWidth; + private Matrix matrix = new Matrix(); + private float targetX = -1f; + private float startX; + private float duration; + private float time; + private float gradientWidth; + private long lastUpdateTime; + + private void setTarget() { + targetX = 0.20f * (Utilities.random.nextInt(100) - 50) / 50.0f; + } + + @Override + protected boolean createLayout(int width) { + boolean result = super.createLayout(width); + int w = getTextWidth(); + if (w != lastTextWidth) { + gradientWidth = w * 1.3f; + linearGradient = new LinearGradient(0, getTextHeight(), w * 2.0f, 0, new int[]{Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient), Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient3), Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient2), Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient2)}, new float[]{0.0f, 0.38f, 0.76f, 1.0f}, Shader.TileMode.CLAMP); + getPaint().setShader(linearGradient); + lastTextWidth = w; + } + return result; + } + + @Override + protected void onDraw(Canvas canvas) { + float moveProgress = 0.0f; + if (linearGradient != null) { + if (call != null && call.isScheduled()) { + long diff = ((long) call.call.schedule_date) * 1000 - accountInstance.getConnectionsManager().getCurrentTimeMillis(); + if (diff < 0) { + moveProgress = 1.0f; + } else if (diff < 5000) { + moveProgress = 1.0f - diff / 5000.0f; + } + } + matrix.reset(); + matrix.postTranslate(-lastTextWidth * 0.7f * moveProgress, 0); + + long newTime = SystemClock.elapsedRealtime(); + long dt = newTime - lastUpdateTime; + if (dt > 20) { + dt = 17; + } + lastUpdateTime = newTime; + if (duration == 0 || time >= duration) { + duration = Utilities.random.nextInt(200) + 1500; + time = 0; + if (targetX == -1f) { + setTarget(); + } + startX = targetX; + setTarget(); + } + time += dt * (0.5f + BlobDrawable.GRADIENT_SPEED_MIN) + dt * (BlobDrawable.GRADIENT_SPEED_MAX * 2) * amplitude; + if (time > duration) { + time = duration; + } + float interpolation = CubicBezierInterpolator.EASE_OUT.getInterpolation(time / duration); + float x = gradientWidth * (startX + (targetX - startX) * interpolation) - gradientWidth / 2; + matrix.postTranslate(x, 0); + + linearGradient.setLocalMatrix(matrix); + invalidate(); + } + super.onDraw(canvas); + } + }; + scheduleTimeTextView.setGravity(Gravity.CENTER); + scheduleTimeTextView.setTextColor(0xffffffff); + scheduleTimeTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + scheduleTimeTextView.setTextSize(60); + containerView.addView(scheduleTimeTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 21, 0, 21, 231)); + + scheduleStartAtTextView = new SimpleTextView(context); + scheduleStartAtTextView.setGravity(Gravity.CENTER); + scheduleStartAtTextView.setTextColor(0xffffffff); + scheduleStartAtTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + scheduleStartAtTextView.setTextSize(18); + containerView.addView(scheduleStartAtTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.TOP | Gravity.CENTER_HORIZONTAL, 21, 0, 21, 231 - 30)); //+ 30 + } + listView = new RecyclerListView(context) { @Override @@ -1607,6 +2174,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter minTop = Math.min(minTop, Math.max(0, child.getY())); } } + rect.set(0, minTop, getMeasuredWidth(), Math.min(getMeasuredHeight(), maxBottom)); canvas.drawRoundRect(rect, AndroidUtilities.dp(13), AndroidUtilities.dp(13), listViewBackgroundPaint); @@ -1630,7 +2198,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter listView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if (listView.getChildCount() <= 0) { + if (listView.getChildCount() <= 0 || call == null) { return; } if (!call.loadingMembers && !call.membersLoadEndReached && layoutManager.findLastVisibleItemPosition() > listAdapter.getItemCount() - 5) { @@ -1655,6 +2223,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (recordHintView != null) { recordHintView.hide(); } + if (reminderHintView != null) { + reminderHintView.hide(); + } } scrolling = newState == RecyclerView.SCROLL_STATE_DRAGGING; } @@ -1664,15 +2235,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter listView.setLayoutManager(layoutManager = new FillLastLinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false, 0, listView)); layoutManager.setBind(false); containerView.addView(listView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.TOP | Gravity.LEFT, 14, 14, 14, 231)); - listView.setAdapter(listAdapter = new ListAdapter(context)); + listView.setAdapter(listAdapter); listView.setTopBottomSelectorRadius(13); listView.setSelectorDrawableColor(Theme.getColor(Theme.key_voipgroup_listSelector)); listView.setOnItemClickListener((view, position, x, y) -> { if (view instanceof GroupCallUserCell) { GroupCallUserCell cell = (GroupCallUserCell) view; - if (cell.isSelfUser() && !cell.isHandRaised()) { - return; - } showMenuForCell(cell); } else if (view instanceof GroupCallInvitedCell) { GroupCallInvitedCell cell = (GroupCallInvitedCell) view; @@ -1768,6 +2336,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter @SuppressLint("DrawAllocation") @Override protected void dispatchDraw(Canvas canvas) { + if (contentFullyOverlayed) { + return; + } int offset = (getMeasuredWidth() - getMeasuredHeight()) / 2; long newTime = SystemClock.elapsedRealtime(); @@ -1861,7 +2432,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter boolean showWaves = false; boolean showLighting = false; if (currentState != null) { - showWaves = currentState.currentState == MUTE_BUTTON_STATE_MUTE || currentState.currentState == MUTE_BUTTON_STATE_UNMUTE || currentState.currentState == MUTE_BUTTON_STATE_RAISED_HAND || currentState.currentState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN; + showWaves = currentState.currentState == MUTE_BUTTON_STATE_MUTE || currentState.currentState == MUTE_BUTTON_STATE_UNMUTE || isGradientState(currentState.currentState); showLighting = currentState.currentState != MUTE_BUTTON_STATE_CONNECTING; } @@ -1928,8 +2499,10 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter paint.setAlpha(76); - float radius = AndroidUtilities.dp(52) / 2f; - canvas.drawCircle(leaveButton.getX() + leaveButton.getMeasuredWidth() / 2f, leaveButton.getY() + radius, radius, leaveBackgroundPaint); + if (call != null) { + float radius = AndroidUtilities.dp(52) / 2f; + canvas.drawCircle(leaveButton.getX() + leaveButton.getMeasuredWidth() / 2f, leaveButton.getY() + radius, radius, leaveBackgroundPaint); + } canvas.save(); canvas.scale(BlobDrawable.GLOBAL_SCALE, BlobDrawable.GLOBAL_SCALE, cx, cy); @@ -1943,19 +2516,21 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter canvas.scale(scaleLight, scaleLight, cx, cy); canvas.drawCircle(cx, cy, AndroidUtilities.dp(160), radialPaint); canvas.restore(); - - canvas.restore(); - canvas.save(); - scale = BlobDrawable.SCALE_BIG_MIN + BlobDrawable.SCALE_BIG * amplitude; - canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); - bigWaveDrawable.draw(cx, cy, canvas, paint); canvas.restore(); - canvas.save(); - scale = BlobDrawable.SCALE_SMALL_MIN + BlobDrawable.SCALE_SMALL * amplitude; - canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); - tinyWaveDrawable.draw(cx, cy, canvas, paint); - canvas.restore(); + if (call != null) { + canvas.save(); + scale = BlobDrawable.SCALE_BIG_MIN + BlobDrawable.SCALE_BIG * amplitude * scheduleButtonsScale; + canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); + bigWaveDrawable.draw(cx, cy, canvas, paint); + canvas.restore(); + + canvas.save(); + scale = BlobDrawable.SCALE_SMALL_MIN + BlobDrawable.SCALE_SMALL * amplitude * scheduleButtonsScale; + canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); + tinyWaveDrawable.draw(cx, cy, canvas, paint); + canvas.restore(); + } paint.setAlpha(255); @@ -2002,43 +2577,63 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter radialMatrix.setTranslate(cx, cy); radialGradient.setLocalMatrix(radialMatrix); - paint.setAlpha((int) (76 * alpha)); - if (i == 1) { - float radius = AndroidUtilities.dp(52) / 2f; - canvas.drawCircle(leaveButton.getX() + leaveButton.getMeasuredWidth() / 2, leaveButton.getY() + radius, radius, leaveBackgroundPaint); + paint.setAlpha((int) (76 * alpha * switchToButtonProgress)); + if (switchToButtonProgress > 0) { + if (i == 1) { + int a = leaveBackgroundPaint.getAlpha(); + leaveBackgroundPaint.setAlpha((int) (a * switchToButtonProgress)); + float radius = AndroidUtilities.dp(52) / 2f; + canvas.drawCircle(leaveButton.getX() + leaveButton.getMeasuredWidth() / 2, leaveButton.getY() + radius, radius, leaveBackgroundPaint); + leaveBackgroundPaint.setAlpha(a); + } } canvas.save(); canvas.scale(BlobDrawable.GLOBAL_SCALE, BlobDrawable.GLOBAL_SCALE, cx, cy); canvas.save(); + float translation = AndroidUtilities.dp(89) * (1.0f - switchToButtonInt2); + cy += translation; float scale = BlobDrawable.SCALE_BIG_MIN + BlobDrawable.SCALE_BIG * amplitude * 0.5f; canvas.scale(scale * showLightingProgress, scale * showLightingProgress, cx, cy); if (i == 1) { - float scaleLight = 0.7f + BlobDrawable.LIGHT_GRADIENT_SIZE; + float scaleLight = 0.7f + BlobDrawable.LIGHT_GRADIENT_SIZE * scheduleButtonsScale; canvas.save(); canvas.scale(scaleLight, scaleLight, cx, cy); + int a = radialPaint.getAlpha(); + radialPaint.setAlpha((int) (a * switchToButtonProgress)); canvas.drawCircle(cx, cy, AndroidUtilities.dp(160), radialPaint); + radialPaint.setAlpha(a); canvas.restore(); } canvas.restore(); - canvas.save(); - scale = BlobDrawable.SCALE_BIG_MIN + BlobDrawable.SCALE_BIG * amplitude; - canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); - bigWaveDrawable.draw(cx, cy, canvas, paint); - canvas.restore(); + if (switchToButtonProgress > 0) { + canvas.save(); + scale = BlobDrawable.SCALE_BIG_MIN + BlobDrawable.SCALE_BIG * amplitude * showWavesProgressInterpolated * scheduleButtonsScale; + canvas.scale(scale, scale, cx, cy); + bigWaveDrawable.draw(cx, cy, canvas, paint); + canvas.restore(); - canvas.save(); - scale = BlobDrawable.SCALE_SMALL_MIN + BlobDrawable.SCALE_SMALL * amplitude; - canvas.scale(scale * showWavesProgressInterpolated, scale * showWavesProgressInterpolated, cx, cy); - tinyWaveDrawable.draw(cx, cy, canvas, paint); - canvas.restore(); + canvas.save(); + scale = BlobDrawable.SCALE_SMALL_MIN + BlobDrawable.SCALE_SMALL * amplitude * showWavesProgressInterpolated * scheduleButtonsScale; + canvas.scale(scale, scale, cx, cy); + tinyWaveDrawable.draw(cx, cy, canvas, paint); + canvas.restore(); + } if (i == 0) { paint.setAlpha(255); } else { paint.setAlpha((int) (255 * alpha)); } - canvas.drawCircle(cx, cy, buttonRadius, paint); + + muteButton.setTranslationY(translation); + float startX = getMeasuredWidth() / 2 - AndroidUtilities.dp(21); + float startY = AndroidUtilities.dp(24); + float w = (startX + (buttonRadius - startX) * switchToButtonInt2) * scheduleButtonsScale; + float h = (startY + (buttonRadius - startY) * switchToButtonInt2) * scheduleButtonsScale; + rect.set(cx - w, cy - h, cx + w, cy + h); + float rad = AndroidUtilities.dp(4) + (buttonRadius - AndroidUtilities.dp(4)) * switchToButtonInt2; + canvas.drawRoundRect(rect, rad, rad, paint); canvas.restore(); @@ -2055,6 +2650,212 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter buttonsContainer.setWillNotDraw(false); containerView.addView(buttonsContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 231, Gravity.LEFT | Gravity.BOTTOM)); + if (schedulePeer != null) { + scheduleInfoTextView = new TextView(context); + scheduleInfoTextView.setGravity(Gravity.CENTER); + scheduleInfoTextView.setTextColor(0xff7B8389); + scheduleInfoTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + if (ChatObject.isChannel(currentChat) && !currentChat.megagroup) { + scheduleInfoTextView.setTag(1); + } + containerView.addView(scheduleInfoTextView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 21, 0, 21, 100)); + + final NumberPicker dayPicker = new NumberPicker(context); + dayPicker.setTextColor(0xffffffff); + dayPicker.setSelectorColor(0xff6D89ED); + dayPicker.setTextOffset(AndroidUtilities.dp(10)); + dayPicker.setItemCount(5); + final NumberPicker hourPicker = new NumberPicker(context) { + @Override + protected CharSequence getContentDescription(int value) { + return LocaleController.formatPluralString("Hours", value); + } + }; + hourPicker.setItemCount(5); + hourPicker.setTextColor(0xffffffff); + hourPicker.setSelectorColor(0xff6D89ED); + hourPicker.setTextOffset(-AndroidUtilities.dp(10)); + final NumberPicker minutePicker = new NumberPicker(context) { + @Override + protected CharSequence getContentDescription(int value) { + return LocaleController.formatPluralString("Minutes", value); + } + }; + minutePicker.setItemCount(5); + minutePicker.setTextColor(0xffffffff); + minutePicker.setSelectorColor(0xff6D89ED); + minutePicker.setTextOffset(-AndroidUtilities.dp(34)); + + scheduleButtonTextView = new TextView(context); + scheduleButtonTextView.setLines(1); + scheduleButtonTextView.setSingleLine(true); + scheduleButtonTextView.setEllipsize(TextUtils.TruncateAt.END); + scheduleButtonTextView.setGravity(Gravity.CENTER); + scheduleButtonTextView.setBackground(Theme.createSimpleSelectorRoundRectDrawable(AndroidUtilities.dp(4), 0, 0x3f000000)); + scheduleButtonTextView.setTextColor(0xffffffff); + scheduleButtonTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + scheduleButtonTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + containerView.addView(scheduleButtonTextView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 21, 0, 21, 20.5f)); + scheduleButtonTextView.setOnClickListener(v -> { + scheduleAnimator = ValueAnimator.ofFloat(0.0f, 1.0f); + scheduleAnimator.setDuration(600); + scheduleAnimator.addUpdateListener(a -> { + switchToButtonProgress = (float) a.getAnimatedValue(); + updateScheduleUI(true); + + buttonsContainer.invalidate(); + listView.invalidate(); + }); + scheduleAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + scheduleAnimator = null; + } + }); + scheduleAnimator.start(); + titleTextView.setText(LocaleController.getString("VoipGroupVoiceChat", R.string.VoipGroupVoiceChat), true); + Calendar calendar = Calendar.getInstance(); + boolean setSeconds = AlertsCreator.checkScheduleDate(null, null, 7 * 24 * 60 * 60, 3, dayPicker, hourPicker, minutePicker); + calendar.setTimeInMillis(System.currentTimeMillis() + (long) dayPicker.getValue() * 24 * 3600 * 1000); + calendar.set(Calendar.HOUR_OF_DAY, hourPicker.getValue()); + calendar.set(Calendar.MINUTE, minutePicker.getValue()); + if (setSeconds) { + calendar.set(Calendar.SECOND, 0); + } + scheduleStartAt = (int) (calendar.getTimeInMillis() / 1000); + updateScheduleUI(false); + + TLRPC.TL_phone_createGroupCall req = new TLRPC.TL_phone_createGroupCall(); + req.peer = MessagesController.getInputPeer(chat); + req.random_id = Utilities.random.nextInt(); + req.schedule_date = scheduleStartAt; + req.flags |= 2; + account.getConnectionsManager().sendRequest(req, (response, error) -> { + if (response != null) { + TLRPC.Updates updates = (TLRPC.Updates) response; + for (int a = 0; a < updates.updates.size(); a++) { + TLRPC.Update update = updates.updates.get(a); + if (update instanceof TLRPC.TL_updateGroupCall) { + TLRPC.TL_updateGroupCall updateGroupCall = (TLRPC.TL_updateGroupCall) update; + AndroidUtilities.runOnUIThread(() -> { + call = new ChatObject.Call(); + call.call = new TLRPC.TL_groupCall(); + call.call.participants_count = 0; + call.call.version = 1; + call.call.can_change_join_muted = true; + call.chatId = chat.id; + call.call.schedule_date = scheduleStartAt; + call.call.flags |= 128; + call.currentAccount = accountInstance; + call.setSelfPeer(peer); + call.call.access_hash = updateGroupCall.call.access_hash; + call.call.id = updateGroupCall.call.id; + accountInstance.getMessagesController().putGroupCall(call.chatId, call); + }); + break; + } + } + accountInstance.getMessagesController().processUpdates(updates, false); + } else { + AndroidUtilities.runOnUIThread(() -> { + accountInstance.getNotificationCenter().postNotificationName(NotificationCenter.needShowAlert, 6, error.text); + dismiss(); + }); + } + }, ConnectionsManager.RequestFlagFailOnServerErrors); + }); + + scheduleTimerContainer = new LinearLayout(context) { + + boolean ignoreLayout = false; + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + ignoreLayout = true; + int count = 5; + dayPicker.setItemCount(count); + hourPicker.setItemCount(count); + minutePicker.setItemCount(count); + dayPicker.getLayoutParams().height = AndroidUtilities.dp(54) * count; + hourPicker.getLayoutParams().height = AndroidUtilities.dp(54) * count; + minutePicker.getLayoutParams().height = AndroidUtilities.dp(54) * count; + ignoreLayout = false; + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + public void requestLayout() { + if (ignoreLayout) { + return; + } + super.requestLayout(); + } + }; + scheduleTimerContainer.setWeightSum(1.0f); + scheduleTimerContainer.setOrientation(LinearLayout.HORIZONTAL); + containerView.addView(scheduleTimerContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 54 * 5, Gravity.TOP | Gravity.LEFT, 0, 50, 0, 0)); + + long currentTime = System.currentTimeMillis(); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(currentTime); + int currentYear = calendar.get(Calendar.YEAR); + int currentDay = calendar.get(Calendar.DAY_OF_YEAR); + + scheduleTimerContainer.addView(dayPicker, LayoutHelper.createLinear(0, 54 * 5, 0.5f)); + dayPicker.setMinValue(0); + dayPicker.setMaxValue(365); + dayPicker.setWrapSelectorWheel(false); + dayPicker.setFormatter(value -> { + if (value == 0) { + return LocaleController.getString("MessageScheduleToday", R.string.MessageScheduleToday); + } else { + long date = currentTime + (long) value * 86400000L; + calendar.setTimeInMillis(date); + int year = calendar.get(Calendar.YEAR); + if (year == currentYear) { + return LocaleController.getInstance().formatterScheduleDay.format(date); + } else { + return LocaleController.getInstance().formatterScheduleYear.format(date); + } + } + }); + final NumberPicker.OnValueChangeListener onValueChangeListener = (picker, oldVal, newVal) -> { + try { + container.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } catch (Exception ignore) { + + } + AlertsCreator.checkScheduleDate(scheduleButtonTextView, scheduleInfoTextView, 7 * 24 * 60 * 60, 2, dayPicker, hourPicker, minutePicker); + }; + dayPicker.setOnValueChangedListener(onValueChangeListener); + + hourPicker.setMinValue(0); + hourPicker.setMaxValue(23); + scheduleTimerContainer.addView(hourPicker, LayoutHelper.createLinear(0, 54 * 5, 0.2f)); + hourPicker.setFormatter(value -> String.format("%02d", value)); + hourPicker.setOnValueChangedListener(onValueChangeListener); + + minutePicker.setMinValue(0); + minutePicker.setMaxValue(59); + minutePicker.setValue(0); + minutePicker.setFormatter(value -> String.format("%02d", value)); + scheduleTimerContainer.addView(minutePicker, LayoutHelper.createLinear(0, 54 * 5, 0.3f)); + minutePicker.setOnValueChangedListener(onValueChangeListener); + + calendar.setTimeInMillis(currentTime + 3 * 60 * 60 * 1000); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + int nextDay = calendar.get(Calendar.DAY_OF_YEAR); + int minute = calendar.get(Calendar.MINUTE); + int hour = calendar.get(Calendar.HOUR_OF_DAY); + dayPicker.setValue(currentDay != nextDay ? 1 : 0); + minutePicker.setValue(minute); + hourPicker.setValue(hour); + + AlertsCreator.checkScheduleDate(scheduleButtonTextView, scheduleInfoTextView, 7 * 24 * 60 * 60, 2, dayPicker, hourPicker, minutePicker); + } + int color = Theme.getColor(Theme.key_voipgroup_unmuteButton2); int r = Color.red(color); int g = Color.green(color); @@ -2083,6 +2884,10 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter soundButton.setTextSize(12); buttonsContainer.addView(soundButton, LayoutHelper.createFrame(68, 90)); soundButton.setOnClickListener(v -> { + if (call == null || call.isScheduled()) { + getLink(false); + return; + } if (VoIPService.getSharedInstance() == null) { return; } @@ -2095,6 +2900,10 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter leaveButton.setData(R.drawable.calls_decline, 0xffffffff, Theme.getColor(Theme.key_voipgroup_leaveButton), 0.3f, false, LocaleController.getString("VoipGroupLeave", R.string.VoipGroupLeave), false, false); buttonsContainer.addView(leaveButton, LayoutHelper.createFrame(68, 80)); leaveButton.setOnClickListener(v -> { + if (call == null || call.isScheduled()) { + dismiss(); + return; + } updateItems(); onLeaveClick(context, this::dismiss, false); }); @@ -2103,7 +2912,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter @Override public boolean onTouchEvent(MotionEvent event) { - if (event.getAction() == MotionEvent.ACTION_DOWN && muteButtonState == MUTE_BUTTON_STATE_UNMUTE) { + if (event.getAction() == MotionEvent.ACTION_DOWN && muteButtonState == MUTE_BUTTON_STATE_UNMUTE && call != null) { AndroidUtilities.runOnUIThread(pressRunnable, 300); scheduled = true; } else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { @@ -2154,61 +2963,95 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter @Override public void onClick(View v) { - if (VoIPService.getSharedInstance() == null || muteButtonState == MUTE_BUTTON_STATE_CONNECTING) { + if (call == null || muteButtonState == MUTE_BUTTON_STATE_CONNECTING) { return; } - if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { - if (playingHandAnimation) { + if (muteButtonState == MUTE_BUTTON_STATE_START_NOW) { + if (startingGroupCall) { return; } - playingHandAnimation = true; - AndroidUtilities.shakeView(muteLabel[0], 2, 0); - AndroidUtilities.shakeView(muteSubLabel[0], 2, 0); v.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - int num = Utilities.random.nextInt(100); - int endFrame; - int startFrame; - if (num < 32) { - startFrame = 0; - endFrame = 120; - } else if (num < 64) { - startFrame = 120; - endFrame = 240; - } else if (num < 97) { - startFrame = 240; - endFrame = 420; - } else if (num == 98) { - startFrame = 420; - endFrame = 540; - } else { - startFrame = 540; - endFrame = 720; - } - handDrawables.setCustomEndFrame(endFrame); - handDrawables.setOnFinishCallback(finishRunnable, endFrame - 1); - muteButton.setAnimation(handDrawables); - handDrawables.setCurrentFrame(startFrame); - muteButton.playAnimation(); - if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN) { - TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); - TLObject object; - int peerId = MessageObject.getPeerId(participant.peer); - if (peerId > 0) { - object = accountInstance.getMessagesController().getUser(peerId); - } else { - object = accountInstance.getMessagesController().getChat(-peerId); + startingGroupCall = true; + TLRPC.TL_phone_startScheduledGroupCall req = new TLRPC.TL_phone_startScheduledGroupCall(); + req.call = call.getInputGroupCall(); + accountInstance.getConnectionsManager().sendRequest(req, (response, error) -> { + if (response != null) { + accountInstance.getMessagesController().processUpdates((TLRPC.Updates) response, false); + } + }); + } else if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER || muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + if (reminderHintView != null) { + reminderHintView.hide(); } - VoIPService.getSharedInstance().editCallMember(object, true, -1, true); - updateMuteButton(MUTE_BUTTON_STATE_RAISED_HAND, true); } - } else if (muteButtonState == MUTE_BUTTON_STATE_UNMUTE) { - updateMuteButton(MUTE_BUTTON_STATE_MUTE, true); - VoIPService.getSharedInstance().setMicMute(false, false, true); - muteButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + TLRPC.TL_phone_toggleGroupCallStartSubscription req = new TLRPC.TL_phone_toggleGroupCallStartSubscription(); + req.call = call.getInputGroupCall(); + call.call.schedule_start_subscribed = !call.call.schedule_start_subscribed; + req.subscribed = call.call.schedule_start_subscribed; + accountInstance.getConnectionsManager().sendRequest(req, (response, error) -> { + if (response != null) { + accountInstance.getMessagesController().processUpdates((TLRPC.Updates) response, false); + } + }); + updateMuteButton(call.call.schedule_start_subscribed ? MUTE_BUTTON_STATE_CANCEL_REMINDER : MUTE_BUTTON_STATE_SET_REMINDER, true); } else { - updateMuteButton(MUTE_BUTTON_STATE_UNMUTE, true); - VoIPService.getSharedInstance().setMicMute(true, false, true); - muteButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + if (VoIPService.getSharedInstance() == null || isStillConnecting()) { + return; + } + if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { + if (playingHandAnimation) { + return; + } + playingHandAnimation = true; + AndroidUtilities.shakeView(muteLabel[0], 2, 0); + AndroidUtilities.shakeView(muteSubLabel[0], 2, 0); + v.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + int num = Utilities.random.nextInt(100); + int endFrame; + int startFrame; + if (num < 32) { + startFrame = 0; + endFrame = 120; + } else if (num < 64) { + startFrame = 120; + endFrame = 240; + } else if (num < 97) { + startFrame = 240; + endFrame = 420; + } else if (num == 98) { + startFrame = 420; + endFrame = 540; + } else { + startFrame = 540; + endFrame = 720; + } + handDrawables.setCustomEndFrame(endFrame); + handDrawables.setOnFinishCallback(finishRunnable, endFrame - 1); + muteButton.setAnimation(handDrawables); + handDrawables.setCurrentFrame(startFrame); + muteButton.playAnimation(); + if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN) { + TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); + TLObject object; + int peerId = MessageObject.getPeerId(participant.peer); + if (peerId > 0) { + object = accountInstance.getMessagesController().getUser(peerId); + } else { + object = accountInstance.getMessagesController().getChat(-peerId); + } + VoIPService.getSharedInstance().editCallMember(object, true, -1, true); + updateMuteButton(MUTE_BUTTON_STATE_RAISED_HAND, true); + } + } else if (muteButtonState == MUTE_BUTTON_STATE_UNMUTE) { + updateMuteButton(MUTE_BUTTON_STATE_MUTE, true); + VoIPService.getSharedInstance().setMicMute(false, false, true); + muteButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } else { + updateMuteButton(MUTE_BUTTON_STATE_UNMUTE, true); + VoIPService.getSharedInstance().setMicMute(true, false, true); + muteButton.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } } } }); @@ -2237,223 +3080,6 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } - actionBar = new ActionBar(context) { - @Override - public void setAlpha(float alpha) { - super.setAlpha(alpha); - containerView.invalidate(); - } - }; - actionBar.setBackButtonImage(R.drawable.ic_ab_back); - actionBar.setOccupyStatusBar(false); - actionBar.setAllowOverlayTitle(false); - actionBar.setItemsColor(Theme.getColor(Theme.key_voipgroup_actionBarItems), false); - actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_actionBarActionModeDefaultSelector), false); - actionBar.setTitleColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); - actionBar.setSubtitleColor(Theme.getColor(Theme.key_voipgroup_lastSeenTextUnscrolled)); - actionBar.setActionBarMenuOnItemClick(new ActionBar.ActionBarMenuOnItemClick() { - @Override - public void onItemClick(int id) { - if (id == -1) { - dismiss(); - } else if (id == eveyone_can_speak_item) { - call.call.join_muted = false; - toggleAdminSpeak(); - } else if (id == admin_can_speak_item) { - call.call.join_muted = true; - toggleAdminSpeak(); - } else if (id == share_invite_link_item) { - getLink(false); - } else if (id == leave_item) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - - builder.setTitle(LocaleController.getString("VoipGroupEndAlertTitle", R.string.VoipGroupEndAlertTitle)); - builder.setMessage(LocaleController.getString("VoipGroupEndAlertText", R.string.VoipGroupEndAlertText)); - - builder.setPositiveButton(LocaleController.getString("VoipGroupEnd", R.string.VoipGroupEnd), (dialogInterface, i) -> { - if (VoIPService.getSharedInstance() != null) { - VoIPService.getSharedInstance().hangUp(1); - } - dismiss(); - NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.didStartedCall); - }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); - AlertDialog dialog = builder.create(); - - dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); - dialog.show(); - TextView button = (TextView) dialog.getButton(DialogInterface.BUTTON_POSITIVE); - if (button != null) { - button.setTextColor(Theme.getColor(Theme.key_voipgroup_leaveCallMenu)); - } - dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); - } else if (id == start_record_item) { - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - - EditTextBoldCursor editText; - if (call.recording) { - builder.setTitle(LocaleController.getString("VoipGroupStopRecordingTitle", R.string.VoipGroupStopRecordingTitle)); - builder.setMessage(LocaleController.getString("VoipGroupStopRecordingText", R.string.VoipGroupStopRecordingText)); - editText = null; - } else { - enterEventSent = false; - builder.setTitle(LocaleController.getString("VoipGroupStartRecordingTitle", R.string.VoipGroupStartRecordingTitle)); - builder.setMessage(LocaleController.getString("VoipGroupStartRecordingText", R.string.VoipGroupStartRecordingText)); - builder.setCheckFocusable(false); - - editText = new EditTextBoldCursor(getContext()); - editText.setBackgroundDrawable(Theme.createEditTextDrawable(getContext(), true)); - - LinearLayout linearLayout = new LinearLayout(getContext()); - linearLayout.setOrientation(LinearLayout.VERTICAL); - builder.setView(linearLayout); - - editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - editText.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); - editText.setMaxLines(1); - editText.setLines(1); - editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); - editText.setGravity(Gravity.LEFT | Gravity.TOP); - editText.setSingleLine(true); - editText.setHint(LocaleController.getString("VoipGroupSaveFileHint", R.string.VoipGroupSaveFileHint)); - editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - editText.setHintTextColor(Theme.getColor(Theme.key_voipgroup_lastSeenText)); - editText.setCursorColor(Theme.getColor(Theme.key_voipgroup_nameText)); - editText.setCursorSize(AndroidUtilities.dp(20)); - editText.setCursorWidth(1.5f); - editText.setPadding(0, AndroidUtilities.dp(4), 0, 0); - linearLayout.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 36, Gravity.TOP | Gravity.LEFT, 24, 0, 24, 12)); - editText.setOnEditorActionListener((textView, i2, keyEvent) -> { - AndroidUtilities.hideKeyboard(textView); - builder.create().getButton(AlertDialog.BUTTON_POSITIVE).callOnClick(); - return false; - }); - - final AlertDialog alertDialog = builder.create(); - alertDialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_inviteMembersBackground)); - alertDialog.setOnShowListener(dialog -> makeFocusable(null, alertDialog, editText, true)); - alertDialog.setOnDismissListener(dialog -> AndroidUtilities.hideKeyboard(editText)); - } - - builder.setPositiveButton(call.recording ? LocaleController.getString("Stop", R.string.Stop) : LocaleController.getString("Start", R.string.Start), (dialogInterface, i) -> { - if (editText == null) { - call.toggleRecord(null); - getUndoView().showWithAction(0, UndoView.ACTION_VOIP_RECORDING_FINISHED, null); - } else { - call.toggleRecord(editText.getText().toString()); - AndroidUtilities.hideKeyboard(editText); - getUndoView().showWithAction(0, UndoView.ACTION_VOIP_RECORDING_STARTED, null); - if (VoIPService.getSharedInstance() != null) { - VoIPService.getSharedInstance().playStartRecordSound(); - } - } - }); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> AndroidUtilities.hideKeyboard(editText)); - AlertDialog dialog = builder.create(); - dialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_dialogBackground)); - dialog.show(); - dialog.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); - if (editText != null) { - editText.requestFocus(); - } - } else if (id == permission_item) { - changingPermissions = true; - everyoneItem.setVisibility(View.VISIBLE); - adminItem.setVisibility(View.VISIBLE); - - accountGap.setVisibility(View.GONE); - inviteItem.setVisibility(View.GONE); - leaveItem.setVisibility(View.GONE); - permissionItem.setVisibility(View.GONE); - editTitleItem.setVisibility(View.GONE); - recordItem.setVisibility(View.GONE); - accountSelectCell.setVisibility(View.GONE); - otherItem.forceUpdatePopupPosition(); - } else if (id == edit_item) { - enterEventSent = false; - final EditTextBoldCursor editText = new EditTextBoldCursor(getContext()); - editText.setBackgroundDrawable(Theme.createEditTextDrawable(getContext(), true)); - - AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); - builder.setTitle(LocaleController.getString("VoipGroupTitle", R.string.VoipGroupTitle)); - builder.setCheckFocusable(false); - builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), (dialog, which) -> AndroidUtilities.hideKeyboard(editText)); - - LinearLayout linearLayout = new LinearLayout(getContext()); - linearLayout.setOrientation(LinearLayout.VERTICAL); - builder.setView(linearLayout); - - editText.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); - editText.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); - editText.setMaxLines(1); - editText.setLines(1); - editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); - editText.setGravity(Gravity.LEFT | Gravity.TOP); - editText.setSingleLine(true); - editText.setImeOptions(EditorInfo.IME_ACTION_DONE); - editText.setHint(currentChat.title); - editText.setHintTextColor(Theme.getColor(Theme.key_voipgroup_lastSeenText)); - editText.setCursorColor(Theme.getColor(Theme.key_voipgroup_nameText)); - editText.setCursorSize(AndroidUtilities.dp(20)); - editText.setCursorWidth(1.5f); - editText.setPadding(0, AndroidUtilities.dp(4), 0, 0); - linearLayout.addView(editText, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 36, Gravity.TOP | Gravity.LEFT, 24, 6, 24, 0)); - editText.setOnEditorActionListener((textView, i, keyEvent) -> { - AndroidUtilities.hideKeyboard(textView); - builder.create().getButton(AlertDialog.BUTTON_POSITIVE).callOnClick(); - return false; - }); - editText.addTextChangedListener(new TextWatcher() { - - boolean ignoreTextChange; - - @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 (ignoreTextChange) { - return; - } - if (s.length() > 40) { - ignoreTextChange = true; - s.delete(40, s.length()); - AndroidUtilities.shakeView(editText, 2, 0); - editText.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - ignoreTextChange = false; - } - } - }); - if (!TextUtils.isEmpty(call.call.title)) { - editText.setText(call.call.title); - editText.setSelection(editText.length()); - } - builder.setPositiveButton(LocaleController.getString("Save", R.string.Save), (dialog, which) -> { - AndroidUtilities.hideKeyboard(editText); - call.setTitle(editText.getText().toString()); - builder.getDismissRunnable().run(); - }); - - final AlertDialog alertDialog = builder.create(); - alertDialog.setBackgroundColor(Theme.getColor(Theme.key_voipgroup_inviteMembersBackground)); - alertDialog.setOnShowListener(dialog -> makeFocusable(null, alertDialog, editText, true)); - alertDialog.setOnDismissListener(dialog -> AndroidUtilities.hideKeyboard(editText)); - alertDialog.show(); - alertDialog.setTextColor(Theme.getColor(Theme.key_voipgroup_nameText)); - editText.requestFocus(); - } else if (id == user_item) { - accountSwitchImageView.callOnClick(); - } - } - }); - actionBar.setAlpha(0.0f); actionBar.getBackButton().setScaleX(0.9f); actionBar.getBackButton().setScaleY(0.9f); @@ -2466,18 +3092,54 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter accountSwitchAvatarDrawable.setTextSize(AndroidUtilities.dp(12)); accountSwitchImageView = new BackupImageView(context); accountSwitchImageView.setRoundRadius(AndroidUtilities.dp(16)); - accountSwitchImageView.setOnClickListener(v -> JoinCallAlert.open(getContext(), -chat.id, accountInstance, null, JoinCallAlert.TYPE_DISPLAY, (peer1, hasFewPeers) -> { - if (VoIPService.getSharedInstance() == null || !hasFewPeers) { + accountSwitchImageView.setOnClickListener(v -> JoinCallAlert.open(getContext(), -currentChat.id, accountInstance, null, JoinCallAlert.TYPE_DISPLAY, selfPeer, (peer1, hasFewPeers, schedule) -> { + if (call == null) { return; } - TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); - VoIPService.getSharedInstance().setGroupCallPeer(peer1); + TLObject object; if (peer1 instanceof TLRPC.TL_inputPeerUser) { - userSwitchObject = accountInstance.getMessagesController().getUser(peer1.user_id); + object = accountInstance.getMessagesController().getUser(peer1.user_id); } else if (peer1 instanceof TLRPC.TL_inputPeerChat) { - userSwitchObject = accountInstance.getMessagesController().getChat(peer1.chat_id); + object = accountInstance.getMessagesController().getChat(peer1.chat_id); } else { - userSwitchObject = accountInstance.getMessagesController().getChat(peer1.channel_id); + object = accountInstance.getMessagesController().getChat(peer1.channel_id); + } + if (call.isScheduled()) { + getUndoView().showWithAction(0, UndoView.ACTION_VOIP_USER_CHANGED, object); + if (peer1 instanceof TLRPC.TL_inputPeerChannel) { + selfPeer = new TLRPC.TL_peerChannel(); + selfPeer.channel_id = peer1.channel_id; + } else if (peer1 instanceof TLRPC.TL_inputPeerUser) { + selfPeer = new TLRPC.TL_peerUser(); + selfPeer.user_id = peer1.user_id; + } else if (peer1 instanceof TLRPC.TL_inputPeerChat) { + selfPeer = new TLRPC.TL_peerChat(); + selfPeer.chat_id = peer1.chat_id; + } + this.schedulePeer = peer1; + TLRPC.ChatFull chatFull = accountInstance.getMessagesController().getChatFull(currentChat.id); + if (chatFull != null) { + chatFull.groupcall_default_join_as = selfPeer; + if (chatFull instanceof TLRPC.TL_chatFull) { + chatFull.flags |= 32768; + } else { + chatFull.flags |= 67108864; + } + } + TLRPC.TL_phone_saveDefaultGroupCallJoinAs req = new TLRPC.TL_phone_saveDefaultGroupCallJoinAs(); + req.peer = MessagesController.getInputPeer(currentChat); + req.join_as = peer1; + accountInstance.getConnectionsManager().sendRequest(req, (response, error) -> { + + }); + updateItems(); + } else { + if (VoIPService.getSharedInstance() == null || !hasFewPeers) { + return; + } + TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); + VoIPService.getSharedInstance().setGroupCallPeer(peer1); + userSwitchObject = object; } })); @@ -2489,6 +3151,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter otherItem.setDelegate(id -> actionBar.getActionBarMenuOnItemClick().onItemClick(id)); otherItem.setBackgroundDrawable(Theme.createSelectorDrawable(Theme.getColor(Theme.key_voipgroup_actionBarItemsSelector), 6)); otherItem.setOnClickListener(v -> { + if (call == null) { + return; + } if (call.call.join_muted) { everyoneItem.setColors(Theme.getColor(Theme.key_voipgroup_actionBarItems), Theme.getColor(Theme.key_voipgroup_actionBarItems)); everyoneItem.setChecked(false); @@ -2534,7 +3199,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter textView.setSingleLine(true); textView.setEllipsize(TextUtils.TruncateAt.END); textView.setOnClickListener(v -> { - if (call.recording) { + if (call != null && call.recording) { showRecordHint(textView); } }); @@ -2606,31 +3271,38 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter permissionItem.setColors(Theme.getColor(Theme.key_voipgroup_actionBarItems), Theme.getColor(Theme.key_voipgroup_actionBarItems)); recordItem.setColors(Theme.getColor(Theme.key_voipgroup_actionBarItems), Theme.getColor(Theme.key_voipgroup_actionBarItems)); + if (call != null) { + initCreatedGroupCall(); + } + listAdapter.notifyDataSetChanged(); oldCount = listAdapter.getItemCount(); - actionBar.setSubtitle(LocaleController.formatPluralString("Participants", call.call.participants_count + (listAdapter.addSelfToCounter() ? 1 : 0))); - actionBar.setTitleRightMargin(AndroidUtilities.dp(48) * 2); - - call.saveActiveDates(); - VoIPService.getSharedInstance().registerStateListener(this); updateItems(); updateSpeakerPhoneIcon(false); updateState(false, false); + updateScheduleUI(false); setColorProgress(0.0f); leaveBackgroundPaint.setColor(Theme.getColor(Theme.key_voipgroup_leaveButton)); updateTitle(false); actionBar.getTitleTextView().setOnClickListener(v -> { - if (call.recording) { + if (call != null && call.recording) { showRecordHint(actionBar.getTitleTextView()); } }); avatarPagerIndicator = new AvatarPreviewPagerIndicator(context); - avatarsViewPager = new ProfileGalleryView(context, actionBar, listView, avatarPagerIndicator); + avatarsViewPager = new ProfileGalleryView(context, actionBar, listView, avatarPagerIndicator) { + @Override + public void invalidate() { + super.invalidate(); + containerView.invalidate(); + } + }; + avatarsViewPager.setInvalidateWithParent(true); avatarPagerIndicator.setProfileGalleryView(avatarsViewPager); avatarPreviewContainer = new FrameLayout(context) { @@ -2661,8 +3333,8 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter scrimView.getAvatarImageView().setRoundRadius(scrimView.getAvatarImageView().getMeasuredHeight() / 2); canvas.restore(); } - avatarsViewPager.setAlpha(progressToAvatarPreview); } + avatarsViewPager.setAlpha(progressToAvatarPreview); path.reset(); rectF.set(0, 0, getMeasuredHeight(), getMeasuredWidth()); @@ -2672,6 +3344,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter super.dispatchDraw(canvas); canvas.restore(); } + + @Override + public void invalidate() { + super.invalidate(); + containerView.invalidate(); + } }; avatarPreviewContainer.setVisibility(View.GONE); @@ -2695,12 +3373,193 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } }); - blurredView = new View(context); + blurredView = new View(context) { + @Override + public void setAlpha(float alpha) { + if (getAlpha() != alpha) { + super.setAlpha(alpha); + checkContentOverlayed(); + } + } + }; containerView.addView(blurredView); avatarPreviewContainer.addView(avatarsViewPager, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); avatarPreviewContainer.addView(avatarPagerIndicator, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, 0, 0, 0, 0, 0)); containerView.addView(avatarPreviewContainer, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, 0, 14, 14, 14, 14)); + + ViewGroup decorView; + if (Build.VERSION.SDK_INT >= 21) { + decorView = (ViewGroup) getWindow().getDecorView(); + } else { + decorView = containerView; + } + pinchToZoomHelper = new PinchToZoomHelper(decorView) { + @Override + protected void invalidateViews() { + super.invalidateViews(); + for (int i = 0; i < avatarsViewPager.getChildCount(); i++) { + avatarsViewPager.getChildAt(i).invalidate(); + } + } + + @Override + protected void drawOverlays(Canvas canvas, float alpha, float parentOffsetX, float parentOffsetY, float clipTop, float clipBottom) { + if (alpha > 0) { + float x = avatarPreviewContainer.getX() + containerView.getX(); + float y = avatarPreviewContainer.getY() + containerView.getY(); + AndroidUtilities.rectTmp.set(x, y, x + avatarsViewPager.getMeasuredWidth(), y + avatarsViewPager.getMeasuredHeight()); + canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG); + + canvas.translate(x, y); + avatarPreviewContainer.draw(canvas); + + canvas.restore(); + } + } + }; + pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { + + @Override + public void onZoomStarted(MessageObject messageObject) { + listView.cancelClickRunnables(true); + pinchToZoomHelper.getPhotoImage().setRoundRadius(AndroidUtilities.dp(13), AndroidUtilities.dp(13), 0, 0); + containerView.invalidate(); + } + + @Override + public void onZoomFinished(MessageObject messageObject) { + containerView.invalidate(); + } + }); + avatarsViewPager.setPinchToZoomHelper(pinchToZoomHelper); + } + + private void checkContentOverlayed() { + boolean overlayed = !avatarPriviewTransitionInProgress && blurredView.getVisibility() == View.VISIBLE && blurredView.getAlpha() == 1f;; + if (contentFullyOverlayed != overlayed) { + contentFullyOverlayed = overlayed; + buttonsContainer.invalidate(); + containerView.invalidate(); + listView.invalidate(); + } + }; + + private void updateScheduleUI(boolean animation) { + if ((scheduleTimerContainer == null || call != null) && scheduleAnimator == null) { + scheduleButtonsScale = 1.0f; + switchToButtonInt2 = 1.0f; + switchToButtonProgress = 1.0f; + if (scheduleTimerContainer == null) { + return; + } + } + if (!animation) { + AndroidUtilities.cancelRunOnUIThread(updateSchedeulRunnable); + updateSchedeulRunnable.run(); + if (call == null || call.isScheduled()) { + listView.setVisibility(View.INVISIBLE); + } else { + listView.setVisibility(View.VISIBLE); + } + leaveItem.setText(LocaleController.getString("VoipGroupCancelChat", R.string.VoipGroupCancelChat)); + } + float scheduleButtonsScale2; + float alpha; + if (switchToButtonProgress > 0.6f) { + scheduleButtonsScale = scheduleButtonsScale2 = 1.05f - CubicBezierInterpolator.DEFAULT.getInterpolation((switchToButtonProgress - 0.6f) / 0.4f) * 0.05f; + switchToButtonInt2 = 1.0f; + alpha = 1.0f; + } else { + scheduleButtonsScale = 1.0f + CubicBezierInterpolator.DEFAULT.getInterpolation(switchToButtonProgress / 0.6f) * 0.05f; + switchToButtonInt2 = CubicBezierInterpolator.DEFAULT.getInterpolation(switchToButtonProgress / 0.6f); + scheduleButtonsScale2 = 1.05f * CubicBezierInterpolator.DEFAULT.getInterpolation(switchToButtonProgress / 0.6f); + alpha = switchToButtonProgress / 0.6f; + } + + float reversedAlpha = 1.0f - alpha; + leaveButton.setAlpha(alpha); + soundButton.setAlpha(alpha * (soundButton.isEnabled() ? 1.0f : 0.5f)); + muteButton.setAlpha(alpha); + scheduleTimerContainer.setAlpha(reversedAlpha); + scheduleStartInTextView.setAlpha(alpha); + scheduleStartAtTextView.setAlpha(alpha); + scheduleTimeTextView.setAlpha(alpha); + muteLabel[0].setAlpha(alpha); + muteSubLabel[0].setAlpha(alpha); + scheduleTimeTextView.setScaleX(scheduleButtonsScale2); + scheduleTimeTextView.setScaleY(scheduleButtonsScale2); + leaveButton.setScaleX(scheduleButtonsScale2); + leaveButton.setScaleY(scheduleButtonsScale2); + soundButton.setScaleX(scheduleButtonsScale2); + soundButton.setScaleY(scheduleButtonsScale2); + muteButton.setScaleX(scheduleButtonsScale2); + muteButton.setScaleY(scheduleButtonsScale2); + scheduleButtonTextView.setScaleX(reversedAlpha); + scheduleButtonTextView.setScaleY(reversedAlpha); + scheduleButtonTextView.setAlpha(reversedAlpha); + scheduleInfoTextView.setAlpha(reversedAlpha); + otherItem.setAlpha(alpha); + int newVisibility = reversedAlpha == 0.0f ? View.INVISIBLE : View.VISIBLE; + if (newVisibility != scheduleTimerContainer.getVisibility()) { + scheduleTimerContainer.setVisibility(newVisibility); + scheduleButtonTextView.setVisibility(newVisibility); + } + } + + private void initCreatedGroupCall() { + if (callInitied) { + return; + } + VoIPService service = VoIPService.getSharedInstance(); + if (service == null) { + return; + } + callInitied = true; + oldParticipants.addAll(call.sortedParticipants); + oldInvited.addAll(call.invitedUsers); + currentCallState = service.getCallState(); + if (call == null) { + call = service.groupCall; + } + actionBar.setSubtitle(LocaleController.formatPluralString("Participants", call.call.participants_count + (listAdapter.addSelfToCounter() ? 1 : 0))); + actionBar.setTitleRightMargin(AndroidUtilities.dp(48) * 2); + call.saveActiveDates(); + VoIPService.getSharedInstance().registerStateListener(this); + if (scheduleTimeTextView != null && scheduleTimeTextView.getVisibility() == View.VISIBLE) { + leaveButton.setData(R.drawable.calls_decline, 0xffffffff, Theme.getColor(Theme.key_voipgroup_leaveButton), 0.3f, false, LocaleController.getString("VoipGroupLeave", R.string.VoipGroupLeave), false, true); + updateSpeakerPhoneIcon(true); + leaveItem.setText(LocaleController.getString("VoipGroupEndChat", R.string.VoipGroupEndChat)); + listView.setVisibility(View.VISIBLE); + pipItem.setVisibility(View.VISIBLE); + AnimatorSet animatorSet = new AnimatorSet(); + animatorSet.playTogether( + ObjectAnimator.ofFloat(listView, View.ALPHA, 0.0f, 1.0f), + ObjectAnimator.ofFloat(listView, View.TRANSLATION_Y, AndroidUtilities.dp(200), 0.0f), + ObjectAnimator.ofFloat(scheduleTimeTextView, View.SCALE_X, 0.0f), + ObjectAnimator.ofFloat(scheduleTimeTextView, View.SCALE_Y, 0.0f), + ObjectAnimator.ofFloat(scheduleTimeTextView, View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(scheduleStartInTextView, View.SCALE_X, 0.0f), + ObjectAnimator.ofFloat(scheduleStartInTextView, View.SCALE_Y, 0.0f), + ObjectAnimator.ofFloat(scheduleStartInTextView, View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(scheduleStartAtTextView, View.SCALE_X, 0.0f), + ObjectAnimator.ofFloat(scheduleStartAtTextView, View.SCALE_Y, 0.0f), + ObjectAnimator.ofFloat(scheduleStartAtTextView, View.ALPHA, 0.0f), + ObjectAnimator.ofFloat(pipItem, View.SCALE_X, 0.0f, 1.0f), + ObjectAnimator.ofFloat(pipItem, View.SCALE_Y, 0.0f, 1.0f), + ObjectAnimator.ofFloat(pipItem, View.ALPHA, 0.0f, 1.0f)); + animatorSet.setInterpolator(CubicBezierInterpolator.EASE_OUT); + animatorSet.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + scheduleTimeTextView.setVisibility(View.INVISIBLE); + scheduleStartAtTextView.setVisibility(View.INVISIBLE); + scheduleStartInTextView.setVisibility(View.INVISIBLE); + } + }); + animatorSet.setDuration(300); + animatorSet.start(); + } } @Override @@ -2748,11 +3607,19 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateTitle(boolean animated) { + if (call == null) { + titleTextView.setText(LocaleController.getString("VoipGroupScheduleVoiceChat", R.string.VoipGroupScheduleVoiceChat), animated); + return; + } if (!TextUtils.isEmpty(call.call.title)) { if (!call.call.title.equals(actionBar.getTitle())) { if (animated) { actionBar.setTitleAnimated(call.call.title, true, 180); - actionBar.getTitleTextView().setOnClickListener(v -> showRecordHint(actionBar.getTitleTextView())); + actionBar.getTitleTextView().setOnClickListener(v -> { + if (call != null && call.recording) { + showRecordHint(actionBar.getTitleTextView()); + } + }); } else { actionBar.setTitle(call.call.title); } @@ -2762,7 +3629,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (!currentChat.title.equals(actionBar.getTitle())) { if (animated) { actionBar.setTitleAnimated(currentChat.title, true, 180); - actionBar.getTitleTextView().setOnClickListener(v -> showRecordHint(actionBar.getTitleTextView())); + actionBar.getTitleTextView().setOnClickListener(v -> { + if (call != null && call.recording) { + showRecordHint(actionBar.getTitleTextView()); + } + }); } else { actionBar.setTitle(currentChat.title); } @@ -2799,7 +3670,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter listViewBackgroundPaint.setColor(color); listView.setGlowColor(color); - if (muteButtonState == MUTE_BUTTON_STATE_CONNECTING || muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { + if (muteButtonState == MUTE_BUTTON_STATE_CONNECTING || isGradientState(muteButtonState)) { muteButton.invalidate(); } @@ -2855,6 +3726,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter openShareAlert(true, null, url, copy); } } else { + if (call == null) { + return; + } for (int a = 0; a < 2; a++) { int num = a; TLRPC.TL_phone_exportGroupCallInvite req = new TLRPC.TL_phone_exportGroupCallInvite(); @@ -2877,7 +3751,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (ChatObject.canManageCalls(currentChat) && !call.call.join_muted) { invites[0] = null; } - openShareAlert(false, invites[0], invites[1], copy); + if (invites[0] == null && invites[1] == null && !TextUtils.isEmpty(currentChat.username)) { + openShareAlert(true, null, accountInstance.getMessagesController().linkPrefix + "/" + currentChat.username, copy); + } else { + openShareAlert(false, invites[0], invites[1], copy); + } })); } } @@ -2935,6 +3813,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void inviteUserToCall(int id, boolean shouldAdd) { + if (call == null) { + return; + } TLRPC.User user = accountInstance.getMessagesController().getUser(id); if (user == null) { return; @@ -2994,18 +3875,14 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateLayout(boolean animated) { - if (listView.getChildCount() <= 0) { - listView.setTopGlowOffset((int) (scrollOffsetY = listView.getPaddingTop())); - containerView.invalidate(); - return; - } float minY = Integer.MAX_VALUE; - for (int a = 0, N = listView.getChildCount(); a < N; a++) { + int N = listView.getChildCount(); + for (int a = 0; a < N; a++) { View child = listView.getChildAt(a); minY = Math.min(minY, itemAnimator.getTargetY(child)); } if (minY < 0 || minY == Integer.MAX_VALUE) { - minY = 0; + minY = N != 0 ? 0 : listView.getPaddingTop(); } boolean show = minY <= ActionBar.getCurrentActionBarHeight() - AndroidUtilities.dp(14); @@ -3083,6 +3960,9 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter menuItemsContainer.setTranslationY(Math.max(AndroidUtilities.dp(4), scrollOffsetY - AndroidUtilities.dp(53) - diff)); titleTextView.setTranslationY(Math.max(AndroidUtilities.dp(4), scrollOffsetY - AndroidUtilities.dp(44) - diff)); + if (scheduleTimerContainer != null) { + scheduleTimerContainer.setTranslationY(Math.max(AndroidUtilities.dp(4), scrollOffsetY - AndroidUtilities.dp(44) - diff)); + } containerView.invalidate(); } } @@ -3101,11 +3981,23 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateState(boolean animated, boolean selfUpdated) { + if (call == null || call.isScheduled()) { + int state; + if (ChatObject.canManageCalls(currentChat)) { + state = MUTE_BUTTON_STATE_START_NOW; + } else { + state = call.call.schedule_start_subscribed ? MUTE_BUTTON_STATE_CANCEL_REMINDER : MUTE_BUTTON_STATE_SET_REMINDER; + } + updateMuteButton(state, animated); + leaveButton.setData(R.drawable.calls_decline, 0xffffffff, Theme.getColor(Theme.key_voipgroup_leaveButton), 0.3f, false, LocaleController.getString("Close", R.string.Close), false, false); + updateScheduleUI(false); + return; + } VoIPService voIPService = VoIPService.getSharedInstance(); if (voIPService == null) { return; } - if (!voIPService.isSwitchingStream() && (currentCallState == VoIPService.STATE_WAIT_INIT || currentCallState == VoIPService.STATE_WAIT_INIT_ACK || currentCallState == VoIPService.STATE_CREATING || currentCallState == VoIPService.STATE_RECONNECTING)) { + if (!voIPService.isSwitchingStream() && (creatingServiceTime == 0 || Math.abs(SystemClock.elapsedRealtime() - creatingServiceTime) > 3000) && (currentCallState == VoIPService.STATE_WAIT_INIT || currentCallState == VoIPService.STATE_WAIT_INIT_ACK || currentCallState == VoIPService.STATE_CREATING || currentCallState == VoIPService.STATE_RECONNECTING)) { cancelMutePress(); updateMuteButton(MUTE_BUTTON_STATE_CONNECTING, animated); } else { @@ -3155,7 +4047,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } VoIPService service = VoIPService.getSharedInstance(); if (service == null) { + soundButton.setData(R.drawable.msg_voiceshare, Color.WHITE, 0, 0.3f, true, LocaleController.getString("VoipChatShare", R.string.VoipChatShare), false, animated); + soundButton.setEnabled(!TextUtils.isEmpty(currentChat.username) || ChatObject.hasAdminRights(currentChat) && ChatObject.canAddUsers(currentChat), false); + soundButton.setChecked(true, false); return; + } else { + soundButton.setEnabled(true, animated); } boolean bluetooth = service.isBluetoothOn() || service.isBluetoothWillOn(); @@ -3189,24 +4086,71 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter boolean changed; boolean mutedByAdmin = false; - if (state == MUTE_BUTTON_STATE_UNMUTE) { + if (state == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + newText = LocaleController.getString("VoipGroupCancelReminder", R.string.VoipGroupCancelReminder); + newSubtext = ""; + changed = bigMicDrawable.setCustomEndFrame(202); + } else if (state == MUTE_BUTTON_STATE_SET_REMINDER) { + newText = LocaleController.getString("VoipGroupSetReminder", R.string.VoipGroupSetReminder); + newSubtext = ""; + changed = bigMicDrawable.setCustomEndFrame(344); + } else if (state == MUTE_BUTTON_STATE_START_NOW) { + newText = LocaleController.getString("VoipGroupStartNow", R.string.VoipGroupStartNow); + newSubtext = ""; + changed = bigMicDrawable.setCustomEndFrame(377); + } else if (state == MUTE_BUTTON_STATE_UNMUTE) { newText = LocaleController.getString("VoipGroupUnmute", R.string.VoipGroupUnmute); newSubtext = LocaleController.getString("VoipHoldAndTalk", R.string.VoipHoldAndTalk); - changed = bigMicDrawable.setCustomEndFrame(muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN ? 21 : 64); + if (muteButtonState == MUTE_BUTTON_STATE_CONNECTING) { + int endFrame = bigMicDrawable.getCustomEndFrame(); + if (endFrame == 136 || endFrame == 173 || endFrame == 274 || endFrame == 311) { + changed = bigMicDrawable.setCustomEndFrame(99); + } else { + changed = false; + } + } else if (muteButtonState == MUTE_BUTTON_STATE_START_NOW) { + changed = bigMicDrawable.setCustomEndFrame(404); + } else if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(376); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(237); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN) { + changed = bigMicDrawable.setCustomEndFrame(36); + } else { + changed = bigMicDrawable.setCustomEndFrame(99); + } } else if (state == MUTE_BUTTON_STATE_MUTE) { newText = LocaleController.getString("VoipTapToMute", R.string.VoipTapToMute); newSubtext = ""; - changed = bigMicDrawable.setCustomEndFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 64 : 42); + changed = bigMicDrawable.setCustomEndFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 99 : 69); } else if (state == MUTE_BUTTON_STATE_RAISED_HAND) { newText = LocaleController.getString("VoipMutedTapedForSpeak", R.string.VoipMutedTapedForSpeak); newSubtext = LocaleController.getString("VoipMutedTapedForSpeakInfo", R.string.VoipMutedTapedForSpeakInfo); - changed = bigMicDrawable.setCustomEndFrame(84); + changed = bigMicDrawable.setCustomEndFrame(136); } else { TLRPC.TL_groupCallParticipant participant = call.participants.get(MessageObject.getPeerId(selfPeer)); if (mutedByAdmin = participant != null && !participant.can_self_unmute && participant.muted && !ChatObject.canManageCalls(currentChat)) { - changed = bigMicDrawable.setCustomEndFrame(84); + if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(311); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(274); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTE) { + changed = bigMicDrawable.setCustomEndFrame(173); + } else { + changed = bigMicDrawable.setCustomEndFrame(136); + } } else { - changed = bigMicDrawable.setCustomEndFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 21 : 64); + if (muteButtonState == MUTE_BUTTON_STATE_START_NOW) { + changed = bigMicDrawable.setCustomEndFrame(404); + } else if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(376); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + changed = bigMicDrawable.setCustomEndFrame(237); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { + changed = bigMicDrawable.setCustomEndFrame(36); + } else { + changed = bigMicDrawable.setCustomEndFrame(99); + } } if (state == MUTE_BUTTON_STATE_CONNECTING) { newText = LocaleController.getString("Connecting", R.string.Connecting); @@ -3227,17 +4171,51 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (animated) { if (changed) { - if (state == MUTE_BUTTON_STATE_UNMUTE) { - bigMicDrawable.setCurrentFrame(muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN ? 0 : 42); + if (state == MUTE_BUTTON_STATE_START_NOW) { + bigMicDrawable.setCurrentFrame(376); + } else if (state == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + bigMicDrawable.setCurrentFrame(173); + } else if (state == MUTE_BUTTON_STATE_SET_REMINDER) { + bigMicDrawable.setCurrentFrame(311); + } else if (state == MUTE_BUTTON_STATE_UNMUTE) { + if (muteButtonState == MUTE_BUTTON_STATE_START_NOW) { + bigMicDrawable.setCurrentFrame(376); + } else if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + bigMicDrawable.setCurrentFrame(344); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + bigMicDrawable.setCurrentFrame(202); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN) { + bigMicDrawable.setCurrentFrame(0); + } else { + bigMicDrawable.setCurrentFrame(69); + } } else if (state == MUTE_BUTTON_STATE_MUTE) { - bigMicDrawable.setCurrentFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 42 : 21); + bigMicDrawable.setCurrentFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 69 : 36); } else if (state == MUTE_BUTTON_STATE_RAISED_HAND) { - bigMicDrawable.setCurrentFrame(63); + bigMicDrawable.setCurrentFrame(99); } else { if (mutedByAdmin) { - bigMicDrawable.setCurrentFrame(63); + if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + bigMicDrawable.setCurrentFrame(274); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + bigMicDrawable.setCurrentFrame(237); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTE) { + bigMicDrawable.setCurrentFrame(136); + } else { + bigMicDrawable.setCurrentFrame(99); + } } else { - bigMicDrawable.setCurrentFrame(muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND ? 0 : 42); + if (muteButtonState == MUTE_BUTTON_STATE_START_NOW) { + bigMicDrawable.setCurrentFrame(376); + } else if (muteButtonState == MUTE_BUTTON_STATE_CANCEL_REMINDER) { + bigMicDrawable.setCurrentFrame(344); + } else if (muteButtonState == MUTE_BUTTON_STATE_SET_REMINDER) { + bigMicDrawable.setCurrentFrame(202); + } else if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { + bigMicDrawable.setCurrentFrame(0); + } else { + bigMicDrawable.setCurrentFrame(69); + } } } } @@ -3302,7 +4280,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter colorsToSet[0] = Theme.getColor(Theme.key_voipgroup_muteButton2); colorsToSet[1] = AndroidUtilities.getOffsetColor(Theme.getColor(Theme.key_voipgroup_soundButtonActive2), Theme.getColor(Theme.key_voipgroup_soundButtonActive2Scrolled), colorProgress, 1.0f); colorsToSet[2] = Theme.getColor(Theme.key_voipgroup_soundButton2); - } else if (state == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || state == MUTE_BUTTON_STATE_RAISED_HAND) { + } else if (isGradientState(state)) { colorsToSet[0] = Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient3); colorsToSet[1] = Theme.getColor(Theme.key_voipgroup_mutedByAdminMuteButton); colorsToSet[2] = Theme.getColor(Theme.key_voipgroup_mutedByAdminMuteButtonDisabled); @@ -3327,6 +4305,25 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter recordHintView.showForView(view, true); } + private void showReminderHint() { + SharedPreferences preferences = MessagesController.getGlobalMainSettings(); + if (preferences.getBoolean("reminderhint", false)) { + return; + } + preferences.edit().putBoolean("reminderhint", true).commit(); + if (reminderHintView == null) { + reminderHintView = new HintView(getContext(), 8); + reminderHintView.setAlpha(0.0f); + reminderHintView.setVisibility(View.INVISIBLE); + reminderHintView.setShowingDuration(4000); + containerView.addView(reminderHintView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 19, 0, 19, 0)); + reminderHintView.setText(LocaleController.getString("VoipChatReminderHint", R.string.VoipChatReminderHint)); + reminderHintView.setBackgroundColor(0xea272f38, 0xffffffff); + } + reminderHintView.setExtraTranslationY(-AndroidUtilities.statusBarHeight); + reminderHintView.showForView(muteButton, true); + } + private void updateMuteButtonState(boolean animated) { muteButton.invalidate(); @@ -3335,7 +4332,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter if (muteButtonState == MUTE_BUTTON_STATE_CONNECTING) { states[muteButtonState].shader = null; } else { - if (muteButtonState == MUTE_BUTTON_STATE_MUTED_BY_ADMIN || muteButtonState == MUTE_BUTTON_STATE_RAISED_HAND) { + if (isGradientState(muteButtonState)) { states[muteButtonState].shader = new LinearGradient(0, 400, 400, 0, new int[]{Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient), Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient3), Theme.getColor(Theme.key_voipgroup_mutedByAdminGradient2)}, null, Shader.TileMode.CLAMP); } else if (muteButtonState == MUTE_BUTTON_STATE_MUTE) { states[muteButtonState].shader = new RadialGradient(200, 200, 200, new int[]{Theme.getColor(Theme.key_voipgroup_muteButton), Theme.getColor(Theme.key_voipgroup_muteButton3)}, null, Shader.TileMode.CLAMP); @@ -3433,7 +4430,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter builder.setCustomViewOffset(12); builder.setView(linearLayout); - + builder.setDialogButtonColorKey(Theme.key_voipgroup_listeningText); builder.setPositiveButton(LocaleController.getString("VoipGroupLeave", R.string.VoipGroupLeave), (dialogInterface, position) -> processOnLeave(call, cells[0].isChecked(), selfId, onLeave)); builder.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); if (fromOverlayWindow) { @@ -3489,6 +4486,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter return; } AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setDialogButtonColorKey(Theme.key_voipgroup_listeningText); TextView messageTextView = new TextView(getContext()); messageTextView.setTextColor(Theme.getColor(Theme.key_voipgroup_actionBarItems)); @@ -3509,11 +4507,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter String name; if (object instanceof TLRPC.User) { TLRPC.User user = (TLRPC.User) object; - imageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + imageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); name = UserObject.getFirstName(user); } else { TLRPC.Chat chat = (TLRPC.Chat) object; - imageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + imageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); name = chat.title; } @@ -3594,6 +4592,25 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } else if (option == 7) { voIPService.editCallMember(object, true, -1, false); updateMuteButton(MUTE_BUTTON_STATE_MUTED_BY_ADMIN, true); + } else if (option == 9) { + if (currentAvatarUpdater != null && currentAvatarUpdater.isUploadingImage()) { + return; + } + currentAvatarUpdater = new ImageUpdater(true); + currentAvatarUpdater.setOpenWithFrontfaceCamera(true); + currentAvatarUpdater.setForceDarkTheme(true); + currentAvatarUpdater.setSearchAvailable(false, true); + currentAvatarUpdater.parentFragment = parentActivity.getActionBarLayout().getLastFragment(); + currentAvatarUpdater.setDelegate(avatarUpdaterDelegate = new AvatarUpdaterDelegate(peerId)); + + TLRPC.User user = accountInstance.getUserConfig().getCurrentUser(); + currentAvatarUpdater.openMenu(user.photo != null && user.photo.photo_big != null && !(user.photo instanceof TLRPC.TL_userProfilePhotoEmpty), () -> accountInstance.getMessagesController().deleteUserPhoto(null), dialog -> { + + }); + } else if (option == 10) { + AlertsCreator.createChangeBioAlert(participant.about, peerId, getContext(), currentAccount); + } else if (option == 11) { + AlertsCreator.createChangeNameAlert(peerId, getContext(), currentAccount); } else { if (option == 5) { voIPService.editCallMember(object, true, -1, null); @@ -3666,7 +4683,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter LinearLayout buttonsLayout = new LinearLayout(getContext()); LinearLayout volumeLayout = !participant.muted_by_you ? new LinearLayout(getContext()) : null; - + currentOptionsLayout = buttonsLayout; LinearLayout linearLayout = new LinearLayout(getContext()) { @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @@ -3685,7 +4702,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter VolumeSlider volumeSlider = null; int color = AndroidUtilities.getOffsetColor(Theme.getColor(Theme.key_voipgroup_listViewBackgroundUnscrolled), Theme.getColor(Theme.key_voipgroup_listViewBackground), colorProgress, 1.0f); - if (!participant.muted_by_you && (!participant.muted || participant.can_self_unmute)) { + if (volumeLayout != null && !view.isSelfUser() && !participant.muted_by_you && (!participant.muted || participant.can_self_unmute)) { Drawable shadowDrawable = getContext().getResources().getDrawable(R.drawable.popup_fixed_alert).mutate(); shadowDrawable.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.MULTIPLY)); volumeLayout.setBackgroundDrawable(shadowDrawable); @@ -3743,10 +4760,27 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter isAdmin = peerId == -currentChat.id; } if (view.isSelfUser()) { - items.add(LocaleController.getString("VoipGroupCancelRaiseHand", R.string.VoipGroupCancelRaiseHand)); - icons.add(R.drawable.msg_handdown); - options.add(7); - showWithAvatarPreview = false; + if (view.isHandRaised()) { + items.add(LocaleController.getString("VoipGroupCancelRaiseHand", R.string.VoipGroupCancelRaiseHand)); + icons.add(R.drawable.msg_handdown); + options.add(7); + } + + items.add(view.hasAvatarSet() ? LocaleController.getString("VoipAddPhoto", R.string.VoipAddPhoto) : LocaleController.getString("VoipSetNewPhoto", R.string.VoipSetNewPhoto)); + icons.add(R.drawable.msg_addphoto); + options.add(9); + + if (peerId > 0) { + items.add(TextUtils.isEmpty(participant.about) ? LocaleController.getString("VoipAddBio", R.string.VoipAddBio) : LocaleController.getString("VoipEditBio", R.string.VoipEditBio)); + } else { + items.add(TextUtils.isEmpty(participant.about) ? LocaleController.getString("VoipAddDescription", R.string.VoipAddDescription) : LocaleController.getString("VoipEditDescription", R.string.VoipEditDescription)); + } + icons.add(TextUtils.isEmpty(participant.about) ? R.drawable.msg_addbio : R.drawable.msg_bio); + options.add(10); + + items.add(peerId > 0 ? LocaleController.getString("VoipEditName", R.string.VoipEditName) : LocaleController.getString("VoipEditTitle", R.string.VoipEditTitle)); + icons.add(R.drawable.msg_edit); + options.add(11); } else if (ChatObject.canManageCalls(currentChat)) { if (!isAdmin || !participant.muted) { if (!participant.muted || participant.can_self_unmute) { @@ -3798,7 +4832,6 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } - ActionBarMenuSubItem[] scrimPopupWindowItems = new ActionBarMenuSubItem[items.size()]; for (int a = 0, N = items.size(); a < N; a++) { ActionBarMenuSubItem cell = new ActionBarMenuSubItem(getContext(), a == 0, a == N - 1); if (options.get(a) != 2) { @@ -3810,15 +4843,22 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter cell.setTextAndIcon(items.get(a), icons.get(a)); buttonsLayout.addView(cell); final int i = a; + cell.setTag(options.get(a)); cell.setOnClickListener(v1 -> { if (i >= options.size()) { return; } - processSelectedOption(participant, MessageObject.getPeerId(participant.peer), options.get(i)); + TLRPC.TL_groupCallParticipant participant1 = call.participants.get(MessageObject.getPeerId(participant.peer)); + if (participant1 == null) { + participant1 = participant; + } + processSelectedOption(participant1, MessageObject.getPeerId(participant1.peer), options.get(i)); if (scrimPopupWindow != null) { scrimPopupWindow.dismiss(); } else { - dismissAvatarPreview(true); + if (options.get(i) != 9 && options.get(i) != 10 && options.get(i) != 11) { + dismissAvatarPreview(true); + } } }); } @@ -3840,12 +4880,12 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter final ImageLocation thumbLocation; if (peerId > 0) { TLRPC.User currentUser = accountInstance.getMessagesController().getUser(peerId); - imageLocation = ImageLocation.getForUser(currentUser, true); - thumbLocation = ImageLocation.getForUser(currentUser, false); + imageLocation = ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_BIG); + thumbLocation = ImageLocation.getForUserOrChat(currentUser, ImageLocation.TYPE_SMALL); } else { TLRPC.Chat currentChat = accountInstance.getMessagesController().getChat(-peerId); - imageLocation = ImageLocation.getForChat(currentChat, true); - thumbLocation = ImageLocation.getForChat(currentChat, false); + imageLocation = ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_BIG); + thumbLocation = ImageLocation.getForUserOrChat(currentChat, ImageLocation.TYPE_SMALL); } if (imageLocation == null) { @@ -3853,7 +4893,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } else { avatarsViewPager.setParentAvatarImage(scrimView.getAvatarImageView()); avatarsViewPager.setData(peerId); + avatarsViewPager.setCreateThumbFromParent(true); avatarsViewPager.initIfEmpty(imageLocation, thumbLocation); + if (MessageObject.getPeerId(selfPeer) == peerId && currentAvatarUpdater != null && avatarUpdaterDelegate != null && avatarUpdaterDelegate.avatar != null) { + avatarsViewPager.addUploadingImage(avatarUpdaterDelegate.uploadingImageLocation, ImageLocation.getForLocal(avatarUpdaterDelegate.avatar)); + } } if (showWithAvatarPreview) { @@ -3977,11 +5021,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter containerView.invalidate(); avatarsViewPager.setRoundRadius((int) (fromRadius * (1f - progressToAvatarPreview)), (int) (fromRadius * (1f - progressToAvatarPreview))); }); - popupAnimationIndex = NotificationCenter.getInstance(currentAccount).setAnimationInProgress(popupAnimationIndex, new int[]{NotificationCenter.dialogPhotosLoaded, NotificationCenter.fileDidLoad, NotificationCenter.messagesDidLoad}); + popupAnimationIndex = accountInstance.getNotificationCenter().setAnimationInProgress(popupAnimationIndex, new int[]{NotificationCenter.dialogPhotosLoaded, NotificationCenter.fileDidLoad, NotificationCenter.messagesDidLoad}); valueAnimator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { - NotificationCenter.getInstance(currentAccount).onAnimationFinish(popupAnimationIndex); + accountInstance.getNotificationCenter().onAnimationFinish(popupAnimationIndex); avatarPriviewTransitionInProgress = false; progressToAvatarPreview = enter ? 1f : 0f; if (!enter) { @@ -4012,6 +5056,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter avatarPreviewContainer.setTranslationX(1f); avatarPreviewContainer.setTranslationY(1f); } + checkContentOverlayed(); containerView.invalidate(); avatarsViewPager.invalidate(); listView.invalidate(); @@ -4020,6 +5065,8 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter valueAnimator.setInterpolator(CubicBezierInterpolator.DEFAULT); valueAnimator.setDuration(220); valueAnimator.start(); + + checkContentOverlayed(); } private void dismissAvatarPreview(boolean animated) { @@ -4048,6 +5095,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter delayedGroupCallUpdated = false; applyCallParticipantUpdates(); } + checkContentOverlayed(); } } @@ -4081,7 +5129,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } private void updateRows() { - if (delayedGroupCallUpdated) { + if (call == null || call.isScheduled() || delayedGroupCallUpdated) { return; } rowsCount = 0; @@ -4188,7 +5236,11 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter GroupCallTextCell textCell = (GroupCallTextCell) holder.itemView; int color = AndroidUtilities.getOffsetColor(Theme.getColor(Theme.key_voipgroup_lastSeenTextUnscrolled), Theme.getColor(Theme.key_voipgroup_lastSeenText), actionBar.getTag() != null ? 1.0f : 0.0f, 1.0f); textCell.setColors(color, color); - textCell.setTextAndIcon(LocaleController.getString("VoipGroupInviteMember", R.string.VoipGroupInviteMember), R.drawable.actions_addmember2, true); + if (ChatObject.isChannel(currentChat) && !currentChat.megagroup && !TextUtils.isEmpty(currentChat.username)) { + textCell.setTextAndIcon(LocaleController.getString("VoipGroupShareLink", R.string.VoipGroupShareLink), R.drawable.msg_link, true); + } else { + textCell.setTextAndIcon(LocaleController.getString("VoipGroupInviteMember", R.string.VoipGroupInviteMember), R.drawable.actions_addmember2, true); + } break; case 1: { GroupCallUserCell userCell = (GroupCallUserCell) holder.itemView; @@ -4208,7 +5260,13 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } } if (participant != null) { - userCell.setData(accountInstance, participant, call, MessageObject.getPeerId(selfPeer)); + int peerId = MessageObject.getPeerId(participant.peer); + int selfPeerId = MessageObject.getPeerId(selfPeer); + TLRPC.FileLocation uploadingAvatar = (peerId == selfPeerId && avatarUpdaterDelegate != null) ? avatarUpdaterDelegate.avatar : null; + float uploadingProgress = (uploadingAvatar != null) ? avatarUpdaterDelegate.uploadingProgress : 1f; + boolean animated = userCell.getParticipant() != null && MessageObject.getPeerId(userCell.getParticipant().peer) == peerId; + userCell.setData(accountInstance, participant, call, selfPeerId, uploadingAvatar); + userCell.setUploadProgress(uploadingProgress, animated); } break; } @@ -4241,8 +5299,7 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter public boolean isEnabled(RecyclerView.ViewHolder holder) { int type = holder.getItemViewType(); if (type == 1) { - GroupCallUserCell userCell = (GroupCallUserCell) holder.itemView; - return !userCell.isSelfUser() || userCell.isHandRaised(); + return true; } else if (type == 3) { return false; } @@ -4406,4 +5463,177 @@ public class GroupCallActivity extends BottomSheet implements NotificationCenter } super.onBackPressed(); } + + private class AvatarUpdaterDelegate implements ImageUpdater.ImageUpdaterDelegate { + + public float uploadingProgress; + private TLRPC.FileLocation avatarBig; + private TLRPC.FileLocation avatar; + private ImageLocation uploadingImageLocation; + + private final int peerId; + + private AvatarUpdaterDelegate(int peerId) { + this.peerId = peerId; + } + + @Override + public void didUploadPhoto(TLRPC.InputFile photo, TLRPC.InputFile video, double videoStartTimestamp, String videoPath, TLRPC.PhotoSize bigSize, TLRPC.PhotoSize smallSize) { + AndroidUtilities.runOnUIThread(() -> { + if (photo != null || video != null) { + if (peerId > 0) { + TLRPC.TL_photos_uploadProfilePhoto req = new TLRPC.TL_photos_uploadProfilePhoto(); + if (photo != null) { + req.file = photo; + req.flags |= 1; + } + if (video != null) { + req.video = video; + req.flags |= 2; + req.video_start_ts = videoStartTimestamp; + req.flags |= 4; + } + + accountInstance.getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + if (uploadingImageLocation != null) { + avatarsViewPager.removeUploadingImage(uploadingImageLocation); + uploadingImageLocation = null; + } + if (error == null) { + TLRPC.User user = accountInstance.getMessagesController().getUser(accountInstance.getUserConfig().getClientUserId()); + if (user == null) { + user = accountInstance.getUserConfig().getCurrentUser(); + if (user == null) { + return; + } + accountInstance.getMessagesController().putUser(user, false); + } else { + accountInstance.getUserConfig().setCurrentUser(user); + } + TLRPC.TL_photos_photo photos_photo = (TLRPC.TL_photos_photo) response; + ArrayList sizes = photos_photo.photo.sizes; + TLRPC.PhotoSize small = FileLoader.getClosestPhotoSizeWithSize(sizes, 150); + TLRPC.PhotoSize big = FileLoader.getClosestPhotoSizeWithSize(sizes, 800); + TLRPC.VideoSize videoSize = photos_photo.photo.video_sizes.isEmpty() ? null : photos_photo.photo.video_sizes.get(0); + + user.photo = new TLRPC.TL_userProfilePhoto(); + user.photo.photo_id = photos_photo.photo.id; + if (small != null) { + user.photo.photo_small = small.location; + } + if (big != null) { + user.photo.photo_big = big.location; + } + + if (small != null && avatar != null) { + File destFile = FileLoader.getPathToAttach(small, true); + File src = FileLoader.getPathToAttach(avatar, true); + src.renameTo(destFile); + String oldKey = avatar.volume_id + "_" + avatar.local_id + "@50_50"; + String newKey = small.location.volume_id + "_" + small.location.local_id + "@50_50"; + ImageLoader.getInstance().replaceImageInCache(oldKey, newKey, ImageLocation.getForUser(user, ImageLocation.TYPE_SMALL), false); + } + + if (big != null && avatarBig != null) { + File destFile = FileLoader.getPathToAttach(big, true); + File src = FileLoader.getPathToAttach(avatarBig, true); + src.renameTo(destFile); + } + if (videoSize != null && videoPath != null) { + File destFile = FileLoader.getPathToAttach(videoSize, "mp4", true); + File src = new File(videoPath); + src.renameTo(destFile); + } + + accountInstance.getMessagesStorage().clearUserPhotos(user.id); + ArrayList users = new ArrayList<>(); + users.add(user); + accountInstance.getMessagesStorage().putUsersAndChats(users, null, false, true); + + final ImageLocation imageLocation; + final ImageLocation thumbLocation; + TLRPC.User currentUser = accountInstance.getMessagesController().getUser(peerId); + imageLocation = ImageLocation.getForUser(currentUser, ImageLocation.TYPE_BIG); + thumbLocation = ImageLocation.getForUser(currentUser, ImageLocation.TYPE_SMALL); + ImageLocation thumb = ImageLocation.getForLocal(avatarBig); + if (thumb == null) { + thumb = ImageLocation.getForLocal(avatar); + } else { + thumb = thumbLocation; + } + avatarsViewPager.setCreateThumbFromParent(false); + avatarsViewPager.initIfEmpty(imageLocation, thumb); + avatar = null; + avatarBig = null; + AndroidUtilities.updateVisibleRows(listView); + updateAvatarUploadingProgress(1f); + } + + accountInstance.getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_ALL); + accountInstance.getNotificationCenter().postNotificationName(NotificationCenter.mainUserInfoChanged); + accountInstance.getUserConfig().saveConfig(true); + })); + } else { + accountInstance.getMessagesController().changeChatAvatar(-peerId, null, photo, video, videoStartTimestamp, videoPath, smallSize.location, bigSize.location, () -> { + if (uploadingImageLocation != null) { + avatarsViewPager.removeUploadingImage(uploadingImageLocation); + uploadingImageLocation = null; + } + + TLRPC.Chat currentChat = accountInstance.getMessagesController().getChat(-peerId); + ImageLocation imageLocation = ImageLocation.getForChat(currentChat, ImageLocation.TYPE_BIG); + ImageLocation thumbLocation = ImageLocation.getForChat(currentChat, ImageLocation.TYPE_SMALL); + ImageLocation thumb = ImageLocation.getForLocal(avatarBig); + if (thumb == null) { + thumb = ImageLocation.getForLocal(avatar); + } else { + thumb = thumbLocation; + } + avatarsViewPager.setCreateThumbFromParent(false); + avatarsViewPager.initIfEmpty(imageLocation, thumb); + avatar = null; + avatarBig = null; + AndroidUtilities.updateVisibleRows(listView); + updateAvatarUploadingProgress(1f); + }); + } + } else { + avatar = smallSize.location; + avatarBig = bigSize.location; + uploadingImageLocation = ImageLocation.getForLocal(avatarBig); + avatarsViewPager.addUploadingImage(uploadingImageLocation, ImageLocation.getForLocal(avatar)); + AndroidUtilities.updateVisibleRows(listView); + } + }); + } + + @Override + public void didStartUpload(boolean isVideo) { + + } + + @Override + public void onUploadProgressChanged(float progress) { + avatarsViewPager.setUploadProgress(uploadingImageLocation, progress); + updateAvatarUploadingProgress(progress); + } + + public void updateAvatarUploadingProgress(float progress) { + uploadingProgress = progress; + if (listView == null) { + return; + } + for (int i = 0; i < listView.getChildCount(); i++) { + View child = listView.getChildAt(i); + if (child instanceof GroupCallUserCell) { + GroupCallUserCell cell = ((GroupCallUserCell) child); + if (cell.isSelfUser()) { + cell.setUploadProgress(progress, true); + } + } + } + } + } + + } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java index e167d5808..efc3e1523 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/GroupCreateFinalActivity.java @@ -803,7 +803,7 @@ public class GroupCreateFinalActivity extends BaseFragment implements Notificati presentFragment(new ChatActivity(args2), true); } if (inputPhoto != null || inputVideo != null) { - getMessagesController().changeChatAvatar(chat_id, null, inputPhoto, inputVideo, videoTimestamp, inputVideoPath, avatar, avatarBig); + getMessagesController().changeChatAvatar(chat_id, null, inputPhoto, inputVideo, videoTimestamp, inputVideoPath, avatar, avatarBig, null); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java index 3fdbf4626..1fb882579 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LaunchActivity.java @@ -183,7 +183,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa private FrameLayout shadowTabletSide; private View backgroundTablet; private FrameLayout frameLayout; - protected DrawerLayoutContainer drawerLayoutContainer; + public DrawerLayoutContainer drawerLayoutContainer; private DrawerLayoutAdapter drawerLayoutAdapter; private PasscodeView passcodeView; private TermsOfServiceView termsOfServiceView; @@ -584,6 +584,9 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa presentFragment(new ActionIntroActivity(ActionIntroActivity.ACTION_TYPE_NEARBY_LOCATION_ENABLED)); } drawerLayoutContainer.closeDrawer(false); + } else if (id == 13) { + Browser.openUrl(LaunchActivity.this, LocaleController.getString("TelegramFeaturesUrl", R.string.TelegramFeaturesUrl)); + drawerLayoutContainer.closeDrawer(false); } } }); @@ -2279,7 +2282,7 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } pushOpened = true; } else if (showGroupVoip) { - GroupCallActivity.create(this, AccountInstance.getInstance(currentAccount)); + GroupCallActivity.create(this, AccountInstance.getInstance(currentAccount), null, null, false, null); if (GroupCallActivity.groupCallInstance != null) { GroupCallActivity.groupCallUiVisible = true; } @@ -4230,6 +4233,8 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } Bitmap bitmap = Bitmap.createBitmap(drawerLayoutContainer.getMeasuredWidth(), drawerLayoutContainer.getMeasuredHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); + HashMap viewLayerTypes = new HashMap<>(); + invalidateCachedViews(drawerLayoutContainer); drawerLayoutContainer.draw(canvas); frameLayout.removeView(themeSwitchImageView); if (toDark) { @@ -4390,12 +4395,39 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } else if (id == NotificationCenter.showBulletin) { if (!mainFragmentsStack.isEmpty()) { int type = (int) args[0]; - BaseFragment fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); - if (type == Bulletin.TYPE_STICKER) { + + FrameLayout container = null; + BaseFragment fragment = null; + if (GroupCallActivity.groupCallUiVisible && GroupCallActivity.groupCallInstance != null) { + container = GroupCallActivity.groupCallInstance.getContainer(); + } + + if (container == null) { + fragment = mainFragmentsStack.get(mainFragmentsStack.size() - 1); + } + + if (type == Bulletin.TYPE_NAME_CHANGED) { + int peerId = (int) args[1]; + String text = peerId > 0 ? LocaleController.getString("YourNameChanged", R.string.YourNameChanged) : LocaleController.getString("CannelTitleChanged", R.string.ChannelTitleChanged); + (container != null ? BulletinFactory.of(container) : BulletinFactory.of(fragment)).createErrorBulletin(text).show(); + } else if (type == Bulletin.TYPE_BIO_CHANGED) { + int peerId = (int) args[1]; + String text = peerId > 0 ? LocaleController.getString("YourBioChanged", R.string.YourBioChanged) : LocaleController.getString("CannelDescriptionChanged", R.string.ChannelDescriptionChanged); + (container != null ? BulletinFactory.of(container) : BulletinFactory.of(fragment)).createErrorBulletin(text).show(); + } else if (type == Bulletin.TYPE_STICKER) { TLRPC.Document sticker = (TLRPC.Document) args[1]; - Bulletin.make(fragment, new StickerSetBulletinLayout(this, null, (int) args[2], sticker), Bulletin.DURATION_SHORT).show(); + StickerSetBulletinLayout layout = new StickerSetBulletinLayout(this, null, (int) args[2], sticker); + if (fragment != null) { + Bulletin.make(fragment, layout, Bulletin.DURATION_SHORT).show(); + } else { + Bulletin.make(container, layout, Bulletin.DURATION_SHORT).show(); + } } else if (type == Bulletin.TYPE_ERROR) { - BulletinFactory.of(fragment).createErrorBulletin((String)args[1]).show(); + if (fragment != null) { + BulletinFactory.of(fragment).createErrorBulletin((String) args[1]).show(); + } else { + BulletinFactory.of(container).createErrorBulletin((String) args[1]).show(); + } } } } else if (id == NotificationCenter.groupCallUpdated) { @@ -4403,6 +4435,19 @@ public class LaunchActivity extends Activity implements ActionBarLayout.ActionBa } } + private void invalidateCachedViews(View parent) { + int layerType = parent.getLayerType(); + if (layerType != View.LAYER_TYPE_NONE) { + parent.invalidate(); + } + if (parent instanceof ViewGroup) { + ViewGroup viewGroup = (ViewGroup) parent; + for (int i = 0; i < viewGroup.getChildCount(); i++) { + invalidateCachedViews(viewGroup.getChildAt(i)); + } + } + } + private void checkWasMutedByAdmin(boolean checkOnly) { VoIPService voIPService = VoIPService.getSharedInstance(); if (voIPService != null && voIPService.groupCall != null) { diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java index 0d163880e..e8762679f 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LocationActivity.java @@ -1208,7 +1208,7 @@ public class LocationActivity extends BaseFragment implements NotificationCenter BackupImageView backupImageView = new BackupImageView(context); backupImageView.setRoundRadius(AndroidUtilities.dp(26)); - backupImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", new AvatarDrawable(chat), chat); + backupImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", new AvatarDrawable(chat), chat); frameLayout1.addView(backupImageView, LayoutHelper.createFrame(52, 52, Gravity.LEFT | Gravity.TOP, 5, 5, 0, 0)); markerImageView = frameLayout1; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java index 03dbc43b5..acab2160a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/LoginActivity.java @@ -32,6 +32,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.Vibrator; @@ -96,6 +97,8 @@ import org.telegram.ui.Cells.CheckBoxCell; import org.telegram.ui.Components.AlertsCreator; import org.telegram.ui.Components.AvatarDrawable; 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.ContextProgressView; import org.telegram.ui.Components.EditTextBoldCursor; @@ -279,7 +282,20 @@ public class LoginActivity extends BaseFragment { doneItem.setContentDescription(LocaleController.getString("Done", R.string.Done)); doneItem.setVisibility(doneButtonVisible[DONE_TYPE_ACTION] ? View.VISIBLE : View.GONE); - FrameLayout container = new FrameLayout(context); + FrameLayout container = new FrameLayout(context) { + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + MarginLayoutParams marginLayoutParams = (MarginLayoutParams) floatingButtonContainer.getLayoutParams(); + if (Bulletin.getVisibleBulletin() != null && Bulletin.getVisibleBulletin().isShowing()) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + marginLayoutParams.bottomMargin = AndroidUtilities.dp(14) + Bulletin.getVisibleBulletin().getLayout().getMeasuredHeight() - AndroidUtilities.dp(10); + } else { + marginLayoutParams.bottomMargin = AndroidUtilities.dp(14); + } + + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + }; fragmentView = container; ScrollView scrollView = new ScrollView(context) { @@ -614,11 +630,11 @@ public class LoginActivity extends BaseFragment { AndroidUtilities.shakeView(view, 2, 0); } - private void needShowInvalidAlert(final String phoneNumber, final boolean banned) { - if (getParentActivity() == null) { + public static void needShowInvalidAlert(BaseFragment fragment, final String phoneNumber, final boolean banned) { + if (fragment == null || fragment.getParentActivity() == null) { return; } - AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); + AlertDialog.Builder builder = new AlertDialog.Builder(fragment.getParentActivity()); builder.setTitle(LocaleController.getString("AppName", R.string.AppName)); if (banned) { builder.setMessage(LocaleController.getString("BannedPhoneNumber", R.string.BannedPhoneNumber)); @@ -630,8 +646,8 @@ public class LoginActivity extends BaseFragment { PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0); String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode); - Intent mailer = new Intent(Intent.ACTION_SEND); - mailer.setType("message/rfc822"); + Intent mailer = new Intent(Intent.ACTION_SENDTO); + mailer.setData(Uri.parse("mailto:")); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"login@stel.com"}); if (banned) { mailer.putExtra(Intent.EXTRA_SUBJECT, "Banned phone number: " + phoneNumber); @@ -640,13 +656,17 @@ public class LoginActivity extends BaseFragment { mailer.putExtra(Intent.EXTRA_SUBJECT, "Invalid phone number: " + phoneNumber); mailer.putExtra(Intent.EXTRA_TEXT, "I'm trying to use my mobile phone number: " + phoneNumber + "\nBut Telegram says it's invalid. Please help.\n\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault()); } - getParentActivity().startActivity(Intent.createChooser(mailer, "Send email...")); + fragment.getParentActivity().startActivity(Intent.createChooser(mailer, "Send email...")); } catch (Exception e) { - needShowAlert(LocaleController.getString("AppName", R.string.AppName), LocaleController.getString("NoMailInstalled", R.string.NoMailInstalled)); + AlertDialog.Builder builder2 = new AlertDialog.Builder(fragment.getParentActivity()); + builder2.setTitle(LocaleController.getString("AppName", R.string.AppName)); + builder2.setMessage(LocaleController.getString("NoMailInstalled", R.string.NoMailInstalled)); + builder2.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); + fragment.showDialog(builder2.create()); } }); builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), null); - showDialog(builder.create()); + fragment.showDialog(builder.create()); } private void showDoneButton(boolean show, boolean animated) { @@ -1389,11 +1409,9 @@ public class LoginActivity extends BaseFragment { FileLog.e(e); } if (syncContacts) { - visibleToast = Toast.makeText(getParentActivity(), LocaleController.getString("SyncContactsOn", R.string.SyncContactsOn), Toast.LENGTH_SHORT); - visibleToast.show(); + BulletinFactory.of((FrameLayout) fragmentView).createSimpleBulletin(R.raw.contacts_sync_on, LocaleController.getString("SyncContactsOn", R.string.SyncContactsOn)).show(); } else { - visibleToast = Toast.makeText(getParentActivity(), LocaleController.getString("SyncContactsOff", R.string.SyncContactsOff), Toast.LENGTH_SHORT); - visibleToast.show(); + BulletinFactory.of((FrameLayout) fragmentView).createSimpleBulletin(R.raw.contacts_sync_off, LocaleController.getString("SyncContactsOff", R.string.SyncContactsOff)).show(); } } }); @@ -1657,13 +1675,13 @@ public class LoginActivity extends BaseFragment { } else { if (error.text != null) { if (error.text.contains("PHONE_NUMBER_INVALID")) { - needShowInvalidAlert(req.phone_number, false); + needShowInvalidAlert(LoginActivity.this, req.phone_number, false); } else if (error.text.contains("PHONE_PASSWORD_FLOOD")) { needShowAlert(LocaleController.getString("AppName", R.string.AppName), LocaleController.getString("FloodWait", R.string.FloodWait)); } else if (error.text.contains("PHONE_NUMBER_FLOOD")) { needShowAlert(LocaleController.getString("AppName", R.string.AppName), LocaleController.getString("PhoneNumberFlood", R.string.PhoneNumberFlood)); } else if (error.text.contains("PHONE_NUMBER_BANNED")) { - needShowInvalidAlert(req.phone_number, true); + needShowInvalidAlert(LoginActivity.this, req.phone_number, true); } else if (error.text.contains("PHONE_CODE_EMPTY") || error.text.contains("PHONE_CODE_INVALID")) { needShowAlert(LocaleController.getString("AppName", R.string.AppName), LocaleController.getString("InvalidCode", R.string.InvalidCode)); } else if (error.text.contains("PHONE_CODE_EXPIRED")) { @@ -1961,8 +1979,8 @@ public class LoginActivity extends BaseFragment { PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0); String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode); - Intent mailer = new Intent(Intent.ACTION_SEND); - mailer.setType("message/rfc822"); + Intent mailer = new Intent(Intent.ACTION_SENDTO); + mailer.setData(Uri.parse("mailto:")); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"sms@stel.com"}); mailer.putExtra(Intent.EXTRA_SUBJECT, "Android registration/login issue " + version + " " + emailPhone); mailer.putExtra(Intent.EXTRA_TEXT, "Phone: " + requestPhone + "\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault() + "\nError: " + lastError); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/MessageStatisticActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/MessageStatisticActivity.java index 961f9c335..e015407c7 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/MessageStatisticActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/MessageStatisticActivity.java @@ -391,7 +391,7 @@ public class MessageStatisticActivity extends BaseFragment implements Notificati } thumbImage.setImage(ImageLocation.getForObject(bigThumb, messageObject.photoThumbsObject), "20_20", ImageLocation.getForObject(smallThumb, messageObject.photoThumbsObject), "20_20", size, null, messageObject, 0); } else { - thumbImage.setImage(null, null, ImageLocation.getForObject(smallThumb, messageObject.photoThumbsObject), "20_20", null, messageObject, 0); + thumbImage.setImage(null, null, ImageLocation.getForObject(smallThumb, messageObject.photoThumbsObject), "20_20", (Drawable) null, messageObject, 0); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PassportActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PassportActivity.java index 347929365..0ac36701d 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PassportActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PassportActivity.java @@ -1526,7 +1526,7 @@ public class PassportActivity extends BaseFragment implements NotificationCenter passwordAvatarContainer.addView(avatarImageView, LayoutHelper.createFrame(64, 64, Gravity.CENTER, 0, 8, 0, 0)); AvatarDrawable avatarDrawable = new AvatarDrawable(botUser); - avatarImageView.setImage(ImageLocation.getForUser(botUser, false), "50_50", avatarDrawable, botUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(botUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(botUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, botUser); passwordRequestTextView = new TextInfoPrivacyCell(context); passwordRequestTextView.getTextView().setGravity(Gravity.CENTER_HORIZONTAL); @@ -2001,7 +2001,7 @@ public class PassportActivity extends BaseFragment implements NotificationCenter avatarContainer.addView(avatarImageView, LayoutHelper.createFrame(64, 64, Gravity.CENTER, 0, 8, 0, 0)); AvatarDrawable avatarDrawable = new AvatarDrawable(botUser); - avatarImageView.setImage(ImageLocation.getForUser(botUser, false), "50_50", avatarDrawable, botUser); + avatarImageView.setImage(ImageLocation.getForUserOrChat(botUser, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(botUser, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, botUser); bottomCell = new TextInfoPrivacyCell(context); bottomCell.setBackgroundDrawable(Theme.getThemedDrawable(context, R.drawable.greydivider_top, Theme.key_windowBackgroundGrayShadow)); @@ -6826,7 +6826,7 @@ public class PassportActivity extends BaseFragment implements NotificationCenter return; } if (chatAttachAlert == null) { - chatAttachAlert = new ChatAttachAlert(getParentActivity(), this); + chatAttachAlert = new ChatAttachAlert(getParentActivity(), this, false); chatAttachAlert.setDelegate(new ChatAttachAlert.ChatAttachViewDelegate() { @Override @@ -7384,8 +7384,8 @@ public class PassportActivity extends BaseFragment implements NotificationCenter PackageInfo pInfo = ApplicationLoader.applicationContext.getPackageManager().getPackageInfo(ApplicationLoader.applicationContext.getPackageName(), 0); String version = String.format(Locale.US, "%s (%d)", pInfo.versionName, pInfo.versionCode); - Intent mailer = new Intent(Intent.ACTION_SEND); - mailer.setType("message/rfc822"); + Intent mailer = new Intent(Intent.ACTION_SENDTO); + mailer.setData(Uri.parse("mailto:")); mailer.putExtra(Intent.EXTRA_EMAIL, new String[]{"sms@stel.com"}); mailer.putExtra(Intent.EXTRA_SUBJECT, "Android registration/login issue " + version + " " + phone); mailer.putExtra(Intent.EXTRA_TEXT, "Phone: " + phone + "\nApp version: " + version + "\nOS version: SDK " + Build.VERSION.SDK_INT + "\nDevice Name: " + Build.MANUFACTURER + Build.MODEL + "\nLocale: " + Locale.getDefault() + "\nError: " + lastError); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java index f2a7f031d..7c579dc4a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PaymentFormActivity.java @@ -24,6 +24,7 @@ import android.content.pm.PackageManager; import android.graphics.Canvas; import android.graphics.Typeface; import android.net.Uri; +import android.os.AsyncTask; import android.os.Build; import android.os.Vibrator; import android.telephony.TelephonyManager; @@ -53,6 +54,7 @@ import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.EditText; import android.widget.FrameLayout; +import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; @@ -83,6 +85,7 @@ import org.json.JSONObject; import org.telegram.PhoneFormat.PhoneFormat; import org.telegram.messenger.AndroidUtilities; import org.telegram.messenger.ApplicationLoader; +import org.telegram.messenger.BuildVars; import org.telegram.messenger.ContactsController; import org.telegram.messenger.FileLog; import org.telegram.messenger.LocaleController; @@ -103,6 +106,7 @@ import org.telegram.ui.ActionBar.ActionBarMenu; import org.telegram.ui.ActionBar.ActionBarMenuItem; 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.ActionBar.ThemeDescription; import org.telegram.ui.Cells.EditTextSettingsCell; @@ -120,9 +124,15 @@ import org.telegram.ui.Components.ContextProgressView; import org.telegram.ui.Components.EditTextBoldCursor; import org.telegram.ui.Components.HintEditText; import org.telegram.ui.Components.LayoutHelper; +import org.telegram.ui.Components.UndoView; import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; @@ -131,6 +141,7 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Optional; +import java.util.Scanner; public class PaymentFormActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate { @@ -213,7 +224,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private boolean need_card_country; private boolean need_card_postcode; private boolean need_card_name; - private String stripeApiKey; + private String providerApiKey; private boolean initGooglePay; private TLRPC.User botUser; @@ -225,6 +236,10 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private String currentBotName; private String currentItemName; + private BaseFragment parentFragment; + + private LinearLayout tipLayout; + private int currentStep; private boolean passwordOk; private String paymentJson; @@ -233,8 +248,10 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private String countryName; private String totalPriceDecimal; private TLRPC.TL_payments_paymentForm paymentForm; + private TLRPC.TL_payments_paymentReceipt paymentReceipt; private TLRPC.TL_payments_validatedRequestedInfo requestedInfo; private TLRPC.TL_shippingOption shippingOption; + private Long tipAmount; private TLRPC.TL_payments_validateRequestedInfo validateRequest; private TLRPC.TL_inputPaymentCredentialsGooglePay googlePayCredentials; private String googlePayPublicKey; @@ -244,6 +261,8 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private boolean donePressed; private boolean canceled; + private String[] totalPrice; + private boolean isWebView; private boolean saveShippingInfo; @@ -254,9 +273,21 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private static final int LOAD_PAYMENT_DATA_REQUEST_CODE = 991; private interface PaymentFormActivityDelegate { - boolean didSelectNewCard(String tokenJson, String card, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay); - void onFragmentDestroyed(); - void currentPasswordUpdated(TLRPC.TL_account_password password); + default boolean didSelectNewCard(String tokenJson, String card, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay) { + return false; + } + + default void didSelectNewAddress(TLRPC.TL_payments_validateRequestedInfo validateRequested) { + + } + + default void onFragmentDestroyed() { + + } + + default void currentPasswordUpdated(TLRPC.TL_account_password password) { + + } } private class TelegramWebviewProxy { @@ -295,30 +326,34 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } } - public PaymentFormActivity(MessageObject message, TLRPC.TL_payments_paymentReceipt receipt) { + public PaymentFormActivity(TLRPC.TL_payments_paymentReceipt receipt) { currentStep = 5; paymentForm = new TLRPC.TL_payments_paymentForm(); + paymentReceipt = receipt; paymentForm.bot_id = receipt.bot_id; paymentForm.invoice = receipt.invoice; paymentForm.provider_id = receipt.provider_id; paymentForm.users = receipt.users; shippingOption = receipt.shipping; - messageObject = message; - botUser = MessagesController.getInstance(currentAccount).getUser(receipt.bot_id); + if (receipt.tip_amount != 0) { + tipAmount = receipt.tip_amount; + } + botUser = getMessagesController().getUser(receipt.bot_id); if (botUser != null) { currentBotName = botUser.first_name; } else { currentBotName = ""; } - currentItemName = message.messageOwner.media.title; + currentItemName = receipt.title; if (receipt.info != null) { validateRequest = new TLRPC.TL_payments_validateRequestedInfo(); + validateRequest.peer = getMessagesController().getInputPeer(receipt.bot_id); validateRequest.info = receipt.info; } cardName = receipt.credentials_title; } - public PaymentFormActivity(TLRPC.TL_payments_paymentForm form, MessageObject message) { + public PaymentFormActivity(TLRPC.TL_payments_paymentForm form, MessageObject message, BaseFragment parentFragment) { int step; if (form.invoice.shipping_address_requested || form.invoice.email_requested || form.invoice.name_requested || form.invoice.phone_requested) { step = 0; @@ -337,11 +372,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else { step = 2; } - init(form, message, step, null, null, null, null, null, false, null); + init(form, message, step, null, null, null, null, null, null, false, null, parentFragment); } - private PaymentFormActivity(TLRPC.TL_payments_paymentForm form, MessageObject message, int step, TLRPC.TL_payments_validatedRequestedInfo validatedRequestedInfo, TLRPC.TL_shippingOption shipping, String tokenJson, String card, TLRPC.TL_payments_validateRequestedInfo request, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay) { - init(form, message, step, validatedRequestedInfo, shipping, tokenJson, card, request, saveCard, googlePay); + private PaymentFormActivity(TLRPC.TL_payments_paymentForm form, MessageObject message, int step, TLRPC.TL_payments_validatedRequestedInfo validatedRequestedInfo, TLRPC.TL_shippingOption shipping, Long tips, String tokenJson, String card, TLRPC.TL_payments_validateRequestedInfo request, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay, BaseFragment parent) { + init(form, message, step, validatedRequestedInfo, shipping, tips, tokenJson, card, request, saveCard, googlePay, parent); } private void setCurrentPassword(TLRPC.TL_account_password password) { @@ -352,9 +387,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen goToNextStep(); } else { currentPassword = password; - if (currentPassword != null) { - waitingForEmail = !TextUtils.isEmpty(currentPassword.email_unconfirmed_pattern); - } + waitingForEmail = !TextUtils.isEmpty(currentPassword.email_unconfirmed_pattern); updatePasswordFields(); } } @@ -363,17 +396,19 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen delegate = paymentFormActivityDelegate; } - private void init(TLRPC.TL_payments_paymentForm form, MessageObject message, int step, TLRPC.TL_payments_validatedRequestedInfo validatedRequestedInfo, TLRPC.TL_shippingOption shipping, String tokenJson, String card, TLRPC.TL_payments_validateRequestedInfo request, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay) { + private void init(TLRPC.TL_payments_paymentForm form, MessageObject message, int step, TLRPC.TL_payments_validatedRequestedInfo validatedRequestedInfo, TLRPC.TL_shippingOption shipping, Long tips, String tokenJson, String card, TLRPC.TL_payments_validateRequestedInfo request, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay, BaseFragment parent) { currentStep = step; + parentFragment = parent; paymentJson = tokenJson; googlePayCredentials = googlePay; requestedInfo = validatedRequestedInfo; paymentForm = form; shippingOption = shipping; + tipAmount = tips; messageObject = message; saveCardInfo = saveCard; - isWebView = !"stripe".equals(paymentForm.native_provider); - botUser = MessagesController.getInstance(currentAccount).getUser(form.bot_id); + isWebView = !"stripe".equals(paymentForm.native_provider) && !"smartglocal".equals(paymentForm.native_provider); + botUser = getMessagesController().getUser(form.bot_id); if (botUser != null) { currentBotName = botUser.first_name; } else { @@ -503,6 +538,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen linearLayout2 = new LinearLayout(context); linearLayout2.setOrientation(LinearLayout.VERTICAL); + linearLayout2.setClipChildren(false); scrollView.addView(linearLayout2, new ScrollView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); if (currentStep == 0) { @@ -548,6 +584,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen ViewGroup container; if (a == FIELD_PHONECODE) { container = new LinearLayout(context); + container.setClipChildren(false); ((LinearLayout) container).setOrientation(LinearLayout.HORIZONTAL); linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); @@ -555,10 +592,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen container = (ViewGroup) inputFields[FIELD_PHONECODE].getParent(); } else { container = new FrameLayout(context); + container.setClipChildren(false); linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - boolean allowDivider = a != FIELD_POSTCODE && a != FIELD_PHONE; + boolean allowDivider = a != FIELD_POSTCODE; if (allowDivider) { if (a == FIELD_EMAIL && !paymentForm.invoice.phone_requested) { allowDivider = false; @@ -1076,10 +1114,14 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } catch (Exception e) { need_card_name = false; } - try { - stripeApiKey = jsonObject.getString("publishable_key"); - } catch (Exception e) { - stripeApiKey = ""; + if (jsonObject.has("public_token")) { + providerApiKey = jsonObject.getString("public_token"); + } else { + try { + providerApiKey = jsonObject.getString("publishable_key"); + } catch (Exception e) { + providerApiKey = ""; + } } initGooglePay = !jsonObject.optBoolean("google_pay_hidden", false); } catch (Exception e) { @@ -1087,7 +1129,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } } - if (initGooglePay && (!TextUtils.isEmpty(stripeApiKey) || googlePayParameters != null)) { + if (initGooglePay && (!TextUtils.isEmpty(providerApiKey) && "stripe".equals(paymentForm.native_provider) || googlePayParameters != null)) { initGooglePay(context); } @@ -1107,8 +1149,9 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen boolean allowDivider = a != FIELD_CVV && a != FIELD_CARD_POSTCODE && !(a == FIELD_CARD_COUNTRY && !need_card_postcode); ViewGroup container = new FrameLayout(context); - linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); + container.setClipChildren(false); container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); View.OnTouchListener onTouchListener = null; inputFields[a] = new EditTextBoldCursor(context); @@ -1285,17 +1328,13 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen break; } } - if (maxLength != 0) { - if (builder.length() > maxLength) { - builder.setLength(maxLength); - } + if (builder.length() > maxLength) { + builder.setLength(maxLength); } } if (hint != null) { - if (maxLength != 0) { - if (builder.length() == maxLength) { - inputFields[FIELD_EXPIRE_DATE].requestFocus(); - } + if (builder.length() == maxLength) { + inputFields[FIELD_EXPIRE_DATE].requestFocus(); } phoneField.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); for (int a = 0; a < builder.length(); a++) { @@ -1490,7 +1529,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen linearLayout2.addView(bottomCell[0], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); } else if (a == FIELD_CARD) { createGooglePayButton(context); - container.addView(googlePayContainer, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | Gravity.RIGHT, 0, 0, 4, 0)); + container.addView(googlePayContainer, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL | (LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT), 0, 0, 4, 0)); } if (allowDivider) { @@ -1550,6 +1589,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } ViewGroup container = new FrameLayout(context); + container.setClipChildren(false); linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); @@ -1634,7 +1674,11 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else if (currentStep == 4 || currentStep == 5) { paymentInfoCell = new PaymentInfoCell(context); paymentInfoCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - paymentInfoCell.setInvoice((TLRPC.TL_messageMediaInvoice) messageObject.messageOwner.media, currentBotName); + if (messageObject != null) { + paymentInfoCell.setInvoice((TLRPC.TL_messageMediaInvoice) messageObject.messageOwner.media, currentBotName); + } else if (paymentReceipt != null) { + paymentInfoCell.setReceipt(paymentReceipt, currentBotName); + } linearLayout2.addView(paymentInfoCell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); sectionCell[0] = new ShadowSectionCell(context); @@ -1644,7 +1688,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (shippingOption != null) { arrayList.addAll(shippingOption.prices); } - final String totalPrice = getTotalPriceString(arrayList); + totalPrice = new String[1]; for (int a = 0; a < arrayList.size(); a++) { TLRPC.TL_labeledPrice price = arrayList.get(a); @@ -1655,51 +1699,290 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen linearLayout2.addView(priceCell); } + if (currentStep == 5 && tipAmount != null) { + TextPriceCell priceCell = new TextPriceCell(context); + priceCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + priceCell.setTextAndValue(LocaleController.getString("PaymentTip", R.string.PaymentTip), LocaleController.getInstance().formatCurrencyString(tipAmount, paymentForm.invoice.currency), false); + linearLayout2.addView(priceCell); + } + TextPriceCell priceCell = new TextPriceCell(context); priceCell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - priceCell.setTextAndValue(LocaleController.getString("PaymentTransactionTotal", R.string.PaymentTransactionTotal), totalPrice, true); + totalPrice[0] = getTotalPriceString(arrayList); + priceCell.setTextAndValue(LocaleController.getString("PaymentTransactionTotal", R.string.PaymentTransactionTotal), totalPrice[0], true); + + if (currentStep == 4 && (paymentForm.invoice.flags & 256) != 0) { + ViewGroup container = new FrameLayout(context); + container.setClipChildren(false); + container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, paymentForm.invoice.suggested_tip_amounts.isEmpty() ? 40 : 78)); + container.setOnClickListener(v -> { + inputFields[0].requestFocus(); + AndroidUtilities.showKeyboard(inputFields[0]); + }); + + TextPriceCell cell = new TextPriceCell(context); + cell.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + cell.setTextAndValue(LocaleController.getString("PaymentTipOptional", R.string.PaymentTipOptional), "", false); + container.addView(cell); + + inputFields = new EditTextBoldCursor[1]; + inputFields[0] = new EditTextBoldCursor(context); + inputFields[0].setTag(0); + inputFields[0].setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); + inputFields[0].setHintTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2)); + inputFields[0].setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteGrayText2)); + inputFields[0].setBackgroundDrawable(null); + inputFields[0].setCursorColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlackText)); + inputFields[0].setCursorSize(AndroidUtilities.dp(20)); + inputFields[0].setCursorWidth(1.5f); + inputFields[0].setInputType(InputType.TYPE_CLASS_PHONE); + inputFields[0].setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); + inputFields[0].setHint(LocaleController.getInstance().formatCurrencyString(0, paymentForm.invoice.currency)); + inputFields[0].setPadding(0, 0, 0, AndroidUtilities.dp(6)); + inputFields[0].setGravity(LocaleController.isRTL ? Gravity.LEFT : Gravity.RIGHT); + container.addView(inputFields[0], LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 21, 9, 21, 1)); + inputFields[0].addTextChangedListener(new TextWatcher() { + + private boolean anyBefore; + private String overrideText; + private boolean dotEntered; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + if (ignoreOnTextChange) { + return; + } + anyBefore = !TextUtils.isEmpty(s); + overrideText = null; + if (count == 1 && after == 0) { + String fixed = LocaleController.fixNumbers(s); + char actionCh = fixed.charAt(start); + if (actionCh < '0' || actionCh > '9') { + while (--start > 0) { + actionCh = fixed.charAt(start); + if (actionCh >= '0' && actionCh <= '9') { + overrideText = fixed.substring(0, start) + fixed.substring(start + 1); + break; + } + } + } + } + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + if (ignoreOnTextChange) { + return; + } + long oldAmount = tipAmount != null ? tipAmount : 0; + + String text; + if (overrideText != null) { + text = overrideText; + } else { + text = LocaleController.fixNumbers(s.toString()); + } + tipAmount = Utilities.parseLong(PhoneFormat.stripExceptNumbers(text)); + /*if (!dotEntered) { + + } + if (text.endsWith(",") || text.endsWith(".")) { + dotEntered = true; + } + if (tipAmount == 0) { + dotEntered = false; + }*/ + if (paymentForm.invoice.max_tip_amount != 0 && tipAmount > paymentForm.invoice.max_tip_amount) { + tipAmount = paymentForm.invoice.max_tip_amount; + } + int start = inputFields[0].getSelectionStart(); + String phoneChars = "0123456789,."; + String str = inputFields[0].getText().toString(); + StringBuilder builder = new StringBuilder(str.length()); + for (int a = 0; a < str.length(); a++) { + String ch = str.substring(a, a + 1); + if (phoneChars.contains(ch)) { + builder.append(ch); + } + } + ignoreOnTextChange = true; + inputFields[0].setText(LocaleController.getInstance().formatCurrencyString(tipAmount, false, paymentForm.invoice.currency)); + if (oldAmount < tipAmount && oldAmount != 0 && anyBefore && start >= 0) { + inputFields[0].setSelection(Math.min(start, inputFields[0].length())); + } else { + inputFields[0].setSelection(inputFields[0].length()); + } + totalPrice[0] = getTotalPriceString(arrayList); + priceCell.setTextAndValue(LocaleController.getString("PaymentTransactionTotal", R.string.PaymentTransactionTotal), totalPrice[0], true); + if (payTextView != null) { + payTextView.setText(LocaleController.formatString("PaymentCheckoutPay", R.string.PaymentCheckoutPay, totalPrice[0])); + } + checkSelectedTip(); + ignoreOnTextChange = false; + } + }); + inputFields[0].setOnEditorActionListener((textView, i, keyEvent) -> { + if (i == EditorInfo.IME_ACTION_DONE) { + AndroidUtilities.hideKeyboard(textView); + return true; + } + return false; + }); + inputFields[0].requestFocus(); + + if (!paymentForm.invoice.suggested_tip_amounts.isEmpty()) { + HorizontalScrollView scrollView = new HorizontalScrollView(context); + scrollView.setHorizontalScrollBarEnabled(false); + scrollView.setVerticalScrollBarEnabled(false); + scrollView.setClipToPadding(false); + scrollView.setPadding(AndroidUtilities.dp(21), 0, AndroidUtilities.dp(21), 0); + scrollView.setFillViewport(true); + container.addView(scrollView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 30, Gravity.LEFT | Gravity.TOP, 0, 44, 0, 0)); + int[] maxTextWidth = new int[1]; + int[] textWidths = new int[1]; + int N = paymentForm.invoice.suggested_tip_amounts.size(); + + tipLayout = new LinearLayout(context) { + + boolean ignoreLayout; + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int availableSize = MeasureSpec.getSize(widthMeasureSpec); + ignoreLayout = true; + int gaps = AndroidUtilities.dp(9) * (N - 1); + if (maxTextWidth[0] * N + gaps <= availableSize) { + setWeightSum(1.0f); + for (int a = 0, N2 = getChildCount(); a < N2; a++) { + getChildAt(a).getLayoutParams().width = 0; + ((LayoutParams) getChildAt(a).getLayoutParams()).weight = 1.0f / N2; + } + } else if (textWidths[0] + gaps <= availableSize) { + setWeightSum(1.0f); + availableSize -= gaps; + float extraWeight = 1.0f; + for (int a = 0, N2 = getChildCount(); a < N2; a++) { + View child = getChildAt(a); + LayoutParams layoutParams = (LayoutParams) child.getLayoutParams(); + layoutParams.width = 0; + int width = (Integer) child.getTag(R.id.width_tag); + layoutParams.weight = width / (float) availableSize; + extraWeight -= layoutParams.weight; + } + extraWeight /= (N - 1); + if (extraWeight > 0) { + for (int a = 0, N2 = getChildCount(); a < N2; a++) { + View child = getChildAt(a); + LayoutParams layoutParams = (LayoutParams) child.getLayoutParams(); + int width = (Integer) child.getTag(R.id.width_tag); + if (width != maxTextWidth[0]) { + layoutParams.weight += extraWeight; + } + } + } + } else { + setWeightSum(0.0f); + for (int a = 0, N2 = getChildCount(); a < N2; a++) { + getChildAt(a).getLayoutParams().width = LayoutHelper.WRAP_CONTENT; + ((LayoutParams) getChildAt(a).getLayoutParams()).weight = 0.0f; + } + } + ignoreLayout = false; + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + @Override + public void requestLayout() { + if (ignoreLayout) { + return; + } + super.requestLayout(); + } + }; + tipLayout.setOrientation(LinearLayout.HORIZONTAL); + scrollView.addView(tipLayout, LayoutHelper.createScroll(LayoutHelper.MATCH_PARENT, 30, Gravity.LEFT | Gravity.TOP)); + int color = Theme.getColor(Theme.key_contacts_inviteBackground); + for (int a = 0; a < N; a++) { + long amount; + if (LocaleController.isRTL) { + amount = paymentForm.invoice.suggested_tip_amounts.get(N - a - 1); + } else { + amount = paymentForm.invoice.suggested_tip_amounts.get(a); + } + String text = LocaleController.getInstance().formatCurrencyString(amount, paymentForm.invoice.currency); + TextView valueTextView = new TextView(context); + valueTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); + valueTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); + valueTextView.setLines(1); + valueTextView.setTag(amount); + valueTextView.setMaxLines(1); + valueTextView.setText(text); + valueTextView.setPadding(AndroidUtilities.dp(15), 0, AndroidUtilities.dp(15), 0); + valueTextView.setTextColor(Theme.getColor(Theme.key_chats_secretName)); + valueTextView.setBackground(Theme.createRoundRectDrawable(AndroidUtilities.dp(15), color & 0x1fffffff)); + valueTextView.setSingleLine(true); + valueTextView.setGravity(Gravity.CENTER); + tipLayout.addView(valueTextView, LayoutHelper.createLinear(LayoutHelper.WRAP_CONTENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER_VERTICAL | Gravity.LEFT, 0, 0, a != N -1 ? 9 : 0, 0)); + valueTextView.setOnClickListener(v -> { + long amoumt = (Long) valueTextView.getTag(); + if (tipAmount != null && amoumt == tipAmount) { + inputFields[0].setText(LocaleController.getInstance().formatCurrencyString(0, false, paymentForm.invoice.currency)); + } else { + inputFields[0].setText(LocaleController.getInstance().formatCurrencyString(amount, false, paymentForm.invoice.currency)); + } + inputFields[0].setSelection(inputFields[0].length()); + }); + int width = (int) Math.ceil(valueTextView.getPaint().measureText(text)) + AndroidUtilities.dp(30); + valueTextView.setTag(R.id.width_tag, width); + maxTextWidth[0] = Math.max(maxTextWidth[0], width); + textWidths[0] += width; + } + } + } + linearLayout2.addView(priceCell); - View divider = new View(context) { - @Override - protected void onDraw(Canvas canvas) { - canvas.drawLine(LocaleController.isRTL ? 0 : AndroidUtilities.dp(20), getMeasuredHeight() - 1, getMeasuredWidth() - (LocaleController.isRTL ? AndroidUtilities.dp(20) : 0), getMeasuredHeight() - 1, Theme.dividerPaint); - } - }; - divider.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - dividers.add(divider); - linearLayout2.addView(divider, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1, Gravity.LEFT | Gravity.BOTTOM)); + sectionCell[2] = new ShadowSectionCell(context); + sectionCell[2].setBackgroundDrawable(Theme.getThemedDrawable(context, R.drawable.greydivider_bottom, Theme.key_windowBackgroundGrayShadow)); + linearLayout2.addView(sectionCell[2], LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT)); detailSettingsCell[0] = new TextDetailSettingsCell(context); detailSettingsCell[0].setBackgroundDrawable(Theme.getSelectorDrawable(true)); - detailSettingsCell[0].setTextAndValue(cardName, LocaleController.getString("PaymentCheckoutMethod", R.string.PaymentCheckoutMethod), true); + detailSettingsCell[0].setTextAndValueAndIcon(cardName != null && cardName.length() > 1 ? cardName.substring(0, 1).toUpperCase() + cardName.substring(1) : cardName, LocaleController.getString("PaymentCheckoutMethod", R.string.PaymentCheckoutMethod), R.drawable.payment_card, true); linearLayout2.addView(detailSettingsCell[0]); if (currentStep == 4) { detailSettingsCell[0].setOnClickListener(v -> { - PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 2, requestedInfo, shippingOption, null, cardName, validateRequest, saveCardInfo, null); - activity.setDelegate(new PaymentFormActivityDelegate() { - @Override - public boolean didSelectNewCard(String tokenJson, String card, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay) { - paymentForm.saved_credentials = null; - paymentJson = tokenJson; - saveCardInfo = saveCard; - cardName = card; - googlePayCredentials = googlePay; - detailSettingsCell[0].setTextAndValue(cardName, LocaleController.getString("PaymentCheckoutMethod", R.string.PaymentCheckoutMethod), true); - return false; - } - - @Override - public void onFragmentDestroyed() { - - } - - @Override - public void currentPasswordUpdated(TLRPC.TL_account_password password) { - - } - }); - presentFragment(activity); + if (getParentActivity() == null) { + return; + } + BottomSheet.Builder builder = new BottomSheet.Builder(getParentActivity()); + builder.setTitle(LocaleController.getString("PaymentCheckoutMethod", R.string.PaymentCheckoutMethod), true); + builder.setItems(new CharSequence[]{cardName, LocaleController.getString("PaymentCheckoutMethodNewCard", R.string.PaymentCheckoutMethodNewCard)}, + new int[]{R.drawable.payment_card, R.drawable.msg_addbot}, (dialog, which) -> { + if (which == 1) { + PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 2, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, null, parentFragment); + activity.setDelegate(new PaymentFormActivityDelegate() { + @Override + public boolean didSelectNewCard(String tokenJson, String card, boolean saveCard, TLRPC.TL_inputPaymentCredentialsGooglePay googlePay) { + paymentForm.saved_credentials = null; + paymentJson = tokenJson; + saveCardInfo = saveCard; + cardName = card; + googlePayCredentials = googlePay; + detailSettingsCell[0].setTextAndValue(cardName, LocaleController.getString("PaymentCheckoutMethod", R.string.PaymentCheckoutMethod), true); + return false; + } + }); + presentFragment(activity); + } + }); + showDialog(builder.create()); }); } @@ -1714,7 +1997,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (providerUser != null) { detailSettingsCell[1] = new TextDetailSettingsCell(context); detailSettingsCell[1].setBackgroundDrawable(Theme.getSelectorDrawable(true)); - detailSettingsCell[1].setTextAndValue(providerName = ContactsController.formatName(providerUser.first_name, providerUser.last_name), LocaleController.getString("PaymentCheckoutProvider", R.string.PaymentCheckoutProvider), true); + detailSettingsCell[1].setTextAndValueAndIcon(providerName = ContactsController.formatName(providerUser.first_name, providerUser.last_name), LocaleController.getString("PaymentCheckoutProvider", R.string.PaymentCheckoutProvider), R.drawable.payment_provider, validateRequest != null && (validateRequest.info.shipping_address != null || shippingOption != null)); linearLayout2.addView(detailSettingsCell[1]); } else { providerName = ""; @@ -1722,45 +2005,105 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (validateRequest != null) { if (validateRequest.info.shipping_address != null) { - String address = String.format("%s %s, %s, %s, %s, %s", validateRequest.info.shipping_address.street_line1, validateRequest.info.shipping_address.street_line2, validateRequest.info.shipping_address.city, validateRequest.info.shipping_address.state, validateRequest.info.shipping_address.country_iso2, validateRequest.info.shipping_address.post_code); detailSettingsCell[2] = new TextDetailSettingsCell(context); - detailSettingsCell[2].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - detailSettingsCell[2].setTextAndValue(address, LocaleController.getString("PaymentShippingAddress", R.string.PaymentShippingAddress), true); linearLayout2.addView(detailSettingsCell[2]); + if (currentStep == 4) { + detailSettingsCell[2].setBackgroundDrawable(Theme.getSelectorDrawable(true)); + detailSettingsCell[2].setOnClickListener(v -> { + PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 0, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, null, parentFragment); + activity.setDelegate(new PaymentFormActivityDelegate() { + @Override + public void didSelectNewAddress(TLRPC.TL_payments_validateRequestedInfo validateRequested) { + validateRequest = validateRequested; + setAddressFields(); + } + }); + presentFragment(activity); + }); + } else { + detailSettingsCell[2].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + } } if (validateRequest.info.name != null) { detailSettingsCell[3] = new TextDetailSettingsCell(context); - detailSettingsCell[3].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - detailSettingsCell[3].setTextAndValue(validateRequest.info.name, LocaleController.getString("PaymentCheckoutName", R.string.PaymentCheckoutName), true); linearLayout2.addView(detailSettingsCell[3]); + if (currentStep == 4) { + detailSettingsCell[3].setBackgroundDrawable(Theme.getSelectorDrawable(true)); + detailSettingsCell[3].setOnClickListener(v -> { + PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 0, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, null, parentFragment); + activity.setDelegate(new PaymentFormActivityDelegate() { + @Override + public void didSelectNewAddress(TLRPC.TL_payments_validateRequestedInfo validateRequested) { + validateRequest = validateRequested; + setAddressFields(); + } + }); + presentFragment(activity); + }); + } else { + detailSettingsCell[3].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + } } if (validateRequest.info.phone != null) { detailSettingsCell[4] = new TextDetailSettingsCell(context); - detailSettingsCell[4].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - detailSettingsCell[4].setTextAndValue(PhoneFormat.getInstance().format(validateRequest.info.phone), LocaleController.getString("PaymentCheckoutPhoneNumber", R.string.PaymentCheckoutPhoneNumber), true); linearLayout2.addView(detailSettingsCell[4]); + if (currentStep == 4) { + detailSettingsCell[4].setBackgroundDrawable(Theme.getSelectorDrawable(true)); + detailSettingsCell[4].setOnClickListener(v -> { + PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 0, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, null, parentFragment); + activity.setDelegate(new PaymentFormActivityDelegate() { + @Override + public void didSelectNewAddress(TLRPC.TL_payments_validateRequestedInfo validateRequested) { + validateRequest = validateRequested; + setAddressFields(); + } + }); + presentFragment(activity); + }); + } else { + detailSettingsCell[4].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + } } if (validateRequest.info.email != null) { detailSettingsCell[5] = new TextDetailSettingsCell(context); - detailSettingsCell[5].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - detailSettingsCell[5].setTextAndValue(validateRequest.info.email, LocaleController.getString("PaymentCheckoutEmail", R.string.PaymentCheckoutEmail), true); linearLayout2.addView(detailSettingsCell[5]); + if (currentStep == 4) { + detailSettingsCell[5].setBackgroundDrawable(Theme.getSelectorDrawable(true)); + detailSettingsCell[5].setOnClickListener(v -> { + PaymentFormActivity activity = new PaymentFormActivity(paymentForm, messageObject, 0, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, null, parentFragment); + activity.setDelegate(new PaymentFormActivityDelegate() { + @Override + public void didSelectNewAddress(TLRPC.TL_payments_validateRequestedInfo validateRequested) { + validateRequest = validateRequested; + setAddressFields(); + } + }); + presentFragment(activity); + }); + } else { + detailSettingsCell[5].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); + } } if (shippingOption != null) { detailSettingsCell[6] = new TextDetailSettingsCell(context); detailSettingsCell[6].setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); - detailSettingsCell[6].setTextAndValue(shippingOption.title, LocaleController.getString("PaymentCheckoutShippingMethod", R.string.PaymentCheckoutShippingMethod), false); + detailSettingsCell[6].setTextAndValueAndIcon(shippingOption.title, LocaleController.getString("PaymentCheckoutShippingMethod", R.string.PaymentCheckoutShippingMethod), R.drawable.payment_delivery, false); linearLayout2.addView(detailSettingsCell[6]); } + setAddressFields(); } if (currentStep == 4) { bottomLayout = new FrameLayout(context); - bottomLayout.setBackgroundDrawable(Theme.getSelectorDrawable(true)); + if (Build.VERSION.SDK_INT >= 21) { + bottomLayout.setBackgroundDrawable(Theme.getSelectorDrawable(Theme.getColor(Theme.key_listSelector), Theme.key_contacts_inviteBackground)); + } else { + bottomLayout.setBackgroundColor(Theme.getColor(Theme.key_contacts_inviteBackground)); + } frameLayout.addView(bottomLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 48, Gravity.BOTTOM)); bottomLayout.setOnClickListener(v -> { if (botUser != null && !botUser.verified) { @@ -1771,18 +2114,18 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen AlertDialog.Builder builder = new AlertDialog.Builder(getParentActivity()); builder.setTitle(LocaleController.getString("PaymentWarning", R.string.PaymentWarning)); builder.setMessage(LocaleController.formatString("PaymentWarningText", R.string.PaymentWarningText, currentBotName, providerName)); - builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> showPayAlert(totalPrice)); + builder.setPositiveButton(LocaleController.getString("OK", R.string.OK), (dialogInterface, i) -> showPayAlert(totalPrice[0])); showDialog(builder.create()); } else { - showPayAlert(totalPrice); + showPayAlert(totalPrice[0]); } } else { - showPayAlert(totalPrice); + showPayAlert(totalPrice[0]); } }); payTextView = new TextView(context); - payTextView.setTextColor(Theme.getColor(Theme.key_windowBackgroundWhiteBlueText6)); - payTextView.setText(LocaleController.formatString("PaymentCheckoutPay", R.string.PaymentCheckoutPay, totalPrice)); + payTextView.setTextColor(Theme.getColor(Theme.key_contacts_inviteText)); + payTextView.setText(LocaleController.formatString("PaymentCheckoutPay", R.string.PaymentCheckoutPay, totalPrice[0])); payTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); payTextView.setGravity(Gravity.CENTER); payTextView.setTypeface(AndroidUtilities.getTypeface("fonts/rmedium.ttf")); @@ -1790,12 +2133,10 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen progressViewButton = new ContextProgressView(context, 0); progressViewButton.setVisibility(View.INVISIBLE); + int color = Theme.getColor(Theme.key_contacts_inviteText); + progressViewButton.setColors(color & 0x2fffffff, color); bottomLayout.addView(progressViewButton, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); - View shadow = new View(context); - shadow.setBackgroundResource(R.drawable.header_shadow_reverse); - frameLayout.addView(shadow, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, 3, Gravity.LEFT | Gravity.BOTTOM, 0, 0, 0, 48)); - doneItem.setEnabled(false); doneItem.getContentView().setVisibility(View.INVISIBLE); @@ -1957,6 +2298,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } ViewGroup container = new FrameLayout(context); + container.setClipChildren(false); linearLayout2.addView(container, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 50)); container.setBackgroundColor(Theme.getColor(Theme.key_windowBackgroundWhite)); @@ -2039,6 +2381,35 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen return fragmentView; } + private void checkSelectedTip() { + int color = Theme.getColor(Theme.key_contacts_inviteBackground); + for (int b = 0, N2 = tipLayout.getChildCount(); b < N2; b++) { + View child = tipLayout.getChildAt(b); + int alpha = child.getTag().equals(tipAmount) ? 0x3fffffff : 0x1fffffff; + Theme.setDrawableColor(child.getBackground(), color & alpha); + child.invalidate(); + } + } + + private void setAddressFields() { + if (validateRequest.info.shipping_address != null) { + String address = String.format("%s %s, %s, %s, %s, %s", validateRequest.info.shipping_address.street_line1, validateRequest.info.shipping_address.street_line2, validateRequest.info.shipping_address.city, validateRequest.info.shipping_address.state, validateRequest.info.shipping_address.country_iso2, validateRequest.info.shipping_address.post_code); + detailSettingsCell[2].setTextAndValueAndIcon(address, LocaleController.getString("PaymentShippingAddress", R.string.PaymentShippingAddress), R.drawable.payment_address, true); + } + + if (validateRequest.info.name != null) { + detailSettingsCell[3].setTextAndValueAndIcon(validateRequest.info.name, LocaleController.getString("PaymentCheckoutName", R.string.PaymentCheckoutName), R.drawable.payment_name, true); + } + + if (validateRequest.info.phone != null) { + detailSettingsCell[4].setTextAndValueAndIcon(PhoneFormat.getInstance().format(validateRequest.info.phone), LocaleController.getString("PaymentCheckoutPhoneNumber", R.string.PaymentCheckoutPhoneNumber), R.drawable.payment_phone, validateRequest.info.email != null || shippingOption != null); + } + + if (validateRequest.info.email != null) { + detailSettingsCell[5].setTextAndValueAndIcon(validateRequest.info.email, LocaleController.getString("PaymentCheckoutEmail", R.string.PaymentCheckoutEmail), R.drawable.payment_email, shippingOption != null); + } + } + private void createGooglePayButton(Context context) { googlePayContainer = new FrameLayout(context); googlePayContainer.setBackgroundDrawable(Theme.getSelectorDrawable(true)); @@ -2076,7 +2447,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else { put("parameters", new JSONObject() {{ put("gateway", "stripe"); - put("stripe:publishableKey", stripeApiKey); + put("stripe:publishableKey", providerApiKey); put("stripe:version", StripeApiHandler.VERSION); }}); } @@ -2278,13 +2649,6 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen parameters.put("allowedAuthMethods", new JSONArray(SUPPORTED_METHODS)); parameters.put("allowedCardNetworks", new JSONArray(SUPPORTED_NETWORKS)); - // Optionally, you can add billing address/phone number associated with a CARD payment method. - /*parameters.put("billingAddressRequired", true); - - JSONObject billingAddressParameters = new JSONObject(); - billingAddressParameters.put("format", "FULL"); - parameters.put("billingAddressParameters", billingAddressParameters);*/ - cardPaymentMethod.put("parameters", parameters); return cardPaymentMethod; @@ -2344,6 +2708,9 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen for (int a = 0; a < prices.size(); a++) { amount += prices.get(a).amount; } + if (tipAmount != null) { + amount += tipAmount; + } return LocaleController.getInstance().formatCurrencyString(amount, paymentForm.invoice.currency); } @@ -2409,11 +2776,17 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen webView.loadUrl(webViewUrl = paymentForm.url); } } else if (currentStep == 2) { - inputFields[FIELD_CARD].requestFocus(); - AndroidUtilities.showKeyboard(inputFields[FIELD_CARD]); + AndroidUtilities.runOnUIThread(() -> { + inputFields[FIELD_CARD].requestFocus(); + AndroidUtilities.showKeyboard(inputFields[FIELD_CARD]); + }, 100); } else if (currentStep == 3) { inputFields[FIELD_SAVEDPASSWORD].requestFocus(); AndroidUtilities.showKeyboard(inputFields[FIELD_SAVEDPASSWORD]); + } else if (currentStep == 4) { + if (inputFields != null) { + inputFields[0].requestFocus(); + } } else if (currentStep == 6) { if (!waitingForEmail) { inputFields[FIELD_ENTERPASSWORD].requestFocus(); @@ -2444,6 +2817,9 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen AndroidUtilities.runOnUIThread(() -> { if (resultCode == Activity.RESULT_OK) { PaymentData paymentData = PaymentData.getFromIntent(data); + if (paymentData == null) { + return; + } final String paymentInfo = paymentData.toJson(); if (paymentInfo == null) { return; @@ -2477,7 +2853,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else { if (resultCode == AutoResolveHelper.RESULT_ERROR) { Status status = AutoResolveHelper.getStatusFromIntent(data); - FileLog.e("android pay error " + status.getStatusMessage()); + FileLog.e("android pay error " + (status != null ? status.getStatusMessage() : "")); } } showEditDoneProgress(true, false); @@ -2489,25 +2865,30 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen private void goToNextStep() { if (currentStep == 0) { - int nextStep; - if (paymentForm.invoice.flexible) { - nextStep = 1; - } else if (paymentForm.saved_credentials != null) { - if (UserConfig.getInstance(currentAccount).tmpPassword != null) { - if (UserConfig.getInstance(currentAccount).tmpPassword.valid_until < ConnectionsManager.getInstance(currentAccount).getCurrentTime() + 60) { - UserConfig.getInstance(currentAccount).tmpPassword = null; - UserConfig.getInstance(currentAccount).saveConfig(false); - } - } - if (UserConfig.getInstance(currentAccount).tmpPassword != null) { - nextStep = 4; - } else { - nextStep = 3; - } + if (delegate != null) { + delegate.didSelectNewAddress(validateRequest); + finishFragment(); } else { - nextStep = 2; + int nextStep; + if (paymentForm.invoice.flexible) { + nextStep = 1; + } else if (paymentForm.saved_credentials != null) { + if (UserConfig.getInstance(currentAccount).tmpPassword != null) { + if (UserConfig.getInstance(currentAccount).tmpPassword.valid_until < ConnectionsManager.getInstance(currentAccount).getCurrentTime() + 60) { + UserConfig.getInstance(currentAccount).tmpPassword = null; + UserConfig.getInstance(currentAccount).saveConfig(false); + } + } + if (UserConfig.getInstance(currentAccount).tmpPassword != null) { + nextStep = 4; + } else { + nextStep = 3; + } + } else { + nextStep = 2; + } + presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, null, null, null, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment), isWebView); } - presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, null, null, cardName, validateRequest, saveCardInfo, googlePayCredentials), isWebView); } else if (currentStep == 1) { int nextStep; if (paymentForm.saved_credentials != null) { @@ -2525,10 +2906,10 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else { nextStep = 2; } - presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, shippingOption, null, cardName, validateRequest, saveCardInfo, googlePayCredentials), isWebView); + presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, shippingOption, tipAmount, null, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment), isWebView); } else if (currentStep == 2) { if (paymentForm.password_missing && saveCardInfo) { - passwordFragment = new PaymentFormActivity(paymentForm, messageObject, 6, requestedInfo, shippingOption, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials); + passwordFragment = new PaymentFormActivity(paymentForm, messageObject, 6, requestedInfo, shippingOption, tipAmount, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment); passwordFragment.setCurrentPassword(currentPassword); passwordFragment.setDelegate(new PaymentFormActivityDelegate() { @Override @@ -2558,7 +2939,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen delegate.didSelectNewCard(paymentJson, cardName, saveCardInfo, googlePayCredentials); finishFragment(); } else { - presentFragment(new PaymentFormActivity(paymentForm, messageObject, 4, requestedInfo, shippingOption, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials), isWebView); + presentFragment(new PaymentFormActivity(paymentForm, messageObject, 4, requestedInfo, shippingOption, tipAmount, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment), isWebView); } } } else if (currentStep == 3) { @@ -2568,13 +2949,13 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } else { nextStep = 2; } - presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, shippingOption, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials), !passwordOk); + presentFragment(new PaymentFormActivity(paymentForm, messageObject, nextStep, requestedInfo, shippingOption, tipAmount, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment), true); } else if (currentStep == 4) { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.paymentFinished); finishFragment(); } else if (currentStep == 6) { if (!delegate.didSelectNewCard(paymentJson, cardName, saveCardInfo, googlePayCredentials)) { - presentFragment(new PaymentFormActivity(paymentForm, messageObject, 4, requestedInfo, shippingOption, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials), true); + presentFragment(new PaymentFormActivity(paymentForm, messageObject, 4, requestedInfo, shippingOption, tipAmount, paymentJson, cardName, validateRequest, saveCardInfo, googlePayCredentials, parentFragment), true); } else { finishFragment(); } @@ -2585,7 +2966,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen if (bottomCell[0] == null || sectionCell[2] == null) { return; } - if ((paymentForm.password_missing || paymentForm.can_save_credentials) && (webView == null || webView != null && !webviewLoading)) { + if ((paymentForm.password_missing || paymentForm.can_save_credentials) && (webView == null || !webviewLoading)) { SpannableStringBuilder text = new SpannableStringBuilder(LocaleController.getString("PaymentCardSavePaymentInformationInfoLine1", R.string.PaymentCardSavePaymentInformationInfoLine1)); if (paymentForm.password_missing) { loadPasswordInfo(); @@ -2746,10 +3127,8 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen req.new_settings.hint = ""; req.new_settings.new_algo = currentPassword.new_algo; - if (email.length() > 0) { - req.new_settings.flags |= 2; - req.new_settings.email = email.trim(); - } + req.new_settings.flags |= 2; + req.new_settings.email = email.trim(); } showEditDoneProgress(true, true); Utilities.globalQueue.postRunnable(() -> { @@ -2880,46 +3259,129 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen } showEditDoneProgress(true, true); try { - Stripe stripe = new Stripe(stripeApiKey); - stripe.createToken(card, new TokenCallback() { - public void onSuccess(Token token) { - if (canceled) { - return; + if ("stripe".equals(paymentForm.native_provider)) { + Stripe stripe = new Stripe(providerApiKey); + stripe.createToken(card, new TokenCallback() { + public void onSuccess(Token token) { + if (canceled) { + return; + } + paymentJson = String.format(Locale.US, "{\"type\":\"%1$s\", \"id\":\"%2$s\"}", token.getType(), token.getId()); + AndroidUtilities.runOnUIThread(() -> { + goToNextStep(); + showEditDoneProgress(true, false); + setDonePressed(false); + }); } - paymentJson = String.format(Locale.US, "{\"type\":\"%1$s\", \"id\":\"%2$s\"}", token.getType(), token.getId()); - AndroidUtilities.runOnUIThread(() -> { - goToNextStep(); + + public void onError(Exception error) { + if (canceled) { + return; + } showEditDoneProgress(true, false); setDonePressed(false); - }); + if (error instanceof APIConnectionException || error instanceof APIException) { + AlertsCreator.showSimpleToast(PaymentFormActivity.this, LocaleController.getString("PaymentConnectionFailed", R.string.PaymentConnectionFailed)); + } else { + AlertsCreator.showSimpleToast(PaymentFormActivity.this, error.getMessage()); + } + } } + ); + } else if ("smartglocal".equals(paymentForm.native_provider)) { + AsyncTask task = new AsyncTask() { + @Override + protected String doInBackground(Object... objects) { + HttpURLConnection conn = null; + try { + JSONObject jsonObject = new JSONObject(); + JSONObject cardObject = new JSONObject(); + cardObject.put("number", card.getNumber()); + cardObject.put("expiration_month", String.format(Locale.US, "%02d", card.getExpMonth())); + cardObject.put("expiration_year", "" + card.getExpYear()); + cardObject.put("security_code", "" + card.getCVC()); + jsonObject.put("card", cardObject); - public void onError(Exception error) { - if (canceled) { - return; - } - showEditDoneProgress(true, false); - setDonePressed(false); - if (error instanceof APIConnectionException || error instanceof APIException) { - AlertsCreator.showSimpleToast(PaymentFormActivity.this, LocaleController.getString("PaymentConnectionFailed", R.string.PaymentConnectionFailed)); + URL connectionUrl; + if (paymentForm.invoice.test) { + connectionUrl = new URL("https://tgb-playground.smart-glocal.com/cds/v1/tokenize/card"); } else { - AlertsCreator.showSimpleToast(PaymentFormActivity.this, error.getMessage()); + connectionUrl = new URL("https://tgb.smart-glocal.com/cds/v1/tokenize/card"); + } + conn = (HttpURLConnection) connectionUrl.openConnection(); + conn.setConnectTimeout(30 * 1000); + conn.setReadTimeout(80 * 1000); + conn.setUseCaches(false); + conn.setDoOutput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("X-PUBLIC-TOKEN", providerApiKey); + + try (OutputStream output = conn.getOutputStream()) { + output.write(jsonObject.toString().getBytes("UTF-8")); + } + + int code = conn.getResponseCode(); + if (code >= 200 && code < 300) { + JSONObject result = new JSONObject(); + JSONObject jsonObject1 = new JSONObject(getResponseBody(conn.getInputStream())); + String token = jsonObject1.getJSONObject("data").getString("token"); + result.put("token", token); + result.put("type", "card"); + return result.toString(); + } else { + if (BuildVars.DEBUG_VERSION) { + FileLog.e("" + getResponseBody(conn.getErrorStream())); + } + } + } catch (Exception e) { + FileLog.e(e); + } finally { + if (conn != null) { + conn.disconnect(); } } + return null; } - ); + + @Override + protected void onPostExecute(String result) { + if (canceled) { + return; + } + if (result == null) { + AlertsCreator.showSimpleToast(PaymentFormActivity.this, LocaleController.getString("PaymentConnectionFailed", R.string.PaymentConnectionFailed)); + } else { + paymentJson = result; + goToNextStep(); + } + showEditDoneProgress(true, false); + setDonePressed(false); + } + }; + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null, null, null); + } } catch (Exception e) { FileLog.e(e); } return true; } + private static String getResponseBody(InputStream responseStream) throws IOException { + String rBody = new Scanner(responseStream, "UTF-8") + .useDelimiter("\\A") + .next(); + responseStream.close(); + return rBody; + } + private void sendForm() { if (canceled) { return; } showEditDoneProgress(true, true); validateRequest = new TLRPC.TL_payments_validateRequestedInfo(); + validateRequest.peer = getMessagesController().getInputPeer(messageObject.messageOwner.peer_id); validateRequest.save = saveShippingInfo; validateRequest.msg_id = messageObject.getId(); validateRequest.info = new TLRPC.TL_paymentRequestedInfo(); @@ -3004,33 +3466,6 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen }, ConnectionsManager.RequestFlagFailOnServerErrors); } - private TLRPC.TL_paymentRequestedInfo getRequestInfo() { - TLRPC.TL_paymentRequestedInfo info = new TLRPC.TL_paymentRequestedInfo(); - if (paymentForm.invoice.name_requested) { - info.name = inputFields[FIELD_NAME].getText().toString(); - info.flags |= 1; - } - if (paymentForm.invoice.phone_requested) { - info.phone = "+" + inputFields[FIELD_PHONECODE].getText().toString() + inputFields[FIELD_PHONE].getText().toString(); - info.flags |= 2; - } - if (paymentForm.invoice.email_requested) { - info.email = inputFields[FIELD_EMAIL].getText().toString().trim(); - info.flags |= 4; - } - if (paymentForm.invoice.shipping_address_requested) { - info.shipping_address = new TLRPC.TL_postAddress(); - info.shipping_address.street_line1 = inputFields[FIELD_STREET1].getText().toString(); - info.shipping_address.street_line2 = inputFields[FIELD_STREET2].getText().toString(); - info.shipping_address.city = inputFields[FIELD_CITY].getText().toString(); - info.shipping_address.state = inputFields[FIELD_STATE].getText().toString(); - info.shipping_address.country_iso2 = countryName != null ? countryName : ""; - info.shipping_address.post_code = inputFields[FIELD_POSTCODE].getText().toString(); - info.flags |= 8; - } - return info; - } - private void sendData() { if (canceled) { return; @@ -3038,6 +3473,8 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen showEditDoneProgress(false, true); final TLRPC.TL_payments_sendPaymentForm req = new TLRPC.TL_payments_sendPaymentForm(); req.msg_id = messageObject.getId(); + req.peer = getMessagesController().getInputPeer(messageObject.messageOwner.peer_id); + req.form_id = paymentForm.form_id; if (UserConfig.getInstance(currentAccount).tmpPassword != null && paymentForm.saved_credentials != null) { req.credentials = new TLRPC.TL_inputPaymentCredentialsSaved(); req.credentials.id = paymentForm.saved_credentials.id; @@ -3058,11 +3495,33 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen req.shipping_option_id = shippingOption.id; req.flags |= 2; } + if ((paymentForm.invoice.flags & 256) != 0) { + req.tip_amount = tipAmount != null ? tipAmount : 0; + req.flags |= 4; + } ConnectionsManager.getInstance(currentAccount).sendRequest(req, (response, error) -> { if (response != null) { if (response instanceof TLRPC.TL_payments_paymentResult) { - MessagesController.getInstance(currentAccount).processUpdates(((TLRPC.TL_payments_paymentResult) response).updates, false); - AndroidUtilities.runOnUIThread(this::goToNextStep); + TLRPC.Updates updates = ((TLRPC.TL_payments_paymentResult) response).updates; + TLRPC.Message[] message = new TLRPC.Message[1]; + for (int a = 0, N = updates.updates.size(); a < N; a++) { + TLRPC.Update update = updates.updates.get(a); + if (update instanceof TLRPC.TL_updateNewMessage) { + message[0] = ((TLRPC.TL_updateNewMessage) update).message; + break; + } else if (update instanceof TLRPC.TL_updateNewChannelMessage) { + message[0] = ((TLRPC.TL_updateNewChannelMessage) update).message; + break; + } + } + getMessagesController().processUpdates(updates, false); + AndroidUtilities.runOnUIThread(() -> { + goToNextStep(); + if (parentFragment instanceof ChatActivity) { + CharSequence info = AndroidUtilities.replaceTags(LocaleController.formatString("PaymentInfoHint", R.string.PaymentInfoHint, totalPrice[0], currentItemName)); + ((ChatActivity) parentFragment).getUndoView().showWithAction(0, UndoView.ACTION_PAYMENT_SUCCESS, info, message[0], null, null); + } + }); } else if (response instanceof TLRPC.TL_payments_paymentVerificationNeeded) { AndroidUtilities.runOnUIThread(() -> { NotificationCenter.getInstance(currentAccount).postNotificationName(NotificationCenter.paymentFinished); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java index abe0c4b6b..a2d5d0d8c 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PhotoViewer.java @@ -481,6 +481,16 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat public final static int SELECT_TYPE_WALLPAPER = 3; public final static int SELECT_TYPE_QR = 10; + private boolean longPressed; + private int rewindCount; + private boolean rewindForward; + private boolean rewindByBackSeek; + private long startRewindFrom; + private Runnable updateRewindRunnable; + private long rewindLastTime; + private long rewindLastUpdatePlayerTime; + private long rewindBackSeekPlayerPosition; + public final Property FLASH_VIEW_VALUE = new AnimationProperties.FloatProperty("flashViewAlpha") { @Override public void setValue(View object, float value) { @@ -750,8 +760,8 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat videoPlayerSeekbar.setProgress(progress); } } else { - if (seekToProgressPending == 0) { - videoPlayerSeekbar.setProgress(progress); + if (seekToProgressPending == 0 && (rewindCount == 0 || !rewindByBackSeek)) { + videoPlayerSeekbar.setProgress(progress, false); } if (bufferedProgress != -1) { videoPlayerSeekbar.setBufferedProgress(bufferedProgress); @@ -1452,16 +1462,16 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat parent.invalidate(); } - public void setBackgroundState(int state, boolean animated) { + public void setBackgroundState(int state, boolean animated, boolean animateIcon) { if (backgroundState == state) { return; } if (playPauseDrawable != null) { - boolean animateIcon = backgroundState == 3 || backgroundState == 4; + boolean animatePlayPause = animateIcon && (backgroundState == 3 || backgroundState == 4); if (state == 3) { - playPauseDrawable.setPause(false, animateIcon); + playPauseDrawable.setPause(false, animatePlayPause); } else if (state == 4) { - playPauseDrawable.setPause(true, animateIcon); + playPauseDrawable.setPause(true, animatePlayPause); } playPauseDrawable.setParent(parent); playPauseDrawable.invalidateSelf(); @@ -3018,9 +3028,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (user != null || chat != null) { ImageLocation location; if (user != null) { - location = ImageLocation.getForUser(user, true); + location = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_BIG); } else { - location = ImageLocation.getForChat(chat, true); + location = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); } if (location != null) { imagesArrLocations.add(0, location); @@ -3196,7 +3206,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (finalSize != 0) { requestingPreview = false; photoProgressViews[0].setProgress(1f, true); - photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, true); + photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, true, true); preparePlayer(Uri.fromFile(new File(finalPath)), false, true, editState.savedFilterState); } } @@ -3918,7 +3928,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (avatarsDialogId > 0) { MessagesController.getInstance(currentAccount).deleteUserPhoto(null); } else { - MessagesController.getInstance(currentAccount).changeChatAvatar(-avatarsDialogId, null, null, null, 0, null, null, null); + MessagesController.getInstance(currentAccount).changeChatAvatar(-avatarsDialogId, null, null, null, 0, null, null, null, null); } closePhoto(false, false); } else { @@ -4106,7 +4116,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat inputChatPhoto.id.id = photo.id; inputChatPhoto.id.access_hash = photo.access_hash; inputChatPhoto.id.file_reference = photo.file_reference; - MessagesController.getInstance(currentAccount).changeChatAvatar(-avatarsDialogId, inputChatPhoto, null, null, 0, null, null, null); + MessagesController.getInstance(currentAccount).changeChatAvatar(-avatarsDialogId, inputChatPhoto, null, null, 0, null, null, null, null); chat.photo.dc_id = photo.dc_id; chat.photo.photo_small = smallSize.location; chat.photo.photo_big = bigSize.location; @@ -4352,7 +4362,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } }; - photoProgressViews[a].setBackgroundState(PROGRESS_EMPTY, false); + photoProgressViews[a].setBackgroundState(PROGRESS_EMPTY, false, true); } miniProgressView = new RadialProgressView(activityContext) { @@ -6669,17 +6679,17 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (videoPlayer.isPlaying() && playbackState != ExoPlayer.STATE_ENDED) { if (!isPlaying) { isPlaying = true; - photoProgressViews[0].setBackgroundState(isCurrentVideo ? PROGRESS_NONE : PROGRESS_PAUSE, false); + photoProgressViews[0].setBackgroundState(isCurrentVideo ? PROGRESS_NONE : PROGRESS_PAUSE, false, true); photoProgressViews[0].setIndexedAlpha(1, !isCurrentVideo && (!isAccessibilityEnabled() || playerWasPlaying) && ((playerAutoStarted && !playerWasPlaying) || !isActionBarVisible) ? 0f : 1f, false); playerWasPlaying = true; AndroidUtilities.runOnUIThread(updateProgressRunnable); } } else if (isPlaying || playbackState == ExoPlayer.STATE_ENDED) { - isPlaying = false; if (currentEditMode != 3) { photoProgressViews[0].setIndexedAlpha(1, 1f, false); - photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false); + photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false, isPlaying); } + isPlaying = false; AndroidUtilities.cancelRunOnUIThread(updateProgressRunnable); if (playbackState == ExoPlayer.STATE_ENDED) { if (isCurrentVideo) { @@ -9412,7 +9422,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } for (int a = 0; a < 3; a++) { if (photoProgressViews[a] != null) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, false); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, false, true); } } if (groupedPhotosListView != null) { @@ -9494,10 +9504,10 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (imageLocation == null && avatarsDialogId != 0) { if (avatarsDialogId > 0) { TLRPC.User user = MessagesController.getInstance(currentAccount).getUser(avatarsDialogId); - imageLocation = ImageLocation.getForUser(user, true); + imageLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_BIG); } else { TLRPC.Chat chat = MessagesController.getInstance(currentAccount).getChat(-avatarsDialogId); - imageLocation = ImageLocation.getForChat(chat, true); + imageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); } } if (imageLocation == null) { @@ -10740,13 +10750,13 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat MessageObject messageObject = null; if (currentMessageObject != null) { if (index < 0 || index >= imagesArr.size()) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); return; } messageObject = imagesArr.get(index); canAutoPlay = shouldMessageObjectAutoPlayed(messageObject); if (sharedMediaType == MediaDataController.MEDIA_FILE && !messageObject.canPreviewDocument()) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); return; } if (!TextUtils.isEmpty(messageObject.messageOwner.attachPath)) { @@ -10764,7 +10774,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } else if (currentBotInlineResult != null) { if (index < 0 || index >= imagesArrLocals.size()) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); return; } TLRPC.BotInlineResult botInlineResult = (TLRPC.BotInlineResult) imagesArrLocals.get(index); @@ -10783,14 +10793,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat f2 = new File(FileLoader.getDirectory(FileLoader.MEDIA_DIR_CACHE), currentFileNames[a]); } else if (currentFileLocation != null) { if (index < 0 || index >= imagesArrLocationsVideo.size()) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); return; } ImageLocation location = imagesArrLocationsVideo.get(index); f1 = FileLoader.getPathToAttach(location.location, getFileLocationExt(location), avatarsDialogId != 0 || isEvent); } else if (currentSecureDocument != null) { if (index < 0 || index >= secureDocuments.size()) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); return; } SecureDocument location = secureDocuments.get(index); @@ -10832,9 +10842,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if ((f1Final != null || f2Final != null) && (existsFinal || canStreamFinal)) { if (a != 0 || !isPlaying) { if (isVideoFinal && (!canAutoPlayFinal || a == 0 && playerWasPlaying)) { - photoProgressViews[a].setBackgroundState(PROGRESS_PLAY, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_PLAY, animated, true); } else { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); } } if (a == 0) { @@ -10851,12 +10861,12 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } else { if (isVideoFinal) { if (!FileLoader.getInstance(currentAccount).isLoadingFile(currentFileNames[a])) { - photoProgressViews[a].setBackgroundState(PROGRESS_LOAD, false); + photoProgressViews[a].setBackgroundState(PROGRESS_LOAD, false, true); } else { - photoProgressViews[a].setBackgroundState(PROGRESS_CANCEL, false); + photoProgressViews[a].setBackgroundState(PROGRESS_CANCEL, false, true); } } else { - photoProgressViews[a].setBackgroundState(PROGRESS_EMPTY, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_EMPTY, animated, true); } Float progress = ImageLoader.getInstance().getFileProgress(currentFileNames[a]); if (progress == null) { @@ -10879,9 +10889,9 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } if (isLocalVideo) { - photoProgressViews[a].setBackgroundState(PROGRESS_PLAY, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_PLAY, animated, true); } else { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, animated, true); } } } @@ -11018,7 +11028,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat imageReceiver.setImage(ImageLocation.getForObject(photo, photoObject), filter, placeHolder != null ? new BitmapDrawable(placeHolder.bitmap) : null, imageSize, null, object, cacheType); } else if (webDocument != null) { if (videoThumb != null) { - imageReceiver.setImage(ImageLocation.getForWebFile(webDocument), filter, videoThumb, null, null, object, cacheType); + imageReceiver.setImage(ImageLocation.getForWebFile(webDocument), filter, videoThumb, null, (Drawable) null, object, cacheType); } else { imageReceiver.setImage(ImageLocation.getForWebFile(webDocument), filter, placeHolder != null ? new BitmapDrawable(placeHolder.bitmap) : (isVideo && parentActivity != null ? parentActivity.getResources().getDrawable(R.drawable.nophotos) : null), null, object, cacheType); } @@ -12400,7 +12410,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } for (int a = 0; a < 3; a++) { if (photoProgressViews[a] != null) { - photoProgressViews[a].setBackgroundState(PROGRESS_NONE, false); + photoProgressViews[a].setBackgroundState(PROGRESS_NONE, false, true); } } requestVideoPreview(0); @@ -12578,6 +12588,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return height; } + float longPressX; + Runnable longPressRunnable = new Runnable() { + @Override + public void run() { + onLongPress(); + } + }; + private boolean onTouchEvent(MotionEvent ev) { if (currentEditMode == 3 && animationStartTime != 0 && (ev.getActionMasked() == MotionEvent.ACTION_DOWN || ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN)) { if (ev.getPointerCount() >= 2) { @@ -12590,6 +12608,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return false; } + if (rewindCount > 0) { + if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL ) { + cancelRewind(); + return false; + } + return true; + } + if (currentEditMode == 2) { photoFilterView.onTouch(ev); return true; @@ -12672,7 +12698,14 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) { + longPressX = ev.getX(); + AndroidUtilities.runOnUIThread(longPressRunnable, 300); + } else { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); + } } else if (ev.getActionMasked() == MotionEvent.ACTION_MOVE) { + if (canZoom && ev.getPointerCount() == 2 && !draggingDown && zooming && !changingPage) { discardTap = true; if (currentEditMode == 3) { @@ -12714,6 +12747,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (dx > touchSlop || dy > touchSlop) { discardTap = true; hidePressedDrawables(); + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); if (qualityChooseView != null && qualityChooseView.getVisibility() == View.VISIBLE) { return true; } @@ -12779,6 +12813,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat } } } else if (ev.getActionMasked() == MotionEvent.ACTION_CANCEL || ev.getActionMasked() == MotionEvent.ACTION_UP || ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP) { + AndroidUtilities.cancelRunOnUIThread(longPressRunnable); if (paintViewTouched == 1) { if (photoPaintView != null) { MotionEvent event = MotionEvent.obtain(ev); @@ -12999,6 +13034,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat onActionClick(true); checkProgress(0, false, true); } + checkFullscreenButton(); } private boolean shouldMessageObjectAutoPlayed(MessageObject messageObject) { @@ -13775,11 +13811,172 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat return false; } + private final Runnable backSeek = new Runnable() { + @Override + public void run() { + long duration = videoPlayer.getDuration(); + if (duration == 0 || duration == C.TIME_UNSET) { + rewindLastTime = System.currentTimeMillis(); + return; + } + + long t = System.currentTimeMillis(); + long dt = t - rewindLastTime; + rewindLastTime = t; + if (rewindCount == 1) { + dt *= 3; + } else if (rewindCount == 2) { + dt *= 6; + } else { + dt *= 12; + } + if (rewindForward) { + rewindBackSeekPlayerPosition += dt; + } else { + rewindBackSeekPlayerPosition -= dt; + } + if (rewindBackSeekPlayerPosition < 0) { + rewindBackSeekPlayerPosition = 0; + } else if (rewindBackSeekPlayerPosition > duration) { + rewindBackSeekPlayerPosition = duration; + } + if (rewindByBackSeek && videoPlayer != null && rewindLastTime - rewindLastUpdatePlayerTime > 350) { + rewindLastUpdatePlayerTime = rewindLastTime; + videoPlayer.seekTo(rewindBackSeekPlayerPosition); + } + + if (videoPlayer != null) { + long timeDiff = rewindBackSeekPlayerPosition - startRewindFrom; + videoForwardDrawable.setTime(Math.abs(timeDiff)); + if (rewindByBackSeek) { + videoPlayerSeekbar.setProgress(rewindBackSeekPlayerPosition / (float) videoPlayer.getDuration()); + videoPlayerSeekbarView.invalidate(); + } + } + + if (rewindBackSeekPlayerPosition == 0 || rewindBackSeekPlayerPosition >= duration) { + if (rewindByBackSeek && videoPlayer != null) { + rewindLastUpdatePlayerTime = rewindLastTime; + videoPlayer.seekTo(rewindBackSeekPlayerPosition); + } + cancelRewind(); + onTouchEvent(MotionEvent.obtain(0, 0, MotionEvent.ACTION_CANCEL, 0, 0, 0)); + } + if (rewindCount > 0) { + AndroidUtilities.runOnUIThread(backSeek, 16); + } + } + }; + @Override - public void onLongPress(MotionEvent e) { + public void onLongPress(MotionEvent ev) { } + public void onLongPress() { + longPressed = true; + if (videoPlayer != null && videoPlayerControlVisible) { + long current = videoPlayer.getCurrentPosition(); + long total = videoPlayer.getDuration(); + if (current == C.TIME_UNSET || total < 15 * 1000) { + return; + } + float x = longPressX; + int width = getContainerViewWidth(); + boolean forward; + if (x >= width / 3 * 2) { + forward = true; + } else if (x < width / 3) { + forward = false; + } else { + return; + } + rewindForward = forward; + cancelRewind(); + incrementRewindCount(); + } + } + + private void cancelRewind() { + if (rewindCount != 0) { + rewindCount = 0; + + if (videoPlayer != null) { + if (rewindByBackSeek) { + videoPlayer.seekTo(rewindBackSeekPlayerPosition); + } else { + long current = videoPlayer.getCurrentPosition(); + videoPlayer.seekTo(current); + } + videoPlayer.setPlaybackSpeed(1); + } + } + AndroidUtilities.cancelRunOnUIThread(backSeek); + + if (updateRewindRunnable != null) { + AndroidUtilities.cancelRunOnUIThread(updateRewindRunnable); + updateRewindRunnable = null; + } + + videoForwardDrawable.setShowing(false); + } + + void incrementRewindCount() { + if (videoPlayer == null) { + return; + } + rewindCount++; + boolean needUpdate = false; + if (rewindCount == 1) { + if (rewindForward && videoPlayer.isPlaying()) { + rewindByBackSeek = false; + } else { + rewindByBackSeek = true; + } + } + if (rewindForward && !rewindByBackSeek) { + if (rewindCount == 1) { + videoPlayer.setPlaybackSpeed(4); + needUpdate = true; + } else if (rewindCount == 2) { + videoPlayer.setPlaybackSpeed(7); + needUpdate = true; + } else { + videoPlayer.setPlaybackSpeed(13); + } + } else { + if (rewindCount == 1 || rewindCount == 2) { + needUpdate = true; + } + } + + + if (rewindCount == 1) { + rewindBackSeekPlayerPosition = videoPlayer.getCurrentPosition(); + rewindLastTime = System.currentTimeMillis(); + rewindLastUpdatePlayerTime = rewindLastTime; + startRewindFrom = videoPlayer.getCurrentPosition(); + videoForwardDrawable.setOneShootAnimation(false); + videoForwardDrawable.setLeftSide(!rewindForward); + videoForwardDrawable.setShowing(true); + containerView.invalidate(); + } + + AndroidUtilities.cancelRunOnUIThread(backSeek); + AndroidUtilities.runOnUIThread(backSeek); + + if (needUpdate) { + if (updateRewindRunnable != null) { + AndroidUtilities.cancelRunOnUIThread(updateRewindRunnable); + } + AndroidUtilities.runOnUIThread(updateRewindRunnable = () -> { + updateRewindRunnable = null; + incrementRewindCount(); + }, 2000); + } + } + + @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (scale != 1) { @@ -13913,6 +14110,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat current = 0; } if (apply) { + videoForwardDrawable.setOneShootAnimation(true); videoForwardDrawable.setLeftSide(x < width / 3); videoForwardDrawable.addTime(10000); videoPlayer.seekTo(current); @@ -14251,7 +14449,7 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat if (resultHeight == originalHeight && resultWidth == originalWidth) { tryStartRequestPreviewOnFinish = false; photoProgressViews[0].setProgress(0,photoProgressViews[0].backgroundState == 0 || photoProgressViews[0].previousBackgroundState == 0); - photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false); + photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false, true); if (!wasRequestingPreview) { preparePlayer(currentPlayingVideoFile, false, false, editState.savedFilterState); videoPlayer.seekTo((long) (videoTimelineView.getLeftProgress() * videoDuration)); @@ -14299,11 +14497,11 @@ public class PhotoViewer implements NotificationCenter.NotificationCenterDelegat requestingPreview = true; photoProgressViews[0].setProgress(0,photoProgressViews[0].backgroundState == 0 || photoProgressViews[0].previousBackgroundState == 0); - photoProgressViews[0].setBackgroundState(PROGRESS_EMPTY, false); + photoProgressViews[0].setBackgroundState(PROGRESS_EMPTY, false, true); } } else { tryStartRequestPreviewOnFinish = false; - photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false); + photoProgressViews[0].setBackgroundState(PROGRESS_PLAY, false, true); if (request == 2) { preparePlayer(currentPlayingVideoFile, false, false, editState.savedFilterState); videoPlayer.seekTo((long) (videoTimelineView.getLeftProgress() * videoDuration)); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PinchToZoomHelper.java b/TMessagesProj/src/main/java/org/telegram/ui/PinchToZoomHelper.java new file mode 100644 index 000000000..71cfe9f19 --- /dev/null +++ b/TMessagesProj/src/main/java/org/telegram/ui/PinchToZoomHelper.java @@ -0,0 +1,708 @@ +package org.telegram.ui; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.annotation.TargetApi; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Outline; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.TextureView; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewOutlineProvider; +import android.widget.FrameLayout; + +import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; + +import org.telegram.messenger.AndroidUtilities; +import org.telegram.messenger.FileLoader; +import org.telegram.messenger.ImageLocation; +import org.telegram.messenger.ImageReceiver; +import org.telegram.messenger.MediaController; +import org.telegram.messenger.MessageObject; +import org.telegram.messenger.R; +import org.telegram.messenger.WebFile; +import org.telegram.tgnet.TLRPC; +import org.telegram.ui.Components.AnimatedFileDrawable; +import org.telegram.ui.Components.BackupImageView; +import org.telegram.ui.Components.CubicBezierInterpolator; +import org.telegram.ui.Components.LayoutHelper; + +public class PinchToZoomHelper { + + private final ViewGroup parentView; + + private ZoomOverlayView overlayView; + private View child; + private ImageReceiver childImage; + + private ImageReceiver fullImage = new ImageReceiver(); + + private boolean inOverlayMode; + + float parentOffsetX; + float parentOffsetY; + + float pinchCenterX; + float pinchCenterY; + + private float imageX; + private float imageY; + private float imageHeight; + private float imageWidth; + + private float fullImageHeight; + private float fullImageWidth; + + private float finishProgress; + private float progressToFullView; + ValueAnimator finishTransition; + private MessageObject messageObject; + + Callback callback; + ClipBoundsListener clipBoundsListener; + + float pinchStartCenterX; + float pinchStartCenterY; + float pinchStartDistance; + float pinchTranslationX; + float pinchTranslationY; + boolean isInPinchToZoomTouchMode; + + private int pointerId1, pointerId2; + + float pinchScale; + + private float enterProgress; + private float[] clipTopBottom = new float[2]; + + private boolean isHardwareVideo; + + public PinchToZoomHelper(ViewGroup parentView) { + this.parentView = parentView; + } + + public void startZoom(View child, ImageReceiver image, MessageObject messageObject) { + this.child = child; + this.messageObject = messageObject; + + if (overlayView == null) { + overlayView = new ZoomOverlayView(parentView.getContext()); + overlayView.setFocusable(false); + overlayView.setFocusableInTouchMode(false); + overlayView.setEnabled(false); + } + + if (fullImage == null) { + fullImage = new ImageReceiver(); + fullImage.setCrossfadeAlpha((byte) 2); + fullImage.setCrossfadeWithOldImage(false); + fullImage.onAttachedToWindow(); + } + + inOverlayMode = true; + parentView.addView(overlayView); + finishProgress = 1f; + progressToFullView = 0f; + + setFullImage(messageObject); + + imageX = image.getImageX(); + imageY = image.getImageY(); + imageHeight = image.getImageHeight(); + imageWidth = image.getImageWidth(); + fullImageHeight = image.getBitmapHeight(); + fullImageWidth = image.getBitmapWidth(); + + if (fullImageHeight / fullImageWidth != imageHeight / imageWidth) { + if (fullImageHeight / fullImageWidth < imageHeight / imageWidth) { + fullImageWidth = fullImageWidth / fullImageHeight * imageHeight; + fullImageHeight = imageHeight; + } else { + fullImageHeight = fullImageHeight / fullImageWidth * imageWidth; + fullImageWidth = imageWidth; + } + } else { + fullImageHeight = imageHeight; + fullImageWidth = imageWidth; + } + + + if (messageObject != null && messageObject.isVideo() && MediaController.getInstance().isPlayingMessage(messageObject)) { + isHardwareVideo = true; + MediaController.getInstance().setTextureView(overlayView.videoTextureView, overlayView.aspectRatioFrameLayout, overlayView.videoPlayerContainer, true); + FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) overlayView.videoPlayerContainer.getLayoutParams(); + overlayView.videoPlayerContainer.setTag(R.id.parent_tag, image); + if (layoutParams.width != image.getImageWidth() || layoutParams.height != image.getImageHeight()) { + overlayView.aspectRatioFrameLayout.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL); + layoutParams.width = (int) image.getImageWidth(); + layoutParams.height = (int) image.getImageHeight(); + overlayView.videoPlayerContainer.setLayoutParams(layoutParams); + } + overlayView.videoTextureView.setScaleX(1f); + overlayView.videoTextureView.setScaleY(1f); + + if (callback != null) { + overlayView.backupImageView.setImageBitmap(callback.getCurrentTextureView().getBitmap((int) fullImageWidth, (int) fullImageHeight)); + overlayView.backupImageView.setSize((int) fullImageWidth, (int) fullImageHeight); + overlayView.backupImageView.getImageReceiver().setRoundRadius(image.getRoundRadius()); + } + overlayView.videoPlayerContainer.setVisibility(View.VISIBLE); + } else { + isHardwareVideo = false; + this.childImage = new ImageReceiver(); + this.childImage.onAttachedToWindow(); + Drawable drawable = image.getDrawable(); + this.childImage.setImageBitmap(drawable); + if (drawable instanceof AnimatedFileDrawable) { + ((AnimatedFileDrawable) drawable).addSecondParentView(overlayView); + ((AnimatedFileDrawable) drawable).setInvalidateParentViewWithSecond(true); + } + this.childImage.setImageCoords(imageX, imageY, imageWidth, imageHeight); + this.childImage.setRoundRadius(image.getRoundRadius()); + + this.fullImage.setRoundRadius(image.getRoundRadius()); + overlayView.videoPlayerContainer.setVisibility(View.GONE); + } + + if (callback != null) { + callback.onZoomStarted(messageObject); + } + enterProgress = 0f; + } + + private void setFullImage(MessageObject messageObject) { + if (messageObject == null) { + return; + } + if (!messageObject.isPhoto()) { + return; + } + int[] size = new int[1]; + ImageLocation imageLocation = getImageLocation(messageObject, size); + if (imageLocation != null) { + boolean cacheOnly = messageObject != null && messageObject.isWebpage(); + Object parentObject; + parentObject = messageObject; + + String filter = null; + fullImage.setImage(imageLocation, filter, null, null, null, size[0], null, parentObject, cacheOnly ? 1 : 0); + fullImage.setCrossfadeAlpha((byte) 2); + } + + updateViewsLocation(); + } + + private boolean updateViewsLocation() { + float parentOffsetX = 0; + float parentOffsetY = 0; + View currentView = child; + while (currentView != parentView) { + if (currentView == null) { + return false; + } + parentOffsetX += currentView.getLeft(); + parentOffsetY += currentView.getTop(); + currentView = (View) currentView.getParent(); + } + + this.parentOffsetX = parentOffsetX; + this.parentOffsetY = parentOffsetY; + return true; + } + + public void finishZoom() { + if (finishTransition != null || !inOverlayMode) { + return; + } + if (!updateViewsLocation()) { + clear(); + } + finishTransition = ValueAnimator.ofFloat(1f, 0); + finishTransition.addUpdateListener(valueAnimator -> { + finishProgress = (float) valueAnimator.getAnimatedValue(); + invalidateViews(); + }); + finishTransition.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (finishTransition != null) { + finishTransition = null; + clear(); + } + } + }); +// finishTransition.setDuration(350); +// finishTransition.setInterpolator(new OvershootInterpolator(1.05f)); + + finishTransition.setDuration(220); + finishTransition.setInterpolator(CubicBezierInterpolator.DEFAULT); + finishTransition.start(); + } + + public void clear() { + if (inOverlayMode) { + if (callback != null) { + callback.onZoomFinished(messageObject); + } + inOverlayMode = false; + } + if (overlayView != null && overlayView.getParent() != null) { + parentView.removeView(overlayView); + overlayView.backupImageView.getImageReceiver().clearImage(); + + if (childImage != null) { + Drawable drawable = this.childImage.getDrawable(); + if (drawable instanceof AnimatedFileDrawable) { + ((AnimatedFileDrawable) drawable).removeSecondParentView(overlayView); + } + } + } + if (child != null) { + child.invalidate(); + child = null; + } + if (childImage != null) { + this.childImage.onDetachedFromWindow(); + this.childImage.clearImage(); + this.childImage = null; + } + if (fullImage != null) { + fullImage.onDetachedFromWindow(); + fullImage.clearImage(); + fullImage = null; + } + + messageObject = null; + } + + public boolean inOverlayMode() { + return inOverlayMode; + } + + + public boolean isInOverlayMode() { + return inOverlayMode; + } + + public boolean isInOverlayModeFor(View child) { + return inOverlayMode && child == this.child; + } + + public boolean onTouchEvent(MotionEvent ev) { + if (updateViewsLocation() && child != null) { + ev.offsetLocation(-parentOffsetX, -parentOffsetY); + return child.onTouchEvent(ev); + } + return false; + } + + public Bitmap getVideoBitmap(int w, int h) { + if (overlayView == null) { + return null; + } + return overlayView.videoTextureView.getBitmap(w, h); + } + + public ImageReceiver getPhotoImage() { + return childImage; + } + + protected boolean zoomEnabled(View child, ImageReceiver receiver) { + Drawable drawable = receiver.getDrawable(); + if (drawable instanceof AnimatedFileDrawable) { + if (((AnimatedFileDrawable)receiver.getDrawable()).isLoadingStream()) { + return false; + } else { + return true; + } + } + return receiver.hasNotThumb(); + } + + + private class ZoomOverlayView extends FrameLayout { + + private FrameLayout videoPlayerContainer; + private TextureView videoTextureView; + private AspectRatioFrameLayout aspectRatioFrameLayout; + private BackupImageView backupImageView; + private Path aspectPath = new Path(); + private Paint aspectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + + public ZoomOverlayView(Context context) { + super(context); + + if (Build.VERSION.SDK_INT >= 21) { + videoPlayerContainer = new FrameLayout(context); + videoPlayerContainer.setOutlineProvider(new ViewOutlineProvider() { + + @TargetApi(Build.VERSION_CODES.LOLLIPOP) + @Override + public void getOutline(View view, Outline outline) { + ImageReceiver imageReceiver = (ImageReceiver) view.getTag(R.id.parent_tag); + if (imageReceiver != null) { + int[] rad = imageReceiver.getRoundRadius(); + int maxRad = 0; + for (int a = 0; a < 4; a++) { + maxRad = Math.max(maxRad, rad[a]); + } + outline.setRoundRect(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight(), maxRad); + } else { + outline.setOval(0, 0, AndroidUtilities.roundMessageSize, AndroidUtilities.roundMessageSize); + } + } + }); + videoPlayerContainer.setClipToOutline(true); + } else { + videoPlayerContainer = new FrameLayout(context) { + + RectF rect = new RectF(); + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + aspectPath.reset(); + ImageReceiver imageReceiver = (ImageReceiver) getTag(R.id.parent_tag); + if (imageReceiver != null) { + int[] rad = imageReceiver.getRoundRadius(); + int maxRad = 0; + for (int a = 0; a < 4; a++) { + maxRad = Math.max(maxRad, rad[a]); + } + rect.set(0, 0, w, h); + aspectPath.addRoundRect(rect, AndroidUtilities.dp(4), AndroidUtilities.dp(4), Path.Direction.CW); + } else { + aspectPath.addCircle(w / 2, h / 2, w / 2, Path.Direction.CW); + } + aspectPath.toggleInverseFillType(); + } + + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + if (visibility == VISIBLE) { + setLayerType(View.LAYER_TYPE_HARDWARE, null); + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + if (getTag() == null) { + canvas.drawPath(aspectPath, aspectPaint); + } + } + }; + aspectPath = new Path(); + aspectPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + aspectPaint.setColor(0xff000000); + aspectPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + } + + backupImageView = new BackupImageView(context); + videoPlayerContainer.addView(backupImageView); + + videoPlayerContainer.setWillNotDraw(false); + + aspectRatioFrameLayout = new AspectRatioFrameLayout(context); + aspectRatioFrameLayout.setBackgroundColor(0); + videoPlayerContainer.addView(aspectRatioFrameLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT, Gravity.CENTER)); + + videoTextureView = new TextureView(context); + videoTextureView.setOpaque(false); + aspectRatioFrameLayout.addView(videoTextureView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); + + addView(videoPlayerContainer, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT)); + setWillNotDraw(false); + // videoTextureView.setVisibility(GONE); + } + + + @Override + protected void dispatchDraw(Canvas canvas) { + if (finishTransition == null && enterProgress != 1f) { + enterProgress += 16f / 220; + if (enterProgress > 1f) { + enterProgress = 1f; + } else { + invalidateViews(); + } + } + + float progress = finishProgress * CubicBezierInterpolator.DEFAULT.getInterpolation(enterProgress); + float clipTop = 0; + float clipBottom = getMeasuredHeight(); + if (progress != 1f && clipBoundsListener != null) { + clipBoundsListener.getClipTopBottom(clipTopBottom); + canvas.save(); + clipTop = clipTopBottom[0] * (1f - progress); + clipBottom = clipTopBottom[1] * (1f - progress) + getMeasuredHeight() * progress; + canvas.clipRect(0, clipTop, getMeasuredWidth(), clipBottom); + drawImage(canvas); + super.dispatchDraw(canvas); + canvas.restore(); + } else { + drawImage(canvas); + super.dispatchDraw(canvas); + } + + float parentOffsetX = PinchToZoomHelper.this.parentOffsetX - getLeft(); + float parentOffsetY = PinchToZoomHelper.this.parentOffsetY - getTop(); + + drawOverlays(canvas, (1f - progress), parentOffsetX, parentOffsetY, clipTop, clipBottom); + } + + private void drawImage(Canvas canvas) { + if (!inOverlayMode || child == null || parentView == null) { + return; + } + + updateViewsLocation(); + + float parentOffsetX = PinchToZoomHelper.this.parentOffsetX - getLeft(); + float parentOffsetY = PinchToZoomHelper.this.parentOffsetY - getTop(); + + canvas.save(); + float s = pinchScale * finishProgress + 1f * 1f - finishProgress; + canvas.scale(s, s, parentOffsetX + pinchCenterX, parentOffsetY + pinchCenterY); + canvas.translate(parentOffsetX + pinchTranslationX * finishProgress, parentOffsetY + pinchTranslationY * finishProgress); + if (fullImage != null && fullImage.hasNotThumb()) { + if (progressToFullView != 1) { + progressToFullView += 16f / 150f; + if (progressToFullView > 1) { + progressToFullView = 1f; + } else { + invalidateViews(); + } + } + fullImage.setAlpha(progressToFullView); + } + + float x = imageX; + float y = imageY; + if (imageHeight != fullImageHeight || imageWidth != fullImageWidth) { + float p; + if (s < 1f) { + p = 0; + } else if (s < 1.4f) { + p = (s - 1f) / 0.4f; + } else { + p = 1f; + } + float verticalPadding = (fullImageHeight - imageHeight) / 2f; + float horizontalPadding = (fullImageWidth - imageWidth) / 2f; + x = imageX - horizontalPadding * p; + y = imageY - verticalPadding * p; + if (childImage != null) { + childImage.setImageCoords(x, y, imageWidth + horizontalPadding * p * 2, imageHeight + verticalPadding * p * 2); + } + } + + if (!isHardwareVideo) { + if (childImage != null) { + if (progressToFullView != 1f) { + childImage.draw(canvas); + fullImage.setImageCoords(childImage.getImageX(), childImage.getImageY(), childImage.getImageWidth(), childImage.getImageHeight()); + fullImage.draw(canvas); + } else { + fullImage.setImageCoords(childImage.getImageX(), childImage.getImageY(), childImage.getImageWidth(), childImage.getImageHeight()); + fullImage.draw(canvas); + } + } + } else { + videoPlayerContainer.setPivotX(pinchCenterX - imageX); + videoPlayerContainer.setPivotY(pinchCenterY - imageY); + + videoPlayerContainer.setScaleY(s); + videoPlayerContainer.setScaleX(s); + + videoPlayerContainer.setTranslationX(x + parentOffsetX + pinchTranslationX * s * finishProgress); + videoPlayerContainer.setTranslationY(y + parentOffsetY + pinchTranslationY* s * finishProgress); + } + + canvas.restore(); + } + } + + protected void drawOverlays(Canvas canvas, float alpha, float parentOffsetX, float parentOffsetY, float clipTop, float clipBottom) { + + } + + private ImageLocation getImageLocation(MessageObject message, int[] size) { + if (message.messageOwner instanceof TLRPC.TL_messageService) { + if (message.messageOwner.action instanceof TLRPC.TL_messageActionUserUpdatedPhoto) { + return null; + } else { + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, AndroidUtilities.getPhotoSize()); + if (sizeFull != null) { + if (size != null) { + size[0] = sizeFull.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return ImageLocation.getForObject(sizeFull, message.photoThumbsObject); + } else if (size != null) { + size[0] = -1; + } + } + } else if (message.messageOwner.media instanceof TLRPC.TL_messageMediaPhoto && message.messageOwner.media.photo != null || message.messageOwner.media instanceof TLRPC.TL_messageMediaWebPage && message.messageOwner.media.webpage != null) { + if (message.isGif()) { + return ImageLocation.getForDocument(message.getDocument()); + } else { + TLRPC.PhotoSize sizeFull = FileLoader.getClosestPhotoSizeWithSize(message.photoThumbs, 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.photoThumbsObject); + } else if (size != null) { + size[0] = -1; + } + } + } else if (message.messageOwner.media instanceof TLRPC.TL_messageMediaInvoice) { + return ImageLocation.getForWebFile(WebFile.createWithWebDocument(((TLRPC.TL_messageMediaInvoice) message.messageOwner.media).photo)); + } else if (message.getDocument() != null) { + TLRPC.Document document = message.getDocument(); + if (MessageObject.isDocumentHasThumb(message.getDocument())) { + TLRPC.PhotoSize thumb = FileLoader.getClosestPhotoSizeWithSize(document.thumbs, 90); + if (size != null) { + size[0] = thumb.size; + if (size[0] == 0) { + size[0] = -1; + } + } + return ImageLocation.getForDocument(thumb, document); + } + } + return null; + } + + public void setClipBoundsListener(ClipBoundsListener clipBoundsListener) { + this.clipBoundsListener = clipBoundsListener; + } + + public interface Callback { + default TextureView getCurrentTextureView() { + return null; + } + default void onZoomStarted(MessageObject messageObject) { + + } + default void onZoomFinished(MessageObject messageObject) { + + } + + } + + public void setCallback(Callback callback) { + this.callback = callback; + } + + public interface ClipBoundsListener { + void getClipTopBottom(float[] topBottom); + } + + public boolean checkPinchToZoom(MotionEvent ev, View child, ImageReceiver image, MessageObject messageObject) { + if (!zoomEnabled(child, image)) { + return false; + } + if (ev.getActionMasked() == MotionEvent.ACTION_DOWN || ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) { + if (!isInPinchToZoomTouchMode && ev.getPointerCount() == 2) { + pinchStartDistance = (float) Math.hypot(ev.getX(1) - ev.getX(0), ev.getY(1) - ev.getY(0)); + pinchStartCenterX = pinchCenterX = (ev.getX(0) + ev.getX(1)) / 2.0f; + pinchStartCenterY = pinchCenterY = (ev.getY(0) + ev.getY(1)) / 2.0f; + pinchScale = 1f; + + pointerId1 = ev.getPointerId(0); + pointerId2 = ev.getPointerId(1); + isInPinchToZoomTouchMode = true; + } + } else if (ev.getActionMasked() == MotionEvent.ACTION_MOVE && isInPinchToZoomTouchMode) { + 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) { + isInPinchToZoomTouchMode = false; + child.getParent().requestDisallowInterceptTouchEvent(false); + finishZoom(); + return false; + } + pinchScale = (float) Math.hypot(ev.getX(index2) - ev.getX(index1), ev.getY(index2) - ev.getY(index1)) / pinchStartDistance; + if (pinchScale > 1.005f && !isInOverlayMode()) { + pinchStartDistance = (float) Math.hypot(ev.getX(index2) - ev.getX(index1), ev.getY(index2) - ev.getY(index1)); + pinchStartCenterX = pinchCenterX = (ev.getX(index1) + ev.getX(index2)) / 2.0f; + pinchStartCenterY = pinchCenterY = (ev.getY(index1) + ev.getY(index2)) / 2.0f; + pinchScale = 1f; + pinchTranslationX = 0f; + pinchTranslationY = 0f; + child.getParent().requestDisallowInterceptTouchEvent(true); + startZoom(child, image, messageObject); + + } + + float newPinchCenterX = (ev.getX(index1) + ev.getX(index2)) / 2.0f; + float newPinchCenterY = (ev.getY(index1) + ev.getY(index2)) / 2.0f; + + + + float moveDx = pinchStartCenterX - newPinchCenterX; + float moveDy = pinchStartCenterY - newPinchCenterY; + pinchTranslationX = -moveDx / pinchScale; + pinchTranslationY = -moveDy / pinchScale; + invalidateViews(); + } else if ((ev.getActionMasked() == MotionEvent.ACTION_UP || (ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP && checkPointerIds(ev)) || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) && isInPinchToZoomTouchMode) { + isInPinchToZoomTouchMode = false; + child.getParent().requestDisallowInterceptTouchEvent(false); + finishZoom(); + } + return isInOverlayModeFor(child); + } + + 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; + } + + protected void invalidateViews() { + if (overlayView != null) { + overlayView.invalidate(); + } + } + + public View getChild() { + return child; + } +} diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java index f9677b3b0..fcb1a681a 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PopupNotificationActivity.java @@ -1372,7 +1372,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC currentChat = chat; if (avatarImageView != null) { AvatarDrawable avatarDrawable = new AvatarDrawable(currentChat); - avatarImageView.setImage(ImageLocation.getForChat(chat, false), "50_50", avatarDrawable, chat); + avatarImageView.setImage(ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, chat); } } else if (currentUser != null) { TLRPC.User user = MessagesController.getInstance(currentMessageObject.currentAccount).getUser(currentUser.id); @@ -1382,7 +1382,7 @@ public class PopupNotificationActivity extends Activity implements NotificationC currentUser = user; if (avatarImageView != null) { AvatarDrawable avatarDrawable = new AvatarDrawable(currentUser); - avatarImageView.setImage(ImageLocation.getForUser(user, false), "50_50", avatarDrawable, user); + avatarImageView.setImage(ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), "50_50", ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_STRIPPED), "50_50", avatarDrawable, user); } } } diff --git a/TMessagesProj/src/main/java/org/telegram/ui/PrivacySettingsActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/PrivacySettingsActivity.java index 75a1f505e..21b434618 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/PrivacySettingsActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/PrivacySettingsActivity.java @@ -41,6 +41,8 @@ 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.Bulletin; +import org.telegram.ui.Components.BulletinFactory; import org.telegram.ui.Components.LayoutHelper; import org.telegram.ui.Components.RecyclerListView; @@ -447,6 +449,17 @@ public class PrivacySettingsActivity extends BaseFragment implements Notificatio getConnectionsManager().sendRequest(req, (response, error) -> { }); + String text; + if (clear[0] && clear[1]) { + text = LocaleController.getString("PrivacyPaymentsPaymentShippingCleared", R.string.PrivacyPaymentsPaymentShippingCleared); + } else if (clear[0]) { + text = LocaleController.getString("PrivacyPaymentsShippingInfoCleared", R.string.PrivacyPaymentsShippingInfoCleared); + } else if (clear[1]) { + text = LocaleController.getString("PrivacyPaymentsPaymentInfoCleared", R.string.PrivacyPaymentsPaymentInfoCleared); + } else { + return; + } + BulletinFactory.of(PrivacySettingsActivity.this).createSimpleBulletin(R.raw.chats_infotip, text).show(); }); builder1.setNegativeButton(LocaleController.getString("Cancel", R.string.Cancel), null); showDialog(builder1.create()); diff --git a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java index bb4b9e885..59d2263be 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/ProfileActivity.java @@ -13,9 +13,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; -import android.animation.StateListAnimator; import android.animation.ValueAnimator; -import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; @@ -25,9 +23,9 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.database.DataSetObserver; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; -import android.graphics.Outline; import android.graphics.Paint; import android.graphics.Point; import android.graphics.PorterDuff; @@ -57,7 +55,6 @@ import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewGroup; -import android.view.ViewOutlineProvider; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.accessibility.AccessibilityNodeInfo; @@ -310,6 +307,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private TLRPC.FileLocation avatar; private TLRPC.FileLocation avatarBig; + private ImageLocation uploadingImageLocation; private final static int add_contact = 1; private final static int block_contact = 2; @@ -410,6 +408,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. private boolean firstLayout = true; private boolean invalidateScroll = true; + PinchToZoomHelper pinchToZoomHelper; + private final Property HEADER_SHADOW = new AnimationProperties.FloatProperty("headerShadow") { @Override public void setValue(ProfileActivity object, float value) { @@ -588,7 +588,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. public void invalidate() { super.invalidate(); if (avatarsViewPager != null) { - BackupImageView imageView = avatarsViewPager.getCurrentItemView(); avatarsViewPager.invalidate(); } } @@ -1389,10 +1388,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. listAdapter.notifyDataSetChanged(); } - if (arguments.containsKey("nearby_distance")) { - getMessagesController().preloadGreetingsSticker(); - } - if (arguments.containsKey("preload_messages")) { getMessagesController().ensureMessagesLoaded(user_id, 0, null); } @@ -1440,6 +1435,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (imageUpdater != null) { imageUpdater.clear(); } + if (pinchToZoomHelper != null) { + pinchToZoomHelper.clear(); + } } @Override @@ -1959,6 +1957,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. fragmentView = new NestedFrameLayout(context) { + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (pinchToZoomHelper.isInOverlayMode()) { + return pinchToZoomHelper.onTouchEvent(ev); + } + return super.dispatchTouchEvent(ev); + } + private boolean ignoreLayout; private Paint grayPaint = new Paint(); @@ -2264,6 +2270,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } } + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + if (pinchToZoomHelper.isInOverlayMode() && (child == avatarContainer2 || child == actionBar || child == writeButton)) { + return true; + } + return super.drawChild(canvas, child, drawingTime); + } }; fragmentView.setWillNotDraw(false); FrameLayout frameLayout = (FrameLayout) fragmentView; @@ -2652,7 +2666,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. BuildVars.DEBUG_VERSION && !AndroidUtilities.isTablet() && Build.VERSION.SDK_INT >= 23 ? (SharedConfig.smoothKeyboard ? LocaleController.getString("DebugMenuDisableSmoothKeyboard", R.string.DebugMenuDisableSmoothKeyboard) : LocaleController.getString("DebugMenuEnableSmoothKeyboard", R.string.DebugMenuEnableSmoothKeyboard)) : null, BuildVars.DEBUG_PRIVATE_VERSION ? (SharedConfig.disableVoiceAudioEffects ? "Enable voip audio effects" : "Disable voip audio effects") : null, Build.VERSION.SDK_INT >= 21 ? (SharedConfig.noStatusBar ? "Show status bar background" : "Hide status bar background") : null, - SharedConfig.useMediaStream ? "Use call stream in voice chats" : "User media stream in voice chats" + SharedConfig.useMediaStream ? "Use call stream in voice chats" : "Use media stream in voice chats" }; builder.setItems(items, (dialog, which) -> { if (which == 0) { @@ -2677,7 +2691,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getMessagesStorage().clearSentMedia(); SharedConfig.setNoSoundHintShowed(false); SharedPreferences.Editor editor = MessagesController.getGlobalMainSettings().edit(); - editor.remove("archivehint").remove("proximityhint").remove("archivehint_l").remove("gifhint").remove("soundHint").remove("themehint").remove("filterhint").commit(); + editor.remove("archivehint").remove("proximityhint").remove("archivehint_l").remove("gifhint").remove("reminderhint").remove("soundHint").remove("themehint").remove("filterhint").commit(); SharedConfig.textSelectionHintShows = 0; SharedConfig.lockRecordAudioVideoHint = 0; SharedConfig.stickersReorderingHintUsed = false; @@ -2877,6 +2891,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. avatarContainer = new FrameLayout(context); avatarContainer2 = new FrameLayout(context); + AndroidUtilities.updateViewVisibilityAnimated(avatarContainer2, true, 1f, false); frameLayout.addView(avatarContainer2, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT)); avatarContainer.setPivotX(0); avatarContainer.setPivotY(0); @@ -3030,15 +3045,14 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. updateProfileData(); writeButton = new RLottieImageView(context); - Drawable drawable = Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_profile_actionBackground), Theme.getColor(Theme.key_profile_actionPressedBackground)); - if (Build.VERSION.SDK_INT < 21) { - Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).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)); - drawable = combinedDrawable; - } - writeButton.setBackgroundDrawable(drawable); + + Drawable shadowDrawable = context.getResources().getDrawable(R.drawable.floating_shadow_profile).mutate(); + shadowDrawable.setColorFilter(new PorterDuffColorFilter(Color.BLACK, PorterDuff.Mode.MULTIPLY)); + CombinedDrawable combinedDrawable = new CombinedDrawable(shadowDrawable, + Theme.createSimpleSelectorCircleDrawable(AndroidUtilities.dp(56), Theme.getColor(Theme.key_profile_actionBackground), Theme.getColor(Theme.key_profile_actionPressedBackground)), + 0, 0); + combinedDrawable.setIconSize(AndroidUtilities.dp(56), AndroidUtilities.dp(56)); + writeButton.setBackgroundDrawable(combinedDrawable); if (user_id != 0) { if (imageUpdater != null) { cameraDrawable = new RLottieDrawable(R.raw.camera_outline, "" + R.raw.camera_outline, AndroidUtilities.dp(56), AndroidUtilities.dp(56), false, null); @@ -3056,20 +3070,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } writeButton.setColorFilter(new PorterDuffColorFilter(Theme.getColor(Theme.key_profile_actionIcon), PorterDuff.Mode.MULTIPLY)); writeButton.setScaleType(ImageView.ScaleType.CENTER); - if (Build.VERSION.SDK_INT >= 21) { - StateListAnimator animator = new StateListAnimator(); - animator.addState(new int[]{android.R.attr.state_pressed}, ObjectAnimator.ofFloat(writeButton, View.TRANSLATION_Z, AndroidUtilities.dp(2), AndroidUtilities.dp(4)).setDuration(200)); - animator.addState(new int[]{}, ObjectAnimator.ofFloat(writeButton, View.TRANSLATION_Z, AndroidUtilities.dp(4), AndroidUtilities.dp(2)).setDuration(200)); - writeButton.setStateListAnimator(animator); - writeButton.setOutlineProvider(new ViewOutlineProvider() { - @SuppressLint("NewApi") - @Override - public void getOutline(View view, Outline outline) { - outline.setOval(0, 0, AndroidUtilities.dp(56), AndroidUtilities.dp(56)); - } - }); - } - frameLayout.addView(writeButton, LayoutHelper.createFrame(Build.VERSION.SDK_INT >= 21 ? 56 : 60, Build.VERSION.SDK_INT >= 21 ? 56 : 60, Gravity.RIGHT | Gravity.TOP, 0, 0, 16, 0)); + + frameLayout.addView(writeButton, LayoutHelper.createFrame(60, 60, Gravity.RIGHT | Gravity.TOP, 0, 0, 16, 0)); writeButton.setOnClickListener(v -> { if (writeButton.getTag() != null) { return; @@ -3079,8 +3081,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. needLayout(false); if (scrollTo != -1) { - //layoutManager.scrollToPositionWithOffset(scrollTo, scrollToPosition); - if (writeButtonTag != null) { writeButton.setTag(0); writeButton.setScaleX(0.2f); @@ -3214,6 +3214,82 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. updateSelectedMediaTabText(); + + ViewGroup decorView; + if (Build.VERSION.SDK_INT >= 21) { + decorView = (ViewGroup) getParentActivity().getWindow().getDecorView(); + } else { + decorView = frameLayout; + } + pinchToZoomHelper = new PinchToZoomHelper(decorView) { + + Paint statusBarPaint; + @Override + protected void invalidateViews() { + super.invalidateViews(); + fragmentView.invalidate(); + for (int i = 0; i < avatarsViewPager.getChildCount(); i++) { + avatarsViewPager.getChildAt(i).invalidate(); + } + if (writeButton != null) { + writeButton.invalidate(); + } + } + + @Override + protected void drawOverlays(Canvas canvas, float alpha, float parentOffsetX, float parentOffsetY, float clipTop, float clipBottom) { + if (alpha > 0) { + AndroidUtilities.rectTmp.set(0, 0, avatarsViewPager.getMeasuredWidth(), avatarsViewPager.getMeasuredHeight() + AndroidUtilities.dp(30)); + canvas.saveLayerAlpha(AndroidUtilities.rectTmp, (int) (255 * alpha), Canvas.ALL_SAVE_FLAG); + + avatarContainer2.draw(canvas); + + if (actionBar.getOccupyStatusBar()) { + if (statusBarPaint == null) { + statusBarPaint = new Paint(); + statusBarPaint.setColor(ColorUtils.setAlphaComponent(Color.BLACK, (int) (255 * 0.2f))); + } + canvas.drawRect(actionBar.getX(), actionBar.getY(), actionBar.getX() + actionBar.getMeasuredWidth(), actionBar.getY() + AndroidUtilities.statusBarHeight, statusBarPaint); + } + canvas.save(); + canvas.translate(actionBar.getX(), actionBar.getY()); + actionBar.draw(canvas); + canvas.restore(); + + if (writeButton != null && writeButton.getVisibility() == View.VISIBLE && writeButton.getAlpha() > 0) { + canvas.save(); + float s = 0.5f + 0.5f * alpha; + canvas.scale(s, s, writeButton.getX() + writeButton.getMeasuredWidth() / 2f, writeButton.getY() + writeButton.getMeasuredHeight() / 2f); + canvas.translate(writeButton.getX(), writeButton.getY()); + writeButton.draw(canvas); + canvas.restore(); + } + canvas.restore(); + } + } + + @Override + protected boolean zoomEnabled(View child, ImageReceiver receiver) { + if (!super.zoomEnabled(child, receiver)) { + return false; + } + return listView.getScrollState() != RecyclerView.SCROLL_STATE_DRAGGING; + } + }; + pinchToZoomHelper.setCallback(new PinchToZoomHelper.Callback() { + @Override + public void onZoomStarted(MessageObject messageObject) { + listView.cancelClickRunnables(true); + if (sharedMediaLayout != null && sharedMediaLayout.getCurrentListView() != null) { + sharedMediaLayout.getCurrentListView().cancelClickRunnables(true); + } + Bitmap bitmap = pinchToZoomHelper.getPhotoImage() == null ? null : pinchToZoomHelper.getPhotoImage().getBitmap(); + if (bitmap != null) { + topView.setBackgroundColor(ColorUtils.blendARGB(AndroidUtilities.calcBitmapColor(bitmap), Theme.getColor(Theme.key_windowBackgroundWhite), 0.1f)); + } + } + }); + avatarsViewPager.setPinchToZoomHelper(pinchToZoomHelper); return fragmentView; } @@ -3304,7 +3380,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. args.putInt("nearby_distance", distance); } ChatActivity chatActivity = new ChatActivity(args); - chatActivity.setPreloadedSticker(getMessagesController().getPreloadedSticker(), false); + chatActivity.setPreloadedSticker(getMediaDataController().getGreetingsSticker(), false); presentFragment(chatActivity, true); if (AndroidUtilities.isTablet()) { finishFragment(); @@ -3558,9 +3634,9 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (i == 0) { try { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) ApplicationLoader.applicationContext.getSystemService(Context.CLIPBOARD_SERVICE); - android.content.ClipData clip = android.content.ClipData.newPlainText("label", "@" + username); + android.content.ClipData clip = android.content.ClipData.newPlainText("label", "https://" + MessagesController.getInstance(UserConfig.selectedAccount).linkPrefix + "/" + username); clipboard.setPrimaryClip(clip); - BulletinFactory.of(this).createCopyBulletin(LocaleController.getString("UsernameCopied", R.string.UsernameCopied)).show(); + BulletinFactory.of(this).createCopyBulletin(LocaleController.getString("LinkCopied", R.string.LinkCopied)).show(); } catch (Exception e) { FileLog.e(e); } @@ -4085,6 +4161,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. isPulledDown = true; overlaysView.setOverlaysVisible(true, durationFactor); avatarsViewPagerIndicatorView.refreshVisibility(durationFactor); + avatarsViewPager.setCreateThumbFromParent(true); + avatarsViewPager.getAdapter().notifyDataSetChanged(); expandAnimator.cancel(); float value = AndroidUtilities.lerp(expandAnimatorValues, currentExpanAnimatorFracture); expandAnimatorValues[0] = value; @@ -5487,8 +5565,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } avatarDrawable.setInfo(user); - final ImageLocation imageLocation = ImageLocation.getForUser(user, true); - final ImageLocation thumbLocation = ImageLocation.getForUser(user, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_BIG); + final ImageLocation thumbLocation = ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL); final ImageLocation videoLocation = avatarsViewPager.getCurrentVideoLocation(thumbLocation, imageLocation); avatarsViewPager.initIfEmpty(imageLocation, thumbLocation); String filter; @@ -5694,8 +5772,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. photoBig = chat.photo.photo_big; } avatarDrawable.setInfo(chat); - final ImageLocation imageLocation = ImageLocation.getForChat(chat, true); - final ImageLocation thumbLocation = ImageLocation.getForChat(chat, false); + final ImageLocation imageLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_BIG); + final ImageLocation thumbLocation = ImageLocation.getForUserOrChat(chat, ImageLocation.TYPE_SMALL); final ImageLocation videoLocation = avatarsViewPager.getCurrentVideoLocation(thumbLocation, imageLocation); boolean initied = avatarsViewPager.initIfEmpty(imageLocation, thumbLocation); if ((imageLocation == null || initied) && isPulledDown) { @@ -6166,6 +6244,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. return; } avatarProgressView.setProgress(progress); + avatarsViewPager.setUploadProgress(uploadingImageLocation, progress); } @Override @@ -6192,6 +6271,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. req.flags |= 4; } getConnectionsManager().sendRequest(req, (response, error) -> AndroidUtilities.runOnUIThread(() -> { + avatarsViewPager.removeUploadingImage(uploadingImageLocation); if (error == null) { TLRPC.User user = getMessagesController().getUser(getUserConfig().getClientUserId()); if (user == null) { @@ -6223,7 +6303,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. src.renameTo(destFile); String oldKey = avatar.volume_id + "_" + avatar.local_id + "@50_50"; String newKey = small.location.volume_id + "_" + small.location.local_id + "@50_50"; - ImageLoader.getInstance().replaceImageInCache(oldKey, newKey, ImageLocation.getForUser(user, false), false); + ImageLoader.getInstance().replaceImageInCache(oldKey, newKey, ImageLocation.getForUserOrChat(user, ImageLocation.TYPE_SMALL), false); } if (big != null && avatarBig != null) { File destFile = FileLoader.getPathToAttach(big, true); @@ -6245,6 +6325,7 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. allowPullingDown = !AndroidUtilities.isTablet() && !isInLandscapeMode && avatarImage.getImageReceiver().hasNotThumb(); avatar = null; avatarBig = null; + avatarsViewPager.setCreateThumbFromParent(false); updateProfileData(); showAvatarProgress(false, true); getNotificationCenter().postNotificationName(NotificationCenter.updateInterfaces, MessagesController.UPDATE_MASK_ALL); @@ -6252,7 +6333,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. getUserConfig().saveConfig(true); })); } else { - allowPullingDown = false; avatar = smallSize.location; avatarBig = bigSize.location; avatarImage.setImage(ImageLocation.getForLocal(avatar), "50_50", avatarDrawable, null); @@ -6263,11 +6343,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } needLayout(true); } + avatarsViewPager.addUploadingImage(uploadingImageLocation = ImageLocation.getForLocal(avatarBig), ImageLocation.getForLocal(avatar)); showAvatarProgress(true, false); - final View view = layoutManager.findViewByPosition(0); - if (view != null && isPulledDown) { - listView.smoothScrollBy(0, view.getTop() - AndroidUtilities.dp(88), CubicBezierInterpolator.EASE_OUT_QUINT); - } } actionBar.createMenu().requestLayout(); }); @@ -6582,7 +6659,11 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. break; case 0: case 9: - abi = "universal " + Build.CPU_ABI + " " + Build.CPU_ABI2; + if (AndroidUtilities.isStandaloneApp()) { + abi = "direct " + Build.CPU_ABI + " " + Build.CPU_ABI2; + } else { + abi = "universal " + Build.CPU_ABI + " " + Build.CPU_ABI2; + } break; } cell.setText(LocaleController.formatString("TelegramVersion", R.string.TelegramVersion, String.format(Locale.US, "v%s (%d) %s", pInfo.versionName, code, abi))); @@ -7586,6 +7667,8 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. final Object onlineTextViewTag = onlineTextView[1].getTag(); if (onlineTextViewTag instanceof String) { onlineTextView[1].setTextColor(Theme.getColor((String) onlineTextViewTag)); + } else { + onlineTextView[1].setTextColor(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue)); } } if (lockIconDrawable != null) { @@ -7594,7 +7677,6 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. if (scamDrawable != null) { scamDrawable.setColor(Theme.getColor(Theme.key_avatar_subtitleInProfileBlue)); } - nameTextView[1].setBackgroundColor(Theme.getColor(Theme.key_avatar_backgroundActionBarBlue)); nameTextView[1].setTextColor(Theme.getColor(Theme.key_profile_title)); actionBar.setItemsColor(Theme.getColor(Theme.key_actionBarDefaultIcon), false); actionBar.setItemsBackgroundColor(Theme.getColor(Theme.key_avatar_actionBarSelectorBlue), false); @@ -7766,6 +7848,10 @@ public class ProfileActivity extends BaseFragment implements NotificationCenter. } } + public void scrollToSharedMedia() { + layoutManager.scrollToPositionWithOffset(sharedMediaRow, -listView.getPaddingTop()); + } + private class DiffCallback extends DiffUtil.Callback { int oldRowCount; diff --git a/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java b/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java index 5a876ec85..843db0086 100644 --- a/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java +++ b/TMessagesProj/src/main/java/org/telegram/ui/VoIPFragment.java @@ -427,11 +427,9 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification initRenderers(); VoIPService.getSharedInstance().registerStateListener(this); } - } - if (id == NotificationCenter.emojiDidLoad) { - checkEmojiLoaded(true); - } - if (id == NotificationCenter.closeInCallActivity) { + } else if (id == NotificationCenter.emojiDidLoad) { + updateKeyView(true); + } else if (id == NotificationCenter.closeInCallActivity) { windowView.finish(); } } @@ -574,7 +572,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification } }); - callingUserPhotoView.setImage(ImageLocation.getForUser(callingUser, true), null, gradientDrawable, callingUser); + callingUserPhotoView.setImage(ImageLocation.getForUserOrChat(callingUser, ImageLocation.TYPE_BIG), null, gradientDrawable, callingUser); currentUserCameraFloatingLayout = new VoIPFloatingLayout(context); currentUserCameraFloatingLayout.setRelativePosition(1f, 1f); @@ -696,7 +694,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification statusLayout.setFocusableInTouchMode(true); callingUserPhotoViewMini = new BackupImageView(context); - callingUserPhotoViewMini.setImage(ImageLocation.getForUser(callingUser, false), null, Theme.createCircleDrawable(AndroidUtilities.dp(135), 0xFF000000), callingUser); + callingUserPhotoViewMini.setImage(ImageLocation.getForUserOrChat(callingUser, ImageLocation.TYPE_SMALL), null, Theme.createCircleDrawable(AndroidUtilities.dp(135), 0xFF000000), callingUser); callingUserPhotoViewMini.setRoundRadius(AndroidUtilities.dp(135) / 2); callingUserPhotoViewMini.setVisibility(View.GONE); @@ -1670,20 +1668,23 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification } private void updateKeyView(boolean animated) { - TLRPC.EncryptedChat encryptedChat = new TLRPC.TL_encryptedChat(); VoIPService service = VoIPService.getSharedInstance(); if (service == null) { return; } + byte[] auth_key = null; try { ByteArrayOutputStream buf = new ByteArrayOutputStream(); buf.write(service.getEncryptionKey()); buf.write(service.getGA()); - encryptedChat.auth_key = buf.toByteArray(); + auth_key = buf.toByteArray(); } catch (Exception checkedExceptionsAreBad) { FileLog.e(checkedExceptionsAreBad); } - byte[] sha256 = Utilities.computeSHA256(encryptedChat.auth_key, 0, encryptedChat.auth_key.length); + if (auth_key == null) { + return; + } + byte[] sha256 = Utilities.computeSHA256(auth_key, 0, auth_key.length); String[] emoji = EncryptionKeyEmojifier.emojifyForCall(sha256); for (int i = 0; i < 4; i++) { Emoji.EmojiDrawable drawable = Emoji.getEmojiDrawable(emoji[i]); @@ -1701,6 +1702,7 @@ public class VoIPFragment implements VoIPBaseService.StateListener, Notification private void checkEmojiLoaded(boolean animated) { int count = 0; + for (int i = 0; i < 4; i++) { if (emojiDrawables[i] != null && emojiDrawables[i].isLoaded()) { count++; diff --git a/TMessagesProj/src/main/res/drawable-hdpi/bot_card.png b/TMessagesProj/src/main/res/drawable-hdpi/bot_card.png new file mode 100644 index 000000000..ebe0630d5 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/bot_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_addbio.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_addbio.png new file mode 100644 index 000000000..67ab5fba8 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_addbio.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_bio.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_bio.png new file mode 100644 index 000000000..dc0edc981 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_bio.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_abuse.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_abuse.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_abuse.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_abuse.png diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_fake.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_fake.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_fake.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_fake.png diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_other.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_other.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_other.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_other.png diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_spam.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_spam.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_spam.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_spam.png diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_violence.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_violence.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_violence.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_violence.png diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/msg_report_xxx.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_report_xxx.png similarity index 100% rename from TMessagesProj/src/main/res/mipmap-mdpi/msg_report_xxx.png rename to TMessagesProj/src/main/res/drawable-hdpi/msg_report_xxx.png diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_timeredit.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_timeredit.png new file mode 100644 index 000000000..a0bbaad25 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_timeredit.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/msg_voiceshare.png b/TMessagesProj/src/main/res/drawable-hdpi/msg_voiceshare.png new file mode 100644 index 000000000..00aea32dc Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/msg_voiceshare.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_address.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_address.png new file mode 100644 index 000000000..7341068be Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_address.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_card.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_card.png new file mode 100644 index 000000000..7572ef30b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_delivery.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_delivery.png new file mode 100644 index 000000000..2f5fc2389 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_delivery.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_email.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_email.png new file mode 100644 index 000000000..a5062eeea Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_email.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_name.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_name.png new file mode 100644 index 000000000..8a7d1393d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_name.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_phone.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_phone.png new file mode 100644 index 000000000..5ba9c8f28 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_phone.png differ diff --git a/TMessagesProj/src/main/res/drawable-hdpi/payment_provider.png b/TMessagesProj/src/main/res/drawable-hdpi/payment_provider.png new file mode 100644 index 000000000..caee3243d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-hdpi/payment_provider.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/bot_card.png b/TMessagesProj/src/main/res/drawable-mdpi/bot_card.png new file mode 100644 index 000000000..471992ec8 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/bot_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_addbio.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_addbio.png new file mode 100644 index 000000000..2040bc03d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_addbio.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_bio.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_bio.png new file mode 100644 index 000000000..69c938ad9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_bio.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_timeredit.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_timeredit.png new file mode 100644 index 000000000..fe9850122 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_timeredit.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/msg_voiceshare.png b/TMessagesProj/src/main/res/drawable-mdpi/msg_voiceshare.png new file mode 100644 index 000000000..610261900 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/msg_voiceshare.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_address.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_address.png new file mode 100644 index 000000000..1af8d1f28 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_address.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_card.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_card.png new file mode 100644 index 000000000..e508623aa Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_delivery.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_delivery.png new file mode 100644 index 000000000..7f185e279 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_delivery.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_email.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_email.png new file mode 100644 index 000000000..37ad4f77f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_email.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_name.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_name.png new file mode 100644 index 000000000..dbe245fd0 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_name.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_phone.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_phone.png new file mode 100644 index 000000000..f9f19e9f1 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_phone.png differ diff --git a/TMessagesProj/src/main/res/drawable-mdpi/payment_provider.png b/TMessagesProj/src/main/res/drawable-mdpi/payment_provider.png new file mode 100644 index 000000000..0e5187d71 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-mdpi/payment_provider.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/bot_card.png b/TMessagesProj/src/main/res/drawable-xhdpi/bot_card.png new file mode 100644 index 000000000..844da73b9 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/bot_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_addbio.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_addbio.png new file mode 100644 index 000000000..fd37e12e3 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_addbio.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_bio.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_bio.png new file mode 100644 index 000000000..8e575078d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_bio.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_timeredit.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_timeredit.png new file mode 100644 index 000000000..4a6b4ba2f Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_timeredit.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/msg_voiceshare.png b/TMessagesProj/src/main/res/drawable-xhdpi/msg_voiceshare.png new file mode 100644 index 000000000..f0b6e673a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/msg_voiceshare.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_address.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_address.png new file mode 100644 index 000000000..5b98c0048 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_address.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_card.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_card.png new file mode 100644 index 000000000..7701c5c0b Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_delivery.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_delivery.png new file mode 100644 index 000000000..cf1740268 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_delivery.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_email.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_email.png new file mode 100644 index 000000000..c949e108e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_email.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_name.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_name.png new file mode 100644 index 000000000..5ce8b3a40 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_name.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_phone.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_phone.png new file mode 100644 index 000000000..d74d70a9d Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_phone.png differ diff --git a/TMessagesProj/src/main/res/drawable-xhdpi/payment_provider.png b/TMessagesProj/src/main/res/drawable-xhdpi/payment_provider.png new file mode 100644 index 000000000..7c3765629 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xhdpi/payment_provider.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/bot_card.png b/TMessagesProj/src/main/res/drawable-xxhdpi/bot_card.png new file mode 100644 index 000000000..b16909e05 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/bot_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_addbio.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_addbio.png new file mode 100644 index 000000000..aaf83b51a Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_addbio.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_bio.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_bio.png new file mode 100644 index 000000000..7a988c39e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_bio.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_timeredit.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_timeredit.png new file mode 100644 index 000000000..21b2ff7b5 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_timeredit.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/msg_voiceshare.png b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_voiceshare.png new file mode 100644 index 000000000..67f50d770 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/msg_voiceshare.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_address.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_address.png new file mode 100644 index 000000000..39f1e849e Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_address.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_card.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_card.png new file mode 100644 index 000000000..14d8c8087 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_card.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_delivery.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_delivery.png new file mode 100644 index 000000000..8ed8b2655 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_delivery.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_email.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_email.png new file mode 100644 index 000000000..e18d3f669 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_email.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_name.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_name.png new file mode 100644 index 000000000..d4852fd81 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_name.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_phone.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_phone.png new file mode 100644 index 000000000..ac1b32350 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_phone.png differ diff --git a/TMessagesProj/src/main/res/drawable-xxhdpi/payment_provider.png b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_provider.png new file mode 100644 index 000000000..04e2bd3c7 Binary files /dev/null and b/TMessagesProj/src/main/res/drawable-xxhdpi/payment_provider.png differ diff --git a/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_sa.xml b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_sa.xml new file mode 100644 index 000000000..bd195b5c4 --- /dev/null +++ b/TMessagesProj/src/main/res/mipmap-anydpi-v26/ic_launcher_sa.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_sa.png new file mode 100644 index 000000000..fede4550b Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/ic_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_sa.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_sa.png new file mode 100644 index 000000000..15048ba2f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_background_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_sa.png new file mode 100644 index 000000000..188a738cc Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-hdpi/icon_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_sa.png new file mode 100644 index 000000000..19df9e171 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/ic_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_sa.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_sa.png new file mode 100644 index 000000000..d71874f0e Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_background_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_sa.png new file mode 100644 index 000000000..e73ac3b18 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-mdpi/icon_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_sa.png new file mode 100644 index 000000000..88fad92c5 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/ic_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_sa.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_sa.png new file mode 100644 index 000000000..6c88855d4 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_background_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_sa.png new file mode 100644 index 000000000..ac5945bf8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xhdpi/icon_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_sa.png new file mode 100644 index 000000000..f8aa06f8f Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/ic_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_sa.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_sa.png new file mode 100644 index 000000000..1bbf66361 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_background_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_sa.png new file mode 100644 index 000000000..662cb7de8 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxhdpi/icon_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_sa.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_sa.png new file mode 100644 index 000000000..66433b366 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/ic_launcher_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_sa.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_sa.png new file mode 100644 index 000000000..5d9f485f5 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_background_sa.png differ diff --git a/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_sa.png b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_sa.png new file mode 100644 index 000000000..07c31a093 Binary files /dev/null and b/TMessagesProj/src/main/res/mipmap-xxxhdpi/icon_foreground_sa.png differ diff --git a/TMessagesProj/src/main/res/raw/contacts_sync_off.json b/TMessagesProj/src/main/res/raw/contacts_sync_off.json new file mode 100644 index 000000000..da55eb03a --- /dev/null +++ b/TMessagesProj/src/main/res/raw/contacts_sync_off.json @@ -0,0 +1 @@ +{"v":"5.7.6","fr":60,"ip":0,"op":120,"w":512,"h":512,"nm":"contacts_off","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,260,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":0,"k":[446.087,446.087,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"line","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":3,"s":[75.005,76.383,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.6,"y":0},"t":18,"s":[85.99,87.592,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36,"s":[81.058,83.557,0]}],"ix":2,"l":2},"a":{"a":0,"k":[-33.942,-31.443,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.4,0.4,0.4],"y":[0,0,0]},"t":3,"s":[0,0,100]},{"t":8,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.8,"y":0},"t":6,"s":[{"i":[[-1.367,-1.367],[0,0],[1.367,-1.367],[1.367,1.367],[0,0],[-1.367,1.367]],"o":[[0,0],[1.367,1.367],[-1.367,1.367],[0,0],[-1.367,-1.367],[1.367,-1.367]],"v":[[-31.552,-33.975],[-31.383,-33.862],[-31.383,-28.912],[-36.332,-28.912],[-36.502,-29.025],[-36.502,-33.975]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-1.367,-1.367],[0,0],[1.367,-1.367],[1.367,1.367],[0,0],[-1.367,1.367]],"o":[[0,0],[1.367,1.367],[-1.367,1.367],[0,0],[-1.367,-1.367],[1.367,-1.367]],"v":[[-31.552,-33.975],[-3.88,-6.993],[-3.88,-2.044],[-8.829,-2.044],[-36.502,-29.025],[-36.502,-33.975]],"c":true}]},{"t":16,"s":[{"i":[[-1.367,-1.367],[0,0],[1.367,-1.367],[1.367,1.367],[0,0],[-1.367,1.367]],"o":[[0,0],[1.367,1.367],[-1.367,1.367],[0,0],[-1.367,-1.367],[1.367,-1.367]],"v":[[-31.552,-33.975],[34.916,32.493],[34.916,37.443],[29.966,37.443],[-36.502,-29.025],[-36.502,-33.975]],"c":true}]}],"ix":2},"nm":"Path 6","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":[100,100],"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":"Combined-Shape","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"NULL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,260,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":0,"k":[446.087,446.087,100],"ix":6,"l":2}},"ao":0,"ip":-7,"op":123,"st":-7,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"ысфду","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.757,220.511,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"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":9.455,"s":[100,100,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":14.574,"s":[94,106,100]},{"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":20.422,"s":[100,100,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":26.271,"s":[94,106,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":31.389,"s":[106,94,100]},{"t":49,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":9,"op":122,"st":-7,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"head","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.62,"y":0},"t":5.068,"s":[115,256.692,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.629,"y":0.882},"o":{"x":0.642,"y":0},"t":20.422,"s":[115,92.692,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.533,"y":1},"o":{"x":0.805,"y":0.932},"t":31.389,"s":[115,126.692,0],"to":[0,0,0],"ti":[0,0,0]},{"t":43.0859375,"s":[115,116.692,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.62,0.62,0.62],"y":[0,0,0]},"t":5.068,"s":[240.887,240.887,100]},{"t":20.421875,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.62,"y":0},"t":5.068,"s":[{"i":[[-5.523,0],[0,-5.523],[5.523,0],[0,5.523]],"o":[[5.523,0],[0,5.523],[-5.523,0],[0,-5.523]],"v":[[0,-10],[10,0],[0,10],[-10,0]],"c":true}]},{"t":30.658203125,"s":[{"i":[[-5.523,0],[0,-5.523],[5.523,0],[0,5.523]],"o":[[5.523,0],[0,5.523],[-5.523,0],[0,-5.523]],"v":[[0,-10],[10,0],[0,10],[-10,0]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":123,"st":-10,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.757,327.033,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":6.758,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":17.742,"s":[94,106,100]},{"i":{"x":[0.23,0.23,0.23],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":27.879,"s":[106,94,100]},{"t":46,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":-7,"op":123,"st":-7,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"body 3","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[115,195.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":22.810546875,"s":[115,115,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.389,0.389,0.389],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":22.810546875,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[0,-3.278],[0,0],[0,0],[0,0],[2.89,0],[0,0],[0,0],[0,0]],"o":[[3.299,0],[0,0],[0,0],[0,0],[-0.159,2.832],[0,0],[0,0],[0,0],[0,0]],"v":[[0.034,-1.92],[6.008,3.612],[6.1,4.292],[6.1,5.552],[6.091,5.858],[0.68,10.937],[0.68,10.937],[0.608,10.941],[-0.121,-1.881]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.604,"s":[{"i":[[0,0],[0,-4.325],[0,0],[0,0],[0,0],[1.241,0],[0,0],[0,0],[0,0]],"o":[[4.353,0],[0,0],[0,0],[0,0],[-0.068,1.216],[0,0],[0,0],[0,0],[0,0]],"v":[[1.271,-12.202],[9.153,-4.903],[9.182,13.545],[9.182,14.086],[9.178,14.217],[6.854,16.398],[6.854,16.398],[5.893,16.399],[-1.254,-12.199]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[0,-5.94],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[5.979,0],[0,0],[0,0],[0,0],[-0.026,0.468],[0,0],[0,0],[0,0],[0,0]],"v":[[3.352,-10.632],[14.178,-0.606],[14.192,2.121],[14.192,3.681],[14.179,5.428],[14.157,5.489],[14.157,5.493],[14.141,5.461],[-3.659,-10.616]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[0,-6.951],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[6.996,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.653,-9.65],[17.32,2.081],[17.336,7.138],[17.336,7.331],[17.327,7.852],[17.33,7.845],[17.33,7.899],[15.348,7.893],[-4.439,-9.633]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,-7.961],[0,0],[0,0],[0,0],[1.415,0],[0,0],[0,0],[0,0]],"o":[[8.013,0],[0,0],[0,0],[0,0],[-0.078,1.387],[0,0],[0,0],[0,0],[0,0]],"v":[[5.954,-8.668],[20.462,4.768],[20.464,5.605],[20.464,6.222],[20.46,6.371],[17.81,8.858],[17.81,8.858],[15.372,8.868],[-3.06,-8.649]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[12.984,8.488],[-2.179,-8.472]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[14.084,8.506],[-2.509,-8.492]],"c":true}]},{"t":46,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[14.121,8.5],[-2.635,-8.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":123,"st":-7,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"body 2","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[115,195.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":22.810546875,"s":[115,115,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.389,0.389,0.389],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":22.810546875,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,3.174],[0,0],[0,0],[-1.285,0.992],[-0.923,0.201]],"o":[[0,0],[-3.195,0],[0,0],[0,0],[0,-1.819],[0.699,-0.539],[0.478,-0.104]],"v":[[0.446,10.949],[-0.335,10.986],[-6.12,5.239],[-6.12,4.322],[-6.212,3.733],[-4.114,-0.586],[-1.654,-1.713]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7.604,"s":[{"i":[[0,0],[0,0],[0,1.258],[0,0],[0,0],[-1.527,1.178],[-1.097,0.239]],"o":[[0,0],[-1.267,0],[0,0],[0,0],[0,-2.162],[0.83,-0.641],[0.568,-0.124]],"v":[[3.719,16.399],[-6.752,16.402],[-9.045,14.123],[-9.045,14.061],[-9.074,-5.539],[-6.581,-10.671],[-3.658,-12.01]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[0,0],[0,1.376],[0,0],[0,0],[-2.714,2.084],[-1.93,0.42]],"o":[[0,0],[-1.385,0],[0,0],[0,0],[0,-3.834],[1.464,-1.125],[1.004,-0.219]],"v":[[3.265,10.711],[-15.198,10.677],[-17.706,8.185],[-17.706,8.168],[-17.714,2.261],[-13.282,-6.834],[-11.057,-7.581]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[0,0],[0,1.416],[0,0],[0,0],[-3.103,2.394],[-2.227,0.485]],"o":[[0,0],[-1.426,0],[0,0],[0,0],[0,-4.393],[1.686,-1.301],[1.154,-0.251]],"v":[[3.11,8.768],[-18.084,8.721],[-20.665,6.156],[-20.665,6.155],[-20.666,4.926],[-15.599,-5.502],[-11.344,-7.349]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[0,0],[0,1.421],[0,0],[0,0],[-3.147,2.429],[-2.261,0.492]],"o":[[0,0],[-1.43,0],[0,0],[0,0],[0,-4.456],[1.712,-1.321],[1.17,-0.255]],"v":[[3.093,8.548],[-18.41,8.5],[-21,5.927],[-21,5.927],[-21,5.227],[-15.861,-5.351],[-9.836,-8.112]],"c":true}]},{"t":46,"s":[{"i":[[0,0],[0,0],[0,1.421],[0,0],[0,0],[-3.122,2.395],[-2.297,0.47]],"o":[[0,0],[-1.43,0],[0,0],[0,0],[0,-4.502],[1.698,-1.302],[2.907,3.047]],"v":[[5.939,8.489],[-18.41,8.5],[-21,5.927],[-21,5.927],[-21,5.227],[-15.962,-5.347],[-9.914,-8.043]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":123,"st":-7,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"body","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[115,195.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":22.810546875,"s":[115,115,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.389,0.389,0.389],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"t":22.810546875,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[0,-3.278],[0,0],[0,0],[0,0],[2.89,0],[0,0],[0,0],[0,0],[0,3.174],[0,0],[0,0],[-2.62,0.571],[-0.516,0],[0,0]],"o":[[3.299,0],[0,0],[0,0],[0,0],[-0.159,2.832],[0,0],[0,0],[0,0],[-3.195,0],[0,0],[0,0],[0,-2.808],[0.478,-0.104],[0,0],[0,0]],"v":[[0.034,-1.92],[6.008,3.612],[6.1,4.292],[6.1,5.552],[6.091,5.858],[0.68,10.937],[0.68,10.937],[0.446,10.949],[-0.335,10.986],[-6.12,5.239],[-6.12,4.322],[-6.212,3.733],[-1.654,-1.713],[-0.16,-1.872],[-0.16,-1.872]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":7.604,"s":[{"i":[[0,0],[0,-4.325],[0,0],[0,0],[0,0],[1.241,0],[0,0],[0,0],[0,0],[0,1.258],[0,0],[0,0],[-3.113,0.678],[-0.613,0],[0,0]],"o":[[4.353,0],[0,0],[0,0],[0,0],[-0.068,1.216],[0,0],[0,0],[0,0],[-1.267,0],[0,0],[0,0],[0,-3.337],[0.568,-0.124],[0,0],[0,0]],"v":[[1.271,-12.202],[9.153,-4.903],[9.182,13.545],[9.182,14.086],[9.178,14.217],[6.854,16.398],[6.854,16.398],[3.719,16.399],[-6.752,16.402],[-9.045,14.123],[-9.045,14.061],[-9.074,-5.539],[-3.658,-12.01],[-1.883,-12.198],[-1.883,-12.198]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":29.568,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,0],[0,1.421],[0,0],[0,0],[-6.417,1.398],[-1.263,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[0,0],[-1.43,0],[0,0],[0,0],[0,-6.879],[1.17,-0.255],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[9.864,8.5],[-18.41,8.5],[-21,5.927],[-21,5.927],[-21,5.227],[-9.836,-8.112],[-6.176,-8.5],[-6.176,-8.5]],"c":true}]},{"t":46,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,0],[0,1.421],[0,0],[0,0],[-6.519,1.335],[-1.19,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[0,0],[-1.43,0],[0,0],[0,0],[0,-6.951],[1.109,-0.227],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[6.892,8.5],[-18.41,8.5],[-21,5.927],[-21,5.927],[-21,5.227],[-9.634,-8.155],[-6.176,-8.5],[-6.176,-8.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-7,"op":14,"st":-7,"bm":0},{"ddd":0,"ind":10,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[209.161,166.02,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"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":8.947,"s":[100,100,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":16.369,"s":[94,106,100]},{"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":23.107,"s":[100,100,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":30.387,"s":[94,106,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":36.982,"s":[106,94,100]},{"t":51,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":12,"op":119,"st":-9,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"head_big","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.487,"y":0},"t":6.475,"s":[121.589,291.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":12.246,"s":[109.722,269.377,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":22.965,"s":[115,114.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.15,"y":1},"o":{"x":0.6,"y":0},"t":34.508,"s":[115,134.344,0],"to":[0,0,0],"ti":[0,0,0]},{"t":46.876953125,"s":[115,124.344,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.11,0.11,0.11],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":8.947,"s":[129.365,129.365,100]},{"t":24.61328125,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":6.475,"s":[{"i":[[-3.384,0],[0,-7.456],[2.057,-2.369],[-2.851,2.475]],"o":[[7.456,0],[0,3.384],[-2.475,2.851],[2.369,-2.057]],"v":[[0,-13.5],[13.5,0],[10.198,8.847],[-8.847,-10.197]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-3.384,0],[0,-7.456],[2.855,-2.545],[2.351,2.397]],"o":[[7.456,0],[0,3.384],[-3.436,-3.384],[2.126,-2.304]],"v":[[0,-13.5],[13.5,0],[9.018,9.63],[-9.971,-9.302]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-1.696,0.51],[-0.101,-7.209],[2.264,-1.327],[1.281,1.326]],"o":[[7.453,0.119],[-0.251,1.997],[-2.652,-2.625],[1.704,-1.264]],"v":[[0,-13.5],[13.5,-0.3],[12.498,1.661],[-1.984,-12.659]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[-0.007,1.021],[-0.202,-6.962],[1.673,-0.11],[0.211,0.254]],"o":[[7.449,0.238],[-0.502,0.609],[-1.867,-1.866],[1.281,-0.224]],"v":[[-4.295,-10.145],[9.205,2.755],[6.517,1.631],[-3.458,-8.077]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[1.681,1.531],[-0.303,-6.716],[1.082,1.108],[-0.859,-0.817]],"o":[[7.446,0.356],[-0.752,-0.779],[-1.082,-1.108],[0.859,0.817]],"v":[[0,-13.5],[13.5,-0.901],[9.126,-5.111],[3.658,-10.205]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-2.5,-0.137],[-0.423,-7.444],[0.498,-0.493],[2.245,1.991]],"o":[[7.445,0.408],[0.026,0.522],[-2.694,-2.6],[0.278,-0.146]],"v":[[0,-13.5],[13.5,0],[12.738,3.151],[-4.583,-12.63]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-3.384,0],[-0.123,-7.455],[0.671,-0.679],[2.458,2.374]],"o":[[7.456,0],[0.044,2.684],[-3.137,-2.878],[0.799,-0.578]],"v":[[0,-13.5],[13.5,0],[11.455,5.904],[-7.101,-11.501]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-3.384,0],[-0.061,-7.455],[1.37,-1.382],[2.366,2.386]],"o":[[7.456,0],[0.022,3.034],[-3.28,-3.085],[1.133,-1.182]],"v":[[0,-13.5],[13.5,0],[10.297,7.65],[-8.504,-10.378]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[-3.384,0],[0,-7.456],[2.069,-2.085],[2.274,2.398]],"o":[[7.456,0],[0,3.384],[-3.422,-3.293],[1.467,-1.786]],"v":[[0,-13.5],[13.5,0],[9.613,8.939],[-9.434,-9.712]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[-3.384,0],[0,-7.456],[2.638,-2.418],[2.33,2.397]],"o":[[7.456,0],[0,3.384],[-3.433,-3.359],[1.944,-2.161]],"v":[[0,-13.5],[13.5,0],[9.06,9.536],[-9.904,-9.237]],"c":true}]},{"i":{"x":0.11,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[{"i":[[-3.384,0],[0,-7.456],[2.828,-2.529],[2.348,2.397]],"o":[[7.456,0],[0,3.384],[-3.436,-3.381],[2.103,-2.286]],"v":[[0,-13.5],[13.5,0],[8.806,9.681],[-10.13,-9.133]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":24,"s":[{"i":[[-3.384,0],[0,-7.456],[2.855,-2.545],[2.351,2.397]],"o":[[7.456,0],[0,3.384],[-3.436,-3.384],[2.126,-2.304]],"v":[[0,-13.5],[13.5,0],[8.849,9.686],[-10.083,-9.134]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[-3.384,0],[0,-7.456],[2.365,-2.192],[2.616,2.549]],"o":[[7.456,0],[0,3.384],[-3.62,-3.503],[2.015,-2.137]],"v":[[0,-13.5],[13.5,0],[9.089,9.215],[-9.909,-9.356]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[-3.384,0],[0,-7.456],[2.015,-1.941],[2.806,2.658]],"o":[[7.456,0],[0,3.383],[-3.75,-3.587],[1.936,-2.018]],"v":[[0,-13.5],[13.5,0],[9.406,8.707],[-9.678,-9.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28,"s":[{"i":[[-3.383,0],[0,-7.456],[1.665,-1.69],[2.995,2.767]],"o":[[7.456,0],[0,3.383],[-3.881,-3.672],[1.858,-1.899]],"v":[[0,-13.5],[13.5,0],[9.953,8.199],[-9.448,-9.644]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":29,"s":[{"i":[[-3.383,0],[0,-7.456],[1.316,-1.439],[2.84,2.666]],"o":[[7.456,0],[0,3.383],[-4.011,-3.756],[1.779,-1.779]],"v":[[0,-13.5],[13.5,0],[10.443,7.69],[-8.984,-9.896]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[-3.383,0],[0,-7.456],[0.966,-1.188],[3.374,2.985]],"o":[[7.456,0],[0,3.383],[-4.142,-3.841],[1.7,-1.66]],"v":[[0,-13.5],[13.5,0],[10.933,7.182],[-8.638,-10.149]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[-3.382,0],[0,-7.456],[0.933,-1.084],[3.272,2.956]],"o":[[7.456,0],[0,3.382],[-4.072,-3.884],[1.609,-1.522]],"v":[[0,-13.5],[13.5,0],[11.061,7.072],[-8.123,-10.566]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":32,"s":[{"i":[[-3.382,0],[0,-7.456],[0.899,-0.979],[3.17,2.927]],"o":[[7.456,0],[0,3.382],[-4.002,-3.928],[1.517,-1.384]],"v":[[0,-13.5],[13.5,0],[10.955,7.202],[-7.842,-10.742]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33,"s":[{"i":[[-3.382,0],[0,-7.456],[0.866,-0.875],[3.101,2.841]],"o":[[7.456,0],[0,3.382],[-3.933,-3.972],[1.426,-1.246]],"v":[[0,-13.5],[13.5,0],[10.739,7.445],[-7.502,-10.918]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[-3.382,0],[0,-7.456],[1.161,-1.121],[3.221,3.306]],"o":[[7.456,0],[0,3.381],[-3.863,-4.015],[1.335,-1.108]],"v":[[0,-13.5],[13.5,0],[10.674,7.682],[-7.31,-11.024]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[-3.381,0],[0,-7.456],[1.455,-1.367],[2.993,3.11]],"o":[[7.456,0],[0,3.381],[-3.794,-4.059],[1.243,-0.97]],"v":[[0,-13.5],[13.5,0],[10.61,7.92],[-7.118,-11.131]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":36,"s":[{"i":[[-3.381,0],[0,-7.456],[1.75,-1.613],[3.065,3.377]],"o":[[7.456,0],[0,3.381],[-3.724,-4.103],[1.152,-0.832]],"v":[[0,-13.5],[13.5,0],[10.439,8.216],[-6.979,-11.178]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":38,"s":[{"i":[[-3.38,0],[0,-7.456],[1.794,-1.726],[2.917,3.198]],"o":[[7.456,0],[0,3.38],[-3.685,-4.025],[1.334,-1.014]],"v":[[0,-13.5],[13.5,0],[10.361,8.463],[-7.027,-10.997]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":40,"s":[{"i":[[-3.38,0],[0,-7.456],[1.839,-1.839],[3.017,3.191]],"o":[[7.456,0],[0,3.379],[-3.647,-3.948],[1.516,-1.196]],"v":[[0,-13.5],[13.5,0],[10.017,8.946],[-7.737,-10.46]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-3.379,0],[0,-7.456],[1.907,-2.009],[3.077,3.166]],"o":[[7.456,0],[0,3.378],[-3.705,-4.135],[1.79,-1.471]],"v":[[0,-13.5],[13.5,0],[10.008,9.069],[-8.199,-10.065]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[-3.377,0],[0,-7.456],[2.002,-2.249],[3.228,3.289]],"o":[[7.456,0],[0,3.377],[-3.545,-3.768],[2.177,-1.858]],"v":[[0,-13.5],[13.5,0],[10.089,9.022],[-8.678,-10.05]],"c":true}]},{"t":47,"s":[{"i":[[-3.376,0],[0,-7.456],[2.049,-2.367],[3.302,3.349]],"o":[[7.456,0],[0,3.376],[-3.467,-3.588],[2.367,-2.049]],"v":[[0,-13.5],[13.5,0],[10.212,8.83],[-8.831,-10.212]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":122,"st":-15,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"head_big 2","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.487,"y":0},"t":6.475,"s":[121.589,291.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":12.246,"s":[109.722,269.377,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":22.965,"s":[115,114.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.15,"y":1},"o":{"x":0.6,"y":0},"t":34.508,"s":[115,134.344,0],"to":[0,0,0],"ti":[0,0,0]},{"t":46.876953125,"s":[115,124.344,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.11,0.11,0.11],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":8.947,"s":[129.365,129.365,100]},{"t":24.61328125,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":6.475,"s":[{"i":[[2.057,-2.369],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.388,1.205]],"o":[[-1.239,1.427],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[2.369,-2.057]],"v":[[10.198,8.847],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-8.847,-10.197]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[2.057,-2.369],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.388,1.205]],"o":[[-1.239,1.427],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[2.369,-2.057]],"v":[[10.198,8.847],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-8.847,-10.197]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[2.057,-2.369],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-5.144,1.102]],"o":[[-1.239,1.427],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[3.068,-0.657]],"v":[[15.596,4.348],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-2.704,-12.744]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[2.057,-2.369],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.388,1.205]],"o":[[-1.239,1.427],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[2.369,-2.057]],"v":[[10.198,8.847],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-8.847,-10.197]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[-2.12,-2.748],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.167,-1.419]],"o":[[1.154,1.496],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[2.122,2.58]],"v":[[4.915,8.847],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-8.233,-3.426]],"c":true}]},{"i":{"x":0.11,"y":1},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-2.937,-2.724],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.278,-0.101]],"o":[[-0.048,1.461],[-1.73,0.805],[-7.456,0],[0,-2.089],[1.573,1.571],[2.087,2.68]],"v":[[3.301,9.36],[5.692,12.245],[0,13.5],[-13.5,0],[-12.178,-5.834],[-9.075,-2.606]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":24,"s":[{"i":[[-3.324,-2.825],[1.733,-0.807],[2.034,0],[0,7.456],[-0.847,1.766],[-1.232,-1.364]],"o":[[1.44,1.224],[-1.73,0.805],[-7.456,0],[0,-2.089],[0.804,-1.675],[2.014,2.229]],"v":[[-0.026,9.406],[3.276,13.196],[0,13.5],[-13.5,0],[-13.133,-3.707],[-10.926,-1.747]],"c":true}]},{"t":51,"s":[{"i":[[-2.458,-2.523],[-1.555,-1.492],[2.002,0],[0,7.456],[-0.824,1.745],[-1.293,-1.247]],"o":[[1.345,1.38],[-1.708,0.782],[-7.456,0],[0,-2.058],[1.7,2.029],[2.816,2.714]],"v":[[1.469,8.214],[5.61,12.283],[0,13.5],[-13.5,0],[-12.216,-5.754],[-7.766,-1.077]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":122,"st":-15,"bm":0},{"ddd":0,"ind":13,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[194.755,341.348,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":8.123,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":18.842,"s":[94,106,100]},{"i":{"x":[0.23,0.23,0.23],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":28.736,"s":[106,94,100]},{"t":46.876953125,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":-16,"op":120,"st":-10,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"body_big","parent":13,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.49,"y":0},"t":4,"s":[214.838,186.203,0],"to":[0,0,0],"ti":[0,0,0]},{"t":19.666015625,"s":[91.172,89.532,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.796,0.796,0.796],"y":[0.776,0.776,1]},"o":{"x":[0.493,0.493,0.493],"y":[0,0,0]},"t":4,"s":[0,0,100]},{"i":{"x":[0.045,0.045,0.045],"y":[1,1,1]},"o":{"x":[0.264,0.264,0.264],"y":[0.38,0.38,0]},"t":8,"s":[138.581,138.581,100]},{"t":19.666015625,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[-0.183,-0.005],[0,-2.727],[0.021,-3.203],[0.195,-3.885],[1.848,0],[0,0],[0,0],[0,1.109],[0,0],[0,0],[-1.888,-0.007]],"o":[[0,0],[1.078,0.034],[0,2.727],[-0.02,3.048],[-0.092,1.836],[0,0],[0,0],[-3.116,0],[0,0],[0,0],[0.037,-1.871],[0,0]],"v":[[-0.208,-11.063],[0.283,-11.047],[3.786,-7.614],[3.791,-0.258],[3.829,21.135],[0.366,24.412],[0.366,24.412],[0.072,24.421],[-3.677,21.378],[-3.677,21.378],[-3.673,-7.863],[-0.208,-11.063]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-0.136,-0.003],[0.113,-2.704],[0.043,-3.882],[0.162,-3.232],[1.537,0],[0,0],[0,0],[0,0.977],[0,0],[0,0],[-7.389,-0.026]],"o":[[0,0],[2.812,0.401],[-0.113,2.704],[-0.04,3.676],[-0.077,1.527],[0,0],[0,0],[-2.746,0],[0,0],[0,0],[0.146,-7.323],[0,0]],"v":[[6.737,-11.11],[19.329,-10.937],[22.722,-5.461],[22.689,2.505],[22.677,13.805],[19.796,16.532],[19.796,16.532],[-3.523,16.499],[-6.827,13.817],[-6.827,13.817],[-6.823,1.411],[6.737,-11.11]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-0.085,-0.002],[0.062,-2.007],[0.027,-4.024],[0.156,-3.101],[1.475,0],[0,0],[0,0],[0,0.95],[0,0],[0,0],[-8.489,-0.03]],"o":[[0,0],[2.655,0.193],[-0.052,1.668],[-0.023,3.468],[-0.074,1.465],[0,0],[0,0],[-2.672,0],[0,0],[0,0],[0.167,-8.413],[0,0]],"v":[[7.476,-12.422],[17.525,-12.335],[20.748,-8.159],[20.603,0.237],[20.28,12.314],[17.516,14.93],[17.516,14.93],[-4.243,14.915],[-7.457,12.305],[-7.457,12.305],[-7.453,3.266],[7.476,-12.422]],"c":true}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-0.033,-0.001],[1.163,-1.725],[0.681,-3.85],[0.149,-2.97],[1.413,0],[0,0],[0,0],[0,0.924],[0,0],[0,0],[-9.589,-0.034]],"o":[[0,0],[1.768,0.3],[-1.913,2.048],[-0.577,3.262],[-0.07,1.404],[0,0],[0,0],[-2.597,0],[0,0],[0,0],[0.189,-9.503],[0,0]],"v":[[8.216,-13.734],[22.569,-13.683],[23.821,-10.775],[18.697,-2.014],[17.884,10.823],[15.237,13.329],[15.237,13.329],[-4.962,13.33],[-8.087,10.793],[-8.087,10.793],[-8.083,5.121],[8.216,-13.734]],"c":true}]},{"t":19.666015625,"s":[{"i":[[0,0],[0,0],[1.422,-1.502],[1.214,-2.965],[0.139,-2.766],[1.316,0],[0,0],[0,0],[0,0.883],[0,0],[0,0],[-11.308,-0.04]],"o":[[0,0],[1.922,0.359],[-2.34,1.896],[-1.293,3.158],[-0.066,1.307],[0,0],[0,0],[-2.482,0],[0,0],[0,0],[0.223,-11.206],[0,0]],"v":[[0.826,-11],[18.273,-10.941],[19.022,-8.151],[12.309,-0.219],[10.162,8.666],[7.696,11],[7.696,11],[-16.943,11],[-19.929,8.576],[-19.929,8.576],[-19.925,8.162],[0.826,-11]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-16,"op":120,"st":-16,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/contacts_sync_on.json b/TMessagesProj/src/main/res/raw/contacts_sync_on.json new file mode 100644 index 000000000..6fe0501df --- /dev/null +++ b/TMessagesProj/src/main/res/raw/contacts_sync_on.json @@ -0,0 +1 @@ +{"v":"5.7.6","fr":60,"ip":0,"op":120,"w":512,"h":512,"nm":"contacts","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256,260,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":0,"k":[446.087,446.087,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":3,"nm":"ысфду","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.757,220.511,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"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":18.191,"s":[100,100,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":24.25,"s":[94,106,100]},{"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":31.174,"s":[100,100,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":38.096,"s":[94,106,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":44.154,"s":[106,94,100]},{"t":65,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":19,"op":123,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"head","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.62,"y":0},"t":13,"s":[115,256.692,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.629,"y":0.882},"o":{"x":0.642,"y":0},"t":31.174,"s":[115,92.692,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.533,"y":1},"o":{"x":0.805,"y":0.932},"t":44.154,"s":[115,126.692,0],"to":[0,0,0],"ti":[0,0,0]},{"t":58,"s":[115,116.692,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.62,0.62,0.62],"y":[0,0,0]},"t":13,"s":[240.887,240.887,100]},{"t":31.173828125,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.1,"y":1},"o":{"x":0.62,"y":0},"t":13,"s":[{"i":[[-5.523,0],[0,-5.523],[5.523,0],[0,5.523]],"o":[[5.523,0],[0,5.523],[-5.523,0],[0,-5.523]],"v":[[0,-10],[10,0],[0,10],[-10,0]],"c":true}]},{"t":43.2890625,"s":[{"i":[[-5.523,0],[0,-5.523],[5.523,0],[0,5.523]],"o":[[5.523,0],[0,5.523],[-5.523,0],[0,-5.523]],"v":[[0,-10],[10,0],[0,10],[-10,0]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":19,"op":123,"st":-3,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[340.757,327.033,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":15,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":28,"s":[94,106,100]},{"i":{"x":[0.23,0.23,0.23],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":40,"s":[106,94,100]},{"t":62,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"body","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[115,45,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0,"y":1},"o":{"x":0.6,"y":0},"t":7,"s":[115,195.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[115,115,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.833,0.833,1]},"o":{"x":[0.389,0.389,0.389],"y":[0,0,0]},"t":0,"s":[0,0,100]},{"i":{"x":[0.153,0.153,0.153],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":1,"s":[148.145,148.145,100]},{"i":{"x":[0,0,0],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":7,"s":[223.043,223.043,100]},{"t":34,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":0,"s":[{"i":[[0,0],[0,-3.278],[0,0],[0,0],[0,0],[2.89,0],[0,0],[0,0],[0,3.174],[0,0],[0,0],[-3.342,0],[0,0]],"o":[[3.299,0],[0,0],[0,0],[0,0],[-0.159,2.832],[0,0],[0,0],[-3.195,0],[0,0],[0,0],[0,-3.321],[0,0],[0,0]],"v":[[0.034,-1.92],[6.008,3.612],[6.1,4.292],[6.1,5.552],[6.091,5.858],[0.68,10.937],[0.68,10.937],[-0.335,10.986],[-6.12,5.239],[-6.12,4.322],[-6.212,3.733],[-0.16,-1.872],[-0.16,-1.872]],"c":true}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0,-3.278],[0,0],[0,0],[0,0],[2.89,0],[0,0],[0,0],[0,3.174],[0,0],[0,0],[-3.342,0],[0,0]],"o":[[3.299,0],[0,0],[0,0],[0,0],[-0.159,2.832],[0,0],[0,0],[-3.195,0],[0,0],[0,0],[0,-3.321],[0,0],[0,0]],"v":[[0.204,-46.703],[6.178,-41.171],[6.1,11.409],[6.1,12.669],[6.091,12.975],[0.68,18.054],[0.68,18.054],[-0.335,18.103],[-6.12,12.356],[-6.12,11.439],[-6.042,-41.05],[0.01,-46.654],[0.01,-46.654]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":7,"s":[{"i":[[0,0],[0,-3.278],[0,0],[0,0],[0,0],[2.89,0],[0,0],[0,0],[0,3.174],[0,0],[0,0],[-3.342,0],[0,0]],"o":[[3.299,0],[0,0],[0,0],[0,0],[-0.159,2.832],[0,0],[0,0],[-3.195,0],[0,0],[0,0],[0,-3.321],[0,0],[0,0]],"v":[[0.034,-1.92],[6.008,3.612],[6.1,4.292],[6.1,5.552],[6.091,5.858],[0.68,10.937],[0.68,10.937],[-0.335,10.986],[-6.12,5.239],[-6.12,4.322],[-6.212,3.733],[-0.16,-1.872],[-0.16,-1.872]],"c":true}]},{"i":{"x":0,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[0,-4.325],[0,0],[0,0],[0,0],[1.241,0],[0,0],[0,0],[0,1.258],[0,0],[0,0],[-3.972,0],[0,0]],"o":[[4.353,0],[0,0],[0,0],[0,0],[-0.068,1.216],[0,0],[0,0],[-1.267,0],[0,0],[0,0],[0,-3.946],[0,0],[0,0]],"v":[[1.271,-12.202],[9.153,-4.903],[9.182,13.545],[9.182,14.086],[9.178,14.217],[6.854,16.398],[6.854,16.398],[-6.752,16.402],[-9.045,14.123],[-9.045,14.061],[-9.074,-5.539],[-1.883,-12.198],[-1.883,-12.198]],"c":true}]},{"t":42,"s":[{"i":[[0,0],[0,-8.134],[0,0],[0,0],[0,0],[1.423,0],[0,0],[0,0],[0,1.421],[0,0],[0,0],[-8.187,0],[0,0]],"o":[[8.187,0],[0,0],[0,0],[0,0],[-0.079,1.395],[0,0],[0,0],[-1.43,0],[0,0],[0,0],[0,-8.134],[0,0],[0,0]],"v":[[6.176,-8.5],[21,5.227],[21,5.227],[21,5.848],[20.996,5.998],[18.331,8.5],[18.331,8.5],[-18.41,8.5],[-21,5.927],[-21,5.927],[-21,5.227],[-6.176,-8.5],[-6.176,-8.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[209.161,166.02,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"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":19,"s":[100,100,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":28,"s":[94,106,100]},{"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":36.174,"s":[100,100,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":45,"s":[94,106,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":53,"s":[106,94,100]},{"t":70,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":19,"op":123,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"head_big","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.487,"y":0},"t":16,"s":[121.589,291.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":23,"s":[109.722,269.377,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":36,"s":[115,114.344,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.15,"y":1},"o":{"x":0.6,"y":0},"t":50,"s":[115,134.344,0],"to":[0,0,0],"ti":[0,0,0]},{"t":65,"s":[115,124.344,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.11,0.11,0.11],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":19,"s":[129.365,129.365,100]},{"t":38,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.11,"y":1},"o":{"x":0.6,"y":0},"t":16,"s":[{"i":[[-7.456,0],[0,-7.456],[7.456,0],[0,7.456]],"o":[[7.456,0],[0,7.456],[-7.456,0],[0,-7.456]],"v":[[0,-13.5],[13.5,0],[0,13.5],[-13.5,0]],"c":true}]},{"t":38,"s":[{"i":[[-7.456,0],[0,-7.456],[7.456,0],[0,7.456]],"o":[[7.456,0],[0,7.456],[-7.456,0],[0,-7.456]],"v":[[0,-13.5],[13.5,0],[0,13.5],[-13.5,0]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":19,"op":123,"st":-6,"bm":0},{"ddd":0,"ind":8,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[194.755,341.348,0],"ix":2,"l":2},"a":{"a":0,"k":[115,115,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":19,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":32,"s":[94,106,100]},{"i":{"x":[0.23,0.23,0.23],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.7],"y":[0,0,0]},"t":44,"s":[106,94,100]},{"t":66,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":-6,"op":123,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"body_big","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":5,"s":[174.172,-50.468,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[174.838,136.203,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[91.172,89.532,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.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":5,"s":[0,0,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":14,"s":[446.087,446.087,100]},{"t":33,"s":[446.087,446.087,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":5,"s":[{"i":[[0,0],[-0.183,-0.005],[0,-2.727],[-0.02,-0.146],[-0.064,-0.578],[1.848,0],[0,0],[0,0],[0,1.109],[0,0],[0,0],[-1.888,-0.007]],"o":[[0,0],[1.078,0.034],[0,2.727],[-0.02,0.218],[-0.064,1.691],[0,0],[0,0],[-3.116,0],[0,0],[0,0],[0.037,-1.871],[0,0]],"v":[[-0.32,-3.851],[0.171,-3.835],[3.674,-0.402],[3.698,-0.332],[3.723,0.437],[0.26,3.714],[0.26,3.714],[-0.034,3.723],[-3.783,0.68],[-3.783,0.68],[-3.785,-0.652],[-0.32,-3.851]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-0.183,-0.005],[0,-2.727],[0.021,-3.203],[0.195,-3.885],[1.848,0],[0,0],[0,0],[0,1.109],[0,0],[0,0],[-1.888,-0.007]],"o":[[0,0],[1.078,0.034],[0,2.727],[-0.02,3.048],[-0.092,1.836],[0,0],[0,0],[-3.116,0],[0,0],[0,0],[0.037,-1.871],[0,0]],"v":[[-0.208,-11.063],[0.283,-11.047],[3.786,-7.614],[3.791,-0.258],[3.829,21.135],[0.366,24.412],[0.366,24.412],[0.072,24.421],[-3.677,21.378],[-3.677,21.378],[-3.673,-7.863],[-0.208,-11.063]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-0.108,-0.003],[0.581,-2.226],[0.508,-3.106],[0.172,-3.428],[1.63,0],[0,0],[0,0],[0,1.016],[0,0],[0,0],[-5.739,-0.02]],"o":[[0,0],[1.423,0.167],[-0.957,2.387],[-0.54,3.093],[-0.081,1.62],[0,0],[0,0],[-2.857,0],[0,0],[0,0],[0.113,-5.687],[0,0]],"v":[[0.215,-11.037],[7.637,-11.004],[10.014,-7.833],[7.273,-0.242],[6.418,9.873],[3.363,12.765],[3.363,12.765],[-6.883,12.77],[-10.321,9.98],[-10.321,9.98],[-10.317,-1.312],[0.215,-11.037]],"c":true}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":22,"s":[{"i":[[0,0],[-0.033,-0.001],[1.163,-1.725],[0.996,-3.008],[0.149,-2.97],[1.413,0],[0,0],[0,0],[0,0.924],[0,0],[0,0],[-9.589,-0.034]],"o":[[0,0],[1.768,0.3],[-1.913,2.048],[-1.061,3.138],[-0.07,1.404],[0,0],[0,0],[-2.597,0],[0,0],[0,0],[0.189,-9.503],[0,0]],"v":[[0.637,-11.011],[14.991,-10.961],[16.243,-8.053],[10.755,-0.226],[9.007,10.941],[6.359,13.447],[6.359,13.447],[-13.839,13.448],[-16.964,10.911],[-16.964,10.911],[-16.96,5.239],[0.637,-11.011]],"c":true}]},{"t":33,"s":[{"i":[[0,0],[0,0],[1.422,-1.502],[1.214,-2.965],[0.139,-2.766],[1.316,0],[0,0],[0,0],[0,0.883],[0,0],[0,0],[-11.308,-0.04]],"o":[[0,0],[1.922,0.359],[-2.34,1.896],[-1.293,3.158],[-0.066,1.307],[0,0],[0,0],[-2.482,0],[0,0],[0,0],[0.223,-11.206],[0,0]],"v":[[0.826,-11],[18.273,-10.941],[19.022,-8.151],[12.309,-0.219],[10.162,8.666],[7.696,11],[7.696,11],[-16.943,11],[-19.929,8.576],[-19.929,8.576],[-19.925,8.162],[0.826,-11]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":-6,"op":123,"st":-6,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/folder_in.json b/TMessagesProj/src/main/res/raw/folder_in.json new file mode 100644 index 000000000..d6a6f34a0 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/folder_in.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":57,"w":400,"h":350,"nm":"Folder New 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Folder Front","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[57.78,31.05,0],"ix":2},"a":{"a":0,"k":[57.78,31.05,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,0],[2.227,-6.498],[0,0],[0,-1.195],[-11.046,0],[0,0],[-2.227,6.498],[0,0],[0,1.195],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.159],[0,8.063],[0,0],[9.176,0],[0,0],[0.397,-1.159],[0,-8.063],[0,0]],"v":[[-12.096,6.216],[-31.498,17.271],[-48.512,66.908],[-49.11,70.451],[-29.11,85.05],[127.657,85.05],[147.059,73.994],[163.661,26.719],[164.259,23.176],[144.259,8.577]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":27,"s":[{"i":[[0,0],[5.516,-7.616],[0,0],[0,-1.636],[-11.046,0],[0,0],[-3.702,4.718],[0,0],[-0.287,1.611],[17.899,0.533]],"o":[[-13.886,0.099],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[1.817,-2.298],[2.019,-11.354],[0,0]],"v":[[15.169,-0.792],[-12.083,14.287],[-46.038,57.422],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[179.824,27.398],[186.808,16.342],[164.086,-0.858]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0},"t":41,"s":[{"i":[[0,0],[2.227,-8.902],[0,0],[0,-1.636],[-11.046,0],[0,0],[-2.227,8.902],[0,0],[0,1.636],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[0.397,-1.588],[0,-11.046],[0,0]],"v":[[-19.91,-30.122],[-39.312,-14.977],[-48.512,60.196],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[156.259,-5.268],[156.857,-10.122],[136.857,-30.122]],"c":true}]},{"t":57,"s":[{"i":[[0,0],[2.227,-8.902],[0,0],[0,-1.636],[-11.046,0],[0,0],[-2.227,8.902],[0,0],[0,1.636],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[0.397,-1.588],[0,-11.046],[0,0]],"v":[[-12.096,-22.95],[-31.498,-7.804],[-48.512,60.196],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[164.072,1.904],[164.671,-2.95],[144.671,-22.95]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Paper","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[-140]},{"t":41,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":5,"s":[63,140,0],"to":[60,-107,0],"ti":[21.5,-66,0]},{"t":41,"s":[196.5,190.5,0]}],"ix":2},"a":{"a":0,"k":[5,-14.5,0],"ix":1},"s":{"a":1,"k":[{"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":3,"s":[0,0,100]},{"t":25,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.817},"o":{"x":0.167,"y":0.183},"t":7,"s":[{"i":[[-0.65,-1.421],[0,0],[0.482,-2.258],[0,0],[0,1.563],[0,0],[-4.198,0.087],[-14.973,55.488]],"o":[[0,0],[0.908,1.763],[-11.843,55.532],[-3.639,0],[0,0],[0.536,-1.393],[0,0],[0.406,-1.503]],"v":[[16.939,-25.089],[21.552,-11.162],[22.384,-3.927],[-54.983,22.264],[-59.414,16.933],[-42.822,-9.049],[-38.427,-5.397],[12.23,-25.189]],"c":true}]},{"i":{"x":0.833,"y":0.817},"o":{"x":0.167,"y":0.183},"t":17,"s":[{"i":[[-0.228,-2.877],[0,0],[1.839,-2.538],[0,0],[0.228,2.877],[0,0],[-4.069,0.484],[-29.183,53.209]],"o":[[0,0],[0.379,3.64],[-24.239,33.437],[-3.538,0.28],[0,0],[0.318,-2.605],[0,0],[1.116,-2.034]],"v":[[35.765,-62.31],[46.729,-6.432],[43.267,-0.275],[-48.859,12.248],[-55.678,7.547],[-43.336,-41.567],[-38.388,-45.142],[31.343,-65.757]],"c":true}]},{"i":{"x":0.833,"y":0.817},"o":{"x":0.167,"y":0.183},"t":27,"s":[{"i":[[-0.659,-4.349],[16.896,-32.916],[4.752,-2.294],[0,0],[-0.022,5.209],[1.273,23.429],[-4.286,0.455],[-17.457,21.461]],"o":[[0,0],[-1.699,3.31],[-9.471,15.247],[-6.85,1.014],[0,0],[-0.24,-4.418],[0,0],[3.617,-1.401]],"v":[[97.835,-46.729],[88.2,16.307],[79.81,26.213],[-55.106,58.355],[-66.276,49.585],[-46.927,-9.122],[-44.085,-19.527],[91.651,-50.567]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.183},"t":34,"s":[{"i":[[1.564,-9.117],[0,0],[6.889,-0.844],[0,0],[-1.33,6.325],[0,0],[-7.219,0.656],[0,0]],"o":[[0,0],[-1.623,3.404],[0,0],[-8.918,-0.04],[0,0],[1.783,-3.832],[0,0],[5.358,0]],"v":[[161.863,-8.438],[128.764,51.308],[115.565,62.55],[-44.616,78.002],[-58.265,63.015],[-27.343,5.488],[-11.35,-6.154],[149.641,-22.078]],"c":true}]},{"t":41,"s":[{"i":[[0,-5.355],[0,0],[7.172,-0.931],[0,0],[0,5.355],[0,0],[-7.528,0.723],[0,0]],"o":[[0,0],[-1.755,3.475],[0,0],[-5.515,0],[0,0],[1.928,-3.947],[0,0],[5.515,0]],"v":[[156,-12.514],[140.83,61.269],[126.876,71.495],[-26.81,70.997],[-36.796,61.3],[-23.93,-13.814],[-8.917,-24.04],[146.014,-22.211]],"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":[5,-14.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"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":"Rectangle 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":33,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Folder Far","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":8,"s":[10]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":27,"s":[-10]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":43,"s":[5]},{"t":54,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":3,"s":[147.274,211.361,0],"to":[62.976,-21.111,0],"ti":[0,0,0]},{"i":{"x":0.647,"y":1},"o":{"x":0.6,"y":0},"t":24,"s":[197.774,139.611,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.347,"y":1},"o":{"x":0.281,"y":0},"t":40,"s":[249.274,169.361,0],"to":[0,0,0],"ti":[0,0,0]},{"t":52,"s":[234.274,153.861,0]}],"ix":2},"a":{"a":0,"k":[34.274,-21.139,0],"ix":1},"s":{"a":1,"k":[{"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":2,"s":[40,0,100]},{"t":18,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[-11.641,-0.603],[0,0],[-3.346,-2.144],[0,0],[-4.559,-0.236],[0,0],[0.179,-3.451],[0,0],[5.246,0],[0,0],[3.437,-10.77],[0,0]],"o":[[0.4,-7.669],[0,0],[4.559,0.236],[0,0],[3.346,2.144],[0,0],[5.239,0.272],[0,0],[-1.081,2.903],[0,0],[-14.946,0],[0,0],[0,0]],"v":[[-31.343,-23.38],[-9.543,-36.173],[52.203,-34.019],[64.458,-30.329],[77.186,-22.173],[89.441,-18.482],[151.238,-14.104],[159.509,-7.163],[158.328,-2.715],[147.415,-0.44],[-7.364,-2.697],[-36.675,13.091],[-53.574,55.488]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":30,"s":[{"i":[[0,0],[-11.045,0.001],[0,0],[-3.271,-2.83],[0,0],[-4.326,0],[0,0],[0,-4.971],[0,0],[4.971,0],[0,0],[2.948,-13.852],[0,0]],"o":[[0.002,-11.045],[0,0],[4.326,0],[0,0],[3.271,2.83],[0,0],[4.971,0],[0,0],[0,4.971],[0,0],[-14.162,0],[0,0],[0,0]],"v":[[-64.694,-61.634],[-44.692,-81.634],[23.101,-81.634],[34.879,-77.246],[46.309,-70.961],[58.086,-66.573],[123.293,-66.573],[133.279,-57.406],[132.954,-51.02],[121.043,-44.289],[-25.669,-44.289],[-54.929,-21.027],[-65.353,60.809]],"c":true}]},{"t":42,"s":[{"i":[[0,0],[-11.045,0.001],[0,0],[-3.271,-2.83],[0,0],[-4.326,0],[0,0],[0,-4.971],[0,0],[4.971,0],[0,0],[2.948,-13.852],[0,0]],"o":[[0.002,-11.045],[0,0],[4.326,0],[0,0],[3.271,2.83],[0,0],[4.971,0],[0,0],[0,4.971],[0,0],[-14.162,0],[0,0],[0,0]],"v":[[-64.723,-65.95],[-44.721,-85.95],[23.072,-85.95],[34.85,-81.562],[47.295,-70.794],[59.072,-66.406],[124.279,-66.406],[133.279,-57.406],[133.279,-49.95],[124.279,-40.95],[-22.434,-40.95],[-51.777,-17.195],[-64.73,43.672]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arrow 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.554],"y":[0.744]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[-76]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0.114]},"t":14,"s":[-28]},{"t":30,"s":[55]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":0.499},"o":{"x":0.3,"y":0},"t":0,"s":[41.503,199.029,0],"to":[-0.503,-44.029,0],"ti":[-45.497,2.029,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0.252},"t":15,"s":[119.503,79.029,0],"to":[101.497,-6.029,0],"ti":[0,0,0]},{"t":36,"s":[278.503,205.029,0]}],"ix":2},"a":{"a":0,"k":[-125.497,4.029,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,-0.041],[0,0],[-0.041,0],[0,0],[0,0],[-0.023,-0.023],[-0.048,0.048],[0,0],[0,0],[0.043,0.043],[0,0],[0.033,0],[0,-0.068]],"o":[[0,0],[-0.041,0],[0,0],[0,0.041],[0,0],[0,0],[0,0.033],[0.048,0.048],[0,0],[0,0],[0.033,-0.048],[0,0],[-0.023,-0.023],[-0.068,0],[0,0]],"v":[[-131.34,3.057],[-132.056,3.057],[-132.13,3.131],[-132.13,3.96],[-132.056,4.034],[-131.34,4.034],[-131.339,4.606],[-131.303,4.694],[-131.128,4.694],[-129.947,3.623],[-129.932,3.605],[-129.947,3.448],[-131.128,2.34],[-131.215,2.304],[-131.339,2.428]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":4,"s":[{"i":[[0,0],[0,0],[0,-1.32],[0,0],[-1.175,0],[0,0],[0,0],[-0.665,-0.747],[-1.386,1.555],[0,0],[0,0],[1.234,1.38],[0,0],[0.94,0],[0,-2.199]],"o":[[0,0],[-1.175,0],[0,0],[0,1.32],[0,0],[0,0],[0,1.056],[1.385,1.556],[0,0],[0,0],[0.957,-1.552],[0,0],[-0.665,-0.746],[-1.959,0],[0,0]],"v":[[-144.335,-11.532],[-161.017,-13.498],[-163.145,-11.108],[-163.145,15.681],[-161.017,18.071],[-144.335,20.036],[-144.292,38.503],[-143.254,41.318],[-138.238,41.32],[-104.263,6.735],[-103.848,6.183],[-104.263,1.105],[-138.239,-34.663],[-140.746,-35.828],[-144.292,-31.846]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":8,"s":[{"i":[[0,0],[0,0],[0,-1.265],[0,0],[-1.46,0],[0,0],[0,0],[-0.826,-0.716],[-1.721,1.49],[0,0],[0,0],[1.532,1.322],[0,0],[1.168,0],[0,-2.108]],"o":[[0,0],[-1.46,0],[0,0],[0,1.265],[0,0],[0,0],[0,1.012],[1.72,1.491],[0,0],[0,0],[1.189,-1.488],[0,0],[-0.826,-0.715],[-2.433,0],[0,0]],"v":[[-145.887,-10.908],[-179.424,-13.016],[-182.067,-10.726],[-182.067,14.953],[-179.424,17.243],[-145.887,19.351],[-145.834,37.052],[-144.544,39.75],[-138.314,39.752],[-96.114,6.602],[-95.6,6.073],[-96.115,1.206],[-138.315,-33.08],[-141.429,-34.196],[-145.834,-30.379]],"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,-1.483],[0,0],[-1.559,0],[0,0],[0,0],[-0.882,-0.839],[-1.838,1.747],[0,0],[0,0],[1.636,1.55],[0,0],[1.247,0],[0,-2.471]],"o":[[0,0],[-1.559,0],[0,0],[0,1.483],[0,0],[0,0],[0,1.186],[1.837,1.748],[0,0],[0,0],[1.269,-1.744],[0,0],[-0.882,-0.838],[-2.598,0],[0,0]],"v":[[-144.997,-13.394],[-186.36,-13.8],[-189.183,-11.115],[-189.183,18.988],[-186.36,21.673],[-144.997,22.078],[-144.94,42.829],[-143.563,45.992],[-136.91,45.994],[-91.843,7.132],[-91.294,6.512],[-91.844,0.806],[-136.911,-39.386],[-140.236,-40.695],[-144.94,-36.22]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[0,0],[0.27,-1.827],[0,0],[-1.635,-0.301],[0,0],[0,0],[-0.772,-1.204],[-2.245,1.797],[0,0],[0,0],[1.434,2.227],[0,0],[1.308,0.241],[0.45,-3.045]],"o":[[0,0],[-1.635,-0.301],[0,0],[-0.27,1.827],[0,0],[0,0],[-0.216,1.462],[1.608,2.509],[0,0],[0,0],[1.648,-1.904],[0,0],[-0.773,-1.203],[-2.725,-0.502],[0,0]],"v":[[-139.957,-19.364],[-153.524,-22.444],[-156.972,-19.681],[-164.805,17.145],[-162.334,20.999],[-147.423,24.15],[-151.138,49.73],[-150.269,53.894],[-143.293,55.183],[-88.965,16.013],[-88.276,15.355],[-87.815,8.218],[-125.526,-50.094],[-128.775,-52.35],[-134.522,-47.746]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,0],[0,0],[1.08,-4.086],[0,0],[-2.412,-0.853],[0,0],[0,0],[-0.789,-1.192],[-2.786,3.065],[-8.056,15.524],[0,0],[1.493,2.181],[0,0],[1.31,0.222],[0.404,-3.05]],"o":[[0,0],[-1.892,4.665],[0,0],[-0.536,2.031],[0,0],[0,0],[0.601,1.66],[1.644,2.484],[21.698,-24.351],[1.126,-2.17],[0.694,-2.227],[-3.546,-4.57],[-0.79,-1.191],[-2.73,-0.462],[0,0]],"v":[[-145.719,-28.204],[-149.077,-20.175],[-154.116,-8.412],[-169.847,24.113],[-166.767,29.218],[-158.568,40.162],[-148.254,58.487],[-146.224,63.024],[-138.24,63.078],[-89.869,3.151],[-88.626,-0.617],[-91.143,-6.841],[-132.219,-50.996],[-136.144,-52.926],[-141.174,-48.516]],"c":true}]},{"t":20,"s":[{"i":[[0,0],[0,0],[2.181,-7.503],[0,0],[-3.602,-1.613],[0,0],[0,0],[-0.848,-1.152],[-3.513,5.044],[0.317,3.77],[0,0],[1.643,2.07],[0,0],[1.32,0.156],[0.251,-3.068]],"o":[[0,0],[-2.147,12.166],[0,0],[-0.879,2.352],[0,0],[0,0],[1.873,1.942],[1.767,2.399],[45.207,-64.911],[-0.18,-2.145],[-0.799,-2.731],[-8.99,-11.325],[-0.849,-1.151],[-2.751,-0.325],[0,0]],"v":[[-173.195,-36.843],[-172.839,-24.281],[-181.275,1.521],[-204.178,31.859],[-200.045,38.754],[-187.652,50.276],[-169.748,68.311],[-165.849,73.352],[-156.354,71.333],[-118.587,-21.06],[-120.379,-27.967],[-123.774,-34.313],[-171.113,-56.088],[-176.106,-57.42],[-179.938,-53.161]],"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":[100,100],"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":"Path-5","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":20,"st":5,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Arrow","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":35,"s":[21.503,179.029,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":45,"s":[98.503,179.029,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.471,"y":1},"o":{"x":0.3,"y":0},"t":51,"s":[70.503,179.029,0],"to":[0,0,0],"ti":[0,0,0]},{"t":57.087890625,"s":[74.503,179.029,0]}],"ix":2},"a":{"a":0,"k":[-125.497,4.029,0],"ix":1},"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":35,"s":[0,60,100]},{"t":45,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":36.105,"s":[{"i":[[0,0],[0,0],[0,-1.657],[0,0],[-1.657,0],[0,0],[0,0],[-0.937,-0.938],[-1.953,1.952],[0,0],[0,0],[1.739,1.732],[0,0],[1.325,0],[0,-2.761]],"o":[[0,0],[-1.657,0],[0,0],[0,1.657],[0,0],[0,0],[0,1.326],[1.952,1.953],[0,0],[0,0],[1.349,-1.949],[0,0],[-0.938,-0.937],[-2.761,0],[0,0]],"v":[[-144.223,-15.381],[-173.23,-15.381],[-176.23,-12.381],[-176.23,21.257],[-173.23,24.257],[-144.223,24.257],[-144.162,47.445],[-142.699,50.979],[-135.628,50.981],[-87.731,7.556],[-87.147,6.863],[-87.732,0.487],[-135.629,-44.424],[-139.163,-45.887],[-144.163,-40.887]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":46,"s":[{"i":[[0,0],[0,0],[0,-1.657],[0,0],[-1.484,0],[0,0],[0,0],[-0.839,-0.938],[-1.75,1.952],[0,0],[0,0],[1.558,1.732],[0,0],[1.187,0],[0,-2.761]],"o":[[0,0],[-1.484,0],[0,0],[0,1.657],[0,0],[0,0],[0,1.326],[1.748,1.953],[0,0],[0,0],[1.208,-1.949],[0,0],[-0.84,-0.937],[-2.473,0],[0,0]],"v":[[-138.012,-16.631],[-153.694,-16.631],[-156.381,-13.631],[-156.381,23.507],[-153.694,26.507],[-138.012,26.507],[-138.118,54.195],[-136.807,57.729],[-130.473,57.731],[-90.03,7.669],[-89.507,6.976],[-90.03,0.6],[-130.474,-48.924],[-133.64,-50.387],[-138.118,-45.387]],"c":true}]},{"t":53,"s":[{"i":[[0,0],[0,0],[0,-1.657],[0,0],[-1.657,0],[0,0],[0,0],[-0.937,-0.938],[-1.953,1.952],[0,0],[0,0],[1.739,1.732],[0,0],[1.325,0],[0,-2.761]],"o":[[0,0],[-1.657,0],[0,0],[0,1.657],[0,0],[0,0],[0,1.326],[1.952,1.953],[0,0],[0,0],[1.349,-1.949],[0,0],[-0.938,-0.937],[-2.761,0],[0,0]],"v":[[-144.223,-15.381],[-161.73,-15.381],[-164.73,-12.381],[-164.73,21.257],[-161.73,24.257],[-144.223,24.257],[-144.223,51.945],[-142.76,55.479],[-135.689,55.481],[-87.731,7.556],[-87.147,6.863],[-87.732,0.487],[-135.689,-47.424],[-139.223,-48.887],[-144.223,-43.887]],"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":[100,100],"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":"Path-5","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":125,"st":5,"bm":0}],"markers":[{"tm":60,"cm":"1","dr":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/folder_out.json b/TMessagesProj/src/main/res/raw/folder_out.json new file mode 100644 index 000000000..5ca19d860 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/folder_out.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":54,"w":400,"h":350,"nm":"Folder Out New 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Arrow 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.655],"y":[-0.884]},"o":{"x":[0.326],"y":[5.74]},"t":27,"s":[-10.082]},{"i":{"x":[0.648],"y":[1.018]},"o":{"x":[0.318],"y":[0.111]},"t":30,"s":[-11.275]},{"i":{"x":[0.613],"y":[1]},"o":{"x":[0.289],"y":[0.151]},"t":33,"s":[-30]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":41,"s":[-25]},{"t":50,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.649,"y":1},"o":{"x":0.553,"y":0.281},"t":27,"s":[153.06,67.855,0],"to":[-103.81,-23.605,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":45,"s":[74.753,206.779,0],"to":[0,0,0],"ti":[0,0,0]},{"t":53,"s":[74.753,178.779,0]}],"ix":2},"a":{"a":0,"k":[-125.497,4.029,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":27,"s":[{"i":[[0,0],[11.608,-1.924],[8.098,-2.588],[0,0],[-1.468,0],[0,0],[0,0],[-0.83,-0.012],[-1.731,0.026],[-4.322,4.661],[0,0],[0,0],[3.535,0.518],[0,0],[1.174,0],[0,-0.025]],"o":[[0,0],[-5.659,0.938],[-53.918,17.233],[0,1.231],[0,0],[0,0],[0,0.017],[1.73,0.026],[0,0],[4.322,-4.661],[0,0],[1.196,-1.448],[-20.978,-3.073],[-0.831,-0.008],[-2.447,0],[0,0]],"v":[[-144.218,-10.647],[-167.073,-8.009],[-188.918,-3.005],[-234.982,19.257],[-232.323,21.486],[-142.067,19.122],[-141.199,19.014],[-139.902,19.061],[-112.739,17.694],[-101.876,4.123],[-85.409,-3.347],[-85.876,-3.687],[-86.394,-8.424],[-133.697,-11.082],[-137.701,-11.004],[-142.972,-10.683]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":33,"s":[{"i":[[0,0],[0,0],[0,-1.12],[0,0],[-1.657,0],[0,0],[0,0],[-0.937,-0.634],[-1.953,1.319],[0,0],[0,0],[0,0],[1.739,1.171],[0,0],[1.325,0],[0,-1.866]],"o":[[0,0],[-1.657,0],[0,0],[0,1.12],[0,0],[0,0],[0,0.896],[1.952,1.32],[0,0],[0,0],[0,0],[1.349,-1.317],[0,0],[-0.938,-0.633],[-2.761,0],[0,0]],"v":[[-136.662,-11.028],[-154.169,-11.028],[-157.169,-9],[-157.168,13.734],[-154.168,15.761],[-136.661,15.762],[-136.661,34.474],[-135.198,36.863],[-128.126,36.864],[-105.302,21.449],[-80.17,4.475],[-79.586,4.007],[-80.17,-0.302],[-128.129,-32.684],[-131.662,-33.673],[-136.662,-30.294]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.3,"y":0},"t":45,"s":[{"i":[[0,0],[0,0],[0,-1.441],[0,0],[-1.657,0],[0,0],[0,0],[-0.937,-0.816],[-1.953,1.698],[0,0],[0,0],[0,0],[1.739,1.507],[0,0],[1.325,0],[0,-2.402]],"o":[[0,0],[-1.657,0],[0,0],[0,1.441],[0,0],[0,0],[0,1.153],[1.952,1.699],[0,0],[0,0],[0,0],[1.349,-1.696],[0,0],[-0.938,-0.815],[-2.761,0],[0,0]],"v":[[-144.223,-12.822],[-161.73,-12.822],[-164.73,-10.212],[-164.73,19.046],[-161.73,21.655],[-144.223,21.655],[-144.223,45.738],[-142.76,48.812],[-135.689,48.814],[-112.864,28.974],[-87.731,7.128],[-87.147,6.526],[-87.732,0.98],[-135.689,-40.694],[-139.223,-41.966],[-144.223,-37.617]],"c":true}]},{"t":53,"s":[{"i":[[0,0],[0,0],[0,-1.657],[0,0],[-1.657,0],[0,0],[0,0],[-0.937,-0.938],[-1.953,1.952],[0,0],[0,0],[0,0],[1.739,1.732],[0,0],[1.325,0],[0,-2.761]],"o":[[0,0],[-1.657,0],[0,0],[0,1.657],[0,0],[0,0],[0,1.326],[1.952,1.953],[0,0],[0,0],[0,0],[1.349,-1.949],[0,0],[-0.938,-0.937],[-2.761,0],[0,0]],"v":[[-144.223,-15.381],[-161.73,-15.381],[-164.73,-12.381],[-164.73,21.257],[-161.73,24.257],[-144.223,24.257],[-144.223,51.945],[-142.76,55.479],[-135.689,55.481],[-112.864,32.671],[-87.731,7.556],[-87.147,6.863],[-87.732,0.487],[-135.689,-47.424],[-139.223,-48.887],[-144.223,-43.887]],"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":[100,100],"ix":3},"r":{"a":0,"k":-0.004,"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":"Path-5","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":27,"op":115,"st":-5,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Folder Front","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[57.78,31.05,0],"ix":2},"a":{"a":0,"k":[57.78,31.05,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":3,"s":[{"i":[[0,0],[2.227,-6.498],[0,0],[0,-1.195],[-11.046,0],[0,0],[-2.227,6.498],[0,0],[0,1.195],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.159],[0,8.063],[0,0],[9.176,0],[0,0],[0.397,-1.159],[0,-8.063],[0,0]],"v":[[-12.096,6.216],[-31.498,17.271],[-48.512,66.908],[-49.11,70.451],[-29.11,85.05],[127.657,85.05],[147.059,73.994],[163.661,26.719],[164.259,23.176],[144.259,8.577]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":26,"s":[{"i":[[0,0],[5.516,-7.616],[0,0],[0,-1.636],[-11.046,0],[0,0],[-3.702,4.718],[0,0],[-0.287,1.611],[17.899,0.533]],"o":[[-13.886,0.099],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[1.817,-2.298],[2.019,-11.354],[0,0]],"v":[[15.169,-0.792],[-12.083,14.287],[-46.038,57.422],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[179.824,27.398],[186.808,16.342],[164.086,-0.858]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0},"t":42,"s":[{"i":[[0,0],[2.227,-8.902],[0,0],[0,-1.636],[-11.046,0],[0,0],[-2.227,8.902],[0,0],[0,1.636],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[0.397,-1.588],[0,-11.046],[0,0]],"v":[[-19.91,-30.122],[-39.312,-14.977],[-48.512,60.196],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[156.259,-5.268],[156.857,-10.122],[136.857,-30.122]],"c":true}]},{"t":52,"s":[{"i":[[0,0],[2.227,-8.902],[0,0],[0,-1.636],[-11.046,0],[0,0],[-2.227,8.902],[0,0],[0,1.636],[11.046,0]],"o":[[-9.176,0],[0,0],[-0.397,1.588],[0,11.046],[0,0],[9.176,0],[0,0],[0.397,-1.588],[0,-11.046],[0,0]],"v":[[-12.096,-22.95],[-31.498,-7.804],[-48.512,60.196],[-49.11,65.05],[-29.11,85.05],[127.657,85.05],[147.059,69.904],[164.072,1.904],[164.671,-2.95],[144.671,-22.95]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Paper","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.562],"y":[0.795]},"o":{"x":[0.193],"y":[0]},"t":8,"s":[-2]},{"i":{"x":[0.655],"y":[4.184]},"o":{"x":[0.314],"y":[-0.57]},"t":15,"s":[-4]},{"i":{"x":[0.718],"y":[0.734]},"o":{"x":[0.356],"y":[0.331]},"t":20.154,"s":[-3.621]},{"t":28,"s":[-9.363]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.322,"y":0},"t":8,"s":[257.567,220.153,0],"to":[0.382,-4.007,0],"ti":[2.941,3.83,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11.785,"s":[262.921,208.399,0],"to":[-5.646,-7.352,0],"ti":[0.534,6.723,0]},{"i":{"x":0.661,"y":0.618},"o":{"x":0.167,"y":0.167},"t":15,"s":[237.946,187.294,0],"to":[-1.543,-19.419,0],"ti":[6.059,14.623,0]},{"i":{"x":0.67,"y":0.693},"o":{"x":0.332,"y":0.331},"t":20,"s":[226.102,138.397,0],"to":[-13.538,-32.678,0],"ti":[21.79,14.533,0]},{"t":28,"s":[168.17,69.295,0]}],"ix":2},"a":{"a":0,"k":[62.027,-12.355,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.164},"t":8,"s":[{"i":[[2.516,-6.249],[0,0],[6.903,0.419],[0,0],[-1.987,4.299],[0,0],[-7.209,-0.602],[0,0]],"o":[[0,0],[-1.967,2.18],[0,0],[-8.816,-1.347],[0,0],[2.17,-2.46],[0,0],[5.299,0.792]],"v":[[161.945,-34.476],[134.595,10.574],[120.346,16.613],[-37.025,-0.992],[-48.931,-13.662],[-19.761,-62.799],[-2.707,-68.708],[155.9,-48.303]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11.785,"s":[{"i":[[-0.62,-7.146],[24.266,-15.772],[6.897,0.475],[0,0],[-10.144,18.755],[0,0],[-7.201,-0.66],[0,0]],"o":[[0,0],[-1.611,6.106],[0,0],[-8.801,-1.419],[17.458,-31.917],[2.189,-2.441],[0,0],[5.29,0.835]],"v":[[176.594,-30.415],[136.76,12.668],[122.468,18.587],[-20.244,0.054],[-32.041,-12.709],[3.268,-65.026],[17.25,-70.48],[165.907,-44.98]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[7.268,-7.526],[11.042,-12.924],[6.905,0.324],[0,0],[-18.589,32.59],[0,0],[-7.213,-0.503],[0,0]],"o":[[0,0],[-6.535,7.649],[0,0],[-8.829,-1.226],[29.318,-51.402],[2.135,-2.488],[0,0],[5.306,0.719]],"v":[[208.562,-6.419],[189.704,17.731],[162.555,45.287],[24.586,36.525],[7.468,18.105],[44.979,-43.573],[61.315,-49.118],[208.152,-28.033]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-1.674,-7.821],[5.846,-31.918],[6.855,0.89],[0,0],[-1.209,12.301],[0,0],[-7.147,-1.093],[0,0]],"o":[[0,0],[-2.049,7.934],[0,0],[-8.699,-1.946],[15.144,-51.127],[2.332,-2.305],[0,0],[5.23,1.152]],"v":[[191.552,-12.575],[190.205,69.374],[178.047,75.855],[41.045,65.235],[24.048,51.03],[24.881,-38.407],[37.635,-43.057],[176.588,-28.143]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[-6.996,-8.612],[-0.448,-28.68],[6.911,-0.175],[0,0],[1.699,15.655],[0,0],[-7.231,0.019],[0,0]],"o":[[13.328,16.408],[-1.152,6.252],[0,0],[-8.896,-0.586],[0.268,-41.886],[1.95,-2.636],[0,0],[5.345,0.335]],"v":[[163.235,-21.22],[199.589,61.124],[191.209,70.479],[50.449,70.568],[33.588,58.016],[-10.506,-34.863],[2.092,-37.752],[142.978,-32.696]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":24,"s":[{"i":[[-7.256,-4.475],[-15.232,-36.815],[6.916,-0.045],[0,0],[-0.582,9.556],[1.574,4.124],[-7.233,-0.087],[0,0]],"o":[[0,0],[3.929,9.495],[0,0],[-8.887,-0.606],[2.621,-43.063],[-2.347,-6.149],[0,0],[5.341,0.35]],"v":[[131.416,-34.831],[185.982,24.651],[176.431,36.124],[18.207,41.687],[5.462,32.007],[-35.329,-37.09],[-19.1,-42.305],[114.097,-40.411]],"c":true}]},{"t":28,"s":[{"i":[[-7.583,-1.408],[-10.482,-12.74],[5.339,0.114],[0,0],[1.24,3.011],[3.16,1.374],[-5.191,0.695],[-29.909,-3.709]],"o":[[0,0],[-0.397,1.013],[-26.62,-2.211],[-6.606,-0.203],[-8.18,-13.777],[-1.646,-2.337],[5.772,-0.945],[3.215,0.189]],"v":[[92.11,-12.848],[153.114,11.129],[146.391,14.333],[35.34,12.786],[26.602,8.157],[0.215,-9.662],[8.591,-13.668],[76.61,-15.324]],"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":[5,-14.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"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":"Rectangle 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":8,"op":29,"st":-2,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Folder Far","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.29],"y":[0]},"t":0,"s":[-13]},{"i":{"x":[0.466],"y":[1]},"o":{"x":[0.553],"y":[0]},"t":12,"s":[5]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.506],"y":[0]},"t":29,"s":[-10]},{"i":{"x":[0.7],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":42,"s":[2]},{"t":50,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.29,"y":0},"t":0,"s":[174.274,223.861,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":10,"s":[234.274,131.861,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":27,"s":[234.274,189.861,0],"to":[0,0,0],"ti":[0,0,0]},{"t":41,"s":[234.274,153.861,0]}],"ix":2},"a":{"a":0,"k":[34.274,-21.139,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[40,0,100]},{"t":10,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":3,"s":[{"i":[[0,0],[-11.641,-0.603],[0,0],[-3.346,-2.144],[0,0],[-4.559,-0.236],[0,0],[0.179,-3.451],[0,0],[5.246,0],[0,0],[3.437,-10.77],[0,0]],"o":[[0.4,-7.669],[0,0],[4.559,0.236],[0,0],[3.346,2.144],[0,0],[5.239,0.272],[0,0],[-1.081,2.903],[0,0],[-14.946,0],[0,0],[0,0]],"v":[[-31.343,-23.38],[-9.543,-36.173],[52.203,-34.019],[64.458,-30.329],[77.186,-22.173],[89.441,-18.482],[151.238,-14.104],[159.509,-7.163],[158.328,-2.715],[147.415,-0.44],[-7.364,-2.697],[-36.675,13.091],[-53.574,55.488]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.4,"y":0},"t":20,"s":[{"i":[[0,0],[-11.045,0.001],[0,0],[-3.271,-2.83],[0,0],[-4.326,0],[0,0],[0,-4.971],[0,0],[4.971,0],[0,0],[2.948,-13.852],[0,0]],"o":[[0.002,-11.045],[0,0],[4.326,0],[0,0],[3.271,2.83],[0,0],[4.971,0],[0,0],[0,4.971],[0,0],[-14.162,0],[0,0],[0,0]],"v":[[-64.694,-61.634],[-44.692,-81.634],[23.101,-81.634],[34.879,-77.246],[46.309,-70.961],[58.086,-66.573],[123.293,-66.573],[133.279,-57.406],[132.954,-51.02],[121.043,-44.289],[-25.669,-44.289],[-54.929,-21.027],[-65.353,60.809]],"c":true}]},{"t":41,"s":[{"i":[[0,0],[-11.045,0.001],[0,0],[-3.271,-2.83],[0,0],[-4.326,0],[0,0],[0,-4.971],[0,0],[4.971,0],[0,0],[2.948,-13.852],[0,0]],"o":[[0.002,-11.045],[0,0],[4.326,0],[0,0],[3.271,2.83],[0,0],[4.971,0],[0,0],[0,4.971],[0,0],[-14.162,0],[0,0],[0,0]],"v":[[-64.723,-65.95],[-44.721,-85.95],[23.072,-85.95],[34.85,-81.562],[47.295,-70.794],[59.072,-66.406],[124.279,-66.406],[133.279,-57.406],[133.279,-49.95],[124.279,-40.95],[-22.434,-40.95],[-51.777,-17.195],[-64.73,43.672]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/hand_2.json b/TMessagesProj/src/main/res/raw/hand_2.json new file mode 100644 index 000000000..04bf1afee --- /dev/null +++ b/TMessagesProj/src/main/res/raw/hand_2.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":540,"w":60,"h":60,"nm":"Raise Hand Test","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256.989,275.127,0],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"ip":0,"op":119,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"head","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":23,"s":[-13]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0]},"t":66,"s":[-13]},{"i":{"x":[0.09],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[7]},{"t":92,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":1,"s":[0,-37.327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":11,"s":[0,-26.827,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":23,"s":[-4.4,-39.427,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[-2.401,-30.424,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[-4.4,-39.427,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.09,"y":1},"o":{"x":0.167,"y":0},"t":66,"s":[-2.401,-30.424,0],"to":[0,0,0],"ti":[0,0,0]},{"t":92,"s":[0,-37.327,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":11,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":16,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":28,"s":[97,103,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,0,0]},"t":36,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":44,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":50,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":58,"s":[97,103,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,0,0]},"t":66,"s":[100,100,100]},{"i":{"x":[0.09,0.09,0.09],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":75,"s":[95,105,100]},{"t":92,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.341,0],[0,-6.341],[6.341,0],[0,6.341]],"o":[[6.341,0],[0,6.341],[-6.341,0],[0,-6.341]],"v":[[0,-11.482],[11.482,0],[0,11.482],[-11.482,0]],"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":[100,100],"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":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"hands","parent":6,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":21,"s":[-10]},{"i":{"x":[0.17],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":65,"s":[-10]},{"t":93,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[-2.341,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[-2.341,-9.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[-3.741,-17.977,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":35,"s":[-1.541,-11.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":49,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.17,"y":1},"o":{"x":0.6,"y":0},"t":65,"s":[-1.541,-11.777,0],"to":[0,0,0],"ti":[0,0,0]},{"t":93,"s":[-2.341,-17.777,0]}],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[20,20,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"hands 3","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[0,0],[-0.71,-5.814],[-13.22,1.67],[-6.659,-0.445]],"o":[[-3.232,5.731],[0.566,4.637],[3.994,-0.505],[1.183,0.079]],"v":[[-18.219,-21.464],[-27.079,-2.224],[-7.644,3.484],[11.49,2.929]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[-1.902,-5.873],[-9.833,-0.14],[-7.372,0.373]],"o":[[-4.328,1.758],[1.817,5.11],[4.766,0.217],[1.182,0.009]],"v":[[-17.041,-20.099],[-26.446,-5.406],[-7.078,3.541],[9.615,2.763]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":23,"s":[{"i":[[0,0],[-4.205,-5.986],[-9.957,-1.926],[-4.458,0.474]],"o":[[5.753,4.944],[4.232,6.025],[3.773,0.73],[1.179,-0.125]],"v":[[-37.604,-27.175],[-25.224,-11.553],[-5.844,2.761],[7.055,3.069]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,0],[-1.728,-7.979],[-9.811,-4.073],[-4.458,0.474]],"o":[[3.018,5.449],[1.024,4.728],[4.574,1.385],[1.179,-0.125]],"v":[[-30.389,-31.532],[-24.556,-12.392],[-6.174,2.474],[7.055,3.069]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":32,"s":[{"i":[[0,0],[-0.133,-5.267],[-9.077,-3.752],[-4.458,0.474]],"o":[[-4.804,4.722],[0.193,7.66],[5.825,2.408],[1.179,-0.125]],"v":[[-10.804,-33.837],[-18.834,-15.906],[-6.69,2.025],[7.055,3.069]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,0],[-0.271,-4.621],[-9.517,-2.839],[-4.458,0.474]],"o":[[-3.394,4.297],[0.242,4.13],[4.799,1.569],[1.179,-0.125]],"v":[[-15.907,-30.468],[-22.029,-13.729],[-6.267,2.393],[7.055,3.069]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":42,"s":[{"i":[[0,0],[-3.928,-6.171],[-9.883,-2.273],[-3.875,0.81]],"o":[[5.522,5.2],[3.954,6.211],[4.837,1.112],[1.161,-0.243]],"v":[[-36.207,-29.267],[-24.551,-13.099],[-5.745,2.464],[7.055,3.069]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[-1.728,-7.979],[-9.811,-4.073],[-4.458,0.474]],"o":[[3.018,5.449],[1.024,4.728],[4.574,1.385],[1.179,-0.125]],"v":[[-30.389,-31.532],[-24.556,-12.392],[-6.174,2.474],[7.055,3.069]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":54,"s":[{"i":[[0,0],[-0.133,-5.267],[-9.319,-3.103],[-4.568,0.674]],"o":[[-4.804,4.722],[0.193,7.66],[5.735,1.909],[1.173,-0.173]],"v":[[-10.804,-33.837],[-18.834,-15.906],[-6.656,1.832],[7.072,2.972]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":61,"s":[{"i":[[0,0],[-0.271,-4.621],[-9.517,-2.839],[-4.458,0.474]],"o":[[-3.394,4.297],[0.242,4.13],[4.799,1.569],[1.179,-0.125]],"v":[[-15.907,-30.468],[-22.029,-13.729],[-6.267,2.393],[7.055,3.069]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":68,"s":[{"i":[[0,0],[-4.205,-5.986],[-9.957,-1.926],[-4.458,0.474]],"o":[[5.753,4.944],[4.232,6.025],[3.773,0.73],[1.179,-0.125]],"v":[[-37.604,-27.175],[-25.224,-11.553],[-5.844,2.761],[7.055,3.069]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0,0],[-3.924,-6.477],[-10.111,-0.781],[-3.392,0.105]],"o":[[4.365,3.67],[3.808,6.286],[4.491,0.347],[1.183,-0.028]],"v":[[-37.672,-26.337],[-25.271,-10.97],[-5.844,2.761],[6.463,3.033]],"c":false}]},{"t":95,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[-2.831,0.099],[-2.303,-0.066],[-1.926,-3.085],[-0.239,-5.607]],"o":[[3.206,-0.113],[11.894,0.339],[2.109,3.377],[0,0]],"v":[[2.767,2.88],[11.324,2.869],[28.065,7.836],[30.818,22.809]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":22,"s":[{"i":[[-2.833,0.019],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.963,-0.034],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.632,3.384],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":36,"s":[{"i":[[-2.83,-0.135],[-3.536,-1.048],[-1.592,-3.476],[-1.09,-6.235]],"o":[[7.035,0.337],[5.485,1.626],[1.67,3.647],[0,0]],"v":[[1.498,3.488],[12.683,2.542],[23.022,15.874],[26.398,31.323]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.6,"y":0},"t":50,"s":[{"i":[[-2.829,0.15],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.712,-0.25],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.417,3.447],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":66,"s":[{"i":[[-2.833,0.023],[-3.532,-0.206],[-2.149,-3.438],[-1.064,-6.535]],"o":[[4.317,-0.036],[4.623,0.27],[2.442,3.906],[0,0]],"v":[[1.983,3.325],[12.861,3.014],[29.432,13.325],[34.61,28.122]],"c":false}]},{"t":90,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"body","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[116.171,151.524,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[116.171,140.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":35,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":49,"s":[116.171,143.924,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.17,"y":0.17},"o":{"x":0.6,"y":0.6},"t":65,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"t":93,"s":[116.171,146.724,0]}],"ix":2},"a":{"a":0,"k":[0,14.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":0,"s":[100,100,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]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.484,0.484,0.484],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.486,0.486,0.486],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":21,"s":[100,100,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]},"t":27,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":35,"s":[100,100,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]},"t":42,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":49,"s":[100,100,100]},{"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":56,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":65,"s":[100,100,100]},{"i":{"x":[0.17,0.17,0.17],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":77,"s":[97,103,100]},{"t":93,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[-1.232,-13.968]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[7.2,-1.2]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[-7.2,1.2]],"v":[[-14.032,-4.05],[-13.127,7.863],[-9.825,12.562],[0.35,14.211],[10.398,12.616],[13.744,7.749],[14.232,-7.571],[-0.968,-7.539]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[{"i":[[-0.869,-2.458],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[1.3,6.472],[11.956,-3.973]],"o":[[1.863,5.271],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[-0.119,-0.593],[-5.848,1.943]],"v":[[-14.632,-13.411],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[11.232,-16.011],[-3.825,-14.466]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":35,"s":[{"i":[[-0.896,-2.536],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[2.094,6.249],[8.562,0.638]],"o":[[1.922,5.439],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,-0.172],[-6.543,-0.487]],"v":[[-15.346,-10.627],[-12.527,7.863],[-9.225,12.562],[0.35,14.211],[9.798,12.616],[13.144,7.749],[11.974,-10.116],[-6.43,-8.177]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":42,"s":[{"i":[[-0.878,-2.484],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[1.559,6.399],[11.133,-0.108]],"o":[[1.882,5.326],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[-0.105,-0.49],[-6.188,0.06]],"v":[[-14.481,-12.569],[-12.098,7.863],[-8.796,12.562],[0.35,14.211],[9.369,12.616],[12.715,7.749],[11.484,-13.946],[-3.724,-11.3]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":49,"s":[{"i":[[-0.869,-2.458],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[1.3,6.472],[11.176,-3.111]],"o":[[1.863,5.271],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[-0.119,-0.593],[-6.043,1.682]],"v":[[-14.732,-16.111],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[11.532,-15.511],[-3.745,-13.528]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":54,"s":[{"i":[[-0.873,-2.469],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[1.413,6.44],[7.166,0.651]],"o":[[1.872,5.295],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[-0.102,-0.533],[-6.261,-0.569]],"v":[[-14.525,-15.487],[-12.348,7.863],[-9.046,12.562],[0.35,14.211],[9.619,12.616],[12.964,7.749],[11.758,-14.741],[-3.318,-12.791]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[-0.878,-2.484],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[1.559,6.399],[7.228,0.668]],"o":[[1.882,5.326],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0.146],[-6.315,-0.584]],"v":[[-14.816,-12.663],[-12.153,7.863],[-8.85,12.562],[0.35,14.211],[9.424,12.616],[12.769,7.749],[11.588,-12.58],[-3.901,-10.75]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":65,"s":[{"i":[[-0.896,-2.536],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[2.094,6.249],[11.969,-4.333]],"o":[[1.922,5.439],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,-0.172],[-6.23,2.255]],"v":[[-15.524,-9.227],[-12.727,7.863],[-9.425,12.562],[0.35,14.211],[9.998,12.616],[13.344,7.749],[12.174,-10.116],[-3.838,-7.806]],"c":false}]},{"i":{"x":0.17,"y":1},"o":{"x":0.167,"y":0.167},"t":73,"s":[{"i":[[-0.39,-1.104],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0.912,2.72],[13.551,-2.732]],"o":[[0.837,2.368],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,-0.075],[-6.34,1.278]],"v":[[-14.493,-10.166],[-12.749,7.863],[-9.446,12.562],[0.35,14.211],[10.02,12.616],[13.365,7.749],[12.988,-9.89],[-1.256,-9.949]],"c":false}]},{"t":93,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[-1.232,-13.968]],"c":false}]}],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256.989,275.127,0],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"ip":0,"op":183,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"head","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[0,-37.327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":11,"s":[0,-27.027,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":23,"s":[0.383,-39.627,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":35,"s":[0.383,-33.606,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":49,"s":[0.383,-39.627,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":63,"s":[0.383,-33.606,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":79,"s":[3.183,-39.627,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.15,"y":1},"o":{"x":0.167,"y":0},"t":93,"s":[3.583,-33.606,0],"to":[0,0,0],"ti":[0,0,0]},{"t":124,"s":[0,-37.327,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":11,"s":[105,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":16,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":29,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":35,"s":[105,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":41,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":49,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":55,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":63,"s":[105,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":70,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":79,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":85,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":93,"s":[105,95,100]},{"i":{"x":[0.15,0.15,0.15],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":105,"s":[97,103,100]},{"t":124,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.341,0],[0,-6.341],[6.341,0],[0,6.341]],"o":[[6.341,0],[0,6.341],[-6.341,0],[0,-6.341]],"v":[[0,-11.482],[11.482,0],[0,11.482],[-11.482,0]],"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":[100,100],"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":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"hands","parent":6,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.16],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":21,"s":[0]},{"t":118,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[-2.341,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[-2.341,-9.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":33,"s":[-1.541,-15.377,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":47,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":61,"s":[-1.541,-15.377,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":78,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.16,"y":1},"o":{"x":0.5,"y":0},"t":102,"s":[-1.541,-15.377,0],"to":[0,0,0],"ti":[0,0,0]},{"t":118,"s":[-2.341,-17.777,0]}],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[20,20,100],"ix":6}},"ao":0,"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"hands 3","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[0,0],[-0.71,-5.814],[-13.22,1.67],[-6.667,-0.441]],"o":[[-3.232,5.731],[0.566,4.637],[3.994,-0.505],[1.183,0.078]],"v":[[-18.219,-21.464],[-27.079,-2.224],[-7.644,3.584],[11.49,2.929]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":23,"s":[{"i":[[0,0],[-1.268,-5.758],[-4.491,-2.782],[-9.089,1.417]],"o":[[-0.238,6.778],[1.347,6.12],[4.565,2.828],[1.172,-0.183]],"v":[[-19.257,-37.475],[-19.531,-14.871],[-9.165,2.078],[11.49,3.527]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":35,"s":[{"i":[[0,0],[-0.961,-3.853],[-6.666,-1.601],[-9.089,1.417]],"o":[[0.03,7.313],[1.517,6.08],[5.221,1.254],[1.172,-0.183]],"v":[[-23.457,-27.675],[-24.527,-6.059],[-7.961,2.838],[11.49,2.929]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":49,"s":[{"i":[[0,0],[-1.268,-5.758],[-4.491,-2.782],[-9.089,1.417]],"o":[[-0.238,6.778],[1.347,6.12],[4.565,2.828],[1.172,-0.183]],"v":[[-19.257,-37.475],[-19.531,-14.871],[-9.165,2.078],[11.49,3.527]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.7,"y":0},"t":59,"s":[{"i":[[0,0],[-0.961,-3.853],[-6.666,-1.601],[-9.116,1.293]],"o":[[0.03,7.313],[1.517,6.08],[5.221,1.254],[1.174,-0.167]],"v":[[-23.457,-27.675],[-24.527,-6.059],[-7.961,2.838],[11.49,2.929]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":65,"s":[{"i":[[0,0],[-0.651,-3.886],[-6.545,-1.827],[-9.086,1.105]],"o":[[4.595,6.728],[1.028,6.132],[5.027,1.403],[1.177,-0.143]],"v":[[-25.036,-29.511],[-22.232,-9.273],[-7.789,2.781],[11.545,2.978]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":73,"s":[{"i":[[0,0],[0.125,-3.969],[-6.039,-3.086],[-8.715,1.918]],"o":[[-2.798,7.352],[-0.197,6.263],[4.981,2.545],[1.158,-0.255]],"v":[[-9.536,-38.346],[-16.487,-17.314],[-7.359,2.636],[11.683,3.1]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0,0],[-0.447,-3.908],[-4.757,-3.608],[-9.817,2.3]],"o":[[-4.119,5.691],[0.705,6.167],[4.297,3.185],[1.155,-0.271]],"v":[[-10.167,-36.731],[-16.027,-16.023],[-7.359,2.636],[12.29,3.029]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":85,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.491,-2.782],[-7.117,1.703]],"o":[[1.597,6.857],[1.517,6.08],[4.565,2.828],[1.153,-0.276]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.359,2.636],[11.59,3.229]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0,0],[-0.511,-3.901],[-4.724,-3.504],[-8.017,1.106]],"o":[[2.238,7.884],[0.807,6.156],[4.331,3.14],[1.175,-0.162]],"v":[[-18.139,-37.479],[-16.265,-15.877],[-7.667,2.047],[11.49,2.929]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[{"i":[[0,0],[0.125,-3.969],[-6.039,-3.086],[-9.123,0.867]],"o":[[-2.798,7.352],[-0.197,6.263],[4.981,2.545],[1.181,-0.112]],"v":[[-9.536,-38.346],[-16.487,-17.314],[-7.559,2.136],[11.683,3.1]],"c":false}]},{"t":137,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[-2.832,-0.073],[-2.303,-0.066],[-1.926,-3.085],[-0.239,-5.607]],"o":[[2.794,0.072],[11.894,0.339],[2.109,3.377],[0,0]],"v":[[2.763,2.93],[11.216,2.961],[28.065,7.836],[30.818,22.809]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":23,"s":[{"i":[[-2.832,0.111],[-2.264,0.431],[-1.371,7.044],[-0.143,3.51]],"o":[[2.794,-0.11],[8.983,-1.711],[1.168,-6],[0,0]],"v":[[2.891,4.486],[10.849,3.71],[25.852,-14.597],[24.804,-37.956]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":35,"s":[{"i":[[-2.832,0.111],[-2.272,0.384],[-1.192,6.245],[-0.009,3.513]],"o":[[2.794,-0.11],[9.419,-1.594],[1.146,-6.005],[0,0]],"v":[[3.091,3.837],[10.849,3.012],[29.365,-6.408],[27.224,-29.702]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":49,"s":[{"i":[[-2.832,0.111],[-2.264,0.431],[-1.371,7.044],[-0.143,3.51]],"o":[[2.794,-0.11],[8.983,-1.711],[1.168,-6],[0,0]],"v":[[2.891,4.486],[10.849,3.71],[25.852,-14.597],[24.804,-37.956]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.7,"y":0},"t":63,"s":[{"i":[[-2.832,0.111],[-2.272,0.384],[-1.192,6.245],[-0.009,3.513]],"o":[[2.794,-0.11],[9.419,-1.594],[1.146,-6.005],[0,0]],"v":[[3.115,3.787],[10.849,3.012],[29.365,-6.408],[27.224,-29.702]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[-2.832,0.111],[-2.329,0.428],[-1.207,6.31],[-0.019,3.512]],"o":[[2.794,-0.11],[9.405,-1.697],[1.148,-6.004],[0,0]],"v":[[3.081,4.077],[10.905,3.036],[29.081,-7.069],[27.028,-30.369]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":81,"s":[{"i":[[-2.832,0.111],[-2.976,0.923],[-1.371,7.044],[-0.143,3.51]],"o":[[2.794,-0.11],[9.238,-2.866],[1.168,-6],[0,0]],"v":[[2.091,4.836],[11.549,3.31],[25.852,-14.597],[24.804,-37.956]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.7,"y":0},"t":95,"s":[{"i":[[-2.832,0.111],[-2.272,0.384],[-1.192,6.245],[-0.009,3.513]],"o":[[2.794,-0.11],[9.419,-1.594],[1.146,-6.005],[0,0]],"v":[[3.091,3.837],[10.849,3.012],[29.365,-6.408],[27.224,-29.702]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":104,"s":[{"i":[[-2.831,0.08],[-2.289,0.181],[-7.091,2.705],[-0.08,0.435]],"o":[[2.753,-0.078],[9.55,-0.749],[7.091,-2.705],[0,0]],"v":[[2.94,3.427],[10.784,3.015],[28.399,6.452],[28.599,-12.123]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":108,"s":[{"i":[[-2.826,0.181],[-2.296,0.098],[-2.884,-0.516],[0.064,0.955]],"o":[[2.87,-0.184],[9.603,-0.406],[2.056,-0.027],[0,0]],"v":[[2.852,3.381],[10.755,2.875],[28.007,11.666],[29.663,9.28]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":109,"s":[{"i":[[-2.829,0.086],[-2.298,0.077],[-0.947,-0.492],[-0.646,-0.097]],"o":[[2.923,-0.087],[9.617,-0.321],[0.947,0.492],[0,0]],"v":[[2.841,3.319],[10.792,2.896],[27.909,12.969],[29.9,13.784]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":110,"s":[{"i":[[-2.832,-0.009],[-2.3,0.057],[-0.78,-1.215],[-0.945,-1.801]],"o":[[2.976,0.009],[9.63,-0.235],[0.78,1.215],[0,0]],"v":[[2.83,3.257],[10.73,2.954],[27.812,14.272],[30.136,18.289]],"c":false}]},{"t":134,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"body","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[116.171,151.524,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.69,"y":0},"t":21,"s":[116.171,140.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.69,"y":0},"t":33,"s":[116.171,150.324,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.69,"y":0},"t":47,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.69,"y":0},"t":61,"s":[116.171,150.324,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.31,"y":1},"o":{"x":0.69,"y":0},"t":78,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.69,"y":0},"t":102,"s":[116.171,150.324,0],"to":[0,0,0],"ti":[0,0,0]},{"t":133,"s":[116.171,146.724,0]}],"ix":2},"a":{"a":0,"k":[0,14.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":0,"s":[100,100,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]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.484,0.484,0.484],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.31,0.31,0.31],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.563,0.563,0.563],"y":[0,0,0]},"t":21,"s":[100,100,100]},{"i":{"x":[0.219,0.219,0.219],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":27,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.406,0.406,0.406],"y":[0,0,0]},"t":33,"s":[100,100,100]},{"i":{"x":[0.233,0.233,0.233],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":40,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.69,0.69,0.69],"y":[0,0,0]},"t":47,"s":[100,100,100]},{"i":{"x":[0.31,0.31,0.31],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":54,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.495,0.495,0.495],"y":[0,0,0]},"t":61,"s":[100,100,100]},{"i":{"x":[0.203,0.203,0.203],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":67,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.69,0.69,0.69],"y":[0,0,0]},"t":78,"s":[100,100,100]},{"i":{"x":[0.31,0.31,0.31],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":89,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.495,0.495,0.495],"y":[0,0,0]},"t":102,"s":[100,100,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":117,"s":[103,97,100]},{"t":133,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[0.089,-13.897]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[0,0]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[0,0]],"v":[[-13.432,-6.25],[-13.127,7.863],[-9.825,12.562],[0.35,14.211],[10.398,12.616],[13.744,7.749],[13.432,-6.171],[0.069,-6.21]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[{"i":[[0,0],[0,0],[-1.772,-0.83],[-2.763,0],[-2.314,1.063],[-0.081,2.131],[0,0],[4.6,0.1]],"o":[[0,0],[0.132,2.059],[2.348,1.099],[2.717,0],[1.837,-0.844],[0,0],[0,0],[-4.6,-0.1]],"v":[[-12.732,-16.711],[-11.415,7.863],[-8.318,12.562],[0.348,14.211],[8.894,12.616],[12.032,7.749],[12.732,-14.111],[0.032,-12.939]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":33,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[0,0]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[0,0]],"v":[[-13.832,-12.011],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[13.832,-12.011],[0.071,-12.011]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.5,"y":0},"t":47,"s":[{"i":[[0,0],[0,0],[-1.772,-0.83],[-2.763,0],[-2.314,1.063],[-0.081,2.131],[0,0],[0,0]],"o":[[0,0],[0.132,2.059],[2.348,1.099],[2.717,0],[1.837,-0.844],[0,0],[0,0],[0,0]],"v":[[-12.732,-16.711],[-11.415,7.863],[-8.318,12.562],[0.348,14.211],[8.894,12.616],[12.032,7.749],[12.732,-14.111],[0.065,-13.504]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":61,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[0,0]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[0,0]],"v":[[-13.832,-12.011],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[13.832,-12.011],[0.071,-12.011]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":68,"s":[{"i":[[0.583,-2.853],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-1.681,3.721],[9.547,0.72]],"o":[[-1.162,5.686],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.172,-0.387],[-6.293,-0.475]],"v":[[-11.685,-13.446],[-12.103,7.863],[-8.8,12.562],[0.35,14.211],[9.374,12.616],[12.719,7.749],[13.832,-14.267],[-0.931,-12.07]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":78,"s":[{"i":[[0.583,-2.853],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-1.202,3.902],[10.545,0.088]],"o":[[-1.162,5.686],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.108,-0.363],[-6.244,-0.052]],"v":[[-11.402,-16.846],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[13.815,-16.611],[-0.813,-13.327]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":90,"s":[{"i":[[0.279,-1.426],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-0.575,1.951],[6.396,0.322]],"o":[[-0.556,2.843],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.052,-0.181],[-8.294,-0.418]],"v":[[-11.944,-17.745],[-12.154,7.863],[-8.852,12.562],[0.35,14.211],[9.425,12.616],[12.771,7.749],[13.386,-13.461],[-1.432,-12.505]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0},"t":102,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[0,0]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[0,0]],"v":[[-12.832,-15.411],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[12.932,-11.911],[-1.184,-11.652]],"c":false}]},{"t":133,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[0.089,-13.897]],"c":false}]}],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":184,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256.989,275.127,0],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"ip":0,"op":119,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"head","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":23,"s":[21]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":36,"s":[11]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":50,"s":[21]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.243],"y":[0]},"t":68,"s":[21]},{"i":{"x":[0.566],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":78,"s":[-15.198]},{"t":88,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":1,"s":[0,-37.327,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":11,"s":[0,-26.927,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":23,"s":[5.6,-39.527,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":36,"s":[4,-29.127,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0},"t":50,"s":[5.6,-39.527,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.5,"y":0},"t":66,"s":[4,-30.327,0],"to":[0,0,0],"ti":[0,0,0]},{"t":88,"s":[0,-37.327,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":11,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":16,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":29,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":36,"s":[105,95,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":43,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":50,"s":[105,95,100]},{"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":57,"s":[95,105,100]},{"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":66,"s":[102,98,100]},{"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,0]},"t":78,"s":[95,105,100]},{"t":88,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.341,0],[0,-6.341],[6.341,0],[0,6.341]],"o":[[6.341,0],[0,6.341],[-6.341,0],[0,-6.341]],"v":[[0,-11.482],[11.482,0],[0,11.482],[-11.482,0]],"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":[100,100],"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":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"hands","parent":6,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":21,"s":[8]},{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":49,"s":[8]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":65,"s":[8]},{"t":89,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[-2.341,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[-2.341,-9.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":35,"s":[-1.541,-11.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":49,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.6,"y":0},"t":65,"s":[-1.541,-11.777,0],"to":[0,0,0],"ti":[0,0,0]},{"t":89,"s":[-2.341,-17.777,0]}],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[20,20,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"hands 3","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[0,0],[-0.71,-5.814],[-13.22,1.67],[-6.659,-0.445]],"o":[[-3.232,5.731],[0.566,4.637],[3.994,-0.505],[1.183,0.079]],"v":[[-18.219,-21.464],[-27.079,-2.224],[-7.644,3.484],[10.985,2.86]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":23,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.984,-1.753],[-8.926,0.862]],"o":[[1.597,6.857],[1.517,6.08],[5.484,1.929],[1.18,-0.114]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.906,2.713],[8.267,2.627]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":37,"s":[{"i":[[0,0],[-1.803,-4.807],[-6.68,-0.3],[-7.645,-0.484]],"o":[[-1.052,7.028],[2.083,5.552],[5.685,0.256],[1.184,0.075]],"v":[[-20.218,-23.988],[-22.536,-2.921],[-7.359,2.636],[10.433,2.572]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.7,"y":0},"t":51,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.984,-1.753],[-8.926,0.862]],"o":[[1.597,6.857],[1.517,6.08],[5.484,1.929],[1.18,-0.114]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.906,2.713],[8.267,2.627]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":67,"s":[{"i":[[0,0],[-1.803,-4.807],[-6.68,-0.3],[-7.645,-0.484]],"o":[[-1.052,7.028],[2.083,5.552],[5.685,0.256],[1.184,0.075]],"v":[[-20.218,-23.988],[-22.536,-2.921],[-7.359,2.636],[10.433,2.572]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":78,"s":[{"i":[[0,0],[-1.746,-7.006],[-9.167,-1.369],[-3.018,-0.266]],"o":[[-3.628,5.112],[1.694,6.8],[4.106,0.209],[1.182,0.076]],"v":[[-20.614,-25.461],[-25.11,-7.259],[-6.208,2.731],[7.297,3.206]],"c":false}]},{"t":105,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[-2.832,-0.073],[-2.303,-0.066],[-1.926,-3.085],[-0.239,-5.607]],"o":[[2.794,0.072],[11.894,0.339],[2.109,3.377],[0,0]],"v":[[2.747,2.681],[11.207,2.811],[28.065,7.836],[30.818,22.809]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":22,"s":[{"i":[[-2.805,0.395],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.23,-0.595],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.696,3.339],[12.911,2.962],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.7,"y":0},"t":36,"s":[{"i":[[-2.83,0.127],[-2.144,-0.845],[-1.985,-3.535],[-1.3,-6.195]],"o":[[5.352,-0.241],[5.323,2.097],[1.964,3.497],[0,0]],"v":[[1.908,2.538],[13.562,3.072],[22.983,13.903],[27.16,28.662]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":50,"s":[{"i":[[-2.805,0.395],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.23,-0.595],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.696,3.339],[12.911,2.962],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":58,"s":[{"i":[[-2.818,0.261],[-2.144,-0.845],[-1.78,-3.636],[-2.457,-5.823]],"o":[[4.791,-0.418],[5.323,2.097],[1.952,4.051],[0,0]],"v":[[2.321,3.134],[13.236,3.017],[22.578,16.597],[28.656,30.451]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.4,"y":0},"t":66,"s":[{"i":[[-2.83,0.127],[-2.144,-0.845],[-1.985,-3.535],[-1.3,-6.195]],"o":[[5.352,-0.241],[5.323,2.097],[1.964,3.497],[0,0]],"v":[[1.908,2.538],[13.562,3.072],[22.983,13.903],[27.16,28.662]],"c":false}]},{"i":{"x":0.1,"y":1},"o":{"x":0.167,"y":0.167},"t":76,"s":[{"i":[[-2.803,-0.138],[-2.518,-0.399],[-2.207,-4.957],[2.376,-4.348]],"o":[[3.802,0.187],[4.102,0.65],[1.627,3.656],[0,0]],"v":[[1.941,2.94],[11.88,3.616],[26.524,13.453],[23.943,27.653]],"c":false}]},{"t":97,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"body","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[116.171,151.524,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[116.171,140.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":35,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":49,"s":[116.171,143.924,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.6,"y":0.6},"t":65,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"t":89,"s":[116.171,146.724,0]}],"ix":2},"a":{"a":0,"k":[0,14.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":0,"s":[100,100,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]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.484,0.484,0.484],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.486,0.486,0.486],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":21,"s":[100,100,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]},"t":27,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":35,"s":[100,100,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]},"t":42,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":49,"s":[100,100,100]},{"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":56,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":65,"s":[100,100,100]},{"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,0]},"t":76,"s":[97,103,100]},{"t":89,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[-2.127,-14.017]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[-2.036,-0.83],[-3.175,0],[-2.659,1.063],[-0.093,2.131],[0,0],[0,0]],"o":[[0,0],[0.446,2.497],[2.698,1.099],[3.123,0],[2.111,-0.844],[0,0],[0,0],[0,0]],"v":[[-14.932,-5.55],[-13.915,7.864],[-10.056,12.562],[0.354,14.211],[10.626,12.616],[14.232,7.749],[14.732,-4.571],[-1.668,-6.839]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[{"i":[[0.416,-4.877],[0,0],[-1.748,-0.83],[-2.726,0],[-2.283,1.063],[-0.08,2.131],[-1.162,6.43],[7.773,-0.606]],"o":[[-0.818,9.587],[0.13,2.059],[2.317,1.099],[2.681,0],[1.812,-0.844],[0,0],[0.023,-0.095],[-6.044,0.472]],"v":[[-11.695,-16.726],[-11.827,7.863],[-8.772,12.562],[0.392,14.211],[9.438,12.616],[12.534,7.749],[14.054,-9.469],[3.058,-14.133]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":35,"s":[{"i":[[0.168,-4.901],[0,0],[-1.759,-0.83],[-2.743,0],[-2.297,1.063],[-0.08,2.131],[-1.325,4.892],[7.682,-1.08]],"o":[[-0.283,8.264],[0.131,2.059],[2.331,1.099],[2.698,0],[1.823,-0.844],[0,0],[0.15,-0.385],[-6.216,0.874]],"v":[[-12.874,-10.003],[-11.908,7.863],[-8.834,12.562],[0.377,14.211],[9.469,12.616],[12.584,7.749],[14.152,-3.848],[-1.25,-8.759]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.5,"y":0},"t":49,"s":[{"i":[[0.416,-4.877],[0,0],[-1.748,-0.83],[-2.726,0],[-2.283,1.063],[-0.08,2.131],[-1.162,6.43],[9.673,-2.072]],"o":[[-0.818,9.587],[0.13,2.059],[2.317,1.099],[2.681,0],[1.812,-0.844],[0,0],[0.023,-0.095],[-5.963,1.277]],"v":[[-11.695,-17.126],[-11.827,7.863],[-8.772,12.562],[0.392,14.211],[9.438,12.616],[12.534,7.749],[14.054,-9.469],[-0.642,-13.867]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.6,"y":0},"t":65,"s":[{"i":[[0.168,-4.901],[0,0],[-1.759,-0.83],[-2.743,0],[-2.297,1.063],[-0.08,2.131],[-1.325,4.892],[9.682,-1.898]],"o":[[-0.283,8.264],[0.131,2.059],[2.331,1.099],[2.698,0],[1.823,-0.844],[0,0],[0.15,-0.385],[-6.146,1.205]],"v":[[-12.874,-10.003],[-11.908,7.863],[-8.834,12.562],[0.377,14.211],[9.469,12.616],[12.584,7.749],[14.152,-4.048],[-1.55,-8.541]],"c":false}]},{"t":89,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[-2.127,-14.017]],"c":false}]}],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256.989,275.127,0],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"ip":0,"op":119,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"head","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":1,"s":[0]},{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":11,"s":[0]},{"i":{"x":[0.1],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":23,"s":[21]},{"t":107,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":1,"s":[122.706,17.15,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":11,"s":[122.706,68.999,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.589,"y":1},"o":{"x":0.275,"y":0},"t":23,"s":[150.706,5.999,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.206,"y":0},"t":32,"s":[150.706,32.05,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.589,"y":1},"o":{"x":0.275,"y":0},"t":40,"s":[150.706,27.67,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":1},"o":{"x":0.206,"y":0},"t":47,"s":[150.706,32.05,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.589,"y":1},"o":{"x":0.275,"y":0},"t":54,"s":[150.706,27.67,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.206,"y":0},"t":61,"s":[150.706,32.05,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.1,"y":1},"o":{"x":0.6,"y":0},"t":70,"s":[150.706,27.67,0],"to":[0,0,0],"ti":[0,0,0]},{"t":107,"s":[122.706,17.15,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":1,"s":[500,500,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":5,"s":[485,515,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":11,"s":[525,475,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":16,"s":[485,515,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":23,"s":[525,475,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":32,"s":[500,500,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":40,"s":[500,500,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":47,"s":[500,500,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":54,"s":[500,500,100]},{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":61,"s":[500,500,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":70,"s":[500,500,100]},{"i":{"x":[0.1,0.1,0.1],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":77,"s":[480,520,100]},{"t":107,"s":[500,500,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.341,0],[0,-6.341],[6.341,0],[0,6.341]],"o":[[6.341,0],[0,6.341],[-6.341,0],[0,-6.341]],"v":[[0,-11.482],[11.482,0],[0,11.482],[-11.482,0]],"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":[100,100],"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":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"NULL CONTROL","parent":7,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.5,"y":0},"t":21,"s":[-1.541,-17.777,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.13,"y":1},"o":{"x":0.6,"y":0},"t":66,"s":[-1.541,-20.177,0],"to":[0,0,0],"ti":[0,0,0]},{"t":94,"s":[-1.541,-17.777,0]}],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[20,20,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":3,"nm":"hands","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.5],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.5],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":23,"s":[8]},{"i":{"x":[0.13],"y":[1]},"o":{"x":[0.6],"y":[0]},"t":65,"s":[8]},{"t":94,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[111,115,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[111,155,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":23,"s":[115,115,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":30,"s":[115,121,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":38,"s":[115,115,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":45,"s":[115,121,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0},"t":53,"s":[115,115,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0},"t":57,"s":[115,121,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.13,"y":1},"o":{"x":0.6,"y":0},"t":65,"s":[115,115,0],"to":[0,0,0],"ti":[0,0,0]},{"t":94,"s":[111,115,0]}],"ix":2},"a":{"a":0,"k":[115,115,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"hands 3","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[0,0],[-0.71,-5.814],[-13.22,1.67],[-6.666,-0.138]],"o":[[-3.232,5.731],[0.566,4.637],[3.994,-0.505],[1.186,0.024]],"v":[[-18.219,-21.464],[-27.079,-2.224],[-7.644,3.484],[11.485,2.829]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":23,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.491,-2.782],[-8.28,0.661]],"o":[[1.597,6.857],[1.517,6.08],[4.565,2.828],[1.182,-0.094]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.359,2.636],[10.724,2.534]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[0,0],[-0.511,-3.901],[-4.724,-3.504],[-8.291,0.526]],"o":[[2.238,7.884],[0.807,6.156],[4.331,3.14],[1.184,-0.075]],"v":[[-18.139,-37.479],[-16.265,-15.877],[-7.359,2.636],[10.941,2.657]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":30,"s":[{"i":[[0,0],[0.125,-3.969],[-5.052,-4.524],[-8.435,1.023]],"o":[[-2.798,7.352],[-0.197,6.263],[4,3.582],[1.177,-0.143]],"v":[[-6.969,-38.346],[-13.919,-17.314],[-7.359,2.636],[9.48,3.009]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[0,0],[-0.447,-3.908],[-4.757,-3.608],[-8.213,0.625]],"o":[[-4.119,5.691],[0.705,6.167],[4.297,3.185],[1.182,-0.09]],"v":[[-10.167,-36.731],[-16.027,-16.023],[-7.359,2.636],[11.49,2.929]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":37.666,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.491,-2.782],[-8.28,0.661]],"o":[[1.597,6.857],[1.517,6.08],[4.565,2.828],[1.182,-0.094]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.359,2.636],[10.724,2.534]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[0,0],[-0.511,-3.901],[-4.724,-3.504],[-8.291,0.526]],"o":[[2.238,7.884],[0.807,6.156],[4.331,3.14],[1.184,-0.075]],"v":[[-18.139,-37.479],[-16.265,-15.877],[-7.359,2.636],[10.941,2.657]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":45,"s":[{"i":[[0,0],[0.125,-3.969],[-5.052,-4.524],[-8.435,1.023]],"o":[[-2.798,7.352],[-0.197,6.263],[4,3.582],[1.177,-0.143]],"v":[[-6.969,-38.346],[-13.919,-17.314],[-7.359,2.636],[9.48,3.009]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[{"i":[[0,0],[-0.447,-3.908],[-4.757,-3.608],[-8.213,0.625]],"o":[[-4.119,5.691],[0.705,6.167],[4.297,3.185],[1.182,-0.09]],"v":[[-10.167,-36.731],[-16.027,-16.023],[-7.359,2.636],[11.49,2.929]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":52.334,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.491,-2.782],[-8.28,0.661]],"o":[[1.597,6.857],[1.517,6.08],[4.565,2.828],[1.182,-0.094]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.359,2.636],[10.724,2.534]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[{"i":[[0,0],[-0.511,-3.901],[-4.724,-3.504],[-8.291,0.526]],"o":[[2.238,7.884],[0.807,6.156],[4.331,3.14],[1.184,-0.075]],"v":[[-18.139,-37.479],[-16.265,-15.877],[-7.359,2.636],[10.941,2.657]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[0,0],[0.125,-3.969],[-5.052,-4.524],[-8.435,1.023]],"o":[[-2.798,7.352],[-0.197,6.263],[4,3.582],[1.177,-0.143]],"v":[[-6.969,-38.346],[-13.919,-17.314],[-7.359,2.636],[9.48,3.009]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":64,"s":[{"i":[[0,0],[-0.447,-3.908],[-4.757,-3.608],[-8.213,0.625]],"o":[[-4.119,5.691],[0.705,6.167],[4.297,3.185],[1.182,-0.09]],"v":[[-10.167,-36.731],[-16.027,-16.023],[-7.359,2.636],[11.49,2.929]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":68,"s":[{"i":[[0,0],[-0.961,-3.853],[-4.491,-2.782],[-8.28,0.661]],"o":[[1.597,6.857],[1.517,6.08],[4.565,2.828],[1.182,-0.094]],"v":[[-20.247,-37.336],[-17.926,-14.859],[-7.359,2.636],[10.724,2.534]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0.167},"t":71.666,"s":[{"i":[[0,0],[-0.511,-3.901],[-4.724,-3.504],[-8.522,-0.294]],"o":[[2.238,7.884],[0.807,6.156],[4.331,3.14],[1.185,0.041]],"v":[[-18.139,-37.479],[-16.265,-15.877],[-7.359,2.636],[11.49,2.929]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0},"t":76,"s":[{"i":[[0,0],[0.125,-3.969],[-5.052,-4.524],[-9.764,-0.338]],"o":[[-2.798,7.352],[-0.197,6.263],[4,3.582],[1.185,0.041]],"v":[[-6.969,-38.346],[-13.919,-17.314],[-7.359,2.636],[11.487,2.829]],"c":false}]},{"i":{"x":0.09,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,0],[-1.151,-9.822],[-6.924,-2.401],[-5.542,0.051]],"o":[[-3.654,5.5],[0.733,6.255],[4.389,1.538],[1.186,-0.011]],"v":[[-12.896,-35.078],[-19.976,-13.433],[-7.442,2.05],[9.027,3.064]],"c":false}]},{"t":104,"s":[{"i":[[0,0],[-4.026,-6.73],[-10.797,-1.273],[-2.119,-0.01]],"o":[[0.65,4.552],[3.882,6.488],[3.499,0.413],[1.186,0.005]],"v":[[-34.027,-30.664],[-27.902,-11.553],[-6.28,2.761],[4.392,3.022]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"hands 2","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[115,115,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[500,500,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.6,"y":0},"t":0,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.6,"y":0},"t":10,"s":[{"i":[[-2.832,-0.073],[-2.303,-0.066],[-1.926,-3.085],[-0.239,-5.607]],"o":[[2.794,0.072],[11.894,0.339],[2.109,3.377],[0,0]],"v":[[2.758,2.83],[11.206,2.761],[28.065,7.836],[30.818,22.809]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":23,"s":[{"i":[[-2.816,0.314],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.14,-0.462],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.456,3.576],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":31,"s":[{"i":[[-2.805,0.396],[-2.168,-0.779],[-1.2,-3.73],[-2.259,-5.223]],"o":[[3.592,-0.507],[6.085,2.162],[1.511,4.741],[0,0]],"v":[[2.725,4.04],[12.869,3.17],[22.316,18.867],[27.587,32.67]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[-2.816,0.314],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.14,-0.462],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.456,3.576],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":46,"s":[{"i":[[-2.805,0.396],[-2.168,-0.779],[-1.2,-3.73],[-2.259,-5.223]],"o":[[3.592,-0.507],[6.085,2.162],[1.511,4.741],[0,0]],"v":[[2.725,4.04],[12.869,3.17],[22.316,18.867],[27.587,32.67]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":53,"s":[{"i":[[-2.816,0.314],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.14,-0.462],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.456,3.576],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.5,"y":0},"t":61,"s":[{"i":[[-2.805,0.396],[-2.168,-0.779],[-1.2,-3.73],[-2.259,-5.223]],"o":[[3.592,-0.507],[6.085,2.162],[1.511,4.741],[0,0]],"v":[[2.725,4.04],[12.869,3.17],[22.316,18.867],[27.587,32.67]],"c":false}]},{"i":{"x":0.13,"y":1},"o":{"x":0.6,"y":0},"t":69,"s":[{"i":[[-2.816,0.314],[-2.144,-0.845],[-1.574,-3.736],[-3.615,-5.451]],"o":[[4.14,-0.462],[5.323,2.097],[1.94,4.605],[0,0]],"v":[[2.456,3.576],[12.827,2.873],[22.174,19.291],[30.152,32.241]],"c":false}]},{"t":100,"s":[{"i":[[-3.103,0.058],[-2.523,0.098],[-2.257,-5.922],[-0.05,-3.076]],"o":[[2.726,-0.051],[10.848,-0.42],[1.636,4.291],[0,0]],"v":[[3.047,3.014],[11.974,3.008],[30.43,17.71],[32.973,31.114]],"c":false}]}],"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":4.8,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-8","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"body","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[116.171,151.524,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.723,"y":1},"o":{"x":0.395,"y":0},"t":21,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.361,"y":0},"t":30,"s":[116.171,147.924,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.723,"y":1},"o":{"x":0.395,"y":0},"t":38,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.361,"y":0},"t":45,"s":[116.171,147.924,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.723,"y":1},"o":{"x":0.395,"y":0},"t":52,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.361,"y":0},"t":59,"s":[116.171,147.924,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.104,"y":0.104},"o":{"x":0.395,"y":0.395},"t":66,"s":[116.171,146.724,0],"to":[0,0,0],"ti":[0,0,0]},{"t":94,"s":[116.171,146.724,0]}],"ix":2},"a":{"a":0,"k":[0,14.211,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":0,"s":[100,100,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]},"t":5,"s":[97,103,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.484,0.484,0.484],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.486,0.486,0.486],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":15,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":21,"s":[100,100,100]},{"i":{"x":[0.486,0.486,0.486],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":25,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.5,0.5,0.5],"y":[0,0,0]},"t":30,"s":[100,100,100]},{"i":{"x":[0.486,0.486,0.486],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":34,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.48,0.48,0.48],"y":[0,0,0]},"t":38,"s":[100,100,100]},{"i":{"x":[0.471,0.471,0.471],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":41,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.537,0.537,0.537],"y":[0,0,0]},"t":45,"s":[100,100,100]},{"i":{"x":[0.582,0.582,0.582],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":49,"s":[103,97,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.48,0.48,0.48],"y":[0,0,0]},"t":52,"s":[100,100,100]},{"i":{"x":[0.471,0.471,0.471],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0]},"t":55,"s":[98,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,1]},"o":{"x":[0.468,0.468,0.468],"y":[0,0,0]},"t":59,"s":[100,100,100]},{"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,0]},"t":62,"s":[103,97,100]},{"i":{"x":[0.13,0.13,0.13],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":66,"s":[100,100,100]},{"t":94,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[8.179,-13.458],[-3.728,-14.103]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.5,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[0,0],[0,0],[0,0]],"o":[[0,0],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0,0],[0,0],[0,0]],"v":[[-14.032,-5.05],[-13.127,7.863],[-9.825,12.562],[0.35,14.211],[10.398,12.616],[13.744,7.749],[14.232,-5.571],[9.351,-5.481],[-4.158,-6.032]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":23,"s":[{"i":[[0.662,-3.59],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-2.532,4.395],[2.35,1.639],[4.409,1.158]],"o":[[-1.585,8.587],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.006,-0.084],[-3.61,-2.518],[-3.578,-0.94]],"v":[[-11.286,-17.808],[-12.133,7.863],[-8.83,12.562],[0.35,14.211],[9.404,12.616],[12.749,7.749],[13.232,-10.927],[9.318,-13.932],[-4.455,-14.008]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[1.056,-3.495],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-3.19,3.944],[2.35,1.814],[4.6,1.543]],"o":[[-2.702,8.946],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.021,-0.037],[-3.61,-2.786],[-3.733,-1.252]],"v":[[-11.366,-17.585],[-11.927,7.863],[-8.625,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[14.152,-8.699],[10.273,-11.929],[-3.437,-12.668]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":38,"s":[{"i":[[0.662,-3.59],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-2.532,4.395],[2.35,1.804],[4.409,1.445]],"o":[[-1.585,8.587],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.006,-0.084],[-3.61,-2.771],[-3.578,-1.173]],"v":[[-11.286,-19.408],[-12.133,7.863],[-8.83,12.562],[0.35,14.211],[9.404,12.616],[12.749,7.749],[13.232,-10.927],[9.318,-14.209],[-5.653,-15.762]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[3.203,-10.603],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-3.19,3.944],[3,-0.7],[3.7,2]],"o":[[-2.702,8.946],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.08,-0.14],[-3,0.7],[-3.7,-2]],"v":[[-11.166,-19.585],[-11.927,7.863],[-8.625,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[14.152,-8.699],[8.332,-14.539],[-4.768,-13.439]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":52,"s":[{"i":[[0.662,-3.59],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-2.532,4.395],[2.352,1.824],[4.412,1.481]],"o":[[-1.585,8.587],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.006,-0.084],[-3.613,-2.802],[-3.581,-1.202]],"v":[[-11.303,-19.608],[-12.133,7.863],[-8.83,12.562],[0.35,14.211],[9.404,12.616],[12.749,7.749],[13.232,-10.927],[9.315,-14.243],[-5.266,-16.412]],"c":false}]},{"i":{"x":0.2,"y":1},"o":{"x":0.167,"y":0.167},"t":59,"s":[{"i":[[1.056,-3.495],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-3.19,3.944],[2.33,2.05],[4.563,1.956]],"o":[[-2.702,8.946],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.021,-0.037],[-3.578,-3.149],[-3.704,-1.587]],"v":[[-11.164,-19.885],[-11.927,7.863],[-8.625,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[14.152,-8.699],[10.308,-12.326],[-4.786,-14.983]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.6,"y":0},"t":66,"s":[{"i":[[0.662,-3.59],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-2.532,4.395],[2.352,1.886],[4.412,1.589]],"o":[[-1.585,8.587],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.006,-0.084],[-3.613,-2.897],[-3.581,-1.29]],"v":[[-11.303,-20.208],[-12.133,7.863],[-8.83,12.562],[0.35,14.211],[9.404,12.616],[12.749,7.749],[13.232,-10.927],[9.315,-14.347],[-4.166,-15.759]],"c":false}]},{"i":{"x":0.13,"y":1},"o":{"x":0.167,"y":0.167},"t":79,"s":[{"i":[[0.229,-1.092],[0,0],[-1.89,-0.83],[-2.946,0],[-2.468,1.063],[-0.086,2.131],[-0.774,1.343],[2.54,0.846],[4.54,0.959]],"o":[[-0.964,4.6],[0.14,2.059],[2.504,1.099],[2.898,0],[1.959,-0.844],[0,0],[0.002,-0.026],[-3.902,-1.3],[-3.684,-0.778]],"v":[[-12.005,-18.139],[-12.127,7.863],[-8.825,12.562],[0.35,14.211],[9.398,12.616],[12.744,7.749],[13.275,-12.666],[9.02,-14.164],[-5.367,-14.041]],"c":false}]},{"t":94,"s":[{"i":[[0,0],[-0.741,-5.903],[-1.922,-0.751],[-2.946,0],[-2.468,1.063],[-0.228,3.004],[0,0],[0,0],[0,0]],"o":[[0,0],[0.328,2.608],[2.556,0.999],[2.898,0],[1.959,-0.844],[0.638,-8.388],[0,0],[0,0],[0,0]],"v":[[-12.432,-14.575],[-11.977,8.464],[-8.487,13.499],[0.4,14.598],[9.223,13.566],[12.656,8.149],[12.482,-13.225],[8.179,-13.458],[-3.728,-14.103]],"c":false}]}],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"hand_4","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[29.062,27.773,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[11.426,11.426,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":420,"op":540,"st":420,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"hand_3","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[29.062,27.773,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[11.426,11.426,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":240,"op":420,"st":240,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"hand_2","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[29.062,27.773,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[11.426,11.426,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":120,"op":240,"st":120,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"hand_1","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[29.062,27.773,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[11.426,11.426,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":120,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/payment_success.json b/TMessagesProj/src/main/res/raw/payment_success.json new file mode 100644 index 000000000..d0dee855c --- /dev/null +++ b/TMessagesProj/src/main/res/raw/payment_success.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":63,"w":512,"h":512,"nm":"Card 3","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Coin 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":14,"s":[50]},{"t":62,"s":[140.566]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":0.848},"o":{"x":0.05,"y":0},"t":17,"s":[270.605,259.865,0],"to":[0,0,0],"ti":[40.605,0.865,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.6,"y":0.053},"t":42,"s":[215.605,71.865,0],"to":[-40.605,-0.865,0],"ti":[0,0,0]},{"t":62,"s":[165.605,457.865,0]}],"ix":2},"a":{"a":0,"k":[43.395,127.865,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":59,"s":[-100,100,100]},{"t":62,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":37,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":47,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":57,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"t":62,"s":[{"i":[[0,-19.405],[14.995,0.275],[0,19.405],[-14.284,0.398]],"o":[[0,19.405],[-14.284,-0.238],[0,-19.405],[14.234,-0.393]],"v":[[65.256,127.865],[43.395,163],[21.534,127.865],[43.395,92.729]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":19,"op":194,"st":12,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Coin 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":2,"s":[0]},{"t":55,"s":[200]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":0.872},"o":{"x":0.05,"y":0},"t":5,"s":[197.605,259.865,0],"to":[0,0,0],"ti":[57.605,-1.135,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.6,"y":0.048},"t":30,"s":[132.605,40.865,0],"to":[-57.605,1.135,0],"ti":[0,0,0]},{"t":50,"s":[33.605,459.865,0]}],"ix":2},"a":{"a":0,"k":[43.395,127.865,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.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":[-100,100,100]},{"t":50,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,-19.405],[13.231,0.385],[0,19.405],[-12.236,0.557]],"o":[[0,19.405],[-12.236,-0.333],[0,-19.405],[12.166,-0.551]],"v":[[59.946,127.865],[44.829,157.471],[26.844,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":45,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"t":55,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":182,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Coin","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":11,"s":[0]},{"t":61,"s":[178]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":0.872},"o":{"x":0.05,"y":0},"t":11,"s":[314.395,259.865,0],"to":[0,0,0],"ti":[-57.605,-1.135,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.6,"y":0.048},"t":36,"s":[379.395,40.865,0],"to":[57.605,1.135,0],"ti":[0,0,0]},{"t":56,"s":[478.395,459.865,0]}],"ix":2},"a":{"a":0,"k":[43.395,127.865,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":53,"s":[100,100,100]},{"t":56,"s":[0,0,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0.921,-19.383],[15.877,0.22],[0,19.405],[-15.308,0.318]],"o":[[-0.423,8.902],[-15.308,-0.19],[0,-19.405],[15.268,-0.315]],"v":[[67.911,127.865],[40.876,136.815],[18.879,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0.614,-19.39],[14.113,0.33],[0,19.405],[-13.26,0.477]],"o":[[-0.282,12.403],[-13.26,-0.285],[0,-19.405],[13.2,-0.472]],"v":[[62.601,127.865],[42.796,162.033],[24.189,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":21,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":41,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":51,"s":[{"i":[[0,-19.405],[19.405,0],[0,19.405],[-19.405,0]],"o":[[0,19.405],[-19.405,0],[0,-19.405],[19.405,0]],"v":[[78.53,127.865],[43.395,163],[8.259,127.865],[43.395,92.729]],"c":true}]},{"t":61,"s":[{"i":[[0,-19.405],[10.585,0.549],[0,19.405],[-9.164,0.795]],"o":[[0,19.405],[-9.164,-0.476],[0,-19.405],[9.063,-0.787]],"v":[[51.981,127.865],[43.395,163],[34.809,127.865],[43.395,92.729]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":15,"op":183,"st":1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Card","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.29,"y":0},"t":0,"s":[256,376,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.71,"y":1},"o":{"x":0.6,"y":0},"t":8,"s":[256,350,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.3,"y":0.587},"o":{"x":0.2,"y":0},"t":18,"s":[256,448,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.6,"y":0.058},"t":40,"s":[256,424,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.71,"y":1},"o":{"x":0.3,"y":0},"t":50,"s":[256,357,0],"to":[0,0,0],"ti":[0,0,0]},{"t":59,"s":[256,376,0]}],"ix":2},"a":{"a":0,"k":[256,376,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.2],"y":[1,1,1]},"o":{"x":[0.29,0.29,0.29],"y":[0,0,0]},"t":0,"s":[60,0,100]},{"i":{"x":[0.71,0.71,0.71],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0,0,0]},"t":10,"s":[98,102,100]},{"i":{"x":[0.42,0.42,0.42],"y":[1,1,1]},"o":{"x":[0.2,0.2,0.2],"y":[0,0,0]},"t":20,"s":[102,97,100]},{"i":{"x":[0.3,0.3,0.3],"y":[1.413,1.413,1.413]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":32,"s":[100,100,100]},{"i":{"x":[0.7,0.7,0.7],"y":[1,1,1]},"o":{"x":[0.6,0.6,0.6],"y":[0.058,0.058,-0.058]},"t":42,"s":[100,100,100]},{"i":{"x":[0.71,0.71,0.71],"y":[1,1,1]},"o":{"x":[0.3,0.3,0.3],"y":[0,0,0]},"t":52,"s":[98,102,100]},{"t":61,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.142,0],[0,0],[0,4.142],[0,0],[15.188,0],[0,0],[0,-15.188],[0,0]],"o":[[0,0],[4.142,0],[0,0],[0,-15.188],[0,0],[-15.188,0],[0,0],[0,4.142]],"v":[[-150,-65],[150,-65],[157.5,-72.5],[157.5,-92.5],[130,-120],[-130,-120],[-157.5,-92.5],[-157.5,-72.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":[100,100],"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":"Rectangle-Copy","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[256,163.5],"ix":2},"a":{"a":0,"k":[0,-92.5],"ix":1},"s":{"a":0,"k":[100,100],"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":"Card Top","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-4.142,0],[0,0],[0,-4.142],[0,0],[19.33,0],[0,0],[0,19.33],[0,0]],"o":[[0,0],[4.142,0],[0,0],[0,19.33],[0,0],[-19.33,0],[0,0],[0,-4.142]],"v":[[-150,-20],[150,-20],[157.5,-12.5],[157.5,85],[122.5,120],[-122.5,120],[-157.5,85],[-157.5,-12.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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[256,267],"ix":2},"a":{"a":0,"k":[0,11],"ix":1},"s":{"a":0,"k":[100,100],"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":"Card Bottom","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":183,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/utyan_schedule.tgs b/TMessagesProj/src/main/res/raw/utyan_schedule.tgs new file mode 100644 index 000000000..f61166193 --- /dev/null +++ b/TMessagesProj/src/main/res/raw/utyan_schedule.tgs @@ -0,0 +1 @@ +{"tgs":1,"v":"5.5.2","fr":60,"ip":0,"op":180,"w":512,"h":512,"nm":"_024_ONAIR_DUCKS_OUT","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"headph","parent":17,"sr":1,"ks":{"r":{"a":0,"k":1.29},"p":{"a":0,"k":[201.096,-33.64,0]},"a":{"a":0,"k":[275.731,674.805,0]},"s":{"a":0,"k":[147.274,155.28,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":60,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":72,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":78,"s":[{"i":[[-16.458,-13.114],[1.424,-7.323]],"o":[[15.349,12.231],[-3.5,17.994]],"v":[[245.994,675.294],[261.94,730.169]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":84,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":90,"s":[{"i":[[-16.458,-13.114],[1.424,-7.323]],"o":[[15.349,12.231],[-3.5,17.994]],"v":[[245.994,675.294],[261.94,730.169]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":108,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":184,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[241.663,675.568],[260.207,729.074]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[241.663,675.568],[260.207,729.074]],"c":false}]},{"t":240,"s":[{"i":[[-17.939,-11.002],[1.424,-7.323]],"o":[[20.834,12.778],[-3.5,17.994]],"v":[[245.994,675.294],[260.207,729.074]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.655514705882,0.655514705882,0.655514705882,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":"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.333,"y":0},"t":60,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,690.901],[241.031,772.062]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,689.481],[241.031,770.642]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[8.945,-17.81],[-15.088,-1.331]],"o":[[-8.945,17.81],[15.088,1.331]],"v":[[234.444,691.049],[244.479,771.81]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,689.481],[241.031,770.642]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":90,"s":[{"i":[[8.945,-17.81],[-15.088,-1.331]],"o":[[-8.945,17.81],[15.088,1.331]],"v":[[234.444,691.049],[244.479,771.81]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,689.481],[241.031,770.642]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,690.901],[241.031,772.062]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,690.901],[241.031,772.062]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[11.921,-17.342],[-18.212,-2.081]],"o":[[-11.921,17.342],[18.212,2.081]],"v":[[222.898,690.901],[230.183,772.062]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[11.921,-17.342],[-18.212,-2.081]],"o":[[-11.921,17.342],[18.212,2.081]],"v":[[222.898,690.901],[230.183,772.062]],"c":false}]},{"t":240,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[235.03,690.901],[241.031,772.062]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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.333,"y":0},"t":60,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[182.504,593.612],[131.639,576.097],[73.613,594.877]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[27.069,19.218],[18.422,-0.231],[16.412,-11.391]],"o":[[-14.921,-10.593],[-22.922,0.287],[-21.544,15.075]],"v":[[185.648,596.962],[135.381,579.444],[76.308,597.202]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[176.73,597.445],[122.978,579.93],[64.953,598.71]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[27.069,19.218],[18.422,-0.231],[16.412,-11.391]],"o":[[-14.921,-10.593],[-22.922,0.287],[-21.544,15.075]],"v":[[185.648,596.962],[135.381,579.444],[76.308,597.202]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":90,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[176.73,597.445],[122.978,579.93],[64.953,598.71]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[27.069,19.218],[18.422,-0.231],[16.412,-11.391]],"o":[[-14.921,-10.593],[-22.922,0.287],[-21.544,15.075]],"v":[[185.648,596.962],[135.381,579.444],[76.308,597.202]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[182.504,593.612],[131.639,576.097],[73.613,594.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[182.504,593.612],[131.639,576.097],[73.613,594.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":196,"s":[{"i":[[24.223,19.694],[16.485,-0.236],[13.925,-11.891]],"o":[[-13.352,-10.856],[-20.512,0.294],[-18.909,16.146]],"v":[[187.702,595.255],[134.95,576.097],[83.025,594.877]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":226,"s":[{"i":[[24.223,19.694],[16.485,-0.236],[13.925,-11.891]],"o":[[-13.352,-10.856],[-20.512,0.294],[-18.909,16.146]],"v":[[187.702,595.255],[134.95,576.097],[83.025,594.877]],"c":false}]},{"t":240,"s":[{"i":[[27.069,19.694],[18.422,-0.236],[15.561,-11.891]],"o":[[-14.921,-10.856],[-22.922,0.294],[-21.13,16.146]],"v":[[182.504,593.612],[131.639,576.097],[73.613,594.877]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":22},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.333,"y":0},"t":60,"s":[{"i":[[-0.33,41.621],[51.841,-0.665],[10.159,-53.832]],"o":[[0.33,-41.621],[-52.026,0.668],[-0.395,2.091]],"v":[[227.869,672.865],[131.639,576.097],[34.834,663.725]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[1.121,40.519],[51.841,-0.649],[10.159,-52.53]],"o":[[-0.882,-38.827],[-52.026,0.652],[-0.395,2.04]],"v":[[228.018,670.181],[135.381,579.444],[34.834,664.953]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[1.743,41.586],[51.841,-0.665],[10.159,-53.832]],"o":[[-1.743,-41.586],[-52.026,0.668],[-0.395,2.091]],"v":[[226.393,673.392],[122.978,579.93],[34.834,663.725]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[1.121,40.519],[51.841,-0.649],[10.159,-52.53]],"o":[[-0.882,-38.827],[-52.026,0.652],[-0.395,2.04]],"v":[[228.018,670.181],[135.381,579.444],[34.834,664.953]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":90,"s":[{"i":[[1.743,41.586],[51.841,-0.665],[10.159,-53.832]],"o":[[-1.743,-41.586],[-52.026,0.668],[-0.395,2.091]],"v":[[226.393,673.392],[122.978,579.93],[34.834,663.725]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[1.121,40.519],[51.841,-0.649],[10.159,-52.53]],"o":[[-0.882,-38.827],[-52.026,0.652],[-0.395,2.04]],"v":[[228.018,670.181],[135.381,579.444],[34.834,664.953]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[-0.33,41.621],[51.841,-0.665],[10.159,-53.832]],"o":[[0.33,-41.621],[-52.026,0.668],[-0.395,2.091]],"v":[[227.869,672.865],[131.639,576.097],[34.834,663.725]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[-0.33,41.621],[51.841,-0.665],[10.159,-53.832]],"o":[[0.33,-41.621],[-52.026,0.668],[-0.395,2.091]],"v":[[227.869,672.865],[131.639,576.097],[34.834,663.725]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[-0.358,41.621],[46.391,-0.665],[19.855,-45.748]],"o":[[0.358,-41.621],[-46.556,0.668],[-0.844,1.945]],"v":[[222.012,669.706],[134.95,576.097],[36.805,660.987]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[-0.358,41.621],[46.391,-0.665],[19.855,-45.748]],"o":[[0.358,-41.621],[-46.556,0.668],[-0.844,1.945]],"v":[[222.012,669.706],[134.95,576.097],[36.805,660.987]],"c":false}]},{"t":240,"s":[{"i":[[-0.33,41.621],[51.841,-0.665],[10.159,-53.832]],"o":[[0.33,-41.621],[-52.026,0.668],[-0.395,2.091]],"v":[[227.869,672.865],[131.639,576.097],[34.834,663.725]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"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.333,"y":0},"t":60,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,725.603],[234.435,773.996],[270.808,723.194],[233.054,661.766]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,724.183],[234.435,772.577],[270.808,721.774],[233.054,660.347]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[-1.903,-38.162],[-15.522,0.552],[1.104,32.284],[21.529,-0.032]],"o":[[1.952,39.144],[16.804,-0.597],[-1.518,-44.375],[-21.529,0.032]],"v":[[205.096,727.257],[237.988,774.071],[271.785,721.521],[231.019,662.049]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":84,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,724.183],[234.435,772.577],[270.808,721.774],[233.054,660.347]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":90,"s":[{"i":[[-1.903,-38.162],[-15.522,0.552],[1.104,32.284],[21.529,-0.032]],"o":[[1.952,39.144],[16.804,-0.597],[-1.518,-44.375],[-21.529,0.032]],"v":[[205.096,727.257],[237.988,774.071],[271.785,721.521],[231.019,662.049]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":96,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,724.183],[234.435,772.577],[270.808,721.774],[233.054,660.347]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,725.603],[234.435,773.996],[270.808,723.194],[233.054,661.766]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,725.603],[234.435,773.996],[270.808,723.194],[233.054,661.766]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":196,"s":[{"i":[[0,-38.209],[-18.852,-0.222],[-0.613,32.299],[26.104,1.041]],"o":[[0,39.193],[20.409,0.24],[0.842,-44.396],[-26.104,-1.041]],"v":[[189.459,725.603],[226.507,773.996],[270.659,723.194],[224.83,661.766]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":226,"s":[{"i":[[0,-38.209],[-18.852,-0.222],[-0.613,32.299],[26.104,1.041]],"o":[[0,39.193],[20.409,0.24],[0.842,-44.396],[-26.104,-1.041]],"v":[[189.459,725.603],[226.507,773.996],[270.659,723.194],[224.83,661.766]],"c":true}]},{"t":240,"s":[{"i":[[0,-38.209],[-15.53,-0.222],[-0.505,32.299],[21.504,1.041]],"o":[[0,39.193],[16.813,0.24],[0.694,-44.396],[-21.504,-1.041]],"v":[[203.915,725.603],[234.435,773.996],[270.808,723.194],[233.054,661.766]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"headph","parent":28,"sr":1,"ks":{"r":{"a":0,"k":1.29},"p":{"a":0,"k":[-164.015,-41.862,0]},"a":{"a":0,"k":[23.563,674.805,0]},"s":{"a":0,"k":[155.28,155.28,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[7.487,-18.521],[-15.151,-2.081]],"o":[[-8.909,22.038],[15.151,2.081]],"v":[[202.014,693.142],[211.908,774.232]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[9.171,-17.342],[-14.011,-2.081]],"o":[[-9.171,17.342],[14.011,2.081]],"v":[[219.356,693.091],[224.96,774.252]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[9.171,-17.342],[-14.011,-2.081]],"o":[[-9.171,17.342],[14.011,2.081]],"v":[[219.356,693.091],[224.96,774.252]],"c":false}]},{"t":166,"s":[{"i":[[7.487,-18.521],[-15.151,-2.081]],"o":[[-8.909,22.038],[15.151,2.081]],"v":[[202.014,693.142],[211.908,774.232]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[27.557,18.3],[18.323,-0.825],[12.504,-11.675]],"o":[[-15.19,-10.088],[-22.799,1.026],[-19.198,17.926]],"v":[[161.593,594.421],[112.89,579.015],[58.209,599.259]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[27.557,18.3],[18.323,-0.825],[15.108,-12.079]],"o":[[-15.19,-10.088],[-22.799,1.026],[-20.516,16.402]],"v":[[170.218,594.425],[119.051,579.015],[61.906,599.172]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[27.557,18.3],[18.323,-0.825],[15.108,-12.079]],"o":[[-15.19,-10.088],[-22.799,1.026],[-20.516,16.402]],"v":[[170.218,594.425],[119.051,579.015],[61.906,599.172]],"c":false}]},{"t":166,"s":[{"i":[[27.557,18.3],[18.323,-0.825],[12.504,-11.675]],"o":[[-15.19,-10.088],[-22.799,1.026],[-19.198,17.926]],"v":[[161.593,594.421],[112.89,579.015],[58.209,599.259]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":22},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[1.067,40.533],[51.563,-2.321],[12.134,-58.722]],"o":[[-1.067,-40.533],[-53.758,2.42],[-11.48,55.557]],"v":[[206.106,670.243],[112.89,579.015],[25.722,672.318]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0.987,40.533],[51.563,-2.321],[6.707,-56.332]],"o":[[-0.987,-40.533],[-53.758,2.42],[-6.707,56.332]],"v":[[217.861,670.122],[119.051,579.015],[24.626,673.687]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[0.987,40.533],[51.563,-2.321],[6.707,-56.332]],"o":[[-0.987,-40.533],[-53.758,2.42],[-6.707,56.332]],"v":[[217.861,670.122],[119.051,579.015],[24.626,673.687]],"c":false}]},{"t":166,"s":[{"i":[[1.067,40.533],[51.563,-2.321],[12.134,-58.722]],"o":[[-1.067,-40.533],[-53.758,2.42],[-11.48,55.557]],"v":[[206.106,670.243],[112.89,579.015],[25.722,672.318]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,-38.209],[-19.905,-0.039],[-0.51,32.299],[21.716,1.041]],"o":[[0,39.193],[26.317,0.052],[0.701,-44.396],[-21.716,-1.041]],"v":[[170.927,723.94],[202.96,776.167],[250.727,725.385],[203.852,663.937]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[{"i":[[0,-38.209],[-18.407,-0.039],[-0.471,32.299],[20.082,1.041]],"o":[[0,39.193],[24.337,0.052],[0.648,-44.396],[-20.082,-1.041]],"v":[[187.063,723.96],[216.685,776.187],[257.351,725.348],[217.51,663.957]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[0,-38.209],[-18.407,-0.039],[-0.471,32.299],[20.082,1.041]],"o":[[0,39.193],[24.337,0.052],[0.648,-44.396],[-20.082,-1.041]],"v":[[187.063,723.96],[216.685,776.187],[257.351,725.348],[217.51,663.957]],"c":true}]},{"t":166,"s":[{"i":[[0,-38.209],[-19.905,-0.039],[-0.51,32.299],[21.716,1.041]],"o":[[0,39.193],[26.317,0.052],[0.701,-44.396],[-21.716,-1.041]],"v":[[170.927,723.94],[202.96,776.167],[250.727,725.385],[203.852,663.937]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"mic","sr":1,"ks":{"r":{"a":0,"k":48.6},"p":{"a":0,"k":[359,379.5,0]},"a":{"a":0,"k":[-44.25,106,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":[[-55.5,97.25],[-42.871,116.466]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-47.5,93.75],[-36.25,110.75]],"c":false}},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-38.857,91.048],[-28.107,107.298]],"c":false}},"nm":"Path 4","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,105],[-49.679,123.355]],"c":false}},"nm":"Path 2","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"mic","sr":1,"ks":{"p":{"a":0,"k":[211.75,362,0]},"a":{"a":0,"k":[-44.25,106,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":[[-55.5,97.25],[-40.25,121]],"c":false}},"nm":"Path 1","hd":false},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-47.75,93],[-36.5,110.5]],"c":false}},"nm":"Path 3","hd":false},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-38.25,92.25],[-26.5,110.25]],"c":false}},"nm":"Path 4","hd":false},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-61,105],[-47.5,126.5]],"c":false}},"nm":"Path 2","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"microphns","sr":1,"ks":{"p":{"a":0,"k":[257.793,414.307,0]},"a":{"a":0,"k":[-18.847,820.623,0]},"s":{"a":0,"k":[-91.304,91.304,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-14.401,-13.237],[8.191,-7.178]],"o":[[3.263,3],[-15.414,13.509]],"v":[[-106.123,806.882],[-109.134,828.012]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.716115196078,0.716115196078,0.716115196078,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":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.935,18.29],[-14.645,-14.339]],"o":[[6.935,-18.29],[14.645,14.339]],"v":[[-146.921,809.073],[-97.908,800.358]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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":0,"k":{"i":[[13.197,-4.616],[0,0],[4.616,13.197],[0,0],[-13.197,4.616],[0,0],[-4.616,-13.197],[0,0]],"o":[[0,0],[-13.197,4.616],[0,0],[-4.616,-13.197],[0,0],[13.197,-4.616],[0,0],[4.616,13.197]],"v":[[-109.772,840.785],[-109.772,840.785],[-142.025,825.248],[-151.689,797.62],[-136.152,765.366],[-136.152,765.366],[-103.899,780.903],[-94.234,808.532]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[[-152.759,872.56],[-121.38,860.957],[-90.263,874.406]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"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":[[-121.38,877.306],[-121.38,815.865]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"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":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.267,-3.065],[-2.973,3.519]],"o":[[12.34,2.851],[9.209,-10.898]],"v":[[4.455,810.317],[26.613,804.994]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.717647058824,0.717647058824,0.717647058824,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":"Group 3","bm":0,"hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-12.918,4.306],[1.292,-14.209]],"o":[[12.918,-4.306],[-1.292,14.209]],"v":[[11.848,778.555],[38.113,801.161]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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":0,"k":{"i":[[11.918,7.309],[0,0],[-7.309,11.918],[0,0],[-11.918,-7.309],[0,0],[7.309,-11.918],[0,0]],"o":[[0,0],[-11.918,-7.309],[0,0],[7.309,-11.918],[0,0],[11.918,7.309],[0,0],[-7.309,11.918]],"v":[[-0.864,817.417],[-0.864,817.417],[-9.209,782.602],[6.094,757.651],[40.908,749.306],[40.908,749.306],[49.253,784.12],[33.951,809.072]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[[-9.775,852.845],[21.604,841.242],[52.72,854.691]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"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":[[21.604,857.592],[21.604,796.15]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,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":"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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"eyebr","parent":13,"sr":1,"ks":{"p":{"a":0,"k":[152.349,138.882,0]},"a":{"a":0,"k":[237.401,247.552,0]},"s":{"a":0,"k":[-101.01,90.909,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5.572,-2.559],[-7.918,-5.512]],"o":[[13.997,-3.85],[-3.396,-1.872]],"v":[[-25.093,-9.728],[16.114,-1.582]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[237.401,247.552]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":300,"st":114,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"eyebr","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[307.234,143.308,0]},"a":{"a":0,"k":[237.401,247.552,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[5.572,-2.559],[-7.918,-5.512]],"o":[[13.997,-3.85],[-3.396,-1.872]],"v":[[-25.093,-9.728],[16.114,-1.582]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[237.401,247.552]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":300,"st":114,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"mouth 2","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[237.401,247.552,0]},"a":{"a":0,"k":[237.401,247.552,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.7,"y":0},"t":90,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":126,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":132,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":138,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":144,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":156,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[-12.099,15.737],[14.632,4.003],[-19.718,-0.468]],"o":[[-28.239,6.512],[2.507,10.378],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-30.478,18.21]],"c":true}]},{"t":168,"s":[{"i":[[-14.472,3.573],[12.047,8.112],[-19.718,-0.468]],"o":[[-42.018,12.204],[8.82,2.614],[30.427,0.723]],"v":[[48.824,-3.059],[-75.272,-1.363],[-28.734,5.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196079016,0.035294119269,0.035294119269,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[237.401,247.552]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"fl","c":{"a":0,"k":[0.490196078431,0.035294117647,0.035294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"beak_bl 2","parent":8,"sr":1,"ks":{"r":{"a":0,"k":-26.335},"p":{"a":0,"k":[211.876,216.495,0]},"a":{"a":0,"k":[35.051,-0.937,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.763,15.298]],"o":[[8.041,-8.176],[0,0]],"v":[[-23.841,7.413],[-14.644,-29.583]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.705882352941,0.517647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[24.706,22.107]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[95]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":124,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"beak 2","parent":17,"sr":1,"ks":{"r":{"a":0,"k":4.514},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[-49.277,46.172,0],"to":[0.064,-2.834,0],"ti":[0.032,-1.417,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":72,"s":[-48.894,29.17,0],"to":[-0.032,1.417,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[-49.469,54.673,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[-48.894,29.17,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":90,"s":[-49.469,54.673,0],"to":[0,0,0],"ti":[-0.032,1.417,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0},"t":96,"s":[-48.894,29.17,0],"to":[0.032,-1.417,0],"ti":[0.064,-2.834,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":110,"s":[-49.277,46.172,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[-49.277,46.172,0],"to":[-2.834,-0.064,0],"ti":[2.834,0.064,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":196,"s":[-66.28,45.789,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[-66.28,45.789,0],"to":[2.834,0.064,0],"ti":[-2.834,-0.064,0]},{"t":240,"s":[-49.277,46.172,0]}]},"a":{"a":0,"k":[227.021,227.06,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.667,"y":1},"o":{"x":0.7,"y":0},"t":90,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":96,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":108,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":114,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":120,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":126,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":132,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":138,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":144,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":156,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[40.202,14.654],[-14.099,-15.31],[-5.006,-5.204],[-30.564,20.423],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-14.245,-5.193],[-9.581,9.359],[24.996,25.987],[13.352,-8.922],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-58.357,-1.84],[-64.855,18.972],[-66.646,42.582],[53.268,43.268],[76.671,15.277]],"c":true}]},{"t":168,"s":[{"i":[[13.739,0.037],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-39.477,-0.108],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[56.422,-0.787],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[59.793,37.622],[76.671,15.277]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.811764717102,0.207843139768,0.007843137719,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.364705890417,0.121568627656,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[227.021,227.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 2","bm":0,"hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"wing_bl 5","parent":12,"sr":1,"ks":{"p":{"a":0,"k":[-9.694,-7.958,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[-16.004,6.98],[-13.201,3.616]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-26.426,26.414],[9.813,-1.551]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[-16.004,6.98],[-19.411,-9.017]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-24.257,30.071],[24.902,24.893]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":122,"s":[{"i":[[-16.004,6.98],[-15.525,-13.299]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-24.257,30.071],[22.532,34.9]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":128,"s":[{"i":[[-16.004,6.98],[-19.411,-9.017]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-24.257,30.071],[24.902,24.893]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":134,"s":[{"i":[[-16.004,6.98],[-15.525,-13.299]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-24.257,30.071],[22.532,34.9]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[-16.004,6.98],[-19.411,-9.017]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-24.257,30.071],[24.902,24.893]],"c":false}]},{"t":162,"s":[{"i":[[-16.004,6.98],[-13.201,3.616]],"o":[[7.815,-17.005],[7.576,-2.146]],"v":[[-26.426,26.414],[9.813,-1.551]],"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.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"wing_l 2","parent":33,"sr":1,"ks":{"r":{"a":0,"k":173.801},"p":{"a":0,"k":[125.229,23.099,0]},"a":{"a":0,"k":[-54.963,0,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":102,"s":[{"i":[[0,0],[-1.39,-11.722],[7.113,-39.037]],"o":[[49.006,-40.406],[1.39,11.722],[0,0]],"v":[[-72.528,-17.925],[49.847,-12.14],[-27.764,40.892]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0,0],[5.449,-10.472],[7.113,-39.037]],"o":[[49.006,-40.406],[-11.506,22.114],[0,0]],"v":[[-52.056,-17.412],[60.289,33.472],[-27.764,40.892]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":122,"s":[{"i":[[0,0],[8.685,-7.994],[7.113,-39.037]],"o":[[79.338,-40.105],[-14.392,13.247],[0,0]],"v":[[-52.056,-17.412],[48.667,61.718],[-27.764,40.892]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":128,"s":[{"i":[[0,0],[5.449,-10.472],[7.113,-39.037]],"o":[[49.006,-40.406],[-11.506,22.114],[0,0]],"v":[[-52.056,-17.412],[60.289,33.472],[-27.764,40.892]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":134,"s":[{"i":[[0,0],[8.685,-7.994],[7.113,-39.037]],"o":[[79.338,-40.105],[-14.392,13.247],[0,0]],"v":[[-52.056,-17.412],[48.667,61.718],[-27.764,40.892]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[5.449,-10.472],[7.113,-39.037]],"o":[[49.006,-40.406],[-11.506,22.114],[0,0]],"v":[[-52.056,-17.412],[60.289,33.472],[-27.764,40.892]],"c":false}]},{"t":162,"s":[{"i":[[0,0],[-1.39,-11.722],[7.113,-39.037]],"o":[[49.006,-40.406],[1.39,11.722],[0,0]],"v":[[-72.528,-17.925],[49.847,-12.14],[-27.764,40.892]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":110,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"eye 6","parent":10,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[151.511,195.928,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":196,"s":[156.227,195.662,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[156.227,195.662,0],"to":[0,0,0],"ti":[0,0,0]},{"t":240,"s":[151.511,195.928,0]}]},"a":{"a":0,"k":[147.88,185.335,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":184,"s":[99,110,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":196,"s":[89,110,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":226,"s":[89,110,100]},{"t":240,"s":[99,110,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[-0.386,-1.732],[2.639,-0.292],[0.619,0.101],[0.287,1.288],[-2.639,0.292]],"o":[[0.386,1.732],[-0.675,0.075],[-1.801,-0.295],[-0.386,-1.732],[2.639,-0.292]],"v":[[0.988,14.48],[-3.092,18.145],[-5.05,18.098],[-8.568,15.539],[-4.488,11.874]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":98,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":104,"s":[{"i":[[-0.386,-1.732],[2.639,-0.292],[0.619,0.101],[0.287,1.288],[-2.639,0.292]],"o":[[0.386,1.732],[-0.675,0.075],[-1.801,-0.295],[-0.386,-1.732],[2.639,-0.292]],"v":[[0.988,14.48],[-3.092,18.145],[-5.05,18.098],[-8.568,15.539],[-4.488,11.874]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.15,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[-0.386,-1.732],[2.639,-0.292],[0.619,0.101],[0.287,1.288],[-2.639,0.292]],"o":[[0.386,1.732],[-0.675,0.075],[-1.801,-0.295],[-0.386,-1.732],[2.639,-0.292]],"v":[[0.988,14.48],[-3.092,18.145],[-5.05,18.098],[-8.568,15.539],[-4.488,11.874]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.85,"y":0},"t":122,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":168,"s":[{"i":[[-0.386,-1.732],[2.639,-0.292],[0.619,0.101],[0.287,1.288],[-2.639,0.292]],"o":[[0.386,1.732],[-0.675,0.075],[-1.801,-0.295],[-0.386,-1.732],[2.639,-0.292]],"v":[[0.988,14.48],[-3.092,18.145],[-5.05,18.098],[-8.568,15.539],[-4.488,11.874]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":174,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"t":222,"s":[{"i":[[-0.386,-1.732],[2.639,-0.292],[0.619,0.101],[0.287,1.288],[-2.639,0.292]],"o":[[0.386,1.732],[-0.675,0.075],[-1.801,-0.295],[-0.386,-1.732],[2.639,-0.292]],"v":[[0.988,14.48],[-3.092,18.145],[-5.05,18.098],[-8.568,15.539],[-4.488,11.874]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":78,"s":[0,0,0,1]},{"i":{"x":[0.789],"y":[1]},"o":{"x":[1],"y":[0]},"t":84,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":98,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":104,"s":[0,0,0,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":110,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":116,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":122,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":162,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":168,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":174,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":216,"s":[1,1,1,1]},{"t":222,"s":[0,0,0,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.824,171.565]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[4.319,-5.941],[17.275,0.496],[5.654,5.442],[-15.544,-0.526]],"o":[[-4.628,6.367],[-15.103,-0.434],[-5.809,-5.592],[17.454,0.591]],"v":[[23.017,11.057],[-0.826,6.163],[-25.154,11.243],[0.553,-4.619]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":98,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":104,"s":[{"i":[[4.319,-5.941],[17.275,0.496],[5.654,5.442],[-15.544,-0.526]],"o":[[-4.628,6.367],[-15.103,-0.434],[-5.809,-5.592],[17.454,0.591]],"v":[[23.017,11.057],[-0.826,6.163],[-25.154,11.243],[0.553,-4.619]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.15,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[4.319,-5.941],[17.275,0.496],[5.654,5.442],[-15.544,-0.526]],"o":[[-4.628,6.367],[-15.103,-0.434],[-5.809,-5.592],[17.454,0.591]],"v":[[23.017,11.057],[-0.826,6.163],[-25.154,11.243],[0.553,-4.619]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.85,"y":0},"t":122,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":168,"s":[{"i":[[4.319,-5.941],[17.275,0.496],[5.654,5.442],[-15.544,-0.526]],"o":[[-4.628,6.367],[-15.103,-0.434],[-5.809,-5.592],[17.454,0.591]],"v":[[23.017,11.057],[-0.826,6.163],[-25.154,11.243],[0.553,-4.619]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":174,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"t":222,"s":[{"i":[[4.319,-5.941],[17.275,0.496],[5.654,5.442],[-15.544,-0.526]],"o":[[-4.628,6.367],[-15.103,-0.434],[-5.809,-5.592],[17.454,0.591]],"v":[[23.017,11.057],[-0.826,6.163],[-25.154,11.243],[0.553,-4.619]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[6]},{"i":{"x":[0.842],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":122,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":162,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"t":222,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[147.88,185.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[147.88,185.335]},"a":{"a":0,"k":[147.88,185.335]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"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":300,"st":114,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"eye 5","parent":10,"sr":1,"ks":{"p":{"a":0,"k":[314.199,202.513,0]},"a":{"a":0,"k":[293.018,185.074,0]},"s":{"a":0,"k":[139,110,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[0.393,-2.046],[1.834,0.352],[-0.393,2.046],[-1.834,-0.352]],"o":[[-0.393,2.046],[-1.834,-0.352],[0.393,-2.046],[1.834,0.352]],"v":[[7.462,7.436],[3.43,10.502],[0.819,6.161],[4.851,3.094]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":98,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":104,"s":[{"i":[[0.393,-2.046],[1.834,0.352],[-0.393,2.046],[-1.834,-0.352]],"o":[[-0.393,2.046],[-1.834,-0.352],[0.393,-2.046],[1.834,0.352]],"v":[[7.462,7.436],[3.43,10.502],[0.819,6.161],[4.851,3.094]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.15,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0.393,-2.046],[1.834,0.352],[-0.393,2.046],[-1.834,-0.352]],"o":[[-0.393,2.046],[-1.834,-0.352],[0.393,-2.046],[1.834,0.352]],"v":[[7.462,7.436],[3.43,10.502],[0.819,6.161],[4.851,3.094]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.85,"y":0},"t":122,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":168,"s":[{"i":[[0.393,-2.046],[1.834,0.352],[-0.393,2.046],[-1.834,-0.352]],"o":[[-0.393,2.046],[-1.834,-0.352],[0.393,-2.046],[1.834,0.352]],"v":[[7.462,7.436],[3.43,10.502],[0.819,6.161],[4.851,3.094]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":174,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"t":222,"s":[{"i":[[0.393,-2.046],[1.834,0.352],[-0.393,2.046],[-1.834,-0.352]],"o":[[-0.393,2.046],[-1.834,-0.352],[0.393,-2.046],[1.834,0.352]],"v":[[7.462,7.436],[3.43,10.502],[0.819,6.161],[4.851,3.094]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":78,"s":[0,0,0,1]},{"i":{"x":[0.789],"y":[1]},"o":{"x":[1],"y":[0]},"t":84,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":98,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":104,"s":[0,0,0,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":110,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":116,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":122,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":162,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":168,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":174,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":216,"s":[1,1,1,1]},{"t":222,"s":[0,0,0,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[289.869,171.446]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[-4.292,-5.009],[-17.954,0.153],[-4.128,5.541],[12.647,-2.443]],"o":[[4.616,5.387],[17.593,-0.15],[3.802,-5.104],[-12.647,2.443]],"v":[[-18.121,7.187],[2.158,-0.98],[23.206,6.561],[0.156,-11.425]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":98,"s":[{"i":[[-4.428,-16.68],[-11.76,4.217],[4.428,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":104,"s":[{"i":[[-4.292,-5.009],[-17.954,0.153],[-4.128,5.541],[12.647,-2.443]],"o":[[4.616,5.387],[17.593,-0.15],[3.802,-5.104],[-12.647,2.443]],"v":[[-18.121,7.187],[2.158,-0.98],[23.206,6.561],[0.156,-11.425]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":110,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.15,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[-4.292,-5.009],[-17.954,0.153],[-4.128,5.541],[12.647,-2.443]],"o":[[4.616,5.387],[17.593,-0.15],[3.802,-5.104],[-12.647,2.443]],"v":[[-18.121,7.187],[2.158,-0.98],[23.206,6.561],[0.156,-11.425]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.85,"y":0},"t":122,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":162,"s":[{"i":[[-4.428,-16.68],[-11.76,4.217],[4.428,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":168,"s":[{"i":[[-4.292,-5.009],[-17.954,0.153],[-4.128,5.541],[12.647,-2.443]],"o":[[4.616,5.387],[17.593,-0.15],[3.802,-5.104],[-12.647,2.443]],"v":[[-18.121,7.187],[2.158,-0.98],[23.206,6.561],[0.156,-11.425]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":174,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[-4.428,-16.68],[-11.76,4.217],[4.428,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"t":222,"s":[{"i":[[-4.292,-5.009],[-17.954,0.153],[-4.128,5.541],[12.647,-2.443]],"o":[[4.616,5.387],[17.593,-0.15],[3.802,-5.104],[-12.647,2.443]],"v":[[-18.121,7.187],[2.158,-0.98],[23.206,6.561],[0.156,-11.425]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[6]},{"i":{"x":[0.842],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":98,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":104,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":110,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":116,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":122,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":162,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":174,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"t":222,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[293.018,185.074]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[293.018,185.074]},"a":{"a":0,"k":[293.018,185.074]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[{"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":[149.824,171.565]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[147.88,185.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[147.88,185.335]},"a":{"a":0,"k":[147.88,185.335]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"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":300,"st":114,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"head_bl6","parent":17,"sr":1,"ks":{"r":{"a":0,"k":186.352},"p":{"a":0,"k":[-118.936,31.138,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.461,-9.431],[0,-24.681],[19.005,-18.433]],"o":[[14.542,21.228],[0,28.584],[0,0]],"v":[[-0.106,-57.811],[22.887,12.639],[-7.452,83.863]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.988235294819,0.933333337307,0.129411771894,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"head_bl5","parent":17,"sr":1,"ks":{"r":{"a":0,"k":96.11},"p":{"a":0,"k":[5.126,30.62,0]},"a":{"a":0,"k":[71.641,94.652,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-16.407,26.51]],"o":[[-2.107,-29.368],[7.333,-11.849]],"v":[[-63.087,111.589],[-41.121,24.663]],"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.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"head 2","parent":33,"sr":1,"ks":{"r":{"a":0,"k":-1.29},"p":{"a":0,"k":[9.583,-21.198,0]},"a":{"a":0,"k":[0,131.046,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,39.247],[93.266,0],[0,-83.375],[-28.671,-23.75]],"o":[[29.034,-23.938],[0,-83.375],[-93.265,0],[0,39.353],[0,0]],"v":[[122.976,131.046],[168.871,34.404],[0,-131.046],[-168.871,34.404],[-123.254,130.814]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":18,"ty":4,"nm":"wing_r 3","parent":33,"sr":1,"ks":{"r":{"a":0,"k":-124.523},"p":{"a":0,"k":[-71.491,-22.519,0]},"a":{"a":0,"k":[-58.809,-56.332,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":118,"s":[{"i":[[0,0],[-7.452,18.169],[50.218,-42.05]],"o":[[22.481,-18.061],[7.452,-18.169],[0,0]],"v":[[-43.292,-69.06],[8.722,-63.947],[-85.872,-116.912]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":126,"s":[{"i":[[0,0],[-18.048,7.742],[57.357,-31.626]],"o":[[25.53,-13.409],[32.798,-14.069],[0,0]],"v":[[-53.832,-59.238],[-10.216,-16.721],[-76.754,-113.808]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":140,"s":[{"i":[[0,0],[-18.048,7.742],[57.357,-31.626]],"o":[[25.53,-13.409],[32.798,-14.069],[0,0]],"v":[[-53.832,-59.238],[-10.216,-16.721],[-76.754,-113.808]],"c":false}]},{"t":152,"s":[{"i":[[0,0],[-7.452,18.169],[50.218,-42.05]],"o":[[22.481,-18.061],[7.452,-18.169],[0,0]],"v":[[-43.292,-69.06],[8.722,-63.947],[-85.872,-116.912]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":19,"ty":4,"nm":"mouth","parent":21,"sr":1,"ks":{"p":{"a":0,"k":[237.401,247.552,0]},"a":{"a":0,"k":[237.401,247.552,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":150,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":156,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":162,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":168,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":174,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":178,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":182,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":204,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":210,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":216,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":222,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":228,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.843,"y":0},"t":234,"s":[{"i":[[-13.442,14.336],[13.602,8.112],[-22.261,-0.574]],"o":[[-47.442,12.204],[7.097,11.51],[41.649,1.073]],"v":[[64.843,-3.059],[-75.272,-1.363],[-20.533,20.57]],"c":true}]},{"t":240,"s":[{"i":[[-16.341,3.573],[13.602,8.112],[-22.264,-0.468]],"o":[[-47.442,12.204],[9.959,2.614],[34.355,0.723]],"v":[[64.843,-3.059],[-75.272,-1.363],[-22.727,5.754]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196079016,0.035294119269,0.035294119269,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.490196079016,0.035294119269,0.035294119269,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":2},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 2","hd":false},{"ty":"tr","p":{"a":0,"k":[237.401,247.552]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"fl","c":{"a":0,"k":[0.490196078431,0.035294117647,0.035294117647,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":20,"ty":4,"nm":"beak_bl","parent":19,"sr":1,"ks":{"r":{"a":0,"k":-26.335},"p":{"a":0,"k":[211.876,216.495,0]},"a":{"a":0,"k":[35.051,-0.937,0]},"s":{"a":0,"k":[-100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.529,12.852]],"o":[[-9.767,3.378],[0,0]],"v":[[32.888,-13.714],[-7.072,-32.301]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[1,0.705882352941,0.517647058824,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[24.706,22.107]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[0]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[95]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":124,"bm":0},{"ddd":0,"ind":21,"ty":4,"nm":"beak","parent":28,"sr":1,"ks":{"r":{"a":0,"k":3.194},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[-96.328,77.016,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":80,"s":[-70.824,77.59,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[-70.824,77.59,0],"to":[0,0,0],"ti":[0,0,0]},{"t":166,"s":[-96.328,77.016,0]}]},"a":{"a":0,"k":[227.021,227.06,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":150,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":156,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":162,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":168,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":174,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":178,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":182,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":204,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":210,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":216,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":222,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":228,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0},"t":234,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-17.76,-11.542],[-5.531,-4.643],[-38.669,25.229],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[26.183,21.978],[9.557,-6.235],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-63.617,23.822],[-64.123,42.884],[69.44,46.284],[95.355,14.279]],"c":true}]},{"t":240,"s":[{"i":[[13.721,-0.7],[17.251,-3.073],[45.152,-1.424],[-10.282,-11.503],[-6.809,-2.405],[-33.199,9.861],[0.418,9.033]],"o":[[-67.927,3.464],[-19.855,3.537],[-15.154,0.478],[-9.581,9.359],[34.228,12.09],[10.939,-3.249],[-0.25,-8.502]],"v":[[75.107,-1.785],[0.49,-45.601],[-56.562,-0.787],[-69.736,18.921],[-64.732,37.374],[78.478,36.624],[95.355,14.279]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.811764717102,0.207843139768,0.007843137719,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.364705890417,0.121568627656,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[227.021,227.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 2","bm":0,"hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":22,"ty":4,"nm":"wing_bl","parent":23,"sr":1,"ks":{"p":{"a":0,"k":[-9.694,-7.958,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[33.67,16.101]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":122,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[30.584,21.399]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[33.67,16.101]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":136,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[30.584,21.399]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":144,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[33.67,16.101]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[30.584,21.399]],"c":false}]},{"t":158,"s":[{"i":[[-16.004,6.98],[-19.265,-10.554]],"o":[[11.988,-2.994],[7.576,-2.146]],"v":[[-14.836,14.17],[33.67,16.101]],"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.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":23,"ty":4,"nm":"wing_l","parent":34,"sr":1,"ks":{"r":{"a":0,"k":116.085},"p":{"a":0,"k":[126.08,-9.288,0]},"a":{"a":0,"k":[-54.963,0,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":116,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[52.17,28.381],[-34.357,26.63]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":122,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[41.788,41.984],[-34.357,26.63]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":130,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[52.17,28.381],[-34.357,26.63]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":136,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[41.788,41.984],[-34.357,26.63]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":144,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[52.17,28.381],[-34.357,26.63]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":150,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[41.788,41.984],[-34.357,26.63]],"c":false}]},{"t":158,"s":[{"i":[[0,0],[10.218,-15.477],[56.912,-25.47]],"o":[[57.384,-8.737],[-6.504,9.851],[0,0]],"v":[[-24.919,-50.897],[52.17,28.381],[-34.357,26.63]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":110,"bm":0},{"ddd":0,"ind":24,"ty":4,"nm":"eye 4","parent":21,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[178.495,170.503,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":80,"s":[174.305,170.642,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[174.305,170.642,0],"to":[0,0,0],"ti":[0,0,0]},{"t":166,"s":[178.495,170.503,0]}]},"a":{"a":0,"k":[147.88,185.335,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":60,"s":[75,90,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":80,"s":[81,90,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":146,"s":[81,90,100]},{"t":166,"s":[75,90,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[-0.452,-1.863],[3.093,-0.314],[0.726,0.109],[0.336,1.386],[-3.093,0.314]],"o":[[0.452,1.863],[-0.792,0.08],[-2.111,-0.317],[-0.452,-1.863],[3.093,-0.314]],"v":[[2.407,14.924],[-2.375,18.866],[-4.67,18.815],[-8.794,16.062],[-4.012,12.12]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":204,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":210,"s":[{"i":[[-0.452,-1.863],[3.093,-0.314],[0.726,0.109],[0.336,1.386],[-3.093,0.314]],"o":[[0.452,1.863],[-0.792,0.08],[-2.111,-0.317],[-0.452,-1.863],[3.093,-0.314]],"v":[[2.407,14.924],[-2.375,18.866],[-4.67,18.815],[-8.794,16.062],[-4.012,12.12]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[-0.731,-4.657],[5.005,-0.786],[1.175,0.273],[0.544,3.465],[-5.005,0.786]],"o":[[0.731,4.657],[-1.281,0.201],[-3.415,-0.792],[-0.731,-4.657],[5.005,-0.786]],"v":[[8.683,1.293],[0.945,11.148],[-2.769,11.021],[-9.442,4.139],[-1.704,-5.716]],"c":true}]},{"t":222,"s":[{"i":[[-0.452,-1.863],[3.093,-0.314],[0.726,0.109],[0.336,1.386],[-3.093,0.314]],"o":[[0.452,1.863],[-0.792,0.08],[-2.111,-0.317],[-0.452,-1.863],[3.093,-0.314]],"v":[[2.407,14.924],[-2.375,18.866],[-4.67,18.815],[-8.794,16.062],[-4.012,12.12]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":78,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":84,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":204,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":210,"s":[0,0,0,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":216,"s":[1,1,1,1]},{"t":222,"s":[0,0,0,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[149.824,171.565]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[5.062,-6.391],[20.249,0.534],[6.627,5.855],[-18.219,-0.566]],"o":[[-5.425,6.85],[-17.702,-0.466],[-6.809,-6.015],[20.458,0.636]],"v":[[27.893,12.284],[-0.054,7.019],[-28.57,12.484],[1.562,-4.579]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":204,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":210,"s":[{"i":[[5.062,-6.391],[20.249,0.534],[6.627,5.855],[-18.219,-0.566]],"o":[[-5.425,6.85],[-17.702,-0.466],[-6.809,-6.015],[20.458,0.636]],"v":[[27.893,12.284],[-0.054,7.019],[-28.57,12.484],[1.562,-4.579]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[5.531,-16.68],[14.69,4.217],[-5.531,16.68],[-14.69,-4.217]],"o":[[-5.531,16.68],[-14.69,-4.217],[5.531,-16.68],[14.69,4.217]],"v":[[26.599,7.636],[-10.015,30.202],[-26.599,-7.636],[10.015,-30.202]],"c":true}]},{"t":222,"s":[{"i":[[5.062,-6.391],[20.249,0.534],[6.627,5.855],[-18.219,-0.566]],"o":[[-5.425,6.85],[-17.702,-0.466],[-6.809,-6.015],[20.458,0.636]],"v":[[27.893,12.284],[-0.054,7.019],[-28.57,12.484],[1.562,-4.579]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":210,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"t":222,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[147.88,185.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[147.88,185.335]},"a":{"a":0,"k":[147.88,185.335]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"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":300,"st":114,"bm":0},{"ddd":0,"ind":25,"ty":4,"nm":"eye 3","parent":21,"sr":1,"ks":{"p":{"a":0,"k":[294.788,168.472,0]},"a":{"a":0,"k":[293.018,185.074,0]},"s":{"a":0,"k":[117,90,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[0.459,-2.392],[2.145,0.412],[-0.459,2.392],[-2.145,-0.412]],"o":[[-0.459,2.392],[-2.145,-0.412],[0.459,-2.392],[2.145,0.412]],"v":[[7.822,11.425],[3.108,15.011],[0.056,9.935],[4.77,6.349]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":204,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":210,"s":[{"i":[[0.459,-2.392],[2.145,0.412],[-0.459,2.392],[-2.145,-0.412]],"o":[[-0.459,2.392],[-2.145,-0.412],[0.459,-2.392],[2.145,0.412]],"v":[[7.822,11.425],[3.108,15.011],[0.056,9.935],[4.77,6.349]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[0,-4.505],[4.505,0],[0,4.505],[-4.505,0]],"o":[[0,4.505],[-4.505,0],[0,-4.505],[4.505,0]],"v":[[8.158,0],[0,8.158],[-8.158,0],[0,-8.158]],"c":true}]},{"t":222,"s":[{"i":[[0.459,-2.392],[2.145,0.412],[-0.459,2.392],[-2.145,-0.412]],"o":[[-0.459,2.392],[-2.145,-0.412],[0.459,-2.392],[2.145,0.412]],"v":[[7.822,11.425],[3.108,15.011],[0.056,9.935],[4.77,6.349]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":78,"s":[0,0,0,1]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[1],"y":[0]},"t":84,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":204,"s":[1,1,1,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":210,"s":[0,0,0,1]},{"i":{"x":[0],"y":[1]},"o":{"x":[1],"y":[0]},"t":216,"s":[1,1,1,1]},{"t":222,"s":[0,0,0,1]}]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[289.869,171.446]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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.667,"y":1},"o":{"x":0.333,"y":0},"t":78,"s":[{"i":[[-4.709,-5.496],[-19.701,0.168],[-4.529,6.08],[13.878,-2.681]],"o":[[5.065,5.911],[19.305,-0.165],[4.172,-5.601],[-13.878,2.681]],"v":[[-21.862,11.928],[0.391,2.966],[23.487,11.241],[-1.806,-8.496]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":204,"s":[{"i":[[-4.428,-16.68],[-11.76,4.217],[4.428,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":210,"s":[{"i":[[-4.709,-5.496],[-19.701,0.168],[-4.529,6.08],[13.878,-2.681]],"o":[[5.065,5.911],[19.305,-0.165],[4.172,-5.601],[-13.878,2.681]],"v":[[-21.862,11.928],[0.391,2.966],[23.487,11.241],[-1.806,-8.496]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":216,"s":[{"i":[[-4.427,-16.68],[-11.76,4.217],[4.427,16.68],[11.76,-4.217]],"o":[[4.428,16.68],[11.76,-4.217],[-4.428,-16.68],[-11.76,4.217]],"v":[[-21.293,7.636],[8.017,30.202],[21.293,-7.636],[-8.017,-30.202]],"c":true}]},{"t":222,"s":[{"i":[[-4.709,-5.496],[-19.701,0.168],[-4.529,6.08],[13.878,-2.681]],"o":[[5.065,5.911],[19.305,-0.165],[4.172,-5.601],[-13.878,2.681]],"v":[[-21.862,11.928],[0.391,2.966],[23.487,11.241],[-1.806,-8.496]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":78,"s":[6]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":210,"s":[6]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"t":222,"s":[6]}]},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[293.018,185.074]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[293.018,185.074]},"a":{"a":0,"k":[293.018,185.074]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[{"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":[149.824,171.565]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"fl","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[147.88,185.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":[147.88,185.335]},"a":{"a":0,"k":[147.88,185.335]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"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":300,"st":114,"bm":0},{"ddd":0,"ind":26,"ty":4,"nm":"head_bl4","parent":28,"sr":1,"ks":{"p":{"a":0,"k":[121.325,22.259,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.461,-9.431],[0,-24.681],[19.005,-18.433]],"o":[[14.542,21.228],[0,28.584],[0,0]],"v":[[-0.106,-57.811],[22.887,12.639],[-7.452,83.863]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.988235294819,0.933333337307,0.129411771894,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":11.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":27,"ty":4,"nm":"head_bl3","parent":28,"sr":1,"ks":{"r":{"a":0,"k":24.348},"p":{"a":0,"k":[-4.904,31.823,0]},"a":{"a":0,"k":[71.641,94.652,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-26.697,16.101]],"o":[[11.529,-27.092],[11.933,-7.196]],"v":[[-49.05,41.823],[10.169,-25.495]],"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.765},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"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":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[5]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[5]},{"t":240,"s":[5]}]},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":84,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":96,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":108,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":120,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":132,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":144,"s":[95]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":156,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":168,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":180,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":192,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":204,"s":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":216,"s":[95]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":228,"s":[100]},{"t":240,"s":[100]}]},"o":{"a":0,"k":0},"m":1,"nm":"Trim Paths 1","hd":false}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":28,"ty":4,"nm":"head","parent":34,"sr":1,"ks":{"r":{"a":0,"k":-1.29},"p":{"a":0,"k":[16.386,-21.198,0]},"a":{"a":0,"k":[0,131.046,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,39.247],[93.266,0],[0,-83.375],[-28.671,-23.75]],"o":[[29.034,-23.938],[0,-83.375],[-93.265,0],[0,39.353],[0,0]],"v":[[122.976,131.046],[168.871,34.404],[0,-131.046],[-168.871,34.404],[-123.254,130.814]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":29,"ty":4,"nm":"wing_r 2","parent":34,"sr":1,"ks":{"r":{"a":0,"k":-179.664},"p":{"a":0,"k":[-109.572,-31.522,0]},"a":{"a":0,"k":[-58.809,-56.332,0]},"s":{"a":0,"k":[-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.333,"y":0},"t":140,"s":[{"i":[[0,0],[-14.879,-8.239],[-20.578,-18.154]],"o":[[-72.002,-75.041],[13.081,3.468],[0,0]],"v":[[-80.931,-53.208],[-51.37,-137.226],[-45.743,-88.752]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":150,"s":[{"i":[[0,0],[-2.226,5.143],[-15.328,-25.808]],"o":[[-16.518,-32.373],[4.143,-17.768],[0,0]],"v":[[-79.707,-50.474],[-109.056,-107.897],[-45.743,-88.752]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":158,"s":[{"i":[[0,0],[6.824,14.715],[-11.573,-31.282]],"o":[[0.016,-30.4],[-2.25,-32.958],[0,0]],"v":[[-78.832,-48.519],[-130.014,-67.108],[-45.743,-88.752]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":182,"s":[{"i":[[0,0],[6.824,14.715],[-11.573,-31.282]],"o":[[0.016,-30.4],[-2.25,-32.958],[0,0]],"v":[[-78.832,-48.519],[-130.014,-67.108],[-45.743,-88.752]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":194,"s":[{"i":[[0,0],[-2.226,5.143],[-15.328,-25.808]],"o":[[-16.518,-32.373],[4.143,-17.768],[0,0]],"v":[[-79.707,-50.474],[-109.056,-107.897],[-45.743,-88.752]],"c":false}]},{"t":208,"s":[{"i":[[0,0],[-14.879,-8.239],[-20.578,-18.154]],"o":[[-72.002,-75.041],[13.081,3.468],[0,0]],"v":[[-80.931,-53.208],[-51.37,-137.226],[-45.743,-88.752]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":114,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":"table","parent":32,"sr":1,"ks":{"p":{"a":0,"k":[-1.017,94.262,0]},"a":{"a":0,"k":[-1.017,114.5,0]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-163.915,0],[0,-36.709],[163.915,0],[0,36.709]],"o":[[163.915,0],[0,36.709],[-163.915,0],[0,-36.709]],"v":[[0,-49.944],[296.795,16.524],[0,82.992],[-296.795,16.524]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.53684129902,0.386725033031,0.15131556193,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.788832720588,0.616385186887,0.346951054592,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.017,164.444]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,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":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":3,"nm":"NULL CONTROL","sr":1,"ks":{"o":{"a":0,"k":0},"p":{"a":0,"k":[250.49,266.281,0]},"a":{"a":0,"k":[60,60,0]}},"ao":0,"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":"table","parent":31,"sr":1,"ks":{"p":{"a":0,"k":[65.202,170.052,0]},"a":{"a":0,"k":[-1.017,114.5,0]},"s":{"a":0,"k":[84,84,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-154.453,0],[-26.375,-30.66],[0,-4.325],[163.915,0],[0,36.709],[-0.866,2.068]],"o":[[144.603,0],[3.522,4.095],[0,36.709],[-163.915,0],[0,-2.119],[14.136,-33.762]],"v":[[0,-49.944],[295.297,-6.839],[296.795,16.524],[0,82.992],[-296.795,16.524],[-297.272,-4.938]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.53684129902,0.386725033031,0.15131556193,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.635294117647,0.466666666667,0.2,1]},"o":{"a":0,"k":100},"r":1,"bm":0,"nm":"Fill 1","hd":false},{"ty":"tr","p":{"a":0,"k":[-1.017,164.444]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,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":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"body 2","parent":31,"sr":1,"ks":{"p":{"a":0,"k":[-75.076,220.65,0]},"a":{"a":0,"k":[14.534,120.082,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":60,"s":[-59.64,57.96,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":64,"s":[-58.8,58.8,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":218,"s":[-58.8,58.8,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":223.5,"s":[-59.64,57.96,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":229,"s":[-57.96,59.64,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":234.5,"s":[-59.64,57.96,100]},{"t":240,"s":[-59.64,57.96,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[56.875,0],[5.951,48.89],[-2.28,8.971],[-3.181,9.755],[-80.635,0],[-26.767,-60.678],[0.681,-19.215],[6.118,-10.098]],"o":[[-70.876,0],[-1.557,-12.791],[3.674,-14.455],[26.406,-80.973],[70.405,0],[6.692,15.17],[30.443,-1.358],[-24.23,39.989]],"v":[[9.675,120.069],[-140.849,57.414],[-139.413,21.699],[-130.895,-8.477],[9.675,-96.715],[160.978,-31.309],[172.295,31.845],[175.032,81.04]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":158,"bm":0},{"ddd":0,"ind":34,"ty":4,"nm":"body","parent":31,"sr":1,"ks":{"p":{"a":0,"k":[195.076,220.65,0]},"a":{"a":0,"k":[14.534,120.082,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":60,"s":[59.64,57.96,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":64,"s":[58.8,58.8,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":[61.32,56.28,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":82,"s":[58.8,58.8,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":136,"s":[58.8,58.8,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":144,"s":[61.32,56.28,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":154,"s":[56.28,61.32,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":172,"s":[58.8,58.8,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":222,"s":[58.8,58.8,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":226.666,"s":[59.64,57.96,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":231.334,"s":[57.96,59.64,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":236,"s":[59.64,57.96,100]},{"t":240,"s":[59.64,57.96,100]}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[71.236,0],[5.951,48.89],[-2.28,8.971],[-3.181,9.755],[-80.635,0],[-6.187,-110.17]],"o":[[-70.876,0],[-1.557,-12.791],[3.674,-14.455],[26.406,-80.973],[88.008,0],[4.493,80.01]],"v":[[9.675,120.069],[-140.849,57.414],[-139.413,21.699],[-130.895,-8.477],[9.675,-96.715],[170.594,42.9]],"c":true}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.980392158031,0.564705908298,0.086274512112,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":12.5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.835294127464,0.152941182256,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}],"ip":0,"op":300,"st":158,"bm":0},{"ddd":0,"ind":35,"ty":4,"nm":"headph","parent":17,"sr":1,"ks":{"r":{"a":0,"k":1.29},"p":{"a":0,"k":[-151.333,15.052,0]},"a":{"a":0,"k":[20.969,717.764,0]},"s":{"a":0,"k":[155.28,155.28,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[20.336,692.635],[26.611,767.224]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":196,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[31.288,692.635],[37.563,767.224]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[31.288,692.635],[37.563,767.224]],"c":false}]},{"t":240,"s":[{"i":[[9.82,-17.342],[-15.003,-2.081]],"o":[[-9.82,17.342],[15.003,2.081]],"v":[[20.336,692.635],[26.611,767.224]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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.667,"y":1},"o":{"x":0.333,"y":0},"t":184,"s":[{"i":[[0,38.209],[16.416,1.282],[0.505,-32.299],[-21.504,-1.041]],"o":[[0,-39.193],[-17.251,-1.347],[-0.694,44.396],[21.504,1.041]],"v":[[58.336,713.481],[29.274,662.35],[-7.345,715.927],[26.828,770.199]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":196,"s":[{"i":[[0,38.209],[16.416,1.282],[0.505,-32.299],[-21.504,-1.041]],"o":[[0,-39.193],[-17.251,-1.347],[-0.694,44.396],[21.504,1.041]],"v":[[63.812,713.481],[34.75,662.35],[-1.869,715.927],[32.304,770.199]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":226,"s":[{"i":[[0,38.209],[16.416,1.282],[0.505,-32.299],[-21.504,-1.041]],"o":[[0,-39.193],[-17.251,-1.347],[-0.694,44.396],[21.504,1.041]],"v":[[63.812,713.481],[34.75,662.35],[-1.869,715.927],[32.304,770.199]],"c":true}]},{"t":240,"s":[{"i":[[0,38.209],[16.416,1.282],[0.505,-32.299],[-21.504,-1.041]],"o":[[0,-39.193],[-17.251,-1.347],[-0.694,44.396],[21.504,1.041]],"v":[[58.336,713.481],[29.274,662.35],[-7.345,715.927],[26.828,770.199]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":36,"ty":4,"nm":"headph","parent":28,"sr":1,"ks":{"r":{"a":0,"k":1.29},"p":{"a":0,"k":[-177.965,14.452,0]},"a":{"a":0,"k":[20.969,717.764,0]},"s":{"a":0,"k":[155.28,155.28,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[4.391,-17.686],[-12.717,-1.217]],"o":[[-4.595,18.508],[12.717,1.217]],"v":[[26.118,725.296],[44.31,776.795]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[4.391,-17.686],[-12.717,-1.217]],"o":[[-4.595,18.508],[12.717,1.217]],"v":[[14.618,725.353],[32.81,776.852]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[4.391,-17.686],[-12.717,-1.217]],"o":[[-4.595,18.508],[12.717,1.217]],"v":[[14.618,725.353],[32.81,776.852]],"c":false}]},{"t":166,"s":[{"i":[[4.391,-17.686],[-12.717,-1.217]],"o":[[-4.595,18.508],[12.717,1.217]],"v":[[26.118,725.296],[44.31,776.795]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[2.066,35.726],[22.512,0],[3.525,-32.698],[-18.122,0.072]],"o":[[-2.119,-36.646],[-22.512,0],[-4.456,41.344],[18.122,-0.072]],"v":[[65.971,721.571],[48.3,674.649],[5.95,723.383],[44.015,776.52]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":84,"s":[{"i":[[2.066,35.726],[22.512,0],[3.525,-32.698],[-18.122,0.072]],"o":[[-2.119,-36.646],[-22.512,0],[-4.456,41.344],[18.122,-0.072]],"v":[[54.471,721.628],[36.8,674.706],[-5.55,723.44],[32.515,776.577]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":146,"s":[{"i":[[2.066,35.726],[22.512,0],[3.525,-32.698],[-18.122,0.072]],"o":[[-2.119,-36.646],[-22.512,0],[-4.456,41.344],[18.122,-0.072]],"v":[[54.471,721.628],[36.8,674.706],[-5.55,723.44],[32.515,776.577]],"c":true}]},{"t":166,"s":[{"i":[[2.066,35.726],[22.512,0],[3.525,-32.698],[-18.122,0.072]],"o":[[-2.119,-36.646],[-22.512,0],[-4.456,41.344],[18.122,-0.072]],"v":[[65.971,721.571],[48.3,674.649],[5.95,723.383],[44.015,776.52]],"c":true}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":10},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.40000000596,0.40000000596,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}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":37,"ty":4,"nm":"audio 2","parent":31,"sr":1,"ks":{"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[549.51,-120.65,0],"to":[-80.667,0,0],"ti":[80.667,0,0]},{"t":238,"s":[65.51,-120.65,0],"h":1}]},"a":{"a":0,"k":[0,23.631,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":60,"s":[100,100,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.25,"s":[100,105,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":82.5,"s":[100,100,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":93.75,"s":[100,105,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":105,"s":[100,100,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":116.25,"s":[100,105,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":127.5,"s":[100,100,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":138.75,"s":[100,105,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":150,"s":[100,100,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":161.25,"s":[100,105,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":172.5,"s":[100,100,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":183.75,"s":[100,105,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":195,"s":[100,100,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":206.25,"s":[100,105,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":217.5,"s":[100,100,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":228.75,"s":[100,105,100]},{"t":240,"s":[100,100,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":[[235.141,19.975],[235.141,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":238,"s":[0]},{"t":242,"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":[[221.31,19.975],[221.31,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":232,"s":[0]},{"t":236,"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":[[207.478,19.975],[207.478,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":228,"s":[0]},{"t":232,"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":[[193.646,19.975],[193.646,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":222,"s":[0]},{"t":226,"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":[[179.814,19.975],[179.814,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":218,"s":[0]},{"t":222,"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":[[165.982,19.975],[165.982,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":212,"s":[0]},{"t":216,"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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":206,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[152.312,20.316],[152.312,26.946]],"c":false}]},{"t":210,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[152.15,14.126],[152.15,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":206,"s":[0]},{"t":210,"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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":202,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[138.526,20.012],[138.526,26.767]],"c":false}]},{"t":206,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[138.318,-5.617],[138.318,52.88]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":202,"s":[0]},{"t":206,"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 8","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":198,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[124.238,20.004],[124.238,26.763]],"c":false}]},{"t":202,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[124.487,-26.091],[124.487,73.354]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":198,"s":[0]},{"t":202,"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":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":192,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[110.889,20.157],[110.889,27.106]],"c":false}]},{"t":196,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[110.655,-5.617],[110.655,52.88]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":192,"s":[0]},{"t":196,"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":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":186,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[97.046,20.347],[97.046,26.916]],"c":false}]},{"t":190,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[96.823,14.126],[96.823,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":186,"s":[0]},{"t":190,"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 11","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":182,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[82.761,20.335],[82.761,26.927]],"c":false}]},{"t":186,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[82.991,14.126],[82.991,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":182,"s":[0]},{"t":186,"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 12","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":176,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[69.409,20.087],[69.409,27.176]],"c":false}]},{"t":180,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[69.159,-5.617],[69.159,52.88]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":176,"s":[0]},{"t":180,"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 13","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":[[55.327,14.126],[55.327,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":172,"s":[0]},{"t":176,"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 14","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":[[41.496,19.975],[41.496,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":166,"s":[0]},{"t":170,"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 15","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":[[27.664,19.975],[27.664,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":162,"s":[0]},{"t":166,"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 16","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":[[13.832,19.975],[13.832,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":156,"s":[0]},{"t":160,"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 17","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,19.975],[0,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":152,"s":[0]},{"t":156,"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 18","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":[[-13.832,19.975],[-13.832,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":146,"s":[0]},{"t":150,"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 19","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":[[-27.664,19.975],[-27.664,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":140,"s":[0]},{"t":144,"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 20","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":[[-41.496,19.975],[-41.496,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":136,"s":[0]},{"t":140,"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 21","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":[[-55.327,19.975],[-55.327,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":130,"s":[0]},{"t":134,"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 22","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":124,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-69.345,19.855],[-69.345,26.914]],"c":false}]},{"t":128,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-69.159,8.98],[-69.159,38.283]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":124,"s":[0]},{"t":128,"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 23","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":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-83.134,19.936],[-83.134,26.844]],"c":false}]},{"t":124,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-82.991,-5.617],[-82.991,52.88]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[0]},{"t":124,"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 24","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":116,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-96.921,20.316],[-96.921,26.946]],"c":false}]},{"t":120,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-96.823,14.126],[-96.823,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":116,"s":[0]},{"t":120,"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 25","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":110,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-110.766,20.003],[-110.766,26.77]],"c":false}]},{"t":114,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-110.655,14.126],[-110.655,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":110,"s":[0]},{"t":114,"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 26","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":106,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-124.552,20.119],[-124.552,27.144]],"c":false}]},{"t":110,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-124.487,14.126],[-124.487,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":106,"s":[0]},{"t":110,"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 27","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":100,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-138.403,20.3],[-138.403,26.963]],"c":false}]},{"t":104,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-138.318,3.157],[-138.318,44.105]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":100,"s":[0]},{"t":104,"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 28","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":96,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-152.189,20.386],[-152.189,26.877]],"c":false}]},{"t":100,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-152.15,3.157],[-152.15,44.105]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[0]},{"t":100,"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 29","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":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-166.039,19.911],[-166.039,26.869]],"c":false}]},{"t":94,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-165.982,14.126],[-165.982,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[0]},{"t":94,"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 30","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":86,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-179.827,20.057],[-179.827,27.205]],"c":false}]},{"t":90,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-179.814,14.126],[-179.814,33.137]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":86,"s":[0]},{"t":90,"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 31","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":80,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-193.646,19.975],[-193.646,27.287]],"c":false}]},{"t":84,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-193.646,19.975],[-193.646,27.287]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":80,"s":[0]},{"t":84,"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 32","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":76,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-207.463,20.033],[-207.463,26.744]],"c":false}]},{"t":80,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-207.478,-17.317],[-207.478,64.579]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":76,"s":[0]},{"t":80,"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 33","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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-221.311,20.222],[-221.311,27.041]],"c":false}]},{"t":74,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-221.31,0.189],[-221.31,47.074]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":70,"s":[0]},{"t":74,"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 34","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":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-235.099,20.132],[-235.141,27.86]],"c":false}]},{"t":70,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-235.141,-29.016],[-235.141,76.279]],"c":false}]}]},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":66,"s":[0]},{"t":70,"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 35","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":38,"ty":4,"nm":"audio 3","parent":37,"sr":1,"ks":{"p":{"a":0,"k":[-484,23.631,0]},"a":{"a":0,"k":[0,23.631,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":[[235.141,19.975],[235.141,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":232,"s":[10]},{"t":236,"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},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[221.31,19.975],[221.31,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":226,"s":[10]},{"t":230,"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 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":[[207.478,19.975],[207.478,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":222,"s":[10]},{"t":226,"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 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":[[193.646,19.975],[193.646,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":216,"s":[10]},{"t":220,"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 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":[[179.814,19.975],[179.814,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":212,"s":[10]},{"t":216,"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 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":[[165.982,19.975],[165.982,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":206,"s":[10]},{"t":210,"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 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":[[152.15,14.126],[152.15,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":202,"s":[10]},{"t":206,"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 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":[[138.318,-5.617],[138.318,52.88]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":196,"s":[10]},{"t":200,"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 8","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":[[124.487,-26.091],[124.487,73.354]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":192,"s":[10]},{"t":196,"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 9","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":[[110.655,-5.617],[110.655,52.88]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":186,"s":[10]},{"t":190,"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 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":[[96.823,14.126],[96.823,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":182,"s":[10]},{"t":186,"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 11","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":[[82.991,14.126],[82.991,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":176,"s":[10]},{"t":180,"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 12","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":[[69.159,-5.617],[69.159,52.88]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":172,"s":[10]},{"t":176,"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 13","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":[[55.327,14.126],[55.327,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":166,"s":[10]},{"t":170,"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 14","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":[[41.496,19.975],[41.496,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":162,"s":[10]},{"t":166,"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 15","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":[[27.664,19.975],[27.664,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":156,"s":[10]},{"t":160,"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 16","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":[[13.832,19.975],[13.832,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":150,"s":[10]},{"t":154,"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 17","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,19.975],[0,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":146,"s":[10]},{"t":150,"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 18","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":[[-13.832,19.975],[-13.832,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":140,"s":[10]},{"t":144,"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 19","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":[[-27.664,19.975],[-27.664,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":136,"s":[10]},{"t":140,"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 20","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":[[-41.496,19.975],[-41.496,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":130,"s":[10]},{"t":134,"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 21","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":[[-55.327,19.975],[-55.327,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":126,"s":[10]},{"t":130,"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 22","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":[[-69.159,8.98],[-69.159,38.283]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[10]},{"t":124,"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 23","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":[[-82.991,-5.617],[-82.991,52.88]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":116,"s":[10]},{"t":120,"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 24","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":[[-96.823,14.126],[-96.823,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":110,"s":[10]},{"t":114,"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 25","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":[[-110.655,14.126],[-110.655,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":106,"s":[10]},{"t":110,"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 26","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":[[-124.487,14.126],[-124.487,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":100,"s":[10]},{"t":104,"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 27","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":[[-138.318,3.157],[-138.318,44.105]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[10]},{"t":98,"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 28","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":[[-152.15,3.157],[-152.15,44.105]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":[10]},{"t":94,"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 29","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":[[-165.982,14.126],[-165.982,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":84,"s":[10]},{"t":88,"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 30","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":[[-179.814,14.126],[-179.814,33.137]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":80,"s":[10]},{"t":84,"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 31","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":[[-193.646,19.975],[-193.646,27.287]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":74,"s":[10]},{"t":78,"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 32","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":[[-207.478,-17.317],[-207.478,64.579]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":70,"s":[10]},{"t":74,"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 33","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":[[-221.31,0.189],[-221.31,47.074]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":64,"s":[10]},{"t":68,"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 34","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.141,-29.016],[-235.141,76.279]],"c":false}},"nm":"Path 1","hd":false},{"ty":"st","c":{"a":0,"k":[0.301960796118,0.301960796118,0.301960796118,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":60,"s":[10]},{"t":64,"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 35","bm":0,"hd":false}],"ip":0,"op":300,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"_024_ONAIR_DUCKS","refId":"comp_0","sr":1,"ks":{"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":-60,"bm":0}]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/raw/voip_filled.json b/TMessagesProj/src/main/res/raw/voip_filled.json new file mode 100644 index 000000000..9f900f8fa --- /dev/null +++ b/TMessagesProj/src/main/res/raw/voip_filled.json @@ -0,0 +1 @@ +{"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":404,"w":60,"h":60,"nm":"ALL","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":29,"st":0,"bm":0}]},{"id":"comp_1","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"START","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[282.33,256.042,0],"to":[0,0,0],"ti":[0,0,0]},{"t":7,"s":[254.33,256.042,0]}],"ix":2},"a":{"a":0,"k":[12.33,0.042,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.27,"y":0},"t":0,"s":[{"i":[[2.8,-1.7],[0,0],[5.7,9.5],[0,3.6],[0,0],[-11.1,0],[-3.1,-1.9],[0,0],[5.7,-9.4]],"o":[[0,0],[-9.4,5.7],[-1.9,-3.1],[0,0],[0,-11],[3.6,0],[0,0],[9.4,5.7],[-1.7,2.7]],"v":[[103.4,17.1],[-58.1,114.7],[-85.5,107.9],[-88.4,97.6],[-88.4,-97.6],[-68.4,-117.5],[-58.1,-114.6],[103.4,-17],[110.2,10.4]],"c":true}]},{"t":10,"s":[{"i":[[5.225,-7.477],[6.6,-2.2],[5.7,9.5],[0,3.6],[-0.127,11.332],[-7.35,7.25],[-5.65,0.1],[-14.675,-17.878],[0.55,-11.25]],"o":[[-6.15,8.8],[-7.202,2.401],[-1.9,-3.1],[0,0],[0.15,-13.4],[2.563,-2.528],[0,0],[7.1,8.65],[-0.2,7.75]],"v":[[36.4,28.7],[15.4,39.95],[-11,30.15],[-16.4,18.1],[-18.65,0.9],[-8.65,-24],[7.4,-31.85],[36.15,-20.4],[43.7,7.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":[100,100],"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":"Triangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":5,"st":-6,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":5,"s":[{"i":[[-6.3,0],[0,0],[0,-1.435],[0,0],[6.3,0],[0,0],[0,1.435],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,1.435],[0,0],[-6.3,0],[0,0],[0,-1.435]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,81.097],[9.5,86.403],[-1.9,89],[-5.2,89],[-16.6,86.403],[-16.6,81.097]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.15,70.5],[-1.85,70.5],[9.55,81.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.55,81.9]],"c":true}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.15,86.75],[-1.85,86.75],[9.55,98.15],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.55,98.15]],"c":true}]},{"t":29,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":7,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Arc R","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":8,"s":[{"i":[[0,0],[35.3,-21.739]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[36.7,75]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[14.8,-11.381]],"o":[[0.03,17.185],[0,0]],"v":[[78.7,5.25],[62.7,54.175]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[0,0],[15.195,-13.612]],"o":[[0.075,19.589],[0,0]],"v":[[79.155,2.974],[63.805,52.795]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[9.715,-14.875]],"o":[[0.094,20.585],[0,0]],"v":[[79.372,1.136],[64.285,50.377]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[9.715,-14.875]],"o":[[0.094,20.585],[0,0]],"v":[[79.372,1.136],[64.285,50.377]],"c":false}]},{"t":23,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.711],"y":[6.356]},"o":{"x":[0.392],"y":[0]},"t":8,"s":[100]},{"i":{"x":[0.66],"y":[0.822]},"o":{"x":[0.353],"y":[0.153]},"t":9,"s":[100]},{"i":{"x":[0.544],"y":[0.863]},"o":{"x":[0.254],"y":[0.3]},"t":10,"s":[57.213]},{"i":{"x":[0.564],"y":[1]},"o":{"x":[0.246],"y":[0.217]},"t":12,"s":[19.305]},{"t":15,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":5,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc L","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":3,"s":[-3.75,84.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[-3.75,77.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":22,"s":[-3.75,87.25,0],"to":[0,0,0],"ti":[0,0,0]},{"t":29,"s":[-3.75,84.5,0]}],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":5,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]},{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":15,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85,2]],"c":false}]},{"t":23,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":5,"s":[15]},{"t":15,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.723],"y":[5.239]},"o":{"x":[0.4],"y":[0]},"t":5,"s":[15]},{"i":{"x":[0.695],"y":[0.969]},"o":{"x":[0.368],"y":[0.188]},"t":7,"s":[15]},{"t":8,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":5,"op":30,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Line","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.687,-6.898,0],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":5,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.613,-97],[108.787,112]],"c":false}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":15,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-108.213,-118.069],[115.413,104.069]],"c":false}]},{"t":23,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":5,"s":[34]},{"t":15,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.31],"y":[0]},"t":5,"s":[59]},{"t":15,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":5,"op":30,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Head","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":3,"s":[{"i":[[-25.4,0],[0,-14.432],[0,0],[12.95,-6.477],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,6.477],[0,0],[0,0],[0,0],[0,-14.432]],"v":[[-3.6,-45],[42.4,-18.863],[42.4,24.32],[23.55,44.576],[-27.58,17.939],[-49.7,3.439],[-49.6,-18.863]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-25.217,0],[0,-18.82],[0,0],[12.857,-8.447],[0,0],[0,0],[0,0]],"o":[[25.217,0],[0,0],[0,8.447],[0,0],[0,0],[0,0],[0,-18.82]],"v":[[-3.6,-74.003],[42.068,-39.92],[42.068,16.391],[23.354,42.805],[-22.609,2.243],[-49.345,-21.035],[-49.269,-39.92]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-25.133,0],[0,-20.833],[0,0],[7.486,-6.386],[0,0],[0,0],[0,0]],"o":[[25.133,0],[0,0],[0,9.35],[0,0],[0,0],[0,0],[0,-20.833]],"v":[[-3.601,-87.309],[41.916,-49.58],[41.916,12.754],[28.014,36.493],[-16.079,-7.707],[-49.113,-39.513],[-49.117,-49.58]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-24.994,0],[0,-24.173],[0,0],[9.026,-7.804],[0,0],[0,0],[0,0]],"o":[[24.994,0],[0,0],[0,10.849],[0,0],[0,0],[0,0],[0,-24.173]],"v":[[-3.601,-109.388],[41.663,-65.611],[41.663,6.718],[27.287,33.135],[-21.692,-14.203],[-48.939,-44.406],[-48.865,-65.611]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[-24.882,0],[0,-26.136],[0,0],[6.004,-6.398],[0,0],[0,0],[0,0]],"o":[[24.882,0],[0,0],[0,11.73],[0,0],[0,0],[0,0],[0,-26.136]],"v":[[-3.601,-123],[41.462,-75.667],[41.462,2.534],[30.496,26.07],[-20.343,-23.873],[-48.773,-48.671],[-48.664,-75.667]],"c":true}]},{"t":22,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.31,"y":0},"t":3,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,14.432],[0,0]],"o":[[0,0],[0,0],[0,0],[-11.85,5.796],[-25.4,0],[0,0],[0,0]],"v":[[-49.7,1.365],[-24.952,12.671],[-23,13.78],[26.35,43.241],[-3.6,50.4],[-49.6,24.263],[-49.7,1.365]],"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],[5.857,0],[0,18.82],[0,0]],"o":[[0,0],[0,0],[0,0],[-11.765,7.558],[-25.217,0],[0,0],[0,0]],"v":[[-49.345,-23.74],[-20,-4.627],[-18.062,-3.18],[26.134,41.064],[-3.6,50.4],[-49.269,16.317],[-49.345,-23.74]],"c":true}]},{"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],[5.838,0],[0,20.833],[0,0]],"o":[[0,0],[0,0],[0,0],[-10.035,6.292],[-25.133,0],[0,0],[0,0]],"v":[[-49.113,-23.507],[-25.728,0.688],[-23.796,2.289],[19.285,43.816],[-3.601,50.4],[-49.117,12.672],[-49.113,-23.257]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.806,0],[0,24.173],[0,0]],"o":[[0,0],[0,0],[0,0],[-6.163,2.551],[-24.994,0],[0,0],[0,0]],"v":[[-49.382,-11.516],[-31.116,7.197],[-29.195,9.055],[8.663,46.861],[-3.601,50.4],[-48.865,6.622],[-49.243,-11.446]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":13,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.78,0],[0,26.837],[0,0]],"o":[[0,0],[0,0],[0,0],[-4.239,1.413],[-24.882,0],[0,0],[0,0]],"v":[[-48.796,-13.783],[-30.018,6.241],[-28.105,8.304],[9.739,46.087],[-3.601,50.4],[-48.664,1.797],[-48.546,-13.658]],"c":true}]},{"t":22,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":4,"op":30,"st":0,"bm":0}]},{"id":"comp_2","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":33,"st":0,"bm":0}]},{"id":"comp_3","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Line","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.687,-6.898,0],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.2,"y":0},"t":14,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]},{"t":26,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":14,"s":[14]},{"t":26,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":14,"s":[86]},{"t":26,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":34,"st":-1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Head","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":34,"st":-1,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Arc L","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.31,"y":0},"t":13,"s":[-3.75,69.094,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":25,"s":[-3.75,89.094,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[-3.75,84.5,0]}],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.29,"y":0},"t":17,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]},{"t":27,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.723],"y":[0.572]},"o":{"x":[0.4],"y":[0]},"t":4,"s":[15]},{"i":{"x":[0.695],"y":[0.627]},"o":{"x":[0.368],"y":[0.45]},"t":6,"s":[29]},{"i":{"x":[0.323],"y":[1]},"o":{"x":[0.222],"y":[0.388]},"t":7,"s":[37.868]},{"t":17,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.723],"y":[1.14]},"o":{"x":[0.4],"y":[0]},"t":4,"s":[12]},{"i":{"x":[0.695],"y":[0.945]},"o":{"x":[0.368],"y":[0.061]},"t":6,"s":[17.559]},{"i":{"x":[0.652],"y":[0.857]},"o":{"x":[0.357],"y":[0.122]},"t":7,"s":[9]},{"i":{"x":[0.426],"y":[1]},"o":{"x":[0.183],"y":[-2.717]},"t":9,"s":[0]},{"t":17,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":6,"op":34,"st":-1,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc R","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.29,"y":0},"t":17,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]},{"t":27,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":7,"s":[99]},{"t":17,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":10,"op":34,"st":-1,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.31,"y":0},"t":13,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.15,64],[-1.85,64],[9.55,75.4],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.55,75.4]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":25,"s":[{"i":[[-6.3,0],[0,0],[0,-2.846],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-2.846]],"v":[[-5.2,84.75],[-1.9,84.75],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"c":true}]},{"t":33,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":34,"st":-1,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Line Bell","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.28,"y":0},"t":-1,"s":[5.03,-9.859,0],"to":[0,0,0],"ti":[0,0,0]},{"t":14,"s":[4.03,-8.359,0]}],"ix":2},"a":{"a":0,"k":[-0.05,-2.95,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-98.152,-101.129],[98.052,95.229]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":-1,"s":[0]},{"t":14,"s":[12]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.28],"y":[0]},"t":-1,"s":[100]},{"t":14,"s":[88]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":14,"st":-1,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":-1,"s":[258.564,256.028,0],"to":[0,0,0],"ti":[0,0,0]},{"t":13,"s":[253.564,241.028,0]}],"ix":2},"a":{"a":0,"k":[-1.88,-0.927,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.5,"y":0},"t":-1,"s":[{"i":[[-4.2,9.7],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[32.121,59.821],[34.778,62.478],[51.9,79.6],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"t":13,"s":[{"i":[[-0.557,1.753],[0,0],[0,0],[0,0],[12.242,3.875],[4.463,6.051],[0,0],[0,0],[0,1.225],[0.586,4.254],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-8.598,-2.722],[0,0],[0,0],[-0.69,-2.075],[0,0],[-1.67,-12.113],[0.086,-1.777]],"v":[[-48.888,-16.333],[2.602,35.024],[4.48,36.832],[14.055,46.983],[-15.561,47.733],[-39.407,31.182],[-39.266,30.978],[-44.13,22.682],[-46.406,17.666],[-48.156,11.291],[-49.281,-8.366]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.5,"y":0},"t":-1,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[10.111,-11.873],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-62.4,-65.9],[-19.568,-22.503],[-18.761,-21.685],[79.699,78.074],[80.6,78.975]],"c":true}]},{"t":13,"s":[{"i":[[-2.182,4.07],[-1.1,3.295],[0,1.8],[0,0],[25.933,14.308],[0,0],[11.842,-0.367],[0,0],[3.626,-2.33],[0,0],[-2.875,-21.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.815,-2.442],[0,0],[0.221,-54.605],[0,0],[-4.442,-2.455],[0,0],[-13.97,-0.305],[0,0],[-19.874,13.29],[0,0],[0,0],[0,0],[0,0],[2.995,-3.055]],"v":[[36.363,27.6],[40.655,19.625],[42.779,11.2],[43.21,-19.85],[21.372,-111.763],[20.684,-112.312],[-3.286,-118.838],[-3.6,-118.9],[-29.821,-110.375],[-31.571,-108.995],[-48.57,-47.15],[-22.056,-18.753],[-21.467,-17.935],[30.402,32.574],[31.31,33.225]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":12,"st":-1,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Bottom Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255.445,394.655,0],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":-1,"s":[{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[0.5,119.605],[26.1,97.805],[22.8,93.605],[-20.9,93.605],[-25.2,97.405]],"c":true}]},{"t":9,"s":[{"i":[[-8.162,0],[0.625,15.53],[0.51,0.546],[4.907,-5.5],[0.14,-2.002]],"o":[[7.975,0],[0.125,-2.157],[-6.069,-6.5],[-0.373,0.418],[-1.164,16.646]],"v":[[-3.269,123.85],[10.181,105.515],[9.694,64.545],[-15.782,65.045],[-16.531,104.149]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9,"st":-1,"bm":0}]},{"id":"comp_4","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":33,"st":0,"bm":0}]},{"id":"comp_5","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"EXAMPLE ON 2","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.981,2.44,0],"ix":2},"a":{"a":0,"k":[-0.038,1.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.1,0],[0,0],[0,-9.1],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[9,0],[0,0],[0,0],[0,0],[0,0],[0,-9.1]],"v":[[-1.6,-115.5],[-0.4,-115.5],[16,-99.1],[16,-89.5],[16,-89.5],[-18,-89.5],[-18,-99.1]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.2]],"v":[[0,118.5],[25.6,96.7],[22.3,92.5],[-21.4,92.5],[-25.7,96.3]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.8],[0,0],[0,0],[36.4,8.6],[3.4,0],[5.9,-0.1],[0,-38.8],[0,0],[1.2,-1.3],[0,0],[0,0],[-11.3,0],[0,0],[8.1,7.9],[0,0]],"o":[[0,0],[0,0],[0,-38.6],[-6.7,-0.2],[-3,0],[-36.5,8.6],[0,0],[0,1.8],[0,0],[0,0],[-8,7.9],[0,0],[11.3,0],[0,0],[-1.1,-1.3]],"v":[[76.4,35.6],[76.4,-15.7],[76.4,-15.7],[14.3,-93.3],[-0.8,-93.5],[-14.2,-93.3],[-76.3,-15.7],[-76.3,35.6],[-78.1,40.4],[-92.8,57],[-92.8,57],[-81.5,78.5],[81.3,78.5],[92.7,57],[78.1,40.4]],"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":[100,100],"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":"Combined-Shape","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":15,"op":33,"st":-1,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Line Bell","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":2,"s":[5.03,-9.859,0],"to":[0,0,0],"ti":[0,0,0]},{"t":23,"s":[12.954,-0.45,0]}],"ix":2},"a":{"a":0,"k":[-0.05,-2.95,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-98.152,-101.129],[98.052,95.229]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":2,"s":[0]},{"t":23,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":21,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Bottom Bell","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,137.7,0],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[-4.5,119.6],[21.1,97.8],[17.8,93.6],[-25.9,93.6],[-30.2,97.4]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":15,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[260.562,232.132,0],"ix":2},"a":{"a":0,"k":[0.12,-24.927,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[100,100,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":12,"s":[93,93,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":22,"s":[101,101,100]},{"t":32,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-4.2,9.7],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[32.121,59.821],[34.778,62.478],[51.9,79.6],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-10.756,-14.742],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[4.9,6.715],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[-47.235,-56.249],[-60.858,-34.829],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-10.756,-14.742],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[4.9,6.715],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[-24.266,-35.672],[-39.752,-12.387],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-10.756,-14.742],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[4.9,6.715],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[-3.42,-13.502],[-18.646,10.055],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-10.756,-14.742],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[4.9,6.715],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[39.053,27.896],[23.827,51.453],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-10.756,-14.742],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[4.9,6.715],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[52.725,43.176],[39.376,66.197],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-14.003,15.695],[-5.659,-3.648],[-7.11,-19.386],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[-6.594,-3.203],[1.271,3.465],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-63.408,-63.817],[67.899,50.896],[48.96,73.385],[50.693,79.614],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"t":15,"s":[{"i":[[-7.545,13.495],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-68.9,-57.2],[46.687,58.223],[49.57,61.102],[68.15,79.655],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[10.111,-11.873],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-62.4,-65.9],[-19.568,-22.503],[-18.761,-21.685],[79.699,78.074],[80.6,78.975]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.92,-13.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[9.935,-1.566]],"v":[[88.675,58.537],[73.795,40.125],[71.995,35.325],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-64.104,-63.629],[-25.68,-45.311],[-14.342,-27.377],[81.753,76.333],[80.85,79.006]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.92,-13.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[9.935,-1.566]],"v":[[88.675,58.537],[73.795,40.125],[71.995,35.325],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-64.104,-63.629],[7.983,-0.159],[27.87,17.507],[81.753,76.333],[80.85,79.006]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":12,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.92,-13.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[9.935,-1.566]],"v":[[88.675,58.537],[73.795,40.125],[71.995,35.325],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-64.104,-63.629],[50.456,41.238],[70.343,58.905],[81.753,76.333],[80.85,79.006]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.92,-13.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[9.935,-1.566]],"v":[[88.675,58.537],[73.795,40.125],[71.995,35.325],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-64.104,-63.629],[51.394,43.785],[70.343,58.905],[81.753,76.333],[80.85,79.006]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.92,-13.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[9.935,-1.566]],"v":[[88.675,58.537],[73.795,40.125],[71.995,35.325],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-64.104,-63.629],[66.569,51.505],[70.343,58.905],[81.753,76.333],[80.85,79.006]],"c":true}]},{"t":15,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.346,-16.6],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-69.215,-56.816],[-28.207,-15.716],[-27.434,-14.941],[66.835,79.54],[81.6,79.1]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":15,"st":0,"bm":0}]},{"id":"comp_6","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[30,30,0],"to":[0,0,0],"ti":[0,0,0]},{"t":10,"s":[28.282,29.857,0]}],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[13.6,13.6,100]},{"t":10,"s":[13.5,13.5,100]}],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":37,"st":0,"bm":0}]},{"id":"comp_7","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Head 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.613,-101.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[11.613,-50.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[11.613,-89.537,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36,"s":[11.113,-83.037,0]}],"ix":2},"a":{"a":0,"k":[11.613,-84.537,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,-8.774],[8.774,0],[0,8.774],[-8.774,0]],"o":[[0,8.774],[-8.774,0],[0,-8.774],[8.774,0]],"v":[[25.5,-84.537],[9.613,-68.65],[-6.274,-84.537],[9.613,-100.424]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,-11.72],[13.247,0],[0,11.72],[-13.247,0]],"o":[[0,11.72],[-13.247,0],[0,-11.72],[13.247,0]],"v":[[33.09,-69.693],[9.103,-48.473],[-14.883,-69.693],[9.103,-90.913]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,-24.735],[24.735,0],[0,24.735],[-24.735,0]],"o":[[0,24.735],[-24.735,0],[0,-24.735],[24.735,0]],"v":[[56.4,-84.537],[11.613,-39.75],[-33.174,-84.537],[11.613,-129.324]],"c":true}]},{"t":25,"s":[{"i":[[0,-26.924],[26.924,0],[0,26.924],[-26.924,0]],"o":[[0,26.924],[-26.924,0],[0,-26.924],[26.924,0]],"v":[[60.363,-84.537],[11.613,-35.787],[-37.137,-84.537],[11.613,-133.287]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":9,"s":[11.336,13.774,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[11.336,18.274,0],"to":[0,0,0],"ti":[0,0,0]},{"t":25,"s":[11.336,11.774,0]}],"ix":2},"a":{"a":0,"k":[11.336,10.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.875,44.36],[0.012,11.61]],"o":[[0,0],[-0.348,-17.658],[-0.016,-14.955]],"v":[[-33.583,109.659],[-40.875,50.64],[-45.012,-17.11]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-7.48,30.25],[-7.964,9.648]],"o":[[0,0],[2.73,-11.373],[7.228,-11.196]],"v":[[-57.163,97.688],[-57.996,36.651],[-42.036,0.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-14.611,30.379],[-23.925,1.795]],"o":[[0,0],[7.389,-12.121],[13.171,-8.112]],"v":[[-77.526,99.758],[-81.889,29.906],[-41.075,4.99]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-27.718,19.589],[-10.136,-1.028]],"o":[[0,0],[21.782,-16.411],[19.114,-5.028]],"v":[[-107.888,77.829],[-93.782,16.161],[-42.114,8.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[-27.325,4.127],[-14.975,-3.949]],"o":[[0,0],[20.334,-3.734],[35.444,0.066]],"v":[[-136.225,32.858],[-90.834,7.893],[-38.525,10.472]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-27.129,-3.603],[-14.269,-4.157]],"o":[[0,0],[19.61,2.605],[43.609,2.613]],"v":[[-147.393,-5.627],[-89.61,-2.992],[-38.231,9.77]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-38.825,-22.336],[-19.04,-2.789]],"o":[[0,0],[14.675,9.164],[62.76,8.586]],"v":[[-144.801,-73.381],[-91.175,-7.197],[-37.96,10.757]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[-46.458,-35.583],[-19.738,-3.567]],"o":[[0,0],[8.352,6.397],[79.039,14.286]],"v":[[-142.333,-130.341],[-88.062,-16.235],[-40.512,7.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.583,25.777],[4.5,19.11]],"o":[[0,0],[-0.238,-10.518],[-18.41,-78.181]],"v":[[63,101.64],[63.167,54.973],[56,-16.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[2.455,25.149],[6.868,13.265]],"o":[[0,0],[-0.66,-9.745],[-29.265,-65.813]],"v":[[68.548,94.42],[70.368,48.723],[56.521,2.29]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.495,10.995],[15.537,39.692],[11.504,1.535]],"o":[[14.034,-13.424],[-3.378,-8.551],[-47.075,-45.52]],"v":[[79.466,115.674],[91.463,38.058],[62.496,12.174]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-14.54,10.097],[25.244,37.544],[12.466,1.965]],"o":[[15.872,-11.198],[-4.741,-7.952],[-56.007,-35.342]],"v":[[88.294,117.357],[93.089,33.781],[63.701,13.504]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-16.063,9.648],[30.097,36.471],[11.946,0.457]],"o":[[16.791,-10.086],[-5.422,-7.653],[-60.473,-30.253]],"v":[[92.709,118.199],[93.903,31.642],[61.554,13.67]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-5.509,3.309],[41.86,36.38],[11.653,0.923]],"o":[[5.759,-3.459],[-7.371,-6.796],[-73.243,-15.702]],"v":[[124.602,127.851],[94.405,26.111],[62.332,13.5]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[141.25,132.89],[94.667,23.223],[63.5,11.89]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[140,128.89],[94.667,23.848],[63.5,11.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":37,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Body 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[266.676,398.378,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[266.676,387.378,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[266.676,392.378,0]}],"ix":2},"a":{"a":0,"k":[10.676,136.378,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[{"i":[[-12.288,0.098],[-12.498,-0.987],[0,0],[3.339,-1.222],[4.897,-9.213],[22.369,0],[7.456,13.82],[-1.892,54.808]],"o":[[8.847,-0.071],[35.724,2.82],[24.706,0],[0,0],[-7.456,13.82],[-22.369,0],[-4.897,-9.213],[-12.353,-3.008]],"v":[[-46.407,7.071],[-18.334,9.585],[61.794,9.679],[70.141,28.952],[68.805,121.176],[13.161,136.5],[-42.484,121.176],[-47.047,25.191]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[20.1,0],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.7,14.7],[-20.1,0],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.2,120.2],[13.2,136.5],[-36.8,120.2],[-40.9,18.1]],"c":true}]},{"t":34,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[24.175,0.094],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.669,14.144],[-20.1,-0.078],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.044,119.606],[13.2,136.156],[-36.8,120.2],[-40.9,18.1]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Line Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[264.975,247.096,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[260.475,307.096,0]}],"ix":2},"a":{"a":0,"k":[-0.05,-2.95,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-98.152,-101.129],[98.052,95.229]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[0]},{"t":12,"s":[45]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[100]},{"t":12,"s":[69]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[260.467,231.7,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[255.967,270.7,0]}],"ix":2},"a":{"a":0,"k":[-0.033,-25.3,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-4.2,9.7],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[32.121,59.821],[34.778,62.478],[51.9,79.6],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-8.362,11.23],[0,0],[0,0],[3.762,-1.859],[8.142,-0.264],[0.777,8.157],[0.156,0.224],[1.314,3.134],[0.224,1.943],[0,0],[-0.582,7.711]],"o":[[0,0],[0,0],[0,0],[-19.321,9.547],[-28.463,-1.013],[-0.005,-0.156],[-0.156,-3.776],[0.062,-2.373],[0,0],[-0.045,-4.946],[0,-7.124]],"v":[[-60.638,-49.681],[29.345,35.402],[55.841,63.676],[71.571,79.252],[-31.443,86.874],[-68.777,71.642],[-68.75,71.544],[-67.843,58.677],[-67.812,51.954],[-68.27,48.401],[-68.748,-3.168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-1.323,3.262],[0,0],[0,0],[6.275,-3.565],[14.005,-0.455],[0.542,0.356],[1.713,1.084],[2.26,5.391],[0.385,2.046],[0,0],[-1.001,13.264]],"o":[[0,0],[0,0],[0,0],[-4.624,2.627],[-40.891,-1.743],[0.542,-0.578],[-4.048,-2.564],[-0.758,-3.145],[0,0],[-0.077,-8.507],[0,-3.901]],"v":[[-57.609,-43.228],[22.617,23.841],[64.126,70.129],[61.225,80.722],[7.766,92.111],[-48.042,81.338],[-48.213,81.277],[-57.218,71.044],[-58.46,62.937],[-59.249,56.826],[-60.071,5.063]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-0.309,0.762],[0,0],[0,0],[4.568,-5.804],[17.516,-1.439],[9.846,0.175],[5.202,1.836],[3.057,6.91],[0.521,1.988],[0,0],[-1.354,17]],"o":[[0,0],[0,0],[0,0],[-4.183,5.585],[-15.234,1.811],[-9.592,-0.227],[-5.947,-2.247],[-1.448,-3.573],[0,0],[-0.104,-10.903],[0,-0.911]],"v":[[-52.53,-28.79],[11.994,25.222],[67.477,74.382],[64.512,86.679],[25.234,99.127],[-10.469,99.989],[-34.862,95.528],[-48.272,82.948],[-50.586,74.249],[-51.653,66.417],[-52.765,18.153]],"c":true}]},{"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[4.244,-6.392],[19.61,-0.621],[11.618,0.122],[6.498,1.941],[3.306,7.372],[0.563,1.97],[0,0],[-1.464,18.138]],"o":[[0,0],[0,0],[0,0],[-4.244,6.392],[-5.683,0.18],[-11.618,-0.122],[-6.595,-1.969],[-1.661,-3.704],[0,0],[-0.113,-11.633],[0,0]],"v":[[-46.474,-23.891],[12.383,25.893],[71.24,75.677],[67.655,88.306],[34.655,101.868],[5.941,102.334],[-23.997,99.619],[-42.777,86.574],[-45.423,77.695],[-46.577,69.338],[-47.779,22.141]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[10.111,-11.873],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-62.4,-65.9],[-19.568,-22.503],[-18.761,-21.685],[79.699,78.074],[80.6,78.975]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.157,8.024],[0,0],[0,1.922],[0,0],[24.177,-0.77],[0,0],[9,0],[0,0],[5.709,0.272],[0,0],[-0.26,-17.504],[0,0],[0,0],[0,0],[-7.459,5.266]],"o":[[0,0],[-0.323,-1.991],[0,0],[1.096,-24.22],[0,0],[-9.573,2.118],[0,0],[-9.1,0],[0,0],[-6.6,1.142],[0,0],[0,0],[0,0],[0,0],[3.993,-2.819]],"v":[[71.843,56.59],[71.106,36.657],[70.583,30.009],[69.845,-21.987],[38.823,-52.309],[28.073,-50.661],[3.062,-46.678],[1.048,-46.86],[-26.209,-52.017],[-31.319,-53.002],[-58.24,-38.393],[-25.737,-8.451],[-22.131,-4.064],[59.51,80.628],[65.709,78.296]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0.094,4.576],[0,0],[0,1.828],[0,0],[20.355,-2.421],[0,0],[9,0],[0,0],[6.507,0.351],[0,0],[2.835,-13.717],[0,0],[0,0],[0,0],[-1.742,1.23]],"o":[[0,0],[-0.014,-2.094],[0,0],[-0.871,-19.045],[0,0],[-6.547,0.878],[0,0],[-9.1,0],[0,0],[-3.266,-0.12],[0,0],[0,0],[0,0],[0,0],[1.239,-8.208]],"v":[[69.031,57.556],[68.76,39.315],[68.408,33.605],[67.871,-20.767],[25.645,-36.641],[23.135,-36.246],[-0.875,-35.181],[-1.998,-35.415],[-22.891,-36.675],[-31.934,-38.285],[-52.647,-28.157],[-24.554,-1.976],[-21.081,1.4],[63.583,76.467],[67.733,76.517]],"c":true}]},{"t":12,"s":[{"i":[[0.075,3.525],[0,0],[0,1.8],[0,0],[24.798,0.638],[0,0],[9.018,0],[0,0],[6.763,0.375],[0,0],[-1.858,-4.475],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.08,-2.125],[0,0],[1.607,-13.525],[0,0],[-5.636,0.5],[0,0],[-9.118,0],[0,0],[-2.254,-0.505],[0,0],[0,0],[0,0],[0,0],[0.401,-9.85]],"v":[[71.166,57.85],[71.036,40.125],[70.735,34.7],[70.643,-14.975],[22.897,-23.388],[22.897,-23.375],[0.453,-23.525],[0.253,-23.775],[-17.431,-24.5],[-24.068,-24.87],[-46.892,-24.4],[-21.382,-0.003],[-17.943,3.065],[67.559,75.199],[71.091,75.975]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Bottom Bell","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0,136.7,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[12,91.7,0]}],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[-5.125,120.225],[20.6,99.05],[17.3,94.85],[-26.4,94.85],[-30.7,98.65]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-19.183,0.659],[-2.93,11.67],[1.758,0],[29.45,0],[-0.296,-1.263]],"o":[[23.128,-0.795],[2.186,-3.703],[-15.091,0],[-1.319,0],[2.784,11.767]],"v":[[-2.487,124.469],[35.205,101.877],[29.62,99.793],[-34.409,99.793],[-40.709,103.488]],"c":true}]},{"t":12,"s":[{"i":[[-28.151,0],[-4.298,11.184],[2.579,0],[43.194,0],[-0.438,-1.209]],"o":[[27.506,0],[0.43,-1.305],[-22.134,0],[-1.934,0],[4.083,11.277]],"v":[[-0.461,137.5],[54.82,117.764],[47.729,113.85],[-46.18,113.85],[-55.42,117.392]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0}]},{"id":"comp_8","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 2","refId":"comp_9","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[30,30,0],"to":[0,0,0],"ti":[0,0,0]},{"t":10,"s":[28.282,29.857,0]}],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[13.6,13.6,100]},{"t":10,"s":[13.5,13.5,100]}],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":37,"st":0,"bm":0}]},{"id":"comp_9","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Head 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.613,-101.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[11.613,-50.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[11.613,-87.537,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36,"s":[11.113,-83.037,0]}],"ix":2},"a":{"a":0,"k":[11.613,-84.537,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,-8.774],[8.774,0],[0,8.774],[-8.774,0]],"o":[[0,8.774],[-8.774,0],[0,-8.774],[8.774,0]],"v":[[25.5,-84.537],[9.613,-68.65],[-6.274,-84.537],[9.613,-100.424]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,-11.72],[13.247,0],[0,11.72],[-13.247,0]],"o":[[0,11.72],[-13.247,0],[0,-11.72],[13.247,0]],"v":[[33.09,-69.693],[9.103,-48.473],[-14.883,-69.693],[9.103,-90.913]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,-24.735],[24.735,0],[0,24.735],[-24.735,0]],"o":[[0,24.735],[-24.735,0],[0,-24.735],[24.735,0]],"v":[[56.4,-84.537],[11.613,-39.75],[-33.174,-84.537],[11.613,-129.324]],"c":true}]},{"t":25,"s":[{"i":[[0,-26.924],[26.924,0],[0,26.924],[-26.924,0]],"o":[[0,26.924],[-26.924,0],[0,-26.924],[26.924,0]],"v":[[60.363,-84.537],[11.613,-35.787],[-37.137,-84.537],[11.613,-133.287]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":37,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":9,"s":[11.336,13.774,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[11.336,18.274,0],"to":[0,0,0],"ti":[0,0,0]},{"t":25,"s":[11.336,11.774,0]}],"ix":2},"a":{"a":0,"k":[11.336,10.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.875,44.36],[0.012,11.61]],"o":[[0,0],[-0.348,-17.658],[-0.016,-14.955]],"v":[[-33.583,109.659],[-40.875,50.64],[-45.012,-17.11]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-7.48,30.25],[-7.964,9.648]],"o":[[0,0],[2.73,-11.373],[7.228,-11.196]],"v":[[-57.163,97.688],[-57.996,36.651],[-42.036,0.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-14.611,30.379],[-23.925,1.795]],"o":[[0,0],[7.389,-12.121],[13.171,-8.112]],"v":[[-77.526,99.758],[-81.889,29.906],[-41.075,4.99]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-27.718,19.589],[-10.136,-1.028]],"o":[[0,0],[21.782,-16.411],[19.114,-5.028]],"v":[[-107.888,77.829],[-93.782,16.161],[-42.114,8.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[-27.325,4.127],[-14.975,-3.949]],"o":[[0,0],[20.334,-3.734],[35.444,0.066]],"v":[[-136.225,32.858],[-90.834,7.893],[-38.525,10.472]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-27.129,-3.603],[-14.269,-4.157]],"o":[[0,0],[19.61,2.605],[43.609,2.613]],"v":[[-147.393,-5.627],[-89.61,-2.992],[-38.231,9.77]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-38.825,-22.336],[-19.04,-2.789]],"o":[[0,0],[14.675,9.164],[62.76,8.586]],"v":[[-144.801,-73.381],[-91.175,-7.197],[-37.96,10.757]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[-46.458,-35.583],[-19.738,-3.567]],"o":[[0,0],[8.352,6.397],[79.039,14.286]],"v":[[-142.333,-130.341],[-88.062,-16.235],[-40.512,7.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.583,25.777],[4.5,19.11]],"o":[[0,0],[-0.238,-10.518],[-18.41,-78.181]],"v":[[63,101.64],[63.167,54.973],[56,-16.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[2.455,25.149],[6.868,13.265]],"o":[[0,0],[-0.66,-9.745],[-29.265,-65.813]],"v":[[68.548,94.42],[70.368,48.723],[56.521,2.29]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.495,10.995],[15.537,39.692],[11.504,1.535]],"o":[[14.034,-13.424],[-3.378,-8.551],[-47.075,-45.52]],"v":[[79.466,115.674],[91.463,38.058],[62.496,12.174]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-14.54,10.097],[25.244,37.544],[12.466,1.965]],"o":[[15.872,-11.198],[-4.741,-7.952],[-56.007,-35.342]],"v":[[88.294,117.357],[93.089,33.781],[63.701,13.504]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-16.063,9.648],[30.097,36.471],[11.946,0.457]],"o":[[16.791,-10.086],[-5.422,-7.653],[-60.473,-30.253]],"v":[[92.709,118.199],[93.903,31.642],[61.554,13.67]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-5.509,3.309],[41.86,36.38],[11.653,0.923]],"o":[[5.759,-3.459],[-7.371,-6.796],[-73.243,-15.702]],"v":[[124.602,127.851],[94.405,26.111],[62.332,13.5]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[141.25,132.89],[94.667,23.223],[63.5,11.89]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[140,128.89],[94.667,23.848],[63.5,11.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":9,"op":37,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Body 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[266.676,398.378,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[266.676,387.378,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[266.676,392.378,0]}],"ix":2},"a":{"a":0,"k":[10.676,136.378,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[{"i":[[-12.288,0.098],[-12.498,-0.987],[0,0],[3.339,-1.222],[4.897,-9.213],[22.369,0],[7.456,13.82],[-1.892,54.808]],"o":[[8.847,-0.071],[35.724,2.82],[24.706,0],[0,0],[-7.456,13.82],[-22.369,0],[-4.897,-9.213],[-12.353,-3.008]],"v":[[-46.407,7.071],[-18.334,9.585],[61.794,9.679],[70.141,28.952],[68.805,121.176],[13.161,136.5],[-42.484,121.176],[-47.047,25.191]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[20.1,0],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.7,14.7],[-20.1,0],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.2,120.2],[13.2,136.5],[-36.8,120.2],[-40.9,18.1]],"c":true}]},{"t":34,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[24.175,0.094],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.669,14.144],[-20.1,-0.078],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.044,119.606],[13.2,136.156],[-36.8,120.2],[-40.9,18.1]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"EXAMPLE ON","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[256.462,259.5,0],"ix":2},"a":{"a":0,"k":[-0.038,1.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.1,0],[0,0],[0,-9.1],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[9,0],[0,0],[0,0],[0,0],[0,0],[0,-9.1]],"v":[[-1.6,-115.5],[-0.4,-115.5],[16,-99.1],[16,-89.5],[16,-89.5],[-18,-89.5],[-18,-99.1]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.2]],"v":[[0,118.5],[25.6,96.7],[22.3,92.5],[-21.4,92.5],[-25.7,96.3]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.8],[0,0],[0,0],[36.4,8.6],[3.4,0],[5.9,-0.1],[0,-38.8],[0,0],[1.2,-1.3],[0,0],[0,0],[-11.3,0],[0,0],[8.1,7.9],[0,0]],"o":[[0,0],[0,0],[0,-38.6],[-6.7,-0.2],[-3,0],[-36.5,8.6],[0,0],[0,1.8],[0,0],[0,0],[-8,7.9],[0,0],[11.3,0],[0,0],[-1.1,-1.3]],"v":[[76.4,35.6],[76.4,-15.7],[76.4,-15.7],[14.3,-93.3],[-0.8,-93.5],[-14.2,-93.3],[-76.3,-15.7],[-76.3,35.6],[-78.1,40.4],[-92.8,57],[-92.8,57],[-81.5,78.5],[81.3,78.5],[92.7,57],[78.1,40.4]],"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":[100,100],"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":"Combined-Shape","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[261.217,231.2,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[255.967,270.7,0]}],"ix":2},"a":{"a":0,"k":[-0.033,-25.3,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-11.475,14.325],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-66.9,-60.7],[52.121,57.296],[54.778,59.953],[70.15,79.575],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-8.362,11.23],[0,0],[0,0],[3.762,-1.859],[8.142,-0.264],[0.62,12.856],[0.156,0.224],[1.314,3.134],[0.224,1.943],[0,0],[-0.582,7.711]],"o":[[0,0],[0,0],[0,0],[-19.321,9.547],[-26.964,1.125],[-0.005,-0.156],[-1.406,-14.295],[0.062,-2.373],[0,0],[-0.045,-4.946],[0,-7.124]],"v":[[-60.638,-49.681],[29.345,35.402],[55.841,63.676],[71.571,79.252],[-31.443,86.874],[-70.777,71.892],[-71,70.044],[-67.748,45.427],[-67.717,38.704],[-68.176,35.151],[-68.748,-3.168]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-1.323,3.262],[0,0],[0,0],[6.275,-3.565],[14.005,-0.455],[0.542,0.356],[1.713,1.084],[2.26,5.391],[0.385,2.046],[0,0],[-1.001,13.264]],"o":[[0,0],[0,0],[0,0],[-4.624,2.627],[-40.891,-1.743],[0.542,-0.578],[-4.048,-2.564],[-0.758,-3.145],[0,0],[-0.077,-8.507],[0,-3.901]],"v":[[-57.609,-43.228],[22.617,23.841],[64.126,70.129],[61.225,80.722],[7.766,92.111],[-48.042,81.338],[-48.213,81.277],[-57.218,71.044],[-58.46,62.937],[-59.249,56.826],[-60.071,5.063]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-0.309,0.762],[0,0],[0,0],[4.568,-5.804],[17.516,-1.439],[9.846,0.175],[5.202,1.836],[3.057,6.91],[0.521,1.988],[0,0],[-1.354,17]],"o":[[0,0],[0,0],[0,0],[-4.183,5.585],[-15.234,1.811],[-9.592,-0.227],[-5.947,-2.247],[-1.448,-3.573],[0,0],[-0.104,-10.903],[0,-0.911]],"v":[[-52.53,-28.79],[11.994,25.222],[67.477,74.382],[64.512,86.679],[25.234,99.127],[-10.469,99.989],[-34.862,95.528],[-48.272,82.948],[-50.586,74.249],[-51.653,66.417],[-52.765,18.153]],"c":true}]},{"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[4.095,-6.22],[20.07,-1.559],[12.041,0.281],[8.085,2.941],[3.171,6.676],[0.562,1.97],[0,0],[-1.461,18.138]],"o":[[0,0],[0,0],[0,0],[-4.095,6.221],[-5.657,0.44],[-12.041,-0.281],[-6.457,-2.348],[-1.741,-3.665],[0,0],[-0.112,-11.633],[0,0]],"v":[[-46.983,-24.891],[12.039,25.393],[71.061,75.677],[67.888,87.728],[34.61,102.118],[5.478,102.841],[-27.296,98.494],[-42.796,86.574],[-45.437,77.695],[-46.589,69.338],[-47.789,22.141]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[13.525,-18.6],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-68.65,-58.275],[-25.568,-8.753],[-24.761,-7.935],[67.699,79.699],[80.6,78.975]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0.157,8.024],[0,0],[0,1.922],[0,0],[24.177,-0.77],[0,0],[9,0],[0,0],[5.709,0.272],[0,0],[-0.26,-17.504],[0,0],[0,0],[0,0],[-7.459,5.266]],"o":[[0,0],[-0.323,-1.991],[0,0],[1.096,-24.22],[0,0],[-9.573,2.118],[0,0],[-9.1,0],[0,0],[-6.6,1.142],[0,0],[0,0],[0,0],[0,0],[3.993,-2.819]],"v":[[71.843,56.59],[71.106,36.657],[70.583,30.009],[69.845,-21.987],[38.823,-52.309],[28.073,-50.661],[3.062,-46.678],[1.048,-46.86],[-26.209,-52.017],[-31.319,-53.002],[-58.24,-38.393],[-25.737,-8.451],[-22.131,-4.064],[59.51,80.628],[65.709,78.296]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0.094,4.576],[0,0],[0,1.828],[0,0],[20.355,-2.421],[0,0],[9,0],[0,0],[6.507,0.351],[0,0],[2.835,-13.717],[0,0],[0,0],[0,0],[-1.742,1.23]],"o":[[0,0],[-0.014,-2.094],[0,0],[-0.871,-19.045],[0,0],[-6.547,0.878],[0,0],[-9.1,0],[0,0],[-3.266,-0.12],[0,0],[0,0],[0,0],[0,0],[1.239,-8.208]],"v":[[69.031,57.556],[68.76,39.315],[68.408,33.605],[67.871,-20.767],[25.645,-36.641],[23.135,-36.246],[-0.875,-35.181],[-1.998,-35.415],[-22.891,-36.675],[-31.934,-38.285],[-52.647,-28.157],[-24.554,-1.976],[-21.081,1.4],[63.583,76.467],[67.733,76.517]],"c":true}]},{"t":12,"s":[{"i":[[0.075,3.525],[0,0],[0,1.8],[0,0],[24.75,0.638],[0,0],[9,0],[0,0],[6.75,0.375],[0,0],[-2.6,-5.6],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.08,-2.125],[0,0],[1.85,-14.4],[0,0],[-5.625,0.5],[0,0],[-9.1,0],[0,0],[-2.25,-0.505],[0,0],[0,0],[0,0],[0,0],[0.4,-9.85]],"v":[[70.925,57.85],[70.795,40.125],[70.495,34.7],[71.4,-15.1],[22.75,-23.388],[22.75,-23.375],[0.35,-23.525],[0.15,-23.775],[-17.5,-24.5],[-23.5,-24.995],[-47.4,-25.4],[-21.443,-0.003],[-18.011,3.065],[67.387,75.199],[70.912,75.975]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":13,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Bottom Bell","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0,137.7,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[12,91.7,0]}],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[-5.125,120.225],[20.6,99.05],[17.3,94.85],[-26.4,94.85],[-30.7,98.65]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-19.183,0.659],[-2.93,11.67],[1.758,0],[29.45,0],[-0.296,-1.263]],"o":[[23.128,-0.795],[2.186,-3.703],[-15.091,0],[-1.319,0],[2.784,11.767]],"v":[[-2.487,124.469],[35.205,101.877],[29.62,99.793],[-34.409,99.793],[-40.709,103.488]],"c":true}]},{"t":12,"s":[{"i":[[-28.151,0],[-4.298,11.184],[2.579,0],[43.194,0],[-0.438,-1.209]],"o":[[27.506,0],[0.43,-1.305],[-22.134,0],[-1.934,0],[4.083,11.277]],"v":[[-0.461,137.5],[54.82,117.764],[47.729,113.85],[-46.18,113.85],[-55.42,117.392]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":10,"st":0,"bm":0}]},{"id":"comp_10","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_11","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":35,"st":0,"bm":0}]},{"id":"comp_11","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Line","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.67,"y":1},"o":{"x":0.33,"y":0},"t":6,"s":[1.687,-2.898,0],"to":[0,0,0],"ti":[0,0,0]},{"t":14,"s":[3.687,-6.898,0]}],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":4,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-109.713,-119.559],[116.913,105.559]],"c":false}]},{"t":27,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":6,"s":[28]},{"t":14,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":6,"s":[71]},{"t":14,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":6,"op":35,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Head","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":35,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Arc L","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.31,"y":0},"t":14,"s":[-3.75,69.094,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[-3.75,88.094,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[-3.75,84.5,0]}],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.29,"y":0},"t":18,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.723],"y":[0.572]},"o":{"x":[0.4],"y":[0]},"t":5,"s":[15]},{"i":{"x":[0.695],"y":[0.627]},"o":{"x":[0.368],"y":[0.45]},"t":7,"s":[29]},{"i":{"x":[0.323],"y":[1]},"o":{"x":[0.222],"y":[0.388]},"t":8,"s":[37.868]},{"t":18,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.723],"y":[1.14]},"o":{"x":[0.4],"y":[0]},"t":5,"s":[12]},{"i":{"x":[0.695],"y":[0.945]},"o":{"x":[0.368],"y":[0.061]},"t":7,"s":[17.559]},{"i":{"x":[0.652],"y":[0.857]},"o":{"x":[0.357],"y":[0.122]},"t":8,"s":[9]},{"i":{"x":[0.426],"y":[1]},"o":{"x":[0.183],"y":[-2.717]},"t":10,"s":[0]},{"t":18,"s":[0]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":7,"op":35,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc R","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.29,"y":0},"t":18,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":8,"s":[99]},{"t":18,"s":[0]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":11,"op":35,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.31,"y":0},"t":14,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.15,64],[-1.85,64],[9.55,75.4],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.55,75.4]],"c":true}]},{"i":{"x":0.5,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[{"i":[[-6.3,0],[0,0],[0,-2.846],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-2.846]],"v":[[-5.2,84.75],[-1.9,84.75],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"c":true}]},{"t":34,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":10,"op":35,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[259.064,256.028,0],"to":[0,0,0],"ti":[0,0,0]},{"t":14,"s":[253.564,241.028,0]}],"ix":2},"a":{"a":0,"k":[-1.88,-0.927,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[-16.045,13.245],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-61.4,-66.7],[44.371,41.071],[47.028,43.728],[73.9,79.64],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-4.254,9.376],[0,0],[0,0],[0,0],[6.23,1.972],[-1.412,7.008],[0,0],[0,0],[0,1.507],[0.298,2.165],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-9.876,-1.385],[0,0],[0,0],[0.238,-1.694],[0,0],[-0.85,-6.164],[0.044,-6.601]],"v":[[-57.532,-45.068],[21.114,38.993],[23.375,41.218],[43.195,62.771],[-50.105,63.383],[-67.187,44.549],[-67.717,44.298],[-64.273,32.174],[-64.047,26.764],[-64.187,23.769],[-63.385,-11.302]],"c":true}]},{"t":14,"s":[{"i":[[-0.557,1.753],[0,0],[0,0],[0,0],[12.242,3.875],[4.463,6.051],[0,0],[0,0],[0,1.225],[0.586,4.254],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-8.598,-2.722],[0,0],[0,0],[-0.69,-2.075],[0,0],[-1.67,-12.113],[0.086,-1.777]],"v":[[-48.888,-16.333],[2.602,35.024],[4.48,36.832],[14.055,46.983],[-15.561,47.733],[-39.407,31.182],[-39.266,30.978],[-44.13,22.682],[-46.406,17.666],[-48.156,11.291],[-49.281,-8.366]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[12.143,-14.492],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-63.338,-64.963],[-22.443,-19.878],[-21.636,-19.06],[71.262,79.637],[80.6,78.975]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[5.809,9.358],[-0.56,1.677],[0,1.8],[0,0],[30.628,11.768],[0,0],[10.446,-0.187],[0,0],[1.845,-5.655],[0,0],[2.161,-13.67],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.175,-1.881],[0,0],[0.112,-46.447],[0,0],[-2.26,-5.718],[0,0],[-11.578,-0.155],[0,0],[-27.545,10.149],[0,0],[0,0],[0,0],[0,0],[6.72,-2.318]],"v":[[62.53,35.324],[56.968,24.754],[57.164,18.109],[57.299,-17.272],[16.524,-101.941],[16.174,-105.284],[-4.079,-116.658],[-4.828,-116.69],[-26.225,-104.298],[-27.116,-100.217],[-56.572,-52.898],[-23.746,-18.806],[-23.05,-17.988],[50.468,61.936],[58.016,59.693]],"c":true}]},{"t":14,"s":[{"i":[[-2.182,4.07],[-1.1,3.295],[0,1.8],[0,0],[25.933,14.308],[0,0],[11.842,-0.367],[0,0],[3.626,-2.33],[0,0],[-2.875,-21.055],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0.815,-2.442],[0,0],[0.221,-54.605],[0,0],[-4.442,-2.455],[0,0],[-13.97,-0.305],[0,0],[-19.874,13.29],[0,0],[0,0],[0,0],[0,0],[2.995,-3.055]],"v":[[36.363,27.6],[40.655,19.625],[42.779,11.2],[43.21,-19.85],[21.372,-111.763],[20.684,-112.312],[-3.286,-118.838],[-3.6,-118.9],[-29.821,-110.375],[-31.571,-108.995],[-48.57,-47.15],[-22.056,-18.753],[-21.467,-17.935],[30.402,32.574],[31.31,33.225]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Bottom Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[255.445,394.655,0],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[1,119.605],[26.6,97.805],[23.3,93.605],[-20.4,93.605],[-24.7,97.405]],"c":true}]},{"t":10,"s":[{"i":[[-8.162,0],[0.625,15.53],[0.51,0.546],[4.907,-5.5],[0.14,-2.002]],"o":[[7.975,0],[0.125,-2.157],[-6.069,-6.5],[-0.373,0.418],[-1.164,16.646]],"v":[[-3.269,123.85],[10.181,105.515],[9.694,64.545],[-15.782,65.045],[-16.531,104.149]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":10,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"EXAMPLE ON","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-4.483,2.545,0],"ix":2},"a":{"a":0,"k":[-0.038,1.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.1,0],[0,0],[0,-9.1],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[9,0],[0,0],[0,0],[0,0],[0,0],[0,-9.1]],"v":[[-1.6,-115.5],[-0.4,-115.5],[16,-99.1],[16,-89.5],[16,-89.5],[-18,-89.5],[-18,-99.1]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.2]],"v":[[0,118.5],[25.6,96.7],[22.3,92.5],[-21.4,92.5],[-25.7,96.3]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.8],[0,0],[0,0],[36.4,8.6],[3.4,0],[5.9,-0.1],[0,-38.8],[0,0],[1.2,-1.3],[0,0],[0,0],[-11.3,0],[0,0],[8.1,7.9],[0,0]],"o":[[0,0],[0,0],[0,-38.6],[-6.7,-0.2],[-3,0],[-36.5,8.6],[0,0],[0,1.8],[0,0],[0,0],[-8,7.9],[0,0],[11.3,0],[0,0],[-1.1,-1.3]],"v":[[76.4,35.6],[76.4,-15.7],[76.4,-15.7],[14.3,-93.3],[-0.8,-93.5],[-14.2,-93.3],[-76.3,-15.7],[-76.3,35.6],[-78.1,40.4],[-92.8,57],[-92.8,57],[-81.5,78.5],[81.3,78.5],[92.7,57],[78.1,40.4]],"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":[100,100],"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":"Combined-Shape","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":2,"st":0,"bm":0}]},{"id":"comp_12","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_13","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":29,"st":0,"bm":0}]},{"id":"comp_13","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"EXAMPLE ON","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.983,2.545,0],"ix":2},"a":{"a":0,"k":[-0.038,1.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.1,0],[0,0],[0,-9.1],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[9,0],[0,0],[0,0],[0,0],[0,0],[0,-9.1]],"v":[[-1.6,-115.5],[-0.4,-115.5],[16,-99.1],[16,-89.5],[16,-89.5],[-18,-89.5],[-18,-99.1]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.2]],"v":[[0,118.5],[25.6,96.7],[22.3,92.5],[-21.4,92.5],[-25.7,96.3]],"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.8],[0,0],[0,0],[36.4,8.6],[3.4,0],[5.9,-0.1],[0,-38.8],[0,0],[1.2,-1.3],[0,0],[0,0],[-11.3,0],[0,0],[8.1,7.9],[0,0]],"o":[[0,0],[0,0],[0,-38.6],[-6.7,-0.2],[-3,0],[-36.5,8.6],[0,0],[0,1.8],[0,0],[0,0],[-8,7.9],[0,0],[11.3,0],[0,0],[-1.1,-1.3]],"v":[[76.4,35.6],[76.4,-15.7],[76.4,-15.7],[14.3,-93.3],[-0.8,-93.5],[-14.2,-93.3],[-76.3,-15.7],[-76.3,35.6],[-78.1,40.4],[-92.8,57],[-92.8,57],[-81.5,78.5],[81.3,78.5],[92.7,57],[78.1,40.4]],"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":[100,100],"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":"Combined-Shape","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":3,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Line Bell","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[-11.47,-25.859,0],"to":[0,0,0],"ti":[0,0,0]},{"t":17,"s":[5.03,-9.859,0]}],"ix":2},"a":{"a":0,"k":[-0.05,-2.95,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-98.152,-101.129],[98.052,95.229]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0]},{"t":17,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"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":[100,100],"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":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":29,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Bottom Bell","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,137.7,0],"ix":2},"a":{"a":0,"k":[0,137.7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-13.1,0],[-2,12],[1.2,0],[20.1,0],[-0.2,-1.3]],"o":[[12.8,0],[0.2,-1.4],[-10.3,0],[-0.9,0],[1.9,12.1]],"v":[[-4.5,119.6],[21.1,97.8],[17.8,93.6],[-25.9,93.6],[-30.2,97.4]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":29,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Bell","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[260.562,232.132,0],"ix":2},"a":{"a":0,"k":[0.12,-24.927,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":12,"s":[93,93,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":21,"s":[101,101,100]},{"t":28,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-7.545,13.495],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-68.9,-57.2],[46.687,58.223],[49.57,61.102],[68.15,79.655],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-5.872,11.598],[-1.72,-1.503],[-1.818,10.555],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[9.034,7.892],[6.962,6.261],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-73.235,-48.204],[-65.308,-41.244],[-37.924,-49.058],[74.965,79.428],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-5.872,11.598],[-1.681,-1.546],[-1.818,10.555],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[11.181,10.285],[6.962,6.261],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-73.235,-48.204],[-35.586,-11.586],[-5.934,-19.545],[74.965,79.428],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-5.036,10.649],[-2.391,-2.446],[-2.124,14.747],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[6.637,6.293],[10.443,9.392],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-73.817,-47.452],[-6.583,20.071],[22.942,7.689],[78.372,79.315],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-4.2,9.7],[-3.062,-3.39],[-2.43,18.938],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[4.241,4.695],[13.924,12.522],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[19.467,48.272],[48.098,35.753],[81.779,79.202],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-4.2,9.7],[-2.2,-2.106],[-1.62,12.626],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[9.752,9.336],[9.282,8.348],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[34.992,63.228],[69.333,53.948],[81.641,79.138],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"c":true}]},{"t":10,"s":[{"i":[[-4.2,9.7],[0,0],[0,0],[0,0],[0,0],[-7.5,8],[0,0],[0,0],[0,1.8],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-11.2,0],[0,0],[0,0],[1.2,-1.3],[0,0],[0,0],[0,-11.6]],"v":[[-74.4,-46.7],[32.121,59.821],[34.778,62.478],[51.9,79.6],[-85.9,79.6],[-97.5,58.4],[-97.2,58.1],[-82.6,41.5],[-80.8,36.7],[-80.8,36.7],[-80.8,-14.6]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[9.346,-16.6],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-69.215,-56.816],[-28.207,-15.716],[-27.434,-14.941],[66.835,79.54],[81.6,79.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[2.875,-7.688],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-55.392,-66.381],[-37.754,-49.074],[-39.423,-40.52],[73.962,79.404],[81.6,79.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[2.875,-7.688],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-55.392,-66.381],[-4.288,-18.099],[-3.284,-9.024],[73.962,79.404],[81.6,79.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[2.047,-7.688],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-56.464,-65.251],[-10.415,-18.43],[4.841,-14.706],[77.525,79.337],[81.6,79.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[1.218,-7.689],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8,-1.6]],"v":[[89.05,58.35],[73.795,39.75],[71.995,34.95],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-57.536,-64.121],[-15.752,-20.901],[36.667,21.906],[81.088,79.269],[81.6,79.1]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[4.182,-9.084],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[8.86,-1.585]],"v":[[88.883,58.433],[73.795,39.917],[71.995,35.117],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-59.157,-64.714],[-11.573,-25.425],[-12.451,-25.128],[71.59,57.475],[81.267,79.058]],"c":true}]},{"t":10,"s":[{"i":[[6.6,6.5],[0,0],[0,1.8],[0,0],[35.493,9.136],[0,0],[9,0],[0,0],[0,-9.1],[0,0],[10.111,-11.873],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-1.2,-1.3],[0,0],[0,-37.993],[0,0],[0,-9.1],[0,0],[-9.1,0],[0,0],[-16.061,4.493],[0,0],[0,0],[0,0],[0,0],[10.58,-1.555]],"v":[[88.55,58.6],[73.795,40.25],[71.995,35.45],[71.9,-14.6],[11.5,-91.763],[11.5,-98],[-4.9,-114.4],[-6.1,-114.4],[-22.5,-98],[-22.5,-91.12],[-62.4,-65.9],[-19.568,-22.503],[-18.761,-21.685],[79.699,78.074],[80.6,78.975]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":29,"st":0,"bm":0}]},{"id":"comp_14","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 2","refId":"comp_15","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[30,30,0],"to":[0,0,0],"ti":[0,0,0]},{"t":10,"s":[28.282,29.857,0]}],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[13.6,13.6,100]},{"t":10,"s":[13.5,13.5,100]}],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":37,"st":0,"bm":0}]},{"id":"comp_15","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Head 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.613,-101.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[11.613,-50.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[11.613,-86.537,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36,"s":[11.113,-83.037,0]}],"ix":2},"a":{"a":0,"k":[11.613,-84.537,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,-17.328],[25.612,0],[0,17.328],[-25.612,0]],"o":[[0,17.328],[-25.612,0],[0,-17.328],[25.612,0]],"v":[[54.039,-62.942],[7.664,-31.567],[-38.711,-62.942],[7.664,-94.317]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,-23.543],[25.081,0],[0,23.543],[-25.081,0]],"o":[[0,23.543],[-25.081,0],[0,-23.543],[25.081,0]],"v":[[55.47,-76.028],[10.057,-33.4],[-35.356,-76.028],[10.057,-118.656]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,-24.735],[24.735,0],[0,24.735],[-24.735,0]],"o":[[0,24.735],[-24.735,0],[0,-24.735],[24.735,0]],"v":[[56.4,-84.537],[11.613,-39.75],[-33.174,-84.537],[11.613,-129.324]],"c":true}]},{"t":25,"s":[{"i":[[0,-26.924],[26.924,0],[0,26.924],[-26.924,0]],"o":[[0,26.924],[-26.924,0],[0,-26.924],[26.924,0]],"v":[[60.363,-84.537],[11.613,-35.787],[-37.137,-84.537],[11.613,-133.287]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":37,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":9,"s":[11.336,13.774,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[11.336,18.274,0],"to":[0,0,0],"ti":[0,0,0]},{"t":25,"s":[11.336,11.774,0]}],"ix":2},"a":{"a":0,"k":[11.336,10.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.875,44.36],[0.012,11.61]],"o":[[0,0],[-0.348,-17.658],[-0.016,-14.955]],"v":[[-33.583,109.659],[-40.875,50.64],[-45.012,-17.11]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-7.48,30.25],[-7.964,9.648]],"o":[[0,0],[2.73,-11.373],[7.228,-11.196]],"v":[[-57.163,97.688],[-57.996,36.651],[-42.036,0.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-14.611,30.379],[-23.925,1.795]],"o":[[0,0],[7.389,-12.121],[13.171,-8.112]],"v":[[-77.526,99.758],[-81.889,29.906],[-41.075,4.99]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-27.718,19.589],[-10.136,-1.028]],"o":[[0,0],[21.782,-16.411],[19.114,-5.028]],"v":[[-107.888,77.829],[-93.782,16.161],[-42.114,8.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[-27.325,4.127],[-14.975,-3.949]],"o":[[0,0],[20.334,-3.734],[35.444,0.066]],"v":[[-136.225,32.858],[-90.834,7.893],[-38.525,10.472]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-27.129,-3.603],[-14.269,-4.157]],"o":[[0,0],[19.61,2.605],[43.609,2.613]],"v":[[-147.393,-5.627],[-89.61,-2.992],[-38.231,9.77]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-38.825,-22.336],[-19.04,-2.789]],"o":[[0,0],[14.675,9.164],[62.76,8.586]],"v":[[-144.801,-73.381],[-91.175,-7.197],[-37.96,10.757]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[-46.458,-35.583],[-19.738,-3.567]],"o":[[0,0],[8.352,6.397],[79.039,14.286]],"v":[[-142.333,-130.341],[-88.062,-16.235],[-40.512,7.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.583,25.777],[4.5,19.11]],"o":[[0,0],[-0.238,-10.518],[-18.41,-78.181]],"v":[[63,101.64],[63.167,54.973],[56,-16.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[2.455,25.149],[6.868,13.265]],"o":[[0,0],[-0.66,-9.745],[-29.265,-65.813]],"v":[[68.548,94.42],[70.368,48.723],[56.521,2.29]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.495,10.995],[15.537,39.692],[11.504,1.535]],"o":[[14.034,-13.424],[-3.378,-8.551],[-47.075,-45.52]],"v":[[79.466,115.674],[91.463,38.058],[62.496,12.174]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-14.54,10.097],[25.244,37.544],[12.466,1.965]],"o":[[15.872,-11.198],[-4.741,-7.952],[-56.007,-35.342]],"v":[[88.294,117.357],[93.089,33.781],[63.701,13.504]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-16.063,9.648],[30.097,36.471],[11.946,0.457]],"o":[[16.791,-10.086],[-5.422,-7.653],[-60.473,-30.253]],"v":[[92.709,118.199],[93.903,31.642],[61.554,13.67]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-5.509,3.309],[41.86,36.38],[11.653,0.923]],"o":[[5.759,-3.459],[-7.371,-6.796],[-73.243,-15.702]],"v":[[124.602,127.851],[94.405,26.111],[62.332,13.5]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[141.25,132.89],[94.667,23.223],[63.5,11.89]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[140,128.89],[94.667,23.848],[63.5,11.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Body 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[266.676,398.378,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[266.676,387.378,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[266.676,392.378,0]}],"ix":2},"a":{"a":0,"k":[10.676,136.378,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[{"i":[[-12.288,0.098],[-12.498,-0.987],[0,0],[3.339,-1.222],[4.897,-9.213],[22.369,0],[7.456,13.82],[-1.892,54.808]],"o":[[8.847,-0.071],[35.724,2.82],[24.706,0],[0,0],[-7.456,13.82],[-22.369,0],[-4.897,-9.213],[-12.353,-3.008]],"v":[[-46.407,7.071],[-18.334,9.585],[61.794,9.679],[70.141,28.952],[68.805,121.176],[13.161,136.5],[-42.484,121.176],[-47.047,25.191]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[20.1,0],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.7,14.7],[-20.1,0],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.2,120.2],[13.2,136.5],[-36.8,120.2],[-40.9,18.1]],"c":true}]},{"t":34,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[24.175,0.094],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.669,14.144],[-20.1,-0.078],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.044,119.606],[13.2,136.156],[-36.8,120.2],[-40.9,18.1]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"EXAMPLE ON","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.75,259.55,0],"ix":2},"a":{"a":0,"k":[0,3.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[45.3,0],[0,42]],"o":[[0,42],[-45.3,0],[0,0]],"v":[[82,8.4],[0,84.5],[-82,6.5]],"c":false},"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.4,0],[0,0],[0,-25.4],[0,0],[25.4,0],[0,0],[0,25.4],[0,0]],"o":[[0,0],[25.4,0],[0,0],[0,25.4],[0,0],[-25.4,0],[0,0],[0,-25.4]],"v":[[0,-117.5],[0,-117.5],[46,-71.5],[46,4.5],[0,50.5],[0,50.5],[-46,4.5],[-46,-71.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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-1.6,78.5],[1.7,78.5],[13.1,89.9],[13.1,113.2],[1.7,124.6],[-1.6,124.6],[-13,113.2],[-13,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Head Mic","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[-3.6,-33.55,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[9.4,60.45,0]}],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[11.45,-8.15],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[25.8,40.525],[-28.33,-5.73],[-49.7,-35.75],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-25.393,-0.391],[0.18,-19.791],[-0.243,-7.895],[14.056,-6.795],[0,0],[0,0],[0,0]],"o":[[28.416,0.506],[0,0],[0.243,14.68],[0,0],[0,0],[0,0],[0.052,-15.482]],"v":[[-6.434,-101.102],[47.056,-73.018],[47.664,4.298],[29.68,40.735],[-22.557,-15.51],[-55.36,-50.751],[-55.066,-73.828]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-25.388,-0.636],[-1.714,-14.258],[-0.395,-12.85],[18.974,-7.989],[0,0],[0,0],[0,0]],"o":[[30.309,0.824],[0,0],[0.395,16.737],[0,0],[0,0],[0,0],[2.421,-11.434]],"v":[[-4.713,-90.812],[49.978,-73.971],[50.966,4.171],[29.789,44.635],[-23.955,-14.43],[-58.974,-53.419],[-58.496,-75.289]],"c":true}]},{"t":12,"s":[{"i":[[-25.357,-0.966],[8.591,-7],[-0.599,-19.5],[30.67,-1.65],[0,0],[0,0],[0,0]],"o":[[32.818,1.25],[0,0],[0.599,19.5],[0,0],[0,0],[0,0],[7.976,-0.75]],"v":[[-7.528,-77],[56.909,-75.25],[58.407,4],[30.335,46.65],[-22.743,-12.98],[-60.7,-57],[-59.976,-81.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-11.6,9.325],[-25.4,0],[0,0],[0,0]],"v":[[-49.7,-36.15],[-27.202,-14.502],[-25.25,-12.55],[26.975,39.425],[-3.6,50.4],[-49.6,4.4],[-49.7,-31.65]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[6.435,0.16],[0,28.821],[0,0]],"o":[[0,0],[0,0],[0,0],[-13.044,10.194],[-29.138,-0.769],[0,0],[0,0]],"v":[[-55.579,-50.718],[-28.188,-26.309],[-26.057,-24.356],[32.281,39.246],[-10.39,49.691],[-55.329,4.4],[-55.38,-31.494]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[6.77,0.261],[0,30.968],[0,0]],"o":[[0,0],[0,0],[0,0],[-13.708,7.528],[-31.483,-1.252],[0,0],[0,0]],"v":[[-59.067,-54.691],[-31.67,-27.138],[-29.427,-25.186],[31.261,43.864],[-14.65,49.247],[-58.924,4.4],[-59.007,-41.593]],"c":true}]},{"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[7.214,0.396],[0,33.85],[0,0]],"o":[[0,0],[0,0],[0,0],[-14.586,3.95],[-34.597,-1.9],[0,0],[0,0]],"v":[[-60.625,-60.025],[-33.246,-28.252],[-30.856,-26.3],[32.633,46.55],[-17.287,48.65],[-60.625,4.4],[-60.75,-55.15]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":13,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Arc L","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.75,84.5,0],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[17.605,8.684],[-3.033,28.67]],"o":[[-19.95,7.814],[-28.895,-17.316],[0,0]],"v":[[24.45,79.436],[-39.105,77.316],[-76.362,0.644]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[11.789,14.347],[-5.217,19.073]],"o":[[-50.375,15.159],[-15.78,-19.203],[0,0]],"v":[[26.125,87.591],[-58.72,68.703],[-69.783,-3.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[3.96,23.737],[-17.216,17.641]],"o":[[-21.241,-5.148],[-3.54,-27.263],[0,0]],"v":[[-26.759,91.648],[-66.96,42.763],[-43.784,-26.641]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0.701,27.677],[-23.215,14.71]],"o":[[-17.607,-9.204],[-0.405,-15.984],[0,0]],"v":[[-32.893,81.704],[-69.201,29.323],[-41.785,-18.71]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[-6.372,14.388],[-16.86,4.436]],"o":[[-9.639,-11.784],[6.608,-14.922],[0,0]],"v":[[-74.929,75.894],[-84.108,31.922],[-41.89,3.314]],"c":false}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-14.453,13.82],[-10.072,-1.911]],"o":[[-3.391,-12.713],[16.367,-15.651],[0,0]],"v":[[-102.109,72.713],[-93.047,27.18],[-41.962,18.507]],"c":false}]},{"t":12,"s":[{"i":[[0,0],[-10.081,5.804],[-6.5,-5.25]],"o":[[-1.25,-14.5],[24.75,-14.25],[0,0]],"v":[[-121.75,68.75],[-97.75,28.5],[-42,26.5]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":13,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Arc R","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[42.3,-15.5]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[28.45,78.125]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[45.259,-17.574]],"o":[[5.569,19.742],[0,0]],"v":[[71.436,-1.265],[27.374,78.492]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[47.39,-19.067]],"o":[[9.578,22.724],[0,0]],"v":[[66.422,-8.224],[29.61,86.067]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[43.341,-23.274]],"o":[[42.63,43.092],[0,0]],"v":[[43.37,-29.592],[33.159,90.274]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[32.542,-17.732]],"o":[[46.682,32.959],[0,0]],"v":[[44.318,-21.959],[47.958,77.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[29.55,-17.51]],"o":[[48.487,23.807],[0,0]],"v":[[50.036,1.981],[67.878,99.974]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[28.054,-17.399]],"o":[[49.39,19.231],[0,0]],"v":[[56.395,12.201],[71.838,111.344]],"c":false}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[27.199,-17.335]],"o":[[49.907,16.614],[0,0]],"v":[[57.245,18.726],[77.588,118.775]],"c":false}]},{"t":12,"s":[{"i":[[0,0],[26.05,-17.25]],"o":[[47.35,10.35],[0,0]],"v":[[62.15,25.9],[83.95,128.75]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[-10.717,-0.585],[0,0],[-5.941,-0.906],[0.206,-8.157],[11.865,-1.977],[0,0],[1.529,7.318],[0,0]],"o":[[0,0],[12.64,0.23],[0,0],[-0.717,13.324],[0,0],[-9.832,-0.809],[-1.086,-1.566],[7.288,1.01]],"v":[[-6.991,83.123],[-1.449,83.426],[26.156,78.756],[29.671,97.051],[10.094,121.234],[-4.602,122.184],[-26.436,108.079],[-29.519,79.278]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-15.856,0],[0,0],[-3.721,-3.379],[3.175,-9.561],[10.154,-0.123],[0,0],[3.074,9.411],[0,0]],"o":[[0,0],[17.039,-0.353],[0,0],[-4.368,11.421],[0,0],[-13.978,-0.72],[-2.523,-3.997],[4.562,-2.465]],"v":[[-1.547,83.311],[6.603,83.311],[48.503,77.629],[40.118,101.079],[14.346,125.123],[-0.309,126.215],[-28.324,109.339],[-40.364,80.189]],"c":true}]},{"t":12,"s":[{"i":[[-24.292,0],[0,0],[0,-6.3],[8.795,-7.101],[15.905,-0.35],[0,0],[7.818,10.05],[0,0]],"o":[[0,0],[24.292,0],[0,0],[-9.351,7.55],[0,0],[-20.755,-1.1],[-4.75,-6.106],[0,-6.3]],"v":[[1.971,106.75],[14.403,106.75],[66.25,108.9],[57.149,125.2],[14.987,135.85],[2.263,135.85],[-43.318,122.45],[-49,110.15]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":1,"op":10,"st":0,"bm":0}]},{"id":"comp_16","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_17","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[30,30,0],"to":[0,0,0],"ti":[0,0,0]},{"t":10,"s":[28.282,29.857,0]}],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[13.6,13.6,100]},{"t":10,"s":[13.5,13.5,100]}],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":37,"st":0,"bm":0}]},{"id":"comp_17","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Line","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[3.687,-6.898,0],"to":[0,0,0],"ti":[0,0,0]},{"t":8,"s":[-3.313,3.102,0]}],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-101.6,-111.5],[108.8,97.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[0]},{"t":7,"s":[31]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.3],"y":[0]},"t":0,"s":[100]},{"t":7,"s":[63]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Head Mic","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[-3.6,-33.55,0],"to":[0,0,0],"ti":[0,0,0]},{"t":12,"s":[9.4,60.45,0]}],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-25.393,-0.391],[0.18,-19.791],[-0.243,-7.895],[14.056,-6.795],[0,0],[0,0],[0,0]],"o":[[28.416,0.506],[0,0],[0.243,14.68],[0,0],[0,0],[0,0],[0.052,-15.482]],"v":[[-6.434,-101.102],[47.056,-73.018],[47.664,4.298],[29.68,40.735],[-22.557,-15.51],[-55.36,-50.751],[-55.066,-73.828]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-25.388,-0.636],[-1.714,-14.258],[-0.395,-12.85],[18.974,-7.989],[0,0],[0,0],[0,0]],"o":[[30.309,0.824],[0,0],[0.395,16.737],[0,0],[0,0],[0,0],[2.421,-11.434]],"v":[[-4.713,-90.812],[49.978,-73.971],[50.966,4.171],[29.789,44.635],[-23.955,-14.43],[-58.974,-53.419],[-58.496,-75.289]],"c":true}]},{"t":12,"s":[{"i":[[-25.306,-0.966],[8.574,-7],[-0.598,-19.5],[30.609,-1.65],[0,0],[0,0],[0,0]],"o":[[32.753,1.25],[0,0],[0.598,19.5],[0,0],[0,0],[0,0],[5.227,-2.25]],"v":[[-7.633,-77],[56.676,-75.25],[58.171,4],[29.904,46.4],[-22.818,-12.98],[-60.7,-57],[-59.227,-81]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[6.435,0.16],[0,28.821],[0,0]],"o":[[0,0],[0,0],[0,0],[-13.044,10.194],[-29.138,-0.769],[0,0],[0,0]],"v":[[-55.579,-50.718],[-28.188,-26.309],[-26.057,-24.356],[32.281,39.246],[-10.39,49.691],[-55.329,4.4],[-55.38,-31.494]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[6.77,0.261],[0,30.968],[0,0]],"o":[[0,0],[0,0],[0,0],[-13.708,7.528],[-31.483,-1.252],[0,0],[0,0]],"v":[[-59.067,-54.691],[-31.67,-27.138],[-29.427,-25.186],[31.261,43.864],[-14.65,49.247],[-58.924,4.4],[-59.007,-41.593]],"c":true}]},{"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[7.199,0.396],[0,33.85],[0,0]],"o":[[0,0],[0,0],[0,0],[-14.557,3.95],[-34.528,-1.9],[0,0],[0,0]],"v":[[-60.625,-60.025],[-33.301,-28.252],[-30.915,-26.3],[32.198,46.3],[-17.623,48.4],[-60.625,4.4],[-60.75,-55.15]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Arc L","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.75,84.5,0],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":2,"s":[{"i":[[0,0],[17.605,8.684],[-3.033,28.67]],"o":[[-19.95,7.814],[-28.895,-17.316],[0,0]],"v":[[24.45,79.436],[-39.105,77.316],[-76.362,0.644]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[11.789,14.347],[-5.217,19.073]],"o":[[-50.375,15.159],[-15.78,-19.203],[0,0]],"v":[[26.125,87.591],[-58.72,68.703],[-69.783,-3.573]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[3.96,23.737],[-17.216,17.641]],"o":[[-21.241,-5.148],[-3.54,-27.263],[0,0]],"v":[[-26.759,91.648],[-66.96,42.763],[-43.784,-26.641]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[0.701,27.677],[-23.215,14.71]],"o":[[-17.607,-9.204],[-0.405,-15.984],[0,0]],"v":[[-32.893,81.704],[-69.201,29.323],[-41.785,-18.71]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[-6.372,14.388],[-16.86,4.436]],"o":[[-9.639,-11.784],[6.608,-14.922],[0,0]],"v":[[-74.929,75.894],[-84.108,31.922],[-41.89,3.314]],"c":false}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-14.453,13.82],[-10.072,-1.911]],"o":[[-3.391,-12.713],[16.367,-15.651],[0,0]],"v":[[-102.109,72.713],[-93.047,27.18],[-41.962,18.507]],"c":false}]},{"t":12,"s":[{"i":[[0,0],[-10.081,5.804],[-6.5,-5.25]],"o":[[-1.25,-14.5],[24.75,-14.25],[0,0]],"v":[[-121.75,68.75],[-97.75,28.5],[-42,26.5]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc R","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,0],[16.64,-12.817]],"o":[[15.078,25.724],[0,0]],"v":[[66.422,-8.224],[58.36,66.317]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[0,0],[38.841,-19.274]],"o":[[42.63,43.092],[0,0]],"v":[[43.37,-29.592],[35.659,89.274]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[0,0],[32.542,-17.732]],"o":[[46.682,32.959],[0,0]],"v":[[44.318,-21.959],[47.958,77.232]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[29.55,-17.51]],"o":[[48.487,23.807],[0,0]],"v":[[50.036,1.981],[67.878,99.974]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[28.054,-17.399]],"o":[[49.39,19.231],[0,0]],"v":[[56.395,12.201],[71.838,111.344]],"c":false}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[27.199,-17.335]],"o":[[49.907,16.614],[0,0]],"v":[[57.245,18.726],[77.588,118.775]],"c":false}]},{"t":12,"s":[{"i":[[0,0],[26.05,-17.25]],"o":[[47.35,10.35],[0,0]],"v":[[62.15,25.9],[83.95,128.75]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":0,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[-10.717,-0.585],[0,0],[-5.941,-0.906],[0.206,-8.157],[11.865,-1.977],[0,0],[1.529,7.318],[0,0]],"o":[[0,0],[12.64,0.23],[0,0],[-0.717,13.324],[0,0],[-9.832,-0.809],[-1.086,-1.566],[7.288,1.01]],"v":[[-6.991,83.123],[-1.449,83.426],[26.156,78.756],[29.671,97.051],[10.094,121.234],[-4.602,122.184],[-26.436,108.079],[-29.519,79.278]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-15.856,0],[0,0],[-3.721,-3.379],[3.175,-9.561],[10.154,-0.123],[0,0],[3.074,9.411],[0,0]],"o":[[0,0],[17.039,-0.353],[0,0],[-4.368,11.421],[0,0],[-13.978,-0.72],[-2.523,-3.997],[4.562,-2.465]],"v":[[-1.547,83.311],[6.603,83.311],[48.503,77.629],[40.118,101.079],[14.346,125.123],[-0.309,126.215],[-28.324,109.339],[-40.364,80.189]],"c":true}]},{"t":12,"s":[{"i":[[-24.292,0],[0,0],[0,-6.3],[8.795,-7.101],[15.905,-0.35],[0,0],[7.818,10.05],[0,0]],"o":[[0,0],[24.292,0],[0,0],[-9.351,7.55],[0,0],[-20.755,-1.1],[-4.75,-6.106],[0,-6.3]],"v":[[1.971,106.75],[14.403,106.75],[66.25,108.9],[57.149,125.2],[14.987,135.85],[2.263,135.85],[-43.318,122.45],[-49,110.15]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":10,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Head 2","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[0.613,-101.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[11.613,-50.537,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":26,"s":[11.613,-86.537,0],"to":[0,0,0],"ti":[0,0,0]},{"t":36,"s":[11.113,-83.037,0]}],"ix":2},"a":{"a":0,"k":[11.613,-84.537,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":3,"s":[{"i":[[0,-17.328],[25.612,0],[0,17.328],[-25.612,0]],"o":[[0,17.328],[-25.612,0],[0,-17.328],[25.612,0]],"v":[[54.039,-62.942],[7.664,-31.567],[-38.711,-62.942],[7.664,-94.317]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,-23.543],[25.081,0],[0,23.543],[-25.081,0]],"o":[[0,23.543],[-25.081,0],[0,-23.543],[25.081,0]],"v":[[55.47,-76.028],[10.057,-33.4],[-35.356,-76.028],[10.057,-118.656]],"c":true}]},{"i":{"x":0.39,"y":1},"o":{"x":0.3,"y":0},"t":14,"s":[{"i":[[0,-24.735],[24.735,0],[0,24.735],[-24.735,0]],"o":[[0,24.735],[-24.735,0],[0,-24.735],[24.735,0]],"v":[[56.4,-84.537],[11.613,-39.75],[-33.174,-84.537],[11.613,-129.324]],"c":true}]},{"t":25,"s":[{"i":[[0,-26.924],[26.924,0],[0,26.924],[-26.924,0]],"o":[[0,26.924],[-26.924,0],[0,-26.924],[26.924,0]],"v":[[60.363,-84.537],[11.613,-35.787],[-37.137,-84.537],[11.613,-133.287]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":37,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Hands 2","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.05,"y":0},"t":9,"s":[11.336,13.774,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[11.336,18.274,0],"to":[0,0,0],"ti":[0,0,0]},{"t":25,"s":[11.336,11.774,0]}],"ix":2},"a":{"a":0,"k":[11.336,10.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.875,44.36],[0.012,11.61]],"o":[[0,0],[-0.348,-17.658],[-0.016,-14.955]],"v":[[-33.583,109.659],[-40.875,50.64],[-45.012,-17.11]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[-7.48,30.25],[-7.964,9.648]],"o":[[0,0],[2.73,-11.373],[7.228,-11.196]],"v":[[-57.163,97.688],[-57.996,36.651],[-42.036,0.102]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[-14.611,30.379],[-23.925,1.795]],"o":[[0,0],[7.389,-12.121],[13.171,-8.112]],"v":[[-77.526,99.758],[-81.889,29.906],[-41.075,4.99]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[-27.718,19.589],[-10.136,-1.028]],"o":[[0,0],[21.782,-16.411],[19.114,-5.028]],"v":[[-107.888,77.829],[-93.782,16.161],[-42.114,8.877]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[-27.325,4.127],[-14.975,-3.949]],"o":[[0,0],[20.334,-3.734],[35.444,0.066]],"v":[[-136.225,32.858],[-90.834,7.893],[-38.525,10.472]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-27.129,-3.603],[-14.269,-4.157]],"o":[[0,0],[19.61,2.605],[43.609,2.613]],"v":[[-147.393,-5.627],[-89.61,-2.992],[-38.231,9.77]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[0,0],[-38.825,-22.336],[-19.04,-2.789]],"o":[[0,0],[14.675,9.164],[62.76,8.586]],"v":[[-144.801,-73.381],[-91.175,-7.197],[-37.96,10.757]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[-46.458,-35.583],[-19.738,-3.567]],"o":[[0,0],[8.352,6.397],[79.039,14.286]],"v":[[-142.333,-130.341],[-88.062,-16.235],[-40.512,7.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.3,"y":0},"t":7,"s":[{"i":[[0,0],[0.583,25.777],[4.5,19.11]],"o":[[0,0],[-0.238,-10.518],[-18.41,-78.181]],"v":[[63,101.64],[63.167,54.973],[56,-16.61]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[2.455,25.149],[6.868,13.265]],"o":[[0,0],[-0.66,-9.745],[-29.265,-65.813]],"v":[[68.548,94.42],[70.368,48.723],[56.521,2.29]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-11.495,10.995],[15.537,39.692],[11.504,1.535]],"o":[[14.034,-13.424],[-3.378,-8.551],[-47.075,-45.52]],"v":[[79.466,115.674],[91.463,38.058],[62.496,12.174]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[-14.54,10.097],[25.244,37.544],[12.466,1.965]],"o":[[15.872,-11.198],[-4.741,-7.952],[-56.007,-35.342]],"v":[[88.294,117.357],[93.089,33.781],[63.701,13.504]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-16.063,9.648],[30.097,36.471],[11.946,0.457]],"o":[[16.791,-10.086],[-5.422,-7.653],[-60.473,-30.253]],"v":[[92.709,118.199],[93.903,31.642],[61.554,13.67]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":18,"s":[{"i":[[-5.509,3.309],[41.86,36.38],[11.653,0.923]],"o":[[5.759,-3.459],[-7.371,-6.796],[-73.243,-15.702]],"v":[[124.602,127.851],[94.405,26.111],[62.332,13.5]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":25,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[141.25,132.89],[94.667,23.223],[63.5,11.89]],"c":false}]},{"t":28,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[140,128.89],[94.667,23.848],[63.5,11.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Body 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":12,"s":[266.676,398.378,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.4,"y":1},"o":{"x":0.3,"y":0},"t":23,"s":[266.676,387.378,0],"to":[0,0,0],"ti":[0,0,0]},{"t":34,"s":[266.676,392.378,0]}],"ix":2},"a":{"a":0,"k":[10.676,136.378,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":12,"s":[{"i":[[-12.288,0.098],[-12.498,-0.987],[0,0],[3.339,-1.222],[4.897,-9.213],[22.369,0],[7.456,13.82],[-1.892,54.808]],"o":[[8.847,-0.071],[35.724,2.82],[24.706,0],[0,0],[-7.456,13.82],[-22.369,0],[-4.897,-9.213],[-12.353,-3.008]],"v":[[-46.407,7.071],[-18.334,9.585],[61.794,9.679],[70.141,28.952],[68.805,121.176],[13.161,136.5],[-42.484,121.176],[-47.047,25.191]],"c":true}]},{"i":{"x":0.833,"y":1},"o":{"x":0.31,"y":0},"t":23,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[20.1,0],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.7,14.7],[-20.1,0],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.2,120.2],[13.2,136.5],[-36.8,120.2],[-40.9,18.1]],"c":true}]},{"t":34,"s":[{"i":[[-10.8,-2.3],[-8.2,-0.4],[0,0],[3,-1.3],[4.4,-9.8],[24.175,0.094],[6.7,14.7],[-1.7,58.3]],"o":[[7.9,1.7],[0,0],[22.2,0],[0,0],[-6.669,14.144],[-20.1,-0.078],[-4.4,-9.8],[-11.1,-3.2]],"v":[[-40.2,-2.3],[-15.1,1.5],[56.9,1.6],[64.4,22.1],[63.044,119.606],[13.2,136.156],[-36.8,120.2],[-40.9,18.1]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":37,"st":0,"bm":0}]},{"id":"comp_18","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_19","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":30,"st":0,"bm":0}]},{"id":"comp_19","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[254.042,238.57,0],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":11,"s":[93,93,100]},{"i":{"x":[0.72,0.72,0.72],"y":[1,1,1]},"o":{"x":[0.28,0.28,0.28],"y":[0,0,0]},"t":21,"s":[101,101,100]},{"t":29,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Line","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":0,"s":[-13.538,-23.613,0],"to":[0,0,0],"ti":[0,0,0]},{"t":17,"s":[3.687,-6.898,0]}],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-101.6,-111.5],[108.8,97.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":0,"s":[0]},{"t":17,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":30,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Head","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[15.481,-9.962],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[23.519,42.712],[-23.209,-2.257],[-49.7,-27.75],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-10.034,-21.084],[-49.6,-46.5],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[19.623,9.37],[-49.6,-46.5],[-49.6,-71.5]],"c":true}]},{"t":8,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"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],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-12.35,7.7],[-25.4,0],[0,0],[0,0]],"v":[[-49.7,-29.15],[-39.262,-18.975],[-36.972,-16.742],[23.85,42.55],[-3.6,50.4],[-49.6,4.4],[-49.7,-29.15]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6,"s":[{"i":[[0,0],[-3.331,-2.789],[4.414,24.475],[0,0],[12.582,-0.112],[0,25.4],[0,0]],"o":[[0,0],[4.215,3.528],[21.749,15.62],[-9.968,12.883],[-25.399,0.226],[0,0],[0,0]],"v":[[-49.6,-15.4],[-38.553,-4.468],[-12.248,-24.48],[31.491,33.902],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[0,0],[-1.647,-1.416],[3.578,20.948],[0,0],[13.582,-0.261],[0,25.4],[0,0]],"o":[[0,0],[7.932,6.822],[10.875,7.81],[-10.683,10.613],[-25.395,0.487],[0,0],[0,0]],"v":[[-49.6,-15.4],[-6.153,27.653],[21.197,9.349],[31.475,35.139],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"c":true}]},{"t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc L","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.75,84.5,0],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false},"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Arc R","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[34.576,-19.595]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[38.027,74.567]],"c":false}]},{"t":9,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Leg","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.408,192.03,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":30,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"EXAMPLE ON","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.708,70.98,0],"ix":2},"a":{"a":0,"k":[0,3.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[45.3,0],[0,42]],"o":[[0,42],[-45.3,0],[0,0]],"v":[[82,8.4],[0,84.5],[-82,6.5]],"c":false},"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":20.888,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.4,0],[0,0],[0,-25.4],[0,0],[25.4,0],[0,0],[0,25.4],[0,0]],"o":[[0,0],[25.4,0],[0,0],[0,25.4],[0,0],[-25.4,0],[0,0],[0,-25.4]],"v":[[0,-117.5],[0,-117.5],[46,-71.5],[46,4.5],[0,50.5],[0,50.5],[-46,4.5],[-46,-71.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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-1.6,78.5],[1.7,78.5],[13.1,89.9],[13.1,113.2],[1.7,124.6],[-1.6,124.6],[-13,113.2],[-13,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":5,"st":0,"bm":0}]},{"id":"comp_20","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 1","refId":"comp_21","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":0,"k":[13.6,13.6,100],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":33,"st":0,"bm":0}]},{"id":"comp_21","layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[254.062,238.57,0],"ix":2},"a":{"a":0,"k":[50,50,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[100,100,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":12,"s":[93,93,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":22,"s":[101,101,100]},{"t":32,"s":[100,100,100]}],"ix":6}},"ao":0,"ip":0,"op":33,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Line","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.4,"y":0},"t":2,"s":[3.687,-6.898,0],"to":[0,0,0],"ti":[0,0,0]},{"t":23,"s":[12.601,2.016,0]}],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"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":[[-101.6,-111.5],[108.8,97.5]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.3],"y":[1]},"o":{"x":[0.4],"y":[0]},"t":2,"s":[0]},{"t":23,"s":[100]}],"ix":1},"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":21,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Head","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[5.665,-6.576],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[32.133,31.549],[-27.809,-30.43],[-49.62,-42.75],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[5.665,-6.576],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[32.133,31.549],[-4.565,-6.652],[-49.62,-42.75],[-49.6,-71.5]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[5.665,-6.576],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[32.133,31.549],[17.977,14.816],[-49.62,-42.75],[-49.6,-71.5]],"c":true}]},{"t":12,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[15.481,-9.962],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[23.519,42.712],[-23.209,-2.257],[-49.7,-27.75],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":9,"s":[{"i":[[0,0],[0,0],[-11.683,-16.357],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[4.734,6.628],[-6.63,3.14],[-25.4,0],[0,0],[0,0]],"v":[[-49.575,-44.964],[-29.795,-33.421],[-38.394,-6.988],[15.25,46.35],[-3.6,50.4],[-49.6,4.4],[-49.575,-44.167]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[0,0],[-11.683,-16.357],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[4.734,6.628],[-6.63,3.14],[-25.4,0],[0,0],[0,0]],"v":[[-49.575,-44.964],[-6.551,-9.643],[-15.151,16.79],[15.25,46.35],[-3.6,50.4],[-49.6,4.4],[-49.575,-44.167]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[0,0],[0,0],[-11.683,-16.357],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[4.734,6.628],[-6.63,3.14],[-25.4,0],[0,0],[0,0]],"v":[[-49.575,-44.964],[15.99,11.825],[7.391,38.258],[15.25,46.35],[-3.6,50.4],[-49.6,4.4],[-49.575,-44.167]],"c":true}]},{"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-12.35,7.7],[-25.4,0],[0,0],[0,0]],"v":[[-49.7,-29.15],[-39.262,-18.975],[-36.972,-16.742],[23.85,42.55],[-3.6,50.4],[-49.6,4.4],[-49.7,-29.15]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":33,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Arc L","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.75,84.5,0],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false},"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":33,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Arc R","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]},{"t":14,"s":[{"i":[[0,0],[36.503,-16.928]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[34.73,75.676]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":33,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Leg","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.408,192.03,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":33,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"EXAMPLE ON","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.708,70.98,0],"ix":2},"a":{"a":0,"k":[0,3.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[45.3,0],[0,42]],"o":[[0,42],[-45.3,0],[0,0]],"v":[[82,8.4],[0,84.5],[-82,6.5]],"c":false},"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":20.888,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-25.4,0],[0,0],[0,-25.4],[0,0],[25.4,0],[0,0],[0,25.4],[0,0]],"o":[[0,0],[25.4,0],[0,0],[0,25.4],[0,0],[-25.4,0],[0,0],[0,-25.4]],"v":[[0,-117.5],[0,-117.5],[46,-71.5],[46,4.5],[0,50.5],[0,50.5],[-46,4.5],[-46,-71.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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-1.6,78.5],[1.7,78.5],[13.1,89.9],[13.1,113.2],[1.7,124.6],[-1.6,124.6],[-13,113.2],[-13,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false}],"ip":14,"op":33,"st":0,"bm":0}]},{"id":"comp_22","layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Pre-comp 2","refId":"comp_23","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.7,"y":1},"o":{"x":0.3,"y":0},"t":0,"s":[28.282,29.857,0],"to":[0,0,0],"ti":[0,0,0]},{"t":10,"s":[30,30,0]}],"ix":2},"a":{"a":0,"k":[256,256,0],"ix":1},"s":{"a":1,"k":[{"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":0,"s":[13.5,13.5,100]},{"t":10,"s":[13.6,13.6,100]}],"ix":6}},"ao":0,"w":512,"h":512,"ip":0,"op":36,"st":0,"bm":0}]},{"id":"comp_23","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Head 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[11.613,-83.537,0],"to":[0,0,0],"ti":[0,0,0]},{"t":14,"s":[13.613,-4.037,0]}],"ix":2},"a":{"a":0,"k":[11.613,-84.537,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,-26.924],[26.924,0],[0,26.924],[-26.924,0]],"o":[[0,26.924],[-26.924,0],[0,-26.924],[26.924,0]],"v":[[60.363,-84.537],[11.613,-35.787],[-37.137,-84.537],[11.613,-133.287]],"c":true}]},{"t":14,"s":[{"i":[[0,-25.609],[26.234,0],[0,25.609],[-26.234,0]],"o":[[0,25.609],[-26.234,0],[0,-25.609],[26.234,0]],"v":[[55.5,-92.894],[8,-46.525],[-39.5,-92.894],[8,-139.262]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":-2,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Hands 2","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[11.336,11.274,0],"ix":2},"a":{"a":0,"k":[11.336,10.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.818},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[-46.458,-35.583],[-24.488,-5.64]],"o":[[0,0],[8.352,6.397],[78.271,18.027]],"v":[[-141.771,-129.716],[-87.875,-16.36],[-40.512,7.89]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.182},"t":2.742,"s":[{"i":[[0,0],[-36.01,-10.9],[-24.155,1.341]],"o":[[0,0],[17.49,5.6],[69.436,6.533]],"v":[[-154.359,-38.55],[-101.24,-1.379],[-38.096,3.379]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.167},"t":4.572,"s":[{"i":[[0,0],[-22.495,10.354],[-22.973,-2.409]],"o":[[0,0],[18.597,-8.552],[52.89,-5.679]],"v":[[-130.223,30.529],[-97.344,4.391],[-37.533,-6.68]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.182},"t":5.486,"s":[{"i":[[0,0],[-15.738,20.981],[-22.382,-4.284]],"o":[[0,0],[16.262,-20.519],[44.618,-11.784]],"v":[[-110.655,59.818],[-92.396,11.026],[-37.251,-11.709]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.182},"t":9,"s":[{"i":[[0,0],[15.091,34.278],[-16.072,17.731]],"o":[[0,0],[-7.208,-22.817],[16.812,-10.179]],"v":[[-13.011,129.282],[-62.232,89.104],[-50.644,19.509]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[0,0],[19.6,34.344],[-11.896,20.735]],"o":[[0,0],[-10.53,-23.142],[12.875,-9.952]],"v":[[0.934,129.625],[-59.674,93.522],[-55.966,25.06]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.182},"t":11,"s":[{"i":[[0,0],[24.108,34.41],[-7.719,23.739]],"o":[[0,0],[-13.853,-23.467],[8.939,-9.725]],"v":[[1.88,129.968],[-57.117,97.94],[-61.289,30.611]],"c":false}]},{"t":14,"s":[{"i":[[0,0],[25.209,29.401],[-7.488,20.11]],"o":[[0,0],[-15.125,-17.64],[3.974,-10.674]],"v":[[6.417,130.659],[-53.875,103.64],[-63.512,36.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.818},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[0,0],[48,36.333],[11.5,1.167]],"o":[[0,0],[-8.388,-6.35],[-79.91,-8.107]],"v":[[140.75,128.89],[94.542,23.473],[63.5,11.89]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.182},"t":2.742,"s":[{"i":[[-0.107,1.301],[43.705,35.181],[12.499,4.424]],"o":[[1.452,-17.63],[-7.425,-6.513],[-75.279,-8.976]],"v":[[133.797,130.851],[92.055,22.64],[62.256,6.25]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.182},"t":5.486,"s":[{"i":[[-6.276,1.09],[19.852,26.915],[21.224,10.921]],"o":[[6.157,-12.218],[-8.148,-12.585],[-54.801,-12.818]],"v":[[109.709,105.725],[104.015,23.092],[59.642,-11.414]],"c":false}]},{"i":{"x":0.833,"y":0.818},"o":{"x":0.167,"y":0.182},"t":9,"s":[{"i":[[-14.16,0.82],[-3.078,22.988],[16.441,25.833]],"o":[[22.052,-4.736],[2.47,-14.595],[-28.631,-17.728]],"v":[[32.732,128.976],[84.858,79.012],[68.64,15.393]],"c":false}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.182},"t":11,"s":[{"i":[[-18.622,0.668],[-13.293,19.932],[12.19,32.742]],"o":[[37.47,-1.344],[5.361,-8.677],[-13.817,-20.508]],"v":[[7.53,130.546],[77.418,98.03],[80.302,30.109]],"c":false}]},{"t":14,"s":[{"i":[[-19.233,1.202],[-15.167,22.777],[7,26.11]],"o":[[30.25,-1.89],[5.831,-8.757],[-6.192,-23.095]],"v":[[11.75,130.39],[78.167,98.723],[84,36.89]],"c":false}]}],"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":22,"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":12,"st":-2,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Body 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.3,"y":1},"o":{"x":0.5,"y":0},"t":0,"s":[266.426,392.378,0],"to":[0,0,0],"ti":[0,0,0]},{"t":14,"s":[253.676,337.378,0]}],"ix":2},"a":{"a":0,"k":[10.676,136.378,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.5,"y":0},"t":0,"s":[{"i":[[-10.795,-2.32],[-8.2,-0.399],[0,0],[3,-1.298],[6.05,-16.428],[20.1,0],[6.7,14.68],[-1.7,58.223]],"o":[[7.9,1.698],[0,0],[22.2,0],[0,0],[-7.825,16.029],[-20.1,0],[-4.4,-9.787],[-11.1,-3.196]],"v":[[-40.2,-2.303],[-15.1,1.492],[56.9,1.592],[64.619,22.065],[63.2,120.034],[13.2,136.312],[-36.8,120.034],[-40.9,18.07]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":5,"s":[{"i":[[-7.729,4.405],[-14.608,0.316],[-11.697,-7.483],[-0.238,-10.621],[7.036,-14.499],[18.581,0],[6.908,15.026],[-1.237,40.257]],"o":[[7.771,-9.845],[25.241,-0.704],[10.053,2.017],[0,0],[-6.792,14.491],[-18.581,0],[-5.829,-11.041],[-0.133,-10.892]],"v":[[-35.485,-12.023],[0.894,-25.934],[52.233,-18.385],[61.774,26.253],[58.326,106.281],[12.028,125.952],[-35.105,105.616],[-40.582,23.524]],"c":true}]},{"i":{"x":0.3,"y":1},"o":{"x":0.167,"y":0.167},"t":7,"s":[{"i":[[-4.018,5.73],[-11.874,0.331],[-0.482,-11.186],[1.315,-6.931],[7.788,-13.027],[17.423,0],[7.066,15.289],[-0.885,26.553]],"o":[[3.929,-18.735],[44.497,-1.242],[7.668,7.255],[0,0],[-6.004,13.318],[-17.423,0],[-6.92,-11.998],[0.031,-13.41]],"v":[[-38.5,-13.268],[1.196,-38.483],[57.046,-13.793],[59.603,29.448],[54.608,95.788],[11.134,118.049],[-33.812,94.617],[-40.339,27.685]],"c":true}]},{"t":14,"s":[{"i":[[-0.661,9.718],[-13.678,-0.71],[-0.721,-16.729],[0.48,-9.722],[8.649,-11.342],[16.096,0],[7.247,15.59],[-0.48,10.861]],"o":[[1.962,-28.86],[25.305,1.314],[0.467,10.849],[0,0],[-5.101,11.975],[-16.096,0],[-8.168,-13.094],[0.521,-13.007]],"v":[[-37.657,-18.701],[9.27,-58.29],[57.118,-21.416],[57.118,33.106],[50.351,83.775],[10.111,109],[-32.332,82.023],[-37.817,32.45]],"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":13,"st":-2,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Line","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[3.687,-6.898,0],"ix":2},"a":{"a":0,"k":[3.6,-7,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.1,"y":0},"t":8,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-87.744,-97.736],[94.944,83.736]],"c":false}]},{"t":24,"s":[{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-101.6,-111.5],[108.8,97.5]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":8.143,"s":[65]},{"t":23.857421875,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.4],"y":[1]},"o":{"x":[0.2],"y":[0]},"t":8,"s":[22]},{"t":23.857421875,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Path-10","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":15,"op":36,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Head Mic","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-3.6,-33.55,0],"ix":2},"a":{"a":0,"k":[-3.6,-33.55,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.32,"y":0},"t":12,"s":[{"i":[[-26.211,0],[-0.75,-24.287],[0,0],[8.887,-9.825],[0,0],[0,0],[0,0]],"o":[[26.211,0],[0,0],[0,11.606],[0,0],[0,0],[0,0],[-1,-21.796]],"v":[[-3.735,-109.75],[45.281,-65.463],[43.991,8.35],[34.343,45.154],[-28.222,-7.666],[-50.958,-26.52],[-50.969,-65.204]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[3.254,-6.84],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.715,-109.619],[43.599,-65.808],[42.504,7.127],[37.527,30.34],[-24.609,-26.91],[-49.585,-52.154],[-50.153,-65.37]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[2.173,-4.255],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.699,-110.688],[43.436,-66.58],[42.49,6.771],[35.692,29.42],[-20.918,-24.458],[-49.597,-54.517],[-50.078,-66.202]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[2.511,-3.584],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.668,-112.826],[43.111,-68.124],[42.462,6.058],[35.521,27.954],[-13.534,-19.556],[-49.621,-59.243],[-49.928,-67.865]],"c":true}]},{"t":25,"s":[{"i":[[-25.4,0],[0,-25.4],[0,0],[6.9,-8],[0,0],[0,0],[0,0]],"o":[[25.4,0],[0,0],[0,11.4],[0,0],[0,0],[0,0],[0,-25.4]],"v":[[-3.6,-117.5],[42.4,-71.5],[42.4,4.5],[31.3,34.4],[-20.33,-17.23],[-49.6,-46.5],[-49.6,-71.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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.32,"y":0},"t":12,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[6.088,0],[-0.503,31.164],[0,0]],"o":[[0,0],[0,0],[0,0],[-10.319,13.723],[-26.211,0],[0,0],[0,0]],"v":[[-50.984,-30.364],[-31.444,-15.166],[-26.333,-11.224],[33.943,44.851],[-3.477,59],[-50.945,10.019],[-50.958,-21.446]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[{"i":[[0,0],[-0.064,2.378],[0,0],[0,0],[6.019,0],[-0.47,30.673],[0,0]],"o":[[0,0],[0.089,-3.285],[0,0],[-10.163,17.808],[-25.911,0],[0,0],[0,0]],"v":[[-50.431,-27.196],[-50.235,-36.056],[-34.964,-26.612],[35.415,38.984],[-3.485,57.977],[-50.411,9.433],[-50.391,-18.196]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14,"s":[{"i":[[0,0],[-0.174,6.439],[0,0],[0,0],[5.9,0],[-0.415,29.833],[0,0]],"o":[[0,0],[0.241,-8.895],[0,0],[-9.897,24.787],[-25.4,0],[0,0],[0,0]],"v":[[-49.489,-21.787],[-49.835,-35.855],[-49.705,-52.894],[37.928,28.963],[-3.499,56.229],[-49.499,8.433],[-49.422,-12.646]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[-0.361,29.258],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.945,8.024],[-25.4,0],[0,0],[0,0]],"v":[[-49.614,-15.443],[-16.569,15.355],[-4.062,27.479],[16.726,47.226],[-3.512,55.472],[-49.512,7.909],[-49.493,-12.332]],"c":true}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":17,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[-0.253,28.106],[0,0]],"o":[[0,0],[0,0],[0,0],[-4.54,4.12],[-25.4,0],[0,0],[0,0]],"v":[[-49.647,-16.255],[-37.036,-2.726],[-33.526,0.224],[15.322,49.25],[-3.538,53.958],[-49.538,6.862],[-49.634,-11.706]],"c":true}]},{"t":25,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5.9,0],[0,25.4],[0,0]],"o":[[0,0],[0,0],[0,0],[-5.2,2],[-25.4,0],[0,0],[0,0]],"v":[[-49.6,-15.4],[-40.702,-6.502],[-38.75,-4.55],[13.1,47.3],[-3.6,50.4],[-49.6,4.4],[-49.6,-15.4]],"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":[100,100],"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":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":36,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Arc L","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.5,"y":1},"o":{"x":0.05,"y":0},"t":15,"s":[-3.781,80.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":25,"s":[-3.781,89.75,0],"to":[0,0,0],"ti":[0,0,0]},{"t":33,"s":[-3.75,84.5,0]}],"ix":2},"a":{"a":0,"k":[-3.75,84.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.1,"y":0},"t":12,"s":[{"i":[[0,0],[13.1,0],[-24.469,59.5]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[32,72.5],[-6,80],[-74,-20]],"c":false}]},{"t":26,"s":[{"i":[[0,0],[13.1,0],[0,42]],"o":[[-11,5.1],[-45.3,0],[0,0]],"v":[[33,76.5],[-3.5,84.5],[-85.5,6.5]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":36,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Arc R","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.05,51.45,0],"ix":2},"a":{"a":0,"k":[66.05,51.45,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.1,"y":0},"t":12,"s":[{"i":[[0,0],[39.331,-15]],"o":[[9.631,29.1],[0,0]],"v":[[68.4,-20.1],[39.2,68.5]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[0,0],[38.51,-16.677]],"o":[[5.914,24.45],[0,0]],"v":[[72.925,-10.242],[39.451,70.103]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16,"s":[{"i":[[0,0],[10.82,-9.511]],"o":[[4.75,22.994],[0,0]],"v":[[74.342,-7.154],[65.462,49.587]],"c":false}]},{"i":{"x":0.4,"y":1},"o":{"x":0.167,"y":0.167},"t":19,"s":[{"i":[[0,0],[13.536,-11.424]],"o":[[1.257,18.625],[0,0]],"v":[[78.594,2.109],[61.495,50.04]],"c":false}]},{"t":26,"s":[{"i":[[0,0],[8.7,-12]],"o":[[0,15.6],[0,0]],"v":[[78.4,8.4],[64.7,50.5]],"c":false}]}],"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":22,"ix":5},"lc":2,"lj":1,"ml":4,"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":[100,100],"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":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":12,"op":36,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Leg","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[252.45,380.6,0],"ix":2},"a":{"a":0,"k":[-3.55,124.6,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.4,"y":1},"o":{"x":0.1,"y":0},"t":11,"s":[{"i":[[-11.972,0],[0,0],[0,-2.631],[0,0],[11.972,0],[0,0],[0,2.631],[0,0]],"o":[[0,0],[11.972,0],[0,0],[0,2.631],[0,0],[-11.972,0],[0,0],[0,-2.631]],"v":[[-6.686,71.5],[-0.414,71.5],[21.25,76.26],[21.25,85.99],[-0.414,90.75],[-6.686,90.75],[-28.35,85.99],[-28.35,76.26]],"c":true}]},{"i":{"x":0.69,"y":1},"o":{"x":0.31,"y":0},"t":20,"s":[{"i":[[-6.3,0],[0,0],[0,-4.763],[0,0],[6.3,0],[0,0],[0,4.763],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,4.763],[0,0],[-6.3,0],[0,0],[0,-4.763]],"v":[[-5.2,89.75],[-1.9,89.75],[9.5,98.368],[9.5,115.982],[-1.9,124.6],[-5.2,124.6],[-16.6,115.982],[-16.6,98.368]],"c":true}]},{"t":33,"s":[{"i":[[-6.3,0],[0,0],[0,-6.3],[0,0],[6.3,0],[0,0],[0,6.3],[0,0]],"o":[[0,0],[6.3,0],[0,0],[0,6.3],[0,0],[-6.3,0],[0,0],[0,-6.3]],"v":[[-5.2,78.5],[-1.9,78.5],[9.5,89.9],[9.5,113.2],[-1.9,124.6],[-5.2,124.6],[-16.6,113.2],[-16.6,89.9]],"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":[100,100],"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":"Rectangle","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":11,"op":36,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Start Chat to Mute Android 3","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":376,"op":405,"st":376,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Cancel Reminder to Mute Android","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":344,"op":376,"st":344,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Set Reminder Android","refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":311,"op":344,"st":311,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Cancel Reminder to Rise Hand","refId":"comp_6","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":274,"op":311,"st":274,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Set Reminder to Rise Hand","refId":"comp_8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":237,"op":274,"st":237,"bm":0},{"ddd":0,"ind":6,"ty":0,"nm":"Set Reminder to Mute","refId":"comp_10","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":202,"op":237,"st":202,"bm":0},{"ddd":0,"ind":7,"ty":0,"nm":"Cancel Reminder","refId":"comp_12","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":173,"op":202,"st":173,"bm":0},{"ddd":0,"ind":8,"ty":0,"nm":"Unmute to Rise Hand","refId":"comp_14","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":136,"op":173,"st":136,"bm":0},{"ddd":0,"ind":9,"ty":0,"nm":"Mute to Rise Hand","refId":"comp_16","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":99,"op":136,"st":99,"bm":0},{"ddd":0,"ind":10,"ty":0,"nm":"Mute","refId":"comp_18","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":69,"op":99,"st":69,"bm":0},{"ddd":0,"ind":11,"ty":0,"nm":"Unmute Android","refId":"comp_20","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":36,"op":69,"st":36,"bm":0},{"ddd":0,"ind":12,"ty":0,"nm":"Raise Hand to Mute","refId":"comp_22","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[30,30,0],"ix":2},"a":{"a":0,"k":[30,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":60,"h":60,"ip":0,"op":36,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/TMessagesProj/src/main/res/values-v21/styles.xml b/TMessagesProj/src/main/res/values-v21/styles.xml index 6905a685e..fc0fb6711 100644 --- a/TMessagesProj/src/main/res/values-v21/styles.xml +++ b/TMessagesProj/src/main/res/values-v21/styles.xml @@ -159,9 +159,11 @@ true false - @null - @null - false + #4991cc + #527da3 + #808080 + #60808080 + true diff --git a/TMessagesProj/src/main/res/values/strings.xml b/TMessagesProj/src/main/res/values/strings.xml index 6e5e94ac7..531d45515 100644 --- a/TMessagesProj/src/main/res/values/strings.xml +++ b/TMessagesProj/src/main/res/values/strings.xml @@ -68,6 +68,8 @@ Postcode Receiver Full Name + Tip + Tip (Optional) Phone Number Email Save Shipping Information @@ -89,6 +91,7 @@ TEST INVOICE PAY %1$s Payment method + New card Payment provider Name Phone number @@ -113,6 +116,7 @@ Phone will be passed to %1$s as billing info. Email address will be passed to %1$s as billing info. Phone and email address will be passed to %1$s as billing info. + You paid **%1$s** for **%2$s**. New conversation Auto-Night Mode is off @@ -649,7 +653,10 @@ Collapse Expand Sorry, public polls can’t be forwarded to channels. + Sorry, invoices can’t be forwarded to secret chats. Sorry, polls can’t be forwarded to secret chats. + Sorry, games can’t be sent to secret chats. + Sorry, invoices can’t be sent to secret chats. Multiple Answers Tap to choose the correct answer Polls in Quiz Mode have one correct answer. Users can\'t revoke their answers. @@ -1856,6 +1863,8 @@ Ask a volunteer Telegram FAQ Telegram FAQ + Telegram Features + https://t.me/TelegramTips Add Account Select Account https://telegram.org/faq @@ -2864,6 +2873,9 @@ Clear payment info Are you sure you want to clear your payment and shipping info? Delete your shipping info and instruct all payment providers to remove your saved credit cards? Note that Telegram never stores your credit card data. + Payment info cleared. + Shipping info cleared. + Payment and shipping info cleared. Websites where you used Telegram to log in. Shipping info Payment info @@ -3032,6 +3044,7 @@ un1 started a voice chat You started a voice chat Voice chat started + Voice chat scheduled on %1$s Voice chat finished (%s) un1 invited un2 to the voice chat You invited un2 to the voice chat @@ -3465,6 +3478,7 @@ %1$s members talking %1$s members talking speaking + %1$d%% speaking listening wants to speak invited @@ -3484,6 +3498,7 @@ New paricipants are muted Share invite link End voice chat + Cancel voice chat Connecting... Leave voice chat Do you want to leave this voice chat? @@ -3492,6 +3507,7 @@ End voice chat VIEW VOICE CHAT Voice Chat + Scheduled Voice Chat Open voice chat The selected user is already in this voice chat. Sorry, you can\'t join voice chats as an anonymous administrator. @@ -3500,6 +3516,7 @@ Join voice chat Hey! Join our voice chat: %1$s Invite Members + Share Invite Link Remove Open Profile Open Channel @@ -3553,6 +3570,20 @@ Are sure you want to appear in this voice chat as your personal account? Voice chat sound muted. Voice chat sound unmuted. + Members of this group will be notified once you start the voice chat. + Subscribers of this channel will be notified once you start the voice chat. + You will be displayed as: + Start Voice Chat + Schedule Voice Chat + Start Now + Set Reminder + Cancel Reminder + Members of the group will be notified that the voice chat will start in %1$s. + Subscribers of the channel will be notified that the voice chat will start in %1$s. + Starts in + Late by + Share + We will notify you when it starts. Manage Invite Links You can create additional invite links that have a limited time or number of uses @@ -3759,6 +3790,30 @@ from %1$d chats from %1$d chats from %1$d chats + %1$d seconds + %1$d second + %1$d seconds + %1$d seconds + %1$d seconds + %1$d seconds + %1$d minutes + %1$d minute + %1$d minutes + %1$d minutes + %1$d minutes + %1$d minutes + %1$d hours + %1$d hour + %1$d hours + %1$d hours + %1$d hours + %1$d hours + %1$d days + %1$d day + %1$d days + %1$d days + %1$d days + %1$d days %1$d seconds %1$d second %1$d seconds @@ -4299,6 +4354,15 @@ \'Send today at\' HH:mm \'Send on\' MMM d \'at\' HH:mm \'Send on\' MMM d yyyy \'at\' HH:mm + \'Start today at\' HH:mm + \'Start on\' MMM d \'at\' HH:mm + \'Start on\' MMM d yyyy \'at\' HH:mm + \'Starts today at\' HH:mm + \'Starts on\' MMM d \'at\' HH:mm + \'Starts on\' MMM d yyyy \'at\' HH:mm + \'Today,\' HH:mm + MMM d\',\' HH:mm + MMM d yyyy\',\' HH:mm \'Remind today at\' HH:mm \'Remind on\' MMM d \'at\' HH:mm \'Remind on\' MMM d yyyy \'at\' HH:mm @@ -4324,4 +4388,25 @@ Cancel Forwarding this is you Open Chat + Add Photo + Add Bio + Edit Name + Bio + You can add a few lines about yourself. Everyone will see this text. + Tap to add a Bio + Edit Bio + Add description + Edit description + tap to add photo or bio + tap to add bio + tap to add photo + tap to add description + Tap to add photo or description + Edit title + Title + Set New Photo + Bio updated. + Name updated. + Channel title updated. + Channel description updated.