chore: sync project files

This commit is contained in:
richjohnrambo
2026-08-11 10:29:38 +08:00
parent c9d6a6767f
commit 5aa7733515
310 changed files with 3323 additions and 36 deletions
View File
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
-36
View File
@@ -1,36 +0,0 @@
# ---> Go
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
go.work.sum
# IDE
.idea/
.vscode/
*.swp
*.swo
# env file
.env
# ---> TortoiseGit
# Project-level settings
/.tgitconfig
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+38
View File
@@ -0,0 +1,38 @@
version: '3.8'
x-mongodb-tinode-env-vars: &mongodb-tinode-env-vars
"STORE_USE_ADAPTER": "mongodb"
services:
db:
image: mongo:4.2.3
container_name: mongodb
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
healthcheck:
test: ["CMD", "curl -f http://localhost:28017/ || exit 1"]
# Initializes MongoDb replicaset.
initdb:
image: mongo:4.2.3
container_name: initdb
depends_on:
- db
command: >
bash -c "echo 'Starting replica set initialize';
until mongo --host mongodb --eval 'print(\"waited for connection\")'; do sleep 2; done;
echo 'Connection finished';
echo 'Creating replica set';
echo \"rs.initiate({'_id': 'rs0', "members": [ {'_id': 0, 'host': 'mongodb:27017'} ]})\" | mongo --host mongodb"
tinode-0:
environment:
<< : *mongodb-tinode-env-vars
"WAIT_FOR": "mongodb:27017"
tinode-1:
environment:
<< : *mongodb-tinode-env-vars
tinode-2:
environment:
<< : *mongodb-tinode-env-vars
@@ -0,0 +1,24 @@
version: '3.8'
x-postgres-tinode-env-vars: &postgres-tinode-env-vars
"STORE_USE_ADAPTER": "postgres"
services:
db:
image: postgres:15.2
container_name: postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
tinode-0:
environment:
<< : *postgres-tinode-env-vars
"WAIT_FOR": "postgres:5432"
tinode-1:
environment:
<< : *postgres-tinode-env-vars
tinode-2:
environment:
<< : *postgres-tinode-env-vars
@@ -0,0 +1,24 @@
version: '3.8'
x-rethinkdb-tinode-env-vars: &rethinkdb-tinode-env-vars
"STORE_USE_ADAPTER": "rethinkdb"
services:
db:
image: rethinkdb:2.4.2
container_name: rethinkdb
healthcheck:
test: ["CMD", "curl -f http://localhost:8080/ || exit 1"]
tinode-0:
environment:
<< : *rethinkdb-tinode-env-vars
"WAIT_FOR": "rethinkdb:8080"
tinode-1:
environment:
<< : *rethinkdb-tinode-env-vars
tinode-2:
environment:
<< : *rethinkdb-tinode-env-vars
+187
View File
@@ -0,0 +1,187 @@
# Reference configuration for a simple 3-node Tinode cluster.
# Includes:
# * Mysql database
# * 3 Tinode servers
# * 3 exporters
version: '3.8'
# Base Tinode template.
x-tinode:
&tinode-base
depends_on:
- db
image: tinode/tinode:latest
restart: always
x-exporter:
&exporter-base
image: tinode/exporter:latest
restart: always
x-tinode-env-vars: &tinode-env-vars
"STORE_USE_ADAPTER": "mysql"
"PPROF_URL": "/pprof"
# You can provide your own tinode config by setting EXT_CONFIG env var and binding your configuration file to
# "EXT_CONFIG": "/etc/tinode/tinode.conf"
"WAIT_FOR": "mysql:3306"
# Push notifications.
# Modify as appropriate.
# Tinode Push Gateway configuration.
"TNPG_PUSH_ENABLED": "false"
# "TNPG_USER": "<user name>"
# "TNPG_AUTH_TOKEN": "<token>"
# FCM specific server configuration.
"FCM_PUSH_ENABLED": "false"
# "FCM_CRED_FILE": "<path to FCM credentials file>"
# "FCM_INCLUDE_ANDROID_NOTIFICATION": false
#
# FCM Web client configuration.
"FCM_API_KEY": "AIzaSyD6X4ULR-RUsobvs1zZ2bHdJuPz39q2tbQ"
"FCM_APP_ID": "1:114126160546:web:aca6ea2981feb81fb44dfb"
"FCM_PROJECT_ID": "tinode-1000"
"FCM_SENDER_ID": 114126160546
"FCM_VAPID_KEY": "BOgQVPOMzIMXUpsYGpbVkZoEBc0ifKY_f2kSU5DNDGYI6i6CoKqqxDd7w7PJ3FaGRBgVGJffldETumOx831jl58"
"FCM_MEASUREMENT_ID": "G-WNJDQR34L3"
# iOS app universal links configuration.
# "IOS_UNIV_LINKS_APP_ID": "<ios universal links app id>"
# Video calls
"WEBRTC_ENABLED": "false"
# "ICE_SERVERS_FILE": "<path to ICE servers config>"
x-exporter-env-vars: &exporter-env-vars
"TINODE_ADDR": "http://tinode.host:18080/stats/expvar/"
# InfluxDB configation:
"SERVE_FOR": "influxdb"
"INFLUXDB_VERSION": 1.7
"INFLUXDB_ORGANIZATION": "<your organization>"
"INFLUXDB_PUSH_INTERVAL": 30
"INFLUXDB_PUSH_ADDRESS": "https://mon.tinode.co/intake"
"INFLUXDB_AUTH_TOKEN": "<auth token>"
# Prometheus configuration:
# "SERVE_FOR": "prometheus"
# "PROM_NAMESPACE": "tinode"
# "PROM_METRICS_PATH": "/metrics"
services:
db:
image: mysql:8.0
container_name: mysql
restart: always
# Use your own volume.
# volumes:
# - <mysql directory in your file system>:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 5s
retries: 10
security_opt:
- seccomp=unconfined
# Tinode servers.
tinode-0:
<< : *tinode-base
container_name: tinode-0
hostname: tinode-0
# You can mount your volumes as necessary:
# volumes:
# # E.g. external config (assuming EXT_CONFIG is set).
# - <path to your tinode.conf>:/etc/tinode/tinode.conf
# # Logs directory.
# - <path to your tinode-0 logs directory>:/var/log
ports:
- "6060:6060"
environment:
<< : *tinode-env-vars
"CLUSTER_SELF": "tinode-0"
"RESET_DB": ${RESET_DB:-false}
"UPGRADE_DB": ${UPGRADE_DB:-false}
tinode-1:
<< : *tinode-base
container_name: tinode-1
hostname: tinode-1
# You can mount your volumes as necessary:
# volumes:
# # E.g. external config (assuming EXT_CONFIG is set).
# - <path to your tinode.conf>:/etc/tinode/tinode.conf
# # Logs directory.
# - <path to your tinode-1 logs directory>:/var/log
ports:
- "6061:6060"
environment:
<< : *tinode-env-vars
"CLUSTER_SELF": "tinode-1"
# Wait for tinode-0, not the database since
# we let tinode-0 perform all database initialization and upgrade work.
"WAIT_FOR": "tinode-0:6060"
"NO_DB_INIT": "true"
tinode-2:
<< : *tinode-base
container_name: tinode-2
hostname: tinode-2
# You can mount your volumes as necessary:
# volumes:
# # E.g. external config (assuming EXT_CONFIG is set).
# - <path to your tinode.conf>:/etc/tinode/tinode.conf
# # Logs directory.
# - <path to your tinode-2 logs directory>:/var/log
ports:
- "6062:6060"
environment:
<< : *tinode-env-vars
"CLUSTER_SELF": "tinode-2"
# Wait for tinode-0, not the database since
# we let tinode-0 perform all database initialization and upgrade work.
"WAIT_FOR": "tinode-0:6060"
"NO_DB_INIT": "true"
# Monitoring.
# Exporters are paired with tinode instances.
exporter-0:
<< : *exporter-base
container_name: exporter-0
hostname: exporter-0
depends_on:
- tinode-0
ports:
- 6222:6222
links:
- tinode-0:tinode.host
environment:
<< : *exporter-env-vars
"INSTANCE": "tinode-0"
"WAIT_FOR": "tinode-0:6060"
exporter-1:
<< : *exporter-base
container_name: exporter-1
hostname: exporter-1
depends_on:
- tinode-1
ports:
- 6223:6222
links:
- tinode-1:tinode.host
environment:
<< : *exporter-env-vars
"INSTANCE": "tinode-1"
"WAIT_FOR": "tinode-1:6060"
exporter-2:
<< : *exporter-base
container_name: exporter-2
hostname: exporter-2
depends_on:
- tinode-2
ports:
- 6224:6222
links:
- tinode-2:tinode.host
environment:
<< : *exporter-env-vars
"INSTANCE": "tinode-2"
"WAIT_FOR": "tinode-2:6060"
@@ -0,0 +1,30 @@
version: '3.8'
x-mongodb-tinode-env-vars: &mongodb-tinode-env-vars
"STORE_USE_ADAPTER": "mongodb"
services:
db:
image: mongo:4.2.3
container_name: mongodb
entrypoint: [ "/usr/bin/mongod", "--bind_ip_all", "--replSet", "rs0" ]
healthcheck:
test: ["CMD", "curl -f http://localhost:28017/ || exit 1"]
# Initializes MongoDb replicaset.
initdb:
image: mongo:4.2.3
container_name: initdb
depends_on:
- db
command: >
bash -c "echo 'Starting replica set initialize';
until mongo --host mongodb --eval 'print(\"waited for connection\")'; do sleep 2; done;
echo 'Connection finished';
echo 'Creating replica set';
echo \"rs.initiate({'_id': 'rs0', "members": [ {'_id': 0, 'host': 'mongodb:27017'} ]})\" | mongo --host mongodb"
tinode-0:
environment:
<< : *mongodb-tinode-env-vars
"WAIT_FOR": "mongodb:27017"
@@ -0,0 +1,16 @@
version: '3.8'
x-postgres-tinode-env-vars: &postgres-tinode-env-vars
"STORE_USE_ADAPTER": "postgres"
services:
db:
image: postgres:15.2
container_name: postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
tinode-0:
environment:
<< : *postgres-tinode-env-vars
"WAIT_FOR": "postgres:5432"
@@ -0,0 +1,16 @@
version: '3.8'
x-rethinkdb-tinode-env-vars: &rethinkdb-tinode-env-vars
"STORE_USE_ADAPTER": "rethinkdb"
services:
db:
image: rethinkdb:2.4.0
container_name: rethinkdb
healthcheck:
test: ["CMD", "curl -f http://localhost:8080/ || exit 1"]
tinode-0:
environment:
<< : *rethinkdb-tinode-env-vars
"WAIT_FOR": "rethinkdb:8080"
+111
View File
@@ -0,0 +1,111 @@
# Reference configuration for a simple Tinode server.
# Includes:
# * Mysql database
# * Tinode server
# * Tinode exporters
version: '3.8'
# Base Tinode template.
x-tinode:
&tinode-base
depends_on:
- db
image: tinode/tinode:latest
restart: always
x-tinode-env-vars: &tinode-env-vars
"STORE_USE_ADAPTER": "mysql"
"PPROF_URL": "/pprof"
# You can provide your own tinode config by setting EXT_CONFIG env var and binding your configuration file to
# "EXT_CONFIG": "/etc/tinode/tinode.conf"
"WAIT_FOR": "mysql:3306"
# Push notifications.
# Modify as appropriate.
# Tinode Push Gateway configuration.
"TNPG_PUSH_ENABLED": "false"
# "TNPG_USER": "<user name>"
# "TNPG_AUTH_TOKEN": "<token>"
# FCM specific server configuration.
"FCM_PUSH_ENABLED": "false"
# "FCM_CRED_FILE": "<path to FCM credentials file>"
# "FCM_INCLUDE_ANDROID_NOTIFICATION": false
#
# FCM Web client configuration.
"FCM_API_KEY": "AIzaSyD6X4ULR-RUsobvs1zZ2bHdJuPz39q2tbQ"
"FCM_APP_ID": "1:114126160546:web:aca6ea2981feb81fb44dfb"
"FCM_PROJECT_ID": "tinode-1000"
"FCM_SENDER_ID": 114126160546
"FCM_VAPID_KEY": "BOgQVPOMzIMXUpsYGpbVkZoEBc0ifKY_f2kSU5DNDGYI6i6CoKqqxDd7w7PJ3FaGRBgVGJffldETumOx831jl58"
"FCM_MEASUREMENT_ID": "G-WNJDQR34L3"
# iOS app universal links configuration.
# "IOS_UNIV_LINKS_APP_ID": "<ios universal links app id>"
# Video calls
"WEBRTC_ENABLED": "false"
# "ICE_SERVERS_FILE": "<path to ICE servers config>"
x-exporter-env-vars: &exporter-env-vars
"TINODE_ADDR": "http://tinode.host:6060/stats/expvar/"
# InfluxDB configation:
"SERVE_FOR": "influxdb"
"INFLUXDB_VERSION": 1.7
"INFLUXDB_ORGANIZATION": "<your organization>"
"INFLUXDB_PUSH_INTERVAL": 30
"INFLUXDB_PUSH_ADDRESS": "https://mon.tinode.co/intake"
"INFLUXDB_AUTH_TOKEN": "<auth token>"
# Prometheus configuration:
# "SERVE_FOR": "prometheus"
# "PROM_NAMESPACE": "tinode"
# "PROM_METRICS_PATH": "/metrics"
services:
db:
image: mysql:8.0
container_name: mysql
restart: always
# Use your own volume.
# volumes:
# - <mysql directory in your file system>:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 5s
retries: 10
security_opt:
- seccomp=unconfined
# Tinode.
tinode-0:
<< : *tinode-base
container_name: tinode-0
hostname: tinode-0
# You can mount your volumes as necessary:
# volumes:
# # E.g. external config (assuming EXT_CONFIG is set).
# - <path to your tinode.conf>:/etc/tinode/tinode.conf
# # Logs directory.
# - <path to your tinode-0 logs directory>:/var/log
ports:
- "6060:6060"
environment:
<< : *tinode-env-vars
"RESET_DB": ${RESET_DB:-false}
"UPGRADE_DB": ${UPGRADE_DB:-false}
# Monitoring.
# Exporters are paired with tinode instances.
exporter-0:
container_name: exporter-0
hostname: exporter-0
depends_on:
- tinode-0
image: tinode/exporter:latest
restart: always
ports:
- "6222:6222"
links:
- tinode-0:tinode.host
environment:
<< : *exporter-env-vars
"WAIT_FOR": "tinode-0:6060"
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.1 KiB

View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="192" height="192"><defs><filter id="f" color-interpolation-filters="sRGB"><feFlood flood-opacity=".251" flood-color="#000" result="flood"/><feComposite in="flood" in2="SourceGraphic" operator="in" result="composite1"/><feGaussianBlur in="composite1" result="blur"/><feOffset dy="-1" result="offset"/><feComposite in="SourceGraphic" in2="offset" result="fbSourceGraphic"/><feColorMatrix result="fbSourceGraphicAlpha" in="fbSourceGraphic" values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"/><feFlood flood-opacity=".251" flood-color="#000" result="flood"/><feComposite in2="fbSourceGraphic" in="flood" operator="in" result="composite1"/><feGaussianBlur in="composite1" result="blur"/><feOffset dy="-3" result="offset"/><feComposite in2="offset" in="fbSourceGraphic" result="composite2"/></filter><filter id="d" color-interpolation-filters="sRGB"><feFlood flood-opacity=".196" flood-color="#FFF" result="flood"/><feComposite in="flood" in2="SourceGraphic" operator="out" result="composite1"/><feGaussianBlur in="composite1" result="blur"/><feOffset dy="2" result="offset"/><feComposite in="offset" in2="SourceGraphic" operator="atop" result="composite2"/></filter><filter id="b" color-interpolation-filters="sRGB"><feFlood flood-opacity=".196" flood-color="#000" result="flood"/><feComposite in="flood" in2="SourceGraphic" operator="out" result="composite1"/><feGaussianBlur in="composite1" result="blur"/><feOffset dy="-2" result="offset"/><feComposite in="offset" in2="SourceGraphic" operator="atop" result="composite2"/></filter><filter id="c" color-interpolation-filters="sRGB"><feFlood flood-opacity=".196" flood-color="#000" result="flood"/><feComposite in="flood" in2="SourceGraphic" operator="out" result="composite1"/><feGaussianBlur in="composite1" result="blur"/><feOffset dy="-2" result="offset"/><feComposite in="offset" in2="SourceGraphic" operator="atop" result="composite2"/></filter><linearGradient id="a"><stop offset="0" stop-opacity=".251"/><stop offset="1" stop-color="#fff" stop-opacity="0"/></linearGradient><linearGradient xlink:href="#a" id="e" x1="102.814" y1="97.076" x2="219.019" y2="170.481" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.29306 0 0 1.00596 -43.959 .807)"/></defs><g fill-rule="evenodd"><path d="M14.102 64A88 87.925 0 008 95.924c-.012 44.455 18.485 70.138 1.863 79.822-12.733 7.419 43.153 8.258 70.137 8.248V64H14.102z" fill="#fc5d3e" filter="url(#b)"/><path d="M80 64v119.994c8.24-.003 14.055-.08 14.055-.08L96 183.85a88 87.925 0 0088-87.926A88 87.925 0 00177.99 64H80z" fill="#45ae49" filter="url(#c)"/><path d="M96 8A88 87.925 0 009.52 80h172.978A88 87.925 0 0096 8z" fill="#2d526b" filter="url(#d)"/></g><path d="M88.002 40.975l-8.6 112.808 39.791 26.94c34.169-9.369 59.381-38.298 63.971-73.4z" fill="url(#e)" fill-rule="evenodd" opacity=".5"/><text y="153.195" x="53.125" style="line-height:125%;-inkscape-font-specification:'Arial, Bold';text-align:start" font-weight="700" font-size="160" font-family="Arial" letter-spacing="0" word-spacing="0"><tspan style="line-height:125%;-inkscape-font-specification:'Arial, Bold';text-align:start" y="153.195" x="53.125" fill="#fff">t</tspan></text></svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

View File
View File
+178
View File
@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 2000 659" enable-background="new 0 0 2000 659" xml:space="preserve">
<line fill="#FFFFFF" x1="1645.1" y1="5370.3" x2="205.1" y2="5370.3"/>
<path fill="#A2A2A1" d="M1001.2,659c-306.9,0-613.8,0-920.6,0.1c-17.3,0-32.9-4.3-46.8-15.8c-19.9-16.6-30.6-38.9-30.6-66.8
C3,411.9,3,247.3,3.1,82.7c0-39,25.3-73.1,59.6-80.6C69,0.7,75.4,0,81.9,0c612.9,0,1225.8,0,1838.8,0c33.2,0,58,15.7,72.7,49.8
c4.5,10.4,6.5,21.7,6.5,33.2c0.1,164.4,0.2,328.8,0,493.2c0,42.1-27.8,75.2-61.1,81.7c-5.8,1.1-11.6,1-17.4,1
C1614.7,659,1307.9,659,1001.2,659z M1001.1,645.7c48.3,0,96.6,0,144.9,0c259.2,0,518.5,0,777.7,0c9.5,0,18.7-1.5,27.2-6.2
c24.2-13.4,36.5-35.3,36.5-65.8c0-90.8,0-181.5,0-272.3c0-71.8-0.1-143.5,0-215.3c0-18.2-4.5-34.5-15.2-48.3
c-13.8-17.6-31.4-24.2-51.9-24.2c-612.8,0.1-1225.5,0.1-1838.3,0.1c-2,0-4,0-6,0.1c-35,1.6-60.8,31.6-60.8,70.9
c0,163.3,0,326.6,0,489.8c0,5.5,0.4,10.9,1.5,16.3c6.6,33,31.4,54.8,62.2,54.8C386.3,645.7,693.7,645.7,1001.1,645.7z"/>
<path fill="#010101" d="M1000.9,645.7c-307.4,0-614.8,0-922.3,0c-30.8,0-55.6-21.8-62.2-54.8c-1.1-5.3-1.5-10.8-1.5-16.3
c0-163.3,0-326.6,0-489.8c0-39.3,25.8-69.4,60.8-70.9c2-0.1,4-0.1,6-0.1c612.8,0,1225.7,0,1838.5-0.1c20.5,0,38.1,6.6,51.9,24.2
c10.8,13.8,15.3,30,15.3,48.3c-0.1,71.8,0,143.5,0,215.3c0,90.8,0,181.5,0,272.3c0,30.5-12.3,52.4-36.5,65.8
c-8.5,4.7-17.7,6.2-27.2,6.2c-259.3,0-518.6,0-777.8,0C1097.6,645.7,1049.3,645.7,1000.9,645.7z M436.9,292.8
c-12.9-7.8-26.1-15.1-39.3-22.2c-0.5-0.4-1-0.9-1.6-1.2c-67.4-37.8-134.7-75.6-202.1-113.4c-5.7-3.2-11.2-6.9-17.7-8.5
c-7.9-1.9-15.3-1.6-21.2,5c-6,6.2-6.7,14-6.7,22c0,57.8,0,115.7,0,173.5c0,1.6,0.2,3.3,0.3,4.9c-0.1,11.4-0.3,22.9-0.3,34.3
c0,21.4,0.2,42.8,0.2,64.2c0,13.7-0.3,27.4,0,41.1c0.1,6.4,1.9,12.6,6.6,17.4c3.7,4,8.2,5.6,13.6,5.7c6.9,0.1,12.7-2.6,18.5-5.8
c19-10.7,38-21.3,57-32c51.1-28.7,102.2-57.5,153.3-86.2c12.5-7,24.9-14.1,37.4-21.1c12.3-6.8,24.6-13.6,36.7-20.6
c5.1-2.9,9-7.1,11.1-12.7c3.3-8.5-0.1-17.4-9.7-23.9C461.5,305.6,449.2,299.2,436.9,292.8z M741.4,374.8c-13.5,0-26.9,0.1-40.4-0.1
c-3.1,0-4,0.8-3.9,3.9c0.2,5.7,0.3,11.5,0,17.2c-0.2,4,0.8,5.3,5,5.2c17.9-0.3,35.8,0,53.7-0.2c3.3,0,4.1,0.6,3.5,4.1
c-2.5,15.2-9.8,27.3-22.6,36c-9.2,6.2-19.2,9.5-30.2,11c-28.7,3.9-57.3-10.8-70.5-36.5c-13.3-26-8.9-58.3,10.9-79.1
c25.2-26.6,66-29.1,94.4-5.7c2.6,2.2,4,2.1,6.3-0.3c3.9-4.2,7.9-8.4,12.3-12.1c3.1-2.7,2.5-4.2-0.3-6.5
c-28-23.3-59.6-28.7-93.7-17.6c-54.5,17.8-81,77.8-57.4,128.3c15.4,33.1,51.4,58.4,96.1,55.9c48.1-2.7,89-39.9,81.6-99.8
c-0.4-3.1-1.5-3.7-4.3-3.6C768.4,374.9,754.9,374.8,741.4,374.8z M1158.9,369.6c-12.5-12.1-27.3-15.8-43.7-12
c-24.2,5.6-39.9,21.1-46.1,44.9c-6.2,24.2,1,45.2,19.8,61.6c21,18.4,52.6,19.4,69.6,0.9c0.1-0.1,0.6,0,0.9,0c0,4.9,0.4,9.9-0.1,14.7
c-1.4,15.1-9.7,25-23.2,28.3c-16.1,3.9-30.4-2.4-38.6-17.2c-1.5-2.8-2.6-3.4-5.6-2.1c-5,2.4-10.2,4.6-15.4,6.3
c-4.6,1.5-4.2,3.5-2.2,6.9c13.1,22.3,32.6,32.8,58.2,30.9c21.9-1.6,38.8-11.5,47.6-32.6c4.3-10.3,5.4-21.2,5.4-32.3
c-0.1-25,0-49.9,0-74.9c0-9.9-0.1-19.7,0.1-29.6c0.1-3.1-0.8-4-3.9-3.8c-3.9,0.3-7.9,0.1-11.8,0.1c-9.5,0-9.5,0-10.3,9.2
C1159.5,369.2,1159.3,369.3,1158.9,369.6z M1417.9,384.8c0,28.6,0.1,57.2-0.1,85.7c0,3.2,0.8,4.3,4.1,4.1c6.1-0.2,12.2-0.3,18.2,0
c4.1,0.2,5.2-1,5.2-5.1c-0.2-19.5,0-39.1-0.2-58.6c0-3.4,0.8-4.6,4.3-4.3c4.6,0.3,9.2,0.1,13.8,0.1c11.3-0.2,22.7,0.9,33.9-1.6
c32.2-7.1,51.3-36.3,43.9-67.4c-5.4-22.8-27.5-41-52.9-42c-21.6-0.9-43.4-0.2-65-0.6c-4.6-0.1-5.3,1.4-5.2,5.5
C1418,328.6,1417.9,356.7,1417.9,384.8z M1680.2,459.5c0,4.8,0.1,8.2,0,11.6c-0.1,2.2,0.3,3.3,2.9,3.2c6.9-0.2,13.8-0.1,20.7,0
c2.1,0,2.9-0.6,2.8-2.8c-0.1-23.1,0.4-46.3-0.4-69.4c-0.6-19.5-10.6-33.6-28.6-41.1c-16-6.7-32.6-7-49-1
c-10.3,3.8-18.5,10.4-24,20.1c-1.2,2-1.9,3.5,1.3,4.6c6.3,2.2,12.4,5,18.6,7.6c1.4,0.6,2.6,1.1,3.6-0.8c6.9-13.2,30.2-14.5,42.3-5.9
c6.4,4.5,10.1,10.5,9.7,19.1c-2-0.8-3.6-1.6-5.3-2.2c-21.5-7.6-42.1-6-60.7,7.7c-17.3,12.6-19.1,36.8-5.1,53
C1623.5,480.1,1661.7,486.8,1680.2,459.5z M993.8,478.3c34.8,0,62-26.8,62-61c0-34.2-27.2-61-62-61c-35.2,0-62.2,26.6-62.1,61.3
C931.8,452,958.8,478.3,993.8,478.3z M796.4,417.2c0,34.5,26.8,61,61.8,61c35.1,0,62-26.2,62.1-60.7c0.1-34.7-26.8-61.3-62-61.3
C823.3,356.3,796.4,382.7,796.4,417.2z M1276.2,435.8c1.6-0.7,3.3-1.5,4.9-2.1c22.1-9,44.2-18.1,66.3-27.1
c11.8-4.8,11.8-4.8,6.2-16.5c-14.7-30.9-48.6-42.7-78.2-27.1c-23.9,12.6-36.4,42-28.9,70.1c6.3,23.6,21.8,38.8,45.7,43.8
c25.2,5.2,46.6-2.3,63.1-22.7c1.8-2.2,1.6-3.4-0.9-4.8c-4.6-2.8-9.3-5.6-13.5-8.9c-3.4-2.7-5.1-2.3-8,1.1
C1316.5,461.1,1287.6,458.2,1276.2,435.8z M1832,359.8c-9.1,0-17.7,0.2-26.2-0.1c-3.2-0.1-4.4,1.1-5.6,3.9
c-9.1,23.1-18.4,46.2-27.7,69.3c-0.6,1.6-0.8,3.5-2.6,4.7c-0.7-1.6-1.4-3-2.1-4.5c-9.6-23.1-19.1-46.3-28.7-69.4
c-0.7-1.6-0.6-4-3.5-4c-8.9,0.1-17.9,0-27.3,0c0.8,1.8,1.2,3,1.7,4.2c14.9,33.5,29.8,67,44.8,100.4c1.3,2.9,1.4,5.3,0,8.2
c-5.9,12.4-11.5,25-17.2,37.5c-2.8,6.2-5.6,12.4-8.6,19c8.6,0,16.4-0.2,24.3,0.1c3.2,0.1,4.5-1.1,5.7-3.9c9.6-22.1,19.4-44,29.1-66
C1802.7,426.3,1817.2,393.4,1832,359.8z M1204.2,384.4c0,28.4,0.1,56.8-0.1,85.2c0,4.2,1.2,5.3,5.2,5.1c5.7-0.3,11.5-0.4,17.2,0
c4.2,0.3,5.1-1.1,5.1-5.1c-0.2-44.5-0.1-89-0.1-133.5c0-12.3-0.1-24.6,0.1-36.9c0.1-3.3-0.9-4.2-4.1-4.1c-6.2,0.2-12.5,0.3-18.7,0
c-3.7-0.2-4.7,0.9-4.6,4.6C1204.3,327.9,1204.2,356.2,1204.2,384.4z M1584.6,384.9c0-28.4-0.1-56.8,0.1-85.2c0-3.7-0.8-4.8-4.6-4.6
c-5.9,0.3-11.8,0.3-17.7,0c-3.9-0.2-4.9,1-4.9,4.9c0.2,25.6,0.1,51.2,0.1,76.8c0,31.2,0.1,62.4-0.1,93.6c0,3.5,0.9,4.5,4.4,4.3
c6.1-0.3,12.2-0.3,18.2,0c3.7,0.2,4.6-0.9,4.6-4.6C1584.5,441.7,1584.6,413.3,1584.6,384.9z M671.1,183.1c-4.6,0-9.2,0-13.8,0
c-9.4,0-9.2,0-9.3,9.2c0,3.5,1.3,4,4.3,3.9c8-0.2,16.1,0.1,24.1-0.1c2.9-0.1,3.4,1,2.7,3.4c-1.1,4-2.6,7.7-5.4,10.9
c-11.7,12.8-33.2,13.5-46.2,1.5c-12.9-11.9-13.9-33.9-2.1-46.7c12.2-13.3,32.9-14.3,45.9-2.2c0.8,0.8,1.6,2.8,3.1,1.4
c2.9-2.7,6.8-5.2,7.8-8.5c0.8-2.5-3.6-5-6.3-6.8c-15.3-10.6-36.9-10.7-52.4-0.3c-16.2,10.9-23.8,30-19.5,49
c6.1,26.9,33.5,42.3,60.6,34c18.9-5.8,30.7-23,29.4-42.7c-0.3-3.9-1-6.6-6.2-6.1C682.4,183.6,676.7,183.1,671.1,183.1z
M1114.3,165.2c1.5,2.3,2.3,3.6,3.1,4.9c11.3,17.9,23,35.5,33.7,53.7c3.8,6.4,7.9,8.9,15.1,8.2c3.4-0.4,4.2-1.1,4.2-4.5
c-0.1-25-0.1-49.9-0.1-74.9c0-9.9,0-9.7-10.1-9.8c-3.3,0-4.1,1-4,4.1c0.2,17.9,0.2,35.8,0.2,53.7c0,1.5,0,3.1,0,5.9
c-12-18.9-23.6-36.3-34.2-54.4c-4.3-7.4-9-10.4-17.4-9.5c-4,0.4-4.7,1.5-4.6,5.1c0.1,24.6,0.1,49.3,0.1,73.9
c0,10.3,0,10.1,10.1,10.2c3.5,0,3.9-1.2,3.9-4.2c-0.1-17.1-0.1-34.2-0.1-51.3C1114.3,173.2,1114.3,169.8,1114.3,165.2z M1041,233.9
c26.3,0.1,46.4-19.9,46.5-46.2c0.1-26-20-46.4-45.9-46.6c-26.3-0.2-46.6,19.9-46.7,46.1C994.8,213.6,1014.7,233.7,1041,233.9z
M707.1,187.4c0,13,0.2,26-0.1,38.9c-0.1,4.2,0.7,5.9,5.4,5.7c13.1-0.4,26.3-0.1,39.4-0.1c9.3,0,9.1,0,9.3-9.2
c0.1-3.6-1.2-4.3-4.5-4.2c-10.5,0.2-21,0-31.5,0.1c-3.1,0.1-4-0.9-3.8-3.9c0.2-5.7,0.2-11.5,0-17.2c-0.1-3,1-3.5,3.6-3.4
c7.9,0.2,15.8,0.1,23.7,0.1c8.6,0,8.4,0,8.7-8.8c0.1-3.9-1.1-4.7-4.7-4.6c-9,0.2-18.1,0-27.1,0.1c-3.1,0.1-4.4-0.7-4.2-4
c0.3-5.6,0.3-11.2,0-16.7c-0.2-3.3,1.2-3.7,4-3.7c8.7,0.2,17.4,0.1,26.1,0.1c9.9,0,9.7,0,9.8-9.7c0-3.4-1.1-4-4.2-4
c-15.3,0.1-30.6,0.2-45.8,0c-3.2,0-4.1,0.9-4.1,4.1C707.2,160.5,707.1,173.9,707.1,187.4z M794,194.1c0,9.2,0,18.4,0,27.6
c0,10.4,0,10.2,10.1,10.3c3.5,0,4.3-1.1,4.3-4.4c-0.2-18.7-0.1-37.4,0-56.2c0-4.9-2.1-11.3,0.9-14.1c2.7-2.4,9-0.7,13.8-0.8
c9.6,0,9.4,0,9.5-9.4c0.1-3.5-1-4.3-4.4-4.3c-16.1,0.2-32.2,0.1-48.3,0.1c-10.8,0-10.7,0-10.2,10.6c0.1,2.3,0.7,3.1,3.1,3
c5.7-0.2,11.5,0.2,17.2-0.1c3.4-0.2,4,1.1,4,4.1C793.9,171.8,794,183,794,194.1z M936.8,194.2c0-11.2,0.2-22.3-0.1-33.5
c-0.1-3.6,1-4.5,4.4-4.2c3.6,0.3,7.2,0.1,10.8,0.1c9.5,0,9.3,0,9.5-9.5c0.1-3.7-1.2-4.2-4.5-4.2c-16.3,0.2-32.5,0.1-48.8,0.1
c-10.1,0-10,0-9.9,10c0,2.7,0.6,3.8,3.5,3.6c5.4-0.2,10.9,0.2,16.3-0.1c3.7-0.2,5,0.7,4.9,4.7c-0.2,20.2-0.1,40.4-0.1,60.6
c0,10.3,0,10.1,10.2,10.2c2.9,0,3.9-0.6,3.9-3.8C936.7,216.9,936.8,205.6,936.8,194.2z M887.3,187.7c0-11.7,0-23.3,0-35
c0-9.9,0-9.7-10.1-9.9c-3.5,0-4.3,1.1-4.3,4.4c0.1,24.8,0.1,49.6,0.1,74.4c0,10.6,0,10.4,10.6,10.3c3.1,0,3.8-0.9,3.8-3.9
C887.2,214.7,887.3,201.2,887.3,187.7z"/>
<path fill="#FBFCFC" d="M741.4,374.8c13.5,0,26.9,0.1,40.4-0.1c2.8,0,3.9,0.6,4.3,3.6c7.5,60-33.5,97.2-81.6,99.8
c-44.6,2.5-80.6-22.8-96.1-55.9c-23.6-50.5,2.9-110.5,57.4-128.3c34.1-11.1,65.7-5.7,93.7,17.6c2.8,2.4,3.5,3.8,0.3,6.5
c-4.3,3.7-8.4,7.9-12.3,12.1c-2.2,2.4-3.6,2.5-6.3,0.3c-28.4-23.4-69.2-20.9-94.4,5.7c-19.8,20.9-24.2,53.2-10.9,79.1
c13.2,25.7,41.9,40.4,70.5,36.5c10.9-1.5,21-4.7,30.2-11c12.8-8.7,20.1-20.8,22.6-36c0.6-3.4-0.3-4.1-3.5-4.1
c-17.9,0.1-35.8-0.1-53.7,0.2c-4.2,0.1-5.3-1.2-5-5.2c0.3-5.7,0.3-11.5,0-17.2c-0.1-3,0.8-3.9,3.9-3.9
C714.5,374.9,728,374.8,741.4,374.8z"/>
<path fill="#65BE69" d="M155,152.5c5.9-6.6,13.4-6.9,21.2-5c6.5,1.6,12,5.3,17.7,8.5c67.4,37.8,134.7,75.6,202.1,113.4
c0.6,0.3,1,0.8,1.6,1.2c-3,3.1-6,6.1-9,9.2c-17.6,16.8-35,33.9-52,51.3c-0.3,0.1-0.5,0.1-0.8,0.1c-9.9-11-20.7-21.2-31.7-31
c-0.3-0.6-0.5-1.2-0.9-1.7c-16-15.9-31.7-32.2-48.6-47.2c-0.5-0.6-1-1.3-1.5-1.9c-26-26-52-51.9-78.1-77.8
C168.4,165.1,161.6,158.9,155,152.5z"/>
<path fill="#EF4049" d="M335.8,331.2c0.3,0,0.5,0,0.8-0.1c8.3,8.3,16.7,16.6,25.1,24.9c9,8.8,18,17.6,27,26.4c3,3.1,6,6.1,8.9,9.2
c-51.1,28.7-102.2,57.5-153.3,86.2c-19,10.7-38,21.3-57,32c-5.8,3.2-11.6,6-18.5,5.8c-5.4-0.1-9.9-1.7-13.6-5.7
c42.8-42.2,85.5-84.4,128.3-126.7C300.9,366,318.3,348.5,335.8,331.2z"/>
<path fill="#FDFEFF" d="M1158.9,369.6c0.4-0.4,0.6-0.4,0.6-0.5c0.8-9.2,0.7-9.2,10.3-9.2c3.9,0,7.9,0.2,11.8-0.1
c3-0.2,3.9,0.7,3.9,3.8c-0.2,9.9-0.1,19.7-0.1,29.6c0,25,0,49.9,0,74.9c0,11.1-1.1,22-5.4,32.3c-8.8,21.1-25.7,31-47.6,32.6
c-25.6,1.8-45.1-8.6-58.2-30.9c-2-3.4-2.4-5.5,2.2-6.9c5.3-1.7,10.4-3.9,15.4-6.3c2.9-1.4,4-0.7,5.6,2.1
c8.2,14.9,22.6,21.1,38.6,17.2c13.5-3.3,21.8-13.1,23.2-28.3c0.5-4.9,0.1-9.8,0.1-14.7c-0.3,0-0.7-0.2-0.9,0
c-17.1,18.5-48.7,17.5-69.6-0.9c-18.8-16.5-26-37.4-19.8-61.6c6.1-23.8,21.9-39.3,46.1-44.9C1131.6,353.8,1146.4,357.5,1158.9,369.6
z M1094.4,418.6c-0.2,2.5,0.4,5.9,1.2,9.2c3.7,14.9,16.7,25.8,31.6,26.5c14.2,0.7,26.9-8.1,32-22.3c3.8-10.6,3.6-21.3-1-31.6
c-5.3-11.8-14.2-19.3-27.5-19.9C1109.9,379.6,1094.3,395.7,1094.4,418.6z"/>
<path fill="#31C0F1" d="M304.1,300.1c-0.3-0.6-0.5-1.2-0.9-1.7c-16-15.9-31.7-32.2-48.6-47.2c-0.5-0.6-1-1.3-1.5-1.9
c-26-26-52-51.9-78.1-77.8c-6.5-6.5-13.3-12.7-19.9-19c-6,6.2-6.7,14-6.7,22c0,57.8,0,115.7,0,173.5c0,1.6,0.2,3.3,0.3,4.9
c-0.1,11.4-0.3,22.9-0.3,34.3c0,21.4,0.2,42.8,0.2,64.2c0,13.7-0.3,27.4,0,41.1c0.1,6.4,1.9,12.6,6.6,17.4
c42.8-42.2,85.5-84.4,128.3-126.7c17.5-17.3,34.9-34.7,52.3-52.1C325.8,320.2,315.1,310,304.1,300.1z"/>
<path fill="#FAFAFA" d="M1417.9,384.8c0-28.1,0.1-56.2-0.1-84.3c0-4.1,0.6-5.6,5.2-5.5c21.7,0.4,43.4-0.2,65,0.6
c25.4,1,47.6,19.2,52.9,42c7.3,31.1-11.7,60.4-43.9,67.4c-11.2,2.5-22.6,1.4-33.9,1.6c-4.6,0.1-9.2,0.3-13.8-0.1
c-3.5-0.2-4.4,0.9-4.3,4.3c0.2,19.5,0,39.1,0.2,58.6c0,4.1-1.1,5.3-5.2,5.1c-6.1-0.4-12.2-0.3-18.2,0c-3.3,0.1-4.1-0.9-4.1-4.1
C1418,442,1417.9,413.4,1417.9,384.8z M1445.2,350.8c0,9.2,0.1,18.4-0.1,27.6c0,2.6,0.7,3.3,3.3,3.3c12.3-0.1,24.6,0.1,37-0.2
c16.4-0.4,30-14.3,30.1-30.4c0.1-16.4-13.5-30.4-30.2-30.7c-12.1-0.2-24.3,0.1-36.5-0.2c-3.3-0.1-3.6,1.3-3.6,4
C1445.3,333,1445.2,341.9,1445.2,350.8z"/>
<path fill="#FDFEFF" d="M1680.2,459.5c-18.5,27.3-56.7,20.6-71.2,3.8c-14-16.3-12.3-40.4,5.1-53c18.6-13.6,39.2-15.2,60.7-7.7
c1.7,0.6,3.3,1.3,5.3,2.2c0.4-8.6-3.3-14.5-9.7-19.1c-12.1-8.5-35.3-7.3-42.3,5.9c-1,1.9-2.2,1.4-3.6,0.8
c-6.2-2.6-12.3-5.4-18.6-7.6c-3.2-1.2-2.5-2.6-1.3-4.6c5.5-9.7,13.7-16.3,24-20.1c16.4-6.1,32.9-5.7,49,1c18,7.5,28,21.6,28.6,41.1
c0.8,23.1,0.3,46.3,0.4,69.4c0,2.2-0.8,2.8-2.8,2.8c-6.9-0.1-13.8-0.1-20.7,0c-2.6,0.1-3-1.1-2.9-3.2
C1680.3,467.7,1680.2,464.3,1680.2,459.5z M1657.8,419.9c-8.9,0-16.3,1-23,5.2c-5.8,3.6-8.8,8.9-7.9,15.8c0.8,6.3,5.3,9.6,10.8,11.6
c17.6,6.4,37.9-5,42-23.4c0.5-2.4-0.1-3.5-2.3-4.5C1670.8,421.5,1663.9,419.8,1657.8,419.9z"/>
<path fill="#FDFEFF" d="M993.8,478.3c-35.1,0-62-26.3-62.1-60.7c-0.1-34.7,26.9-61.3,62.1-61.3c34.8,0,62,26.7,62,61
C1055.8,451.5,1028.7,478.2,993.8,478.3z M1028.5,420.5c0-23-14.1-39.2-32.1-40c-16.4-0.8-29.7,7.9-35.1,23
c-5.8,16.1-0.9,34.5,11.9,43.9c11.3,8.2,23.6,9.5,36.1,3C1022.4,443.5,1028.1,431.9,1028.5,420.5z"/>
<path fill="#FDFEFF" d="M796.4,417.2c0-34.5,26.9-60.9,61.9-61c35.2,0,62.2,26.6,62,61.3c-0.1,34.5-27,60.7-62.1,60.7
C823.2,478.2,796.3,451.7,796.4,417.2z M858.3,380.4c-19.7,0-34.8,15.9-34.9,36.7c-0.1,20.9,15.5,37.3,35.1,37.2
c19.4-0.1,34.8-16.5,34.7-37.2C893.2,396.4,878,380.4,858.3,380.4z"/>
<path fill="#FDFEFF" d="M1276.2,435.8c11.4,22.3,40.3,25.2,56.8,5.6c2.8-3.4,4.6-3.8,8-1.1c4.2,3.3,8.9,6.2,13.5,8.9
c2.5,1.5,2.7,2.6,0.9,4.8c-16.5,20.3-37.9,27.9-63.1,22.7c-23.9-5-39.4-20.2-45.7-43.8c-7.5-28.1,5-57.5,28.9-70.1
c29.5-15.6,63.5-3.8,78.2,27.1c5.5,11.7,5.5,11.7-6.2,16.5c-22.1,9-44.2,18.1-66.3,27.1C1279.4,434.4,1277.8,435.1,1276.2,435.8z
M1271.6,412c-0.2,2-0.4,3.6,3,2.2c16.4-6.9,32.9-13.6,49.4-20.2c2.8-1.1,2.5-2.3,1.1-4.3c-2.9-4-6.8-6.6-11.4-8.2
C1294,374.8,1272.2,390.4,1271.6,412z"/>
<path fill="#FDFEFF" d="M1832,359.8c-14.8,33.6-29.3,66.5-43.8,99.5c-9.7,22-19.5,44-29.1,66c-1.2,2.8-2.5,4-5.7,3.9
c-7.8-0.2-15.7-0.1-24.3-0.1c3-6.6,5.8-12.8,8.6-19c5.7-12.5,11.3-25,17.2-37.5c1.4-2.9,1.3-5.3,0-8.2
c-15-33.4-29.9-66.9-44.8-100.4c-0.5-1.2-1-2.4-1.7-4.2c9.4,0,18.3,0.1,27.3,0c2.9,0,2.8,2.4,3.5,4c9.6,23.1,19.2,46.2,28.7,69.4
c0.6,1.5,1.3,2.9,2.1,4.5c1.8-1.3,2-3.2,2.6-4.7c9.3-23.1,18.6-46.1,27.7-69.3c1.1-2.9,2.4-4,5.6-3.9
C1814.3,360,1822.8,359.8,1832,359.8z"/>
<path fill="#FAFAFA" d="M1204.2,384.4c0-28.2,0.1-56.5-0.1-84.7c0-3.7,0.9-4.8,4.6-4.6c6.2,0.3,12.5,0.2,18.7,0
c3.2-0.1,4.2,0.8,4.1,4.1c-0.2,12.3-0.1,24.6-0.1,36.9c0,44.5-0.1,89,0.1,133.5c0,4.1-0.9,5.4-5.1,5.1c-5.7-0.4-11.5-0.4-17.2,0
c-4,0.2-5.2-0.9-5.2-5.1C1204.3,441.2,1204.2,412.8,1204.2,384.4z"/>
<path fill="#FFFFFF" d="M1584.6,384.9c0,28.4-0.1,56.8,0.1,85.2c0,3.7-0.9,4.8-4.6,4.6c-6.1-0.3-12.2-0.3-18.2,0
c-3.4,0.2-4.4-0.9-4.4-4.3c0.1-31.2,0.1-62.4,0.1-93.6c0-25.6,0.1-51.2-0.1-76.8c0-3.9,1-5.1,4.9-4.9c5.9,0.3,11.8,0.3,17.7,0
c3.8-0.2,4.6,1,4.6,4.6C1584.5,328.1,1584.6,356.5,1584.6,384.9z"/>
<path fill="#FAFAFA" d="M671.1,183.1c5.6,0,11.2,0.4,16.7-0.1c5.1-0.5,5.9,2.1,6.2,6.1c1.3,19.7-10.5,36.9-29.4,42.7
c-27.1,8.3-54.5-7.1-60.6-34c-4.3-19,3.3-38.1,19.5-49c15.5-10.4,37-10.4,52.4,0.3c2.7,1.8,7.1,4.3,6.3,6.8c-1,3.3-4.9,5.9-7.8,8.5
c-1.5,1.4-2.2-0.6-3.1-1.4c-13-12.1-33.7-11.1-45.9,2.2c-11.7,12.8-10.8,34.8,2.1,46.7c13,12,34.5,11.3,46.2-1.5
c2.9-3.1,4.3-6.9,5.4-10.9c0.7-2.4,0.2-3.5-2.7-3.4c-8,0.2-16.1,0-24.1,0.1c-3,0.1-4.3-0.4-4.3-3.9c0.1-9.2-0.1-9.2,9.3-9.2
C661.9,183.1,666.5,183.1,671.1,183.1z"/>
<path fill="#FDFEFF" d="M1114.3,165.2c0,4.5,0,7.9,0,11.3c0,17.1-0.1,34.2,0.1,51.3c0,3-0.4,4.2-3.9,4.2
c-10.1-0.1-10.1,0.1-10.1-10.2c0-24.6,0.1-49.3-0.1-73.9c0-3.6,0.6-4.6,4.6-5.1c8.4-0.9,13.1,2.1,17.4,9.5
c10.6,18.1,22.2,35.5,34.2,54.4c0-2.8,0-4.4,0-5.9c0-17.9,0-35.8-0.2-53.7c0-3.1,0.7-4.2,4-4.1c10.1,0.1,10.1-0.1,10.1,9.8
c0,25-0.1,49.9,0.1,74.9c0,3.3-0.8,4.1-4.2,4.5c-7.3,0.8-11.4-1.8-15.1-8.2c-10.8-18.2-22.4-35.9-33.7-53.7
C1116.6,168.8,1115.8,167.5,1114.3,165.2z"/>
<path fill="#FAFAFA" d="M1041,233.9c-26.3-0.1-46.2-20.3-46.1-46.7c0.1-26.2,20.5-46.3,46.7-46.1c25.8,0.2,45.9,20.6,45.9,46.6
C1087.4,213.9,1067.3,234,1041,233.9z M1073.1,187.6c0-19-13.3-32.9-31.6-32.9c-18.5-0.1-31.9,13.6-32,32.6
c-0.1,19.1,13.5,33.4,31.9,33.3C1059.5,220.5,1073,206.5,1073.1,187.6z"/>
<path fill="#FAFAFA" d="M707.1,187.4c0-13.5,0.1-26.9-0.1-40.4c0-3.2,0.8-4.1,4.1-4.1c15.3,0.2,30.6,0.2,45.8,0c3.1,0,4.2,0.6,4.2,4
c-0.1,9.7,0.1,9.7-9.8,9.7c-8.7,0-17.4,0.1-26.1-0.1c-2.8-0.1-4.1,0.4-4,3.7c0.3,5.6,0.3,11.2,0,16.7c-0.2,3.4,1.1,4.1,4.2,4
c9-0.2,18.1,0.1,27.1-0.1c3.6-0.1,4.8,0.7,4.7,4.6c-0.3,8.8-0.1,8.8-8.7,8.8c-7.9,0-15.8,0.1-23.7-0.1c-2.6-0.1-3.8,0.5-3.6,3.4
c0.2,5.7,0.2,11.5,0,17.2c-0.1,3,0.8,4,3.8,3.9c10.5-0.2,21,0,31.5-0.1c3.3-0.1,4.6,0.6,4.5,4.2c-0.2,9.2,0,9.2-9.3,9.2
c-13.1,0-26.3-0.2-39.4,0.1c-4.8,0.1-5.5-1.5-5.4-5.7C707.3,213.4,707.1,200.4,707.1,187.4z"/>
<path fill="#F5F6F6" d="M794,194.1c0-11.2-0.1-22.3,0.1-33.5c0-3.1-0.6-4.3-4-4.1c-5.7,0.3-11.5,0-17.2,0.1c-2.4,0.1-3-0.7-3.1-3
C769.3,143,769.2,143,780,143c16.1,0,32.2,0.1,48.3-0.1c3.4,0,4.4,0.8,4.4,4.3c-0.1,9.4,0,9.4-9.5,9.4c-4.7,0-11.1-1.6-13.8,0.8
c-3.1,2.8-0.9,9.2-0.9,14.1c-0.1,18.7-0.1,37.4,0,56.2c0,3.4-0.7,4.5-4.3,4.4c-10.1-0.1-10.1,0-10.1-10.3
C794,212.5,794,203.3,794,194.1z"/>
<path fill="#FBFCFC" d="M936.8,194.2c0,11.3-0.1,22.7,0.1,34c0.1,3.1-0.9,3.8-3.9,3.8c-10.2,0-10.2,0.1-10.2-10.2
c0-20.2-0.1-40.4,0.1-60.6c0-4-1.2-4.9-4.9-4.7c-5.4,0.3-10.8-0.1-16.3,0.1c-2.9,0.1-3.5-0.9-3.5-3.6c-0.1-10-0.2-10,9.9-10
c16.3,0,32.5,0.1,48.8-0.1c3.2,0,4.6,0.5,4.5,4.2c-0.2,9.5,0,9.5-9.5,9.5c-3.6,0-7.2,0.2-10.8-0.1c-3.4-0.3-4.5,0.7-4.4,4.2
C937,171.9,936.8,183.1,936.8,194.2z"/>
<path fill="#F5F6F6" d="M887.3,187.7c0,13.5-0.1,26.9,0.1,40.4c0,3-0.7,3.9-3.8,3.9c-10.6,0.1-10.6,0.2-10.6-10.3
c0-24.8,0.1-49.6-0.1-74.4c0-3.4,0.8-4.5,4.3-4.4c10.1,0.1,10.1,0,10.1,9.9C887.3,164.4,887.3,176.1,887.3,187.7z"/>
<path fill="#FAC013" d="M473.1,313.3c-11.5-7.7-23.9-14.2-36.2-20.6c-12.9-7.8-26.1-15.1-39.3-22.2c-3,3.1-6,6.1-9,9.2
c-17.6,16.8-35,33.9-52,51.3c8.3,8.3,16.7,16.6,25.1,24.9c9,8.8,18,17.6,27,26.4c3,3.1,6,6.1,8.9,9.2c12.5-7,24.9-14.1,37.4-21.1
c12.3-6.8,24.6-13.6,36.7-20.6c5.1-2.9,9-7.1,11.1-12.7C486,328.7,482.7,319.8,473.1,313.3z"/>
<path fill="#030303" d="M1094.4,418.6c0-22.9,15.5-39,36.3-38.1c13.3,0.6,22.2,8.1,27.5,19.9c4.6,10.3,4.8,21,1,31.6
c-5,14.2-17.8,22.9-32,22.3c-14.9-0.7-27.9-11.6-31.6-26.5C1094.7,424.5,1094.2,421.1,1094.4,418.6z"/>
<path fill="#010101" d="M1445.2,350.8c0-8.9,0.1-17.7-0.1-26.6c0-2.7,0.3-4.1,3.6-4c12.1,0.2,24.3,0,36.5,0.2
c16.7,0.3,30.3,14.3,30.2,30.7c-0.1,16.1-13.7,30.1-30.1,30.4c-12.3,0.3-24.6,0-37,0.2c-2.6,0-3.3-0.7-3.3-3.3
C1445.3,369.2,1445.2,360,1445.2,350.8z"/>
<path fill="#030303" d="M1657.8,419.9c6.1-0.1,13,1.6,19.7,4.6c2.2,1,2.8,2.1,2.3,4.5c-4,18.4-24.4,29.8-42,23.4
c-5.5-2-10-5.3-10.8-11.6c-0.9-6.9,2.1-12.2,7.9-15.8C1641.4,420.9,1648.9,419.8,1657.8,419.9z"/>
<path fill="#030303" d="M1028.5,420.5c-0.4,11.4-6.1,23-19.2,29.9c-12.5,6.5-24.8,5.2-36.1-3c-12.8-9.3-17.7-27.8-11.9-43.9
c5.4-15.1,18.7-23.8,35.1-23C1014.4,381.3,1028.5,397.5,1028.5,420.5z"/>
<path fill="#030303" d="M858.3,380.4c19.7,0,34.8,15.9,34.9,36.8c0.1,20.6-15.3,37-34.7,37.2c-19.6,0.1-35.2-16.3-35.1-37.2
C823.5,396.3,838.6,380.4,858.3,380.4z"/>
<path fill="#030303" d="M1271.6,412c0.6-21.5,22.4-37.1,42.1-30.4c4.6,1.6,8.5,4.2,11.4,8.2c1.4,1.9,1.8,3.1-1.1,4.3
c-16.5,6.6-33,13.3-49.4,20.2C1271.2,415.6,1271.4,413.9,1271.6,412z"/>
<path fill="#030303" d="M1073.1,187.6c0,18.9-13.6,32.9-31.8,33c-18.4,0-32-14.2-31.9-33.3c0.1-19,13.5-32.6,32-32.6
C1059.8,154.7,1073.1,168.5,1073.1,187.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File
View File
View File
View File
View File
+1
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

View File
View File
View File
View File
+121
View File
@@ -0,0 +1,121 @@
module github.com/tinode/chat
go 1.26.0
require (
firebase.google.com/go v3.13.0+incompatible
github.com/aws/aws-sdk-go-v2 v1.42.1
github.com/aws/aws-sdk-go-v2/config v1.32.27
github.com/aws/aws-sdk-go-v2/credentials v1.19.26
github.com/aws/aws-sdk-go-v2/feature/s3/transfermanager v0.2.13
github.com/aws/aws-sdk-go-v2/service/s3 v1.104.2
github.com/aws/smithy-go v1.27.3
github.com/go-sql-driver/mysql v1.10.0
github.com/golang/mock v1.6.0
github.com/google/go-cmp v0.7.0
github.com/gorilla/handlers v1.5.2
github.com/gorilla/websocket v1.5.3
github.com/jackc/pgx/v5 v5.10.0
github.com/jmoiron/sqlx v1.4.0
github.com/nyaruka/phonenumbers v1.8.0
github.com/prometheus/client_golang v1.23.2
github.com/prometheus/common v0.69.0
github.com/rivo/uniseg v0.4.7
github.com/tinode/jsonco v1.0.0
github.com/tinode/snowflake v1.0.0
go.mongodb.org/mongo-driver v1.17.9
golang.org/x/crypto v0.53.0
golang.org/x/oauth2 v0.36.0
golang.org/x/text v0.38.0
google.golang.org/api v0.287.0
google.golang.org/grpc v1.82.0
google.golang.org/protobuf v1.36.11
gopkg.in/rethinkdb/rethinkdb-go.v6 v6.2.2
)
require (
cel.dev/expr v0.25.2 // indirect
cloud.google.com/go/auth v0.20.0 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
cloud.google.com/go/monitoring v1.29.0 // indirect
filippo.io/edwards25519 v1.2.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.33.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.57.0 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.57.0 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.14 // indirect
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.30 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.30 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.30 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.31 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.13 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.23 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.30 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.31 // indirect
github.com/aws/aws-sdk-go-v2/service/signin v1.2.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.31.5 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.8 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.43.5 // indirect
github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect
github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect
github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect
github.com/go-jose/go-jose/v4 v4.1.4 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect
github.com/spiffe/go-spiffe/v2 v2.8.1 // indirect
github.com/stretchr/objx v0.5.0 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect
go.opentelemetry.io/otel v1.44.0 // indirect
go.opentelemetry.io/otel/metric v1.44.0 // indirect
go.opentelemetry.io/otel/sdk v1.44.0 // indirect
go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect
go.opentelemetry.io/otel/trace v1.44.0 // indirect
golang.org/x/net v0.56.0 // indirect
)
require (
cloud.google.com/go v0.123.0 // indirect
cloud.google.com/go/compute/metadata v0.9.0 // indirect
cloud.google.com/go/firestore v1.22.0 // indirect
cloud.google.com/go/iam v1.11.0 // indirect
cloud.google.com/go/longrunning v1.1.0 // indirect
cloud.google.com/go/storage v1.63.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/felixge/httpsnoop v1.1.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v1.0.0 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.17 // indirect
github.com/googleapis/gax-go/v2 v2.22.0 // indirect
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/klauspost/compress v1.19.0 // indirect
github.com/montanaflynn/stats v0.9.0 // indirect
github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/procfs v0.21.1 // indirect
github.com/sirupsen/logrus v1.9.4 // indirect
github.com/twilio/twilio-go v1.30.9
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.2.0 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20240726163527-a2c0da244d78 // indirect
golang.org/x/sync v0.21.0 // indirect
golang.org/x/sys v0.46.0 // indirect
golang.org/x/time v0.15.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto v0.0.0-20260630182238-925bb5da69e7 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260630182238-925bb5da69e7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260630182238-925bb5da69e7 // indirect
gopkg.in/cenkalti/backoff.v2 v2.2.1 // indirect
)
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File

Some files were not shown because too many files have changed in this diff Show More