diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1aa20fed..4ba42ff9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -44,6 +44,7 @@ jobs: sudo apt-get update -q -y sudo apt install libsdl2-dev libjpeg-dev libpng-dev sudo apt install libcairo2-dev + sudo apt install librlottie-dev libzip-dev shell: bash - name: default build run: | diff --git a/Makefile b/Makefile index e88336fe..c461c7e2 100644 --- a/Makefile +++ b/Makefile @@ -133,6 +133,20 @@ ifeq ($(CONFIG_LOADER_TVG), y) libtwin.a_files-y += src/image-tvg.c endif +ifeq ($(CONFIG_LOADER_LOTTIE), y) +libtwin.a_files-y += src/image-lottie.c +ifneq ($(CC_IS_EMCC), 1) +libtwin.a_cflags-y += $(call dep,cflags,rlottie) +libtwin.a_cflags-y += $(call dep,cflags,libzip) +TARGET_LIBS += $(call dep,libs,rlottie) +TARGET_LIBS += $(call dep,libs,libzip) +else +# Emscripten rlottie port (includes zlib) - flags needed for both compile and link +libtwin.a_cflags-y += -sUSE_RLOTTIE=1 -sUSE_ZLIB=1 +TARGET_LIBS += -sUSE_RLOTTIE=1 -sUSE_ZLIB=1 +endif +endif + # Applications libapps.a_files-y := apps/dummy.c @@ -142,6 +156,7 @@ libapps.a_files-$(CONFIG_DEMO_CALCULATOR) += apps/calc.c libapps.a_files-$(CONFIG_DEMO_SPLINE) += apps/spline.c libapps.a_files-$(CONFIG_DEMO_ANIMATION) += apps/animation.c libapps.a_files-$(CONFIG_DEMO_IMAGE) += apps/image.c +libapps.a_files-$(CONFIG_DEMO_LOTTIE) += apps/lottie.c libapps.a_includes-y := include # Emscripten size optimization @@ -268,7 +283,6 @@ endif # Build system integration CFLAGS += -include config.h - # Ensure composite-decls.h exists before including build rules # (needed for dependency generation in mk/common.mk) ifeq ($(filter config defconfig clean,$(MAKECMDGOALS)),) diff --git a/README.md b/README.md index 2065ec17..52b96eb6 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ relies on certain third-party packages for full functionality and access to all its features. We encourage the development environment to be installed with all optional packages, including [libjpeg](https://www.ijg.org/) and [libpng](https://github.com/pnggroup/libpng). * macOS: `brew install jpeg libpng` -* Ubuntu Linux / Debian: `sudo apt install libjpeg-dev libpng-dev` +* Ubuntu Linux / Debian: `sudo apt install libjpeg-dev libpng-dev librlottie-dev libzip-dev` The renderer implementation can either use the built-in pixel manipulation or be based on [Pixman](https://pixman.org/). The built-in renderer is simple and performs adequately on platforms without SIMD instructions, diff --git a/apps/apps_lottie.h b/apps/apps_lottie.h new file mode 100644 index 00000000..db70917e --- /dev/null +++ b/apps/apps_lottie.h @@ -0,0 +1,27 @@ +/* + * Twin - A Tiny Window System + * Copyright (c) 2025 National Cheng Kung University, Taiwan + * All rights reserved. + */ + +#ifndef _APPS_LOTTIE_H_ +#define _APPS_LOTTIE_H_ + +#include + +/** + * Start Lottie animation player + * + * @param screen Screen to create window on + * @param name Window title + * @param path Path to Lottie file (.json or .lottie) + * @param x Window X position + * @param y Window Y position + */ +void apps_lottie_start(twin_screen_t *screen, + const char *name, + const char *path, + int x, + int y); + +#endif /* _APPS_LOTTIE_H_ */ \ No newline at end of file diff --git a/apps/lottie.c b/apps/lottie.c new file mode 100644 index 00000000..d82acbae --- /dev/null +++ b/apps/lottie.c @@ -0,0 +1,208 @@ +/* + * Twin - A Tiny Window System + * Copyright (c) 2024 National Cheng Kung University, Taiwan + * All rights reserved. + * + * Lottie player with Play/Pause and Loop controls + */ + +#include + +#include + +#include "apps_lottie.h" + +#define BUTTON_SIZE twin_int_to_fixed(8) + +typedef struct { + mado_lottie_image_t *lottie; + twin_pixmap_t *pix; + twin_timeout_t *timeout; + twin_label_t *status; + twin_custom_widget_t *display; +} lottie_app_t; + +/* + * Animation display + */ + +static void _lottie_paint(twin_custom_widget_t *widget) +{ + lottie_app_t *app = (lottie_app_t *)twin_custom_widget_data(widget); + if (!app || !app->pix || !app->pix->animation) + return; + + twin_pixmap_t *dst = twin_custom_widget_pixmap(widget); + if (!dst) + return; + + twin_pixmap_t *frame = twin_animation_get_current_frame(app->pix->animation); + if (!frame) + return; + + twin_fill(dst, 0xffe0e0e0, TWIN_SOURCE, 0, 0, dst->width, dst->height); + + twin_coord_t ox = (dst->width - frame->width) / 2; + twin_coord_t oy = (dst->height - frame->height) / 2; + if (ox < 0) ox = 0; + if (oy < 0) oy = 0; + + twin_operand_t srcop = { + .source_kind = TWIN_PIXMAP, + .u.pixmap = frame, + }; + twin_composite(dst, ox, oy, &srcop, 0, 0, NULL, 0, 0, + TWIN_OVER, frame->width, frame->height); +} + +static twin_dispatch_result_t _lottie_dispatch(twin_widget_t *widget, + twin_event_t *event, + void *closure) +{ + (void)closure; + twin_custom_widget_t *cw = twin_widget_get_custom(widget); + if (cw && event->kind == TwinEventPaint) + _lottie_paint(cw); + return TwinDispatchContinue; +} + +/* + * Timer + */ + +static twin_time_t _lottie_timeout(twin_time_t now, void *closure) +{ + (void)now; + lottie_app_t *app = closure; + + if (!app || !app->lottie || !app->pix) + return 100; + + if (mado_lottie_is_playing(app->lottie)) { + twin_animation_advance_frame(app->pix->animation); + if (app->display) + twin_custom_widget_queue_paint(app->display); + } + + return mado_lottie_get_frame_delay(app->lottie); +} + +/* + * Status update + */ + +static void update_status(lottie_app_t *app) +{ + if (!app->status || !app->lottie) + return; + + bool playing = mado_lottie_is_playing(app->lottie); + bool loop = mado_lottie_is_looping(app->lottie); + + const char *text; + if (playing) + text = loop ? "Playing | Loop" : "Playing"; + else + text = loop ? "Paused | Loop" : "Paused"; + + twin_label_set(app->status, text, 0xff000000, BUTTON_SIZE, TwinStyleBold); +} + +/* + * Button callbacks + */ + +static twin_dispatch_result_t _play_cb(twin_widget_t *widget, + twin_event_t *event, + void *closure) +{ + (void)widget; + if (event->kind != TwinEventButtonSignalUp) + return TwinDispatchContinue; + + lottie_app_t *app = closure; + mado_lottie_set_playback(app->lottie, !mado_lottie_is_playing(app->lottie)); + update_status(app); + return TwinDispatchDone; +} + +static twin_dispatch_result_t _loop_cb(twin_widget_t *widget, + twin_event_t *event, + void *closure) +{ + (void)widget; + if (event->kind != TwinEventButtonSignalUp) + return TwinDispatchContinue; + + lottie_app_t *app = closure; + mado_lottie_set_loop(app->lottie, !mado_lottie_is_looping(app->lottie)); + update_status(app); + return TwinDispatchDone; +} + +/* + * Public API + */ + +void apps_lottie_start(twin_screen_t *screen, + const char *name, + const char *path, + int x, + int y) +{ + twin_pixmap_t *pix = twin_pixmap_from_file(path, TWIN_ARGB32); + if (!pix) { + return; + } + + if (!pix->animation || !twin_animation_is_lottie(pix->animation)) { + twin_pixmap_destroy(pix); + return; + } + + mado_lottie_image_t *lottie = twin_animation_get_lottie(pix->animation); + twin_animation_t *anim = pix->animation; + + int win_w = anim->width + 10; + int win_h = anim->height + 30; + + twin_toplevel_t *top = twin_toplevel_create( + screen, TWIN_ARGB32, TwinWindowApplication, x, y, win_w, win_h, name); + if (!top) { + twin_pixmap_destroy(pix); + return; + } + + twin_custom_widget_t *display = twin_custom_widget_create( + &top->box, 0xffe0e0e0, anim->width, anim->height, 1, 10, + _lottie_dispatch, sizeof(lottie_app_t)); + + if (!display) { + twin_pixmap_destroy(pix); + return; + } + + lottie_app_t *app = (lottie_app_t *)twin_custom_widget_data(display); + app->lottie = lottie; + app->pix = pix; + app->display = display; + + /* Controls: Play | Loop | Status */ + twin_box_t *bar = twin_box_create(&top->box, TwinBoxHorz); + + twin_button_t *play = twin_button_create(bar, "Play", 0xff000000, + BUTTON_SIZE, TwinStyleBold); + twin_widget_set_callback(&play->label.widget, _play_cb, app); + + twin_button_t *loop = twin_button_create(bar, "Loop", 0xff000000, + BUTTON_SIZE, TwinStyleBold); + twin_widget_set_callback(&loop->label.widget, _loop_cb, app); + + app->status = twin_label_create(bar, "Playing | Loop", 0xff000000, + BUTTON_SIZE, TwinStyleBold); + + app->timeout = twin_set_timeout(_lottie_timeout, + mado_lottie_get_frame_delay(lottie), app); + + twin_toplevel_show(top); +} \ No newline at end of file diff --git a/apps/main.c b/apps/main.c index b44afaac..9bd63f8c 100644 --- a/apps/main.c +++ b/apps/main.c @@ -17,6 +17,7 @@ #include "apps_calc.h" #include "apps_clock.h" #include "apps_image.h" +#include "apps_lottie.h" #include "apps_multi.h" #include "apps_spline.h" @@ -100,9 +101,14 @@ static void init_demo_apps(twin_context_t *ctx) #endif #if defined(CONFIG_DEMO_ANIMATION) apps_animation_start(screen, "Viewer", ASSET_PATH "nyancat.gif", 20, 20); + apps_animation_start(screen, "Lottie Animation API", ASSET_PATH "nyancat.json", 20, 20); #endif #if defined(CONFIG_DEMO_IMAGE) apps_image_start(screen, "Viewer", 20, 20); +#endif +#if defined(CONFIG_DEMO_LOTTIE) + apps_lottie_start(screen, "Lottie Viewer(JSON)", ASSET_PATH "nyancat.json", 20, 20); + apps_lottie_start(screen, "Lottie Viewer(dotLottie)", ASSET_PATH "nyancat.lottie", 20, 20); #endif twin_screen_set_active(screen, screen->top); } diff --git a/assets/nyancat.json b/assets/nyancat.json new file mode 100644 index 00000000..ee086765 --- /dev/null +++ b/assets/nyancat.json @@ -0,0 +1 @@ +{"v":"5.5.4","fr":60,"ip":0,"op":40,"w":800,"h":800,"nm":"nyan cat","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[100]},{"t":37,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":27,"s":[637.938,650.813,0],"to":[-16.667,0,0],"ti":[16.667,0,0]},{"t":38,"s":[537.938,650.813,0]}],"ix":2},"a":{"a":0,"k":[303.75,98.813,0],"ix":1},"s":{"a":0,"k":[93.465,93.465,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":37,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":270,"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":"Ellipse 4","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.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":37,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":180,"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":"Ellipse 3","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":37,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":90,"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":27,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":37,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":27,"op":38,"st":27,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":18,"s":[100]},{"t":23,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13,"s":[245.938,622.813,0],"to":[-16.667,0,0],"ti":[16.667,0,0]},{"t":24,"s":[145.938,622.813,0]}],"ix":2},"a":{"a":0,"k":[303.75,98.813,0],"ix":1},"s":{"a":0,"k":[224.995,224.995,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":18,"s":[{"i":[[-0.313,0.031],[0,-0.313],[0.156,0.031],[0.031,0.344]],"o":[[0.313,-0.031],[0,0.313],[-0.156,-0.031],[-0.031,-0.344]],"v":[[0.125,-0.688],[0.75,0],[0.031,0.344],[-0.25,-0.094]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":630,"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":"Ellipse 9","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.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":585,"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":"Ellipse 8","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":495,"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":"Ellipse 7","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":405,"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":"Ellipse 6","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":315,"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":"Ellipse 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":270,"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":"Ellipse 4","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":180,"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":"Ellipse 3","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":90,"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":13,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":18,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":23,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":13,"op":24,"st":13,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[100]},{"t":14,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[591.218,168.813,0],"to":[-16.667,0,0],"ti":[16.667,0,0]},{"t":15,"s":[491.218,168.813,0]}],"ix":2},"a":{"a":0,"k":[303.75,98.813,0],"ix":1},"s":{"a":0,"k":[108.137,108.137,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":9,"s":[{"i":[[-0.313,0.031],[0,-0.313],[0.156,0.031],[0.031,0.344]],"o":[[0.313,-0.031],[0,0.313],[-0.156,-0.031],[-0.031,-0.344]],"v":[[0.125,-0.688],[0.75,0],[0.031,0.344],[-0.25,-0.094]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":630,"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":"Ellipse 9","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.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":585,"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":"Ellipse 8","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":495,"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":"Ellipse 7","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":405,"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":"Ellipse 6","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":315,"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":"Ellipse 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":270,"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":"Ellipse 4","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":180,"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":"Ellipse 3","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":90,"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":9,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-19.688],[3.25,-16.438],[0,-4.25],[-3.25,-16.438]],"c":true}]},{"t":14,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false}],"ip":4,"op":15,"st":4,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":5,"s":[100]},{"t":10,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[717.938,270.813,0],"to":[-16.667,0,0],"ti":[16.667,0,0]},{"t":11,"s":[617.938,270.813,0]}],"ix":2},"a":{"a":0,"k":[303.75,98.813,0],"ix":1},"s":{"a":0,"k":[158.816,158.816,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":10,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":270,"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":"Ellipse 4","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.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":10,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":180,"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":"Ellipse 3","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":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":10,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":90,"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-3.25],[3.25,0],[0,3.25],[-3.25,0]],"c":true}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":5,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-29.688],[3.25,-26.438],[0,-4.25],[-3.25,-26.438]],"c":true}]},{"t":10,"s":[{"i":[[-1.795,0],[0,-1.795],[1.795,0],[0,1.795]],"o":[[1.795,0],[0,1.795],[-1.795,0],[0,-1.795]],"v":[[0,-38.5],[3.25,-35.25],[0,-28],[-3.25,-35.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.933333337307,0.933333337307,0.933333337307,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":[303.75,98.75],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":11,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"mouth","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.167,"y":0.167},"t":0,"s":[393,401,0],"to":[2,0,0],"ti":[-1.833,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[405,401,0],"to":[1.833,2,0],"ti":[2.5,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[404,413,0],"to":[-2.5,2,0],"ti":[1.833,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[390,413,0],"to":[-1.833,-2,0],"ti":[-0.5,2,0]},{"t":40,"s":[393,401,0]}],"ix":2},"a":{"a":0,"k":[0,0,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],[17.5,0],[0,0],[19.75,0],[-1.25,10.75]],"o":[[0,0],[-20.5,0],[0,0],[-13.022,0],[1.282,-11.027]],"v":[[134.375,43.125],[121.5,57.5],[100.5,43.5],[80.75,57.25],[64,41.25]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":7,"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":"Shape 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"face","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.167,"y":0.167},"t":0,"s":[393,401,0],"to":[2,0,0],"ti":[-1.833,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[405,401,0],"to":[1.833,2,0],"ti":[2.5,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[404,413,0],"to":[-2.5,2,0],"ti":[1.833,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[390,413,0],"to":[-1.833,-2,0],"ti":[-0.5,2,0]},{"t":40,"s":[393,401,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[8.5,8.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","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":[134.75,13.75],"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":"Ellipse 6","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[8.5,8.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","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":[55.75,13.75],"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":"Ellipse 5","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[21.5,21.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470649242,0.643137276173,0.674509823322,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":[158.5,44.75],"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":"Ellipse 4","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[22.5,22.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.976470649242,0.643137276173,0.674509823322,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":[36.5,44.75],"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":"Ellipse 3","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-3.678],[-1.75,-0.125],[0.125,2.625]],"o":[[0,2.375],[2.494,0.178],[-0.173,-3.623]],"v":[[93.375,25.75],[99.5,33.25],[106.375,25.25]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":[1.125,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":"Shape 1","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":[138,17],"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[20,20],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,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":[59,17],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"head","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.167,"y":0.167},"t":0,"s":[393,401,0],"to":[2,0,0],"ti":[-1.833,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[405,401,0],"to":[1.833,2,0],"ti":[2.5,-2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[404,413,0],"to":[-2.5,2,0],"ti":[1.833,2,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[390,413,0],"to":[-1.833,-2,0],"ti":[-0.5,2,0]},{"t":40,"s":[393,401,0]}],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[6.5,5],[0,0],[20,-4.5],[3,-3.5],[-4.5,-26.5],[0,0],[-26.266,0.048],[-18.746,2.631],[4.438,20.78],[-0.557,5.572]],"o":[[-9,-1],[0,0],[-17,-22.5],[-3,3.5],[-30,60],[0,0],[12.871,-0.024],[34.251,-4.807],[-2.623,-12.282],[1.5,-15]],"v":[[150.5,-44.5],[114,-15],[71.5,-16],[31.5,-44],[20.5,0],[53.5,72.5],[93.503,76.055],[141,72.5],[173.7,17.064],[164.5,-6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[6.5,5],[0,0],[20,-4.5],[3,-3.5],[-4.5,-26.5],[-7,-0.75],[-26.266,0.048],[-28.75,1],[4.438,20.78],[1.19,5.472]],"o":[[-9,-1],[0,0],[-17,-22.5],[-3,3.5],[-30,60],[7,0.75],[12.871,-0.024],[32.278,-1.123],[-2.623,-12.282],[-5,-23]],"v":[[138.5,-46.5],[114,-15],[71.5,-16],[19,-40],[20.5,0],[53.5,72.5],[96.503,73.055],[141,72.5],[173.7,17.064],[164.5,-6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[6.5,5],[0,0],[20,-4.5],[3,-3.5],[-4.5,-26.5],[-7,-0.75],[-26.266,0.048],[-28.75,1],[4.438,20.78],[1.596,5.368]],"o":[[-9,-1],[0,0],[-23.5,-21],[-3,3.5],[-30,60],[7,0.75],[12.871,-0.024],[32.278,-1.123],[-2.623,-12.282],[-5.5,-18.5]],"v":[[148,-48.5],[114,-15],[71.5,-16],[36,-46.5],[20.5,0],[53.5,72.5],[96.503,73.055],[141,72.5],[173.7,17.064],[164.5,-6]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[6.5,5],[0,0],[20,-4.5],[3,-3.5],[-4.5,-26.5],[-10,-0.5],[-26.266,0.048],[-28.75,1],[4.438,20.78],[2.881,4.802]],"o":[[-9,-1],[0,0],[-19.5,-17],[-3,3.5],[-30,60],[7.031,0.352],[12.871,-0.024],[32.278,-1.123],[-2.623,-12.282],[-10.5,-17.5]],"v":[[153.5,-47],[114,-15],[71.5,-16],[42.5,-46.5],[20.5,0],[53.5,71.5],[96.503,73.055],[145.5,71.5],[173.7,17.064],[164.5,-6]],"c":true}]},{"t":40,"s":[{"i":[[6.5,5],[0,0],[20,-4.5],[3,-3.5],[-4.5,-26.5],[0,0],[-26.266,0.048],[-18.746,2.631],[4.438,20.78],[-0.557,5.572]],"o":[[-9,-1],[0,0],[-17,-22.5],[-3,3.5],[-30,60],[0,0],[12.871,-0.024],[34.251,-4.807],[-2.623,-12.282],[1.5,-15]],"v":[[150.5,-44.5],[114,-15],[71.5,-16],[31.5,-44],[20.5,0],[53.5,72.5],[93.503,76.055],[141,72.5],[173.7,17.064],[164.5,-6]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"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.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[400,400,0],"to":[0,-1.833,0],"ti":[0.167,0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[400,389,0],"to":[-0.167,-0.167,0],"ti":[0.167,-1.667,0]},{"t":40,"s":[399,399,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"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":0,"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":8,"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":16,"s":[94.191,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[0.867,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":24,"s":[94.191,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[-0.4,0,0]},"t":32,"s":[102.905,95.811,100]},{"t":40,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[75.5,-35.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 10","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[30.25,-54],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 9","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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,15],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 8","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-25.5,45.25],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 7","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-59.75,56.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 6","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-73,26.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 5","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-50.5,4],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 4","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-16.75,-15],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 3","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-4.25,-55.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 2","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10,10],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.960784375668,0.266666680574,0.709803938866,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":[-60.75,-44],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[120.908,120.908],"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":"Ellipse 1","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[28,0],[0,0],[0,-35],[0,0],[-55,0],[0,0],[0,40.5]],"o":[[0,0],[-39,0],[0,0],[0,35],[0,0],[35,0],[0,0],[0,-40.5]],"v":[[70.5,-71],[-53.5,-71],[-89.5,-38],[-89.5,38],[-56,67.5],[70,67.5],[104.5,33.5],[104.5,-32]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.647058844566,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":"Shape 1","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"body 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.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[400,400,0],"to":[0,-1.833,0],"ti":[0.167,0.167,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[400,389,0],"to":[-0.167,-0.167,0],"ti":[0.167,-1.667,0]},{"t":40,"s":[399,399,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"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":0,"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":8,"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":16,"s":[94.191,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[0.867,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":24,"s":[94.191,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[-0.4,0,0]},"t":32,"s":[102.905,95.811,100]},{"t":40,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[21.5,0],[0,0],[0,-26.5],[0,0],[-23,0],[0,0],[0,23.5]],"o":[[0,0],[-21.5,0],[0,0],[0,26.5],[0,0],[23,0],[0,0],[0,-23.5]],"v":[[97,-85],[-87,-85],[-106.5,-61],[-106.5,57],[-86,82.5],[98,82.5],[120.5,58],[120.5,-64]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235354424,0.827451050282,0.611764729023,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,400,0],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[4.5,-4],[-24.412,-17.437],[-32.5,0.5],[7.15,-0.367],[8.75,8.75]],"o":[[-4.5,4],[8.75,6.25],[17.562,-0.27],[-9.75,0.5],[-17.221,-17.221]],"v":[[-172.75,-14.25],[-157.75,25.25],[-105.5,39],[-104.5,6],[-142,-3.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":6.666,"s":[{"i":[[12.75,-12.125],[-14.5,-5.75],[-22.75,6.625],[7.154,-0.232],[9,4.75]],"o":[[-12.75,12.125],[14.5,5.75],[17.561,0.048],[-17.75,7.625],[-9,-4.75]],"v":[[-176.25,-1.625],[-156.5,38.75],[-104.75,38.875],[-104.25,5.875],[-143.5,9.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":13.334,"s":[{"i":[[6.65,-18.55],[-17.15,1.95],[-13.7,7.7],[7.156,-0.151],[17.8,-2.65]],"o":[[-6.65,18.55],[17.15,-1.95],[17.561,0.239],[-17.4,9.7],[-17.8,2.65]],"v":[[-184.35,26.95],[-138.65,48.95],[-104.3,38.8],[-104.1,5.8],[-143.7,18.35]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[-6.387,-6.559],[-15.5,12],[-12,-0.25],[7.158,-0.097],[11.5,-9.5]],"o":[[9.25,9.5],[8.939,-6.921],[17.56,0.366],[-18.5,0.25],[-19.205,15.865]],"v":[[-173.25,59.5],[-135.25,50.25],[-104,38.75],[-104,5.75],[-157,21.25]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26.666,"s":[{"i":[[-8.25,-16],[-19.25,0.25],[-11.133,-4.484],[10.5,6.75],[18,0.25]],"o":[[10.297,19.97],[13.769,-0.179],[18,7.25],[-15.563,-10.005],[-26.2,-0.364]],"v":[[-188.75,30.5],[-147.25,26.25],[-107,35.75],[-103,7.25],[-143,-4.75]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":33.334,"s":[{"i":[[-2.35,-19.1],[-20.15,-7.65],[-13.8,-8.05],[14.7,3.45],[18.7,6.55]],"o":[[2.35,19.1],[20.15,7.65],[17.736,3.12],[-12.7,-5.35],[-24.281,-8.505]],"v":[[-185.35,2.4],[-142.65,21.35],[-105.2,37.55],[-101.8,1.85],[-137.2,-11.05]],"c":true}]},{"t":40,"s":[{"i":[[4.5,-4],[-24.412,-17.437],[-32.5,0.5],[7.15,-0.367],[8.75,8.75]],"o":[[-4.5,4],[8.75,6.25],[17.562,-0.27],[-9.75,0.5],[-17.221,-17.221]],"v":[[-172.75,-14.25],[-157.75,25.25],[-105.5,39],[-104.5,6],[-142,-3.25]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"leg 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[620,395,0],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[-0.614,-19.764],[-20,2.5],[0,0],[1.047,4.405]],"o":[[-15.491,3.778],[0.356,11.451],[23.815,-2.977],[0,0],[-1.3,-5.472]],"v":[[-95,64.5],[-106.856,90.549],[-88,112.5],[-78,81.5],[-78.351,72.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[0.856,-6.049],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-0.861,6.086],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-112.356,93.049],[-88.5,108],[-78,81.5],[-84.99,75.877]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[5.348,-3.709],[-0.144,-8.299],[-15.175,0.912],[-0.375,4.5],[4.955,3.26]],"o":[[-16,10.5],[-1.753,8.394],[24.25,-1.25],[0.25,-3],[-4.74,-3.104]],"v":[[-109.625,68.75],[-121.856,93.299],[-95.5,110.25],[-87.5,83.75],[-93.73,70.047]],"c":true}]},{"t":40,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[-0.614,-19.764],[-20,2.5],[0,0],[1.047,4.405]],"o":[[-15.491,3.778],[0.356,11.451],[23.815,-2.977],[0,0],[-1.3,-5.472]],"v":[[-95,64.5],[-106.856,90.549],[-88,112.5],[-78,81.5],[-78.351,72.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[0.856,-6.049],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-0.861,6.086],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-112.356,93.049],[-88.5,108],[-78,81.5],[-84.99,75.877]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[5.348,-3.709],[-0.144,-8.299],[-15.175,0.912],[-0.375,4.5],[4.955,3.26]],"o":[[-16,10.5],[-1.753,8.394],[24.25,-1.25],[0.25,-3],[-4.74,-3.104]],"v":[[-109.625,68.75],[-121.856,93.299],[-95.5,110.25],[-87.5,83.75],[-93.73,70.047]],"c":true}]},{"t":40,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"leg 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[563,395,0],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[-0.614,-19.764],[-20,2.5],[0,0],[1.047,4.405]],"o":[[-15.491,3.778],[0.356,11.451],[23.815,-2.977],[0,0],[-1.3,-5.472]],"v":[[-95,64.5],[-106.856,90.549],[-88,112.5],[-78,81.5],[-78.351,72.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[0.856,-6.049],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-0.861,6.086],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-112.356,93.049],[-88.5,108],[-78,81.5],[-84.99,75.877]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[5.348,-3.709],[-0.144,-8.299],[-15.175,0.912],[-0.375,4.5],[4.955,3.26]],"o":[[-16,10.5],[-1.753,8.394],[24.25,-1.25],[0.25,-3],[-4.74,-3.104]],"v":[[-109.625,68.75],[-121.856,93.299],[-95.5,110.25],[-87.5,83.75],[-93.73,70.047]],"c":true}]},{"t":40,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[-0.614,-19.764],[-20,2.5],[0,0],[1.047,4.405]],"o":[[-15.491,3.778],[0.356,11.451],[23.815,-2.977],[0,0],[-1.3,-5.472]],"v":[[-95,64.5],[-106.856,90.549],[-88,112.5],[-78,81.5],[-78.351,72.72]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[0.856,-6.049],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-0.861,6.086],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-112.356,93.049],[-88.5,108],[-78,81.5],[-84.99,75.877]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":35,"s":[{"i":[[5.348,-3.709],[-0.144,-8.299],[-15.175,0.912],[-0.375,4.5],[4.955,3.26]],"o":[[-16,10.5],[-1.753,8.394],[24.25,-1.25],[0.25,-3],[-4.74,-3.104]],"v":[[-109.625,68.75],[-121.856,93.299],[-95.5,110.25],[-87.5,83.75],[-93.73,70.047]],"c":true}]},{"t":40,"s":[{"i":[[5.548,-2.912],[4.319,-17.479],[-10.277,0],[-0.75,9],[5.846,3.907]],"o":[[-20,10.5],[-2.644,10.701],[21,0],[0.5,-6],[-4.43,-2.961]],"v":[[-117.25,63],[-126.356,95.549],[-111.5,113.5],[-94,87],[-102.471,64.218]],"c":true}]}],"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"leg 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[400,395,0],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[4.715,-4.126],[10.941,-14.299],[-6.936,3.153],[0,0],[11.346,12.282]],"o":[[-12,10.5],[-9.144,11.951],[22,-10],[0,0],[-3.616,-3.915]],"v":[[-105,69],[-135.356,94.549],[-122.5,112.5],[-85,89],[-88.846,70.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[18.31,-7.464],[-20,2.5],[0,0],[1.851,5.53]],"o":[[-15.491,3.778],[-12.144,4.951],[23.815,-2.977],[0,0],[-1.785,-5.334]],"v":[[-95,64.5],[-105.856,82.049],[-95,103.5],[-75.5,82.5],[-77.726,70.845]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[18.31,-7.464],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-12.144,4.951],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-116.356,92.549],[-105.5,114],[-78,81.5],[-84.99,75.877]],"c":true}]},{"t":40,"s":[{"i":[[4.715,-4.126],[10.941,-14.299],[-6.936,3.153],[0,0],[11.346,12.282]],"o":[[-12,10.5],[-9.144,11.951],[22,-10],[0,0],[-3.616,-3.915]],"v":[[-105,69],[-135.356,94.549],[-122.5,112.5],[-85,89],[-88.846,70.218]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"leg 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[450,395,0],"ix":2},"a":{"a":0,"k":[0,0,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":0,"s":[{"i":[[4.715,-4.126],[10.941,-14.299],[-6.936,3.153],[0,0],[11.346,12.282]],"o":[[-12,10.5],[-9.144,11.951],[22,-10],[0,0],[-3.616,-3.915]],"v":[[-105,69],[-135.356,94.549],[-122.5,112.5],[-85,89],[-88.846,70.218]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10,"s":[{"i":[[5.149,-4.506],[14.856,-13.049],[-20.506,0],[0,0],[4.175,4.046]],"o":[[-12,10.5],[-11.305,9.931],[24,0],[0,0],[-5.187,-5.027]],"v":[[-101.5,62.5],[-115.856,78.549],[-109,102],[-77,76],[-84.199,67.652]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[11.358,-2.77],[18.31,-7.464],[-20,2.5],[0,0],[1.851,5.53]],"o":[[-15.491,3.778],[-12.144,4.951],[23.815,-2.977],[0,0],[-1.785,-5.334]],"v":[[-95,64.5],[-105.856,82.049],[-95,103.5],[-75.5,82.5],[-77.726,70.845]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[{"i":[[5.149,-4.506],[18.31,-7.464],[-20.073,1.825],[0,0],[4.065,2.613]],"o":[[-12,10.5],[-12.144,4.951],[27.5,-2.5],[0,0],[-5.05,-3.247]],"v":[[-102,74.5],[-116.356,92.549],[-105.5,114],[-78,81.5],[-84.99,75.877]],"c":true}]},{"t":40,"s":[{"i":[[4.715,-4.126],[10.941,-14.299],[-6.936,3.153],[0,0],[11.346,12.282]],"o":[[-12,10.5],[-9.144,11.951],[22,-10],[0,0],[-3.616,-3.915]],"v":[[-105,69],[-135.356,94.549],[-122.5,112.5],[-85,89],[-88.846,70.218]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0.658823549747,0.662745118141,0.666666686535,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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":40,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Shape Layer 4","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[401,400,0],"ix":2},"a":{"a":0,"k":[0,0,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],[-67,59],[28,16]],"o":[[0,0],[0,0],[46.318,-40.788],[-37.122,-21.213]],"v":[[-401,-104],[-401,119],[-94,78],[-89,-84]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":40,"st":20,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"rainbow Outlines 2","tt":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.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[279.611,406,0],"to":[-30.789,0,0],"ti":[30.789,0,0]},{"t":40,"s":[94.875,406,0]}],"ix":2},"a":{"a":0,"k":[367.5,131.5,0],"ix":1},"s":{"a":0,"k":[75.507,75.507,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.279],[0,-25.923],[-122.4,-12.279],[-244.8,-25.923],[-367.2,-12.279],[-367.2,25.923],[-244.8,12.278],[-122.4,25.923],[0,12.278],[122.4,25.923],[244.8,12.278],[367.2,25.923],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317314267626,0.213829025568,0.589291920381,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":[364.387,216.168],"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":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.922],[122.4,-12.278],[0,-25.922],[-122.4,-12.278],[-244.8,-25.922],[-367.2,-12.278],[-367.2,25.922],[-244.8,12.28],[-122.4,25.922],[0,12.28],[122.4,25.922],[244.8,12.28],[367.2,25.922],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.341164592668,0.606181006338,0.780451516544,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":[364.387,179.465],"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},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.279],[0,-25.923],[-122.4,-12.279],[-244.8,-25.923],[-367.2,-12.279],[-367.2,25.923],[-244.8,12.279],[-122.4,25.923],[0,12.279],[122.4,25.923],[244.8,12.279],[367.2,25.923],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.418309709138,0.728695200004,0.130248021144,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":[364.387,143.265],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.922],[122.4,-12.279],[0,-25.922],[-122.4,-12.279],[-244.8,-25.922],[-367.2,-12.279],[-367.2,25.922],[-244.8,12.279],[-122.4,25.922],[0,12.279],[122.4,25.922],[244.8,12.279],[367.2,25.922],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.915979662129,0.96097166772,0.066235486199,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":[364.387,106.563],"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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.278],[0,-25.923],[-122.4,-12.278],[-244.8,-25.923],[-367.2,-12.278],[-367.2,25.923],[-244.8,12.28],[-122.4,25.923],[0,12.28],[122.4,25.923],[244.8,12.28],[367.2,25.923],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.999794574812,0.598157276827,0.02665384517,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":[364.387,70.362],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.278],[0,-25.923],[-122.4,-12.278],[-244.8,-25.923],[-367.2,-12.278],[-367.2,25.923],[-244.8,12.279],[-122.4,25.923],[0,12.279],[122.4,25.923],[244.8,12.279],[367.2,25.923],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.994454716701,0.031589493097,0.023664128547,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":[364.387,34.661],"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 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":20,"op":40,"st":20,"bm":0},{"ddd":0,"ind":17,"ty":4,"nm":"Shape Layer 2","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[401,400,0],"ix":2},"a":{"a":0,"k":[0,0,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],[-67,59],[28,16]],"o":[[0,0],[0,0],[46.318,-40.788],[-37.122,-21.213]],"v":[[-401,-104],[-401,119],[-94,78],[-89,-84]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","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":"Shape 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":18,"ty":4,"nm":"rainbow Outlines","tt":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.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[279.611,406,0],"to":[-30.789,0,0],"ti":[30.789,0,0]},{"t":20,"s":[94.875,406,0]}],"ix":2},"a":{"a":0,"k":[367.5,131.5,0],"ix":1},"s":{"a":0,"k":[75.507,75.507,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.279],[0,-25.923],[-122.4,-12.279],[-244.8,-25.923],[-367.2,-12.279],[-367.2,25.923],[-244.8,12.278],[-122.4,25.923],[0,12.278],[122.4,25.923],[244.8,12.278],[367.2,25.923],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.317314267626,0.213829025568,0.589291920381,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":[364.387,216.168],"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":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.922],[122.4,-12.278],[0,-25.922],[-122.4,-12.278],[-244.8,-25.922],[-367.2,-12.278],[-367.2,25.922],[-244.8,12.28],[-122.4,25.922],[0,12.28],[122.4,25.922],[244.8,12.28],[367.2,25.922],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.341164592668,0.606181006338,0.780451516544,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":[364.387,179.465],"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},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.279],[0,-25.923],[-122.4,-12.279],[-244.8,-25.923],[-367.2,-12.279],[-367.2,25.923],[-244.8,12.279],[-122.4,25.923],[0,12.279],[122.4,25.923],[244.8,12.279],[367.2,25.923],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.418309709138,0.728695200004,0.130248021144,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":[364.387,143.265],"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 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.922],[122.4,-12.279],[0,-25.922],[-122.4,-12.279],[-244.8,-25.922],[-367.2,-12.279],[-367.2,25.922],[-244.8,12.279],[-122.4,25.922],[0,12.279],[122.4,25.922],[244.8,12.279],[367.2,25.922],[367.2,-12.279]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.915979662129,0.96097166772,0.066235486199,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":[364.387,106.563],"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 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.278],[0,-25.923],[-122.4,-12.278],[-244.8,-25.923],[-367.2,-12.278],[-367.2,25.923],[-244.8,12.28],[-122.4,25.923],[0,12.28],[122.4,25.923],[244.8,12.28],[367.2,25.923],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.999794574812,0.598157276827,0.02665384517,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":[364.387,70.362],"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 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[49.823,0],[0,0],[-61.2,0],[-49.823,0],[-61.2,0],[-49.824,0],[-61.2,0],[-49.824,0],[0,0]],"o":[[-61.2,0],[-49.824,0],[-61.2,0],[-49.823,0],[-61.2,0],[0,0],[49.823,0],[61.2,0],[49.824,0],[61.2,0],[49.824,0],[61.2,0],[0,0],[-49.824,0]],"v":[[244.8,-25.923],[122.4,-12.278],[0,-25.923],[-122.4,-12.278],[-244.8,-25.923],[-367.2,-12.278],[-367.2,25.923],[-244.8,12.279],[-122.4,25.923],[0,12.279],[122.4,25.923],[244.8,12.279],[367.2,25.923],[367.2,-12.278]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.994454716701,0.031589493097,0.023664128547,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":[364.387,34.661],"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 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":21,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/assets/nyancat.lottie b/assets/nyancat.lottie new file mode 100644 index 00000000..1bc72365 Binary files /dev/null and b/assets/nyancat.lottie differ diff --git a/configs/Kconfig b/configs/Kconfig index 08295b0d..11986950 100644 --- a/configs/Kconfig +++ b/configs/Kconfig @@ -68,6 +68,11 @@ config HAVE_CAIRO default n if CC_IS_EMCC def_bool $(shell,pkg-config --exists cairo && echo y || echo n) if !CC_IS_EMCC +config HAVE_LIBRLOTTIE + bool + default y if CC_IS_EMCC + default $(shell,pkg-config --exists rlottie && echo y || echo n) if !CC_IS_EMCC + choice prompt "Backend Selection" default BACKEND_WASM if CC_IS_EMCC @@ -251,6 +256,13 @@ config LOADER_TVG Enable TinyVG vector graphics format support. Compact binary format for scalable graphics. +config LOADER_LOTTIE + bool "Enable Lottie loader" + depends on HAVE_LIBRLOTTIE + default y + help + Enable Lottie graphics format support. + endmenu menu "Demo Applications" @@ -317,6 +329,14 @@ config DEMO_IMAGE Automatically enables TVG loader. Demonstrates resolution-independent graphics. +config DEMO_LOTTIE + bool "Build lottie demo" + select LOADER_LOTTIE + default y + depends on DEMO_APPLICATIONS + help + Shows lottie format rendering capabilities. + endmenu menu "Tools" diff --git a/include/twin.h b/include/twin.h index 1cfd07f7..39e28d68 100644 --- a/include/twin.h +++ b/include/twin.h @@ -1507,6 +1507,65 @@ void twin_custom_widget_queue_paint(twin_custom_widget_t *custom); /** Get the drawing pixmap for a custom widget */ twin_pixmap_t *twin_custom_widget_pixmap(twin_custom_widget_t *custom); +/* + * image-lottie.c + */ + +/* Lottie image context (opaque type) */ +typedef struct _mado_lottie_image mado_lottie_image_t; + +/* + * Lottie image creation + */ +mado_lottie_image_t *mado_lottie_from_file(const char *path, + size_t width, + size_t height); + +void mado_lottie_destroy(mado_lottie_image_t *lottie); + +/* + * Lottie rendering + */ +void mado_lottie_render(mado_lottie_image_t *lottie); + +void mado_lottie_render_to_pixmap(mado_lottie_image_t *lottie, + twin_pixmap_t *pixmap); + +uint32_t *mado_lottie_get_buffer(const mado_lottie_image_t *lottie); + +/* + * Lottie animation control + */ +bool mado_lottie_advance_frame(mado_lottie_image_t *lottie); +/* + * Lottie control API - defined in image-lottie.c + */ +/* Query functions */ +bool mado_lottie_is_playing(const mado_lottie_image_t *lottie); +bool mado_lottie_is_looping(const mado_lottie_image_t *lottie); +twin_time_t mado_lottie_get_frame_delay(const mado_lottie_image_t *lottie); + +/* Control functions */ +void mado_lottie_set_progress(mado_lottie_image_t *lottie, float progress); +void mado_lottie_set_playback(mado_lottie_image_t *lottie, bool playing); +void mado_lottie_set_loop(mado_lottie_image_t *lottie, bool loop); + +/* Animation integration */ +bool twin_animation_is_lottie(const twin_animation_t *anim); +mado_lottie_image_t *twin_animation_get_lottie(twin_animation_t *anim); + +/* + * Lottie pixmap loader (parallel to twin_tvg_to_pixmap_scale) + */ +twin_pixmap_t *twin_lottie_to_pixmap_scale(const char *filepath, + twin_format_t fmt, + twin_coord_t w, + twin_coord_t h); + +bool twin_animation_is_lottie(const twin_animation_t *anim); +void twin_lottie_advance_frame(twin_animation_t *anim); +void twin_lottie_animation_destroy(twin_animation_t *anim); + /** * Create window with decorations and event handling * @screen : Screen to display window on diff --git a/src/animation.c b/src/animation.c index 266f46c8..dd2592fc 100644 --- a/src/animation.c +++ b/src/animation.c @@ -9,14 +9,14 @@ twin_time_t twin_animation_get_current_delay(const twin_animation_t *anim) { - if (!anim) + if (!anim || !anim->iter) return 0; return anim->iter->current_delay; } twin_pixmap_t *twin_animation_get_current_frame(const twin_animation_t *anim) { - if (!anim) + if (!anim || !anim->iter) return NULL; return anim->iter->current_frame; } @@ -25,6 +25,14 @@ void twin_animation_advance_frame(twin_animation_t *anim) { if (!anim) return; + + /* Lottie needs on-demand rendering */ + if (twin_animation_is_lottie(anim)) { + twin_lottie_advance_frame(anim); + return; + } + + /* Standard GIF-style animation */ twin_animation_iter_advance(anim->iter); } @@ -33,6 +41,12 @@ void twin_animation_destroy(twin_animation_t *anim) if (!anim) return; + /* Lottie has special cleanup */ + if (twin_animation_is_lottie(anim)) { + twin_lottie_animation_destroy(anim); + return; + } + free(anim->iter); for (twin_count_t i = 0; i < anim->n_frames; i++) { twin_pixmap_destroy(anim->frames[i]); diff --git a/src/image-lottie.c b/src/image-lottie.c new file mode 100644 index 00000000..735ca74d --- /dev/null +++ b/src/image-lottie.c @@ -0,0 +1,634 @@ +/* + * Twin - A Tiny Window System + * Copyright (c) 2024 National Cheng Kung University, Taiwan + * All rights reserved. + * + * Lottie animation support via Samsung rlottie. + * Supports JSON (.json) and dotLottie (.lottie) formats. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "twin.h" +#include "twin_private.h" + +#include +#include + +/* Magic number to identify Lottie context */ +#define MADO_LOTTIE_MAGIC 0x4C4F5454 /* "LOTT" */ + +#define DOTLOTTIE_MAX_PATH 512 +#define DOTLOTTIE_MAX_JSON (16 * 1024 * 1024) + +/* + * Lottie image context + */ +typedef struct _mado_lottie_image { + uint32_t magic; /**< Magic number for identification */ + Lottie_Animation *animation; /**< rlottie handle */ + size_t width; + size_t height; + size_t total_frames; + size_t current_frame; + double framerate; + uint32_t *buffer; /**< ARGB8888 render buffer */ + bool playing; + bool loop; + char *temp_dir; /**< For dotLottie extraction */ +} mado_lottie_image_t; + +/* + * dotLottie helpers + */ + +static bool is_zip_file(const char *path) +{ + FILE *f = fopen(path, "rb"); + if (!f) + return false; + + uint8_t hdr[4]; + size_t n = fread(hdr, 1, 4, f); + fclose(f); + + return (n == 4 && hdr[0] == 0x50 && hdr[1] == 0x4B && + hdr[2] == 0x03 && hdr[3] == 0x04); +} + +static char *create_temp_dir(void) +{ + char tpl[] = "/tmp/mado_lottie_XXXXXX"; + char *d = mkdtemp(tpl); + return d ? strdup(d) : NULL; +} + +static void remove_temp_dir(const char *path) +{ + if (!path) + return; + char cmd[DOTLOTTIE_MAX_PATH + 16]; + snprintf(cmd, sizeof(cmd), "rm -rf '%s'", path); + int r = system(cmd); + (void)r; +} + +static bool zip_extract(zip_t *z, const char *name, const char *dest) +{ + zip_file_t *zf = zip_fopen(z, name, 0); + if (!zf) + return false; + + FILE *out = fopen(dest, "wb"); + if (!out) { + zip_fclose(zf); + return false; + } + + char buf[8192]; + zip_int64_t n; + while ((n = zip_fread(zf, buf, sizeof(buf))) > 0) + fwrite(buf, 1, n, out); + + fclose(out); + zip_fclose(zf); + return true; +} + +static char *zip_read(zip_t *z, const char *name) +{ + struct zip_stat st; + zip_stat_init(&st); + if (zip_stat(z, name, 0, &st) != 0 || st.size > DOTLOTTIE_MAX_JSON) + return NULL; + + zip_file_t *zf = zip_fopen(z, name, 0); + if (!zf) + return NULL; + + char *data = malloc(st.size + 1); + if (!data) { + zip_fclose(zf); + return NULL; + } + + zip_fread(zf, data, st.size); + data[st.size] = '\0'; + zip_fclose(zf); + return data; +} + +/* Simple JSON "id" extractor from animations array */ +static char *get_animation_id(const char *manifest) +{ + const char *p = strstr(manifest, "\"animations\""); + if (!p) + return NULL; + p = strchr(p, '['); + if (!p) + return NULL; + p = strchr(p, '{'); + if (!p) + return NULL; + p = strstr(p, "\"id\""); + if (!p) + return NULL; + p = strchr(p + 4, '"'); + if (!p) + return NULL; + p++; + const char *e = strchr(p, '"'); + if (!e) + return NULL; + + size_t len = e - p; + char *id = malloc(len + 1); + if (id) { + memcpy(id, p, len); + id[len] = '\0'; + } + return id; +} + +static bool mkdir_p(const char *path) +{ + char tmp[DOTLOTTIE_MAX_PATH]; + snprintf(tmp, sizeof(tmp), "%s", path); + for (char *p = tmp + 1; *p; p++) { + if (*p == '/') { + *p = 0; + mkdir(tmp, 0755); + *p = '/'; + } + } + return mkdir(tmp, 0755) == 0 || errno == EEXIST; +} + +static char *extract_dotlottie(const char *path, char **out_temp) +{ + int err; + zip_t *z = zip_open(path, ZIP_RDONLY, &err); + if (!z) + return NULL; + + char *temp = create_temp_dir(); + if (!temp) { + zip_close(z); + return NULL; + } + + char *manifest = zip_read(z, "manifest.json"); + if (!manifest) { + remove_temp_dir(temp); + free(temp); + zip_close(z); + return NULL; + } + + char *id = get_animation_id(manifest); + free(manifest); + if (!id) { + remove_temp_dir(temp); + free(temp); + zip_close(z); + return NULL; + } + + /* Extract animation JSON */ + char zpath[DOTLOTTIE_MAX_PATH], lpath[DOTLOTTIE_MAX_PATH]; + snprintf(zpath, sizeof(zpath), "animations/%s.json", id); + snprintf(lpath, sizeof(lpath), "%s/%s.json", temp, id); + free(id); + + if (!zip_extract(z, zpath, lpath)) { + remove_temp_dir(temp); + free(temp); + zip_close(z); + return NULL; + } + + /* Extract images */ + char imgdir[DOTLOTTIE_MAX_PATH]; + snprintf(imgdir, sizeof(imgdir), "%s/images", temp); + mkdir_p(imgdir); + + zip_int64_t n = zip_get_num_entries(z, 0); + for (zip_int64_t i = 0; i < n; i++) { + const char *name = zip_get_name(z, i, 0); + if (!name || strncmp(name, "images/", 7) != 0) + continue; + const char *fname = name + 7; + if (*fname && fname[strlen(fname) - 1] != '/') { + char dest[DOTLOTTIE_MAX_PATH]; + snprintf(dest, sizeof(dest), "%s/images/%s", temp, fname); + zip_extract(z, name, dest); + } + } + + zip_close(z); + *out_temp = temp; + return strdup(lpath); +} + +/* + * Public API + */ + +mado_lottie_image_t *mado_lottie_from_file(const char *path, + size_t width, + size_t height) +{ + if (!path) + return NULL; + + Lottie_Animation *anim = NULL; + char *temp_dir = NULL; + + if (is_zip_file(path)) { + /* dotLottie */ + char *json_path = extract_dotlottie(path, &temp_dir); + if (!json_path) + return NULL; + + char res_path[DOTLOTTIE_MAX_PATH]; + snprintf(res_path, sizeof(res_path), "%s/images/", temp_dir); + + FILE *f = fopen(json_path, "rb"); + if (!f) { + free(json_path); + remove_temp_dir(temp_dir); + free(temp_dir); + return NULL; + } + + fseek(f, 0, SEEK_END); + long sz = ftell(f); + fseek(f, 0, SEEK_SET); + + char *json = malloc(sz + 1); + if (!json) { + fclose(f); + free(json_path); + remove_temp_dir(temp_dir); + free(temp_dir); + return NULL; + } + + fread(json, 1, sz, f); + json[sz] = '\0'; + fclose(f); + + anim = lottie_animation_from_data(json, json_path, res_path); + free(json); + free(json_path); + + if (!anim) { + remove_temp_dir(temp_dir); + free(temp_dir); + return NULL; + } + } else { + /* Plain JSON */ + anim = lottie_animation_from_file(path); + if (!anim) + return NULL; + } + + mado_lottie_image_t *lot = calloc(1, sizeof(*lot)); + if (!lot) { + lottie_animation_destroy(anim); + if (temp_dir) { + remove_temp_dir(temp_dir); + free(temp_dir); + } + return NULL; + } + + lot->magic = MADO_LOTTIE_MAGIC; + lot->animation = anim; + lot->temp_dir = temp_dir; + + size_t dw, dh; + lottie_animation_get_size(anim, &dw, &dh); + lot->width = width > 0 ? width : dw; + lot->height = height > 0 ? height : dh; + lot->total_frames = lottie_animation_get_totalframe(anim); + lot->framerate = lottie_animation_get_framerate(anim); + lot->current_frame = 0; + lot->playing = true; + lot->loop = true; + + if (lot->width == 0 || lot->height == 0 || lot->total_frames == 0) { + lottie_animation_destroy(anim); + if (temp_dir) { + remove_temp_dir(temp_dir); + free(temp_dir); + } + free(lot); + return NULL; + } + + lot->buffer = malloc(lot->width * lot->height * sizeof(uint32_t)); + if (!lot->buffer) { + lottie_animation_destroy(anim); + if (temp_dir) { + remove_temp_dir(temp_dir); + free(temp_dir); + } + free(lot); + return NULL; + } + + return lot; +} + +void mado_lottie_destroy(mado_lottie_image_t *lot) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC) + return; + + if (lot->animation) + lottie_animation_destroy(lot->animation); + if (lot->temp_dir) { + remove_temp_dir(lot->temp_dir); + free(lot->temp_dir); + } + free(lot->buffer); + lot->magic = 0; + free(lot); +} + +void mado_lottie_render(mado_lottie_image_t *lot) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC || !lot->buffer) + return; + + lottie_animation_render(lot->animation, lot->current_frame, + lot->buffer, lot->width, lot->height, + lot->width * sizeof(uint32_t)); +} + +void mado_lottie_render_to_pixmap(mado_lottie_image_t *lot, twin_pixmap_t *pix) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC || !pix || + pix->format != TWIN_ARGB32) + return; + + mado_lottie_render(lot); + + /* BGRA -> ARGB */ + twin_pointer_t p = twin_pixmap_pointer(pix, 0, 0); + size_t n = lot->width * lot->height; + for (size_t i = 0; i < n; i++) { + uint32_t px = lot->buffer[i]; + uint8_t b = px & 0xFF; + uint8_t g = (px >> 8) & 0xFF; + uint8_t r = (px >> 16) & 0xFF; + uint8_t a = (px >> 24) & 0xFF; + p.argb32[i] = (a << 24) | (r << 16) | (g << 8) | b; + } +} + +/* + * Control API + */ + +void mado_lottie_set_progress(mado_lottie_image_t *lot, float progress) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC) + return; + if (progress < 0.0f) + progress = 0.0f; + if (progress > 1.0f) + progress = 1.0f; + lot->current_frame = (size_t)(progress * (lot->total_frames - 1)); +} + +void mado_lottie_set_playback(mado_lottie_image_t *lot, bool playing) +{ + if (lot && lot->magic == MADO_LOTTIE_MAGIC) + lot->playing = playing; +} + +void mado_lottie_set_loop(mado_lottie_image_t *lot, bool loop) +{ + if (lot && lot->magic == MADO_LOTTIE_MAGIC) + lot->loop = loop; +} + +bool mado_lottie_advance_frame(mado_lottie_image_t *lot) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC || !lot->playing) + return false; + + lot->current_frame++; + if (lot->current_frame >= lot->total_frames) { + if (lot->loop) { + lot->current_frame = 0; + } else { + lot->current_frame = lot->total_frames - 1; + lot->playing = false; + return false; + } + } + return true; +} + +twin_time_t mado_lottie_get_frame_delay(const mado_lottie_image_t *lot) +{ + if (!lot || lot->magic != MADO_LOTTIE_MAGIC || lot->framerate <= 0) + return 33; + return (twin_time_t)(1000.0 / lot->framerate); +} + +bool mado_lottie_is_playing(const mado_lottie_image_t *lot) +{ + return (lot && lot->magic == MADO_LOTTIE_MAGIC) ? lot->playing : false; +} + +bool mado_lottie_is_looping(const mado_lottie_image_t *lot) +{ + return (lot && lot->magic == MADO_LOTTIE_MAGIC) ? lot->loop : false; +} + +/* + * twin_animation_t integration + */ + +static twin_animation_t *create_twin_animation(mado_lottie_image_t *lot) +{ + if (!lot) + return NULL; + + twin_animation_t *a = calloc(1, sizeof(*a)); + if (!a) + return NULL; + + a->n_frames = lot->total_frames; + a->loop = lot->loop; + a->width = lot->width; + a->height = lot->height; + + a->frames = malloc(sizeof(twin_pixmap_t *)); + if (!a->frames) { + free(a); + return NULL; + } + + a->frames[0] = twin_pixmap_create(TWIN_ARGB32, lot->width, lot->height); + if (!a->frames[0]) { + free(a->frames); + free(a); + return NULL; + } + + /* Store lottie pointer - use magic for safe retrieval */ + a->frames[0]->window = (twin_window_t *)lot; + + a->frame_delays = malloc(sizeof(twin_time_t)); + if (!a->frame_delays) { + twin_pixmap_destroy(a->frames[0]); + free(a->frames); + free(a); + return NULL; + } + a->frame_delays[0] = mado_lottie_get_frame_delay(lot); + + a->iter = malloc(sizeof(twin_animation_iter_t)); + if (!a->iter) { + free(a->frame_delays); + twin_pixmap_destroy(a->frames[0]); + free(a->frames); + free(a); + return NULL; + } + + a->iter->anim = a; + a->iter->current_index = 0; + a->iter->current_frame = a->frames[0]; + a->iter->current_delay = a->frame_delays[0]; + + mado_lottie_render_to_pixmap(lot, a->frames[0]); + + return a; +} + +bool twin_animation_is_lottie(const twin_animation_t *anim) +{ + if (!anim || !anim->frames || !anim->frames[0]) + return false; + + mado_lottie_image_t *lot = (mado_lottie_image_t *)anim->frames[0]->window; + return (lot && lot->magic == MADO_LOTTIE_MAGIC); +} + +mado_lottie_image_t *twin_animation_get_lottie(twin_animation_t *anim) +{ + if (!twin_animation_is_lottie(anim)) + return NULL; + return (mado_lottie_image_t *)anim->frames[0]->window; +} + +void twin_lottie_advance_frame(twin_animation_t *anim) +{ + mado_lottie_image_t *lot = twin_animation_get_lottie(anim); + if (!lot) + return; + + mado_lottie_advance_frame(lot); + mado_lottie_render_to_pixmap(lot, anim->frames[0]); + anim->iter->current_index = lot->current_frame; +} + +void twin_lottie_animation_destroy(twin_animation_t *anim) +{ + if (!anim) + return; + + if (anim->frames && anim->frames[0]) { + mado_lottie_image_t *lot = twin_animation_get_lottie(anim); + if (lot) + mado_lottie_destroy(lot); + anim->frames[0]->window = NULL; + twin_pixmap_destroy(anim->frames[0]); + } + + free(anim->frames); + free(anim->frame_delays); + free(anim->iter); + free(anim); +} + +/* + * Image loader entry + */ + +twin_pixmap_t *_twin_lottie_to_pixmap(const char *path, twin_format_t fmt) +{ + if (fmt != TWIN_ARGB32) + return NULL; + + mado_lottie_image_t *lot = mado_lottie_from_file(path, 0, 0); + if (!lot) + return NULL; + + twin_animation_t *anim = create_twin_animation(lot); + if (!anim) { + mado_lottie_destroy(lot); + return NULL; + } + + twin_pixmap_t *pix = twin_pixmap_create(fmt, lot->width, lot->height); + if (!pix) { + twin_lottie_animation_destroy(anim); + return NULL; + } + + pix->animation = anim; + + memcpy(twin_pixmap_pointer(pix, 0, 0).argb32, + twin_pixmap_pointer(anim->frames[0], 0, 0).argb32, + lot->width * lot->height * sizeof(uint32_t)); + + return pix; +} + +twin_pixmap_t *twin_lottie_to_pixmap_scale(const char *path, + twin_format_t fmt, + twin_coord_t w, + twin_coord_t h) +{ + if (fmt != TWIN_ARGB32) + return NULL; + + mado_lottie_image_t *lot = mado_lottie_from_file(path, w, h); + if (!lot) + return NULL; + + twin_animation_t *anim = create_twin_animation(lot); + if (!anim) { + mado_lottie_destroy(lot); + return NULL; + } + + twin_pixmap_t *pix = twin_pixmap_create(fmt, w, h); + if (!pix) { + twin_lottie_animation_destroy(anim); + return NULL; + } + + pix->animation = anim; + + memcpy(twin_pixmap_pointer(pix, 0, 0).argb32, + twin_pixmap_pointer(anim->frames[0], 0, 0).argb32, + w * h * sizeof(uint32_t)); + + return pix; +} \ No newline at end of file diff --git a/src/image.c b/src/image.c index 017be4e9..d957aa7a 100644 --- a/src/image.c +++ b/src/image.c @@ -25,6 +25,10 @@ #define CONFIG_LOADER_TVG 0 #endif +#if !defined(CONFIG_LOADER_LOTTIE) +#define CONFIG_LOADER_LOTTIE 0 +#endif + /* Feature test macro */ #define LOADER_HAS(x) CONFIG_LOADER_##x @@ -41,6 +45,9 @@ ) \ IIF(LOADER_HAS(TVG))( \ _(tvg) \ + ) \ + IIF(LOADER_HAS(LOTTIE))( \ + _(lottie) \ ) /* clang-format on */ @@ -63,6 +70,8 @@ typedef enum { * https://www.file-recovery.com/gif-signature-format.htm * - TinyVG: * https://tinyvg.tech/download/specification.pdf + * - Lottie: + * JSON format - starts with '{' and contains "v" version key */ static const uint8_t header_png[8] = { 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, @@ -70,6 +79,34 @@ static const uint8_t header_png[8] = { static const uint8_t header_jpeg[3] = {0xFF, 0xD8, 0xFF}; static const uint8_t header_gif[4] = {0x47, 0x49, 0x46, 0x38}; static const uint8_t header_tvg[2] = {0x72, 0x56}; +/* ZIP magic for dotLottie detection */ +static const uint8_t header_zip[4] = {0x50, 0x4B, 0x03, 0x04}; + +#if LOADER_HAS(LOTTIE) +/** + * Check if the file content looks like a Lottie JSON file. + */ +static bool is_lottie_json(const uint8_t *header, size_t len) +{ + /* Skip leading whitespace */ + size_t i = 0; + while (i < len && (header[i] == ' ' || header[i] == '\t' || + header[i] == '\n' || header[i] == '\r')) { + i++; + } + + /* Must start with '{' */ + if (i >= len || header[i] != '{') + return false; + + /* Look for "v" key which indicates Lottie version */ + const char *str = (const char *)header; + if (strstr(str, "\"v\"") || strstr(str, "\"v\":")) + return true; + + return false; +} +#endif static twin_image_format_t image_type_detect(const char *path) { @@ -106,6 +143,11 @@ static twin_image_format_t image_type_detect(const char *path) type = IMAGE_TYPE_tvg; } #endif +#if LOADER_HAS(LOTTIE) + else if (!memcmp(header, header_zip, sizeof(header_zip)) || is_lottie_json(header, bytes_read)) { + return IMAGE_TYPE_lottie; + } +#endif /* otherwise, unsupported format */ return type;