Compare commits
193 Commits
master
...
mozilla-ma
Author | SHA1 | Date |
---|---|---|
Victor Ibragimov | 11319080a8 | |
Quentí | 0aefdc18da | |
Quentí | 2be2b6f410 | |
Quentí | d4c42c8ab1 | |
వీవెన్ | b9a329fa34 | |
Jim Spentzos | f84a5f1b18 | |
Lavon Śpirydonaŭ | 9f64e08b93 | |
robbp | 48a11cd33b | |
Bald3mar | 32b9fb8aa6 | |
Gwenn | f0bbf822c1 | |
Gwenn | 3abaa58a1b | |
robbp | b0ad17d3b7 | |
Besnik Bleta | 4597ecf4e1 | |
Besnik Bleta | 571b6f4003 | |
Jim Spentzos | 0152a440b4 | |
George kitsoukakis | 0886352a09 | |
Bald3mar | 98444d68d3 | |
Bald3mar | d38ea6a3fa | |
Bald3mar | e75478af8d | |
Bald3mar | d8e117e61a | |
Mark Heijl | 15c9593e18 | |
వీవెన్ | df0644a9da | |
Abdulrasheed Idris | b22b8f089d | |
Adaobi | 032fddff64 | |
Juan Pablo | 46bc3d4713 | |
Juan Pablo | d0844ae811 | |
Juan Pablo | 740ab457de | |
Lan Glad | 41865f9fc2 | |
Lan Glad | 915d6c2abd | |
Lan Glad | fc07069900 | |
Isidora Jukić | 98819744af | |
Isidora Jukić | c6ddbe1b66 | |
Danny Coates | 3c4f502eac | |
Danny Coates | 320b4cc9f1 | |
Jim Spentzos | e20798e0aa | |
Kim YoungCheon | d23eb376f8 | |
Alexander Slovesnik | 7654210dbb | |
Aman Alam | decc44620b | |
Danny Coates | 246e2c8db0 | |
Danny Coates | fbc4107262 | |
Danny Coates | dc912678fe | |
Danny Coates | 1ec2b995b0 | |
Danny Coates | fc8673b87a | |
Melo46 | 27bc7de7d0 | |
Melo46 | 0abcd8ac3b | |
Melo46 | 604a17a19d | |
Itiel | 97efdc572a | |
Danny Coates | d023a53b74 | |
Abelardo Ayala Rodríguez | 06daba9ce0 | |
Danny Coates | deb5c6e5d1 | |
Danny Coates | d2cdff5975 | |
Danny Coates | 0eb35c048c | |
Danny Coates | 028a6c4311 | |
Danny Coates | 2356d0fb64 | |
Danny Coates | ab63a34938 | |
Danny Coates | 4f03be590a | |
Danny Coates | 9bd96a9ec0 | |
Danny Coates | dd59605f3e | |
Danny Coates | e2425cd6c9 | |
Danny Coates | 81e9d81dab | |
Danny Coates | 87d46f7ef5 | |
Danny Coates | 2f503c91e4 | |
Jiri Grönroos | 3c27656444 | |
Danny Coates | 1cd33282dd | |
Gery Escalier | db6358abed | |
jlG | a08333d2b4 | |
వీవెన్ | 8869e34ca5 | |
వీవెన్ | a05c0e16b7 | |
Danny Coates | 192d45f77c | |
Danny Coates | 8ad4597114 | |
Abelardo Ayala Rodríguez | 4d96274f79 | |
Abelardo Ayala Rodríguez | 437f712a4d | |
Danny Coates | 7d35e8f61f | |
Danny Coates | 7130c2e7b0 | |
Melo46 | 72d2d6ef31 | |
Abelardo Ayala Rodríguez | eadf223e8d | |
Abelardo Ayala Rodríguez | 196099b194 | |
goofy | f0a116d0e4 | |
Abelardo Ayala Rodríguez | 571049e597 | |
Abelardo Ayala Rodríguez | f637f2f3bc | |
Abelardo Ayala Rodríguez | fe892fdcc1 | |
Abelardo Ayala Rodríguez | f792482478 | |
nandar | 5277730e7c | |
nandar | 696b3f7c05 | |
alamanda | 18eebd1ce2 | |
alamanda | 86326e4e6d | |
Fjoerfoks | 4c02a2ecf7 | |
Fjoerfoks | c00e552f80 | |
Fjoerfoks | bcefd4f1cb | |
Hyeonseok Shin | 82a91f4117 | |
Hyeonseok Shin | 6539da2c53 | |
Théo Chevalier | c6152cfcb4 | |
Mikeyy | 9f8e1051b1 | |
robbp | a2db84e44e | |
Mikeyy | 6f967e984f | |
ZiriSut | 6bc0b780be | |
Andreas Pettersson | a88acee8ee | |
Luna Jernberg | 92759a1f08 | |
Luna Jernberg | 59c4032176 | |
Quentí | 5e9edec93a | |
Quentí | dfb81409c6 | |
Selyan Slimane Amiri | 5ef569fa71 | |
ZiriSut | bfff47641a | |
ZiriSut | 7abe664e79 | |
ZiriSut | b30ac5605d | |
Danny Coates | 0f289202bc | |
ZiriSut | 7223956f01 | |
ZiriSut | e972c9f723 | |
Selyan Slimane Amiri | 8147d34857 | |
G12r | f1c73fcf8d | |
Jordi Serratosa | 9fa012c04d | |
G12r | 75bd771812 | |
Jordi Serratosa | b98761e08a | |
G12r | 93638aa291 | |
Jordi Serratosa | acb73e1dab | |
Ian Neal | 2235414620 | |
Enol | 1aa0fbb712 | |
Enol | d66d5d65b2 | |
Björn I | 207a27215c | |
Björn I | 2790b4ca4b | |
Luna Jernberg | f653838bf4 | |
Paulius | a0770d9b86 | |
Paulius | ec1f32fb65 | |
Björn I | ca0a05e6dc | |
Melo46 | 0687ec877c | |
marsf | 14209baf55 | |
marsf | 75938febfa | |
marsf | a9e9902468 | |
Cristian Silaghi | 91cd7684c4 | |
Chengings | 8bf8c8d95a | |
Chengings | 594916a59d | |
José Manuel | 6213762d96 | |
Danny Coates | d9cbe058ab | |
Itiel | 2f6119e2f1 | |
Itiel | 21d1839818 | |
Jakob Kappel | 95cde415f6 | |
Gabriela | 2e6d1abac2 | |
Gabriela | 3a36a718d2 | |
Joergen | 04b1623f15 | |
Joergen | 10ffa1d785 | |
Enol | 93e98b9c30 | |
Enol | 618e169895 | |
Enol | 91584649c5 | |
Michael Wolf | 31805031ca | |
Michael Wolf | 58ffcb171d | |
Danny Coates | 55df061567 | |
Mikalai Udodau | 8fb770a4ea | |
Juraj Cigáň | 83cae687c8 | |
Francesco Lodolo | 75444ead46 | |
Cláudio Esperança | df62189346 | |
Muhend Belkacem | b1e25ed40c | |
Michele Rodaro | abef9d9b7f | |
Michael Wolf | 748d9b48ff | |
Pin-guang Chen | 10f60dd2dd | |
Michael Wolf | 1882ce5708 | |
Michael Wolf | 20db9ee6fd | |
Piotr Drąg | 069efcd257 | |
Pin-guang Chen | 446e993420 | |
Selim Şumlu | 588c793b98 | |
Selim Şumlu | 3c6f45464b | |
Michael Wolf | 76ecbbecc6 | |
Pin-guang Chen | ab1802a371 | |
Selim Şumlu | 15f4f386fb | |
Michael Wolf | 84e9e9f654 | |
Quế Tùng | e1e7887237 | |
Gwenn | 0c274139ed | |
Rhoslyn Prys | 1dbf7c7b2a | |
Rhoslyn Prys | 0bec884397 | |
Rhoslyn Prys | 58095ac676 | |
Michael Köhler | b680d20bca | |
Michal Stanke | 5eab9703af | |
Danny Coates | 5c5853c645 | |
Marcelo Ghelman | 4674666807 | |
ravmn | 5626e128f2 | |
Marcelo Ghelman | 1fa714924e | |
Marcelo Ghelman | 89bfa74bb8 | |
πάθοςγιατηζωή | 12d6c029ff | |
πάθοςγιατηζωή | c580282a27 | |
Danny Coates | f3a1fde07f | |
πάθοςγιατηζωή | ce507c557f | |
Håvar Henriksen | 6c984fa127 | |
Håvar Henriksen | 359d5d6bdd | |
Michael Wolf | 7698564a4d | |
Marcelo Ghelman | 546b58d4d5 | |
Michael Wolf | 813a2d2f25 | |
Michael Wolf | f8d61479d2 | |
Іhor Hordiichuk | afcc06ad14 | |
Kohei Yoshino | 84b3796710 | |
Luna Jernberg | 8fd0a4cb01 | |
Balázs Meskó | 2a947a031d | |
Danny Coates | 0a8663aa51 | |
Danny Coates | 17057e725d | |
Danny Coates | 9891d1f0ba |
|
@ -5,4 +5,3 @@ coverage
|
|||
android/app/build
|
||||
app/locale.js
|
||||
app/capabilities.js
|
||||
app/qrcode.js
|
|
@ -1,2 +1,2 @@
|
|||
public/locales/*/*.ftl linguist-documentation
|
||||
docs/** linguist-documentation
|
||||
public/locales/* linguist-documentation
|
||||
docs/* linguist-documentation
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
node_modules
|
||||
coverage
|
||||
dist
|
||||
.env
|
||||
.idea
|
||||
.DS_Store
|
||||
.nyc_output
|
||||
|
|
|
@ -1,72 +0,0 @@
|
|||
|
||||
stages:
|
||||
- test
|
||||
- release
|
||||
|
||||
# Build Send, run npm tests
|
||||
test:
|
||||
stage: test
|
||||
image: "node:16-slim"
|
||||
only:
|
||||
- api
|
||||
- branches
|
||||
- chat
|
||||
- merge_requests
|
||||
- pushes
|
||||
- schedules
|
||||
- tags
|
||||
- triggers
|
||||
- web
|
||||
before_script:
|
||||
# Install dependencies
|
||||
- apt-get update
|
||||
- apt-get install -y git python3 build-essential libxtst6
|
||||
|
||||
# Prepare Chrome for puppeteer
|
||||
- apt-get install -y wget gnupg
|
||||
- wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
|
||||
- sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
|
||||
- apt-get update
|
||||
- apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
|
||||
- apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1 --no-install-recommends
|
||||
script:
|
||||
- npm ci
|
||||
- npm run lint
|
||||
- npm test
|
||||
|
||||
release-docker:
|
||||
stage: release
|
||||
image: docker:latest
|
||||
services:
|
||||
- docker:dind
|
||||
only:
|
||||
- api
|
||||
- branches
|
||||
- chat
|
||||
- merge_requests
|
||||
- pushes
|
||||
- schedules
|
||||
- tags
|
||||
- triggers
|
||||
- web
|
||||
script:
|
||||
- docker login "$CI_REGISTRY" -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD"
|
||||
- docker buildx create --name sendBuilder
|
||||
- docker buildx use sendBuilder
|
||||
- |
|
||||
if [ "$CI_PIPELINE_SOURCE" == "merge_request_event" ]; then
|
||||
IMAGE_NAMES="$CI_REGISTRY_IMAGE/mr:$CI_MERGE_REQUEST_IID"
|
||||
elif [ "$CI_COMMIT_TAG" != "" ]; then
|
||||
IMAGE_NAMES="$CI_REGISTRY_IMAGE:$CI_COMMIT_TAG $CI_REGISTRY_IMAGE:latest"
|
||||
else
|
||||
IMAGE_NAMES="$CI_REGISTRY_IMAGE/$CI_COMMIT_BRANCH:$CI_COMMIT_SHORT_SHA"
|
||||
fi
|
||||
- |
|
||||
for image in $IMAGE_NAMES; do
|
||||
docker buildx build --platform linux/amd64,linux/arm64 -t $image . --push
|
||||
done
|
||||
- |
|
||||
echo "Container image pushed. You can pull it with";
|
||||
for image in $IMAGE_NAMES; do
|
||||
echo "docker pull $image"
|
||||
done
|
|
@ -11,5 +11,3 @@ rules:
|
|||
selector-list-comma-newline-after: null
|
||||
value-list-comma-newline-after: null
|
||||
at-rule-no-unknown: null
|
||||
# Conflicts with prettier
|
||||
string-quotes: null
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
{
|
||||
}
|
60
CONTRIBUTORS
|
@ -1,14 +1,8 @@
|
|||
Abd ar-Rahman Hamidi
|
||||
Abdalrahman Hwoij
|
||||
Abdulrash6211
|
||||
Abdulrasheed Idris
|
||||
Abelardo Ayala Rodríguez
|
||||
Abhinav Adduri
|
||||
Adaobi
|
||||
Adnan Kičin
|
||||
Adolfo Jayme Barrientos
|
||||
Alberto Castro
|
||||
Alexander Parada
|
||||
Alexander Slovesnik
|
||||
Alfredos-Panagiotis Damkalis
|
||||
Aman Alam
|
||||
|
@ -20,12 +14,9 @@ Anika Dorn
|
|||
Anish Sheela
|
||||
Arash Mousavi
|
||||
Artem Polivanchuk
|
||||
Ashesh Vidyut
|
||||
Ashikur Rahman
|
||||
Ashok kumar
|
||||
Ayobamiadebayo375
|
||||
Balasankar C
|
||||
Bald3mar
|
||||
Balázs Meskó
|
||||
Belayet Hossain
|
||||
Benjamin Forehand Jr
|
||||
|
@ -36,27 +27,23 @@ Boopesh Mahendran
|
|||
Brahim Essaidi
|
||||
Brainlulz
|
||||
Breana Gonzales
|
||||
CLASSIFIED
|
||||
Christian Elbrianno
|
||||
Christoph Kührer
|
||||
Christopher Ramírez
|
||||
Chuck Harmston
|
||||
Cloney 173741
|
||||
Cláudio Esperança
|
||||
Connor Ford
|
||||
Cristian Silaghi
|
||||
Cynthia Pereira
|
||||
Daniel Thorn
|
||||
Daniela Arcese
|
||||
Danny Coates
|
||||
David Dumas
|
||||
Davide
|
||||
Derek Tamsen
|
||||
Dhyey Thakore
|
||||
Donovan Preston
|
||||
Edi Santoso
|
||||
Edmund Huggett
|
||||
Eduard Bopp
|
||||
Elisa X
|
||||
Emily
|
||||
Emily Hou
|
||||
|
@ -72,17 +59,12 @@ Francesco Lodolo [:flod]
|
|||
Frederick Villaluna
|
||||
G12r
|
||||
Gabriela
|
||||
Garysqo
|
||||
Gautam krishna.R
|
||||
George Raptis
|
||||
Georgianizator
|
||||
Gery Escalier
|
||||
Gisela Solis
|
||||
Gonçalo Matos
|
||||
Gwenn
|
||||
Hampus
|
||||
Hmxhmx
|
||||
Hrant
|
||||
Hugo
|
||||
Hugo Abreu
|
||||
Hyeonseok Shin
|
||||
|
@ -93,35 +75,26 @@ Jae Hyeon Park
|
|||
Jakob Kappel
|
||||
Jakub Rychlý
|
||||
Jamie
|
||||
Jan Schloß
|
||||
Jarmo
|
||||
Jim Spentzos
|
||||
Jiri Grönroos
|
||||
Jirka Soukeník
|
||||
Jobava
|
||||
Joe Becher
|
||||
Joe ST
|
||||
Joergen
|
||||
Johann-S
|
||||
John Gruen
|
||||
John Zonunmawi Vankal
|
||||
Jon Buckley
|
||||
Jon Vadillo
|
||||
Jonathan Claudius
|
||||
Jordi Cuevas
|
||||
Jordi Serratosa
|
||||
Joseph.maza
|
||||
José Manuel
|
||||
Juan Esteban Ajsivinac Sián
|
||||
Juan Pablo
|
||||
Juan Sián
|
||||
Julio Gomez
|
||||
Juraj Cigáň
|
||||
Jwtiyar
|
||||
Kerim Kalamujić
|
||||
Khaled Hosny
|
||||
Kim Ludvigsen
|
||||
Kim YoungCheon
|
||||
Kim Younggeon
|
||||
Kohei Yoshino
|
||||
Lan Glad
|
||||
|
@ -130,12 +103,10 @@ Laurent Jouanneau
|
|||
Lobodzets
|
||||
LuFlo
|
||||
Luis A. Sánchez
|
||||
Luis Flores Martínez
|
||||
Luiz Carlos de Morais
|
||||
Luiz Felipe F M Costa
|
||||
Luna Jernberg
|
||||
Mahay Alam Khan
|
||||
Manuela Silva
|
||||
Marcelo Ghelman
|
||||
Marcelo Poli
|
||||
Marco Aurélio
|
||||
|
@ -145,21 +116,16 @@ Mark Liang (You-Wen)
|
|||
Marko Andrejić
|
||||
Martijn Dekker
|
||||
Marwan Mohamad
|
||||
Mathieu Lecarme
|
||||
Matjaž Horvat
|
||||
Maykon Chagas
|
||||
Melo46
|
||||
Merike Sell
|
||||
Michael Köhler
|
||||
Michael Peter
|
||||
Michael Wolf
|
||||
Michal Stanke
|
||||
Michal Vašíček
|
||||
Miguel
|
||||
Mikeyy
|
||||
Milo
|
||||
Miro Rauhala
|
||||
Misael Hernández
|
||||
Mozilla Pontoon
|
||||
Mozilla-GitHub-Standards
|
||||
Mozinet
|
||||
|
@ -167,7 +133,6 @@ Moḥend Belqasem
|
|||
Muhend Belkacem
|
||||
Muḥend Belqasem
|
||||
Myungjae Won
|
||||
Netza López
|
||||
Nicholas Skinsacos
|
||||
Nihad
|
||||
Nihad Suljić
|
||||
|
@ -179,14 +144,12 @@ Peter deHaan
|
|||
Pierre Neter
|
||||
Pin-guang Chen
|
||||
Piotr Drąg
|
||||
Pontoon
|
||||
Quentí
|
||||
Quế Tùng
|
||||
Rachel Tublitz
|
||||
Radu Popescu
|
||||
Rhoslyn Prys
|
||||
RickieES
|
||||
Ricky Rosario
|
||||
Rimas Kudelis
|
||||
Rizky Ariestiyansyah
|
||||
Rob Powell
|
||||
|
@ -207,7 +170,6 @@ Sav22999
|
|||
Schieck :)
|
||||
Selim Şumlu
|
||||
Selyan Sliman Amiri
|
||||
Selyan Slimane Amiri
|
||||
Sidak Singh Aulakh
|
||||
Slimane Amiri
|
||||
Slimane Selyan AMIRI
|
||||
|
@ -225,11 +187,8 @@ Ton
|
|||
Top
|
||||
Tymur Faradzhev
|
||||
Uccen Marzuq
|
||||
Umegbewe
|
||||
Varghese Thomas
|
||||
Victor Bychek
|
||||
Victor Davila
|
||||
Victor Ibragimov
|
||||
Vimal Raghubir
|
||||
Vitaliy Krutko
|
||||
Weihang Lo
|
||||
|
@ -239,42 +198,29 @@ YFdyh000
|
|||
Yassine Aït-El-Mouden
|
||||
Yongmin H
|
||||
You-Wen Liang (Mark)
|
||||
Zhenya Tikhonov
|
||||
ZiriSut
|
||||
aaaaalbert
|
||||
abtin
|
||||
ada_okeke60
|
||||
aefgh39622
|
||||
alamanda
|
||||
albertdcastro
|
||||
alex_mayorga
|
||||
ali.malek.71
|
||||
ariestiyansyah
|
||||
avelper
|
||||
biobell2000
|
||||
bulut
|
||||
chilledfrogs
|
||||
clouserw-mozilla-owner
|
||||
dependabot[bot]
|
||||
dgadelha
|
||||
dskmori
|
||||
ehuggett
|
||||
elenatambriz
|
||||
eljuno
|
||||
emily-hou1
|
||||
erdem cobanoglu
|
||||
fcortess
|
||||
gautamkrishnar
|
||||
gmontagu
|
||||
goofy
|
||||
hello
|
||||
hi
|
||||
ivan.pompa
|
||||
jackyzy823
|
||||
jesferman1993
|
||||
jlG
|
||||
jnunezf96
|
||||
johngruen
|
||||
josotrix
|
||||
jspam
|
||||
julen
|
||||
|
@ -284,15 +230,12 @@ kumincir
|
|||
leo.toneff
|
||||
m4hdi.pdroid
|
||||
mail
|
||||
manuel padilla sanchez
|
||||
manxmensch
|
||||
marigalicer
|
||||
marsf
|
||||
merianosnikos
|
||||
minvs1
|
||||
mirzet.omerovic.1992
|
||||
mujeebcpy
|
||||
okyanusoz
|
||||
p.sanroman.bengoetxea
|
||||
passionforlife
|
||||
paul.trevor
|
||||
|
@ -306,12 +249,10 @@ robbp
|
|||
ruikunai
|
||||
savemore99.sm
|
||||
sergio
|
||||
shamanchic2011
|
||||
shikhar-scs
|
||||
siparon
|
||||
skystar-p
|
||||
stripTM
|
||||
sugabelly
|
||||
tatalmondmush
|
||||
tiagomoraismorgado
|
||||
timvisee
|
||||
|
@ -320,7 +261,6 @@ xcffl
|
|||
ybouhamam
|
||||
yoshimitsu002
|
||||
yusup.ramdani
|
||||
zankomhamad
|
||||
Μιχάλης
|
||||
Марко Костић (Marko Kostić)
|
||||
Ратко Вујановић
|
||||
|
|
44
Dockerfile
|
@ -1,60 +1,46 @@
|
|||
##
|
||||
# Send
|
||||
# Firefox Send - Mozilla
|
||||
#
|
||||
# License https://gitlab.com/timvisee/send/blob/master/LICENSE
|
||||
# License https://github.com/mozilla/send/blob/master/LICENSE
|
||||
##
|
||||
|
||||
|
||||
# Build project
|
||||
FROM node:16.13-alpine3.13 AS builder
|
||||
|
||||
RUN set -x \
|
||||
# Change node uid/gid
|
||||
&& apk --no-cache add shadow \
|
||||
&& groupmod -g 1001 node \
|
||||
&& usermod -u 1001 -g 1001 node
|
||||
|
||||
FROM node:12 AS builder
|
||||
RUN set -x \
|
||||
# Add user
|
||||
&& addgroup --gid 1000 app \
|
||||
&& addgroup --gid 10001 app \
|
||||
&& adduser --disabled-password \
|
||||
--gecos '' \
|
||||
--ingroup app \
|
||||
--gid 10001 \
|
||||
--home /app \
|
||||
--uid 1000 \
|
||||
--uid 10001 \
|
||||
app
|
||||
|
||||
COPY --chown=app:app . /app
|
||||
|
||||
USER app
|
||||
WORKDIR /app
|
||||
|
||||
RUN set -x \
|
||||
# Build
|
||||
&& PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm ci \
|
||||
&& npm run build
|
||||
|
||||
|
||||
# Main image
|
||||
FROM node:16.13-alpine3.13
|
||||
|
||||
RUN set -x \
|
||||
# Change node uid/gid
|
||||
&& apk --no-cache add shadow \
|
||||
&& groupmod -g 1001 node \
|
||||
&& usermod -u 1001 -g 1001 node
|
||||
|
||||
FROM node:12-slim
|
||||
RUN set -x \
|
||||
# Add user
|
||||
&& addgroup --gid 1000 app \
|
||||
&& addgroup --gid 10001 app \
|
||||
&& adduser --disabled-password \
|
||||
--gecos '' \
|
||||
--ingroup app \
|
||||
--gid 10001 \
|
||||
--home /app \
|
||||
--uid 1000 \
|
||||
--uid 10001 \
|
||||
app
|
||||
|
||||
RUN apt-get update && apt-get -y install \
|
||||
git-core \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
USER app
|
||||
WORKDIR /app
|
||||
|
||||
COPY --chown=app:app package*.json ./
|
||||
COPY --chown=app:app app app
|
||||
COPY --chown=app:app common common
|
||||
|
|
99
README.md
|
@ -1,59 +1,8 @@
|
|||
# [![Send](./assets/icon-64x64.png)](https://gitlab.com/timvisee/send/) Send
|
||||
# [![Firefox Send](./assets/icon.svg)](https://send.firefox.com/) Firefox Send
|
||||
|
||||
[![Build status on GitLab CI][gitlab-ci-master-badge]][gitlab-ci-link]
|
||||
[![Latest release][release-badge]][release-link]
|
||||
[![Docker image][docker-image-badge]][docker-image-link]
|
||||
[![Project license][repo-license-badge]](LICENSE)
|
||||
[![CircleCI](https://img.shields.io/circleci/project/github/mozilla/send.svg)](https://circleci.com/gh/mozilla/send)
|
||||
|
||||
[docker-image-badge]: https://img.shields.io/badge/docker-latest-blue.svg
|
||||
[docker-image-link]: https://gitlab.com/timvisee/send/container_registry/eyJuYW1lIjoidGltdmlzZWUvc2VuZCIsInRhZ3NfcGF0aCI6Ii90aW12aXNlZS9zZW5kL3JlZ2lzdHJ5L3JlcG9zaXRvcnkvMTQxODUwNC90YWdzP2Zvcm1hdD1qc29uIiwiaWQiOjE0MTg1MDQsImNsZWFudXBfcG9saWN5X3N0YXJ0ZWRfYXQiOm51bGx9
|
||||
[gitlab-ci-link]: https://gitlab.com/timvisee/send/pipelines
|
||||
[gitlab-ci-master-badge]: https://gitlab.com/timvisee/send/badges/master/pipeline.svg
|
||||
[release-badge]: https://img.shields.io/github/v/tag/timvisee/send
|
||||
[release-link]: https://gitlab.com/timvisee/send/-/tags
|
||||
[repo-license-badge]: https://img.shields.io/github/license/timvisee/send.svg
|
||||
|
||||
A fork of Mozilla's [Firefox Send][mozilla-send].
|
||||
Mozilla discontinued Send, this fork is a community effort to keep the project
|
||||
up-to-date and alive.
|
||||
|
||||
- Forked [at][fork-commit] Mozilla's last publicly hosted version
|
||||
- _Mozilla_ & _Firefox_ branding [is][remove-branding-pr] removed so you can legally self-host
|
||||
- Kept compatible with [`ffsend`][ffsend] (CLI for Send)
|
||||
- Dependencies have been updated
|
||||
- Mozilla's [changes][mozilla-patches] since the fork have been selectively [merged][mozilla-patches-pr]
|
||||
- Mozilla's experimental report feature, download tokens, trust warnings and FxA changes are not included
|
||||
|
||||
Find an up-to-date Docker image here: [docs/docker.md](docs/docker.md)
|
||||
|
||||
The original project by Mozilla can be found [here][mozilla-send].
|
||||
The [`mozilla-master`][branch-mozilla-master] branch holds the `master` branch
|
||||
as left by Mozilla.
|
||||
The [`send-v3`][branch-send-v3] branch holds the commit tree of Mozilla's last
|
||||
publicly hosted version, which this fork is based on.
|
||||
The [`send-v4`][branch-send-v4] branch holds the commit tree of Mozilla's last
|
||||
experimental version which was still a work in progress (featuring file
|
||||
reporting, download tokens, trust warnings and FxA changes), this has
|
||||
selectively been merged into this fork.
|
||||
Please consider to [donate][donate] to allow me to keep working on this.
|
||||
|
||||
Thanks [Mozilla][mozilla] for building this amazing tool!
|
||||
|
||||
[branch-mozilla-master]: https://gitlab.com/timvisee/send/-/tree/mozilla-master
|
||||
[branch-send-v3]: https://gitlab.com/timvisee/send/-/tree/send-v3
|
||||
[branch-send-v4]: https://gitlab.com/timvisee/send/-/tree/send-v4
|
||||
[donate]: https://timvisee.com/donate
|
||||
[ffsend]: https://github.com/timvisee/ffsend
|
||||
[fork-commit]: https://gitlab.com/timvisee/send/-/commit/3e9be676413a6e1baaf6a354c180e91899d10bec
|
||||
[mozilla-patches-pr]: https://gitlab.com/timvisee/send/-/merge_requests/3
|
||||
[mozilla-patches]: https://gitlab.com/timvisee/send/-/compare/3e9be676413a6e1baaf6a354c180e91899d10bec...mozilla-master
|
||||
[mozilla-send]: https://github.com/mozilla/send
|
||||
[mozilla]: https://mozilla.org/
|
||||
[remove-branding-pr]: https://gitlab.com/timvisee/send/-/merge_requests/2
|
||||
|
||||
---
|
||||
|
||||
**Docs:** [FAQ](docs/faq.md), [Encryption](docs/encryption.md), [Build](docs/build.md), [Docker](docs/docker.md), [More](docs/)
|
||||
**Docs:** [FAQ](docs/faq.md), [Encryption](docs/encryption.md), [Build](docs/build.md), [Docker](docs/docker.md), [Metrics](docs/metrics.md), [More](docs/)
|
||||
|
||||
---
|
||||
|
||||
|
@ -66,9 +15,9 @@ Thanks [Mozilla][mozilla] for building this amazing tool!
|
|||
* [Configuration](#configuration)
|
||||
* [Localization](#localization)
|
||||
* [Contributing](#contributing)
|
||||
* [Instances](#instances)
|
||||
* [Testing](#testing)
|
||||
* [Deployment](#deployment)
|
||||
* [Clients](#clients)
|
||||
* [Android](#android)
|
||||
* [License](#license)
|
||||
|
||||
---
|
||||
|
@ -81,7 +30,7 @@ A file sharing experiment which allows you to send encrypted files to other user
|
|||
|
||||
## Requirements
|
||||
|
||||
- [Node.js 16.x](https://nodejs.org/)
|
||||
- [Node.js 12.x](https://nodejs.org/)
|
||||
- [Redis server](https://redis.io/) (optional for development)
|
||||
- [AWS S3](https://aws.amazon.com/s3/) or compatible service (optional)
|
||||
|
||||
|
@ -121,45 +70,37 @@ The server is configured with environment variables. See [server/config.js](serv
|
|||
|
||||
## Localization
|
||||
|
||||
See: [docs/localization.md](docs/localization.md)
|
||||
Firefox Send localization is managed via [Pontoon](https://pontoon.mozilla.org/projects/test-pilot-firefox-send/), not direct pull requests to the repository. If you want to fix a typo, add a new language, or simply know more about localization, please get in touch with the [existing localization team](https://pontoon.mozilla.org/teams/) for your language or Mozilla’s [l10n-drivers](https://wiki.mozilla.org/L10n:Mozilla_Team#Mozilla_Corporation) for guidance.
|
||||
|
||||
see also [docs/localization.md](docs/localization.md)
|
||||
|
||||
---
|
||||
|
||||
## Contributing
|
||||
|
||||
Pull requests are always welcome! Feel free to check out the list of "good first issues" (to be implemented).
|
||||
Pull requests are always welcome! Feel free to check out the list of ["good first issues"](https://github.com/mozilla/send/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22).
|
||||
|
||||
---
|
||||
|
||||
## Instances
|
||||
## Testing
|
||||
|
||||
Find a list of public instances here: https://github.com/timvisee/send-instances/
|
||||
| ENVIRONMENT | URL
|
||||
|-------------|-----
|
||||
| Production | <https://send.firefox.com/>
|
||||
| Stage | <https://stage.send.nonprod.cloudops.mozgcp.net/>
|
||||
| Development | <https://send2.dev.lcip.org/>
|
||||
|
||||
---
|
||||
|
||||
## Deployment
|
||||
|
||||
See: [docs/deployment.md](docs/deployment.md)
|
||||
|
||||
Docker quickstart: [docs/docker.md](docs/docker.md)
|
||||
|
||||
AWS example using Ubuntu Server `20.04`: [docs/AWS.md](docs/AWS.md)
|
||||
see also [docs/deployment.md](docs/deployment.md)
|
||||
|
||||
---
|
||||
|
||||
## Clients
|
||||
## Android
|
||||
|
||||
- Web: _this repository_
|
||||
- Command-line: [`ffsend`](https://github.com/timvisee/ffsend)
|
||||
- Android: _see [Android](#android) section_
|
||||
- Thunderbird: [FileLink provider for Send](https://addons.thunderbird.net/thunderbird/addon/filelink-provider-for-send/)
|
||||
|
||||
#### Android
|
||||
|
||||
The android implementation is contained in the `android` directory,
|
||||
and can be viewed locally for easy testing and editing by running `ANDROID=1 npm
|
||||
start` and then visiting <http://localhost:8080>. CSS and image files are
|
||||
located in the `android/app/src/main/assets` directory.
|
||||
The android implementation is contained in the `android` directory, and can be viewed locally for easy testing and editing by running `ANDROID=1 npm start` and then visiting <http://localhost:8080>. CSS and image files are located in the `android/app/src/main/assets` directory.
|
||||
|
||||
---
|
||||
|
||||
|
@ -167,6 +108,4 @@ located in the `android/app/src/main/assets` directory.
|
|||
|
||||
[Mozilla Public License Version 2.0](LICENSE)
|
||||
|
||||
[qrcode.js](https://github.com/kazuhikoarase/qrcode-generator) licensed under MIT
|
||||
|
||||
---
|
||||
|
|
|
@ -4,6 +4,7 @@ import html from 'choo/html';
|
|||
import * as Sentry from '@sentry/browser';
|
||||
|
||||
import { setApiUrlPrefix, getConstants } from '../app/api';
|
||||
import metrics from '../app/metrics';
|
||||
//import assets from '../common/assets';
|
||||
import Archive from '../app/archive';
|
||||
import Header from '../app/ui/header';
|
||||
|
@ -68,24 +69,20 @@ function body(main) {
|
|||
(async function start() {
|
||||
const translate = await getTranslator('en-US');
|
||||
setTranslate(translate);
|
||||
const { LIMITS, WEB_UI, DEFAULTS } = await getConstants();
|
||||
const { LIMITS, DEFAULTS } = await getConstants();
|
||||
app.use(state => {
|
||||
state.LIMITS = LIMITS;
|
||||
state.WEB_UI = WEB_UI;
|
||||
state.DEFAULTS = DEFAULTS;
|
||||
state.translate = translate;
|
||||
state.capabilities = {
|
||||
account: true
|
||||
}; //TODO
|
||||
state.archive = new Archive(
|
||||
[],
|
||||
DEFAULTS.EXPIRE_SECONDS,
|
||||
DEFAULTS.DOWNLOADS
|
||||
);
|
||||
state.archive = new Archive([], DEFAULTS.EXPIRE_SECONDS);
|
||||
state.storage = storage;
|
||||
state.user = new User(storage, LIMITS);
|
||||
state.sentry = Sentry;
|
||||
});
|
||||
app.use(metrics);
|
||||
app.route('/', body(home));
|
||||
app.route('/upload', upload);
|
||||
app.route('/share/:id', share);
|
||||
|
|
96
app/api.js
|
@ -130,10 +130,10 @@ export async function metadata(id, keychain) {
|
|||
return {
|
||||
size: meta.size,
|
||||
ttl: data.ttl,
|
||||
iv: meta.iv,
|
||||
name: meta.name,
|
||||
type: meta.type,
|
||||
manifest: meta.manifest
|
||||
manifest: meta.manifest,
|
||||
flagged: data.flagged
|
||||
};
|
||||
}
|
||||
throw new Error(result.response.status);
|
||||
|
@ -292,20 +292,13 @@ export function uploadWs(
|
|||
|
||||
////////////////////////
|
||||
|
||||
async function downloadS(id, keychain, signal) {
|
||||
const auth = await keychain.authHeader();
|
||||
|
||||
async function _downloadStream(id, dlToken, signal) {
|
||||
const response = await fetch(getApiUrl(`/api/download/${id}`), {
|
||||
signal: signal,
|
||||
method: 'GET',
|
||||
headers: { Authorization: auth }
|
||||
headers: { Authorization: `Bearer ${dlToken}` }
|
||||
});
|
||||
|
||||
const authHeader = response.headers.get('WWW-Authenticate');
|
||||
if (authHeader) {
|
||||
keychain.nonce = parseNonce(authHeader);
|
||||
}
|
||||
|
||||
if (response.status !== 200) {
|
||||
throw new Error(response.status);
|
||||
}
|
||||
|
@ -313,13 +306,13 @@ async function downloadS(id, keychain, signal) {
|
|||
return response.body;
|
||||
}
|
||||
|
||||
async function tryDownloadStream(id, keychain, signal, tries = 2) {
|
||||
async function tryDownloadStream(id, dlToken, signal, tries = 2) {
|
||||
try {
|
||||
const result = await downloadS(id, keychain, signal);
|
||||
const result = await _downloadStream(id, dlToken, signal);
|
||||
return result;
|
||||
} catch (e) {
|
||||
if (e.message === '401' && --tries > 0) {
|
||||
return tryDownloadStream(id, keychain, signal, tries);
|
||||
return tryDownloadStream(id, dlToken, signal, tries);
|
||||
}
|
||||
if (e.name === 'AbortError') {
|
||||
throw new Error('0');
|
||||
|
@ -328,21 +321,20 @@ async function tryDownloadStream(id, keychain, signal, tries = 2) {
|
|||
}
|
||||
}
|
||||
|
||||
export function downloadStream(id, keychain) {
|
||||
export function downloadStream(id, dlToken) {
|
||||
const controller = new AbortController();
|
||||
function cancel() {
|
||||
controller.abort();
|
||||
}
|
||||
return {
|
||||
cancel,
|
||||
result: tryDownloadStream(id, keychain, controller.signal)
|
||||
result: tryDownloadStream(id, dlToken, controller.signal)
|
||||
};
|
||||
}
|
||||
|
||||
//////////////////
|
||||
|
||||
async function download(id, keychain, onprogress, canceller) {
|
||||
const auth = await keychain.authHeader();
|
||||
async function download(id, dlToken, onprogress, canceller) {
|
||||
const xhr = new XMLHttpRequest();
|
||||
canceller.oncancel = function() {
|
||||
xhr.abort();
|
||||
|
@ -350,10 +342,6 @@ async function download(id, keychain, onprogress, canceller) {
|
|||
return new Promise(function(resolve, reject) {
|
||||
xhr.addEventListener('loadend', function() {
|
||||
canceller.oncancel = function() {};
|
||||
const authHeader = xhr.getResponseHeader('WWW-Authenticate');
|
||||
if (authHeader) {
|
||||
keychain.nonce = parseNonce(authHeader);
|
||||
}
|
||||
if (xhr.status !== 200) {
|
||||
return reject(new Error(xhr.status));
|
||||
}
|
||||
|
@ -368,26 +356,26 @@ async function download(id, keychain, onprogress, canceller) {
|
|||
}
|
||||
});
|
||||
xhr.open('get', getApiUrl(`/api/download/blob/${id}`));
|
||||
xhr.setRequestHeader('Authorization', auth);
|
||||
xhr.setRequestHeader('Authorization', `Bearer ${dlToken}`);
|
||||
xhr.responseType = 'blob';
|
||||
xhr.send();
|
||||
onprogress(0);
|
||||
});
|
||||
}
|
||||
|
||||
async function tryDownload(id, keychain, onprogress, canceller, tries = 2) {
|
||||
async function tryDownload(id, dlToken, onprogress, canceller, tries = 2) {
|
||||
try {
|
||||
const result = await download(id, keychain, onprogress, canceller);
|
||||
const result = await download(id, dlToken, onprogress, canceller);
|
||||
return result;
|
||||
} catch (e) {
|
||||
if (e.message === '401' && --tries > 0) {
|
||||
return tryDownload(id, keychain, onprogress, canceller, tries);
|
||||
return tryDownload(id, dlToken, onprogress, canceller, tries);
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
export function downloadFile(id, keychain, onprogress) {
|
||||
export function downloadFile(id, dlToken, onprogress) {
|
||||
const canceller = {
|
||||
oncancel: function() {} // download() sets this
|
||||
};
|
||||
|
@ -396,7 +384,7 @@ export function downloadFile(id, keychain, onprogress) {
|
|||
}
|
||||
return {
|
||||
cancel,
|
||||
result: tryDownload(id, keychain, onprogress, canceller)
|
||||
result: tryDownload(id, dlToken, onprogress, canceller)
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -420,6 +408,17 @@ export async function setFileList(bearerToken, kid, data) {
|
|||
return response.ok;
|
||||
}
|
||||
|
||||
export function sendMetrics(blob) {
|
||||
if (!navigator.sendBeacon) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
navigator.sendBeacon(getApiUrl('/api/metrics'), blob);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
|
||||
export async function getConstants() {
|
||||
const response = await fetch(getApiUrl('/config'));
|
||||
|
||||
|
@ -430,3 +429,44 @@ export async function getConstants() {
|
|||
|
||||
throw new Error(response.status);
|
||||
}
|
||||
|
||||
export async function reportLink(id, keychain, reason) {
|
||||
const result = await fetchWithAuthAndRetry(
|
||||
getApiUrl(`/api/report/${id}`),
|
||||
{
|
||||
method: 'POST',
|
||||
body: JSON.stringify({ reason })
|
||||
},
|
||||
keychain
|
||||
);
|
||||
|
||||
if (result.ok) {
|
||||
return;
|
||||
}
|
||||
|
||||
throw new Error(result.response.status);
|
||||
}
|
||||
|
||||
export async function getDownloadToken(id, keychain) {
|
||||
const result = await fetchWithAuthAndRetry(
|
||||
getApiUrl(`/api/download/token/${id}`),
|
||||
{
|
||||
method: 'GET'
|
||||
},
|
||||
keychain
|
||||
);
|
||||
|
||||
if (result.ok) {
|
||||
return (await result.response.json()).token;
|
||||
}
|
||||
throw new Error(result.response.status);
|
||||
}
|
||||
|
||||
export async function downloadDone(id, dlToken) {
|
||||
const headers = new Headers({ Authorization: `Bearer ${dlToken}` });
|
||||
const response = await fetch(getApiUrl(`/api/download/done/${id}`), {
|
||||
headers,
|
||||
method: 'POST'
|
||||
});
|
||||
return response.ok;
|
||||
}
|
||||
|
|
|
@ -14,12 +14,11 @@ function isDupe(newFile, array) {
|
|||
}
|
||||
|
||||
export default class Archive {
|
||||
constructor(files = [], defaultTimeLimit = 86400, defaultDownloadLimit = 1) {
|
||||
constructor(files = [], defaultTimeLimit = 86400) {
|
||||
this.files = Array.from(files);
|
||||
this.defaultTimeLimit = defaultTimeLimit;
|
||||
this.defaultDownloadLimit = defaultDownloadLimit;
|
||||
this.timeLimit = defaultTimeLimit;
|
||||
this.dlimit = defaultDownloadLimit;
|
||||
this.dlimit = 1;
|
||||
this.password = null;
|
||||
}
|
||||
|
||||
|
@ -77,7 +76,7 @@ export default class Archive {
|
|||
|
||||
clear() {
|
||||
this.files = [];
|
||||
this.dlimit = this.defaultDownloadLimit;
|
||||
this.dlimit = 1;
|
||||
this.timeLimit = this.defaultTimeLimit;
|
||||
this.password = null;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import FileReceiver from './fileReceiver';
|
||||
import FileSender from './fileSender';
|
||||
import copyDialog from './ui/copyDialog';
|
||||
import faviconProgressbar from './ui/faviconProgressbar';
|
||||
import FileReceiver from './fileReceiver';
|
||||
import { copyToClipboard, delay, openLinksInNewTab, percent } from './utils';
|
||||
import * as metrics from './metrics';
|
||||
import { bytes, locale } from './utils';
|
||||
import okDialog from './ui/okDialog';
|
||||
import copyDialog from './ui/copyDialog';
|
||||
import shareDialog from './ui/shareDialog';
|
||||
import signupDialog from './ui/signupDialog';
|
||||
import surveyDialog from './ui/surveyDialog';
|
||||
import { bytes, locale } from './utils';
|
||||
import { copyToClipboard, delay, openLinksInNewTab, percent } from './utils';
|
||||
|
||||
export default function(state, emitter) {
|
||||
let lastRender = 0;
|
||||
|
@ -29,7 +29,6 @@ export default function(state, emitter) {
|
|||
if (updateTitle) {
|
||||
emitter.emit('DOMTitleChange', percent(state.transfer.progressRatio));
|
||||
}
|
||||
faviconProgressbar.updateFavicon(state.transfer.progressRatio);
|
||||
render();
|
||||
}
|
||||
|
||||
|
@ -37,8 +36,7 @@ export default function(state, emitter) {
|
|||
document.addEventListener('blur', () => (updateTitle = true));
|
||||
document.addEventListener('focus', () => {
|
||||
updateTitle = false;
|
||||
emitter.emit('DOMTitleChange', 'Send');
|
||||
faviconProgressbar.updateFavicon(0);
|
||||
emitter.emit('DOMTitleChange', 'Firefox Send');
|
||||
});
|
||||
checkFiles();
|
||||
});
|
||||
|
@ -53,6 +51,7 @@ export default function(state, emitter) {
|
|||
|
||||
emitter.on('logout', async () => {
|
||||
await state.user.logout();
|
||||
metrics.loggedOut({ trigger: 'button' });
|
||||
emitter.emit('pushState', '/');
|
||||
});
|
||||
|
||||
|
@ -66,6 +65,14 @@ export default function(state, emitter) {
|
|||
|
||||
emitter.on('delete', async ownedFile => {
|
||||
try {
|
||||
metrics.deletedUpload({
|
||||
size: ownedFile.size,
|
||||
time: ownedFile.time,
|
||||
speed: ownedFile.speed,
|
||||
type: ownedFile.type,
|
||||
ttl: ownedFile.expiresAt - Date.now(),
|
||||
location
|
||||
});
|
||||
state.storage.remove(ownedFile.id);
|
||||
await ownedFile.del();
|
||||
} catch (e) {
|
||||
|
@ -76,7 +83,6 @@ export default function(state, emitter) {
|
|||
|
||||
emitter.on('cancel', () => {
|
||||
state.transfer.cancel();
|
||||
faviconProgressbar.updateFavicon(0);
|
||||
});
|
||||
|
||||
emitter.on('addFiles', async ({ files }) => {
|
||||
|
@ -91,6 +97,9 @@ export default function(state, emitter) {
|
|||
state.LIMITS.MAX_FILES_PER_ARCHIVE
|
||||
);
|
||||
} catch (e) {
|
||||
if (e.message === 'fileTooBig' && maxSize < state.LIMITS.MAX_FILE_SIZE) {
|
||||
return emitter.emit('signup-cta', 'size');
|
||||
}
|
||||
state.modal = okDialog(
|
||||
state.translate(e.message, {
|
||||
size: bytes(maxSize),
|
||||
|
@ -110,7 +119,7 @@ export default function(state, emitter) {
|
|||
source: query.utm_source,
|
||||
term: query.utm_term
|
||||
});
|
||||
state.modal = signupDialog();
|
||||
state.modal = signupDialog(source);
|
||||
render();
|
||||
});
|
||||
|
||||
|
@ -146,10 +155,12 @@ export default function(state, emitter) {
|
|||
|
||||
const links = openLinksInNewTab();
|
||||
await delay(200);
|
||||
const start = Date.now();
|
||||
try {
|
||||
const ownedFile = await sender.upload(archive, state.user.bearerToken);
|
||||
state.storage.totalUploads += 1;
|
||||
faviconProgressbar.updateFavicon(0);
|
||||
const duration = Date.now() - start;
|
||||
metrics.completedUpload(archive, duration);
|
||||
|
||||
state.storage.addFile(ownedFile);
|
||||
// TODO integrate password into /upload request
|
||||
|
@ -165,6 +176,7 @@ export default function(state, emitter) {
|
|||
} catch (err) {
|
||||
if (err.message === '0') {
|
||||
//cancelled. do nothing
|
||||
metrics.cancelledUpload(archive, err.duration);
|
||||
render();
|
||||
} else if (err.message === '401') {
|
||||
const refreshed = await state.user.refresh();
|
||||
|
@ -180,6 +192,7 @@ export default function(state, emitter) {
|
|||
scope.setExtra('size', err.size);
|
||||
state.sentry.captureException(err);
|
||||
});
|
||||
metrics.stoppedUpload(archive, err.duration);
|
||||
emitter.emit('pushState', '/error');
|
||||
}
|
||||
} finally {
|
||||
|
@ -219,9 +232,7 @@ export default function(state, emitter) {
|
|||
} catch (e) {
|
||||
if (e.message === '401' || e.message === '404') {
|
||||
file.password = null;
|
||||
if (!file.requiresPassword) {
|
||||
return emitter.emit('pushState', '/404');
|
||||
}
|
||||
file.dead = e.message === '404';
|
||||
} else {
|
||||
console.error(e);
|
||||
return emitter.emit('pushState', '/error');
|
||||
|
@ -231,19 +242,27 @@ export default function(state, emitter) {
|
|||
render();
|
||||
});
|
||||
|
||||
emitter.on('download', async () => {
|
||||
emitter.on('download', async file => {
|
||||
state.transfer.on('progress', updateProgress);
|
||||
state.transfer.on('decrypting', render);
|
||||
state.transfer.on('complete', render);
|
||||
const links = openLinksInNewTab();
|
||||
const size = file.size;
|
||||
const start = Date.now();
|
||||
try {
|
||||
const dl = state.transfer.download({
|
||||
stream: state.capabilities.streamDownload
|
||||
stream: state.capabilities.streamDownload,
|
||||
storage: state.storage
|
||||
});
|
||||
render();
|
||||
await dl;
|
||||
state.storage.totalDownloads += 1;
|
||||
faviconProgressbar.updateFavicon(0);
|
||||
const duration = Date.now() - start;
|
||||
metrics.completedDownload({
|
||||
size,
|
||||
duration,
|
||||
password_protected: file.requiresPassword
|
||||
});
|
||||
} catch (err) {
|
||||
if (err.message === '0') {
|
||||
// download cancelled
|
||||
|
@ -252,7 +271,9 @@ export default function(state, emitter) {
|
|||
} else {
|
||||
// eslint-disable-next-line no-console
|
||||
state.transfer = null;
|
||||
const location = err.message === '404' ? '/404' : '/error';
|
||||
const location = ['404', '403'].includes(err.message)
|
||||
? '/404'
|
||||
: '/error';
|
||||
if (location === '/error') {
|
||||
state.sentry.withScope(scope => {
|
||||
scope.setExtra('duration', err.duration);
|
||||
|
@ -260,6 +281,12 @@ export default function(state, emitter) {
|
|||
scope.setExtra('progress', err.progress);
|
||||
state.sentry.captureException(err);
|
||||
});
|
||||
const duration = Date.now() - start;
|
||||
metrics.stoppedDownload({
|
||||
size,
|
||||
duration,
|
||||
password_protected: file.requiresPassword
|
||||
});
|
||||
}
|
||||
emitter.emit('pushState', location);
|
||||
}
|
||||
|
@ -270,6 +297,7 @@ export default function(state, emitter) {
|
|||
|
||||
emitter.on('copy', ({ url }) => {
|
||||
copyToClipboard(url);
|
||||
// metrics.copiedLink({ location });
|
||||
});
|
||||
|
||||
emitter.on('closeModal', () => {
|
||||
|
@ -288,6 +316,21 @@ export default function(state, emitter) {
|
|||
render();
|
||||
});
|
||||
|
||||
emitter.on('report', async ({ reason }) => {
|
||||
try {
|
||||
const receiver = state.transfer || new FileReceiver(state.fileInfo);
|
||||
await receiver.reportLink(reason);
|
||||
render();
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
if (err.message === '404') {
|
||||
state.fileInfo = { reported: true };
|
||||
return render();
|
||||
}
|
||||
emitter.emit('pushState', '/error');
|
||||
}
|
||||
});
|
||||
|
||||
setInterval(() => {
|
||||
// poll for updates of the upload list
|
||||
if (!state.modal && state.route === '/') {
|
||||
|
|
|
@ -0,0 +1,266 @@
|
|||
const LOOKUP = Int32Array.from([
|
||||
0x00000000,
|
||||
0x77073096,
|
||||
0xee0e612c,
|
||||
0x990951ba,
|
||||
0x076dc419,
|
||||
0x706af48f,
|
||||
0xe963a535,
|
||||
0x9e6495a3,
|
||||
0x0edb8832,
|
||||
0x79dcb8a4,
|
||||
0xe0d5e91e,
|
||||
0x97d2d988,
|
||||
0x09b64c2b,
|
||||
0x7eb17cbd,
|
||||
0xe7b82d07,
|
||||
0x90bf1d91,
|
||||
0x1db71064,
|
||||
0x6ab020f2,
|
||||
0xf3b97148,
|
||||
0x84be41de,
|
||||
0x1adad47d,
|
||||
0x6ddde4eb,
|
||||
0xf4d4b551,
|
||||
0x83d385c7,
|
||||
0x136c9856,
|
||||
0x646ba8c0,
|
||||
0xfd62f97a,
|
||||
0x8a65c9ec,
|
||||
0x14015c4f,
|
||||
0x63066cd9,
|
||||
0xfa0f3d63,
|
||||
0x8d080df5,
|
||||
0x3b6e20c8,
|
||||
0x4c69105e,
|
||||
0xd56041e4,
|
||||
0xa2677172,
|
||||
0x3c03e4d1,
|
||||
0x4b04d447,
|
||||
0xd20d85fd,
|
||||
0xa50ab56b,
|
||||
0x35b5a8fa,
|
||||
0x42b2986c,
|
||||
0xdbbbc9d6,
|
||||
0xacbcf940,
|
||||
0x32d86ce3,
|
||||
0x45df5c75,
|
||||
0xdcd60dcf,
|
||||
0xabd13d59,
|
||||
0x26d930ac,
|
||||
0x51de003a,
|
||||
0xc8d75180,
|
||||
0xbfd06116,
|
||||
0x21b4f4b5,
|
||||
0x56b3c423,
|
||||
0xcfba9599,
|
||||
0xb8bda50f,
|
||||
0x2802b89e,
|
||||
0x5f058808,
|
||||
0xc60cd9b2,
|
||||
0xb10be924,
|
||||
0x2f6f7c87,
|
||||
0x58684c11,
|
||||
0xc1611dab,
|
||||
0xb6662d3d,
|
||||
0x76dc4190,
|
||||
0x01db7106,
|
||||
0x98d220bc,
|
||||
0xefd5102a,
|
||||
0x71b18589,
|
||||
0x06b6b51f,
|
||||
0x9fbfe4a5,
|
||||
0xe8b8d433,
|
||||
0x7807c9a2,
|
||||
0x0f00f934,
|
||||
0x9609a88e,
|
||||
0xe10e9818,
|
||||
0x7f6a0dbb,
|
||||
0x086d3d2d,
|
||||
0x91646c97,
|
||||
0xe6635c01,
|
||||
0x6b6b51f4,
|
||||
0x1c6c6162,
|
||||
0x856530d8,
|
||||
0xf262004e,
|
||||
0x6c0695ed,
|
||||
0x1b01a57b,
|
||||
0x8208f4c1,
|
||||
0xf50fc457,
|
||||
0x65b0d9c6,
|
||||
0x12b7e950,
|
||||
0x8bbeb8ea,
|
||||
0xfcb9887c,
|
||||
0x62dd1ddf,
|
||||
0x15da2d49,
|
||||
0x8cd37cf3,
|
||||
0xfbd44c65,
|
||||
0x4db26158,
|
||||
0x3ab551ce,
|
||||
0xa3bc0074,
|
||||
0xd4bb30e2,
|
||||
0x4adfa541,
|
||||
0x3dd895d7,
|
||||
0xa4d1c46d,
|
||||
0xd3d6f4fb,
|
||||
0x4369e96a,
|
||||
0x346ed9fc,
|
||||
0xad678846,
|
||||
0xda60b8d0,
|
||||
0x44042d73,
|
||||
0x33031de5,
|
||||
0xaa0a4c5f,
|
||||
0xdd0d7cc9,
|
||||
0x5005713c,
|
||||
0x270241aa,
|
||||
0xbe0b1010,
|
||||
0xc90c2086,
|
||||
0x5768b525,
|
||||
0x206f85b3,
|
||||
0xb966d409,
|
||||
0xce61e49f,
|
||||
0x5edef90e,
|
||||
0x29d9c998,
|
||||
0xb0d09822,
|
||||
0xc7d7a8b4,
|
||||
0x59b33d17,
|
||||
0x2eb40d81,
|
||||
0xb7bd5c3b,
|
||||
0xc0ba6cad,
|
||||
0xedb88320,
|
||||
0x9abfb3b6,
|
||||
0x03b6e20c,
|
||||
0x74b1d29a,
|
||||
0xead54739,
|
||||
0x9dd277af,
|
||||
0x04db2615,
|
||||
0x73dc1683,
|
||||
0xe3630b12,
|
||||
0x94643b84,
|
||||
0x0d6d6a3e,
|
||||
0x7a6a5aa8,
|
||||
0xe40ecf0b,
|
||||
0x9309ff9d,
|
||||
0x0a00ae27,
|
||||
0x7d079eb1,
|
||||
0xf00f9344,
|
||||
0x8708a3d2,
|
||||
0x1e01f268,
|
||||
0x6906c2fe,
|
||||
0xf762575d,
|
||||
0x806567cb,
|
||||
0x196c3671,
|
||||
0x6e6b06e7,
|
||||
0xfed41b76,
|
||||
0x89d32be0,
|
||||
0x10da7a5a,
|
||||
0x67dd4acc,
|
||||
0xf9b9df6f,
|
||||
0x8ebeeff9,
|
||||
0x17b7be43,
|
||||
0x60b08ed5,
|
||||
0xd6d6a3e8,
|
||||
0xa1d1937e,
|
||||
0x38d8c2c4,
|
||||
0x4fdff252,
|
||||
0xd1bb67f1,
|
||||
0xa6bc5767,
|
||||
0x3fb506dd,
|
||||
0x48b2364b,
|
||||
0xd80d2bda,
|
||||
0xaf0a1b4c,
|
||||
0x36034af6,
|
||||
0x41047a60,
|
||||
0xdf60efc3,
|
||||
0xa867df55,
|
||||
0x316e8eef,
|
||||
0x4669be79,
|
||||
0xcb61b38c,
|
||||
0xbc66831a,
|
||||
0x256fd2a0,
|
||||
0x5268e236,
|
||||
0xcc0c7795,
|
||||
0xbb0b4703,
|
||||
0x220216b9,
|
||||
0x5505262f,
|
||||
0xc5ba3bbe,
|
||||
0xb2bd0b28,
|
||||
0x2bb45a92,
|
||||
0x5cb36a04,
|
||||
0xc2d7ffa7,
|
||||
0xb5d0cf31,
|
||||
0x2cd99e8b,
|
||||
0x5bdeae1d,
|
||||
0x9b64c2b0,
|
||||
0xec63f226,
|
||||
0x756aa39c,
|
||||
0x026d930a,
|
||||
0x9c0906a9,
|
||||
0xeb0e363f,
|
||||
0x72076785,
|
||||
0x05005713,
|
||||
0x95bf4a82,
|
||||
0xe2b87a14,
|
||||
0x7bb12bae,
|
||||
0x0cb61b38,
|
||||
0x92d28e9b,
|
||||
0xe5d5be0d,
|
||||
0x7cdcefb7,
|
||||
0x0bdbdf21,
|
||||
0x86d3d2d4,
|
||||
0xf1d4e242,
|
||||
0x68ddb3f8,
|
||||
0x1fda836e,
|
||||
0x81be16cd,
|
||||
0xf6b9265b,
|
||||
0x6fb077e1,
|
||||
0x18b74777,
|
||||
0x88085ae6,
|
||||
0xff0f6a70,
|
||||
0x66063bca,
|
||||
0x11010b5c,
|
||||
0x8f659eff,
|
||||
0xf862ae69,
|
||||
0x616bffd3,
|
||||
0x166ccf45,
|
||||
0xa00ae278,
|
||||
0xd70dd2ee,
|
||||
0x4e048354,
|
||||
0x3903b3c2,
|
||||
0xa7672661,
|
||||
0xd06016f7,
|
||||
0x4969474d,
|
||||
0x3e6e77db,
|
||||
0xaed16a4a,
|
||||
0xd9d65adc,
|
||||
0x40df0b66,
|
||||
0x37d83bf0,
|
||||
0xa9bcae53,
|
||||
0xdebb9ec5,
|
||||
0x47b2cf7f,
|
||||
0x30b5ffe9,
|
||||
0xbdbdf21c,
|
||||
0xcabac28a,
|
||||
0x53b39330,
|
||||
0x24b4a3a6,
|
||||
0xbad03605,
|
||||
0xcdd70693,
|
||||
0x54de5729,
|
||||
0x23d967bf,
|
||||
0xb3667a2e,
|
||||
0xc4614ab8,
|
||||
0x5d681b02,
|
||||
0x2a6f2b94,
|
||||
0xb40bbe37,
|
||||
0xc30c8ea1,
|
||||
0x5a05df1b,
|
||||
0x2d02ef8d
|
||||
]);
|
||||
|
||||
module.exports = function crc32(uint8Array, previous) {
|
||||
let crc = previous === 0 ? 0 : ~~previous ^ -1;
|
||||
for (let i = 0; i < uint8Array.byteLength; i++) {
|
||||
crc = LOOKUP[(crc ^ uint8Array[i]) & 0xff] ^ (crc >>> 8);
|
||||
}
|
||||
return (crc ^ -1) >>> 0;
|
||||
};
|
44
app/ece.js
|
@ -1,5 +1,5 @@
|
|||
import 'buffer';
|
||||
import { transformStream } from './streams';
|
||||
import { concat } from './utils';
|
||||
|
||||
const NONCE_LENGTH = 12;
|
||||
const TAG_LENGTH = 16;
|
||||
|
@ -81,19 +81,18 @@ class ECETransformer {
|
|||
)
|
||||
);
|
||||
|
||||
return Buffer.from(base.slice(0, NONCE_LENGTH));
|
||||
return base.slice(0, NONCE_LENGTH);
|
||||
}
|
||||
|
||||
generateNonce(seq) {
|
||||
if (seq > 0xffffffff) {
|
||||
throw new Error('record sequence number exceeds limit');
|
||||
}
|
||||
const nonce = Buffer.from(this.nonceBase);
|
||||
const m = nonce.readUIntBE(nonce.length - 4, 4);
|
||||
const nonce = new DataView(this.nonceBase.slice());
|
||||
const m = nonce.getUint32(nonce.byteLength - 4);
|
||||
const xor = (m ^ seq) >>> 0; //forces unsigned int xor
|
||||
nonce.writeUIntBE(xor, nonce.length - 4, 4);
|
||||
|
||||
return nonce;
|
||||
nonce.setUint32(nonce.byteLength - 4, xor);
|
||||
return new Uint8Array(nonce.buffer);
|
||||
}
|
||||
|
||||
pad(data, isLast) {
|
||||
|
@ -103,14 +102,11 @@ class ECETransformer {
|
|||
}
|
||||
|
||||
if (isLast) {
|
||||
const padding = Buffer.alloc(1);
|
||||
padding.writeUInt8(2, 0);
|
||||
return Buffer.concat([data, padding]);
|
||||
return concat(data, Uint8Array.of(2));
|
||||
} else {
|
||||
const padding = Buffer.alloc(this.rs - len - TAG_LENGTH);
|
||||
padding.fill(0);
|
||||
padding.writeUInt8(1, 0);
|
||||
return Buffer.concat([data, padding]);
|
||||
const padding = new Uint8Array(this.rs - len - TAG_LENGTH);
|
||||
padding[0] = 1;
|
||||
return concat(data, padding);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -133,10 +129,9 @@ class ECETransformer {
|
|||
}
|
||||
|
||||
createHeader() {
|
||||
const nums = Buffer.alloc(5);
|
||||
nums.writeUIntBE(this.rs, 0, 4);
|
||||
nums.writeUIntBE(0, 4, 1);
|
||||
return Buffer.concat([Buffer.from(this.salt), nums]);
|
||||
const nums = new DataView(new ArrayBuffer(5));
|
||||
nums.setUint32(0, this.rs);
|
||||
return concat(new Uint8Array(this.salt), new Uint8Array(nums.buffer));
|
||||
}
|
||||
|
||||
readHeader(buffer) {
|
||||
|
@ -144,9 +139,10 @@ class ECETransformer {
|
|||
throw new Error('chunk too small for reading header');
|
||||
}
|
||||
const header = {};
|
||||
header.salt = buffer.buffer.slice(0, KEY_LENGTH);
|
||||
header.rs = buffer.readUIntBE(KEY_LENGTH, 4);
|
||||
const idlen = buffer.readUInt8(KEY_LENGTH + 4);
|
||||
const dv = new DataView(buffer.buffer);
|
||||
header.salt = buffer.slice(0, KEY_LENGTH);
|
||||
header.rs = dv.getUint32(KEY_LENGTH);
|
||||
const idlen = dv.getUint8(KEY_LENGTH + 4);
|
||||
header.length = idlen + KEY_LENGTH + 5;
|
||||
return header;
|
||||
}
|
||||
|
@ -158,7 +154,7 @@ class ECETransformer {
|
|||
this.key,
|
||||
this.pad(buffer, isLast)
|
||||
);
|
||||
return Buffer.from(encrypted);
|
||||
return new Uint8Array(encrypted);
|
||||
}
|
||||
|
||||
async decryptRecord(buffer, seq, isLast) {
|
||||
|
@ -173,7 +169,7 @@ class ECETransformer {
|
|||
buffer
|
||||
);
|
||||
|
||||
return this.unpad(Buffer.from(data), isLast);
|
||||
return this.unpad(new Uint8Array(data), isLast);
|
||||
}
|
||||
|
||||
async start(controller) {
|
||||
|
@ -214,7 +210,7 @@ class ECETransformer {
|
|||
await this.transformPrevChunk(false, controller);
|
||||
}
|
||||
this.firstchunk = false;
|
||||
this.prevChunk = Buffer.from(chunk.buffer);
|
||||
this.prevChunk = new Uint8Array(chunk.buffer);
|
||||
}
|
||||
|
||||
async flush(controller) {
|
||||
|
|
|
@ -7,7 +7,7 @@ const experiments = {
|
|||
return true;
|
||||
},
|
||||
variant: function() {
|
||||
return ['white-primary', 'primary', 'white-violet', 'violet'][
|
||||
return ['white-blue', 'blue', 'white-violet', 'violet'][
|
||||
Math.floor(Math.random() * 4)
|
||||
];
|
||||
},
|
||||
|
|
|
@ -1,7 +1,14 @@
|
|||
import Nanobus from 'nanobus';
|
||||
import Keychain from './keychain';
|
||||
import { delay, bytes, streamToArrayBuffer } from './utils';
|
||||
import { downloadFile, metadata, getApiUrl, reportLink } from './api';
|
||||
import {
|
||||
downloadFile,
|
||||
downloadDone,
|
||||
metadata,
|
||||
getApiUrl,
|
||||
reportLink,
|
||||
getDownloadToken
|
||||
} from './api';
|
||||
import { blobStream } from './streams';
|
||||
import Zip from './zip';
|
||||
|
||||
|
@ -13,9 +20,14 @@ export default class FileReceiver extends Nanobus {
|
|||
this.keychain.setPassword(fileInfo.password, fileInfo.url);
|
||||
}
|
||||
this.fileInfo = fileInfo;
|
||||
this.dlToken = null;
|
||||
this.reset();
|
||||
}
|
||||
|
||||
get id() {
|
||||
return this.fileInfo.id;
|
||||
}
|
||||
|
||||
get progressRatio() {
|
||||
return this.progress[0] / this.progress[1];
|
||||
}
|
||||
|
@ -47,9 +59,9 @@ export default class FileReceiver extends Nanobus {
|
|||
const meta = await metadata(this.fileInfo.id, this.keychain);
|
||||
this.fileInfo.name = meta.name;
|
||||
this.fileInfo.type = meta.type;
|
||||
this.fileInfo.iv = meta.iv;
|
||||
this.fileInfo.size = +meta.size;
|
||||
this.fileInfo.manifest = meta.manifest;
|
||||
this.fileInfo.flagged = meta.flagged;
|
||||
this.state = 'ready';
|
||||
}
|
||||
|
||||
|
@ -79,7 +91,7 @@ export default class FileReceiver extends Nanobus {
|
|||
this.state = 'downloading';
|
||||
this.downloadRequest = await downloadFile(
|
||||
this.fileInfo.id,
|
||||
this.keychain,
|
||||
this.dlToken,
|
||||
p => {
|
||||
this.progress = [p, this.fileInfo.size];
|
||||
this.emit('progress');
|
||||
|
@ -143,6 +155,7 @@ export default class FileReceiver extends Nanobus {
|
|||
url: this.fileInfo.url,
|
||||
size: this.fileInfo.size,
|
||||
nonce: this.keychain.nonce,
|
||||
dlToken: this.dlToken,
|
||||
noSave
|
||||
};
|
||||
await this.sendMessageToSw(info);
|
||||
|
@ -208,11 +221,19 @@ export default class FileReceiver extends Nanobus {
|
|||
}
|
||||
}
|
||||
|
||||
download(options) {
|
||||
if (options.stream) {
|
||||
return this.downloadStream(options.noSave);
|
||||
async download({ stream, storage, noSave }) {
|
||||
this.dlToken = storage.getDownloadToken(this.id);
|
||||
if (!this.dlToken) {
|
||||
this.dlToken = await getDownloadToken(this.id, this.keychain);
|
||||
storage.setDownloadToken(this.id, this.dlToken);
|
||||
}
|
||||
return this.downloadBlob(options.noSave);
|
||||
if (stream) {
|
||||
await this.downloadStream(noSave);
|
||||
} else {
|
||||
await this.downloadBlob(noSave);
|
||||
}
|
||||
await downloadDone(this.id, this.dlToken);
|
||||
storage.setDownloadToken(this.id);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -224,6 +245,24 @@ async function saveFile(file) {
|
|||
if (navigator.msSaveBlob) {
|
||||
navigator.msSaveBlob(blob, file.name);
|
||||
return resolve();
|
||||
} else if (/iPhone|fxios/i.test(navigator.userAgent)) {
|
||||
// This method is much slower but createObjectURL
|
||||
// is buggy on iOS
|
||||
const reader = new FileReader();
|
||||
reader.addEventListener('loadend', function() {
|
||||
if (reader.error) {
|
||||
return reject(reader.error);
|
||||
}
|
||||
if (reader.result) {
|
||||
const a = document.createElement('a');
|
||||
a.href = reader.result;
|
||||
a.download = file.name;
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
reader.readAsDataURL(blob);
|
||||
} else {
|
||||
const downloadUrl = URL.createObjectURL(blob);
|
||||
const a = document.createElement('a');
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* global AUTH_CONFIG */
|
||||
import { arrayToB64, b64ToArray } from './utils';
|
||||
import { arrayToB64, b64ToArray, concat } from './utils';
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
const decoder = new TextDecoder();
|
||||
|
@ -23,13 +23,6 @@ function getOtherInfo(enc) {
|
|||
return result;
|
||||
}
|
||||
|
||||
function concat(b1, b2) {
|
||||
const result = new Uint8Array(b1.length + b2.length);
|
||||
result.set(b1, 0);
|
||||
result.set(b2, b1.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
async function concatKdf(key, enc) {
|
||||
if (key.length !== 32) {
|
||||
throw new Error('unsupported key length');
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import { FluentBundle, FluentResource } from '@fluent/bundle';
|
||||
import { FluentBundle } from '@fluent/bundle';
|
||||
|
||||
function makeBundle(locale, ftl) {
|
||||
const bundle = new FluentBundle(locale, { useIsolating: false });
|
||||
bundle.addResource(new FluentResource(ftl));
|
||||
bundle.addMessages(ftl);
|
||||
return bundle;
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ export async function getTranslator(locale) {
|
|||
return function(id, data) {
|
||||
for (let bundle of bundles) {
|
||||
if (bundle.hasMessage(id)) {
|
||||
return bundle.formatPattern(bundle.getMessage(id).value, data);
|
||||
return bundle.format(bundle.getMessage(id), data);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
203
app/main.css
|
@ -7,14 +7,17 @@ html {
|
|||
@tailwind components;
|
||||
|
||||
:not(input) {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
:root {
|
||||
--violet-gradient: linear-gradient(
|
||||
-180deg,
|
||||
rgb(144 89 255 / 80%) 0%,
|
||||
rgb(144 89 255 / 40%) 100%
|
||||
rgba(144, 89, 255, 0.8) 0%,
|
||||
rgba(144, 89, 255, 0.4) 100%
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -36,7 +39,7 @@ body {
|
|||
}
|
||||
|
||||
.btn {
|
||||
@apply bg-primary;
|
||||
@apply bg-blue-60;
|
||||
@apply text-white;
|
||||
@apply cursor-pointer;
|
||||
@apply py-4;
|
||||
|
@ -45,11 +48,17 @@ body {
|
|||
}
|
||||
|
||||
.btn:hover {
|
||||
@apply bg-primary_accent;
|
||||
@apply bg-blue-70;
|
||||
}
|
||||
|
||||
.btn:focus {
|
||||
@apply bg-primary_accent;
|
||||
@apply bg-blue-70;
|
||||
}
|
||||
|
||||
.btn:disabled {
|
||||
@apply bg-grey-transparent;
|
||||
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
|
@ -68,7 +77,7 @@ body {
|
|||
|
||||
.checkbox > label::before {
|
||||
/* @apply bg-grey-10; */
|
||||
@apply border-default;
|
||||
@apply border;
|
||||
@apply rounded-sm;
|
||||
|
||||
content: '';
|
||||
|
@ -79,16 +88,16 @@ body {
|
|||
}
|
||||
|
||||
.checkbox > label:hover::before {
|
||||
@apply border-primary;
|
||||
@apply border-blue-50;
|
||||
}
|
||||
|
||||
.checkbox > input:focus + label::before {
|
||||
@apply border-primary;
|
||||
@apply border-blue-50;
|
||||
}
|
||||
|
||||
.checkbox > input:checked + label::before {
|
||||
@apply bg-primary;
|
||||
@apply border-primary;
|
||||
@apply bg-blue-50;
|
||||
@apply border-blue-50;
|
||||
|
||||
background-image: url('../assets/lock.svg');
|
||||
background-position: center;
|
||||
|
@ -101,8 +110,8 @@ body {
|
|||
}
|
||||
|
||||
.checkbox > input:disabled + label::before {
|
||||
@apply bg-primary;
|
||||
@apply border-primary;
|
||||
@apply bg-blue-50;
|
||||
@apply border-blue-50;
|
||||
|
||||
background-image: url('../assets/lock.svg');
|
||||
background-position: center;
|
||||
|
@ -115,7 +124,7 @@ details {
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
details > summary::marker {
|
||||
details > summary::-webkit-details-marker {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
@ -131,35 +140,20 @@ details[open] > summary > svg {
|
|||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
footer li a:hover {
|
||||
footer li:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.feedback-link {
|
||||
background-color: #000;
|
||||
background-image: url('../assets/feedback.svg');
|
||||
background-position: 0.125rem 0.25rem;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 1.125rem;
|
||||
color: #fff;
|
||||
display: block;
|
||||
font-size: 0.75rem;
|
||||
line-height: 0.75rem;
|
||||
padding: 0.375rem 0.375rem 0.375rem 1.25rem;
|
||||
text-indent: 0.125rem;
|
||||
white-space: nowrap;
|
||||
.link-blue {
|
||||
@apply text-blue-60;
|
||||
}
|
||||
|
||||
.link-primary {
|
||||
@apply text-primary;
|
||||
.link-blue:hover {
|
||||
@apply text-blue-70;
|
||||
}
|
||||
|
||||
.link-primary:hover {
|
||||
@apply text-primary_accent;
|
||||
}
|
||||
|
||||
.link-primary:focus {
|
||||
@apply text-primary_accent;
|
||||
.link-blue:focus {
|
||||
@apply text-blue-70;
|
||||
}
|
||||
|
||||
.main-header img {
|
||||
|
@ -167,17 +161,40 @@ footer li a:hover {
|
|||
width: auto;
|
||||
}
|
||||
|
||||
.intro {
|
||||
max-width: 100%;
|
||||
height: unset;
|
||||
}
|
||||
|
||||
.dl-bg {
|
||||
filter: grayscale(1) opacity(0.15);
|
||||
}
|
||||
|
||||
.main {
|
||||
display: flex;
|
||||
position: relative;
|
||||
max-width: 64rem;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.main > section {
|
||||
@apply bg-white;
|
||||
}
|
||||
|
||||
.mozilla-logo {
|
||||
background-image: url('../assets/mozilla-logo.svg');
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100px, 48px;
|
||||
overflow: hidden;
|
||||
text-indent: 120%;
|
||||
white-space: nowrap;
|
||||
display: inline-block;
|
||||
height: 32px;
|
||||
width: 100px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
#password-msg::after {
|
||||
content: '\200b';
|
||||
}
|
||||
|
@ -201,18 +218,19 @@ progress::-webkit-progress-value {
|
|||
background-image: -webkit-linear-gradient(
|
||||
-45deg,
|
||||
transparent 20%,
|
||||
rgb(255 255 255 / 40%) 20%,
|
||||
rgb(255 255 255 / 40%) 40%,
|
||||
rgba(255, 255, 255, 0.4) 20%,
|
||||
rgba(255, 255, 255, 0.4) 40%,
|
||||
transparent 40%,
|
||||
transparent 60%,
|
||||
rgb(255 255 255 / 40%) 60%,
|
||||
rgb(255 255 255 / 40%) 80%,
|
||||
rgba(255, 255, 255, 0.4) 60%,
|
||||
rgba(255, 255, 255, 0.4) 80%,
|
||||
transparent 80%
|
||||
),
|
||||
-webkit-linear-gradient(left, var(--color-primary), var(--color-primary));
|
||||
-webkit-linear-gradient(left, #0a84ff, #0a84ff);
|
||||
/* stylelint-enable */
|
||||
border-radius: 2px;
|
||||
background-size: 21px 20px, 100% 100%, 100% 100%;
|
||||
-webkit-animation: animate-stripes 1s linear infinite;
|
||||
}
|
||||
|
||||
progress::-moz-progress-bar {
|
||||
|
@ -220,21 +238,27 @@ progress::-moz-progress-bar {
|
|||
background-image: -moz-linear-gradient(
|
||||
135deg,
|
||||
transparent 20%,
|
||||
rgb(255 255 255 / 40%) 20%,
|
||||
rgb(255 255 255 / 40%) 40%,
|
||||
rgba(255, 255, 255, 0.4) 20%,
|
||||
rgba(255, 255, 255, 0.4) 40%,
|
||||
transparent 40%,
|
||||
transparent 60%,
|
||||
rgb(255 255 255 / 40%) 60%,
|
||||
rgb(255 255 255 / 40%) 80%,
|
||||
rgba(255, 255, 255, 0.4) 60%,
|
||||
rgba(255, 255, 255, 0.4) 80%,
|
||||
transparent 80%
|
||||
),
|
||||
-moz-linear-gradient(left, var(--color-primary), var(--color-primary));
|
||||
-moz-linear-gradient(left, #0a84ff, #0a84ff);
|
||||
/* stylelint-enable */
|
||||
border-radius: 2px;
|
||||
background-size: 21px 20px, 100% 100%, 100% 100%;
|
||||
animation: animate-stripes 1s linear infinite;
|
||||
}
|
||||
|
||||
@-webkit-keyframes animate-stripes {
|
||||
100% {
|
||||
background-position: -21px 0;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes animate-stripes {
|
||||
100% {
|
||||
background-position: -21px 0;
|
||||
|
@ -253,6 +277,13 @@ select {
|
|||
width: auto;
|
||||
}
|
||||
|
||||
.intro {
|
||||
max-width: unset;
|
||||
height: unset;
|
||||
margin-bottom: -3rem;
|
||||
margin-right: -7rem;
|
||||
}
|
||||
|
||||
.main {
|
||||
@apply flex-1;
|
||||
@apply self-center;
|
||||
|
@ -260,6 +291,7 @@ select {
|
|||
@apply m-auto;
|
||||
@apply py-8;
|
||||
|
||||
min-height: 42rem;
|
||||
max-height: 42rem;
|
||||
width: calc(100% - 3rem);
|
||||
}
|
||||
|
@ -273,37 +305,46 @@ select {
|
|||
}
|
||||
|
||||
.btn {
|
||||
@apply bg-primary;
|
||||
@apply bg-blue-40;
|
||||
@apply text-white;
|
||||
}
|
||||
|
||||
.btn:hover {
|
||||
@apply bg-primary_accent;
|
||||
@apply bg-blue-50;
|
||||
}
|
||||
|
||||
.btn:focus {
|
||||
@apply bg-primary_accent;
|
||||
@apply bg-blue-50;
|
||||
}
|
||||
|
||||
.link-primary {
|
||||
@apply text-primary;
|
||||
.btn:disabled {
|
||||
@apply bg-grey-80;
|
||||
}
|
||||
|
||||
.link-primary:hover {
|
||||
@apply text-primary_accent;
|
||||
.link-blue {
|
||||
@apply text-blue-40;
|
||||
}
|
||||
|
||||
.link-primary:focus {
|
||||
@apply text-primary_accent;
|
||||
.link-blue:hover {
|
||||
@apply text-blue-50;
|
||||
}
|
||||
|
||||
.link-blue:focus {
|
||||
@apply text-blue-50;
|
||||
}
|
||||
|
||||
.main > section {
|
||||
@apply bg-grey-90;
|
||||
}
|
||||
|
||||
.mozilla-logo {
|
||||
background-color: white;
|
||||
border: 1px solid white;
|
||||
}
|
||||
|
||||
@screen md {
|
||||
.main > section {
|
||||
@apply border-default;
|
||||
@apply border;
|
||||
@apply border-grey-80;
|
||||
}
|
||||
}
|
||||
|
@ -313,12 +354,13 @@ select {
|
|||
|
||||
@responsive {
|
||||
.shadow-light {
|
||||
box-shadow: 0 0 8px 0 rgb(12 12 13 / 10%);
|
||||
box-shadow: 0 0 8px 0 rgba(12, 12, 13, 0.1);
|
||||
}
|
||||
|
||||
.shadow-big {
|
||||
box-shadow: 0 12px 18px 2px rgb(34 0 51 / 4%),
|
||||
0 6px 22px 4px rgb(7 48 114 / 12%), 0 6px 10px -4px rgb(14 13 26 / 12%);
|
||||
box-shadow: 0 12px 18px 2px rgba(34, 0, 51, 0.04),
|
||||
0 6px 22px 4px rgba(7, 48, 114, 0.12),
|
||||
0 6px 10px -4px rgba(14, 13, 26, 0.12);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -349,48 +391,3 @@ select {
|
|||
.signin:hover:active {
|
||||
transform: scale(0.9375);
|
||||
}
|
||||
|
||||
/* begin signin button color experiment */
|
||||
|
||||
.white-primary {
|
||||
@apply border-primary;
|
||||
@apply border-2;
|
||||
@apply text-primary;
|
||||
}
|
||||
|
||||
.white-primary:hover,
|
||||
.white-primary:focus {
|
||||
@apply bg-primary;
|
||||
@apply text-white;
|
||||
}
|
||||
|
||||
.primary {
|
||||
@apply bg-primary;
|
||||
@apply text-white;
|
||||
}
|
||||
|
||||
.white-violet {
|
||||
@apply border-violet;
|
||||
@apply border-2;
|
||||
@apply text-violet;
|
||||
}
|
||||
|
||||
.white-violet:hover,
|
||||
.white-violet:focus {
|
||||
@apply bg-violet;
|
||||
@apply text-white;
|
||||
|
||||
background-image: var(--violet-gradient);
|
||||
}
|
||||
|
||||
.violet {
|
||||
@apply bg-violet;
|
||||
@apply text-white;
|
||||
}
|
||||
|
||||
.violet:hover,
|
||||
.violet:focus {
|
||||
background-image: var(--violet-gradient);
|
||||
}
|
||||
|
||||
/* end signin button color experiment */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* global DEFAULTS LIMITS WEB_UI PREFS */
|
||||
/* global DEFAULTS LIMITS PREFS */
|
||||
import 'core-js';
|
||||
import 'fast-text-encoding'; // MS Edge support
|
||||
import 'intl-pluralrules';
|
||||
|
@ -10,6 +10,7 @@ import controller from './controller';
|
|||
import dragManager from './dragManager';
|
||||
import pasteManager from './pasteManager';
|
||||
import storage from './storage';
|
||||
import metrics from './metrics';
|
||||
import experiments from './experiments';
|
||||
import * as Sentry from '@sentry/browser';
|
||||
import './main.css';
|
||||
|
@ -50,9 +51,8 @@ if (process.env.NODE_ENV === 'production') {
|
|||
window.initialState = {
|
||||
LIMITS,
|
||||
DEFAULTS,
|
||||
WEB_UI,
|
||||
PREFS,
|
||||
archive: new Archive([], DEFAULTS.EXPIRE_SECONDS, DEFAULTS.DOWNLOADS),
|
||||
archive: new Archive([], DEFAULTS.EXPIRE_SECONDS),
|
||||
capabilities,
|
||||
translate,
|
||||
storage,
|
||||
|
@ -67,6 +67,7 @@ if (process.env.NODE_ENV === 'production') {
|
|||
// eslint-disable-next-line require-atomic-updates
|
||||
window.app = app;
|
||||
app.use(experiments);
|
||||
app.use(metrics);
|
||||
app.use(controller);
|
||||
app.use(dragManager);
|
||||
app.use(pasteManager);
|
||||
|
|
|
@ -0,0 +1,186 @@
|
|||
import storage from './storage';
|
||||
import { platform, locale } from './utils';
|
||||
import { sendMetrics } from './api';
|
||||
|
||||
let appState = null;
|
||||
let experiment = null;
|
||||
const HOUR = 1000 * 60 * 60;
|
||||
const events = [];
|
||||
let session_id = Date.now();
|
||||
const lang = locale();
|
||||
|
||||
export default function initialize(state, emitter) {
|
||||
appState = state;
|
||||
|
||||
emitter.on('DOMContentLoaded', () => {
|
||||
experiment = storage.enrolled;
|
||||
if (!appState.user.firstAction) {
|
||||
appState.user.firstAction =
|
||||
appState.route === '/' ? 'upload' : 'download';
|
||||
}
|
||||
const query = appState.query;
|
||||
addEvent('client_visit', {
|
||||
entrypoint: appState.route === '/' ? 'upload' : 'download',
|
||||
referrer: document.referrer,
|
||||
utm_campaign: query.utm_campaign,
|
||||
utm_content: query.utm_content,
|
||||
utm_medium: query.utm_medium,
|
||||
utm_source: query.utm_source,
|
||||
utm_term: query.utm_term
|
||||
});
|
||||
});
|
||||
emitter.on('experiment', experimentEvent);
|
||||
window.addEventListener('unload', submitEvents);
|
||||
}
|
||||
|
||||
function sizeOrder(n) {
|
||||
return Math.floor(Math.log10(n));
|
||||
}
|
||||
|
||||
function submitEvents() {
|
||||
if (navigator.doNotTrack === '1') {
|
||||
return;
|
||||
}
|
||||
sendMetrics(
|
||||
new Blob(
|
||||
[
|
||||
JSON.stringify({
|
||||
now: Date.now(),
|
||||
session_id,
|
||||
lang,
|
||||
platform: platform(),
|
||||
events
|
||||
})
|
||||
],
|
||||
{ type: 'text/plain' } // see http://crbug.com/490015
|
||||
)
|
||||
);
|
||||
events.splice(0);
|
||||
}
|
||||
|
||||
async function addEvent(event_type, event_properties) {
|
||||
const user_id = await appState.user.metricId();
|
||||
const device_id = await appState.user.deviceId();
|
||||
const ab_id = Object.keys(experiment)[0];
|
||||
if (ab_id) {
|
||||
event_properties.experiment = ab_id;
|
||||
event_properties.variant = experiment[ab_id];
|
||||
}
|
||||
events.push({
|
||||
device_id,
|
||||
event_properties,
|
||||
event_type,
|
||||
time: Date.now(),
|
||||
user_id,
|
||||
user_properties: {
|
||||
anonymous: !appState.user.loggedIn,
|
||||
first_action: appState.user.firstAction,
|
||||
active_count: storage.files.length
|
||||
}
|
||||
});
|
||||
if (events.length === 25) {
|
||||
submitEvents();
|
||||
}
|
||||
}
|
||||
|
||||
function cancelledUpload(archive, duration) {
|
||||
return addEvent('client_upload', {
|
||||
download_limit: archive.dlimit,
|
||||
duration: sizeOrder(duration),
|
||||
file_count: archive.numFiles,
|
||||
password_protected: !!archive.password,
|
||||
size: sizeOrder(archive.size),
|
||||
status: 'cancel',
|
||||
time_limit: archive.timeLimit
|
||||
});
|
||||
}
|
||||
|
||||
function completedUpload(archive, duration) {
|
||||
return addEvent('client_upload', {
|
||||
download_limit: archive.dlimit,
|
||||
duration: sizeOrder(duration),
|
||||
file_count: archive.numFiles,
|
||||
password_protected: !!archive.password,
|
||||
size: sizeOrder(archive.size),
|
||||
status: 'ok',
|
||||
time_limit: archive.timeLimit
|
||||
});
|
||||
}
|
||||
|
||||
function stoppedUpload(archive, duration = 0) {
|
||||
return addEvent('client_upload', {
|
||||
download_limit: archive.dlimit,
|
||||
duration: sizeOrder(duration),
|
||||
file_count: archive.numFiles,
|
||||
password_protected: !!archive.password,
|
||||
size: sizeOrder(archive.size),
|
||||
status: 'error',
|
||||
time_limit: archive.timeLimit
|
||||
});
|
||||
}
|
||||
|
||||
function stoppedDownload(params) {
|
||||
return addEvent('client_download', {
|
||||
duration: sizeOrder(params.duration),
|
||||
password_protected: params.password_protected,
|
||||
size: sizeOrder(params.size),
|
||||
status: 'error'
|
||||
});
|
||||
}
|
||||
|
||||
function completedDownload(params) {
|
||||
return addEvent('client_download', {
|
||||
duration: sizeOrder(params.duration),
|
||||
password_protected: params.password_protected,
|
||||
size: sizeOrder(params.size),
|
||||
status: 'ok'
|
||||
});
|
||||
}
|
||||
|
||||
function deletedUpload(ownedFile) {
|
||||
return addEvent('client_delete', {
|
||||
age: Math.floor((Date.now() - ownedFile.createdAt) / HOUR),
|
||||
downloaded: ownedFile.dtotal > 0,
|
||||
status: 'ok'
|
||||
});
|
||||
}
|
||||
|
||||
function experimentEvent(params) {
|
||||
return addEvent('client_experiment', params);
|
||||
}
|
||||
|
||||
function submittedSignup(params) {
|
||||
return addEvent('client_login', {
|
||||
status: 'ok',
|
||||
trigger: params.trigger
|
||||
});
|
||||
}
|
||||
|
||||
function canceledSignup(params) {
|
||||
return addEvent('client_login', {
|
||||
status: 'cancel',
|
||||
trigger: params.trigger
|
||||
});
|
||||
}
|
||||
|
||||
function loggedOut(params) {
|
||||
addEvent('client_logout', {
|
||||
status: 'ok',
|
||||
trigger: params.trigger
|
||||
});
|
||||
// flush events and start new anon session
|
||||
submitEvents();
|
||||
session_id = Date.now();
|
||||
}
|
||||
|
||||
export {
|
||||
cancelledUpload,
|
||||
stoppedUpload,
|
||||
completedUpload,
|
||||
deletedUpload,
|
||||
stoppedDownload,
|
||||
completedDownload,
|
||||
submittedSignup,
|
||||
canceledSignup,
|
||||
loggedOut
|
||||
};
|
2345
app/qrcode.js
|
@ -7,6 +7,7 @@ module.exports = function(app = choo({ hash: true })) {
|
|||
app.route('/download/:id', body(download));
|
||||
app.route('/download/:id/:key', body(download));
|
||||
app.route('/unsupported/:reason', body(require('./ui/unsupported')));
|
||||
app.route('/legal', body(require('./ui/legal')));
|
||||
app.route('/error', body(require('./ui/error')));
|
||||
app.route('/blank', body(require('./ui/blank')));
|
||||
app.route('/oauth', function(state, emit) {
|
||||
|
@ -16,6 +17,7 @@ module.exports = function(app = choo({ hash: true })) {
|
|||
emit('replaceState', '/');
|
||||
setTimeout(() => emit('render'));
|
||||
});
|
||||
app.route('/report', body(require('./ui/report')));
|
||||
app.route('*', body(require('./ui/notFound')));
|
||||
return app;
|
||||
};
|
||||
|
|
|
@ -34,7 +34,7 @@ async function decryptStream(id) {
|
|||
keychain.setPassword(file.password, file.url);
|
||||
}
|
||||
|
||||
file.download = downloadStream(id, keychain);
|
||||
file.download = downloadStream(id, file.dlToken);
|
||||
|
||||
const body = await file.download.result;
|
||||
|
||||
|
@ -146,6 +146,7 @@ self.onmessage = event => {
|
|||
type: event.data.type,
|
||||
manifest: event.data.manifest,
|
||||
size: event.data.size,
|
||||
dlToken: event.data.dlToken,
|
||||
progress: 0
|
||||
};
|
||||
map.set(event.data.id, info);
|
||||
|
|
|
@ -35,6 +35,7 @@ class Storage {
|
|||
this.engine = new Mem();
|
||||
}
|
||||
this._files = this.loadFiles();
|
||||
this.pruneTokens();
|
||||
}
|
||||
|
||||
loadFiles() {
|
||||
|
@ -180,6 +181,48 @@ class Storage {
|
|||
downloadCount
|
||||
};
|
||||
}
|
||||
|
||||
setDownloadToken(id, token) {
|
||||
let otherTokens = {};
|
||||
try {
|
||||
otherTokens = JSON.parse(this.get('dlTokens'));
|
||||
} catch (e) {
|
||||
//
|
||||
}
|
||||
if (token) {
|
||||
const record = { token, ts: Date.now() };
|
||||
this.set('dlTokens', JSON.stringify({ ...otherTokens, [id]: record }));
|
||||
} else {
|
||||
this.set('dlTokens', JSON.stringify({ ...otherTokens, [id]: undefined }));
|
||||
}
|
||||
}
|
||||
|
||||
getDownloadToken(id) {
|
||||
try {
|
||||
return JSON.parse(this.get('dlTokens'))[id].token;
|
||||
} catch (e) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
pruneTokens() {
|
||||
try {
|
||||
const now = Date.now();
|
||||
const tokens = JSON.parse(this.get('dlTokens'));
|
||||
const keep = {};
|
||||
for (const id of Object.keys(tokens)) {
|
||||
const t = tokens[id];
|
||||
if (t.ts > now - 7 * 86400 * 1000) {
|
||||
keep[id] = t;
|
||||
}
|
||||
}
|
||||
if (Object.keys(keep).length < Object.keys(tokens).length) {
|
||||
this.set('dlTokens', JSON.stringify(keep));
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default new Storage();
|
||||
|
|
|
@ -69,7 +69,7 @@ class Account extends Component {
|
|||
return html`
|
||||
<send-account>
|
||||
<button
|
||||
class="px-4 py-2 md:px-8 md:py-4 focus:outline signin border-2 link-primary border-primary hover:border-primary dark:border-primary dark:hover:border-primary"
|
||||
class="px-4 py-2 md:px-8 md:py-4 focus:outline signin border-2 link-blue border-blue-60 hover:border-blue-70 dark:border-blue-40 dark:hover:border-blue-50"
|
||||
onclick="${e => this.login(e)}"
|
||||
title="${translate('signInOnlyButton')}"
|
||||
>
|
||||
|
@ -83,19 +83,19 @@ class Account extends Component {
|
|||
<input
|
||||
type="image"
|
||||
alt="${user.email}"
|
||||
class="w-8 h-8 rounded-full border-default text-primary md:text-white focus:outline"
|
||||
class="w-8 h-8 rounded-full border text-blue-50 md:text-white focus:outline"
|
||||
src="${user.avatar}"
|
||||
onclick="${e => this.avatarClick(e)}"
|
||||
/>
|
||||
<ul
|
||||
id="accountMenu"
|
||||
class="invisible absolute top-0 right-0 mt-10 pt-2 pb-2 bg-white shadow-md whitespace-nowrap outline-none z-50 dark:bg-grey-80"
|
||||
class="invisible absolute top-0 right-0 mt-10 pt-2 pb-2 bg-white shadow-md whitespace-no-wrap outline-none z-50 dark:bg-grey-80"
|
||||
onblur="${e => this.hideMenu(e)}"
|
||||
>
|
||||
<li class="p-2 text-grey-60 dark:text-grey-50">${user.email}</li>
|
||||
<li>
|
||||
<button
|
||||
class="block w-full text-left px-4 py-2 text-grey-80 dark:text-grey-30 hover:bg-primary hover:text-white cursor-pointer focus:outline"
|
||||
class="block w-full text-left px-4 py-2 text-grey-80 dark:text-grey-30 hover:bg-blue-50 hover:text-white cursor-pointer focus:outline"
|
||||
onclick="${e => this.logout(e)}"
|
||||
title="${translate('signOut')}"
|
||||
>
|
||||
|
|
|
@ -26,7 +26,7 @@ function expiryInfo(translate, archive) {
|
|||
}
|
||||
|
||||
function password(state) {
|
||||
const MAX_LENGTH = 4096;
|
||||
const MAX_LENGTH = 32;
|
||||
|
||||
return html`
|
||||
<div class="mb-2 px-1">
|
||||
|
@ -48,12 +48,11 @@ function password(state) {
|
|||
${state.translate('addPassword')}
|
||||
</label>
|
||||
</div>
|
||||
<div class="relative inline-block my-1">
|
||||
<input
|
||||
id="password-input"
|
||||
class="${state.archive.password
|
||||
? ''
|
||||
: 'invisible'} border-default rounded-default focus:border-primary leading-normal my-1 py-1 px-2 h-8 dark:bg-grey-80"
|
||||
: 'invisible'} border rounded focus:border-blue-60 leading-normal my-1 py-1 px-2 h-8 dark:bg-grey-80"
|
||||
autocomplete="off"
|
||||
maxlength="${MAX_LENGTH}"
|
||||
type="password"
|
||||
|
@ -62,22 +61,6 @@ function password(state) {
|
|||
placeholder="${state.translate('unlockInputPlaceholder')}"
|
||||
value="${state.archive.password || ''}"
|
||||
/>
|
||||
<button
|
||||
id="password-preview-button"
|
||||
type="button"
|
||||
class="${state.archive.password
|
||||
? ''
|
||||
: 'invisible'} absolute top-0 right-0 w-8 h-8"
|
||||
onclick="${onPasswordPreviewButtonclicked}"
|
||||
>
|
||||
<img
|
||||
src="${assets.get('eye.svg')}"
|
||||
width="22"
|
||||
height="22"
|
||||
class="m-auto mt-2"
|
||||
/>
|
||||
</button>
|
||||
</div>
|
||||
<label
|
||||
id="password-msg"
|
||||
for="password-input"
|
||||
|
@ -86,36 +69,15 @@ function password(state) {
|
|||
</div>
|
||||
`;
|
||||
|
||||
function onPasswordPreviewButtonclicked(event) {
|
||||
event.preventDefault();
|
||||
const input = document.getElementById('password-input');
|
||||
const eyeIcon = event.currentTarget.querySelector('img');
|
||||
|
||||
if (input.type === 'password') {
|
||||
input.type = 'text';
|
||||
eyeIcon.src = assets.get('eye-off.svg');
|
||||
} else {
|
||||
input.type = 'password';
|
||||
eyeIcon.src = assets.get('eye.svg');
|
||||
}
|
||||
|
||||
input.focus();
|
||||
}
|
||||
|
||||
function togglePasswordInput(event) {
|
||||
event.stopPropagation();
|
||||
const checked = event.target.checked;
|
||||
const input = document.getElementById('password-input');
|
||||
const passwordPreviewButton = document.getElementById(
|
||||
'password-preview-button'
|
||||
);
|
||||
if (checked) {
|
||||
input.classList.remove('invisible');
|
||||
passwordPreviewButton.classList.remove('invisible');
|
||||
input.focus();
|
||||
} else {
|
||||
input.classList.add('invisible');
|
||||
passwordPreviewButton.classList.add('invisible');
|
||||
input.value = '';
|
||||
document.getElementById('password-msg').textContent = '';
|
||||
state.archive.password = null;
|
||||
|
@ -150,7 +112,7 @@ function password(state) {
|
|||
function fileInfo(file, action) {
|
||||
return html`
|
||||
<send-file class="flex flex-row items-center p-3 w-full">
|
||||
<svg class="h-8 w-8 text-primary">
|
||||
<svg class="h-8 w-8 text-white dark:text-grey-90">
|
||||
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
|
||||
</svg>
|
||||
<p class="ml-4 w-full">
|
||||
|
@ -166,7 +128,7 @@ function fileInfo(file, action) {
|
|||
function archiveInfo(archive, action) {
|
||||
return html`
|
||||
<p class="w-full flex items-center">
|
||||
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-primary">
|
||||
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-white dark:text-grey-90">
|
||||
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
|
||||
</svg>
|
||||
<p class="flex-grow">
|
||||
|
@ -188,7 +150,7 @@ function archiveDetails(translate, archive) {
|
|||
ontoggle="${toggled}"
|
||||
>
|
||||
<summary
|
||||
class="flex items-center link-primary text-sm cursor-pointer outline-none"
|
||||
class="flex items-center link-blue text-sm cursor-pointer outline-none"
|
||||
>
|
||||
<svg
|
||||
class="fill-current w-4 h-4 mr-1"
|
||||
|
@ -218,7 +180,7 @@ module.exports = function(state, emit, archive) {
|
|||
state.capabilities.share || platform() === 'android'
|
||||
? html`
|
||||
<button
|
||||
class="link-primary self-end flex items-start"
|
||||
class="link-blue self-end flex items-start"
|
||||
onclick=${share}
|
||||
title="Share link"
|
||||
>
|
||||
|
@ -230,7 +192,7 @@ module.exports = function(state, emit, archive) {
|
|||
`
|
||||
: html`
|
||||
<button
|
||||
class="link-primary focus:outline self-end flex items-center"
|
||||
class="link-blue focus:outline self-end flex items-center"
|
||||
onclick=${copy}
|
||||
title="${state.translate('copyLinkButton')}"
|
||||
>
|
||||
|
@ -244,7 +206,7 @@ module.exports = function(state, emit, archive) {
|
|||
platform() === 'web'
|
||||
? html`
|
||||
<a
|
||||
class="flex items-baseline link-primary"
|
||||
class="flex items-baseline link-blue"
|
||||
href="${archive.url}"
|
||||
title="${state.translate('downloadButtonLabel')}"
|
||||
tabindex="0"
|
||||
|
@ -261,7 +223,7 @@ module.exports = function(state, emit, archive) {
|
|||
return html`
|
||||
<send-archive
|
||||
id="archive-${archive.id}"
|
||||
class="flex flex-col items-start rounded-default shadow-light bg-white p-4 w-full dark:bg-grey-90 dark:border-default dark:border-grey-70"
|
||||
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full dark:bg-grey-90 dark:border dark:border-grey-70"
|
||||
>
|
||||
${archiveInfo(
|
||||
archive,
|
||||
|
@ -311,7 +273,7 @@ module.exports = function(state, emit, archive) {
|
|||
try {
|
||||
await navigator.share({
|
||||
title: state.translate('-send-brand'),
|
||||
text: `Download "${archive.name}" with Send: simple, safe file sharing`,
|
||||
text: `Download "${archive.name}" with Firefox Send: simple, safe file sharing`,
|
||||
//state.translate('shareMessage', { name }),
|
||||
url: archive.url
|
||||
});
|
||||
|
@ -335,7 +297,7 @@ module.exports.wip = function(state, emit) {
|
|||
fileInfo(f, remove(f, state.translate('deleteButtonHover')))
|
||||
),
|
||||
'flex-shrink bg-grey-10 rounded-t overflow-y-auto px-6 py-4 md:h-full md:max-h-half-screen dark:bg-black',
|
||||
'bg-white px-2 my-2 shadow-light rounded-default dark:bg-grey-90 dark:border-default dark:border-grey-80'
|
||||
'bg-white px-2 my-2 shadow-light rounded dark:bg-grey-90 dark:border dark:border-grey-80'
|
||||
)}
|
||||
<div
|
||||
class="flex-shrink-0 flex-grow flex items-end p-4 bg-grey-10 rounded-b mb-1 font-medium dark:bg-grey-90"
|
||||
|
@ -358,7 +320,7 @@ module.exports.wip = function(state, emit) {
|
|||
class="flex items-center cursor-pointer"
|
||||
title="${state.translate('addFilesButton')}"
|
||||
>
|
||||
<svg class="w-6 h-6 mr-2 link-primary">
|
||||
<svg class="w-6 h-6 mr-2 link-blue">
|
||||
<use xlink:href="${assets.get('addfiles.svg')}#plus" />
|
||||
</svg>
|
||||
${state.translate('addFilesButton')}
|
||||
|
@ -438,7 +400,7 @@ module.exports.uploading = function(state, emit) {
|
|||
return html`
|
||||
<send-upload-area
|
||||
id="${archive.id}"
|
||||
class="flex flex-col items-start rounded-default shadow-light bg-white p-4 w-full dark:bg-grey-90"
|
||||
class="flex flex-col items-start rounded shadow-light bg-white p-4 w-full dark:bg-grey-90"
|
||||
>
|
||||
${archiveInfo(archive)}
|
||||
<div class="text-xs opacity-75 w-full mt-2 mb-2">
|
||||
|
@ -448,12 +410,12 @@ module.exports.uploading = function(state, emit) {
|
|||
expiresAt: Date.now() + 500 + state.archive.timeLimit * 1000
|
||||
})}
|
||||
</div>
|
||||
<div class="link-primary text-sm font-medium mt-2">
|
||||
<div class="link-blue text-sm font-medium mt-2">
|
||||
${progressPercent}
|
||||
</div>
|
||||
<progress class="my-3" value="${progress}">${progressPercent}</progress>
|
||||
<button
|
||||
class="link-primary self-end font-medium"
|
||||
class="link-blue self-end font-medium"
|
||||
onclick=${cancel}
|
||||
title="${state.translate('deletePopupCancel')}"
|
||||
>
|
||||
|
@ -475,7 +437,7 @@ module.exports.empty = function(state, emit) {
|
|||
? ''
|
||||
: html`
|
||||
<button
|
||||
class="center font-medium text-sm link-primary mt-4 mb-2"
|
||||
class="center font-medium text-sm link-blue mt-4 mb-2"
|
||||
onclick="${event => {
|
||||
event.stopPropagation();
|
||||
emit('signup-cta', 'drop');
|
||||
|
@ -488,14 +450,14 @@ module.exports.empty = function(state, emit) {
|
|||
`;
|
||||
return html`
|
||||
<send-upload-area
|
||||
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded-default px-6 py-16 h-full w-full dark:border-grey-60"
|
||||
class="flex flex-col items-center justify-center border-2 border-dashed border-grey-transparent rounded px-6 py-16 h-full w-full dark:border-grey-60"
|
||||
onclick="${e => {
|
||||
if (e.target.tagName !== 'LABEL') {
|
||||
document.getElementById('file-upload').click();
|
||||
}
|
||||
}}"
|
||||
>
|
||||
<svg class="w-10 h-10 link-primary">
|
||||
<svg class="w-10 h-10 link-blue">
|
||||
<use xlink:href="/${assets.get('addfiles.svg')}#plus" />
|
||||
</svg>
|
||||
<div class="pt-6 pb-2 text-center text-lg font-bold tracking-wide">
|
||||
|
@ -526,16 +488,21 @@ module.exports.empty = function(state, emit) {
|
|||
>
|
||||
${state.translate('addFilesButton')}
|
||||
</label>
|
||||
<p
|
||||
class="font-normal text-sm text-grey-50 dark:text-grey-40 my-6 mx-12 text-center max-w-sm leading-loose"
|
||||
>
|
||||
${state.translate('trustWarningMessage')}
|
||||
</p>
|
||||
${upsell}
|
||||
</send-upload-area>
|
||||
`;
|
||||
|
||||
function focus(event) {
|
||||
event.target.nextElementSibling.classList.add('bg-primary', 'outline');
|
||||
event.target.nextElementSibling.classList.add('bg-blue-70', 'outline');
|
||||
}
|
||||
|
||||
function blur(event) {
|
||||
event.target.nextElementSibling.classList.remove('bg-primary', 'outline');
|
||||
event.target.nextElementSibling.classList.remove('bg-blue-70', 'outline');
|
||||
}
|
||||
|
||||
function add(event) {
|
||||
|
@ -561,13 +528,27 @@ module.exports.preview = function(state, emit) {
|
|||
`;
|
||||
return html`
|
||||
<send-archive
|
||||
class="flex flex-col max-h-full bg-white p-4 w-full md:w-128 dark:bg-grey-90"
|
||||
class="flex flex-col max-h-full bg-white w-full dark:bg-grey-90"
|
||||
>
|
||||
<div class="border-default rounded-default py-3 px-6 dark:border-grey-70">
|
||||
<div class="border rounded py-3 px-4 dark:border-grey-70">
|
||||
${archiveInfo(archive)} ${details}
|
||||
</div>
|
||||
<div class="checkbox inline-block mt-6 mx-auto">
|
||||
<input
|
||||
id="trust-download"
|
||||
type="checkbox"
|
||||
autocomplete="off"
|
||||
onchange="${toggleDownloadEnabled}"
|
||||
/>
|
||||
<label for="trust-download">
|
||||
${state.translate('downloadTrustCheckbox', {
|
||||
count: archive.manifest.files.length
|
||||
})}
|
||||
</label>
|
||||
</div>
|
||||
<button
|
||||
id="download-btn"
|
||||
disabled
|
||||
class="btn rounded-lg mt-4 w-full flex-shrink-0 focus:outline"
|
||||
title="${state.translate('downloadButtonLabel')}"
|
||||
onclick=${download}
|
||||
|
@ -577,10 +558,17 @@ module.exports.preview = function(state, emit) {
|
|||
</send-archive>
|
||||
`;
|
||||
|
||||
function toggleDownloadEnabled(event) {
|
||||
event.stopPropagation();
|
||||
const checked = event.target.checked;
|
||||
const btn = document.getElementById('download-btn');
|
||||
btn.disabled = !checked;
|
||||
}
|
||||
|
||||
function download(event) {
|
||||
event.preventDefault();
|
||||
event.target.disabled = true;
|
||||
emit('download');
|
||||
emit('download', archive);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -590,10 +578,10 @@ module.exports.downloading = function(state) {
|
|||
const progressPercent = percent(progress);
|
||||
return html`
|
||||
<send-archive
|
||||
class="flex flex-col bg-white rounded-default shadow-light p-4 w-full max-w-sm md:w-128 dark:bg-grey-90"
|
||||
class="flex flex-col bg-white rounded shadow-light p-4 w-full max-w-sm md:w-128 dark:bg-grey-90"
|
||||
>
|
||||
${archiveInfo(archive)}
|
||||
<div class="link-primary text-sm font-medium mt-2">
|
||||
<div class="link-blue text-sm font-medium mt-2">
|
||||
${progressPercent}
|
||||
</div>
|
||||
<progress class="my-3" value="${progress}">${progressPercent}</progress>
|
||||
|
|
|
@ -1,15 +1,29 @@
|
|||
const html = require('choo/html');
|
||||
const Promo = require('./promo');
|
||||
const Header = require('./header');
|
||||
const Footer = require('./footer');
|
||||
|
||||
function banner(state) {
|
||||
if (state.layout) {
|
||||
return; // server side
|
||||
}
|
||||
const show =
|
||||
!state.capabilities.standalone &&
|
||||
!state.route.startsWith('/unsupported/') &&
|
||||
state.locale === 'en-US';
|
||||
if (show) {
|
||||
return state.cache(Promo, 'promo').render();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function body(main) {
|
||||
return function(state, emit) {
|
||||
const b = html`
|
||||
<body
|
||||
class="flex flex-col items-center font-sans md:h-screen md:bg-grey-10 dark:bg-black"
|
||||
>
|
||||
${state.cache(Header, 'header').render()} ${main(state, emit)}
|
||||
${state.cache(Footer, 'footer').render()}
|
||||
${banner(state, emit)} ${state.cache(Header, 'header').render()}
|
||||
${main(state, emit)} ${state.cache(Footer, 'footer').render()}
|
||||
</body>
|
||||
`;
|
||||
if (state.layout) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
const html = require('choo/html');
|
||||
const { copyToClipboard } = require('../utils');
|
||||
const qr = require('./qr');
|
||||
|
||||
module.exports = function(name, url) {
|
||||
const dialog = function(state, emit, close) {
|
||||
|
@ -11,29 +10,17 @@ module.exports = function(name, url) {
|
|||
<h1 class="text-3xl font-bold my-4">
|
||||
${state.translate('notifyUploadEncryptDone')}
|
||||
</h1>
|
||||
<p
|
||||
class="font-normal leading-normal text-grey-80 word-break-all dark:text-grey-40"
|
||||
>
|
||||
<p class="font-normal leading-normal text-grey-80 dark:text-grey-40">
|
||||
${state.translate('copyLinkDescription')} <br />
|
||||
${name}
|
||||
<span class="word-break-all">${name}</span>
|
||||
</p>
|
||||
<div class="flex flex-row items-center justify-center w-full">
|
||||
<input
|
||||
type="text"
|
||||
id="share-url"
|
||||
class="block w-full my-4 border-default rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
|
||||
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
|
||||
value="${url}"
|
||||
readonly="true"
|
||||
/>
|
||||
<button
|
||||
id="qr-btn"
|
||||
class="w-16 m-1 p-1"
|
||||
onclick="${toggleQR}"
|
||||
title="QR code"
|
||||
>
|
||||
${qr(url)}
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
class="btn rounded-lg w-full flex-shrink-0 focus:outline"
|
||||
onclick="${copy}"
|
||||
|
@ -42,7 +29,7 @@ module.exports = function(name, url) {
|
|||
${state.translate('copyLinkButton')}
|
||||
</button>
|
||||
<button
|
||||
class="link-primary my-4 font-medium cursor-pointer focus:outline"
|
||||
class="link-blue my-4 font-medium cursor-pointer focus:outline"
|
||||
onclick="${close}"
|
||||
title="${state.translate('okButton')}"
|
||||
>
|
||||
|
@ -51,19 +38,6 @@ module.exports = function(name, url) {
|
|||
</send-copy-dialog>
|
||||
`;
|
||||
|
||||
function toggleQR(event) {
|
||||
event.stopPropagation();
|
||||
const shareUrl = document.getElementById('share-url');
|
||||
const qrBtn = document.getElementById('qr-btn');
|
||||
if (shareUrl.classList.contains('hidden')) {
|
||||
shareUrl.classList.replace('hidden', 'block');
|
||||
qrBtn.classList.replace('w-48', 'w-16');
|
||||
} else {
|
||||
shareUrl.classList.replace('block', 'hidden');
|
||||
qrBtn.classList.replace('w-16', 'w-48');
|
||||
}
|
||||
}
|
||||
|
||||
function copy(event) {
|
||||
event.stopPropagation();
|
||||
copyToClipboard(url);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/* global downloadMetadata */
|
||||
const html = require('choo/html');
|
||||
const assets = require('../../common/assets');
|
||||
const archiveTile = require('./archiveTile');
|
||||
const modal = require('./modal');
|
||||
const noStreams = require('./noStreams');
|
||||
|
@ -31,22 +32,51 @@ function downloading(state, emit) {
|
|||
}
|
||||
|
||||
function preview(state, emit) {
|
||||
if (!state.capabilities.streamDownload && state.fileInfo.size > BIG_SIZE) {
|
||||
return noStreams(state, emit);
|
||||
}
|
||||
if (state.fileInfo.flagged) {
|
||||
return html`
|
||||
<div
|
||||
class="flex flex-col w-full max-w-md h-full mx-auto items-center justify-center"
|
||||
>
|
||||
<h1 class="text-3xl font-bold mb-4">
|
||||
<h1 class="text-xl font-bold">${state.translate('downloadFlagged')}</h1>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
if (!state.capabilities.streamDownload && state.fileInfo.size > BIG_SIZE) {
|
||||
return noStreams(state, emit);
|
||||
}
|
||||
return html`
|
||||
<div class="w-full md:flex md:flex-row items-stretch md:flex-1">
|
||||
<div
|
||||
class="px-2 w-full md:px-0 flex-half md:flex md:flex-col mt-12 md:pr-8 pb-4"
|
||||
>
|
||||
<h1 class="text-3xl font-bold mb-4 text-center md:text-left">
|
||||
${state.translate('downloadTitle')}
|
||||
</h1>
|
||||
<p
|
||||
class="w-full text-grey-80 text-center leading-normal dark:text-grey-40"
|
||||
class="text-grey-80 leading-normal dark:text-grey-40 mb-4 text-center md:text-left"
|
||||
>
|
||||
${state.translate('downloadDescription')}
|
||||
</p>
|
||||
<p
|
||||
class="text-grey-80 leading-normal dark:text-grey-40 font-semibold text-center md:mb-8 md:text-left"
|
||||
>
|
||||
${state.translate('downloadConfirmDescription')}
|
||||
</p>
|
||||
<img
|
||||
class="hidden md:block dl-bg w-full"
|
||||
src="${assets.get('intro.svg')}"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="w-full flex-half flex-half md:flex md:flex-col md:justify-center"
|
||||
>
|
||||
${archiveTile.preview(state, emit)}
|
||||
<a href="/report" class="link-blue mt-4 text-center block"
|
||||
>${state.translate('reportFile', {
|
||||
count: state.fileInfo.manifest.files.length
|
||||
})}</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
@ -64,6 +94,10 @@ module.exports = function(state, emit) {
|
|||
}
|
||||
}
|
||||
|
||||
if (state.fileInfo.dead) {
|
||||
return notFound(state);
|
||||
}
|
||||
|
||||
if (!state.transfer && !state.fileInfo.requiresPassword) {
|
||||
emit('getMetadata');
|
||||
}
|
||||
|
@ -87,7 +121,7 @@ module.exports = function(state, emit) {
|
|||
<main class="main">
|
||||
${state.modal && modal(state, emit)}
|
||||
<section
|
||||
class="relative h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big"
|
||||
class="relative overflow-hidden h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big md:flex md:flex-col"
|
||||
>
|
||||
${content}
|
||||
</section>
|
||||
|
|
|
@ -11,9 +11,7 @@ module.exports = function(state) {
|
|||
<h1 class="text-center text-3xl font-bold my-2">
|
||||
${state.translate('downloadFinish')}
|
||||
</h1>
|
||||
<svg class="my-8 h-48 text-primary">
|
||||
<use xlink:href="${assets.get('completed.svg')}#Page-1" />
|
||||
</svg>
|
||||
<img src="${assets.get('completed.svg')}" class="my-8 h-48" />
|
||||
<p
|
||||
class="text-grey-80 leading-normal dark:text-grey-40 ${state.user
|
||||
.loggedIn
|
||||
|
@ -27,6 +25,9 @@ module.exports = function(state) {
|
|||
>${state.translate(btnText)}</a
|
||||
>
|
||||
</p>
|
||||
<p class="">
|
||||
<a href="/report" class="link-blue">${state.translate('reportFile')}</a>
|
||||
</p>
|
||||
</div>
|
||||
`;
|
||||
};
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
const html = require('choo/html');
|
||||
|
||||
module.exports = function() {
|
||||
return function(state, emit, close) {
|
||||
const archive = state.fileInfo;
|
||||
return html`
|
||||
<send-download-dialog
|
||||
class="flex flex-col w-full max-w-sm h-full mx-auto items-center justify-center"
|
||||
>
|
||||
<h1 class="text-3xl font-bold mb-4">
|
||||
${state.translate('downloadConfirmTitle')}
|
||||
</h1>
|
||||
<p
|
||||
class="w-full text-grey-80 text-center leading-normal dark:text-grey-40 mb-8"
|
||||
>
|
||||
${state.translate('downloadConfirmDescription')}
|
||||
</p>
|
||||
<div class="checkbox inline-block mr-3 mb-8">
|
||||
<input
|
||||
id="trust-download"
|
||||
type="checkbox"
|
||||
autocomplete="off"
|
||||
onchange="${toggleDownloadEnabled}"
|
||||
/>
|
||||
<label for="trust-download">
|
||||
${state.translate('downloadTrustCheckbox')}
|
||||
</label>
|
||||
</div>
|
||||
<button
|
||||
id="download-btn"
|
||||
disabled
|
||||
class="btn rounded-lg w-full flex-shrink-0"
|
||||
onclick="${download}"
|
||||
title="${state.translate('downloadButtonLabel')}"
|
||||
>
|
||||
${state.translate('downloadButtonLabel')}
|
||||
</button>
|
||||
<a href="/report" class="link-blue mt-8"
|
||||
>${state.translate('reportFile')}</a
|
||||
>
|
||||
</send-download-dialog>
|
||||
`;
|
||||
|
||||
function toggleDownloadEnabled(event) {
|
||||
event.stopPropagation();
|
||||
const checked = event.target.checked;
|
||||
const btn = document.getElementById('download-btn');
|
||||
btn.disabled = !checked;
|
||||
}
|
||||
|
||||
function download(event) {
|
||||
event.preventDefault();
|
||||
close();
|
||||
event.target.disabled = true;
|
||||
emit('download', archive);
|
||||
}
|
||||
};
|
||||
};
|
|
@ -17,7 +17,7 @@ module.exports = function(state, emit) {
|
|||
${state.translate('downloadDescription')}
|
||||
</p>
|
||||
<form
|
||||
class="flex flex-row flex-nowrap w-full md:w-4/5"
|
||||
class="flex flex-row flex-no-wrap w-full md:w-4/5"
|
||||
onsubmit="${checkPassword}"
|
||||
data-no-csrf
|
||||
>
|
||||
|
@ -32,7 +32,7 @@ module.exports = function(state, emit) {
|
|||
class="w-full border-l border-t border-b rounded-l-lg rounded-r-none ${invalid
|
||||
? 'border-red dark:border-red-40'
|
||||
: 'border-grey'} leading-loose px-2 py-1 dark:bg-grey-80"
|
||||
maxlength="4096"
|
||||
maxlength="32"
|
||||
autocomplete="off"
|
||||
placeholder="${state.translate('unlockInputPlaceholder')}"
|
||||
oninput="${inputChanged}"
|
||||
|
|
|
@ -13,9 +13,7 @@ module.exports = function(state, emit) {
|
|||
<h1 class="text-center text-3xl font-bold my-2">
|
||||
${state.translate('errorPageHeader')}
|
||||
</h1>
|
||||
<svg class="text-primary my-12 h-48">
|
||||
<use xlink:href="${assets.get('error.svg')}#svg114" />
|
||||
</svg>
|
||||
<img class="my-12 h-48" src="${assets.get('error.svg')}" />
|
||||
<p
|
||||
class="max-w-md text-center text-grey-80 leading-normal dark:text-grey-40 ${state
|
||||
.user.loggedIn
|
||||
|
|
|
@ -31,11 +31,12 @@ module.exports = function(state, emit) {
|
|||
counts,
|
||||
num => state.translate('downloadCount', { num }),
|
||||
value => {
|
||||
const selected = parseInt(value);
|
||||
state.archive.dlimit = selected;
|
||||
const max = state.user.maxDownloads;
|
||||
state.archive.dlimit = Math.min(value, max);
|
||||
if (value > max) {
|
||||
emit('signup-cta', 'count');
|
||||
} else {
|
||||
emit('render');
|
||||
if (selected > parseInt(state.user.maxDownloads || '0')) {
|
||||
console.log('Chosen max download count is larger than the allowed limit', selected)
|
||||
}
|
||||
},
|
||||
'expire-after-dl-count-select'
|
||||
|
@ -57,11 +58,12 @@ module.exports = function(state, emit) {
|
|||
return state.translate(l10n.id, l10n);
|
||||
},
|
||||
value => {
|
||||
const selected = parseInt(value);
|
||||
state.archive.timeLimit = selected;
|
||||
const max = state.user.maxExpireSeconds;
|
||||
state.archive.timeLimit = Math.min(value, max);
|
||||
if (value > max) {
|
||||
emit('signup-cta', 'time');
|
||||
} else {
|
||||
emit('render');
|
||||
if (selected > parseInt(state.user.maxExpireSeconds || '0')) {
|
||||
console.log('Chosen download expiration is larger than the allowed limit', selected)
|
||||
}
|
||||
},
|
||||
'expire-after-time-select'
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
/*global WEB_UI*/
|
||||
|
||||
const { platform } = require('../utils');
|
||||
const assets = require('../../common/assets');
|
||||
|
||||
const size = 32;
|
||||
const loaderWidth = 5;
|
||||
const loaderColor = WEB_UI.COLORS.PRIMARY;
|
||||
|
||||
function drawCircle(canvas, context, color, lineWidth, outerWidth, percent) {
|
||||
canvas.width = canvas.height = outerWidth;
|
||||
context.translate(outerWidth * 0.5, outerWidth * 0.5);
|
||||
context.rotate(-Math.PI * 0.5);
|
||||
const radius = (outerWidth - lineWidth) * 0.5;
|
||||
context.beginPath();
|
||||
context.arc(0, 0, radius, 0, Math.PI * 2 * percent, false);
|
||||
context.strokeStyle = color;
|
||||
context.lineCap = 'square';
|
||||
context.lineWidth = lineWidth;
|
||||
context.stroke();
|
||||
}
|
||||
|
||||
function drawNewFavicon(progressRatio) {
|
||||
const canvas = document.createElement('canvas');
|
||||
const context = canvas.getContext('2d');
|
||||
drawCircle(canvas, context, '#efefef', loaderWidth, size, 1);
|
||||
drawCircle(canvas, context, loaderColor, loaderWidth, size, progressRatio);
|
||||
return canvas.toDataURL();
|
||||
}
|
||||
|
||||
module.exports.updateFavicon = function(progressRatio) {
|
||||
if (platform() === 'web') {
|
||||
const link = document.querySelector("link[rel='icon'][sizes='32x32']");
|
||||
const progress = progressRatio * 100;
|
||||
if (progress === 0 || progress === 100) {
|
||||
link.type = 'image/png';
|
||||
link.href =
|
||||
WEB_UI.CUSTOM_ASSETS.favicon_32px !== ''
|
||||
? WEB_UI.CUSTOM_ASSETS.favicon_32px
|
||||
: assets.get('favicon-32x32.png');
|
||||
return;
|
||||
}
|
||||
|
||||
link.href = drawNewFavicon(progressRatio);
|
||||
}
|
||||
};
|
116
app/ui/footer.js
|
@ -13,110 +13,32 @@ class Footer extends Component {
|
|||
|
||||
createElement() {
|
||||
const translate = this.state.translate;
|
||||
|
||||
// Add additional links from configuration if available
|
||||
var links = [];
|
||||
if (this.state != undefined && this.state.WEB_UI != undefined) {
|
||||
const WEB_UI = this.state.WEB_UI;
|
||||
|
||||
if (WEB_UI.FOOTER_DONATE_URL != '') {
|
||||
links.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.FOOTER_DONATE_URL}" target="_blank">
|
||||
${translate('footerLinkDonate')}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
if (WEB_UI.FOOTER_CLI_URL != '') {
|
||||
links.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.FOOTER_CLI_URL}" target="_blank">
|
||||
${translate('footerLinkCli')}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
if (WEB_UI.FOOTER_DMCA_URL != '') {
|
||||
links.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.FOOTER_DMCA_URL}" target="_blank">
|
||||
${translate('footerLinkDmca')}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
if (WEB_UI.FOOTER_SOURCE_URL != '') {
|
||||
links.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.FOOTER_SOURCE_URL}" target="_blank">
|
||||
${translate('footerLinkSource')}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
} else {
|
||||
links.push(html`
|
||||
<li class="m-2">
|
||||
<a href="https://gitlab.com/timvisee/send" target="_blank">
|
||||
${translate('footerLinkSource')}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
|
||||
// Defining a custom footer
|
||||
var footer = [];
|
||||
if (this.state != undefined && this.state.WEB_UI != undefined) {
|
||||
const WEB_UI = this.state.WEB_UI;
|
||||
|
||||
if (WEB_UI.CUSTOM_FOOTER_URL != '' && WEB_UI.CUSTOM_FOOTER_TEXT != '') {
|
||||
footer.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.CUSTOM_FOOTER_URL}" target="_blank">
|
||||
${WEB_UI.CUSTOM_FOOTER_TEXT}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
else if (WEB_UI.CUSTOM_FOOTER_URL != '') {
|
||||
footer.push(html`
|
||||
<li class="m-2">
|
||||
<a href="${WEB_UI.CUSTOM_FOOTER_URL}" target="_blank">
|
||||
${WEB_UI.CUSTOM_FOOTER_URL}
|
||||
</a>
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
else if (WEB_UI.CUSTOM_FOOTER_TEXT != '') {
|
||||
footer.push(html`
|
||||
<li class="m-2">
|
||||
${WEB_UI.CUSTOM_FOOTER_TEXT}
|
||||
</li>
|
||||
`)
|
||||
}
|
||||
else {
|
||||
footer.push(html`
|
||||
<li class="m-2">
|
||||
${translate('footerText')}
|
||||
</li>
|
||||
`);
|
||||
}
|
||||
}
|
||||
|
||||
return html`
|
||||
<footer
|
||||
class="flex flex-col md:flex-row items-start w-full flex-none self-start p-6 md:p-8 font-medium text-xs text-grey-60 dark:text-grey-40 md:items-center justify-between"
|
||||
>
|
||||
<ul
|
||||
class="flex flex-col md:flex-row items-start md:items-center md:justify-start"
|
||||
>
|
||||
${footer}
|
||||
</ul>
|
||||
<a class="mozilla-logo m-2" href="https://www.mozilla.org/">
|
||||
Mozilla
|
||||
</a>
|
||||
<ul
|
||||
class="flex flex-col md:flex-row items-start md:items-center md:justify-end"
|
||||
>
|
||||
${links}
|
||||
<li class="m-2">
|
||||
<a href="https://www.mozilla.org/about/legal/terms/services/#send">
|
||||
${translate('footerLinkLegal')}
|
||||
</a>
|
||||
</li>
|
||||
<li class="m-2">
|
||||
<a href="/legal"> ${translate('footerLinkPrivacy')} </a>
|
||||
</li>
|
||||
<li class="m-2">
|
||||
<a href="https://www.mozilla.org/privacy/websites/#cookies">
|
||||
${translate('footerLinkCookies')}
|
||||
</a>
|
||||
</li>
|
||||
<li class="m-2">
|
||||
<a href="https://github.com/mozilla/send">GitHub </a>
|
||||
</li>
|
||||
</ul>
|
||||
</footer>
|
||||
`;
|
||||
|
|
|
@ -16,28 +16,14 @@ class Header extends Component {
|
|||
this.account.render();
|
||||
return false;
|
||||
}
|
||||
|
||||
createElement() {
|
||||
let assetMap = {};
|
||||
if (this.state.ui !== undefined) assetMap = this.state.ui.assets;
|
||||
else
|
||||
assetMap = {
|
||||
icon:
|
||||
this.state.WEB_UI.CUSTOM_ASSETS.icon !== ''
|
||||
? this.state.WEB_UI.CUSTOM_ASSETS.icon
|
||||
: assets.get('icon.svg'),
|
||||
wordmark:
|
||||
this.state.WEB_UI.CUSTOM_ASSETS.wordmark !== ''
|
||||
? this.state.WEB_UI.CUSTOM_ASSETS.wordmark
|
||||
: assets.get('wordmark.svg') + '#logo'
|
||||
};
|
||||
const title =
|
||||
platform() === 'android'
|
||||
? html`
|
||||
<a class="flex flex-row items-center">
|
||||
<img src="${assetMap.icon}" />
|
||||
<img src="${assets.get('icon.svg')}" />
|
||||
<svg class="w-48">
|
||||
<use xlink:href="${assetMap.wordmark}" />
|
||||
<use xlink:href="${assets.get('wordmark.svg')}#logo" />
|
||||
</svg>
|
||||
</a>
|
||||
`
|
||||
|
@ -45,10 +31,10 @@ class Header extends Component {
|
|||
<a class="flex flex-row items-center" href="/">
|
||||
<img
|
||||
alt="${this.state.translate('title')}"
|
||||
src="${assetMap.icon}"
|
||||
src="${assets.get('icon.svg')}"
|
||||
/>
|
||||
<svg viewBox="66 0 340 64" class="w-48 md:w-64">
|
||||
<use xlink:href="${assetMap.wordmark}" />
|
||||
<use xlink:href="${assets.get('wordmark.svg')}#logo" />
|
||||
</svg>
|
||||
</a>
|
||||
`;
|
||||
|
|
|
@ -5,6 +5,9 @@ const modal = require('./modal');
|
|||
const intro = require('./intro');
|
||||
|
||||
module.exports = function(state, emit) {
|
||||
if (state.user.loginRequired && !state.user.loggedIn) {
|
||||
emit('signup-cta', 'required');
|
||||
}
|
||||
const archives = state.storage.files
|
||||
.filter(archive => !archive.expired)
|
||||
.map(archive => archiveTile(state, emit, archive));
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
const html = require('choo/html');
|
||||
const assets = require('../../common/assets');
|
||||
|
||||
module.exports = function intro(state) {
|
||||
return html`
|
||||
|
@ -12,6 +13,7 @@ module.exports = function intro(state) {
|
|||
<p class="max-w-sm leading-loose mt-6 md:mt-2 md:pr-14">
|
||||
${state.translate('introDescription')}
|
||||
</p>
|
||||
<img class="intro" src="${assets.get('intro.svg')}" />
|
||||
</div>
|
||||
</send-intro>
|
||||
`;
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
const html = require('choo/html');
|
||||
const modal = require('./modal');
|
||||
|
||||
module.exports = function(state, emit) {
|
||||
state.modal = null;
|
||||
return html`
|
||||
<main class="main">
|
||||
${state.modal && modal(state, emit)}
|
||||
<div
|
||||
class="flex flex-col items-center bg-white m-4 px-6 py-8 border border-grey-30 md:border-none md:px-12 md:py-16 shadow w-full md:h-full dark:bg-grey-90"
|
||||
>
|
||||
<h1 class="text-center text-3xl font-bold">
|
||||
${state.translate('legalTitle')}
|
||||
</h1>
|
||||
<p class="mt-2">${state.translate('legalDateStamp')}</p>
|
||||
<div class="overflow-y-scroll py-8 px-12">
|
||||
<p class="leading-normal">
|
||||
<span>When Mozilla receives information from you, our</span>
|
||||
<a
|
||||
href="https://www.mozilla.org/privacy/"
|
||||
target="__blank"
|
||||
rel="noopener noreferrer"
|
||||
class="link-blue hover:underline"
|
||||
>Mozilla Privacy Policy</a
|
||||
>
|
||||
<span
|
||||
>describes how we handle that information. Below are the top
|
||||
things you should know about Firefox Send. You can also view the
|
||||
code</span
|
||||
>
|
||||
<a
|
||||
href="https://github.com/mozilla/send/blob/master/docs/metrics.md"
|
||||
target="__blank"
|
||||
rel="noopener noreferrer"
|
||||
class="link-blue hover:underline"
|
||||
>here</a
|
||||
>.
|
||||
</p>
|
||||
<ul class="mt-6 leading-normal">
|
||||
<li class="mb-4">
|
||||
<b>Content</b>: Mozilla receives an encrypted copy of the file you
|
||||
upload but we cannot access the content or name of your encrypted
|
||||
file. By default, files are stored for a maximum of either 24
|
||||
hours or 7 days. If you choose a download cap, the file can be
|
||||
deleted from our server sooner.
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<b>Data on your device</b>: So that you can check status or delete
|
||||
files, basic information about your uploaded files is stored on
|
||||
your local device. This includes our identifier for the file, the
|
||||
filename, and the file’s unique download URL. This is cleared if
|
||||
you delete your uploaded file or upon visiting Send after the file
|
||||
expires. Note, however, that the URL will persist in your browsing
|
||||
history (and with whomever you shared it) until manually deleted.
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<b>Personal data</b>: The following is necessary to provide the
|
||||
service:
|
||||
<ul class="mt-6 leading-normal">
|
||||
<li class="mb-4">
|
||||
<u>IP addresses</u>: We receive IP addresses of downloaders
|
||||
and uploaders as part of our standard server logs. These are
|
||||
retained for 90 days, and for that period, may be connected to
|
||||
activity of a file’s download URL. Although we develop our
|
||||
services in ways that minimize identification, you should know
|
||||
that it may be possible to correlate the IP address of a Send
|
||||
user to the IP address of other Mozilla services with
|
||||
accounts; and if there is a match, this could identify the
|
||||
account email address.
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<u>Firefox Account</u>: This is required for authentication
|
||||
only if you wish to upload larger file sizes. Your Firefox
|
||||
Account record will retain aggregate data on your usage of
|
||||
Send: for example, if you created a Firefox Account in
|
||||
connection with Send, number of files sent and approximate
|
||||
file sizes, and how many times you’ve used the service.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<b>Non-personal data</b>: We receive the following to improve our
|
||||
service and performance:
|
||||
<ul class="mt-6 leading-normal">
|
||||
<li class="mb-4">
|
||||
<u>Interaction data</u>: This includes information such as
|
||||
number of people sending and receiving files, number of files
|
||||
uploaded and approximate file sizes, percentage of file
|
||||
downloaders who become uploaders, how people engage with the
|
||||
website (time spent, clicks, referrer information, site exit
|
||||
path, use of passwords).
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<u>Technical data</u>: This includes information such as
|
||||
operating system, browser, language preference, country,
|
||||
timestamps, duration for file transfer, reasons for errors,
|
||||
reasons for file expiration.
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="mb-4">
|
||||
<b>Third Party Services</b>: We use Google Cloud Platform.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
`;
|
||||
};
|
|
@ -12,14 +12,14 @@ module.exports = function(state, emit) {
|
|||
'downloadTitle'
|
||||
)}</h1>
|
||||
<p
|
||||
class="w-full p-2 border-default border-yellow-50 rounded-default md:w-4/5 text-orange-60 bg-yellow-40 text-center leading-normal"
|
||||
class="w-full p-2 border border-yellow-50 rounded md:w-4/5 text-orange-60 bg-yellow-40 text-center leading-normal"
|
||||
>
|
||||
⚠️ ${state.translate('noStreamsWarning')} ⚠️
|
||||
</p>
|
||||
<form class="md:w-128" onsubmit=${submit}>
|
||||
<fieldset class="border-default rounded-default p-4 my-4" onchange=${optionChanged}>
|
||||
<fieldset class="border rounded p-4 my-4" onchange=${optionChanged}>
|
||||
<div class="flex items-center mb-2">
|
||||
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-primary">
|
||||
<svg class="h-8 w-6 mr-3 flex-shrink-0 text-white dark:text-grey-90">
|
||||
<use xlink:href="${assets.get('blue_file.svg')}#icon"/>
|
||||
</svg>
|
||||
<p class="flex-grow">
|
||||
|
@ -100,7 +100,7 @@ module.exports = function(state, emit) {
|
|||
);
|
||||
break;
|
||||
case 'download':
|
||||
emit('download');
|
||||
emit('download', archive);
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -13,9 +13,7 @@ module.exports = function(state, emit) {
|
|||
<h1 class="text-center text-3xl font-bold my-2">
|
||||
${state.translate('expiredTitle')}
|
||||
</h1>
|
||||
<svg class="text-primary my-12">
|
||||
<use xlink:href="${assets.get('notFound.svg')}#svg124" />
|
||||
</svg>
|
||||
<img src="${assets.get('notFound.svg')}" class="my-12" />
|
||||
<p
|
||||
class="max-w-md text-center text-grey-80 leading-normal dark:text-grey-40 ${state
|
||||
.user.loggedIn
|
||||
|
@ -29,6 +27,11 @@ module.exports = function(state, emit) {
|
|||
>${state.translate(btnText)}</a
|
||||
>
|
||||
</p>
|
||||
<p class="">
|
||||
<a href="/report" class="link-blue"
|
||||
>${state.translate('reportFile')}</a
|
||||
>
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
`;
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
const html = require('choo/html');
|
||||
const Component = require('choo/component');
|
||||
const assets = require('../../common/assets');
|
||||
|
||||
class Promo extends Component {
|
||||
constructor(name, state) {
|
||||
super(name);
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
update() {
|
||||
return false;
|
||||
}
|
||||
|
||||
createElement() {
|
||||
return html`
|
||||
<send-promo
|
||||
class="w-full flex-row items-center content-center justify-center bg-white text-grey-80 px-4 py-3 flex border-b border-grey-banner leading-normal dark:bg-grey-90 dark:text-grey-20 dark:border-grey-80"
|
||||
>
|
||||
<div class="flex items-center mx-auto">
|
||||
<img
|
||||
src="${assets.get('master-logo.svg')}"
|
||||
class="w-6 h-6"
|
||||
alt="Firefox"
|
||||
/>
|
||||
<span class="ml-2 sm:ml-4 text-xs sm:text-base">
|
||||
${`Like Firefox Send? You'll love our new full-device VPN. `}
|
||||
<a
|
||||
class="underline link-blue"
|
||||
href="https://vpn.mozilla.org/?utm_source=send.firefox.com&utm_medium=referral&utm_content=Try+Firefox+Private+Network&utm_campaign=top-bar"
|
||||
>${`Get it today`}</a
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</send-promo>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Promo;
|
10
app/ui/qr.js
|
@ -1,10 +0,0 @@
|
|||
const raw = require('choo/html/raw');
|
||||
const qrcode = require('../qrcode');
|
||||
|
||||
module.exports = function(url) {
|
||||
const gen = qrcode(0, 'L');
|
||||
gen.addData(url);
|
||||
gen.make();
|
||||
const qr = gen.createSvgTag({ scalable: true });
|
||||
return raw(qr);
|
||||
};
|
|
@ -0,0 +1,139 @@
|
|||
const html = require('choo/html');
|
||||
const raw = require('choo/html/raw');
|
||||
const assets = require('../../common/assets');
|
||||
|
||||
const REPORTABLES = ['Malware', 'Pii', 'Abuse'];
|
||||
|
||||
module.exports = function(state, emit) {
|
||||
let submitting = false;
|
||||
const file = state.fileInfo;
|
||||
if (!file) {
|
||||
return html`
|
||||
<main class="main">
|
||||
<section
|
||||
class="flex flex-col items-center justify-center h-full w-full p-6 md:p-8 overflow-hidden md:rounded-xl md:shadow-big"
|
||||
>
|
||||
<p class="text-xl text-center mb-4 leading-normal">
|
||||
${state.translate('reportUnknownDescription')}
|
||||
</p>
|
||||
<p class="text-center">
|
||||
${raw(
|
||||
replaceLinks(state.translate('reportReasonCopyright'), [
|
||||
'https://www.mozilla.org/about/legal/report-infringement/'
|
||||
])
|
||||
)}
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
`;
|
||||
}
|
||||
if (file.reported) {
|
||||
return html`
|
||||
<main class="main">
|
||||
<section
|
||||
class="flex flex-col items-center justify-center h-full w-full p-6 md:p-8 overflow-hidden md:rounded-xl md:shadow-big"
|
||||
>
|
||||
<h1 class="text-center text-3xl font-bold my-2">
|
||||
${state.translate('reportedTitle')}
|
||||
</h1>
|
||||
<p class="max-w-md text-center leading-normal">
|
||||
${state.translate('reportedDescription')}
|
||||
</p>
|
||||
<img src="${assets.get('notFound.svg')}" class="my-12" />
|
||||
<p class="my-5">
|
||||
<a href="/" class="btn rounded-lg flex items-center" role="button"
|
||||
>${state.translate('okButton')}</a
|
||||
>
|
||||
</p>
|
||||
</section>
|
||||
</main>
|
||||
`;
|
||||
}
|
||||
return html`
|
||||
<main class="main">
|
||||
<section
|
||||
class="relative h-full w-full p-6 md:p-8 md:rounded-xl md:shadow-big"
|
||||
>
|
||||
<div
|
||||
class="flex flex-col w-full max-w-sm h-full mx-auto items-center justify-center"
|
||||
>
|
||||
<h1 class="text-2xl font-bold mb-4">
|
||||
${state.translate('reportFile')}
|
||||
</h1>
|
||||
<p class="mb-4 leading-normal font-semibold">
|
||||
${state.translate('reportDescription')}
|
||||
</p>
|
||||
<form onsubmit="${report}" data-no-csrf>
|
||||
<fieldset onchange="${optionChanged}">
|
||||
<ul
|
||||
class="list-none p-4 mb-6 rounded-sm bg-grey-10 dark:bg-black"
|
||||
>
|
||||
${REPORTABLES.map(
|
||||
reportable =>
|
||||
html`
|
||||
<li class="mb-2 leading-normal">
|
||||
<label
|
||||
for="${reportable.toLowerCase()}"
|
||||
class="flex items-center"
|
||||
>
|
||||
<input
|
||||
type="radio"
|
||||
name="reason"
|
||||
id="${reportable.toLowerCase()}"
|
||||
value="${reportable.toLowerCase()}"
|
||||
class="mr-2 my-2 w-4 h-4 flex-none"
|
||||
/>
|
||||
${state.translate(`reportReason${reportable}`)}
|
||||
</label>
|
||||
</li>
|
||||
`
|
||||
)}
|
||||
<li class="mt-4 mb-2 leading-normal">
|
||||
${raw(
|
||||
replaceLinks(state.translate('reportReasonCopyright'), [
|
||||
'https://www.mozilla.org/about/legal/report-infringement/'
|
||||
])
|
||||
)}
|
||||
</li>
|
||||
</ul>
|
||||
</fieldset>
|
||||
<input
|
||||
type="submit"
|
||||
disabled
|
||||
class="btn rounded-lg w-full flex-shrink-0 focus:outline"
|
||||
title="${state.translate('reportButton')}"
|
||||
value="${state.translate('reportButton')}"
|
||||
/>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
`;
|
||||
|
||||
function optionChanged(event) {
|
||||
event.stopPropagation();
|
||||
const button = event.currentTarget.nextElementSibling;
|
||||
button.disabled = false;
|
||||
}
|
||||
|
||||
function report(event) {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
if (submitting) {
|
||||
return;
|
||||
}
|
||||
submitting = true;
|
||||
state.fileInfo.reported = true;
|
||||
const form = event.target;
|
||||
emit('report', { reason: form.reason.value });
|
||||
}
|
||||
|
||||
function replaceLinks(str, urls) {
|
||||
let i = 0;
|
||||
const s = str.replace(
|
||||
/<a>([^<]+)<\/a>/g,
|
||||
(m, v) => `<a class="text-blue" href="${urls[i++]}">${v}</a>`
|
||||
);
|
||||
return `<p>${s}</p>`;
|
||||
}
|
||||
};
|
|
@ -1,35 +1,32 @@
|
|||
const html = require('choo/html');
|
||||
|
||||
module.exports = function(selected, options, translate, changed, htmlId) {
|
||||
function choose(event) {
|
||||
if (event.target.value != selected) {
|
||||
console.log(
|
||||
'Selected new value from dropdown',
|
||||
htmlId,
|
||||
':',
|
||||
selected,
|
||||
'->',
|
||||
event.target.value
|
||||
);
|
||||
changed(event.target.value);
|
||||
}
|
||||
}
|
||||
let x = selected;
|
||||
|
||||
return html`
|
||||
<select
|
||||
id="${htmlId}"
|
||||
class="appearance-none cursor-pointer border-default rounded-default bg-grey-10 hover:border-primary focus:border-primary pl-1 pr-8 py-1 my-1 h-8 dark:bg-grey-80"
|
||||
data-selected="${selected}"
|
||||
class="appearance-none cursor-pointer border rounded bg-grey-10 hover:border-blue-50 focus:border-blue-50 pl-1 pr-8 py-1 my-1 h-8 dark:bg-grey-80"
|
||||
onchange="${choose}"
|
||||
>
|
||||
${options.map(
|
||||
value =>
|
||||
i =>
|
||||
html`
|
||||
<option value="${value}" ${value == selected ? 'selected' : ''}>
|
||||
${translate(value)}
|
||||
</option>
|
||||
<option value="${i}" ${i === selected ? 'selected' : ''}
|
||||
>${translate(i)}</option
|
||||
>
|
||||
`
|
||||
)}
|
||||
</select>
|
||||
`;
|
||||
|
||||
function choose(event) {
|
||||
const target = event.target;
|
||||
const value = +target.value;
|
||||
|
||||
if (x !== value) {
|
||||
x = value;
|
||||
changed(value);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -9,16 +9,14 @@ module.exports = function(name, url) {
|
|||
<h1 class="text-3xl font-bold my-4">
|
||||
${state.translate('notifyUploadEncryptDone')}
|
||||
</h1>
|
||||
<p
|
||||
class="font-normal leading-normal text-grey-80 word-break-all dark:text-grey-40"
|
||||
>
|
||||
<p class="font-normal leading-normal text-grey-80 dark:text-grey-40">
|
||||
${state.translate('shareLinkDescription')}<br />
|
||||
${name}
|
||||
<span class="word-break-all">${name}</span>
|
||||
</p>
|
||||
<input
|
||||
type="text"
|
||||
id="share-url"
|
||||
class="w-full my-4 border-default rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
|
||||
class="w-full my-4 border rounded-lg leading-loose h-12 px-2 py-1 dark:bg-grey-80"
|
||||
value="${url}"
|
||||
readonly="true"
|
||||
/>
|
||||
|
@ -30,7 +28,7 @@ module.exports = function(name, url) {
|
|||
${state.translate('shareLinkButton')}
|
||||
</button>
|
||||
<button
|
||||
class="link-primary my-4 font-medium cursor-pointer focus:outline"
|
||||
class="link-blue my-4 font-medium cursor-pointer focus:outline"
|
||||
onclick="${close}"
|
||||
title="${state.translate('okButton')}"
|
||||
>
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
const html = require('choo/html');
|
||||
const assets = require('../../common/assets');
|
||||
const { bytes } = require('../utils');
|
||||
const { canceledSignup, submittedSignup } = require('../metrics');
|
||||
|
||||
module.exports = function() {
|
||||
module.exports = function(trigger) {
|
||||
return function(state, emit, close) {
|
||||
const DAYS = Math.floor(state.LIMITS.MAX_EXPIRE_SECONDS / 86400);
|
||||
let submitting = false;
|
||||
|
@ -35,7 +36,7 @@ module.exports = function() {
|
|||
<input
|
||||
id="email-input"
|
||||
type="email"
|
||||
class="hidden border-default rounded-lg w-full px-2 py-1 h-12 mb-3 text-lg text-grey-70 leading-loose dark:bg-grey-80 dark:text-white"
|
||||
class="hidden border rounded-lg w-full px-2 py-1 h-12 mb-3 text-lg text-grey-70 leading-loose dark:bg-grey-80 dark:text-white"
|
||||
placeholder=${state.translate('emailPlaceholder')}
|
||||
/>
|
||||
<input
|
||||
|
@ -50,7 +51,7 @@ module.exports = function() {
|
|||
? ''
|
||||
: html`
|
||||
<button
|
||||
class="my-3 link-primary font-medium"
|
||||
class="my-3 link-blue font-medium"
|
||||
title="${state.translate('deletePopupCancel')}"
|
||||
onclick=${cancel}
|
||||
>
|
||||
|
@ -71,6 +72,7 @@ module.exports = function() {
|
|||
}
|
||||
|
||||
function cancel(event) {
|
||||
canceledSignup({ trigger });
|
||||
close(event);
|
||||
}
|
||||
|
||||
|
@ -83,6 +85,7 @@ module.exports = function() {
|
|||
|
||||
const el = document.getElementById('email-input');
|
||||
const email = el.value;
|
||||
submittedSignup({ trigger });
|
||||
emit('login', emailish(email) ? email : null);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -17,8 +17,8 @@ module.exports = function() {
|
|||
Tell us what you think.
|
||||
</h1>
|
||||
<p class="font-normal leading-normal text-grey-80 px-4">
|
||||
Love Send? Take a quick survey to let us know how we can make it
|
||||
better.
|
||||
Love Firefox Send? Take a quick survey to let us know how we can make
|
||||
it better.
|
||||
</p>
|
||||
<a
|
||||
class="btn rounded-lg w-full flex-shrink-0 focus:outline my-5"
|
||||
|
@ -30,7 +30,7 @@ module.exports = function() {
|
|||
Give feedback
|
||||
</a>
|
||||
<button
|
||||
class="link-primary font-medium cursor-pointer focus:outline"
|
||||
class="link-blue font-medium cursor-pointer focus:outline"
|
||||
onclick="${close}"
|
||||
title="Skip"
|
||||
>
|
||||
|
|
|
@ -10,8 +10,8 @@ module.exports = function(state, emit) {
|
|||
strings = unsupportedStrings(state);
|
||||
why = html`
|
||||
<a
|
||||
class="text-primary"
|
||||
href="https://github.com/timvisee/send/blob/master/docs/faq.md#why-is-my-browser-not-supported"
|
||||
class="text-blue"
|
||||
href="https://github.com/mozilla/send/blob/master/docs/faq.md#why-is-my-browser-not-supported"
|
||||
>
|
||||
${state.translate('notSupportedLink')}
|
||||
</a>
|
||||
|
@ -27,7 +27,7 @@ module.exports = function(state, emit) {
|
|||
<main class="main">
|
||||
${state.modal && modal(state, emit)}
|
||||
<section
|
||||
class="flex flex-col items-center justify-center text-center bg-white m-6 px-6 py-8 border-default border-grey-30 md:border-none md:px-12 md:py-16 shadow-default w-full md:h-full dark:bg-grey-90"
|
||||
class="flex flex-col items-center justify-center text-center bg-white m-6 px-6 py-8 border border-grey-30 md:border-none md:px-12 md:py-16 shadow w-full md:h-full dark:bg-grey-90"
|
||||
>
|
||||
<h1 class="text-3xl font-bold">${strings.header}</h1>
|
||||
<p class="mt-4 mb-8 max-w-md leading-normal">${strings.description}</p>
|
||||
|
|
35
app/user.js
|
@ -81,15 +81,25 @@ export default class User {
|
|||
}
|
||||
|
||||
get maxSize() {
|
||||
return this.limits.MAX_FILE_SIZE;
|
||||
return this.loggedIn
|
||||
? this.limits.MAX_FILE_SIZE
|
||||
: this.limits.ANON.MAX_FILE_SIZE;
|
||||
}
|
||||
|
||||
get maxExpireSeconds() {
|
||||
return this.limits.MAX_EXPIRE_SECONDS;
|
||||
return this.loggedIn
|
||||
? this.limits.MAX_EXPIRE_SECONDS
|
||||
: this.limits.ANON.MAX_EXPIRE_SECONDS;
|
||||
}
|
||||
|
||||
get maxDownloads() {
|
||||
return this.limits.MAX_DOWNLOADS;
|
||||
return this.loggedIn
|
||||
? this.limits.MAX_DOWNLOADS
|
||||
: this.limits.ANON.MAX_DOWNLOADS;
|
||||
}
|
||||
|
||||
get loginRequired() {
|
||||
return this.authConfig && this.authConfig.fxa_required;
|
||||
}
|
||||
|
||||
async metricId() {
|
||||
|
@ -103,9 +113,28 @@ export default class User {
|
|||
async startAuthFlow(trigger, utms = {}) {
|
||||
this.utms = utms;
|
||||
this.trigger = trigger;
|
||||
try {
|
||||
const params = new URLSearchParams({
|
||||
entrypoint: `send-${trigger}`,
|
||||
form_type: 'email',
|
||||
utm_source: utms.source || 'send',
|
||||
utm_campaign: utms.campaign || 'none'
|
||||
});
|
||||
const res = await fetch(
|
||||
`${this.authConfig.issuer}/metrics-flow?${params.toString()}`,
|
||||
{
|
||||
mode: 'cors'
|
||||
}
|
||||
);
|
||||
const { flowId, flowBeginTime } = await res.json();
|
||||
this.flowId = flowId;
|
||||
this.flowBeginTime = flowBeginTime;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
this.flowId = null;
|
||||
this.flowBeginTime = null;
|
||||
}
|
||||
}
|
||||
|
||||
async login(email) {
|
||||
const state = arrayToB64(crypto.getRandomValues(new Uint8Array(16)));
|
||||
|
|
|
@ -276,7 +276,15 @@ function setTranslate(t) {
|
|||
translate = t;
|
||||
}
|
||||
|
||||
function concat(b1, b2) {
|
||||
const result = new Uint8Array(b1.length + b2.length);
|
||||
result.set(b1, 0);
|
||||
result.set(b2, b1.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
concat,
|
||||
locale,
|
||||
fadeOut,
|
||||
delay,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import crc32 from 'crc/crc32';
|
||||
import crc32 from './crc32';
|
||||
|
||||
const encoder = new TextEncoder();
|
||||
|
||||
|
@ -29,7 +29,7 @@ class File {
|
|||
const v = new DataView(h);
|
||||
v.setUint32(0, 0x04034b50, true); // sig
|
||||
v.setUint16(4, 20, true); // version
|
||||
v.setUint16(6, 0x808, true); // bit flags (use data descriptor(8) + utf8-encoded(8 << 8))
|
||||
v.setUint16(6, 8, true); // bit flags (8 = use data descriptor)
|
||||
v.setUint16(8, 0, true); // compression
|
||||
v.setUint16(10, this.dateTime.time, true); // modified time
|
||||
v.setUint16(12, this.dateTime.date, true); // modified date
|
||||
|
@ -60,7 +60,7 @@ class File {
|
|||
v.setUint32(0, 0x02014b50, true); // sig
|
||||
v.setUint16(4, 20, true); // version made
|
||||
v.setUint16(6, 20, true); // version required
|
||||
v.setUint16(8, 0x808, true); // bit flags (use data descriptor(8) + utf8-encoded(8 << 8))
|
||||
v.setUint16(8, 8, true); // bit flags (8 = use data descriptor)
|
||||
v.setUint16(10, 0, true); // compression
|
||||
v.setUint16(12, this.dateTime.time, true); // modified time
|
||||
v.setUint16(14, this.dateTime.date, true); // modified date
|
||||
|
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 6.8 KiB |
|
@ -1,24 +1,26 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
|
||||
<!--
|
||||
This would be the elegant way, but chrome cannot handle masks in external SVGs.
|
||||
See https://bugs.chromium.org/p/chromium/issues/detail?id=109212
|
||||
-->
|
||||
<!--
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<symbol id="icon" viewBox="0 0 26 32">
|
||||
<g id="Fire-Icon">
|
||||
<mask id="mask">
|
||||
<rect x="0" y="0" width="100" height="100" fill="white"/>
|
||||
<path d="M7.2830232,8.93885547 L8.91906464,8.93885547" stroke="black" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M7.2830232,15.7798836 L17.5412669,15.7798836" stroke="black" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M7.2830232,22.6209117 L17.5412669,22.6209117" stroke="black" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M24.3031318,10.6474633 L16.7826187,10.6474633 C15.2742552,10.6474633 14.051485,9.42469306 14.051485,7.91632957 L14.051485,0.395816478" id="Path" stroke-linecap="square" stroke="black" stroke-width="2" fill="none"/>
|
||||
<defs>
|
||||
<path d="M21.848475,31.6653183 L2.89005487,31.6653183 C1.32717435,31.6653183 0.104050469,30.3742431 0.104050469,28.8793139 L0.104050469,2.7860044 C0.104050469,1.22312388 1.39512568,0 2.89005487,0 L14.7135857,0 C15.4610503,0 16.2085149,0.271805307 16.6841742,0.815415921 L23.8190635,7.95030523 C24.3626741,8.49391584 24.6344794,9.17342911 24.6344794,9.9208937 L24.6344794,28.8793139 C24.6344794,30.3742431 23.4113555,31.6653183 21.848475,31.6653183 Z" id="path-1"></path>
|
||||
</defs>
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Send_Ready_to_Send-Spec" transform="translate(-277.000000, -206.000000)">
|
||||
<g id="List-Item-1" transform="translate(253.000000, 192.000000)">
|
||||
<g id="Locked-File-Icon" transform="translate(24.000000, 14.000000)">
|
||||
<g id="File-Icon">
|
||||
<mask id="mask-2" fill="white">
|
||||
<use xlink:href="#path-1"></use>
|
||||
</mask>
|
||||
<path d="M21.848475,31.6653183 L2.89005487,31.6653183 C1.32717435,31.6653183 0.104050469,30.3742431 0.104050469,28.8793139 L0.104050469,2.7860044 C0.104050469,1.22312388 1.39512568,0 2.89005487,0 L14.7135857,0 C15.4610503,0 16.2085149,0.271805307 16.6841742,0.815415921 L23.8190635,7.95030523 C24.3626741,8.49391584 24.6344794,9.17342911 24.6344794,9.9208937 L24.6344794,28.8793139 C24.6344794,30.3742431 23.4113555,31.6653183 21.848475,31.6653183 Z" id="path-1" fill="currentColor" mask="url(#mask)" />
|
||||
<use id="Mask" fill="#45a1ff" xlink:href="#path-1"></use>
|
||||
<path d="M24.3031318,10.6474633 L16.7826187,10.6474633 C15.2742552,10.6474633 14.051485,9.42469306 14.051485,7.91632957 L14.051485,0.395816478" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
|
||||
<path d="M7.2830232,8.93885547 L8.91906464,8.93885547" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
|
||||
<path d="M7.2830232,15.7798836 L17.5412669,15.7798836" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
|
||||
<path d="M7.2830232,22.6209117 L17.5412669,22.6209117" id="Path" stroke="currentColor" stroke-width="2" stroke-linecap="round" mask="url(#mask-2)"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</symbol>
|
||||
-->
|
||||
<symbol id="icon" viewBox="0 0 26 32">
|
||||
<path d="m 15 0 c 0.7 0.1 1.233 0.331 1.7 0.8 l 7.1 7.1 c 0.5 0.5 0.8 1.1 0.8 1.8 h -7.9 c -1 0 -1.7 -0.8 -1.7 -1.7 V 0.4 z M 24.65 11.647 v 17.23 c 0 1.5 -1.2 2.8 -2.8 2.8 h -19 c -1.234 -0.017 -2.694 -1.094 -2.7 -2.8 V 2.8 C 0.1 1.2 1.4 0 2.9 0 h 10.15 v 7.5 c -0.135 2.533 1.669 4.119 3.7 4.15 h 7.9 z M 6.3 8.9 c 0 0.6 0.4 1 1 1 h 1.6 c 0.5 0 1 -0.4 1 -1 c 0 -0.5 -0.5 -1 -1 -1 H 7.3 C 6.7 7.9 6.3 8.4 6.3 8.9 z M 18.5 22.6 c 0 -0.5 -0.4 -1 -1 -1 H 7.3 c -0.6 0 -1 0.5 -1 1 s 0.4 1 1 1 h 10.3 C 18.1 23.6 18.5 23.2 18.5 22.6 z M 18.5 15.8 c 0 -0.6 -0.4 -1 -1 -1 H 7.3 c -0.6 0 -1 0.4 -1 1 s 0.4 1 1 1 h 10.3 C 18.1 16.8 18.5 16.3 18.5 15.8 z" fill="currentColor" />
|
||||
</symbol>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.1 KiB |
|
@ -1,259 +1,93 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="336px"
|
||||
height="210px"
|
||||
viewBox="0 0 336 210"
|
||||
version="1.1"
|
||||
id="svg117">
|
||||
<metadata
|
||||
id="metadata121">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>CC310D7B-7EC7-4AEF-90E5-10044C2FA0F1</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="336px" height="210px" viewBox="0 0 336 210" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: sketchtool 53.1 (72631) - https://sketchapp.com -->
|
||||
<title
|
||||
id="title2">CC310D7B-7EC7-4AEF-90E5-10044C2FA0F1</title>
|
||||
<desc
|
||||
id="desc4">Created with sketchtool.</desc>
|
||||
<defs
|
||||
id="defs42">
|
||||
<linearGradient
|
||||
x1="-28.184294%"
|
||||
y1="-47.2118902%"
|
||||
x2="84.470028%"
|
||||
y2="96.7133243%"
|
||||
id="linearGradient-1">
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="0%"
|
||||
id="stop6" />
|
||||
<stop
|
||||
stop-color="#7878FF"
|
||||
offset="99.91%"
|
||||
id="stop8" />
|
||||
<title>CC310D7B-7EC7-4AEF-90E5-10044C2FA0F1</title>
|
||||
<desc>Created with sketchtool.</desc>
|
||||
<defs>
|
||||
<linearGradient x1="-28.184294%" y1="-47.2118902%" x2="84.470028%" y2="96.7133243%" id="linearGradient-1">
|
||||
<stop stop-color="#FA357F" offset="0%"></stop>
|
||||
<stop stop-color="#7878FF" offset="99.91%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="20.1958296%"
|
||||
y1="50.3861311%"
|
||||
x2="169.064414%"
|
||||
y2="48.680104%"
|
||||
id="linearGradient-2">
|
||||
<stop
|
||||
stop-color="#FFF361"
|
||||
offset="0%"
|
||||
id="stop11" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop13" />
|
||||
<linearGradient x1="20.1958296%" y1="50.3861311%" x2="169.064414%" y2="48.680104%" id="linearGradient-2">
|
||||
<stop stop-color="#FFF361" offset="0%"></stop>
|
||||
<stop stop-color="#FFA80A" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="7.13940616%"
|
||||
y1="-13.3627152%"
|
||||
x2="84.3212705%"
|
||||
y2="120.017199%"
|
||||
id="linearGradient-3">
|
||||
<stop
|
||||
stop-color="#FF5162"
|
||||
offset="0%"
|
||||
id="stop16" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="100%"
|
||||
id="stop18" />
|
||||
<linearGradient x1="7.13940616%" y1="-13.3627152%" x2="84.3212705%" y2="120.017199%" id="linearGradient-3">
|
||||
<stop stop-color="#FF5162" offset="0%"></stop>
|
||||
<stop stop-color="#83219D" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="50.0466667%"
|
||||
y1="98.7466885%"
|
||||
x2="50.0466667%"
|
||||
y2="63.9770799%"
|
||||
id="linearGradient-4">
|
||||
<stop
|
||||
stop-color="#008787"
|
||||
offset="0.4302823%"
|
||||
id="stop21" />
|
||||
<stop
|
||||
stop-color="#005E5E"
|
||||
offset="99.91%"
|
||||
id="stop23" />
|
||||
<linearGradient x1="50.0466667%" y1="98.7466885%" x2="50.0466667%" y2="63.9770799%" id="linearGradient-4">
|
||||
<stop stop-color="#008787" offset="0.4302823%"></stop>
|
||||
<stop stop-color="#005E5E" offset="99.91%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="34.0866057%"
|
||||
y1="25.5581764%"
|
||||
x2="59.4765337%"
|
||||
y2="63.0992243%"
|
||||
id="linearGradient-5">
|
||||
<stop
|
||||
stop-color="#FFD943"
|
||||
offset="0%"
|
||||
id="stop26" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop28" />
|
||||
<linearGradient x1="34.0866057%" y1="25.5581764%" x2="59.4765337%" y2="63.0992243%" id="linearGradient-5">
|
||||
<stop stop-color="#FFD943" offset="0%"></stop>
|
||||
<stop stop-color="#FFA80A" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="21.6627829%"
|
||||
y1="-7.19090722%"
|
||||
x2="65.1350317%"
|
||||
y2="106.40324%"
|
||||
id="linearGradient-6">
|
||||
<stop
|
||||
stop-color="#FF8748"
|
||||
offset="0%"
|
||||
id="stop31" />
|
||||
<stop
|
||||
stop-color="#FE7852"
|
||||
offset="13.28%"
|
||||
id="stop33" />
|
||||
<stop
|
||||
stop-color="#FC546A"
|
||||
offset="50.49%"
|
||||
id="stop35" />
|
||||
<stop
|
||||
stop-color="#FA3D79"
|
||||
offset="80.73%"
|
||||
id="stop37" />
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="100%"
|
||||
id="stop39" />
|
||||
<linearGradient x1="21.6627829%" y1="-7.19090722%" x2="65.1350317%" y2="106.40324%" id="linearGradient-6">
|
||||
<stop stop-color="#FF8748" offset="0%"></stop>
|
||||
<stop stop-color="#FE7852" offset="13.28%"></stop>
|
||||
<stop stop-color="#FC546A" offset="50.49%"></stop>
|
||||
<stop stop-color="#FA3D79" offset="80.73%"></stop>
|
||||
<stop stop-color="#FA357F" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<g
|
||||
id="Send_Download-Completed"
|
||||
transform="translate(-552.000000, -339.000000)"
|
||||
fill-rule="nonzero">
|
||||
<g
|
||||
id="firefox-send_illustrations-03"
|
||||
transform="translate(552.000000, 339.000000)">
|
||||
<ellipse
|
||||
id="Oval"
|
||||
fill="#ededf0"
|
||||
opacity="0.5"
|
||||
cx="165.88687"
|
||||
cy="168.0954"
|
||||
rx="73.526253"
|
||||
ry="11.563125" />
|
||||
<g
|
||||
id="Group"
|
||||
transform="translate(0.000000, 39.375000)"
|
||||
fill="#EDEDF0"
|
||||
opacity="0.5">
|
||||
<g
|
||||
transform="translate(30.187500, 116.812500)"
|
||||
id="g55">
|
||||
<g
|
||||
transform="translate(21.000000, 5.250000)"
|
||||
id="Path">
|
||||
<path
|
||||
d="M1.575,3.255 L91.546875,3.255 C92.26875,3.255 92.859375,2.664375 92.859375,1.9425 C92.859375,1.220625 92.26875,0.63 91.546875,0.63 L1.575,0.63 C0.853125,0.63 0.2625,1.220625 0.2625,1.9425 C0.2625,2.664375 0.853125,3.255 1.575,3.255 Z"
|
||||
id="path45" />
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Send_Download-Completed" transform="translate(-552.000000, -339.000000)" fill-rule="nonzero">
|
||||
<g id="firefox-send_illustrations-03" transform="translate(552.000000, 339.000000)">
|
||||
<ellipse id="Oval" fill="#EDEDF0" opacity="0.5" cx="165.886875" cy="198.410625" rx="73.52625" ry="11.563125"></ellipse>
|
||||
<g id="Group" transform="translate(0.000000, 39.375000)" fill="#EDEDF0" opacity="0.5">
|
||||
<g transform="translate(30.187500, 116.812500)">
|
||||
<g transform="translate(21.000000, 5.250000)" id="Path">
|
||||
<path d="M1.575,3.255 L91.546875,3.255 C92.26875,3.255 92.859375,2.664375 92.859375,1.9425 C92.859375,1.220625 92.26875,0.63 91.546875,0.63 L1.575,0.63 C0.853125,0.63 0.2625,1.220625 0.2625,1.9425 C0.2625,2.664375 0.853125,3.255 1.575,3.255 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(76.125000, 0.000000)"
|
||||
id="g50">
|
||||
<path
|
||||
d="M1.693125,1.8375 L24.268125,1.8375 C24.635625,1.8375 24.924375,1.54875 24.924375,1.18125 C24.924375,0.81375 24.635625,0.525 24.268125,0.525 L1.693125,0.525 C1.325625,0.525 1.036875,0.81375 1.036875,1.18125 C1.036875,1.54875 1.325625,1.8375 1.693125,1.8375 Z"
|
||||
id="path48" />
|
||||
<g transform="translate(76.125000, 0.000000)" id="Path">
|
||||
<path d="M1.693125,1.8375 L24.268125,1.8375 C24.635625,1.8375 24.924375,1.54875 24.924375,1.18125 C24.924375,0.81375 24.635625,0.525 24.268125,0.525 L1.693125,0.525 C1.325625,0.525 1.036875,0.81375 1.036875,1.18125 C1.036875,1.54875 1.325625,1.8375 1.693125,1.8375 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 11.812500)"
|
||||
id="Shape">
|
||||
<path
|
||||
d="M0.525,1.89 C0.525,1.5225 0.81375,1.23375 1.18125,1.23375 L5.11875,1.23375 C5.48625,1.23375 5.775,1.5225 5.775,1.89 C5.775,2.2575 5.48625,2.54625 5.11875,2.54625 L1.18125,2.54625 C0.81375,2.54625 0.525,2.2575 0.525,1.89 Z M14.9625,1.89 C14.9625,1.5225 15.25125,1.23375 15.61875,1.23375 L31.36875,1.23375 C31.73625,1.23375 32.025,1.5225 32.025,1.89 C32.025,2.2575 31.73625,2.54625 31.36875,2.54625 L15.61875,2.54625 C15.25125,2.54625 14.9625,2.2575 14.9625,1.89 Z M42.525,1.89 C42.525,1.5225 42.81375,1.23375 43.18125,1.23375 L44.49375,1.23375 C44.86125,1.23375 45.15,1.5225 45.15,1.89 C45.15,2.2575 44.86125,2.54625 44.49375,2.54625 L43.18125,2.54625 C42.81375,2.54625 42.525,2.2575 42.525,1.89 Z M49.0875,1.89 C49.0875,1.5225 49.37625,1.23375 49.74375,1.23375 L53.68125,1.23375 C54.04875,1.23375 54.3375,1.5225 54.3375,1.89 C54.3375,2.2575 54.04875,2.54625 53.68125,2.54625 L49.74375,2.54625 C49.37625,2.54625 49.0875,2.2575 49.0875,1.89 Z M63.525,1.89 C63.525,1.5225 63.81375,1.23375 64.18125,1.23375 L79.93125,1.23375 C80.29875,1.23375 80.5875,1.5225 80.5875,1.89 C80.5875,2.2575 80.29875,2.54625 79.93125,2.54625 L64.18125,2.54625 C63.81375,2.54625 63.525,2.2575 63.525,1.89 Z"
|
||||
id="path52" />
|
||||
<g transform="translate(0.000000, 11.812500)" id="Shape">
|
||||
<path d="M0.525,1.89 C0.525,1.5225 0.81375,1.23375 1.18125,1.23375 L5.11875,1.23375 C5.48625,1.23375 5.775,1.5225 5.775,1.89 C5.775,2.2575 5.48625,2.54625 5.11875,2.54625 L1.18125,2.54625 C0.81375,2.54625 0.525,2.2575 0.525,1.89 Z M14.9625,1.89 C14.9625,1.5225 15.25125,1.23375 15.61875,1.23375 L31.36875,1.23375 C31.73625,1.23375 32.025,1.5225 32.025,1.89 C32.025,2.2575 31.73625,2.54625 31.36875,2.54625 L15.61875,2.54625 C15.25125,2.54625 14.9625,2.2575 14.9625,1.89 Z M42.525,1.89 C42.525,1.5225 42.81375,1.23375 43.18125,1.23375 L44.49375,1.23375 C44.86125,1.23375 45.15,1.5225 45.15,1.89 C45.15,2.2575 44.86125,2.54625 44.49375,2.54625 L43.18125,2.54625 C42.81375,2.54625 42.525,2.2575 42.525,1.89 Z M49.0875,1.89 C49.0875,1.5225 49.37625,1.23375 49.74375,1.23375 L53.68125,1.23375 C54.04875,1.23375 54.3375,1.5225 54.3375,1.89 C54.3375,2.2575 54.04875,2.54625 53.68125,2.54625 L49.74375,2.54625 C49.37625,2.54625 49.0875,2.2575 49.0875,1.89 Z M63.525,1.89 C63.525,1.5225 63.81375,1.23375 64.18125,1.23375 L79.93125,1.23375 C80.29875,1.23375 80.5875,1.5225 80.5875,1.89 C80.5875,2.2575 80.29875,2.54625 79.93125,2.54625 L64.18125,2.54625 C63.81375,2.54625 63.525,2.2575 63.525,1.89 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(123.375000, 72.187500)"
|
||||
id="g69">
|
||||
<g
|
||||
transform="translate(26.250000, 5.250000)"
|
||||
id="g59">
|
||||
<path
|
||||
d="M1.771875,3.163125 L147.039375,3.163125 C147.76125,3.163125 148.351875,2.5725 148.351875,1.850625 C148.351875,1.12875 147.76125,0.538125 147.039375,0.538125 L1.771875,0.538125 C1.05,0.538125 0.459375,1.12875 0.459375,1.850625 C0.459375,2.5725 1.05,3.163125 1.771875,3.163125 Z"
|
||||
id="path57" />
|
||||
<g transform="translate(123.375000, 72.187500)">
|
||||
<g transform="translate(26.250000, 5.250000)" id="Path">
|
||||
<path d="M1.771875,3.163125 L147.039375,3.163125 C147.76125,3.163125 148.351875,2.5725 148.351875,1.850625 C148.351875,1.12875 147.76125,0.538125 147.039375,0.538125 L1.771875,0.538125 C1.05,0.538125 0.459375,1.12875 0.459375,1.850625 C0.459375,2.5725 1.05,3.163125 1.771875,3.163125 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(45.937500, 0.000000)"
|
||||
id="g63">
|
||||
<path
|
||||
d="M1.70625,1.850625 L38.14125,1.850625 C38.50875,1.850625 38.7975,1.561875 38.7975,1.194375 C38.7975,0.826875 38.50875,0.538125 38.14125,0.538125 L1.70625,0.538125 C1.33875,0.538125 1.05,0.826875 1.05,1.194375 C1.05,1.561875 1.351875,1.850625 1.70625,1.850625 Z"
|
||||
id="path61" />
|
||||
<g transform="translate(45.937500, 0.000000)" id="Path">
|
||||
<path d="M1.70625,1.850625 L38.14125,1.850625 C38.50875,1.850625 38.7975,1.561875 38.7975,1.194375 C38.7975,0.826875 38.50875,0.538125 38.14125,0.538125 L1.70625,0.538125 C1.33875,0.538125 1.05,0.826875 1.05,1.194375 C1.05,1.561875 1.351875,1.850625 1.70625,1.850625 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 11.812500)"
|
||||
id="g67">
|
||||
<path
|
||||
d="M1.2075,1.666875 C1.2075,1.299375 1.49625,1.010625 1.86375,1.010625 L17.61375,1.010625 C17.98125,1.010625 18.27,1.299375 18.27,1.666875 C18.27,2.034375 17.98125,2.323125 17.61375,2.323125 L1.86375,2.323125 C1.49625,2.323125 1.2075,2.034375 1.2075,1.666875 Z M27.4575,1.666875 C27.4575,1.299375 27.74625,1.010625 28.11375,1.010625 L32.05125,1.010625 C32.41875,1.010625 32.7075,1.299375 32.7075,1.666875 C32.7075,2.034375 32.41875,2.323125 32.05125,2.323125 L28.11375,2.323125 C27.74625,2.323125 27.4575,2.034375 27.4575,1.666875 Z M36.645,1.666875 C36.645,1.299375 36.93375,1.010625 37.30125,1.010625 L38.61375,1.010625 C38.98125,1.010625 39.27,1.299375 39.27,1.666875 C39.27,2.034375 38.98125,2.323125 38.61375,2.323125 L37.30125,2.323125 C36.93375,2.323125 36.645,2.034375 36.645,1.666875 Z M49.77,1.666875 C49.77,1.299375 50.05875,1.010625 50.42625,1.010625 L66.17625,1.010625 C66.54375,1.010625 66.8325,1.299375 66.8325,1.666875 C66.8325,2.034375 66.54375,2.323125 66.17625,2.323125 L50.42625,2.323125 C50.05875,2.323125 49.77,2.034375 49.77,1.666875 Z M76.02,1.666875 C76.02,1.299375 76.30875,1.010625 76.67625,1.010625 L80.61375,1.010625 C80.98125,1.010625 81.27,1.299375 81.27,1.666875 C81.27,2.034375 80.98125,2.323125 80.61375,2.323125 L76.67625,2.323125 C76.30875,2.323125 76.02,2.034375 76.02,1.666875 Z M85.2075,1.666875 C85.2075,1.299375 85.49625,1.010625 85.86375,1.010625 L87.17625,1.010625 C87.54375,1.010625 87.8325,1.299375 87.8325,1.666875 C87.8325,2.034375 87.54375,2.323125 87.17625,2.323125 L85.86375,2.323125 C85.49625,2.323125 85.2075,2.034375 85.2075,1.666875 Z M98.3325,1.666875 C98.3325,1.299375 98.62125,1.010625 98.98875,1.010625 L114.73875,1.010625 C115.10625,1.010625 115.395,1.299375 115.395,1.666875 C115.395,2.034375 115.10625,2.323125 114.73875,2.323125 L98.98875,2.323125 C98.62125,2.323125 98.3325,2.034375 98.3325,1.666875 Z M124.5825,1.666875 C124.5825,1.299375 124.87125,1.010625 125.23875,1.010625 L129.17625,1.010625 C129.54375,1.010625 129.8325,1.299375 129.8325,1.666875 C129.8325,2.034375 129.54375,2.323125 129.17625,2.323125 L125.23875,2.323125 C124.87125,2.323125 124.5825,2.034375 124.5825,1.666875 Z M133.77,1.666875 C133.77,1.299375 134.05875,1.010625 134.42625,1.010625 L135.73875,1.010625 C136.10625,1.010625 136.395,1.299375 136.395,1.666875 C136.395,2.034375 136.10625,2.323125 135.73875,2.323125 L134.42625,2.323125 C134.05875,2.323125 133.77,2.034375 133.77,1.666875 Z M146.895,1.666875 C146.895,1.299375 147.18375,1.010625 147.55125,1.010625 L163.30125,1.010625 C163.66875,1.010625 163.9575,1.299375 163.9575,1.666875 C163.9575,2.034375 163.66875,2.323125 163.30125,2.323125 L147.55125,2.323125 C147.18375,2.323125 146.895,2.034375 146.895,1.666875 Z M173.145,1.666875 C173.145,1.299375 173.43375,1.010625 173.80125,1.010625 L177.73875,1.010625 C178.10625,1.010625 178.395,1.299375 178.395,1.666875 C178.395,2.034375 178.10625,2.323125 177.73875,2.323125 L173.80125,2.323125 C173.43375,2.323125 173.145,2.034375 173.145,1.666875 Z M182.3325,1.666875 C182.3325,1.299375 182.62125,1.010625 182.98875,1.010625 L184.30125,1.010625 C184.66875,1.010625 184.9575,1.299375 184.9575,1.666875 C184.9575,2.034375 184.66875,2.323125 184.30125,2.323125 L182.98875,2.323125 C182.62125,2.323125 182.3325,2.034375 182.3325,1.666875 Z M195.4575,1.666875 C195.4575,1.299375 195.74625,1.010625 196.11375,1.010625 L211.86375,1.010625 C212.23125,1.010625 212.52,1.299375 212.52,1.666875 C212.52,2.034375 212.23125,2.323125 211.86375,2.323125 L196.11375,2.323125 C195.74625,2.323125 195.4575,2.034375 195.4575,1.666875 Z"
|
||||
id="path65" />
|
||||
<g transform="translate(0.000000, 11.812500)" id="Shape">
|
||||
<path d="M1.2075,1.666875 C1.2075,1.299375 1.49625,1.010625 1.86375,1.010625 L17.61375,1.010625 C17.98125,1.010625 18.27,1.299375 18.27,1.666875 C18.27,2.034375 17.98125,2.323125 17.61375,2.323125 L1.86375,2.323125 C1.49625,2.323125 1.2075,2.034375 1.2075,1.666875 Z M27.4575,1.666875 C27.4575,1.299375 27.74625,1.010625 28.11375,1.010625 L32.05125,1.010625 C32.41875,1.010625 32.7075,1.299375 32.7075,1.666875 C32.7075,2.034375 32.41875,2.323125 32.05125,2.323125 L28.11375,2.323125 C27.74625,2.323125 27.4575,2.034375 27.4575,1.666875 Z M36.645,1.666875 C36.645,1.299375 36.93375,1.010625 37.30125,1.010625 L38.61375,1.010625 C38.98125,1.010625 39.27,1.299375 39.27,1.666875 C39.27,2.034375 38.98125,2.323125 38.61375,2.323125 L37.30125,2.323125 C36.93375,2.323125 36.645,2.034375 36.645,1.666875 Z M49.77,1.666875 C49.77,1.299375 50.05875,1.010625 50.42625,1.010625 L66.17625,1.010625 C66.54375,1.010625 66.8325,1.299375 66.8325,1.666875 C66.8325,2.034375 66.54375,2.323125 66.17625,2.323125 L50.42625,2.323125 C50.05875,2.323125 49.77,2.034375 49.77,1.666875 Z M76.02,1.666875 C76.02,1.299375 76.30875,1.010625 76.67625,1.010625 L80.61375,1.010625 C80.98125,1.010625 81.27,1.299375 81.27,1.666875 C81.27,2.034375 80.98125,2.323125 80.61375,2.323125 L76.67625,2.323125 C76.30875,2.323125 76.02,2.034375 76.02,1.666875 Z M85.2075,1.666875 C85.2075,1.299375 85.49625,1.010625 85.86375,1.010625 L87.17625,1.010625 C87.54375,1.010625 87.8325,1.299375 87.8325,1.666875 C87.8325,2.034375 87.54375,2.323125 87.17625,2.323125 L85.86375,2.323125 C85.49625,2.323125 85.2075,2.034375 85.2075,1.666875 Z M98.3325,1.666875 C98.3325,1.299375 98.62125,1.010625 98.98875,1.010625 L114.73875,1.010625 C115.10625,1.010625 115.395,1.299375 115.395,1.666875 C115.395,2.034375 115.10625,2.323125 114.73875,2.323125 L98.98875,2.323125 C98.62125,2.323125 98.3325,2.034375 98.3325,1.666875 Z M124.5825,1.666875 C124.5825,1.299375 124.87125,1.010625 125.23875,1.010625 L129.17625,1.010625 C129.54375,1.010625 129.8325,1.299375 129.8325,1.666875 C129.8325,2.034375 129.54375,2.323125 129.17625,2.323125 L125.23875,2.323125 C124.87125,2.323125 124.5825,2.034375 124.5825,1.666875 Z M133.77,1.666875 C133.77,1.299375 134.05875,1.010625 134.42625,1.010625 L135.73875,1.010625 C136.10625,1.010625 136.395,1.299375 136.395,1.666875 C136.395,2.034375 136.10625,2.323125 135.73875,2.323125 L134.42625,2.323125 C134.05875,2.323125 133.77,2.034375 133.77,1.666875 Z M146.895,1.666875 C146.895,1.299375 147.18375,1.010625 147.55125,1.010625 L163.30125,1.010625 C163.66875,1.010625 163.9575,1.299375 163.9575,1.666875 C163.9575,2.034375 163.66875,2.323125 163.30125,2.323125 L147.55125,2.323125 C147.18375,2.323125 146.895,2.034375 146.895,1.666875 Z M173.145,1.666875 C173.145,1.299375 173.43375,1.010625 173.80125,1.010625 L177.73875,1.010625 C178.10625,1.010625 178.395,1.299375 178.395,1.666875 C178.395,2.034375 178.10625,2.323125 177.73875,2.323125 L173.80125,2.323125 C173.43375,2.323125 173.145,2.034375 173.145,1.666875 Z M182.3325,1.666875 C182.3325,1.299375 182.62125,1.010625 182.98875,1.010625 L184.30125,1.010625 C184.66875,1.010625 184.9575,1.299375 184.9575,1.666875 C184.9575,2.034375 184.66875,2.323125 184.30125,2.323125 L182.98875,2.323125 C182.62125,2.323125 182.3325,2.034375 182.3325,1.666875 Z M195.4575,1.666875 C195.4575,1.299375 195.74625,1.010625 196.11375,1.010625 L211.86375,1.010625 C212.23125,1.010625 212.52,1.299375 212.52,1.666875 C212.52,2.034375 212.23125,2.323125 211.86375,2.323125 L196.11375,2.323125 C195.74625,2.323125 195.4575,2.034375 195.4575,1.666875 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g81">
|
||||
<path
|
||||
d="M2.139375,33.2325 L35.503125,33.2325 C35.503125,33.2325 25.06875,9.89625 47.22375,6.8775 C66.99,4.186875 74.799375,24.504375 74.799375,24.504375 C74.799375,24.504375 77.14875,12.78375 88.895625,15.028125 C100.485,17.233125 109.0425,35.88375 109.0425,35.88375 L138.10125,35.88375"
|
||||
id="path71" />
|
||||
<g
|
||||
transform="translate(1.312500, 0.000000)"
|
||||
id="g75">
|
||||
<path
|
||||
d="M137.36625,30.37125 L128.7825,30.37125 C128.349375,30.37125 128.008125,30.03 128.008125,29.596875 C128.008125,29.16375 128.349375,28.8225 128.7825,28.8225 L137.36625,28.8225 C137.799375,28.8225 138.140625,29.16375 138.140625,29.596875 C138.140625,30.03 137.799375,30.37125 137.36625,30.37125 Z M114.883125,30.37125 L113.334375,30.37125 C112.90125,30.37125 112.56,30.03 112.56,29.596875 C112.56,29.16375 112.90125,28.8225 113.334375,28.8225 L114.883125,28.8225 C115.31625,28.8225 115.6575,29.16375 115.6575,29.596875 C115.6575,30.03 115.303125,30.37125 114.883125,30.37125 Z M34.755,29.439375 L32.274375,29.439375 C31.84125,29.439375 31.5,29.098125 31.5,28.665 C31.5,28.231875 31.84125,27.890625 32.274375,27.890625 L33.613125,27.890625 C33.508125,27.615 33.39,27.27375 33.25875,26.893125 C33.1275,26.48625 33.3375,26.053125 33.744375,25.90875 C34.15125,25.7775 34.584375,25.9875 34.72875,26.394375 C35.135625,27.58875 35.46375,28.32375 35.46375,28.336875 C35.56875,28.573125 35.5425,28.84875 35.41125,29.071875 C35.266875,29.308125 35.0175,29.439375 34.755,29.439375 Z M19.92375,29.439375 L1.39125,29.439375 C0.958125,29.439375 0.616875,29.098125 0.616875,28.665 C0.616875,28.231875 0.958125,27.890625 1.39125,27.890625 L19.92375,27.890625 C20.356875,27.890625 20.698125,28.231875 20.698125,28.665 C20.698125,29.098125 20.34375,29.439375 19.92375,29.439375 Z M107.769375,29.360625 C107.49375,29.360625 107.23125,29.21625 107.1,28.966875 C106.60125,28.0875 105.7875,26.69625 104.698125,25.06875 C104.461875,24.714375 104.55375,24.22875 104.908125,23.9925 C105.2625,23.75625 105.748125,23.848125 105.984375,24.2025 C107.1,25.869375 107.94,27.3 108.451875,28.205625 C108.661875,28.573125 108.530625,29.045625 108.15,29.255625 C108.01875,29.32125 107.8875,29.360625 107.769375,29.360625 Z M32.55,21.42 C32.169375,21.42 31.84125,21.144375 31.78875,20.750625 C31.71,20.23875 31.6575,19.700625 31.618125,19.1625 C31.57875,18.7425 31.906875,18.361875 32.326875,18.335625 C32.773125,18.309375 33.1275,18.61125 33.15375,19.044375 C33.193125,19.55625 33.245625,20.055 33.324375,20.540625 C33.39,20.960625 33.088125,21.354375 32.668125,21.406875 C32.62875,21.42 32.589375,21.42 32.55,21.42 Z M72.778125,18.020625 C72.5025,18.020625 72.24,17.87625 72.095625,17.61375 C71.8725,17.206875 71.623125,16.760625 71.3475,16.30125 C71.124375,15.93375 71.2425,15.46125 71.61,15.238125 C71.9775,15.015 72.45,15.133125 72.673125,15.500625 C72.961875,15.98625 73.224375,16.445625 73.460625,16.87875 C73.6575,17.259375 73.52625,17.71875 73.145625,17.92875 C73.0275,17.994375 72.89625,18.020625 72.778125,18.020625 Z M97.295625,16.051875 C97.111875,16.051875 96.94125,15.98625 96.796875,15.868125 C93.84375,13.335 90.90375,11.773125 88.029375,11.221875 C85.2075,10.68375 82.71375,10.959375 80.64,12.0225 C80.259375,12.219375 79.8,12.061875 79.603125,11.694375 C79.40625,11.31375 79.550625,10.854375 79.93125,10.6575 C82.306875,9.42375 85.155,9.10875 88.318125,9.7125 C91.455,10.31625 94.644375,11.983125 97.8075,14.7 C98.135625,14.975625 98.161875,15.46125 97.88625,15.789375 C97.715625,15.96 97.505625,16.051875 97.295625,16.051875 Z M68.394375,11.668125 C68.184375,11.668125 67.96125,11.57625 67.816875,11.405625 C66.80625,10.2375 65.716875,9.174375 64.60125,8.2425 C64.273125,7.966875 64.23375,7.48125 64.509375,7.153125 C64.785,6.825 65.270625,6.785625 65.59875,7.06125 C66.78,8.045625 67.921875,9.174375 68.985,10.395 C69.260625,10.723125 69.234375,11.20875 68.90625,11.484375 C68.74875,11.6025 68.565,11.668125 68.394375,11.668125 Z M36.553125,7.16625 C36.343125,7.16625 36.133125,7.074375 35.975625,6.916875 C35.686875,6.601875 35.713125,6.11625 36.028125,5.8275 C38.495625,3.59625 41.97375,2.1525 46.370625,1.561875 C49.06125,1.194375 51.699375,1.23375 54.193125,1.666875 C54.613125,1.745625 54.88875,2.139375 54.823125,2.559375 C54.744375,2.979375 54.350625,3.268125 53.930625,3.189375 C51.594375,2.7825 49.11375,2.75625 46.580625,3.0975 C42.49875,3.661875 39.29625,4.96125 37.065,6.9825 C36.920625,7.100625 36.736875,7.16625 36.553125,7.16625 Z"
|
||||
id="path73" />
|
||||
<g>
|
||||
<path d="M2.139375,33.2325 L35.503125,33.2325 C35.503125,33.2325 25.06875,9.89625 47.22375,6.8775 C66.99,4.186875 74.799375,24.504375 74.799375,24.504375 C74.799375,24.504375 77.14875,12.78375 88.895625,15.028125 C100.485,17.233125 109.0425,35.88375 109.0425,35.88375 L138.10125,35.88375" id="Path"></path>
|
||||
<g transform="translate(1.312500, 0.000000)" id="Shape">
|
||||
<path d="M137.36625,30.37125 L128.7825,30.37125 C128.349375,30.37125 128.008125,30.03 128.008125,29.596875 C128.008125,29.16375 128.349375,28.8225 128.7825,28.8225 L137.36625,28.8225 C137.799375,28.8225 138.140625,29.16375 138.140625,29.596875 C138.140625,30.03 137.799375,30.37125 137.36625,30.37125 Z M114.883125,30.37125 L113.334375,30.37125 C112.90125,30.37125 112.56,30.03 112.56,29.596875 C112.56,29.16375 112.90125,28.8225 113.334375,28.8225 L114.883125,28.8225 C115.31625,28.8225 115.6575,29.16375 115.6575,29.596875 C115.6575,30.03 115.303125,30.37125 114.883125,30.37125 Z M34.755,29.439375 L32.274375,29.439375 C31.84125,29.439375 31.5,29.098125 31.5,28.665 C31.5,28.231875 31.84125,27.890625 32.274375,27.890625 L33.613125,27.890625 C33.508125,27.615 33.39,27.27375 33.25875,26.893125 C33.1275,26.48625 33.3375,26.053125 33.744375,25.90875 C34.15125,25.7775 34.584375,25.9875 34.72875,26.394375 C35.135625,27.58875 35.46375,28.32375 35.46375,28.336875 C35.56875,28.573125 35.5425,28.84875 35.41125,29.071875 C35.266875,29.308125 35.0175,29.439375 34.755,29.439375 Z M19.92375,29.439375 L1.39125,29.439375 C0.958125,29.439375 0.616875,29.098125 0.616875,28.665 C0.616875,28.231875 0.958125,27.890625 1.39125,27.890625 L19.92375,27.890625 C20.356875,27.890625 20.698125,28.231875 20.698125,28.665 C20.698125,29.098125 20.34375,29.439375 19.92375,29.439375 Z M107.769375,29.360625 C107.49375,29.360625 107.23125,29.21625 107.1,28.966875 C106.60125,28.0875 105.7875,26.69625 104.698125,25.06875 C104.461875,24.714375 104.55375,24.22875 104.908125,23.9925 C105.2625,23.75625 105.748125,23.848125 105.984375,24.2025 C107.1,25.869375 107.94,27.3 108.451875,28.205625 C108.661875,28.573125 108.530625,29.045625 108.15,29.255625 C108.01875,29.32125 107.8875,29.360625 107.769375,29.360625 Z M32.55,21.42 C32.169375,21.42 31.84125,21.144375 31.78875,20.750625 C31.71,20.23875 31.6575,19.700625 31.618125,19.1625 C31.57875,18.7425 31.906875,18.361875 32.326875,18.335625 C32.773125,18.309375 33.1275,18.61125 33.15375,19.044375 C33.193125,19.55625 33.245625,20.055 33.324375,20.540625 C33.39,20.960625 33.088125,21.354375 32.668125,21.406875 C32.62875,21.42 32.589375,21.42 32.55,21.42 Z M72.778125,18.020625 C72.5025,18.020625 72.24,17.87625 72.095625,17.61375 C71.8725,17.206875 71.623125,16.760625 71.3475,16.30125 C71.124375,15.93375 71.2425,15.46125 71.61,15.238125 C71.9775,15.015 72.45,15.133125 72.673125,15.500625 C72.961875,15.98625 73.224375,16.445625 73.460625,16.87875 C73.6575,17.259375 73.52625,17.71875 73.145625,17.92875 C73.0275,17.994375 72.89625,18.020625 72.778125,18.020625 Z M97.295625,16.051875 C97.111875,16.051875 96.94125,15.98625 96.796875,15.868125 C93.84375,13.335 90.90375,11.773125 88.029375,11.221875 C85.2075,10.68375 82.71375,10.959375 80.64,12.0225 C80.259375,12.219375 79.8,12.061875 79.603125,11.694375 C79.40625,11.31375 79.550625,10.854375 79.93125,10.6575 C82.306875,9.42375 85.155,9.10875 88.318125,9.7125 C91.455,10.31625 94.644375,11.983125 97.8075,14.7 C98.135625,14.975625 98.161875,15.46125 97.88625,15.789375 C97.715625,15.96 97.505625,16.051875 97.295625,16.051875 Z M68.394375,11.668125 C68.184375,11.668125 67.96125,11.57625 67.816875,11.405625 C66.80625,10.2375 65.716875,9.174375 64.60125,8.2425 C64.273125,7.966875 64.23375,7.48125 64.509375,7.153125 C64.785,6.825 65.270625,6.785625 65.59875,7.06125 C66.78,8.045625 67.921875,9.174375 68.985,10.395 C69.260625,10.723125 69.234375,11.20875 68.90625,11.484375 C68.74875,11.6025 68.565,11.668125 68.394375,11.668125 Z M36.553125,7.16625 C36.343125,7.16625 36.133125,7.074375 35.975625,6.916875 C35.686875,6.601875 35.713125,6.11625 36.028125,5.8275 C38.495625,3.59625 41.97375,2.1525 46.370625,1.561875 C49.06125,1.194375 51.699375,1.23375 54.193125,1.666875 C54.613125,1.745625 54.88875,2.139375 54.823125,2.559375 C54.744375,2.979375 54.350625,3.268125 53.930625,3.189375 C51.594375,2.7825 49.11375,2.75625 46.580625,3.0975 C42.49875,3.661875 39.29625,4.96125 37.065,6.9825 C36.920625,7.100625 36.736875,7.16625 36.553125,7.16625 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 32.812500)"
|
||||
id="g79">
|
||||
<path
|
||||
d="M139.636875,3.49125 L2.12625,3.49125 C1.273125,3.49125 0.5775,2.795625 0.5775,1.9425 C0.5775,1.089375 1.273125,0.39375 2.12625,0.39375 L139.636875,0.39375 C140.49,0.39375 141.185625,1.089375 141.185625,1.9425 C141.185625,2.795625 140.49,3.49125 139.636875,3.49125 Z"
|
||||
id="path77" />
|
||||
<g transform="translate(0.000000, 32.812500)" id="Path">
|
||||
<path d="M139.636875,3.49125 L2.12625,3.49125 C1.273125,3.49125 0.5775,2.795625 0.5775,1.9425 C0.5775,1.089375 1.273125,0.39375 2.12625,0.39375 L139.636875,0.39375 C140.49,0.39375 141.185625,1.089375 141.185625,1.9425 C141.185625,2.795625 140.49,3.49125 139.636875,3.49125 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(217.875000, 1.312500)"
|
||||
id="g93">
|
||||
<path
|
||||
d="M2.034375,19.359375 L20.65875,19.359375 C20.65875,19.359375 14.83125,6.339375 27.195,4.659375 C38.22,3.163125 42.590625,14.49 42.590625,14.49 C42.590625,14.49 43.903125,7.95375 50.465625,9.200625 C56.93625,10.434375 61.71375,20.8425 61.71375,20.8425 L77.923125,20.8425"
|
||||
id="path83" />
|
||||
<g
|
||||
transform="translate(1.312500, 0.000000)"
|
||||
id="g87">
|
||||
<path
|
||||
d="M19.884375,17.2725 L1.28625,17.2725 C0.853125,17.2725 0.511875,16.93125 0.511875,16.498125 C0.511875,16.065 0.853125,15.72375 1.28625,15.72375 L19.884375,15.72375 C20.3175,15.72375 20.65875,16.065 20.65875,16.498125 C20.65875,16.93125 20.3175,17.2725 19.884375,17.2725 Z M77.175,17.023125 L76.453125,17.023125 C76.02,17.023125 75.67875,16.681875 75.67875,16.24875 C75.67875,15.815625 76.02,15.474375 76.453125,15.474375 L77.175,15.474375 C77.608125,15.474375 77.949375,15.815625 77.949375,16.24875 C77.949375,16.681875 77.608125,17.023125 77.175,17.023125 Z M70.258125,17.023125 L65.611875,17.023125 C65.17875,17.023125 64.8375,16.681875 64.8375,16.24875 C64.8375,15.815625 65.17875,15.474375 65.611875,15.474375 L70.258125,15.474375 C70.69125,15.474375 71.0325,15.815625 71.0325,16.24875 C71.0325,16.681875 70.69125,17.023125 70.258125,17.023125 Z M41.855625,12.39 C41.540625,12.39 41.251875,12.18 41.13375,11.89125 L41.015625,11.615625 C40.858125,11.26125 40.989375,10.84125 41.3175,10.644375 C42.039375,8.47875 44.07375,5.394375 48.129375,5.394375 C48.680625,5.394375 49.27125,5.446875 49.875,5.565 C52.185,5.998125 54.508125,7.35 56.791875,9.555 C57.09375,9.856875 57.106875,10.3425 56.805,10.644375 C56.503125,10.959375 56.0175,10.959375 55.715625,10.6575 C53.655,8.6625 51.594375,7.455 49.58625,7.074375 C49.074375,6.9825 48.58875,6.93 48.129375,6.93 C43.666875,6.93 42.65625,11.563125 42.616875,11.76 C42.538125,12.140625 42.223125,12.39 41.855625,12.39 Z M20.29125,5.473125 C20.1075,5.473125 19.936875,5.4075 19.7925,5.289375 C19.464375,5.01375 19.425,4.528125 19.700625,4.2 C20.724375,2.9925 22.155,2.1 23.953125,1.535625 C24.36,1.404375 24.793125,1.640625 24.924375,2.0475 C25.055625,2.454375 24.819375,2.8875 24.4125,3.01875 C22.903125,3.49125 21.721875,4.22625 20.881875,5.1975 C20.7375,5.38125 20.514375,5.473125 20.29125,5.473125 Z M31.828125,2.874375 C31.7625,2.874375 31.696875,2.86125 31.618125,2.848125 C31.15875,2.73 30.68625,2.625 30.200625,2.559375 C29.780625,2.49375 29.47875,2.1 29.544375,1.68 C29.61,1.26 30.00375,0.984375 30.42375,1.02375 C30.975,1.1025 31.513125,1.220625 32.025,1.351875 C32.431875,1.47 32.68125,1.89 32.57625,2.296875 C32.484375,2.638125 32.169375,2.874375 31.828125,2.874375 Z"
|
||||
id="path85" />
|
||||
<g transform="translate(217.875000, 1.312500)">
|
||||
<path d="M2.034375,19.359375 L20.65875,19.359375 C20.65875,19.359375 14.83125,6.339375 27.195,4.659375 C38.22,3.163125 42.590625,14.49 42.590625,14.49 C42.590625,14.49 43.903125,7.95375 50.465625,9.200625 C56.93625,10.434375 61.71375,20.8425 61.71375,20.8425 L77.923125,20.8425" id="Path"></path>
|
||||
<g transform="translate(1.312500, 0.000000)" id="Shape">
|
||||
<path d="M19.884375,17.2725 L1.28625,17.2725 C0.853125,17.2725 0.511875,16.93125 0.511875,16.498125 C0.511875,16.065 0.853125,15.72375 1.28625,15.72375 L19.884375,15.72375 C20.3175,15.72375 20.65875,16.065 20.65875,16.498125 C20.65875,16.93125 20.3175,17.2725 19.884375,17.2725 Z M77.175,17.023125 L76.453125,17.023125 C76.02,17.023125 75.67875,16.681875 75.67875,16.24875 C75.67875,15.815625 76.02,15.474375 76.453125,15.474375 L77.175,15.474375 C77.608125,15.474375 77.949375,15.815625 77.949375,16.24875 C77.949375,16.681875 77.608125,17.023125 77.175,17.023125 Z M70.258125,17.023125 L65.611875,17.023125 C65.17875,17.023125 64.8375,16.681875 64.8375,16.24875 C64.8375,15.815625 65.17875,15.474375 65.611875,15.474375 L70.258125,15.474375 C70.69125,15.474375 71.0325,15.815625 71.0325,16.24875 C71.0325,16.681875 70.69125,17.023125 70.258125,17.023125 Z M41.855625,12.39 C41.540625,12.39 41.251875,12.18 41.13375,11.89125 L41.015625,11.615625 C40.858125,11.26125 40.989375,10.84125 41.3175,10.644375 C42.039375,8.47875 44.07375,5.394375 48.129375,5.394375 C48.680625,5.394375 49.27125,5.446875 49.875,5.565 C52.185,5.998125 54.508125,7.35 56.791875,9.555 C57.09375,9.856875 57.106875,10.3425 56.805,10.644375 C56.503125,10.959375 56.0175,10.959375 55.715625,10.6575 C53.655,8.6625 51.594375,7.455 49.58625,7.074375 C49.074375,6.9825 48.58875,6.93 48.129375,6.93 C43.666875,6.93 42.65625,11.563125 42.616875,11.76 C42.538125,12.140625 42.223125,12.39 41.855625,12.39 Z M20.29125,5.473125 C20.1075,5.473125 19.936875,5.4075 19.7925,5.289375 C19.464375,5.01375 19.425,4.528125 19.700625,4.2 C20.724375,2.9925 22.155,2.1 23.953125,1.535625 C24.36,1.404375 24.793125,1.640625 24.924375,2.0475 C25.055625,2.454375 24.819375,2.8875 24.4125,3.01875 C22.903125,3.49125 21.721875,4.22625 20.881875,5.1975 C20.7375,5.38125 20.514375,5.473125 20.29125,5.473125 Z M31.828125,2.874375 C31.7625,2.874375 31.696875,2.86125 31.618125,2.848125 C31.15875,2.73 30.68625,2.625 30.200625,2.559375 C29.780625,2.49375 29.47875,2.1 29.544375,1.68 C29.61,1.26 30.00375,0.984375 30.42375,1.02375 C30.975,1.1025 31.513125,1.220625 32.025,1.351875 C32.431875,1.47 32.68125,1.89 32.57625,2.296875 C32.484375,2.638125 32.169375,2.874375 31.828125,2.874375 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 18.375000)"
|
||||
id="g91">
|
||||
<path
|
||||
d="M79.1175,4.095 L2.375625,4.095 C1.5225,4.095 0.826875,3.399375 0.826875,2.54625 C0.826875,1.693125 1.5225,0.9975 2.375625,0.9975 L79.1175,0.9975 C79.970625,0.9975 80.66625,1.693125 80.66625,2.54625 C80.66625,3.399375 79.970625,4.095 79.1175,4.095 Z"
|
||||
id="path89" />
|
||||
<g transform="translate(0.000000, 18.375000)" id="Path">
|
||||
<path d="M79.1175,4.095 L2.375625,4.095 C1.5225,4.095 0.826875,3.399375 0.826875,2.54625 C0.826875,1.693125 1.5225,0.9975 2.375625,0.9975 L79.1175,0.9975 C79.970625,0.9975 80.66625,1.693125 80.66625,2.54625 C80.66625,3.399375 79.970625,4.095 79.1175,4.095 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="cloud-check"
|
||||
d="m 240.12048,110.31165 a 39.582604,39.582604 0 0 1 -10.23938,26.55813 33.935974,33.935974 0 0 1 -20.28366,10.27635 39.949372,39.949372 0 0 0 0.80301,-16.48404 16.944722,16.944722 0 0 0 7.65405,-4.47239 23.665469,23.665469 0 0 0 6.1311,-15.87805 26.589359,26.589359 0 0 0 -26.55812,-26.558123 c -0.87568,0 -5.3742,0.56186 -8.11085,0.91445 a 2.6398778,2.6398778 0 0 1 -2.83769,-1.77451 l -1.08155,-3.155106 A 32.772357,32.772357 0 0 0 158.37085,57.356128 31.757517,31.757517 0 0 0 124.14114,96.347867 l 1.13419,4.851433 a 2.6558127,2.6558127 0 0 1 -1.8179,3.14687 l -4.77313,1.44232 a 15.788381,15.788381 0 0 0 -11.35445,15.14642 10.699791,10.699791 0 0 0 2.19933,6.52543 12.871343,12.871343 0 0 0 9.50281,4.09782 h 7.25749 a 40.137987,40.137987 0 0 0 1.02966,15.93487 h -8.28715 A 28.433555,28.433555 0 0 1 96.535402,136.68302 26.739094,26.739094 0 0 1 91.39497,120.93491 31.54075,31.54075 0 0 1 107.53217,93.318597 c -0.13492,-1.42644 -0.20238,-2.84772 -0.20238,-4.25345 a 47.786197,47.786197 0 0 1 90.59848,-21.246498 42.542454,42.542454 0 0 1 42.19216,42.493001 z m -39.83719,26.55813 a 31.869752,31.869752 0 1 1 -31.86975,-31.86975 31.869752,31.869752 0 0 1 31.86975,31.86975 z m -15.15067,-11.86394 -2.71673,-2.01199 a 1.5763311,1.5763311 0 0 0 -2.00127,0.14182 l -16.73162,15.72576 -9.38033,-4.48657 a 1.7144864,1.7144864 0 0 0 -2.00221,0.5062 l -2.30275,2.94497 a 1.576756,1.576756 0 0 0 0.14182,2.00158 l 11.86234,11.8768 a 4.410933,4.410933 0 0 0 6.89242,-0.53116 l 16.51629,-24.2992 a 1.346922,1.346922 0 0 0 -0.27833,-1.86831 z"
|
||||
style="fill-opacity:1;stroke-width:5.31163" fill="currentColor" />
|
||||
<path d="M199.014375,201.705 L133.363125,201.980625 C127.995,202.006875 123.61125,197.6625 123.598125,192.294375 L123.230625,102.08625 C123.204375,96.705 127.561875,92.32125 132.943125,92.295 L173.8275,92.124375 C176.413125,92.11125 178.89375,93.121875 180.718125,94.94625 L205.56375,119.51625 C207.40125,121.340625 208.45125,123.82125 208.464375,126.406875 L208.74,191.91375 C208.753125,197.295 204.40875,201.67875 199.014375,201.705 Z" id="Path" fill="#2AC3A2"></path>
|
||||
<g id="Group" transform="translate(90.562500, 0.000000)">
|
||||
<path d="M127.089375,21.105 C116.851875,11.1825 104.23875,4.580625 90.58875,1.75875 C99.015,5.210625 106.785,11.52375 113.26875,20.356875 C123.598125,34.426875 129.504375,53.26125 129.898125,73.42125 C129.924375,74.655 129.59625,75.83625 128.9925,76.715625 C128.835,76.951875 128.65125,77.14875 128.4675,77.3325 L145.254375,77.188125 C146.44875,77.175 147.590625,76.689375 148.4175,75.83625 C149.244375,74.983125 149.70375,73.828125 149.664375,72.63375 C149.191875,53.038125 141.1725,34.741875 127.089375,21.105 Z" id="Path" fill="url(#linearGradient-1)"></path>
|
||||
<path d="M21.42,74.379375 C21.459375,54.2325 27.0375,35.28 37.1175,21.039375 C43.60125,11.878125 51.463125,5.355 60.06,1.81125 C46.055625,4.75125 33.193125,11.68125 22.876875,22.036875 C9.03,35.91 1.33875,54.3375 1.2075,73.933125 C1.194375,75.1275 1.666875,76.269375 2.52,77.1225 C3.36,77.9625 4.515,78.435 5.709375,78.421875 L22.929375,78.264375 C22.7325,78.09375 22.561875,77.896875 22.39125,77.660625 C21.774375,76.78125 21.42,75.6 21.42,74.379375 Z" id="Path" fill="url(#linearGradient-2)"></path>
|
||||
<path d="M129.898125,73.42125 C129.504375,53.274375 123.585,34.426875 113.26875,20.356875 C106.785,11.52375 99.015,5.210625 90.58875,1.75875 C86.296875,0.879375 81.9,0.3675 77.450625,0.249375 C82.2675,2.52 86.75625,9.68625 90.365625,21 C94.801875,34.925625 97.400625,53.52375 97.663125,73.395 C97.67625,74.6025 97.545,75.770625 97.295625,76.636875 C97.1775,77.056875 97.033125,77.385 96.875625,77.608125 L128.480625,77.3325 C128.664375,77.14875 128.848125,76.951875 129.005625,76.715625 C129.59625,75.83625 129.924375,74.655 129.898125,73.42125 Z" id="Path" fill="url(#linearGradient-3)"></path>
|
||||
<path d="M75.67875,111.22125 C72.410625,111.22125 69.7725,108.583125 69.7725,105.315 L69.7725,28.940625 C69.7725,25.6725 72.410625,23.034375 75.67875,23.034375 C78.946875,23.034375 81.585,25.6725 81.585,28.940625 L81.585,105.315 C81.585,108.57 78.946875,111.22125 75.67875,111.22125 Z" id="Path" fill="url(#linearGradient-4)"></path>
|
||||
<path d="M52.185,77.030625 C51.9225,76.164375 51.765,74.99625 51.765,73.78875 C51.68625,53.9175 53.94375,35.266875 58.14375,21.275625 C61.53,9.988125 65.848125,2.7825 70.573125,0.3675 C67.01625,0.60375 63.49875,1.07625 60.06,1.798125 C51.463125,5.341875 43.588125,11.878125 37.1175,21.02625 C27.0375,35.266875 21.4725,54.219375 21.42,74.36625 C21.42,75.6 21.76125,76.78125 22.378125,77.6475 C22.54875,77.88375 22.719375,78.080625 22.91625,78.25125 L52.618125,77.98875 C52.47375,77.77875 52.31625,77.450625 52.185,77.030625 Z" id="Path" fill="url(#linearGradient-5)"></path>
|
||||
<path d="M70.573125,0.3675 C65.848125,2.7825 61.516875,9.988125 58.14375,21.275625 C53.956875,35.266875 51.68625,53.9175 51.765,73.78875 C51.765,74.99625 51.9225,76.164375 52.185,77.030625 C52.31625,77.450625 52.460625,77.765625 52.63125,78.001875 L96.8625,77.608125 C97.02,77.371875 97.164375,77.056875 97.2825,76.636875 C97.531875,75.770625 97.663125,74.6025 97.65,73.395 C97.374375,53.52375 94.78875,34.925625 90.3525,21 C86.743125,9.68625 82.254375,2.52 77.4375,0.249375 C76.558125,0.223125 75.67875,0.196875 74.78625,0.21 C73.381875,0.223125 71.9775,0.28875 70.573125,0.3675 Z" id="Path" fill="url(#linearGradient-6)"></path>
|
||||
</g>
|
||||
<path d="M160.88625,175.966875 C159.166875,175.966875 157.513125,175.284375 156.2925,174.06375 L136.78875,154.56 C134.2425,152.01375 134.2425,147.905625 136.78875,145.359375 C139.335,142.813125 143.443125,142.813125 145.989375,145.359375 L160.02,159.39 L184.681875,124.280625 C186.7425,121.340625 190.785,120.61875 193.738125,122.679375 C196.678125,124.74 197.4,128.795625 195.339375,131.735625 L166.24125,173.1975 C165.13875,174.7725 163.393125,175.783125 161.476875,175.940625 C161.266875,175.95375 161.083125,175.966875 160.88625,175.966875 Z" id="Path" fill="#008787"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 22 KiB |
296
assets/error.svg
|
@ -1,258 +1,92 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 356 210"
|
||||
version="1.1"
|
||||
id="svg114">
|
||||
<metadata
|
||||
id="metadata118">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>5A8EEB55-E89B-49C5-8493-6FC78CEDF580</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="356px" height="210px" viewBox="0 0 356 210" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- Generator: sketchtool 53.1 (72631) - https://sketchapp.com -->
|
||||
<title
|
||||
id="title2">5A8EEB55-E89B-49C5-8493-6FC78CEDF580</title>
|
||||
<desc
|
||||
id="desc4">Created with sketchtool.</desc>
|
||||
<defs
|
||||
id="defs42">
|
||||
<linearGradient
|
||||
x1="58.3126473%"
|
||||
y1="123.961053%"
|
||||
x2="40.1375665%"
|
||||
y2="-37.2724424%"
|
||||
id="linearGradient-1">
|
||||
<stop
|
||||
stop-color="#0A5CC7"
|
||||
offset="0.4302823%"
|
||||
id="stop6" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="99.91%"
|
||||
id="stop8" />
|
||||
<title>5A8EEB55-E89B-49C5-8493-6FC78CEDF580</title>
|
||||
<desc>Created with sketchtool.</desc>
|
||||
<defs>
|
||||
<linearGradient x1="58.3126473%" y1="123.961053%" x2="40.1375665%" y2="-37.2724424%" id="linearGradient-1">
|
||||
<stop stop-color="#0A5CC7" offset="0.4302823%"></stop>
|
||||
<stop stop-color="#83219D" offset="99.91%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="-28.1745341%"
|
||||
y1="-47.2105072%"
|
||||
x2="84.4799145%"
|
||||
y2="96.7146446%"
|
||||
id="linearGradient-2">
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="0%"
|
||||
id="stop11" />
|
||||
<stop
|
||||
stop-color="#7878FF"
|
||||
offset="99.91%"
|
||||
id="stop13" />
|
||||
<linearGradient x1="-28.1745341%" y1="-47.2105072%" x2="84.4799145%" y2="96.7146446%" id="linearGradient-2">
|
||||
<stop stop-color="#FA357F" offset="0%"></stop>
|
||||
<stop stop-color="#7878FF" offset="99.91%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="20.1896063%"
|
||||
y1="50.397188%"
|
||||
x2="169.058059%"
|
||||
y2="48.6911625%"
|
||||
id="linearGradient-3">
|
||||
<stop
|
||||
stop-color="#FFF361"
|
||||
offset="0%"
|
||||
id="stop16" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop18" />
|
||||
<linearGradient x1="20.1896063%" y1="50.397188%" x2="169.058059%" y2="48.6911625%" id="linearGradient-3">
|
||||
<stop stop-color="#FFF361" offset="0%"></stop>
|
||||
<stop stop-color="#FFA80A" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="7.14778295%"
|
||||
y1="-13.3614253%"
|
||||
x2="84.3296473%"
|
||||
y2="120.018489%"
|
||||
id="linearGradient-4">
|
||||
<stop
|
||||
stop-color="#FF5162"
|
||||
offset="0%"
|
||||
id="stop21" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="100%"
|
||||
id="stop23" />
|
||||
<linearGradient x1="7.14778295%" y1="-13.3614253%" x2="84.3296473%" y2="120.018489%" id="linearGradient-4">
|
||||
<stop stop-color="#FF5162" offset="0%"></stop>
|
||||
<stop stop-color="#83219D" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="34.0837535%"
|
||||
y1="25.5596147%"
|
||||
x2="59.4736431%"
|
||||
y2="63.1005055%"
|
||||
id="linearGradient-5">
|
||||
<stop
|
||||
stop-color="#FFD943"
|
||||
offset="0%"
|
||||
id="stop26" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop28" />
|
||||
<linearGradient x1="34.0837535%" y1="25.5596147%" x2="59.4736431%" y2="63.1005055%" id="linearGradient-5">
|
||||
<stop stop-color="#FFD943" offset="0%"></stop>
|
||||
<stop stop-color="#FFA80A" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="21.6679292%"
|
||||
y1="-7.19688832%"
|
||||
x2="65.140178%"
|
||||
y2="106.397259%"
|
||||
id="linearGradient-6">
|
||||
<stop
|
||||
stop-color="#FF8748"
|
||||
offset="0%"
|
||||
id="stop31" />
|
||||
<stop
|
||||
stop-color="#FE7852"
|
||||
offset="13.28%"
|
||||
id="stop33" />
|
||||
<stop
|
||||
stop-color="#FC546A"
|
||||
offset="50.49%"
|
||||
id="stop35" />
|
||||
<stop
|
||||
stop-color="#FA3D79"
|
||||
offset="80.73%"
|
||||
id="stop37" />
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="100%"
|
||||
id="stop39" />
|
||||
<linearGradient x1="21.6679292%" y1="-7.19688832%" x2="65.140178%" y2="106.397259%" id="linearGradient-6">
|
||||
<stop stop-color="#FF8748" offset="0%"></stop>
|
||||
<stop stop-color="#FE7852" offset="13.28%"></stop>
|
||||
<stop stop-color="#FC546A" offset="50.49%"></stop>
|
||||
<stop stop-color="#FA3D79" offset="80.73%"></stop>
|
||||
<stop stop-color="#FA357F" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<g
|
||||
id="Send_Went_Wrong"
|
||||
transform="translate(-542.000000, -304.000000)"
|
||||
fill-rule="nonzero">
|
||||
<g
|
||||
id="firefox-send_illustrations-02"
|
||||
transform="translate(541.986755, 304.000000)">
|
||||
<g
|
||||
id="Group"
|
||||
transform="translate(0.000000, 41.721854)"
|
||||
fill="#EDEDF0"
|
||||
opacity="0.5">
|
||||
<g
|
||||
transform="translate(31.986755, 123.774834)"
|
||||
id="g54">
|
||||
<g
|
||||
transform="translate(22.251656, 5.562914)"
|
||||
id="Path">
|
||||
<path
|
||||
d="M1.71059603,3.36556291 L97.0450331,3.36556291 C97.8099338,3.36556291 98.4357616,2.7397351 98.4357616,1.97483444 C98.4357616,1.20993377 97.8099338,0.58410596 97.0450331,0.58410596 L1.71059603,0.58410596 C0.945695364,0.58410596 0.31986755,1.20993377 0.31986755,1.97483444 C0.31986755,2.7397351 0.945695364,3.36556291 1.71059603,3.36556291 Z"
|
||||
id="path44" />
|
||||
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="Send_Went_Wrong" transform="translate(-542.000000, -304.000000)" fill-rule="nonzero">
|
||||
<g id="firefox-send_illustrations-02" transform="translate(541.986755, 304.000000)">
|
||||
<g id="Group" transform="translate(0.000000, 41.721854)" fill="#EDEDF0" opacity="0.5">
|
||||
<g transform="translate(31.986755, 123.774834)">
|
||||
<g transform="translate(22.251656, 5.562914)" id="Path">
|
||||
<path d="M1.71059603,3.36556291 L97.0450331,3.36556291 C97.8099338,3.36556291 98.4357616,2.7397351 98.4357616,1.97483444 C98.4357616,1.20993377 97.8099338,0.58410596 97.0450331,0.58410596 L1.71059603,0.58410596 C0.945695364,0.58410596 0.31986755,1.20993377 0.31986755,1.97483444 C0.31986755,2.7397351 0.945695364,3.36556291 1.71059603,3.36556291 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(80.662252, 0.000000)"
|
||||
id="g49">
|
||||
<path
|
||||
d="M1.84966887,1.86357616 L25.7701987,1.86357616 C26.1596026,1.86357616 26.4655629,1.55761589 26.4655629,1.16821192 C26.4655629,0.778807947 26.1596026,0.472847682 25.7701987,0.472847682 L1.84966887,0.472847682 C1.4602649,0.472847682 1.15430464,0.778807947 1.15430464,1.16821192 C1.15430464,1.55761589 1.4602649,1.86357616 1.84966887,1.86357616 Z"
|
||||
id="path47" />
|
||||
<g transform="translate(80.662252, 0.000000)" id="Path">
|
||||
<path d="M1.84966887,1.86357616 L25.7701987,1.86357616 C26.1596026,1.86357616 26.4655629,1.55761589 26.4655629,1.16821192 C26.4655629,0.778807947 26.1596026,0.472847682 25.7701987,0.472847682 L1.84966887,0.472847682 C1.4602649,0.472847682 1.15430464,0.778807947 1.15430464,1.16821192 C1.15430464,1.55761589 1.4602649,1.86357616 1.84966887,1.86357616 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 12.516556)"
|
||||
id="Shape">
|
||||
<path
|
||||
d="M0.598013245,1.9192053 C0.598013245,1.52980132 0.90397351,1.22384106 1.29337748,1.22384106 L5.46556291,1.22384106 C5.85496689,1.22384106 6.16092715,1.52980132 6.16092715,1.9192053 C6.16092715,2.30860927 5.85496689,2.61456954 5.46556291,2.61456954 L1.29337748,2.61456954 C0.917880795,2.61456954 0.598013245,2.29470199 0.598013245,1.9192053 Z M15.8960265,1.9192053 C15.8960265,1.52980132 16.2019868,1.22384106 16.5913907,1.22384106 L33.2801325,1.22384106 C33.6695364,1.22384106 33.9754967,1.52980132 33.9754967,1.9192053 C33.9754967,2.30860927 33.6695364,2.61456954 33.2801325,2.61456954 L16.5913907,2.61456954 C16.215894,2.61456954 15.8960265,2.29470199 15.8960265,1.9192053 Z M45.1013245,1.9192053 C45.1013245,1.52980132 45.4072848,1.22384106 45.7966887,1.22384106 L47.1874172,1.22384106 C47.5768212,1.22384106 47.8827815,1.52980132 47.8827815,1.9192053 C47.8827815,2.30860927 47.5768212,2.61456954 47.1874172,2.61456954 L45.7966887,2.61456954 C45.4211921,2.61456954 45.1013245,2.29470199 45.1013245,1.9192053 Z M52.0549669,1.9192053 C52.0549669,1.52980132 52.3609272,1.22384106 52.7503311,1.22384106 L56.9225166,1.22384106 C57.3119205,1.22384106 57.6178808,1.52980132 57.6178808,1.9192053 C57.6178808,2.30860927 57.3119205,2.61456954 56.9225166,2.61456954 L52.7503311,2.61456954 C52.3748344,2.61456954 52.0549669,2.29470199 52.0549669,1.9192053 Z M67.3529801,1.9192053 C67.3529801,1.52980132 67.6589404,1.22384106 68.0483444,1.22384106 L84.7370861,1.22384106 C85.1264901,1.22384106 85.4324503,1.52980132 85.4324503,1.9192053 C85.4324503,2.30860927 85.1264901,2.61456954 84.7370861,2.61456954 L68.0483444,2.61456954 C67.6728477,2.61456954 67.3529801,2.29470199 67.3529801,1.9192053 Z"
|
||||
id="path51" />
|
||||
<g transform="translate(0.000000, 12.516556)" id="Shape">
|
||||
<path d="M0.598013245,1.9192053 C0.598013245,1.52980132 0.90397351,1.22384106 1.29337748,1.22384106 L5.46556291,1.22384106 C5.85496689,1.22384106 6.16092715,1.52980132 6.16092715,1.9192053 C6.16092715,2.30860927 5.85496689,2.61456954 5.46556291,2.61456954 L1.29337748,2.61456954 C0.917880795,2.61456954 0.598013245,2.29470199 0.598013245,1.9192053 Z M15.8960265,1.9192053 C15.8960265,1.52980132 16.2019868,1.22384106 16.5913907,1.22384106 L33.2801325,1.22384106 C33.6695364,1.22384106 33.9754967,1.52980132 33.9754967,1.9192053 C33.9754967,2.30860927 33.6695364,2.61456954 33.2801325,2.61456954 L16.5913907,2.61456954 C16.215894,2.61456954 15.8960265,2.29470199 15.8960265,1.9192053 Z M45.1013245,1.9192053 C45.1013245,1.52980132 45.4072848,1.22384106 45.7966887,1.22384106 L47.1874172,1.22384106 C47.5768212,1.22384106 47.8827815,1.52980132 47.8827815,1.9192053 C47.8827815,2.30860927 47.5768212,2.61456954 47.1874172,2.61456954 L45.7966887,2.61456954 C45.4211921,2.61456954 45.1013245,2.29470199 45.1013245,1.9192053 Z M52.0549669,1.9192053 C52.0549669,1.52980132 52.3609272,1.22384106 52.7503311,1.22384106 L56.9225166,1.22384106 C57.3119205,1.22384106 57.6178808,1.52980132 57.6178808,1.9192053 C57.6178808,2.30860927 57.3119205,2.61456954 56.9225166,2.61456954 L52.7503311,2.61456954 C52.3748344,2.61456954 52.0549669,2.29470199 52.0549669,1.9192053 Z M67.3529801,1.9192053 C67.3529801,1.52980132 67.6589404,1.22384106 68.0483444,1.22384106 L84.7370861,1.22384106 C85.1264901,1.22384106 85.4324503,1.52980132 85.4324503,1.9192053 C85.4324503,2.30860927 85.1264901,2.61456954 84.7370861,2.61456954 L68.0483444,2.61456954 C67.6728477,2.61456954 67.3529801,2.29470199 67.3529801,1.9192053 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(130.728477, 76.490066)"
|
||||
id="g68">
|
||||
<g
|
||||
transform="translate(27.814570, 5.562914)"
|
||||
id="g58">
|
||||
<path
|
||||
d="M1.93311258,3.25430464 L155.85894,3.25430464 C156.623841,3.25430464 157.249669,2.62847682 157.249669,1.86357616 C157.249669,1.0986755 156.623841,0.472847682 155.85894,0.472847682 L1.93311258,0.472847682 C1.16821192,0.472847682 0.542384106,1.0986755 0.542384106,1.86357616 C0.542384106,2.62847682 1.15430464,3.25430464 1.93311258,3.25430464 Z"
|
||||
id="path56" />
|
||||
<g transform="translate(130.728477, 76.490066)">
|
||||
<g transform="translate(27.814570, 5.562914)" id="Path">
|
||||
<path d="M1.93311258,3.25430464 L155.85894,3.25430464 C156.623841,3.25430464 157.249669,2.62847682 157.249669,1.86357616 C157.249669,1.0986755 156.623841,0.472847682 155.85894,0.472847682 L1.93311258,0.472847682 C1.16821192,0.472847682 0.542384106,1.0986755 0.542384106,1.86357616 C0.542384106,2.62847682 1.15430464,3.25430464 1.93311258,3.25430464 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(48.675497, 0.000000)"
|
||||
id="g62">
|
||||
<path
|
||||
d="M1.86357616,1.86357616 L40.4701987,1.86357616 C40.8596026,1.86357616 41.1655629,1.55761589 41.1655629,1.16821192 C41.1655629,0.778807947 40.8596026,0.472847682 40.4701987,0.472847682 L1.86357616,0.472847682 C1.47417219,0.472847682 1.16821192,0.778807947 1.16821192,1.16821192 C1.16821192,1.55761589 1.47417219,1.86357616 1.86357616,1.86357616 Z"
|
||||
id="path60" />
|
||||
<g transform="translate(48.675497, 0.000000)" id="Path">
|
||||
<path d="M1.86357616,1.86357616 L40.4701987,1.86357616 C40.8596026,1.86357616 41.1655629,1.55761589 41.1655629,1.16821192 C41.1655629,0.778807947 40.8596026,0.472847682 40.4701987,0.472847682 L1.86357616,0.472847682 C1.47417219,0.472847682 1.16821192,0.778807947 1.16821192,1.16821192 C1.16821192,1.55761589 1.47417219,1.86357616 1.86357616,1.86357616 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 12.516556)"
|
||||
id="g66">
|
||||
<path
|
||||
d="M1.32119205,1.68278146 C1.32119205,1.29337748 1.62715232,0.987417219 2.01655629,0.987417219 L18.705298,0.987417219 C19.094702,0.987417219 19.4006623,1.29337748 19.4006623,1.68278146 C19.4006623,2.07218543 19.094702,2.3781457 18.705298,2.3781457 L2.01655629,2.3781457 C1.6410596,2.3781457 1.32119205,2.07218543 1.32119205,1.68278146 Z M29.1357616,1.68278146 C29.1357616,1.29337748 29.4417219,0.987417219 29.8311258,0.987417219 L34.0033113,0.987417219 C34.3927152,0.987417219 34.6986755,1.29337748 34.6986755,1.68278146 C34.6986755,2.07218543 34.3927152,2.3781457 34.0033113,2.3781457 L29.8311258,2.3781457 C29.4556291,2.3781457 29.1357616,2.07218543 29.1357616,1.68278146 Z M38.8708609,1.68278146 C38.8708609,1.29337748 39.1768212,0.987417219 39.5662252,0.987417219 L40.9569536,0.987417219 C41.3463576,0.987417219 41.6523179,1.29337748 41.6523179,1.68278146 C41.6523179,2.07218543 41.3463576,2.3781457 40.9569536,2.3781457 L39.5662252,2.3781457 C39.1907285,2.3781457 38.8708609,2.07218543 38.8708609,1.68278146 Z M52.7781457,1.68278146 C52.7781457,1.29337748 53.084106,0.987417219 53.4735099,0.987417219 L70.1622517,0.987417219 C70.5516556,0.987417219 70.8576159,1.29337748 70.8576159,1.68278146 C70.8576159,2.07218543 70.5516556,2.3781457 70.1622517,2.3781457 L53.4735099,2.3781457 C53.0980132,2.3781457 52.7781457,2.07218543 52.7781457,1.68278146 Z M80.5927152,1.68278146 C80.5927152,1.29337748 80.8986755,0.987417219 81.2880795,0.987417219 L85.4602649,0.987417219 C85.8496689,0.987417219 86.1556291,1.29337748 86.1556291,1.68278146 C86.1556291,2.07218543 85.8496689,2.3781457 85.4602649,2.3781457 L81.2880795,2.3781457 C80.9125828,2.3781457 80.5927152,2.07218543 80.5927152,1.68278146 Z M90.3278146,1.68278146 C90.3278146,1.29337748 90.6337748,0.987417219 91.0231788,0.987417219 L92.4139073,0.987417219 C92.8033113,0.987417219 93.1092715,1.29337748 93.1092715,1.68278146 C93.1092715,2.07218543 92.8033113,2.3781457 92.4139073,2.3781457 L91.0231788,2.3781457 C90.6476821,2.3781457 90.3278146,2.07218543 90.3278146,1.68278146 Z M104.235099,1.68278146 C104.235099,1.29337748 104.54106,0.987417219 104.930464,0.987417219 L121.619205,0.987417219 C122.008609,0.987417219 122.31457,1.29337748 122.31457,1.68278146 C122.31457,2.07218543 122.008609,2.3781457 121.619205,2.3781457 L104.930464,2.3781457 C104.554967,2.3781457 104.235099,2.07218543 104.235099,1.68278146 Z M132.049669,1.68278146 C132.049669,1.29337748 132.355629,0.987417219 132.745033,0.987417219 L136.917219,0.987417219 C137.306623,0.987417219 137.612583,1.29337748 137.612583,1.68278146 C137.612583,2.07218543 137.306623,2.3781457 136.917219,2.3781457 L132.745033,2.3781457 C132.369536,2.3781457 132.049669,2.07218543 132.049669,1.68278146 Z M141.784768,1.68278146 C141.784768,1.29337748 142.090728,0.987417219 142.480132,0.987417219 L143.870861,0.987417219 C144.260265,0.987417219 144.566225,1.29337748 144.566225,1.68278146 C144.566225,2.07218543 144.260265,2.3781457 143.870861,2.3781457 L142.480132,2.3781457 C142.104636,2.3781457 141.784768,2.07218543 141.784768,1.68278146 Z M155.692053,1.68278146 C155.692053,1.29337748 155.998013,0.987417219 156.387417,0.987417219 L173.076159,0.987417219 C173.465563,0.987417219 173.771523,1.29337748 173.771523,1.68278146 C173.771523,2.07218543 173.465563,2.3781457 173.076159,2.3781457 L156.387417,2.3781457 C156.011921,2.3781457 155.692053,2.07218543 155.692053,1.68278146 Z M183.506623,1.68278146 C183.506623,1.29337748 183.812583,0.987417219 184.201987,0.987417219 L188.374172,0.987417219 C188.763576,0.987417219 189.069536,1.29337748 189.069536,1.68278146 C189.069536,2.07218543 188.763576,2.3781457 188.374172,2.3781457 L184.201987,2.3781457 C183.82649,2.3781457 183.506623,2.07218543 183.506623,1.68278146 Z M193.241722,1.68278146 C193.241722,1.29337748 193.547682,0.987417219 193.937086,0.987417219 L195.327815,0.987417219 C195.717219,0.987417219 196.023179,1.29337748 196.023179,1.68278146 C196.023179,2.07218543 195.717219,2.3781457 195.327815,2.3781457 L193.937086,2.3781457 C193.561589,2.3781457 193.241722,2.07218543 193.241722,1.68278146 Z M207.149007,1.68278146 C207.149007,1.29337748 207.454967,0.987417219 207.844371,0.987417219 L224.533113,0.987417219 C224.922517,0.987417219 225.228477,1.29337748 225.228477,1.68278146 C225.228477,2.07218543 224.922517,2.3781457 224.533113,2.3781457 L207.844371,2.3781457 C207.468874,2.3781457 207.149007,2.07218543 207.149007,1.68278146 Z"
|
||||
id="path64" />
|
||||
<g transform="translate(0.000000, 12.516556)" id="Shape">
|
||||
<path d="M1.32119205,1.68278146 C1.32119205,1.29337748 1.62715232,0.987417219 2.01655629,0.987417219 L18.705298,0.987417219 C19.094702,0.987417219 19.4006623,1.29337748 19.4006623,1.68278146 C19.4006623,2.07218543 19.094702,2.3781457 18.705298,2.3781457 L2.01655629,2.3781457 C1.6410596,2.3781457 1.32119205,2.07218543 1.32119205,1.68278146 Z M29.1357616,1.68278146 C29.1357616,1.29337748 29.4417219,0.987417219 29.8311258,0.987417219 L34.0033113,0.987417219 C34.3927152,0.987417219 34.6986755,1.29337748 34.6986755,1.68278146 C34.6986755,2.07218543 34.3927152,2.3781457 34.0033113,2.3781457 L29.8311258,2.3781457 C29.4556291,2.3781457 29.1357616,2.07218543 29.1357616,1.68278146 Z M38.8708609,1.68278146 C38.8708609,1.29337748 39.1768212,0.987417219 39.5662252,0.987417219 L40.9569536,0.987417219 C41.3463576,0.987417219 41.6523179,1.29337748 41.6523179,1.68278146 C41.6523179,2.07218543 41.3463576,2.3781457 40.9569536,2.3781457 L39.5662252,2.3781457 C39.1907285,2.3781457 38.8708609,2.07218543 38.8708609,1.68278146 Z M52.7781457,1.68278146 C52.7781457,1.29337748 53.084106,0.987417219 53.4735099,0.987417219 L70.1622517,0.987417219 C70.5516556,0.987417219 70.8576159,1.29337748 70.8576159,1.68278146 C70.8576159,2.07218543 70.5516556,2.3781457 70.1622517,2.3781457 L53.4735099,2.3781457 C53.0980132,2.3781457 52.7781457,2.07218543 52.7781457,1.68278146 Z M80.5927152,1.68278146 C80.5927152,1.29337748 80.8986755,0.987417219 81.2880795,0.987417219 L85.4602649,0.987417219 C85.8496689,0.987417219 86.1556291,1.29337748 86.1556291,1.68278146 C86.1556291,2.07218543 85.8496689,2.3781457 85.4602649,2.3781457 L81.2880795,2.3781457 C80.9125828,2.3781457 80.5927152,2.07218543 80.5927152,1.68278146 Z M90.3278146,1.68278146 C90.3278146,1.29337748 90.6337748,0.987417219 91.0231788,0.987417219 L92.4139073,0.987417219 C92.8033113,0.987417219 93.1092715,1.29337748 93.1092715,1.68278146 C93.1092715,2.07218543 92.8033113,2.3781457 92.4139073,2.3781457 L91.0231788,2.3781457 C90.6476821,2.3781457 90.3278146,2.07218543 90.3278146,1.68278146 Z M104.235099,1.68278146 C104.235099,1.29337748 104.54106,0.987417219 104.930464,0.987417219 L121.619205,0.987417219 C122.008609,0.987417219 122.31457,1.29337748 122.31457,1.68278146 C122.31457,2.07218543 122.008609,2.3781457 121.619205,2.3781457 L104.930464,2.3781457 C104.554967,2.3781457 104.235099,2.07218543 104.235099,1.68278146 Z M132.049669,1.68278146 C132.049669,1.29337748 132.355629,0.987417219 132.745033,0.987417219 L136.917219,0.987417219 C137.306623,0.987417219 137.612583,1.29337748 137.612583,1.68278146 C137.612583,2.07218543 137.306623,2.3781457 136.917219,2.3781457 L132.745033,2.3781457 C132.369536,2.3781457 132.049669,2.07218543 132.049669,1.68278146 Z M141.784768,1.68278146 C141.784768,1.29337748 142.090728,0.987417219 142.480132,0.987417219 L143.870861,0.987417219 C144.260265,0.987417219 144.566225,1.29337748 144.566225,1.68278146 C144.566225,2.07218543 144.260265,2.3781457 143.870861,2.3781457 L142.480132,2.3781457 C142.104636,2.3781457 141.784768,2.07218543 141.784768,1.68278146 Z M155.692053,1.68278146 C155.692053,1.29337748 155.998013,0.987417219 156.387417,0.987417219 L173.076159,0.987417219 C173.465563,0.987417219 173.771523,1.29337748 173.771523,1.68278146 C173.771523,2.07218543 173.465563,2.3781457 173.076159,2.3781457 L156.387417,2.3781457 C156.011921,2.3781457 155.692053,2.07218543 155.692053,1.68278146 Z M183.506623,1.68278146 C183.506623,1.29337748 183.812583,0.987417219 184.201987,0.987417219 L188.374172,0.987417219 C188.763576,0.987417219 189.069536,1.29337748 189.069536,1.68278146 C189.069536,2.07218543 188.763576,2.3781457 188.374172,2.3781457 L184.201987,2.3781457 C183.82649,2.3781457 183.506623,2.07218543 183.506623,1.68278146 Z M193.241722,1.68278146 C193.241722,1.29337748 193.547682,0.987417219 193.937086,0.987417219 L195.327815,0.987417219 C195.717219,0.987417219 196.023179,1.29337748 196.023179,1.68278146 C196.023179,2.07218543 195.717219,2.3781457 195.327815,2.3781457 L193.937086,2.3781457 C193.561589,2.3781457 193.241722,2.07218543 193.241722,1.68278146 Z M207.149007,1.68278146 C207.149007,1.29337748 207.454967,0.987417219 207.844371,0.987417219 L224.533113,0.987417219 C224.922517,0.987417219 225.228477,1.29337748 225.228477,1.68278146 C225.228477,2.07218543 224.922517,2.3781457 224.533113,2.3781457 L207.844371,2.3781457 C207.468874,2.3781457 207.149007,2.07218543 207.149007,1.68278146 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g80">
|
||||
<path
|
||||
d="M2.30860927,35.1298013 L37.6609272,35.1298013 C37.6609272,35.1298013 26.6046358,10.402649 50.0801325,7.20397351 C71.0245033,4.35298013 79.2993377,25.881457 79.2993377,25.881457 C79.2993377,25.881457 81.7887417,13.4622517 94.2357616,15.8403974 C106.515894,18.1768212 115.583444,37.9390728 115.583444,37.9390728 L146.374172,37.9390728"
|
||||
id="path70" />
|
||||
<g
|
||||
transform="translate(1.390728, 0.000000)"
|
||||
id="g74">
|
||||
<path
|
||||
d="M145.609272,32.0980132 L136.513907,32.0980132 C136.054967,32.0980132 135.693377,31.7364238 135.693377,31.2774834 C135.693377,30.818543 136.054967,30.4569536 136.513907,30.4569536 L145.609272,30.4569536 C146.068212,30.4569536 146.429801,30.818543 146.429801,31.2774834 C146.429801,31.7364238 146.054305,32.0980132 145.609272,32.0980132 Z M121.772185,32.0980132 L120.131126,32.0980132 C119.672185,32.0980132 119.310596,31.7364238 119.310596,31.2774834 C119.310596,30.818543 119.672185,30.4569536 120.131126,30.4569536 L121.772185,30.4569536 C122.231126,30.4569536 122.592715,30.818543 122.592715,31.2774834 C122.592715,31.7364238 122.231126,32.0980132 121.772185,32.0980132 Z M36.8821192,31.110596 L34.2536424,31.110596 C33.794702,31.110596 33.4331126,30.7490066 33.4331126,30.2900662 C33.4331126,29.8311258 33.794702,29.4695364 34.2536424,29.4695364 L35.6721854,29.4695364 C35.5609272,29.1774834 35.4357616,28.815894 35.2966887,28.4125828 C35.1576159,27.981457 35.3801325,27.5225166 35.8112583,27.3695364 C36.2423841,27.2304636 36.7013245,27.4529801 36.8543046,27.884106 C37.2854305,29.1496689 37.6331126,29.9284768 37.6331126,29.9423841 C37.7443709,30.1927152 37.7165563,30.4847682 37.5774834,30.7211921 C37.410596,30.9715232 37.1602649,31.110596 36.8821192,31.110596 Z M21.1529801,31.110596 L1.52980132,31.110596 C1.07086093,31.110596 0.709271523,30.7490066 0.709271523,30.2900662 C0.709271523,29.8311258 1.07086093,29.4695364 1.52980132,29.4695364 L21.1668874,29.4695364 C21.6258278,29.4695364 21.9874172,29.8311258 21.9874172,30.2900662 C21.9735099,30.7350993 21.6119205,31.110596 21.1529801,31.110596 Z M114.234437,31.013245 C113.942384,31.013245 113.664238,30.8602649 113.525166,30.5960265 C112.996689,29.6642384 112.134437,28.1900662 110.980132,26.4655629 C110.729801,26.0900662 110.827152,25.5754967 111.202649,25.3251656 C111.578146,25.0748344 112.092715,25.1721854 112.343046,25.5476821 C113.525166,27.3139073 114.415232,28.8298013 114.957616,29.789404 C115.180132,30.1788079 115.04106,30.6794702 114.637748,30.9019868 C114.512583,30.9854305 114.37351,31.013245 114.234437,31.013245 Z M34.5456954,22.613245 C34.1423841,22.613245 33.794702,22.3211921 33.7390728,21.9039735 C33.6556291,21.3615894 33.6,20.7913907 33.5582781,20.2211921 C33.5165563,19.7761589 33.8642384,19.3728477 34.3092715,19.3450331 C34.7821192,19.3172185 35.1576159,19.6370861 35.1854305,20.0960265 C35.2271523,20.6384106 35.2827815,21.1668874 35.3662252,21.681457 C35.4357616,22.1264901 35.115894,22.5437086 34.6708609,22.5993377 C34.6152318,22.613245 34.5735099,22.613245 34.5456954,22.613245 Z M77.1576159,19.0112583 C76.8655629,19.0112583 76.5874172,18.8582781 76.4344371,18.5801325 C76.1980132,18.1490066 75.9337748,17.6761589 75.6417219,17.189404 C75.405298,16.8 75.5304636,16.2993377 75.9198675,16.0629139 C76.3092715,15.8264901 76.8099338,15.9516556 77.0463576,16.3410596 C77.3523179,16.8556291 77.6304636,17.3423841 77.8807947,17.8013245 C78.089404,18.2046358 77.9503311,18.6913907 77.5470199,18.9139073 C77.4218543,18.9695364 77.2966887,19.0112583 77.1576159,19.0112583 Z M103.136424,16.9112583 C102.941722,16.9112583 102.760927,16.8417219 102.607947,16.7165563 C99.4788079,14.0324503 96.3635762,12.3774834 93.3178808,11.7933775 C90.3278146,11.2231788 87.6854305,11.5152318 85.4880795,12.6417219 C85.0847682,12.8503311 84.5980132,12.6834437 84.389404,12.2940397 C84.1807947,11.8907285 84.3337748,11.4039735 84.7370861,11.1953642 C87.2543046,9.88807947 90.2721854,9.55430464 93.6238411,10.1940397 C96.9476821,10.8337748 100.327152,12.6 103.678808,15.4788079 C104.02649,15.7708609 104.054305,16.2854305 103.762252,16.6331126 C103.595364,16.8139073 103.372848,16.9112583 103.136424,16.9112583 Z M72.5125828,12.2801325 C72.2900662,12.2801325 72.0536424,12.1827815 71.9006623,12.0019868 C70.8298013,10.7642384 69.6754967,9.63774834 68.4933775,8.65033113 C68.1456954,8.35827815 68.1039735,7.84370861 68.3960265,7.49602649 C68.6880795,7.14834437 69.202649,7.10662252 69.5503311,7.3986755 C70.8019868,8.44172185 72.0119205,9.63774834 73.1384106,10.9311258 C73.4304636,11.2788079 73.402649,11.7933775 73.0549669,12.0854305 C72.9019868,12.210596 72.7072848,12.2801325 72.5125828,12.2801325 Z M38.7735099,7.50993377 C38.5509934,7.50993377 38.3284768,7.41258278 38.1615894,7.24569536 C37.8556291,6.91192053 37.8834437,6.39735099 38.2172185,6.09139073 C40.8317881,3.72715232 44.5172185,2.19735099 49.1761589,1.57152318 C52.0271523,1.18211921 54.8225166,1.22384106 57.4649007,1.68278146 C57.9099338,1.76622517 58.2019868,2.18344371 58.1324503,2.62847682 C58.0490066,3.07350993 57.6317881,3.3794702 57.186755,3.29602649 C54.7112583,2.86490066 52.0827815,2.83708609 49.3986755,3.1986755 C45.0735099,3.79668874 41.6801325,5.17350993 39.315894,7.31523179 C39.1629139,7.44039735 38.9682119,7.50993377 38.7735099,7.50993377 Z"
|
||||
id="path72" />
|
||||
<g>
|
||||
<path d="M2.30860927,35.1298013 L37.6609272,35.1298013 C37.6609272,35.1298013 26.6046358,10.402649 50.0801325,7.20397351 C71.0245033,4.35298013 79.2993377,25.881457 79.2993377,25.881457 C79.2993377,25.881457 81.7887417,13.4622517 94.2357616,15.8403974 C106.515894,18.1768212 115.583444,37.9390728 115.583444,37.9390728 L146.374172,37.9390728" id="Path"></path>
|
||||
<g transform="translate(1.390728, 0.000000)" id="Shape">
|
||||
<path d="M145.609272,32.0980132 L136.513907,32.0980132 C136.054967,32.0980132 135.693377,31.7364238 135.693377,31.2774834 C135.693377,30.818543 136.054967,30.4569536 136.513907,30.4569536 L145.609272,30.4569536 C146.068212,30.4569536 146.429801,30.818543 146.429801,31.2774834 C146.429801,31.7364238 146.054305,32.0980132 145.609272,32.0980132 Z M121.772185,32.0980132 L120.131126,32.0980132 C119.672185,32.0980132 119.310596,31.7364238 119.310596,31.2774834 C119.310596,30.818543 119.672185,30.4569536 120.131126,30.4569536 L121.772185,30.4569536 C122.231126,30.4569536 122.592715,30.818543 122.592715,31.2774834 C122.592715,31.7364238 122.231126,32.0980132 121.772185,32.0980132 Z M36.8821192,31.110596 L34.2536424,31.110596 C33.794702,31.110596 33.4331126,30.7490066 33.4331126,30.2900662 C33.4331126,29.8311258 33.794702,29.4695364 34.2536424,29.4695364 L35.6721854,29.4695364 C35.5609272,29.1774834 35.4357616,28.815894 35.2966887,28.4125828 C35.1576159,27.981457 35.3801325,27.5225166 35.8112583,27.3695364 C36.2423841,27.2304636 36.7013245,27.4529801 36.8543046,27.884106 C37.2854305,29.1496689 37.6331126,29.9284768 37.6331126,29.9423841 C37.7443709,30.1927152 37.7165563,30.4847682 37.5774834,30.7211921 C37.410596,30.9715232 37.1602649,31.110596 36.8821192,31.110596 Z M21.1529801,31.110596 L1.52980132,31.110596 C1.07086093,31.110596 0.709271523,30.7490066 0.709271523,30.2900662 C0.709271523,29.8311258 1.07086093,29.4695364 1.52980132,29.4695364 L21.1668874,29.4695364 C21.6258278,29.4695364 21.9874172,29.8311258 21.9874172,30.2900662 C21.9735099,30.7350993 21.6119205,31.110596 21.1529801,31.110596 Z M114.234437,31.013245 C113.942384,31.013245 113.664238,30.8602649 113.525166,30.5960265 C112.996689,29.6642384 112.134437,28.1900662 110.980132,26.4655629 C110.729801,26.0900662 110.827152,25.5754967 111.202649,25.3251656 C111.578146,25.0748344 112.092715,25.1721854 112.343046,25.5476821 C113.525166,27.3139073 114.415232,28.8298013 114.957616,29.789404 C115.180132,30.1788079 115.04106,30.6794702 114.637748,30.9019868 C114.512583,30.9854305 114.37351,31.013245 114.234437,31.013245 Z M34.5456954,22.613245 C34.1423841,22.613245 33.794702,22.3211921 33.7390728,21.9039735 C33.6556291,21.3615894 33.6,20.7913907 33.5582781,20.2211921 C33.5165563,19.7761589 33.8642384,19.3728477 34.3092715,19.3450331 C34.7821192,19.3172185 35.1576159,19.6370861 35.1854305,20.0960265 C35.2271523,20.6384106 35.2827815,21.1668874 35.3662252,21.681457 C35.4357616,22.1264901 35.115894,22.5437086 34.6708609,22.5993377 C34.6152318,22.613245 34.5735099,22.613245 34.5456954,22.613245 Z M77.1576159,19.0112583 C76.8655629,19.0112583 76.5874172,18.8582781 76.4344371,18.5801325 C76.1980132,18.1490066 75.9337748,17.6761589 75.6417219,17.189404 C75.405298,16.8 75.5304636,16.2993377 75.9198675,16.0629139 C76.3092715,15.8264901 76.8099338,15.9516556 77.0463576,16.3410596 C77.3523179,16.8556291 77.6304636,17.3423841 77.8807947,17.8013245 C78.089404,18.2046358 77.9503311,18.6913907 77.5470199,18.9139073 C77.4218543,18.9695364 77.2966887,19.0112583 77.1576159,19.0112583 Z M103.136424,16.9112583 C102.941722,16.9112583 102.760927,16.8417219 102.607947,16.7165563 C99.4788079,14.0324503 96.3635762,12.3774834 93.3178808,11.7933775 C90.3278146,11.2231788 87.6854305,11.5152318 85.4880795,12.6417219 C85.0847682,12.8503311 84.5980132,12.6834437 84.389404,12.2940397 C84.1807947,11.8907285 84.3337748,11.4039735 84.7370861,11.1953642 C87.2543046,9.88807947 90.2721854,9.55430464 93.6238411,10.1940397 C96.9476821,10.8337748 100.327152,12.6 103.678808,15.4788079 C104.02649,15.7708609 104.054305,16.2854305 103.762252,16.6331126 C103.595364,16.8139073 103.372848,16.9112583 103.136424,16.9112583 Z M72.5125828,12.2801325 C72.2900662,12.2801325 72.0536424,12.1827815 71.9006623,12.0019868 C70.8298013,10.7642384 69.6754967,9.63774834 68.4933775,8.65033113 C68.1456954,8.35827815 68.1039735,7.84370861 68.3960265,7.49602649 C68.6880795,7.14834437 69.202649,7.10662252 69.5503311,7.3986755 C70.8019868,8.44172185 72.0119205,9.63774834 73.1384106,10.9311258 C73.4304636,11.2788079 73.402649,11.7933775 73.0549669,12.0854305 C72.9019868,12.210596 72.7072848,12.2801325 72.5125828,12.2801325 Z M38.7735099,7.50993377 C38.5509934,7.50993377 38.3284768,7.41258278 38.1615894,7.24569536 C37.8556291,6.91192053 37.8834437,6.39735099 38.2172185,6.09139073 C40.8317881,3.72715232 44.5172185,2.19735099 49.1761589,1.57152318 C52.0271523,1.18211921 54.8225166,1.22384106 57.4649007,1.68278146 C57.9099338,1.76622517 58.2019868,2.18344371 58.1324503,2.62847682 C58.0490066,3.07350993 57.6317881,3.3794702 57.186755,3.29602649 C54.7112583,2.86490066 52.0827815,2.83708609 49.3986755,3.1986755 C45.0735099,3.79668874 41.6801325,5.17350993 39.315894,7.31523179 C39.1629139,7.44039735 38.9682119,7.50993377 38.7735099,7.50993377 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 34.768212)"
|
||||
id="g78">
|
||||
<path
|
||||
d="M148.015232,3.60198675 L2.30860927,3.60198675 C1.40463576,3.60198675 0.667549669,2.86490066 0.667549669,1.96092715 C0.667549669,1.05695364 1.40463576,0.31986755 2.30860927,0.31986755 L148.015232,0.31986755 C148.919205,0.31986755 149.656291,1.05695364 149.656291,1.96092715 C149.642384,2.87880795 148.919205,3.60198675 148.015232,3.60198675 Z"
|
||||
id="path76" />
|
||||
<g transform="translate(0.000000, 34.768212)" id="Path">
|
||||
<path d="M148.015232,3.60198675 L2.30860927,3.60198675 C1.40463576,3.60198675 0.667549669,2.86490066 0.667549669,1.96092715 C0.667549669,1.05695364 1.40463576,0.31986755 2.30860927,0.31986755 L148.015232,0.31986755 C148.919205,0.31986755 149.656291,1.05695364 149.656291,1.96092715 C149.642384,2.87880795 148.919205,3.60198675 148.015232,3.60198675 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(230.860927, 1.390728)"
|
||||
id="g92">
|
||||
<path
|
||||
d="M2.21125828,20.415894 L21.9456954,20.415894 C21.9456954,20.415894 15.7708609,6.61986755 28.8715232,4.8397351 C40.5536424,3.25430464 45.1847682,15.2562914 45.1847682,15.2562914 C45.1847682,15.2562914 46.5754967,8.33046358 53.5291391,9.65165563 C60.3854305,10.9589404 65.4476821,21.9874172 65.4476821,21.9874172 L82.6231788,21.9874172"
|
||||
id="path82" />
|
||||
<g
|
||||
transform="translate(1.390728, 0.000000)"
|
||||
id="g86">
|
||||
<path
|
||||
d="M21.1251656,18.2046358 L1.41854305,18.2046358 C0.959602649,18.2046358 0.598013245,17.8430464 0.598013245,17.384106 C0.598013245,16.9251656 0.959602649,16.5635762 1.41854305,16.5635762 L21.1251656,16.5635762 C21.584106,16.5635762 21.9456954,16.9251656 21.9456954,17.384106 C21.9456954,17.8430464 21.584106,18.2046358 21.1251656,18.2046358 Z M81.8304636,17.9543046 L81.0655629,17.9543046 C80.6066225,17.9543046 80.2450331,17.5927152 80.2450331,17.1337748 C80.2450331,16.6748344 80.6066225,16.313245 81.0655629,16.313245 L81.8304636,16.313245 C82.289404,16.313245 82.6509934,16.6748344 82.6509934,17.1337748 C82.6509934,17.5927152 82.2754967,17.9543046 81.8304636,17.9543046 Z M74.5013245,17.9543046 L69.5781457,17.9543046 C69.1192053,17.9543046 68.7576159,17.5927152 68.7576159,17.1337748 C68.7576159,16.6748344 69.1192053,16.313245 69.5781457,16.313245 L74.5013245,16.313245 C74.9602649,16.313245 75.3218543,16.6748344 75.3218543,17.1337748 C75.3218543,17.5927152 74.9602649,17.9543046 74.5013245,17.9543046 Z M44.392053,13.0450331 C44.0582781,13.0450331 43.7523179,12.8225166 43.6271523,12.5165563 L43.5019868,12.2245033 C43.3350993,11.8490066 43.4741722,11.4039735 43.8218543,11.1953642 C44.586755,8.90066225 46.7423841,5.63245033 51.0397351,5.63245033 C51.6238411,5.63245033 52.2496689,5.68807947 52.889404,5.81324503 C55.3370861,6.27218543 57.7986755,7.70463576 60.218543,10.0410596 C60.5384106,10.3609272 60.5523179,10.8754967 60.2324503,11.1953642 C59.9125828,11.5291391 59.3980132,11.5291391 59.0781457,11.2092715 C56.894702,9.09536424 54.7112583,7.81589404 52.5834437,7.41258278 C52.0410596,7.31523179 51.5264901,7.25960265 51.0397351,7.25960265 C46.3112583,7.25960265 45.2403974,12.1688742 45.1986755,12.3774834 C45.1152318,12.7668874 44.781457,13.0450331 44.392053,13.0450331 Z M21.5562914,5.71589404 C21.3615894,5.71589404 21.1807947,5.64635762 21.0278146,5.52119205 C20.6801325,5.22913907 20.6384106,4.71456954 20.9304636,4.36688742 C22.0152318,3.08741722 23.5311258,2.14172185 25.4364238,1.54370861 C25.8675497,1.40463576 26.3264901,1.65496689 26.4655629,2.08609272 C26.6046358,2.51721854 26.3543046,2.97615894 25.9231788,3.11523179 C24.3238411,3.61589404 23.0721854,4.39470199 22.1821192,5.42384106 C22.0152318,5.61854305 21.7927152,5.71589404 21.5562914,5.71589404 Z M33.7668874,2.94834437 C33.697351,2.94834437 33.6278146,2.93443709 33.5443709,2.9205298 C33.0576159,2.79536424 32.5569536,2.68410596 32.0423841,2.61456954 C31.597351,2.54503311 31.2774834,2.12781457 31.3470199,1.68278146 C31.4165563,1.23774834 31.8337748,0.945695364 32.2788079,0.987417219 C32.8629139,1.07086093 33.4331126,1.19602649 33.9754967,1.33509934 C34.4066225,1.4602649 34.6708609,1.90529801 34.5596026,2.33642384 C34.4622517,2.71192053 34.1284768,2.94834437 33.7668874,2.94834437 Z"
|
||||
id="path84" />
|
||||
<g transform="translate(230.860927, 1.390728)">
|
||||
<path d="M2.21125828,20.415894 L21.9456954,20.415894 C21.9456954,20.415894 15.7708609,6.61986755 28.8715232,4.8397351 C40.5536424,3.25430464 45.1847682,15.2562914 45.1847682,15.2562914 C45.1847682,15.2562914 46.5754967,8.33046358 53.5291391,9.65165563 C60.3854305,10.9589404 65.4476821,21.9874172 65.4476821,21.9874172 L82.6231788,21.9874172" id="Path"></path>
|
||||
<g transform="translate(1.390728, 0.000000)" id="Shape">
|
||||
<path d="M21.1251656,18.2046358 L1.41854305,18.2046358 C0.959602649,18.2046358 0.598013245,17.8430464 0.598013245,17.384106 C0.598013245,16.9251656 0.959602649,16.5635762 1.41854305,16.5635762 L21.1251656,16.5635762 C21.584106,16.5635762 21.9456954,16.9251656 21.9456954,17.384106 C21.9456954,17.8430464 21.584106,18.2046358 21.1251656,18.2046358 Z M81.8304636,17.9543046 L81.0655629,17.9543046 C80.6066225,17.9543046 80.2450331,17.5927152 80.2450331,17.1337748 C80.2450331,16.6748344 80.6066225,16.313245 81.0655629,16.313245 L81.8304636,16.313245 C82.289404,16.313245 82.6509934,16.6748344 82.6509934,17.1337748 C82.6509934,17.5927152 82.2754967,17.9543046 81.8304636,17.9543046 Z M74.5013245,17.9543046 L69.5781457,17.9543046 C69.1192053,17.9543046 68.7576159,17.5927152 68.7576159,17.1337748 C68.7576159,16.6748344 69.1192053,16.313245 69.5781457,16.313245 L74.5013245,16.313245 C74.9602649,16.313245 75.3218543,16.6748344 75.3218543,17.1337748 C75.3218543,17.5927152 74.9602649,17.9543046 74.5013245,17.9543046 Z M44.392053,13.0450331 C44.0582781,13.0450331 43.7523179,12.8225166 43.6271523,12.5165563 L43.5019868,12.2245033 C43.3350993,11.8490066 43.4741722,11.4039735 43.8218543,11.1953642 C44.586755,8.90066225 46.7423841,5.63245033 51.0397351,5.63245033 C51.6238411,5.63245033 52.2496689,5.68807947 52.889404,5.81324503 C55.3370861,6.27218543 57.7986755,7.70463576 60.218543,10.0410596 C60.5384106,10.3609272 60.5523179,10.8754967 60.2324503,11.1953642 C59.9125828,11.5291391 59.3980132,11.5291391 59.0781457,11.2092715 C56.894702,9.09536424 54.7112583,7.81589404 52.5834437,7.41258278 C52.0410596,7.31523179 51.5264901,7.25960265 51.0397351,7.25960265 C46.3112583,7.25960265 45.2403974,12.1688742 45.1986755,12.3774834 C45.1152318,12.7668874 44.781457,13.0450331 44.392053,13.0450331 Z M21.5562914,5.71589404 C21.3615894,5.71589404 21.1807947,5.64635762 21.0278146,5.52119205 C20.6801325,5.22913907 20.6384106,4.71456954 20.9304636,4.36688742 C22.0152318,3.08741722 23.5311258,2.14172185 25.4364238,1.54370861 C25.8675497,1.40463576 26.3264901,1.65496689 26.4655629,2.08609272 C26.6046358,2.51721854 26.3543046,2.97615894 25.9231788,3.11523179 C24.3238411,3.61589404 23.0721854,4.39470199 22.1821192,5.42384106 C22.0152318,5.61854305 21.7927152,5.71589404 21.5562914,5.71589404 Z M33.7668874,2.94834437 C33.697351,2.94834437 33.6278146,2.93443709 33.5443709,2.9205298 C33.0576159,2.79536424 32.5569536,2.68410596 32.0423841,2.61456954 C31.597351,2.54503311 31.2774834,2.12781457 31.3470199,1.68278146 C31.4165563,1.23774834 31.8337748,0.945695364 32.2788079,0.987417219 C32.8629139,1.07086093 33.4331126,1.19602649 33.9754967,1.33509934 C34.4066225,1.4602649 34.6708609,1.90529801 34.5596026,2.33642384 C34.4622517,2.71192053 34.1284768,2.94834437 33.7668874,2.94834437 Z"></path>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 19.470199)"
|
||||
id="g90">
|
||||
<path
|
||||
d="M83.8887417,4.24172185 L2.57284768,4.24172185 C1.66887417,4.24172185 0.931788079,3.50463576 0.931788079,2.60066225 C0.931788079,1.69668874 1.66887417,0.959602649 2.57284768,0.959602649 L83.8887417,0.959602649 C84.7927152,0.959602649 85.5298013,1.69668874 85.5298013,2.60066225 C85.5298013,3.50463576 84.7927152,4.24172185 83.8887417,4.24172185 Z"
|
||||
id="path88" />
|
||||
<g transform="translate(0.000000, 19.470199)" id="Path">
|
||||
<path d="M83.8887417,4.24172185 L2.57284768,4.24172185 C1.66887417,4.24172185 0.931788079,3.50463576 0.931788079,2.60066225 C0.931788079,1.69668874 1.66887417,0.959602649 2.57284768,0.959602649 L83.8887417,0.959602649 C84.7927152,0.959602649 85.5298013,1.69668874 85.5298013,2.60066225 C85.5298013,3.50463576 84.7927152,4.24172185 83.8887417,4.24172185 Z"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<ellipse
|
||||
id="Oval"
|
||||
fill="#ededf0"
|
||||
opacity="0.5"
|
||||
cx="175.9178"
|
||||
cy="170.85991"
|
||||
rx="73.526253"
|
||||
ry="11.563125" />
|
||||
<g id="Group" transform="translate(95.960265, 0.000000)">
|
||||
<path d="M106.710596,170.475497 C105,170.489404 103.400662,171.170861 102.204636,172.380795 L86.7536424,188.109934 L86.3503311,142.883444 L73.5278146,137.682119 L73.9728477,188.221192 L58.2437086,172.770199 C57.0198675,171.574172 55.4205298,170.92053 53.7099338,170.934437 C51.9993377,170.948344 50.4,171.629801 49.2039735,172.839735 C48.007947,174.063576 47.3543046,175.662914 47.3682119,177.37351 C47.3821192,179.084106 48.0635762,180.683444 49.2735099,181.87947 L76.0033113,208.136424 C77.2271523,209.33245 78.8264901,209.986093 80.5370861,209.972185 C82.2476821,209.958278 83.8470199,209.276821 85.0430464,208.066887 L111.3,181.337086 C112.496026,180.113245 113.149669,178.513907 113.135762,176.803311 C113.121854,175.092715 112.440397,173.493377 111.230464,172.297351 C110.02053,171.115232 108.407285,170.461589 106.710596,170.475497 Z" id="Path" fill="#0060DF"></path>
|
||||
<path d="M86.0165563,80.6066225 C85.9887417,77.0880795 83.0960265,74.2509934 79.5774834,74.2788079 C76.0589404,74.3066225 73.2218543,77.1993377 73.2496689,80.7178808 L73.5278146,114.039735 L86.3503311,119.24106 L86.0165563,80.6066225 Z" id="Path" fill="url(#linearGradient-1)"></path>
|
||||
<path d="M134.70596,22.2794702 C123.858278,11.7655629 110.493377,4.77019868 96.0298013,1.78013245 C104.958278,5.43774834 113.191391,12.1271523 120.061589,21.486755 C131.006623,36.3953642 137.264901,56.3662252 137.682119,77.7139073 C137.709934,79.0211921 137.362252,80.2728477 136.722517,81.2046358 C136.555629,81.4549669 136.360927,81.6635762 136.166225,81.8582781 L153.953642,81.705298 C155.219205,81.6913907 156.429139,81.1768212 157.305298,80.2728477 C158.181457,79.3688742 158.668212,78.1450331 158.62649,76.8794702 C158.125828,56.115894 149.628477,36.7291391 134.70596,22.2794702 Z" id="Path" fill="url(#linearGradient-2)"></path>
|
||||
<path d="M22.7523179,78.7152318 C22.7940397,57.3675497 28.7046358,37.2854305 39.3854305,22.1960265 C46.2556291,12.4887417 54.5860927,5.57682119 63.6953642,1.8218543 C48.8562914,4.93708609 35.2271523,12.2801325 24.2960265,23.2529801 C9.62384106,37.9668874 1.47417219,57.4927152 1.33509934,78.2423841 C1.32119205,79.507947 1.8218543,80.7178808 2.72582781,81.6218543 C3.61589404,82.5119205 4.8397351,83.0125828 6.10529801,82.9986755 L24.3516556,82.8317881 C24.1430464,82.6509934 23.9622517,82.4423841 23.781457,82.192053 C23.1139073,81.2741722 22.7523179,80.0225166 22.7523179,78.7152318 Z" id="Path" fill="url(#linearGradient-3)"></path>
|
||||
<path d="M137.682119,77.7139073 C137.264901,56.3662252 130.992715,36.3953642 120.061589,21.486755 C113.191391,12.1271523 104.958278,5.43774834 96.0298013,1.78013245 C91.4821192,0.848344371 86.8231788,0.305960265 82.1086093,0.180794702 C87.2125828,2.58675497 91.9688742,10.1801325 95.7933775,22.1682119 C100.49404,36.9238411 103.247682,56.6304636 103.525828,77.6860927 C103.539735,78.9655629 103.400662,80.2033113 103.136424,81.1211921 C103.011258,81.5662252 102.858278,81.9139073 102.691391,82.1503311 L136.180132,81.8582781 C136.374834,81.6635762 136.569536,81.4549669 136.736424,81.2046358 C137.362252,80.2728477 137.709934,79.0072848 137.682119,77.7139073 Z" id="Path" fill="url(#linearGradient-4)"></path>
|
||||
<path d="M55.3509934,81.5384106 C55.0728477,80.6205298 54.9059603,79.3827815 54.9059603,78.1033113 C54.8225166,57.0476821 57.2145695,37.2854305 61.6649007,22.4602649 C65.2529801,10.5 69.8284768,2.86490066 74.8350993,0.305960265 C71.0662252,0.556291391 67.3390728,1.05695364 63.6953642,1.8218543 C54.5860927,5.57682119 46.2417219,12.502649 39.3854305,22.1960265 C28.7046358,37.2854305 22.807947,57.3675497 22.7523179,78.7152318 C22.7523179,80.0225166 23.1139073,81.2741722 23.7675497,82.192053 C23.9483444,82.4423841 24.1291391,82.6509934 24.3377483,82.8317881 L55.8099338,82.5536424 C55.6430464,82.3172185 55.4900662,81.9834437 55.3509934,81.5384106 Z" id="Path" fill="url(#linearGradient-5)"></path>
|
||||
<path d="M74.8211921,0.305960265 C69.8145695,2.86490066 65.2251656,10.5 61.6509934,22.4602649 C57.2145695,37.2854305 54.8086093,57.0476821 54.892053,78.1033113 C54.892053,79.3827815 55.0589404,80.6205298 55.3370861,81.5384106 C55.4761589,81.9834437 55.6291391,82.3172185 55.8099338,82.5675497 L102.677483,82.1503311 C102.844371,81.9 102.997351,81.5662252 103.122517,81.1211921 C103.386755,80.2033113 103.525828,78.9655629 103.511921,77.6860927 C103.219868,56.6304636 100.480132,36.9238411 95.7794702,22.1682119 C91.9549669,10.1801325 87.1986755,2.58675497 82.094702,0.180794702 C81.1629139,0.152980132 80.2311258,0.125165563 79.2854305,0.139072848 C77.797351,0.139072848 76.3092715,0.208609272 74.8211921,0.305960265 Z" id="Path" fill="url(#linearGradient-6)"></path>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="cloud-alert"
|
||||
d="m 254.54362,110.61709 a 41.858804,41.858804 0 0 1 -10.8282,28.08534 35.887465,35.887465 0 0 1 -21.45007,10.8673 42.246663,42.246663 0 0 0 0.84918,-17.43196 17.919131,17.919131 0 0 0 8.09421,-4.72957 25.026353,25.026353 0 0 0 6.48366,-16.79111 28.118382,28.118382 0 0 0 -28.08535,-28.085359 c -0.92602,0 -5.68324,0.594174 -8.57727,0.967035 a 2.7916842,2.7916842 0 0 1 -3.0008,-1.876551 l -1.14369,-3.336147 A 34.656989,34.656989 0 0 0 168.09302,54.616462 33.58368,33.58368 0 0 0 131.89488,95.850311 l 1.19942,5.130409 a 2.8085354,2.8085354 0 0 1 -1.92244,3.32783 l -5.04762,1.52526 a 16.696293,16.696293 0 0 0 -12.00739,16.01742 11.315083,11.315083 0 0 0 2.32581,6.90069 13.611511,13.611511 0 0 0 10.04928,4.33345 h 7.67482 a 42.446125,42.446125 0 0 0 1.08887,16.85122 h -8.76369 A 30.06863,30.06863 0 0 1 102.70166,138.50495 28.276728,28.276728 0 0 1 97.265633,121.85123 33.354503,33.354503 0 0 1 114.33081,92.64684 c -0.14268,-1.508465 -0.21401,-3.01148 -0.21401,-4.498037 a 50.534146,50.534146 0 0 1 95.80834,-22.468284 44.988861,44.988861 0 0 1 44.61843,44.936571 z m -42.12804,28.08534 a 33.702425,33.702425 0 1 1 -33.70241,-33.70242 33.702425,33.702425 0 0 1 33.70241,33.70242 z m -28.08535,14.04269 a 2.8085354,2.8085354 0 0 0 -2.80853,-2.80853 h -5.61707 a 2.8085354,2.8085354 0 0 0 -2.80853,2.80853 v 5.61706 a 2.8085354,2.8085354 0 0 0 2.80853,2.80855 h 5.61707 a 2.8085354,2.8085354 0 0 0 2.80853,-2.80855 z m 0,-33.70243 a 2.8166239,2.8166239 0 0 0 -2.80853,-2.80853 h -5.61707 a 2.8166239,2.8166239 0 0 0 -2.80853,2.80853 v 11.23415 a 22.144684,22.144684 0 0 0 0.83447,5.49022 l 2.24351,7.21126 a 2.0333796,2.0333796 0 0 0 1.82117,1.34118 h 1.43583 a 2.0333796,2.0333796 0 0 0 1.82118,-1.34118 l 2.2435,-7.21126 a 22.144684,22.144684 0 0 0 0.83447,-5.49022 z"
|
||||
style="stroke-width:5.61707;fill:currentColor;fill-opacity:1" />
|
||||
</svg>
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 25 KiB |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#8795a1" d="M256.1 144.8c56.2 0 101.9 45.3 101.9 101.1 0 13.1-2.6 25.5-7.3 37l59.5 59c30.8-25.5 55-58.4 69.9-96-35.3-88.7-122.3-151.6-224.2-151.6-28.5 0-55.8 5.1-81.1 14.1l44 43.7c11.6-4.6 24.1-7.3 37.3-7.3zM52.4 89.7l46.5 46.1 9.4 9.3c-33.9 26-60.4 60.8-76.3 100.8 35.2 88.7 122.2 151.6 224.1 151.6 31.6 0 61.7-6.1 89.2-17l8.6 8.5 59.7 59 25.9-25.7L78.2 64 52.4 89.7zM165 201.4l31.6 31.3c-1 4.2-1.6 8.7-1.6 13.1 0 33.5 27.3 60.6 61.1 60.6 4.5 0 9-.6 13.2-1.6l31.6 31.3c-13.6 6.7-28.7 10.7-44.8 10.7-56.2 0-101.9-45.3-101.9-101.1 0-15.8 4.1-30.7 10.8-44.3zm87.8-15.7l64.2 63.7.4-3.2c0-33.5-27.3-60.6-61.1-60.6l-3.5.1z"/></svg>
|
Before Width: | Height: | Size: 701 B |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="#8795a1" d="M256 105c-101.8 0-188.4 62.4-224 151 35.6 88.6 122.2 151 224 151s188.4-62.4 224-151c-35.6-88.6-122.2-151-224-151zm0 251.7c-56 0-101.8-45.3-101.8-100.7S200 155.3 256 155.3 357.8 200.6 357.8 256 312 356.7 256 356.7zm0-161.1c-33.6 0-61.1 27.2-61.1 60.4s27.5 60.4 61.1 60.4 61.1-27.2 61.1-60.4-27.5-60.4-61.1-60.4z"/></svg>
|
Before Width: | Height: | Size: 406 B |
Before Width: | Height: | Size: 588 B After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.9 KiB |
|
@ -1,34 +1,41 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="64mm"
|
||||
height="64mm"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg898">
|
||||
<defs
|
||||
id="defs892" />
|
||||
<metadata
|
||||
id="metadata895">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1">
|
||||
<path
|
||||
id="cloud-upload"
|
||||
d="m 63.999948,34.285731 a 17.033293,17.033293 0 0 1 -4.406235,11.428568 14.856655,14.856655 0 0 1 -10.55805,4.571428 h -2.178561 v -6.857139 h 2.178561 A 8.0044292,8.0044292 0 0 0 54.504416,41.118327 10.183788,10.183788 0 0 0 57.14281,34.285731 11.442004,11.442004 0 0 0 45.714251,22.857173 c -0.37683,0 -2.312648,0.241803 -3.490288,0.393502 A 1.1359993,1.1359993 0 0 1 41.00286,22.487082 L 40.537483,21.129528 A 14.102711,14.102711 0 0 0 28.821257,11.497829 13.665957,13.665957 0 0 0 14.091416,28.276812 l 0.488099,2.087681 a 1.1428564,1.1428564 0 0 1 -0.782255,1.354176 l -2.053987,0.62062 a 6.7940986,6.7940986 0 0 0 -4.8860757,6.517846 4.6043628,4.6043628 0 0 0 0.9464197,2.808045 5.5388308,5.5388308 0 0 0 4.089282,1.763384 h 5.250006 v 6.857137 H 11.892899 A 12.235604,12.235604 0 0 1 2.2121047,45.633903 11.506439,11.506439 0 0 1 5.8514086e-5,38.857135 13.5727,13.5727 0 0 1 6.9442617,26.97321 C 6.8863778,26.359414 6.8571876,25.747771 6.8571876,25.142857 A 20.563484,20.563484 0 0 1 45.843766,16.000009 18.306983,18.306983 0 0 1 64,34.285707 Z M 32.923239,32.122512 a 1.1428564,1.1428564 0 0 0 -1.846543,0 l -8.591651,11.775239 a 1.1428564,1.1428564 0 0 0 0.923268,1.816548 h 5.163091 v 12.571418 a 1.1428564,1.1428564 0 0 0 1.14285,1.142858 h 4.571428 a 1.1428564,1.1428564 0 0 0 1.142859,-1.142858 V 45.714299 h 5.163084 a 1.1428564,1.1428564 0 0 0 0.923265,-1.816548 z"
|
||||
style="stroke-width:2.28572;fill:#45a1ff;fill-opacity:1" />
|
||||
</g>
|
||||
<svg viewBox="0 0 65 64" height="64" width="65" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<defs>
|
||||
<linearGradient id="linear-gradient" x1="46.37" y1="59.71" x2="15.42" y2="6.11" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#ff980e"/>
|
||||
<stop offset="0.21" stop-color="#ff7139"/>
|
||||
<stop offset="0.36" stop-color="#ff5854"/>
|
||||
<stop offset="0.46" stop-color="#ff4f5e"/>
|
||||
<stop offset="0.69" stop-color="#ff3750"/>
|
||||
<stop offset="0.86" stop-color="#f92261"/>
|
||||
<stop offset="1" stop-color="#f5156c"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-2" x1="46.37" y1="59.71" x2="15.42" y2="6.11" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#fff44f" stop-opacity="0.8"/>
|
||||
<stop offset="0.09" stop-color="#fff44f" stop-opacity="0.7"/>
|
||||
<stop offset="0.75" stop-color="#fff44f" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-3" x1="40.19" y1="26.08" x2="54.32" y2="50.55" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#3a8ee6"/>
|
||||
<stop offset="0.24" stop-color="#5c79f0"/>
|
||||
<stop offset="0.63" stop-color="#9059ff"/>
|
||||
<stop offset="1" stop-color="#c139e6"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-4" x1="54.32" y1="50.58" x2="48.39" y2="40.31" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#6e008b" stop-opacity="0.5"/>
|
||||
<stop offset="0.5" stop-color="#c846cb" stop-opacity="0"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="linear-gradient-5" x1="56.96" y1="22.5" x2="41.98" y2="37.46" gradientTransform="matrix(1, 0, 0, -1, 0, 64)" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0.14" stop-color="#6a2bea" stop-opacity="0"/>
|
||||
<stop offset="0.34" stop-color="#642de4" stop-opacity="0.03"/>
|
||||
<stop offset="0.55" stop-color="#5131d3" stop-opacity="0.12"/>
|
||||
<stop offset="0.76" stop-color="#3139b7" stop-opacity="0.27"/>
|
||||
<stop offset="0.98" stop-color="#054490" stop-opacity="0.48"/>
|
||||
<stop offset="1" stop-color="#00458b" stop-opacity="0.5"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<path d="M32.56,0C14.61,0,0,14.33,0,31.94a3.42,3.42,0,0,0,3.42,3.42H29.14V52.3l-8-8a3.42,3.42,0,1,0-4.84,4.84L30.14,63a2.73,2.73,0,0,0,.25.23l.23.17h.05l.24.14.27.13.28.1.29.07L32,64h1.27l.29-.07.29-.1.27-.13.24-.14.24-.17L35,63,48.8,49.18A3.43,3.43,0,0,0,44,44.34l-8,8v-17H61.7a3.42,3.42,0,0,0,3.42-3.42h0C65.12,14.33,50.51,0,32.56,0ZM7.09,28.51A25.54,25.54,0,0,1,32.56,6.85,25.55,25.55,0,0,1,58,28.51Z" fill="url(#linear-gradient)"/>
|
||||
<path d="M32.56,0C14.61,0,0,14.33,0,31.94a3.42,3.42,0,0,0,3.42,3.42H29.14V52.3l-8-8a3.42,3.42,0,1,0-4.84,4.84L30.14,63a2.73,2.73,0,0,0,.25.23l.23.17h.05l.24.14.27.13.28.1.29.07L32,64h1.27l.29-.07.29-.1.27-.13.24-.14.24-.17L35,63,48.8,49.18A3.43,3.43,0,0,0,44,44.34l-8,8v-17H61.7a3.42,3.42,0,0,0,3.42-3.42h0C65.12,14.33,50.51,0,32.56,0ZM7.09,28.51A25.54,25.54,0,0,1,32.56,6.85,25.55,25.55,0,0,1,58,28.51Z" fill="url(#linear-gradient-2)"/>
|
||||
<path d="M36,7.08A25.45,25.45,0,0,1,58,28.51H42.85A6.85,6.85,0,0,0,36,35.36H61.7a3.43,3.43,0,0,0,3.42-3.43c0-12.2-8.63-18.13-16-21.59A35.75,35.75,0,0,0,36,7.08Z" fill="url(#linear-gradient-3)"/>
|
||||
<path d="M57.89,27.76c2.31,1.86,4.63,3.71,6.9,5.61a3.27,3.27,0,0,0,.33-1.44c0-12.2-8.63-18.13-16-21.59A35.75,35.75,0,0,0,36,7.08,25.47,25.47,0,0,1,57.89,27.76Z" fill="url(#linear-gradient-4)"/>
|
||||
<path d="M57.5,28.51H42.85A6.85,6.85,0,0,0,36,35.36H61.7a3.36,3.36,0,0,0,2.64-1.28C62.09,32.19,59.79,30.36,57.5,28.51Z" opacity=".9" fill="url(#linear-gradient-5)"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 3.5 KiB |
|
@ -0,0 +1,151 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 264 179" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:1.41421;">
|
||||
<g transform="matrix(1,0,0,1,-50.1817,-11.5386)">
|
||||
<g>
|
||||
<g opacity="0.5">
|
||||
<path d="M105.47,94.88L126.79,94.89C126.79,94.89 120.12,79.98 134.29,78.05C146.92,76.33 151.91,89.32 151.91,89.32C151.91,89.32 153.41,81.83 160.92,83.27C168.33,84.68 173.79,96.6 173.79,96.6L192.36,96.6" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M192.72,93.09L188.71,93.09C188.43,93.09 188.21,92.87 188.21,92.59C188.21,92.31 188.43,92.09 188.71,92.09L192.72,92.09C193,92.09 193.22,92.31 193.22,92.59C193.22,92.86 193,93.09 192.72,93.09ZM179.71,93.08L178.71,93.08C178.43,93.08 178.21,92.86 178.21,92.58C178.21,92.3 178.43,92.08 178.71,92.08L179.71,92.08C179.99,92.08 180.21,92.3 180.21,92.58C180.21,92.86 179.99,93.08 179.71,93.08ZM174.71,93.08L174.15,93.08C173.96,93.08 173.79,92.97 173.7,92.8C173.59,92.59 173.18,91.81 172.5,90.72C172.35,90.49 172.43,90.18 172.66,90.03C172.89,89.88 173.2,89.96 173.35,90.19C173.88,91.04 174.25,91.71 174.45,92.08L174.71,92.08C174.99,92.08 175.21,92.3 175.21,92.58C175.21,92.86 174.99,93.08 174.71,93.08ZM127.15,92.47L125.83,92.47C125.55,92.47 125.33,92.25 125.33,91.97C125.33,91.69 125.55,91.47 125.83,91.47L126.41,91.47C126.32,91.22 126.21,90.91 126.09,90.55C126.01,90.29 126.15,90.01 126.41,89.92C126.67,89.84 126.95,89.98 127.04,90.24C127.34,91.17 127.6,91.76 127.6,91.77C127.67,91.92 127.66,92.1 127.56,92.25C127.46,92.4 127.32,92.47 127.15,92.47ZM117.83,92.47L105.83,92.47C105.55,92.47 105.33,92.25 105.33,91.97C105.33,91.69 105.55,91.47 105.83,91.47L117.83,91.47C118.11,91.47 118.33,91.69 118.33,91.97C118.33,92.25 118.11,92.47 117.83,92.47ZM125.7,86.99C125.45,86.99 125.23,86.8 125.2,86.55C125.16,86.21 125.13,85.87 125.11,85.52C125.09,85.24 125.3,85.01 125.58,84.99C125.85,84.98 126.09,85.18 126.11,85.46C126.13,85.79 126.16,86.11 126.2,86.43C126.23,86.7 126.04,86.95 125.76,86.99C125.74,86.99 125.72,86.99 125.7,86.99ZM151.84,85.95C151.65,85.95 151.48,85.85 151.39,85.67C151.27,85.42 151.12,85.13 150.94,84.8C150.81,84.56 150.9,84.25 151.14,84.12C151.38,83.99 151.69,84.08 151.82,84.32C152.01,84.66 152.16,84.97 152.29,85.23C152.41,85.48 152.31,85.78 152.06,85.9C151.99,85.94 151.92,85.95 151.84,85.95ZM167.96,84.7C167.84,84.7 167.71,84.65 167.61,84.56C165.45,82.49 163.29,81.24 161.18,80.84C159.74,80.57 158.43,80.62 157.3,81C157.04,81.09 156.75,80.95 156.67,80.68C156.58,80.42 156.72,80.14 156.99,80.05C158.29,79.62 159.77,79.55 161.38,79.86C163.68,80.3 166.01,81.64 168.31,83.84C168.51,84.03 168.52,84.35 168.33,84.55C168.22,84.64 168.09,84.7 167.96,84.7ZM149.16,81.74C149.01,81.74 148.87,81.68 148.77,81.55C148.14,80.77 147.47,80.05 146.77,79.42C146.57,79.23 146.55,78.92 146.74,78.71C146.93,78.5 147.24,78.49 147.45,78.68C148.19,79.35 148.9,80.11 149.55,80.92C149.72,81.13 149.69,81.45 149.47,81.62C149.38,81.7 149.27,81.74 149.16,81.74ZM128.68,77.92C128.53,77.92 128.39,77.86 128.29,77.73C128.12,77.51 128.15,77.2 128.37,77.03C129.91,75.79 132.01,74.99 134.59,74.64C136.56,74.37 138.46,74.44 140.25,74.84C140.52,74.9 140.69,75.17 140.63,75.44C140.57,75.71 140.31,75.88 140.03,75.82C138.35,75.45 136.57,75.38 134.72,75.64C132.32,75.97 130.39,76.7 128.99,77.82C128.9,77.88 128.79,77.92 128.68,77.92Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M193.33,96.88L105.46,96.86C104.91,96.86 104.46,96.41 104.46,95.86C104.46,95.31 104.91,94.86 105.46,94.86L193.33,94.88C193.88,94.88 194.33,95.33 194.33,95.88C194.33,96.43 193.88,96.88 193.33,96.88Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g opacity="0.5">
|
||||
<path d="M306.31,117.22C306.52,116.91 306.83,116.35 306.52,116.05C306.26,115.86 305.95,115.77 305.63,115.79C304.89,115.81 304.17,116.07 303.58,116.53C302.36,117.45 301.24,118.92 301.48,119.69C303.65,119.14 305.58,118.28 306.31,117.22Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M125.12,129.61C128.96,129.7 132.74,128.68 136.01,126.67C138.98,124.82 142.43,123.89 145.93,123.97C149.43,123.88 152.88,124.82 155.86,126.67C162.59,130.59 170.91,130.59 177.64,126.67C183.78,123.07 191.38,123.07 197.52,126.67C204.25,130.59 212.57,130.59 219.3,126.67C225.44,123.07 233.04,123.07 239.18,126.67C242.45,128.68 246.23,129.7 250.07,129.61C250.62,129.61 251.07,129.16 251.07,128.61C251.07,128.06 250.62,127.61 250.07,127.61C246.56,127.7 243.11,126.76 240.13,124.91C233.4,120.99 225.08,120.99 218.35,124.91C212.21,128.51 204.61,128.51 198.47,124.91C191.74,120.99 183.42,120.99 176.69,124.91C170.55,128.5 162.96,128.5 156.82,124.91C153.55,122.9 149.77,121.88 145.93,121.97C142.09,121.88 138.31,122.9 135.04,124.91C132.06,126.76 128.61,127.7 125.1,127.61C121.59,127.7 118.14,126.76 115.16,124.91C111.89,122.9 108.11,121.88 104.27,121.97C103.72,121.97 103.27,122.42 103.27,122.97C103.27,123.52 103.72,123.97 104.27,123.97C107.78,123.88 111.23,124.82 114.21,126.67C117.48,128.68 121.27,129.7 125.12,129.61Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M313.27,118.55C313.1,118.34 312.79,118.3 312.57,118.47C309.82,120.29 306.65,121.37 303.37,121.63C302.13,121.83 300.87,121.83 299.63,121.63C301.63,121.01 303.39,120.14 304.18,119C305.18,117.63 304.56,116.82 304.27,116.54C303.39,115.69 301.45,115.87 300.03,116.94C298.96,117.74 297.14,119.61 297.55,121.14C295.97,121.5 294.36,121.73 292.74,121.82C292.46,121.82 292.24,122.04 292.24,122.32C292.24,122.6 292.46,122.82 292.74,122.82C294.54,122.72 296.33,122.45 298.09,122.03C298.97,122.74 300.73,122.95 303.43,122.65C309.69,121.95 313,119.39 313.14,119.28C313.37,119.13 313.45,118.82 313.3,118.59C313.29,118.58 313.28,118.56 313.27,118.55ZM300.62,117.71C301.21,117.25 301.93,116.99 302.67,116.97C302.99,116.95 303.3,117.04 303.56,117.23C303.87,117.53 303.56,118.09 303.35,118.4C302.62,119.46 300.69,120.29 298.52,120.87C298.29,120.09 299.4,118.62 300.62,117.71Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M210.52,122.99C210.22,122.99 209.95,122.76 209.92,122.45C209.89,122.12 210.13,121.83 210.46,121.79C211.75,121.66 212.93,121.41 214.05,121.01C214.36,120.9 214.7,121.06 214.82,121.38C214.93,121.69 214.77,122.04 214.45,122.15C213.24,122.58 211.97,122.86 210.58,122.99C210.56,122.99 210.54,122.99 210.52,122.99Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M253.58,122.83C253.29,122.83 253.04,122.62 252.99,122.33C252.93,122 253.15,121.69 253.48,121.64C256.49,121.12 258.39,119.9 260.23,118.72C260.51,118.54 260.88,118.62 261.06,118.9C261.24,119.18 261.16,119.55 260.88,119.73C259.03,120.92 256.93,122.26 253.68,122.82C253.65,122.82 253.61,122.83 253.58,122.83Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M204.8,122.78C204.76,122.78 204.73,122.78 204.69,122.77C201.59,122.19 199.57,120.9 197.63,119.65L197.54,119.59C197.26,119.41 197.18,119.04 197.36,118.76C197.54,118.48 197.91,118.4 198.19,118.58L198.28,118.64C200.22,119.88 202.05,121.05 204.92,121.59C205.25,121.65 205.46,121.97 205.4,122.29C205.34,122.58 205.09,122.78 204.8,122.78Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M288.07,122.71C288.03,122.71 287.99,122.71 287.95,122.7C285.06,122.09 283.13,120.85 281.26,119.66L280.86,119.41C280.58,119.23 280.5,118.86 280.68,118.58C280.86,118.3 281.23,118.22 281.51,118.4L281.91,118.65C283.77,119.84 285.53,120.96 288.21,121.53C288.53,121.6 288.74,121.92 288.67,122.24C288.6,122.52 288.35,122.71 288.07,122.71Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M245.97,122.65C245.93,122.65 245.88,122.64 245.83,122.63C245.5,122.55 245.18,122.47 244.87,122.38C244.55,122.28 244.37,121.95 244.47,121.63C244.57,121.31 244.9,121.13 245.22,121.23C245.5,121.32 245.8,121.4 246.11,121.47C246.43,121.54 246.63,121.87 246.56,122.19C246.49,122.46 246.24,122.65 245.97,122.65Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M241.55,120.86C241.45,120.86 241.34,120.83 241.25,120.78C240.62,120.42 240.03,120.04 239.43,119.66C238.95,119.36 238.48,119.05 237.99,118.76C237.71,118.59 237.61,118.22 237.78,117.94C237.95,117.65 238.32,117.56 238.6,117.73C239.1,118.03 239.59,118.34 240.07,118.65C240.65,119.02 241.23,119.39 241.84,119.75C242.13,119.92 242.22,120.28 242.06,120.57C241.96,120.75 241.76,120.86 241.55,120.86Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M217.68,120.49C217.48,120.49 217.28,120.39 217.17,120.2C217,119.92 217.09,119.55 217.37,119.37C217.64,119.2 217.91,119.04 218.17,118.87C218.45,118.69 218.82,118.77 219,119.05C219.18,119.33 219.1,119.7 218.82,119.88C218.55,120.05 218.28,120.22 218,120.39C217.89,120.47 217.79,120.49 217.68,120.49Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M265.64,117.2C265.39,117.2 265.15,117.04 265.07,116.78C264.97,116.46 265.14,116.13 265.46,116.02C266.67,115.63 267.94,115.38 269.35,115.27C269.7,115.23 269.97,115.49 270,115.82C270.03,116.15 269.78,116.44 269.45,116.47C268.14,116.57 266.96,116.8 265.84,117.17C265.76,117.19 265.7,117.2 265.64,117.2Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M182.36,117.09C182.1,117.09 181.86,116.92 181.78,116.66C181.69,116.34 181.87,116.01 182.18,115.91C183.39,115.55 184.67,115.33 186.08,115.24C186.41,115.2 186.7,115.47 186.72,115.8C186.74,116.13 186.49,116.42 186.16,116.44C184.84,116.52 183.65,116.72 182.53,117.06C182.47,117.08 182.41,117.09 182.36,117.09Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M225.39,116.78C225.11,116.78 224.86,116.59 224.8,116.3C224.73,115.98 224.94,115.66 225.26,115.59C226.51,115.33 227.83,115.2 229.31,115.2C230.69,115.2 231.93,115.31 233.11,115.54C233.44,115.6 233.65,115.92 233.59,116.24C233.53,116.57 233.22,116.78 232.89,116.72C231.79,116.51 230.62,116.4 229.32,116.4C227.93,116.4 226.68,116.52 225.52,116.76C225.47,116.78 225.43,116.78 225.39,116.78Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M190.89,116.68C190.86,116.68 190.82,116.68 190.79,116.67C190.5,116.62 190.19,116.58 189.88,116.54C189.55,116.5 189.32,116.2 189.35,115.87C189.39,115.54 189.7,115.3 190.02,115.34C190.36,115.38 190.68,115.43 191,115.48C191.33,115.54 191.55,115.85 191.49,116.17C191.43,116.47 191.18,116.68 190.89,116.68Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M274.16,116.62C274.13,116.62 274.1,116.62 274.07,116.61C273.77,116.57 273.47,116.53 273.15,116.5C272.82,116.47 272.58,116.17 272.61,115.84C272.64,115.51 272.93,115.27 273.27,115.3C273.61,115.33 273.93,115.37 274.25,115.42C274.58,115.47 274.8,115.78 274.75,116.1C274.71,116.41 274.45,116.62 274.16,116.62Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g opacity="0.5">
|
||||
<path d="M221.43,31.94L242.75,31.95C242.75,31.95 236.08,17.04 250.25,15.11C262.88,13.39 267.87,26.38 267.87,26.38C267.87,26.38 269.37,18.89 276.88,20.33C284.29,21.74 289.75,33.66 289.75,33.66L308.32,33.66" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M308.69,30.15L304.68,30.15C304.4,30.15 304.18,29.93 304.18,29.65C304.18,29.37 304.4,29.15 304.68,29.15L308.69,29.15C308.97,29.15 309.19,29.37 309.19,29.65C309.19,29.92 308.96,30.15 308.69,30.15ZM295.68,30.14L294.68,30.14C294.4,30.14 294.18,29.92 294.18,29.64C294.18,29.36 294.4,29.14 294.68,29.14L295.68,29.14C295.96,29.14 296.18,29.36 296.18,29.64C296.18,29.92 295.95,30.14 295.68,30.14ZM290.68,30.14L290.12,30.14C289.93,30.14 289.76,30.03 289.67,29.86C289.56,29.65 289.15,28.87 288.47,27.78C288.32,27.55 288.4,27.24 288.63,27.09C288.86,26.94 289.17,27.02 289.32,27.25C289.85,28.1 290.22,28.77 290.42,29.14L290.68,29.14C290.96,29.14 291.18,29.36 291.18,29.64C291.18,29.92 290.95,30.14 290.68,30.14ZM243.12,29.53L241.8,29.53C241.52,29.53 241.3,29.31 241.3,29.03C241.3,28.75 241.52,28.53 241.8,28.53L242.38,28.53C242.29,28.28 242.18,27.97 242.06,27.61C241.98,27.35 242.12,27.07 242.38,26.98C242.64,26.9 242.92,27.04 243.01,27.3C243.31,28.23 243.57,28.82 243.57,28.83C243.64,28.98 243.63,29.16 243.53,29.31C243.43,29.46 243.29,29.53 243.12,29.53ZM233.8,29.53L221.8,29.53C221.52,29.53 221.3,29.31 221.3,29.03C221.3,28.75 221.52,28.53 221.8,28.53L233.8,28.53C234.08,28.53 234.3,28.75 234.3,29.03C234.3,29.31 234.07,29.53 233.8,29.53ZM241.67,24.05C241.42,24.05 241.2,23.86 241.17,23.61C241.13,23.27 241.1,22.93 241.08,22.58C241.06,22.3 241.27,22.07 241.55,22.05C241.82,22.04 242.06,22.24 242.08,22.52C242.1,22.85 242.13,23.17 242.17,23.49C242.2,23.76 242.01,24.01 241.73,24.05C241.7,24.05 241.68,24.05 241.67,24.05ZM267.81,23.01C267.62,23.01 267.45,22.91 267.36,22.73C267.24,22.48 267.09,22.19 266.91,21.86C266.78,21.62 266.87,21.31 267.11,21.18C267.35,21.05 267.66,21.14 267.79,21.38C267.98,21.72 268.13,22.03 268.26,22.29C268.38,22.54 268.28,22.84 268.03,22.96C267.96,23 267.88,23.01 267.81,23.01ZM283.93,21.76C283.81,21.76 283.68,21.71 283.58,21.62C281.42,19.55 279.26,18.3 277.15,17.9C275.71,17.63 274.4,17.68 273.27,18.06C273.01,18.15 272.72,18.01 272.64,17.74C272.55,17.48 272.69,17.2 272.96,17.11C274.26,16.68 275.74,16.61 277.35,16.92C279.65,17.36 281.98,18.7 284.28,20.9C284.48,21.09 284.49,21.41 284.3,21.61C284.19,21.7 284.06,21.76 283.93,21.76ZM265.13,18.8C264.98,18.8 264.84,18.74 264.74,18.61C264.11,17.83 263.44,17.11 262.74,16.48C262.54,16.29 262.52,15.98 262.71,15.77C262.9,15.56 263.21,15.55 263.42,15.74C264.16,16.41 264.87,17.17 265.52,17.98C265.69,18.19 265.66,18.51 265.44,18.68C265.35,18.76 265.24,18.8 265.13,18.8ZM244.64,14.98C244.49,14.98 244.35,14.92 244.25,14.79C244.08,14.57 244.11,14.26 244.33,14.09C245.87,12.85 247.97,12.05 250.55,11.7C252.52,11.43 254.42,11.5 256.21,11.9C256.48,11.96 256.65,12.23 256.59,12.5C256.53,12.77 256.27,12.94 255.99,12.88C254.31,12.51 252.53,12.44 250.68,12.7C248.28,13.03 246.35,13.76 244.95,14.88C244.86,14.95 244.75,14.98 244.64,14.98Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M309.3,33.94L221.43,33.92C220.88,33.92 220.43,33.47 220.43,32.92C220.43,32.37 220.88,31.92 221.43,31.92L309.3,31.94C309.85,31.94 310.3,32.39 310.3,32.94C310.3,33.49 309.85,33.94 309.3,33.94Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g opacity="0.5">
|
||||
<g>
|
||||
<path d="M182.8,150.59C186.64,150.68 190.42,149.66 193.69,147.65C199.83,144.05 207.42,144.05 213.56,147.65C220.29,151.56 228.6,151.56 235.33,147.65C238.31,145.8 241.76,144.86 245.27,144.95C245.82,144.95 246.27,144.5 246.27,143.95C246.27,143.4 245.82,142.95 245.27,142.95C241.43,142.86 237.65,143.88 234.38,145.89C228.24,149.49 220.65,149.49 214.51,145.89C207.78,141.98 199.47,141.98 192.74,145.89C189.76,147.74 186.31,148.68 182.8,148.59C179.56,148.69 176.36,147.88 173.56,146.26C173.26,146.86 172.9,147.43 172.51,147.97C175.63,149.78 179.19,150.69 182.8,150.59Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path d="M226.93,157.84C226.64,157.84 226.39,157.63 226.34,157.34C226.28,157.01 226.5,156.7 226.83,156.65C229.84,156.13 231.74,154.91 233.58,153.73C233.86,153.55 234.23,153.63 234.41,153.91C234.59,154.19 234.51,154.56 234.23,154.74C232.38,155.93 230.28,157.27 227.03,157.83C227,157.84 226.96,157.84 226.93,157.84Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M219.32,157.66C219.28,157.66 219.23,157.65 219.18,157.64C218.85,157.56 218.53,157.48 218.22,157.39C217.9,157.29 217.72,156.96 217.82,156.64C217.92,156.32 218.25,156.14 218.57,156.24C218.85,156.33 219.15,156.41 219.46,156.48C219.78,156.55 219.98,156.88 219.91,157.2C219.84,157.47 219.59,157.66 219.32,157.66Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M214.9,155.87C214.8,155.87 214.69,155.84 214.6,155.79C213.97,155.43 213.38,155.05 212.78,154.67C212.3,154.37 211.83,154.06 211.34,153.77C211.06,153.6 210.96,153.23 211.13,152.95C211.3,152.66 211.67,152.57 211.95,152.74C212.45,153.04 212.94,153.35 213.42,153.66C214,154.03 214.58,154.4 215.19,154.76C215.48,154.93 215.57,155.29 215.41,155.58C215.31,155.76 215.11,155.87 214.9,155.87Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M238.99,152.21C238.74,152.21 238.5,152.05 238.42,151.79C238.32,151.47 238.49,151.14 238.81,151.03C240.02,150.64 241.29,150.39 242.7,150.28C243.05,150.24 243.32,150.5 243.35,150.83C243.38,151.16 243.13,151.45 242.8,151.48C241.49,151.58 240.31,151.81 239.19,152.18C239.11,152.2 239.05,152.21 238.99,152.21Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M198.74,151.79C198.46,151.79 198.21,151.6 198.15,151.31C198.08,150.99 198.29,150.67 198.61,150.6C199.86,150.34 201.18,150.21 202.66,150.21C204.04,150.21 205.28,150.32 206.46,150.55C206.79,150.61 207,150.93 206.94,151.25C206.88,151.58 206.57,151.79 206.24,151.73C205.14,151.52 203.97,151.41 202.67,151.41C201.28,151.41 200.03,151.53 198.87,151.77C198.82,151.79 198.78,151.79 198.74,151.79Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
<path d="M247.51,151.63C247.48,151.63 247.45,151.63 247.42,151.62C247.12,151.58 246.82,151.54 246.5,151.51C246.17,151.48 245.93,151.18 245.96,150.85C245.99,150.52 246.28,150.28 246.62,150.31C246.96,150.34 247.28,150.38 247.6,150.43C247.93,150.48 248.15,150.79 248.1,151.11C248.06,151.42 247.8,151.63 247.51,151.63Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M272.47,147.27C272.3,147.06 271.99,147.02 271.77,147.19C269.02,149.01 265.85,150.09 262.57,150.35C261.33,150.55 260.07,150.55 258.83,150.35C260.83,149.73 262.59,148.86 263.38,147.72C264.38,146.35 263.76,145.54 263.47,145.26C262.59,144.41 260.65,144.59 259.23,145.66C258.16,146.46 256.34,148.33 256.75,149.86C255.17,150.22 253.56,150.45 251.94,150.54C251.66,150.54 251.44,150.76 251.44,151.04C251.44,151.32 251.66,151.54 251.94,151.54C253.74,151.44 255.53,151.17 257.29,150.75C258.17,151.46 259.93,151.67 262.63,151.37C268.89,150.67 272.2,148.11 272.34,148C272.57,147.85 272.65,147.54 272.5,147.31C272.49,147.3 272.48,147.29 272.47,147.27ZM259.82,146.43C260.41,145.97 261.13,145.71 261.87,145.69C262.19,145.67 262.5,145.76 262.76,145.95C263.07,146.25 262.76,146.81 262.55,147.12C261.82,148.18 259.89,149.01 257.72,149.59C257.49,148.81 258.6,147.34 259.82,146.43Z" style="fill:rgb(237,237,240);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M139.13,114.49L117.33,106.16C115.55,105.48 114.65,103.48 115.33,101.69L126.78,71.74C127.46,69.95 129.47,69.06 131.25,69.74L144.83,74.93C145.69,75.26 146.38,75.91 146.75,76.75L151.84,88.08C152.22,88.92 152.24,89.88 151.92,90.74L143.61,112.49C142.92,114.27 140.92,115.17 139.13,114.49Z" style="fill:rgb(69,161,255);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path id="XMLID_2_" d="M145.68,93.72C145.44,93.2 145.02,92.8 144.48,92.6C143.94,92.4 143.36,92.42 142.84,92.65L136.1,95.7L146.02,69.37C146.44,68.26 145.88,67.03 144.77,66.61C143.66,66.19 142.43,66.75 142.01,67.86L132.09,94.19L129.04,87.45C128.8,86.93 128.38,86.53 127.84,86.33C127.3,86.13 126.72,86.15 126.2,86.38C125.68,86.62 125.28,87.04 125.08,87.58C124.88,88.12 124.9,88.7 125.13,89.22L130.31,100.67C130.55,101.19 130.97,101.59 131.51,101.79C132.05,101.99 132.63,101.97 133.15,101.74L144.6,96.56C145.12,96.32 145.52,95.9 145.72,95.36C145.93,94.83 145.91,94.25 145.68,93.72Z" style="fill:rgb(0,96,223);fill-rule:nonzero;"/>
|
||||
<clipPath id="_clip1">
|
||||
<path d="M145.68,93.72C145.44,93.2 145.02,92.8 144.48,92.6C143.94,92.4 143.36,92.42 142.84,92.65L136.1,95.7L146.02,69.37C146.44,68.26 145.88,67.03 144.77,66.61C143.66,66.19 142.43,66.75 142.01,67.86L132.09,94.19L129.04,87.45C128.8,86.93 128.38,86.53 127.84,86.33C127.3,86.13 126.72,86.15 126.2,86.38C125.68,86.62 125.28,87.04 125.08,87.58C124.88,88.12 124.9,88.7 125.13,89.22L130.31,100.67C130.55,101.19 130.97,101.59 131.51,101.79C132.05,101.99 132.63,101.97 133.15,101.74L144.6,96.56C145.12,96.32 145.52,95.9 145.72,95.36C145.93,94.83 145.91,94.25 145.68,93.72Z"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#_clip1)">
|
||||
<path d="M136.62,76.97L145.86,85.65L151.63,67.2L139.96,59.57L136.62,76.97Z" style="fill:url(#_Linear2);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M168.32,57.02C166.2,52.42 162.86,48.61 158.7,45.92C161.05,48.14 162.82,51.23 163.83,55C165.45,60.99 164.99,67.99 162.54,74.72C162.39,75.13 162.13,75.48 161.82,75.7C161.74,75.76 161.65,75.8 161.57,75.84L167.15,77.94C167.55,78.09 167.99,78.07 168.37,77.9C168.76,77.72 169.05,77.4 169.2,77C171.55,70.44 171.24,63.35 168.32,57.02Z" style="fill:url(#_Linear3);fill-rule:nonzero;"/>
|
||||
<path d="M126.46,61.13C129.06,54.46 133.34,48.89 138.51,45.46C141.83,43.25 145.28,42.1 148.58,42.03C143.56,41.21 138.41,41.86 133.66,43.97C127.29,46.8 122.38,51.92 119.82,58.4C119.66,58.79 119.67,59.24 119.85,59.62C120.02,60.01 120.34,60.31 120.74,60.46L126.47,62.62C126.43,62.54 126.39,62.45 126.37,62.35C126.26,61.97 126.3,61.53 126.46,61.13Z" style="fill:url(#_Linear4);fill-rule:nonzero;"/>
|
||||
<path d="M162.54,74.72C164.99,67.99 165.45,60.98 163.83,55C162.81,51.24 161.05,48.15 158.7,45.92C157.39,45.08 156,44.34 154.54,43.73C155.84,45.1 156.42,48.05 156.16,52.27C155.85,57.45 154.32,63.96 151.86,70.58C151.71,70.98 151.52,71.35 151.32,71.61C151.23,71.73 151.14,71.82 151.05,71.88L161.56,75.84C161.65,75.81 161.73,75.76 161.81,75.7C162.13,75.49 162.39,75.13 162.54,74.72Z" style="fill:url(#_Linear5);fill-rule:nonzero;"/>
|
||||
<path d="M136.32,65.95C136.34,65.63 136.44,65.22 136.59,64.82C139.11,58.22 142.25,52.33 145.44,48.23C148.01,44.92 150.37,43.09 152.24,42.89C151.03,42.51 149.81,42.22 148.57,42.02C145.27,42.09 141.82,43.25 138.5,45.45C133.33,48.88 129.05,54.45 126.45,61.12C126.29,61.53 126.26,61.96 126.35,62.33C126.37,62.43 126.41,62.52 126.45,62.6L136.33,66.32C136.31,66.24 136.3,66.11 136.32,65.95Z" style="fill:url(#_Linear6);fill-rule:nonzero;"/>
|
||||
<path d="M152.24,42.9C150.36,43.09 148.01,44.93 145.44,48.24C142.25,52.34 139.11,58.23 136.59,64.83C136.44,65.23 136.34,65.64 136.32,65.96C136.31,66.11 136.32,66.24 136.34,66.34L151.05,71.88C151.13,71.82 151.22,71.73 151.32,71.61C151.51,71.36 151.71,70.98 151.86,70.58C154.32,63.96 155.85,57.46 156.16,52.27C156.42,48.06 155.84,45.1 154.54,43.73C154.25,43.61 153.96,43.49 153.67,43.38C153.19,43.21 152.72,43.05 152.24,42.9Z" style="fill:url(#_Linear7);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<path d="M232.86,27.14C228.84,27.55 223.78,31.49 218.28,38.58C211.45,47.37 204.72,60 199.31,74.14C198.98,75 198.77,75.87 198.72,76.56C198.7,76.89 198.72,77.16 198.77,77.37L230.31,89.25C230.49,89.13 230.68,88.94 230.88,88.68C231.3,88.13 231.71,87.34 232.03,86.47C237.3,72.28 240.57,58.35 241.25,47.23C241.8,38.2 240.57,31.87 237.78,28.93C237.16,28.67 236.54,28.41 235.91,28.17C234.9,27.8 233.88,27.46 232.86,27.14Z" style="fill:url(#_Linear8);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path d="M204.77,180.58L158.04,162.72C154.22,161.26 152.3,156.97 153.76,153.15L178.29,88.95C179.75,85.12 184.05,83.2 187.88,84.66L216.98,95.78C218.82,96.48 220.3,97.88 221.11,99.68L232.01,123.97C232.82,125.77 232.88,127.82 232.17,129.66L214.35,176.28C212.89,180.13 208.6,182.05 204.77,180.58Z" style="fill:rgb(69,161,255);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path id="XMLID_1_" d="M218.79,136.08C218.28,134.96 217.37,134.11 216.23,133.68C215.08,133.25 213.83,133.29 212.72,133.79L198.28,140.33L219.54,83.9C220.43,81.53 219.23,78.88 216.86,77.98C214.49,77.09 211.84,78.29 210.94,80.66L189.68,137.09L183.14,122.65C182.63,121.53 181.72,120.68 180.58,120.25C179.43,119.82 178.18,119.86 177.07,120.36C175.95,120.87 175.1,121.78 174.67,122.92C174.24,124.07 174.28,125.32 174.78,126.43L185.89,150.97C186.4,152.09 187.31,152.94 188.45,153.37C189.6,153.8 190.85,153.76 191.96,153.26L216.5,142.15C217.62,141.64 218.47,140.73 218.9,139.59C219.33,138.45 219.29,137.2 218.79,136.08Z" style="fill:rgb(0,96,223);fill-rule:nonzero;"/>
|
||||
<clipPath id="_clip9">
|
||||
<path d="M218.79,136.08C218.28,134.96 217.37,134.11 216.23,133.68C215.08,133.25 213.83,133.29 212.72,133.79L198.28,140.33L219.54,83.9C220.43,81.53 219.23,78.88 216.86,77.98C214.49,77.09 211.84,78.29 210.94,80.66L189.68,137.09L183.14,122.65C182.63,121.53 181.72,120.68 180.58,120.25C179.43,119.82 178.18,119.86 177.07,120.36C175.95,120.87 175.1,121.78 174.67,122.92C174.24,124.07 174.28,125.32 174.78,126.43L185.89,150.97C186.4,152.09 187.31,152.94 188.45,153.37C189.6,153.8 190.85,153.76 191.96,153.26L216.5,142.15C217.62,141.64 218.47,140.73 218.9,139.59C219.33,138.45 219.29,137.2 218.79,136.08Z"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#_clip9)">
|
||||
<path d="M199.39,100.16L219.18,118.78L231.56,79.23L206.54,62.89L199.39,100.16Z" style="fill:url(#_Linear10);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M267.32,57.41C262.77,47.55 255.63,39.38 246.7,33.63C251.74,38.4 255.52,45.02 257.7,53.08C261.17,65.91 260.19,80.93 254.93,95.35C254.61,96.23 254.05,96.98 253.38,97.44C253.2,97.56 253.02,97.66 252.84,97.73L264.81,102.24C265.66,102.56 266.61,102.53 267.43,102.15C268.26,101.77 268.89,101.07 269.2,100.21C274.25,86.18 273.58,70.97 267.32,57.41Z" style="fill:url(#_Linear11);fill-rule:nonzero;"/>
|
||||
<path d="M177.6,66.22C183.17,51.91 192.34,39.98 203.42,32.63C210.54,27.9 217.93,25.43 225.01,25.27C214.25,23.51 203.2,24.9 193.02,29.42C179.37,35.48 168.84,46.46 163.36,60.34C163.03,61.19 163.05,62.13 163.41,62.96C163.78,63.79 164.47,64.44 165.32,64.76L177.6,69.39C177.51,69.21 177.44,69.02 177.38,68.81C177.18,68.02 177.26,67.09 177.6,66.22Z" style="fill:url(#_Linear12);fill-rule:nonzero;"/>
|
||||
<path d="M254.94,95.36C260.19,80.93 261.18,65.92 257.71,53.09C255.53,45.03 251.75,38.41 246.71,33.64C243.9,31.83 240.92,30.26 237.79,28.95C240.59,31.88 241.81,38.21 241.26,47.25C240.59,58.36 237.31,72.3 232.04,86.49C231.72,87.36 231.3,88.15 230.89,88.7C230.69,88.96 230.5,89.15 230.32,89.27L252.85,97.76C253.03,97.69 253.22,97.59 253.39,97.47C254.06,96.99 254.62,96.24 254.94,95.36Z" style="fill:url(#_Linear13);fill-rule:nonzero;"/>
|
||||
<path d="M198.73,76.56C198.78,75.88 198.99,75 199.32,74.14C204.72,60 211.46,47.37 218.29,38.58C223.8,31.49 228.85,27.55 232.87,27.14C230.28,26.33 227.65,25.7 225.01,25.27C217.93,25.43 210.54,27.9 203.42,32.63C192.34,39.98 183.18,51.91 177.6,66.22C177.26,67.09 177.18,68.03 177.38,68.82C177.43,69.03 177.51,69.22 177.6,69.4L198.78,77.38C198.72,77.16 198.7,76.89 198.73,76.56Z" style="fill:url(#_Linear14);fill-rule:nonzero;"/>
|
||||
<path d="M232.86,27.14C228.84,27.55 223.78,31.49 218.28,38.58C211.45,47.37 204.72,60 199.31,74.14C198.98,75 198.77,75.87 198.72,76.56C198.7,76.89 198.72,77.16 198.77,77.37L230.31,89.25C230.49,89.13 230.68,88.94 230.88,88.68C231.3,88.13 231.71,87.34 232.03,86.47C237.3,72.28 240.57,58.35 241.25,47.23C241.8,38.2 240.57,31.87 237.78,28.93C237.16,28.67 236.54,28.41 235.91,28.17C234.9,27.8 233.88,27.46 232.86,27.14Z" style="fill:url(#_Linear15);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M269.57,162.35L258.74,158.21C257.85,157.87 257.41,156.88 257.75,155.99L263.44,141.11C263.78,140.22 264.77,139.78 265.66,140.12L272.41,142.7C272.84,142.86 273.18,143.19 273.37,143.6L275.9,149.23C276.09,149.65 276.1,150.12 275.94,150.55L271.81,161.36C271.46,162.24 270.46,162.69 269.57,162.35Z" style="fill:rgb(69,161,255);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path id="XMLID_3_" d="M272.83,152.03C272.71,151.77 272.5,151.57 272.24,151.47C271.97,151.37 271.68,151.38 271.43,151.5L268.08,153.02L273.01,139.94C273.22,139.39 272.94,138.78 272.39,138.57C271.84,138.36 271.23,138.64 271.02,139.19L266.09,152.27L264.57,148.92C264.45,148.66 264.24,148.46 263.98,148.36C263.71,148.26 263.42,148.27 263.17,148.39C262.91,148.51 262.71,148.72 262.61,148.98C262.51,149.25 262.52,149.54 262.64,149.79L265.22,155.48C265.34,155.74 265.55,155.94 265.81,156.04C266.07,156.14 266.37,156.13 266.62,156.01L272.31,153.43C272.57,153.31 272.77,153.1 272.87,152.84C272.95,152.58 272.94,152.29 272.83,152.03Z" style="fill:rgb(0,96,223);fill-rule:nonzero;"/>
|
||||
<clipPath id="_clip16">
|
||||
<path d="M272.83,152.03C272.71,151.77 272.5,151.57 272.24,151.47C271.97,151.37 271.68,151.38 271.43,151.5L268.08,153.02L273.01,139.94C273.22,139.39 272.94,138.78 272.39,138.57C271.84,138.36 271.23,138.64 271.02,139.19L266.09,152.27L264.57,148.92C264.45,148.66 264.24,148.46 263.98,148.36C263.71,148.26 263.42,148.27 263.17,148.39C262.91,148.51 262.71,148.72 262.61,148.98C262.51,149.25 262.52,149.54 262.64,149.79L265.22,155.48C265.34,155.74 265.55,155.94 265.81,156.04C266.07,156.14 266.37,156.13 266.62,156.01L272.31,153.43C272.57,153.31 272.77,153.1 272.87,152.84C272.95,152.58 272.94,152.29 272.83,152.03Z"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#_clip16)">
|
||||
<path d="M268.33,143.7L272.92,148.02L275.79,138.85L269.98,135.06L268.33,143.7Z" style="fill:url(#_Linear17);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M284.08,133.79C283.02,131.5 281.37,129.61 279.3,128.28C280.47,129.39 281.35,130.92 281.85,132.79C282.65,135.77 282.43,139.25 281.21,142.59C281.14,142.79 281.01,142.97 280.85,143.08C280.81,143.11 280.77,143.13 280.72,143.15L283.49,144.2C283.69,144.27 283.91,144.27 284.1,144.18C284.29,144.09 284.44,143.93 284.51,143.73C285.68,140.46 285.53,136.93 284.08,133.79Z" style="fill:url(#_Linear18);fill-rule:nonzero;"/>
|
||||
<path d="M263.28,135.83C264.57,132.51 266.7,129.75 269.27,128.04C270.92,126.94 272.63,126.37 274.28,126.33C271.79,125.92 269.22,126.24 266.86,127.29C263.7,128.69 261.25,131.24 259.98,134.46C259.9,134.66 259.91,134.88 259.99,135.07C260.08,135.26 260.23,135.41 260.43,135.49L263.28,136.56C263.26,136.52 263.24,136.47 263.23,136.43C263.18,136.25 263.2,136.03 263.28,135.83Z" style="fill:url(#_Linear19);fill-rule:nonzero;"/>
|
||||
<path d="M281.21,142.59C282.43,139.25 282.66,135.76 281.85,132.79C281.34,130.92 280.47,129.39 279.3,128.28C278.65,127.86 277.96,127.5 277.23,127.19C277.88,127.87 278.16,129.34 278.03,131.43C277.87,134.01 277.12,137.24 275.89,140.53C275.82,140.73 275.72,140.91 275.62,141.04C275.57,141.1 275.53,141.15 275.49,141.17L280.71,143.14C280.75,143.12 280.79,143.1 280.84,143.07C281,142.97 281.13,142.79 281.21,142.59Z" style="fill:url(#_Linear20);fill-rule:nonzero;"/>
|
||||
<path d="M268.17,138.23C268.18,138.07 268.23,137.87 268.31,137.67C269.56,134.39 271.12,131.46 272.71,129.43C273.99,127.79 275.16,126.87 276.09,126.78C275.49,126.59 274.88,126.45 274.27,126.35C272.63,126.39 270.92,126.96 269.26,128.06C266.69,129.76 264.57,132.53 263.27,135.85C263.19,136.05 263.17,136.27 263.22,136.45C263.23,136.5 263.25,136.54 263.27,136.58L268.18,138.43C268.17,138.37 268.17,138.31 268.17,138.23Z" style="fill:url(#_Linear21);fill-rule:nonzero;"/>
|
||||
<path d="M276.09,126.77C275.16,126.87 273.99,127.78 272.71,129.42C271.13,131.46 269.57,134.39 268.31,137.66C268.23,137.86 268.18,138.06 268.17,138.22C268.16,138.3 268.17,138.36 268.18,138.41L275.49,141.17C275.53,141.14 275.58,141.1 275.62,141.04C275.72,140.91 275.81,140.73 275.89,140.53C277.11,137.24 277.87,134.01 278.03,131.43C278.16,129.34 277.87,127.87 277.23,127.19C277.09,127.13 276.94,127.07 276.8,127.01C276.56,126.93 276.32,126.85 276.09,126.77Z" style="fill:url(#_Linear22);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M77.27,189.52L52.69,180.13C50.68,179.36 49.67,177.11 50.44,175.1L63.34,141.33C64.11,139.31 66.37,138.3 68.38,139.08L83.68,144.93C84.65,145.3 85.43,146.04 85.85,146.98L91.58,159.76C92.01,160.71 92.04,161.78 91.67,162.75L82.3,187.27C81.54,189.28 79.28,190.29 77.27,189.52Z" style="fill:rgb(69,161,255);fill-rule:nonzero;"/>
|
||||
<g>
|
||||
<path id="XMLID_4_" d="M84.64,166.12C84.37,165.53 83.89,165.08 83.29,164.86C82.69,164.63 82.03,164.65 81.44,164.92L73.84,168.36L85.02,138.68C85.49,137.43 84.86,136.04 83.61,135.57C82.36,135.1 80.97,135.73 80.5,136.98L69.32,166.66L65.88,159.06C65.61,158.47 65.13,158.02 64.53,157.8C63.93,157.57 63.27,157.59 62.68,157.86C62.09,158.13 61.64,158.61 61.42,159.21C61.2,159.81 61.21,160.47 61.48,161.06L67.32,173.97C67.59,174.56 68.07,175.01 68.67,175.23C69.27,175.46 69.93,175.44 70.52,175.17L83.43,169.33C84.02,169.06 84.47,168.58 84.69,167.98C84.93,167.36 84.91,166.7 84.64,166.12Z" style="fill:rgb(0,96,223);fill-rule:nonzero;"/>
|
||||
<clipPath id="_clip23">
|
||||
<path d="M84.64,166.12C84.37,165.53 83.89,165.08 83.29,164.86C82.69,164.63 82.03,164.65 81.44,164.92L73.84,168.36L85.02,138.68C85.49,137.43 84.86,136.04 83.61,135.57C82.36,135.1 80.97,135.73 80.5,136.98L69.32,166.66L65.88,159.06C65.61,158.47 65.13,158.02 64.53,157.8C63.93,157.57 63.27,157.59 62.68,157.86C62.09,158.13 61.64,158.61 61.42,159.21C61.2,159.81 61.21,160.47 61.48,161.06L67.32,173.97C67.59,174.56 68.07,175.01 68.67,175.23C69.27,175.46 69.93,175.44 70.52,175.17L83.43,169.33C84.02,169.06 84.47,168.58 84.69,167.98C84.93,167.36 84.91,166.7 84.64,166.12Z"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#_clip23)">
|
||||
<path d="M74.44,147.22L84.85,157.02L91.36,136.21L78.2,127.62L74.44,147.22Z" style="fill:url(#_Linear24);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<path d="M110.17,124.74C107.78,119.55 104.02,115.26 99.32,112.23C101.97,114.74 103.96,118.22 105.11,122.46C106.93,129.21 106.42,137.11 103.65,144.69C103.48,145.15 103.19,145.55 102.83,145.79C102.74,145.85 102.64,145.9 102.54,145.94L108.83,148.31C109.28,148.48 109.77,148.46 110.21,148.26C110.64,148.06 110.98,147.69 111.14,147.24C113.81,139.87 113.46,131.87 110.17,124.74Z" style="fill:url(#_Linear25);fill-rule:nonzero;"/>
|
||||
<path d="M62.98,129.37C65.91,121.85 70.73,115.57 76.56,111.7C80.31,109.21 84.19,107.91 87.92,107.83C82.26,106.9 76.45,107.63 71.1,110.01C63.92,113.2 58.38,118.97 55.5,126.27C55.32,126.72 55.33,127.21 55.53,127.65C55.72,128.09 56.09,128.43 56.53,128.6L62.99,131.03C62.94,130.94 62.9,130.84 62.88,130.73C62.76,130.32 62.8,129.83 62.98,129.37Z" style="fill:url(#_Linear26);fill-rule:nonzero;"/>
|
||||
<path d="M103.65,144.7C106.41,137.11 106.93,129.22 105.11,122.47C103.96,118.23 101.97,114.75 99.32,112.24C97.84,111.29 96.28,110.46 94.63,109.77C96.1,111.31 96.74,114.64 96.46,119.39C96.11,125.23 94.38,132.56 91.61,140.03C91.44,140.49 91.22,140.9 91,141.19C90.89,141.33 90.79,141.43 90.7,141.49L102.55,145.95C102.65,145.91 102.74,145.86 102.84,145.8C103.19,145.56 103.48,145.16 103.65,144.7Z" style="fill:url(#_Linear27);fill-rule:nonzero;"/>
|
||||
<path d="M74.09,134.81C74.11,134.45 74.23,133.99 74.4,133.54C77.24,126.1 80.79,119.46 84.38,114.84C87.28,111.11 89.94,109.04 92.05,108.82C90.69,108.39 89.31,108.06 87.92,107.83C84.19,107.91 80.31,109.21 76.56,111.7C70.73,115.57 65.91,121.84 62.98,129.37C62.8,129.83 62.76,130.32 62.87,130.74C62.9,130.85 62.94,130.95 62.98,131.04L74.12,135.24C74.09,135.13 74.08,134.99 74.09,134.81Z" style="fill:url(#_Linear28);fill-rule:nonzero;"/>
|
||||
<path d="M92.04,108.82C89.93,109.04 87.27,111.11 84.37,114.84C80.78,119.46 77.24,126.11 74.39,133.54C74.22,133.99 74.11,134.45 74.08,134.81C74.07,134.98 74.08,135.13 74.11,135.23L90.7,141.48C90.79,141.42 90.89,141.32 91,141.18C91.22,140.89 91.44,140.47 91.61,140.02C94.38,132.56 96.1,125.23 96.46,119.38C96.75,114.63 96.1,111.3 94.63,109.76C94.3,109.62 93.98,109.49 93.65,109.36C93.12,109.17 92.58,108.99 92.04,108.82Z" style="fill:url(#_Linear29);fill-rule:nonzero;"/>
|
||||
</g>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.59681e-15,-26.0779,26.0779,1.59681e-15,144.128,85.6518)"><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear3" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(22.1565,50.0308,-50.0308,22.1565,148.016,28.2064)"><stop offset="0" style="stop-color:rgb(250,53,127);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear4" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(49.3863,18.6083,-18.6083,49.3863,124.013,47.2236)"><stop offset="0" style="stop-color:rgb(255,243,97);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear5" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(15.9622,45.5041,-45.5041,15.9622,148.35,37.4201)"><stop offset="0" style="stop-color:rgb(255,81,98);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear6" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(6.638,13.7126,-13.7126,6.638,135.036,43.8416)"><stop offset="0" style="stop-color:rgb(255,217,67);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear7" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.67361,36.6506,-36.6506,7.67361,141.962,36.7113)"><stop offset="0" style="stop-color:rgb(255,135,72);stop-opacity:1"/><stop offset="0.13" style="stop-color:rgb(254,120,82);stop-opacity:1"/><stop offset="0.5" style="stop-color:rgb(252,84,106);stop-opacity:1"/><stop offset="0.81" style="stop-color:rgb(250,61,121);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(250,53,127);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear8" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.69647,51.7596,-51.7596,4.69647,216.443,19.2225)"><stop offset="0" style="stop-color:rgb(255,243,97);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear10" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.42253e-15,-55.8942,55.8942,3.42253e-15,215.472,118.78)"><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear11" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(47.4893,107.234,-107.234,47.4893,223.805,-4.3458)"><stop offset="0" style="stop-color:rgb(250,53,127);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear12" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(105.852,39.8841,-39.8841,105.852,172.363,36.4203)"><stop offset="0" style="stop-color:rgb(255,243,97);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear13" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(34.2127,97.5317,-97.5317,34.2127,224.522,15.4024)"><stop offset="0" style="stop-color:rgb(255,81,98);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear14" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(14.2275,29.391,-29.391,14.2275,195.984,29.166)"><stop offset="0" style="stop-color:rgb(255,217,67);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear15" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(16.4472,78.5554,-78.5554,16.4472,210.834,13.8887)"><stop offset="0" style="stop-color:rgb(255,135,72);stop-opacity:1"/><stop offset="0.13" style="stop-color:rgb(254,120,82);stop-opacity:1"/><stop offset="0.5" style="stop-color:rgb(252,84,106);stop-opacity:1"/><stop offset="0.81" style="stop-color:rgb(250,61,121);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(250,53,127);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear17" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.93467e-16,-12.9583,12.9583,7.93467e-16,272.056,148.018)"><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear18" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(11.0097,24.8605,-24.8605,11.0097,273.988,119.473)"><stop offset="0" style="stop-color:rgb(250,53,127);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear19" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(24.5402,9.24651,-9.24651,24.5402,262.063,128.92)"><stop offset="0" style="stop-color:rgb(255,243,97);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear20" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.9317,22.6113,-22.6113,7.9317,274.154,124.051)"><stop offset="0" style="stop-color:rgb(255,81,98);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear21" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.2985,6.8138,-6.8138,3.2985,267.538,127.242)"><stop offset="0" style="stop-color:rgb(255,217,67);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear22" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(3.81308,18.2119,-18.2119,3.81308,270.982,123.697)"><stop offset="0" style="stop-color:rgb(255,135,72);stop-opacity:1"/><stop offset="0.13" style="stop-color:rgb(254,120,82);stop-opacity:1"/><stop offset="0.5" style="stop-color:rgb(252,84,106);stop-opacity:1"/><stop offset="0.81" style="stop-color:rgb(250,61,121);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(250,53,127);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear24" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.80008e-15,-29.3976,29.3976,1.80008e-15,82.8973,157.016)"><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="0" style="stop-color:rgb(10,92,199);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear25" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(24.9771,56.3998,-56.3998,24.9771,87.2799,92.2572)"><stop offset="0" style="stop-color:rgb(250,53,127);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(120,120,255);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear26" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(55.6733,20.9771,-20.9771,55.6733,60.2207,113.698)"><stop offset="0" style="stop-color:rgb(255,243,97);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear27" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(17.9942,51.297,-51.297,17.9942,87.6569,102.644)"><stop offset="0" style="stop-color:rgb(255,81,98);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(131,33,157);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear28" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(7.483,15.4582,-15.4582,7.483,72.6475,109.883)"><stop offset="0" style="stop-color:rgb(255,217,67);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(255,168,10);stop-opacity:1"/></linearGradient>
|
||||
<linearGradient id="_Linear29" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(8.6504,41.3164,-41.3164,8.6504,80.4547,101.848)"><stop offset="0" style="stop-color:rgb(255,135,72);stop-opacity:1"/><stop offset="0.13" style="stop-color:rgb(254,120,82);stop-opacity:1"/><stop offset="0.5" style="stop-color:rgb(252,84,106);stop-opacity:1"/><stop offset="0.81" style="stop-color:rgb(250,61,121);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(250,53,127);stop-opacity:1"/></linearGradient>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 45 KiB |
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 578.55 185.54"><path d="M503.5 117.21c0 4.92 2.37 8.82 9 8.82 7.8 0 16.11-5.6 16.61-18.31a80.86 80.86 0 0 0-11-1c-7.83-.01-14.61 2.19-14.61 10.49z"/><path d="M0 0v185.54h578.55V0zm163.78 139.93h-32V96.87c0-13.22-4.41-18.31-13.05-18.31-10.51 0-14.75 7.46-14.75 18.14v26.64h10.12v16.61h-32V96.87c0-13.22-4.4-18.31-13.05-18.31-10.51 0-14.75 7.46-14.75 18.14v26.64h14.54v16.61H22.22v-16.61h10.17V80.09h-11V63.48h32.87V75c4.58-8.13 12.55-13.05 23.22-13.05 11 0 21.19 5.26 24.92 16.45 4.24-10.17 12.88-16.45 24.92-16.45 13.73 0 26.28 8.31 26.28 26.45v34.94h10.17zm48.65 1.69c-23.56 0-39.84-14.41-39.84-38.82 0-22.38 13.56-40.86 41-40.86s40.86 18.48 40.86 39.84c.02 24.42-17.61 39.85-42.02 39.85zm121.72-1.69h-66.8l-2.2-11.53 42-48.32h-23.9l-3.39 11.87-15.77-1.69 2.71-26.79H334L335.69 75l-42.4 48.34H318l3.56-11.87 17.29 1.69zm41.36 0h-22.89v-27.46h22.89zm0-49h-22.89V63.48h22.89zm12 49L420.6 23.34h21.53l-33.06 116.59zm44.42 0L465 23.34h21.53l-33.04 116.59zm113.92 1.69c-10.17 0-15.76-5.94-16.78-15.26-4.41 7.8-12.21 15.26-24.58 15.26-11 0-23.56-5.94-23.56-21.87 0-18.82 18.14-23.22 35.6-23.22a100.23 100.23 0 0 1 12.55.68v-2.54c0-7.8-.17-17.12-12.55-17.12-4.58 0-8.14.34-11.7 2.2L502 90.6l-17.46-1.87 3.39-19.83c13.39-5.43 20.17-7 32.72-7 16.45 0 30.35 8.48 30.35 25.94v33.23c0 4.41 1.69 5.94 5.26 5.94a11.5 11.5 0 0 0 3.22-.51l.17 11.53a29.57 29.57 0 0 1-13.77 3.6z"/><path d="M213.27 78.73c-11.19 0-18.14 8.3-18.14 22.72 0 13.22 6.1 23.39 18 23.39 11.36 0 18.82-9.15 18.82-23.73-.03-15.43-8.33-22.38-18.68-22.38z"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 34 KiB |
|
@ -1,34 +1,34 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="64mm"
|
||||
height="64mm"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg898">
|
||||
<defs
|
||||
id="defs892" />
|
||||
<metadata
|
||||
id="metadata895">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1">
|
||||
<path
|
||||
id="cloud-upload"
|
||||
d="m 63.999948,34.285731 a 17.033293,17.033293 0 0 1 -4.406235,11.428568 14.856655,14.856655 0 0 1 -10.55805,4.571428 h -2.178561 v -6.857139 h 2.178561 A 8.0044292,8.0044292 0 0 0 54.504416,41.118327 10.183788,10.183788 0 0 0 57.14281,34.285731 11.442004,11.442004 0 0 0 45.714251,22.857173 c -0.37683,0 -2.312648,0.241803 -3.490288,0.393502 A 1.1359993,1.1359993 0 0 1 41.00286,22.487082 L 40.537483,21.129528 A 14.102711,14.102711 0 0 0 28.821257,11.497829 13.665957,13.665957 0 0 0 14.091416,28.276812 l 0.488099,2.087681 a 1.1428564,1.1428564 0 0 1 -0.782255,1.354176 l -2.053987,0.62062 a 6.7940986,6.7940986 0 0 0 -4.8860757,6.517846 4.6043628,4.6043628 0 0 0 0.9464197,2.808045 5.5388308,5.5388308 0 0 0 4.089282,1.763384 h 5.250006 v 6.857137 H 11.892899 A 12.235604,12.235604 0 0 1 2.2121047,45.633903 11.506439,11.506439 0 0 1 5.8514086e-5,38.857135 13.5727,13.5727 0 0 1 6.9442617,26.97321 C 6.8863778,26.359414 6.8571876,25.747771 6.8571876,25.142857 A 20.563484,20.563484 0 0 1 45.843766,16.000009 18.306983,18.306983 0 0 1 64,34.285707 Z M 32.923239,32.122512 a 1.1428564,1.1428564 0 0 0 -1.846543,0 l -8.591651,11.775239 a 1.1428564,1.1428564 0 0 0 0.923268,1.816548 h 5.163091 v 12.571418 a 1.1428564,1.1428564 0 0 0 1.14285,1.142858 h 4.571428 a 1.1428564,1.1428564 0 0 0 1.142859,-1.142858 V 45.714299 h 5.163084 a 1.1428564,1.1428564 0 0 0 0.923265,-1.816548 z"
|
||||
style="stroke-width:2.28572;fill:#000000;fill-opacity:1" />
|
||||
</g>
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
width="700.000000pt" height="700.000000pt" viewBox="0 0 700.000000 700.000000"
|
||||
preserveAspectRatio="xMidYMid meet">
|
||||
<metadata>
|
||||
Created by potrace 1.11, written by Peter Selinger 2001-2013
|
||||
</metadata>
|
||||
<g transform="translate(0.000000,700.000000) scale(0.100000,-0.100000)"
|
||||
fill="#000000" stroke="none">
|
||||
<path d="M3279 6996 c-2 -2 -40 -6 -84 -10 -44 -3 -98 -8 -120 -11 -22 -3 -58
|
||||
-7 -80 -10 -22 -3 -51 -7 -65 -10 -14 -3 -52 -10 -85 -16 -274 -49 -603 -159
|
||||
-879 -294 -874 -428 -1546 -1218 -1816 -2135 -12 -41 -26 -86 -31 -100 -7 -21
|
||||
-17 -62 -34 -140 -16 -77 -45 -237 -50 -285 -4 -33 -9 -69 -11 -80 -10 -54
|
||||
-18 -205 -19 -340 0 -143 2 -153 27 -208 49 -104 122 -171 223 -206 59 -20 77
|
||||
-20 1464 -21 773 0 1407 -2 1409 -5 6 -6 9 -1803 3 -1829 -3 -14 -108 87 -445
|
||||
427 -243 245 -459 456 -482 470 -124 76 -296 68 -412 -19 -117 -89 -168 -229
|
||||
-136 -381 19 -93 54 -144 215 -308 81 -82 196 -200 256 -261 146 -151 936
|
||||
-954 1045 -1064 121 -121 210 -161 347 -156 62 2 85 8 126 31 28 15 61 34 75
|
||||
41 14 8 121 111 239 231 117 120 398 406 625 637 760 773 708 716 741 809 37
|
||||
102 30 199 -22 304 -109 220 -403 265 -584 89 -42 -41 -491 -501 -734 -752
|
||||
-63 -65 -115 -112 -116 -104 -4 64 0 1822 5 1827 3 3 628 6 1388 5 948 -1
|
||||
1400 2 1438 10 117 22 210 96 264 208 l31 65 -1 180 c0 155 -5 230 -29 412 -2
|
||||
17 -9 60 -16 95 -6 35 -13 76 -16 92 -2 16 -20 90 -38 165 -116 472 -343 932
|
||||
-654 1326 -30 39 -60 75 -66 82 -360 404 -677 654 -1112 874 -286 145 -636
|
||||
262 -943 315 -101 17 -103 18 -195 29 -33 3 -71 9 -85 12 -31 5 -555 14 -561
|
||||
9z m427 -760 c530 -39 1049 -239 1486 -573 123 -94 359 -324 459 -448 293
|
||||
-362 512 -854 574 -1287 l7 -48 -853 -1 c-470 0 -1700 -1 -2734 -1 l-1880 -1
|
||||
1 34 c0 30 7 76 18 134 14 72 62 240 95 336 203 595 612 1105 1163 1450 178
|
||||
112 434 227 638 288 58 17 119 36 135 41 25 7 104 24 214 45 13 2 49 7 80 11
|
||||
31 3 59 8 62 10 3 1 55 6 115 10 60 3 110 7 111 8 4 3 231 -2 309 -8z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
@ -1,6 +1,6 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<symbol id="logo">
|
||||
<path d="m 105.17,33.27 c -1.04895,-0.638175 -2.18377,-1.123082 -3.37,-1.44 -1.25,-0.34 -2.46,-0.63 -3.63,-0.88 l -3.08,-0.7 C 94.22073,30.069182 93.37751,29.78027 92.58,29.39 91.90449,29.074134 91.31719,28.596738 90.87,28 c -0.43741,-0.644047 -0.65489,-1.412243 -0.62,-2.19 -0.0406,-1.405196 0.53693,-2.75754 1.58,-3.7 1.06,-1 2.73,-1.44 5,-1.44 1.76437,-0.07198 3.51559,0.332147 5.07,1.17 1.35935,0.80694 2.51833,1.911219 3.39,3.23 l 2.79,-2.18 c -1.26761,-1.5933 -2.84201,-2.916072 -4.63,-3.89 -2.04373,-1.017745 -4.30804,-1.512526 -6.59,-1.44 -1.40785,-0.02195 -2.80876,0.201387 -4.14,0.66 -1.16063,0.399115 -2.24085,1.001871 -3.19,1.78 -0.8713,0.712445 -1.5718,1.611145 -2.05,2.63 -0.4819,1.011666 -0.72807,2.119452 -0.72,3.24 -0.05,1.231532 0.24064,2.452997 0.84,3.53 0.55827,0.895068 1.31002,1.653654 2.2,2.22 0.94422,0.612326 1.97599,1.077636 3.06,1.38 1.13,0.32 2.29,0.6 3.47,0.84 l 3.26,0.74 c 0.96945,0.22193 1.90929,0.557589 2.8,1 0.77256,0.367753 1.45522,0.900225 2,1.56 0.51019,0.701297 0.77072,1.553301 0.74,2.42 0.0438,1.566414 -0.62122,3.069031 -1.81,4.09 -1.52512,1.147855 -3.41702,1.699065 -5.32,1.55 -4.03416,0.15747 -7.83041,-1.90763 -9.89,-5.38 l -3,2.34 c 1.3876,1.880136 3.1735,3.430427 5.23,4.54 2.3855,1.197767 5.03194,1.782045 7.7,1.7 1.49114,0.02151 2.97422,-0.222285 4.38,-0.72 1.21788,-0.44929 2.33816,-1.128248 3.3,-2 0.88604,-0.797749 1.60053,-1.767412 2.1,-2.85 0.48895,-1.06318 0.74142,-2.219779 0.74,-3.39 0.0397,-1.336553 -0.30755,-2.656119 -1,-3.8 -0.62101,-0.95962 -1.44763,-1.769154 -2.42,-2.37 z m 27.51,-4.72 c -1.0207,-1.016684 -2.23916,-1.813109 -3.58,-2.34 -1.42831,-0.567565 -2.95311,-0.852828 -4.49,-0.84 -1.58532,-0.01887 -3.15769,0.287432 -4.62,0.9 -1.3691,0.572827 -2.61257,1.408599 -3.66,2.46 -2.1451,2.217513 -3.33989,5.184759 -3.33,8.27 -0.0138,1.54162 0.26439,3.071916 0.82,4.51 0.5255,1.363982 1.32922,2.603618 2.36,3.64 1.06096,1.043663 2.31862,1.866239 3.7,2.42 1.53222,0.610739 3.17082,0.909903 4.82,0.88 2.13421,0.08534 4.25095,-0.416179 6.12,-1.45 1.69947,-1.049265 3.13073,-2.480527 4.18,-4.18 l -2.88,-1.69 c -1.41279,2.768876 -4.32635,4.443291 -7.43,4.27 -1.09666,0.02103 -2.18793,-0.158593 -3.22,-0.53 -0.93382,-0.341463 -1.79784,-0.849713 -2.55,-1.5 -0.72694,-0.645531 -1.33013,-1.418157 -1.78,-2.28 -0.47812,-0.903522 -0.77374,-1.892313 -0.87,-2.91 h 19.59 v -1.52 c 0.0166,-1.555338 -0.27566,-3.098506 -0.86,-4.54 -0.54053,-1.333176 -1.33916,-2.54641 -2.35,-3.57 z m -16.28,6.67 c 0.18109,-0.958759 0.51895,-1.881119 1,-2.73 0.47186,-0.820757 1.07675,-1.557447 1.79,-2.18 0.72195,-0.61779 1.5482,-1.102022 2.44,-1.43 0.95944,-0.356614 1.97651,-0.532906 3,-0.52 4.04346,-0.224227 7.5255,2.82256 7.84,6.86 z M 158.82,28 c -0.83726,-0.883328 -1.8626,-1.566885 -3,-2 -1.25447,-0.462049 -2.58329,-0.689169 -3.92,-0.67 -1.60057,-0.03131 -3.18086,0.362037 -4.58,1.14 -1.28188,0.720594 -2.36173,1.752297 -3.14,3 v -3.65 h -3.29 V 48 h 3.37 V 35.67 c -0.0102,-1.001391 0.16968,-1.995625 0.53,-2.93 0.3373,-0.856524 0.84023,-1.638106 1.48,-2.3 0.62704,-0.649648 1.38331,-1.160636 2.22,-1.5 0.87089,-0.363534 1.8063,-0.547214 2.75,-0.54 1.87023,-0.128793 3.70135,0.578019 5,1.93 1.22147,1.441484 1.85048,3.292756 1.76,5.18 V 48 h 3.41 V 35.34 c 0.0211,-1.424123 -0.20214,-2.84132 -0.66,-4.19 -0.40985,-1.176324 -1.06809,-2.250653 -1.93,-3.15 z m 27,-12.42 v 14.1 c -0.43264,-0.685249 -0.96517,-1.302051 -1.58,-1.83 -0.60967,-0.53196 -1.28117,-0.98858 -2,-1.36 -0.73088,-0.369676 -1.5029,-0.651634 -2.3,-0.84 -0.78611,-0.187908 -1.59174,-0.281898 -2.4,-0.28 -1.50724,-0.0078 -3.00162,0.277523 -4.4,0.84 -1.34071,0.551089 -2.56038,1.35967 -3.59,2.38 -1.03697,1.047216 -1.85907,2.287165 -2.42,3.65 -1.17023,2.996466 -1.17023,6.323534 0,9.32 0.55964,1.361695 1.37424,2.603955 2.4,3.66 1.02081,1.031107 2.2428,1.841226 3.59,2.38 1.40561,0.561607 2.90636,0.846817 4.42,0.84 0.80981,-0.0026 1.6161,-0.106786 2.4,-0.31 0.79636,-0.199929 1.56783,-0.488392 2.3,-0.86 0.72123,-0.371416 1.39312,-0.831661 2,-1.37 0.61025,-0.540083 1.14205,-1.162767 1.58,-1.85 v 4 h 3.33 V 15.59 Z m -0.37,24.58 c -1.76276,4.229524 -6.6195,6.23041 -10.85,4.47 v 0 c -0.97862,-0.401365 -1.86378,-1.000551 -2.6,-1.76 -0.7522,-0.76312 -1.34086,-1.671634 -1.73,-2.67 -0.41974,-1.066531 -0.63023,-2.203893 -0.62,-3.35 -0.0103,-1.129892 0.20027,-2.250911 0.62,-3.3 0.39328,-0.993283 0.98151,-1.897738 1.73,-2.66 0.74207,-0.76001 1.62521,-1.368023 2.6,-1.79 2.07874,-0.890012 4.43126,-0.890012 6.51,0 0.98149,0.434716 1.87338,1.048526 2.63,1.81 0.74927,0.763509 1.33458,1.672102 1.72,2.67 0.41464,1.036611 0.62516,2.14355 0.62,3.26 -1.3e-4,1.141508 -0.22084,2.272237 -0.65,3.33 z" fill="currentColor"/>
|
||||
<path d="M84,48h5.83V35.87H103.3V30.45H89.83V23.51H103.3V18H84Zm23.57,0h5.79V25.81h-5.79Zm2.88-32.12a3.46,3.46,0,0,0-2.59,1,3.62,3.62,0,0,0-1,2.65,3.57,3.57,0,0,0,1,2.59,3.52,3.52,0,0,0,2.61,1,3.46,3.46,0,0,0,3.65-3.26c0-.12,0-.23,0-.35a3.71,3.71,0,0,0-1-2.65,3.5,3.5,0,0,0-2.67-1Zm19.14,9.53a7.22,7.22,0,0,0-3.72.93,5.82,5.82,0,0,0-2.4,2.89V25.81h-5.59V48h5.63V36.29a5.27,5.27,0,0,1,1.31-4,4.94,4.94,0,0,1,3.49-1.21,6.33,6.33,0,0,1,1.73.23,4,4,0,0,1,1.23.55l2-5.59a7.51,7.51,0,0,0-1.66-.61,8.11,8.11,0,0,0-2-.26Zm23.94,3.19a11.15,11.15,0,0,0-3.61-2.37,12.08,12.08,0,0,0-4.6-.86,11.62,11.62,0,0,0-8.3,3.37,11.17,11.17,0,0,0-2.44,3.67,11.59,11.59,0,0,0-.89,4.54,12.24,12.24,0,0,0,.83,4.52,10.52,10.52,0,0,0,2.36,3.66,10.93,10.93,0,0,0,3.71,2.44,12.75,12.75,0,0,0,4.85.88,12.15,12.15,0,0,0,6.12-1.39,13.25,13.25,0,0,0,4.11-3.74L151,40.6a6.23,6.23,0,0,1-2.18,2.15,6.36,6.36,0,0,1-3.33.8,6.7,6.7,0,0,1-4.13-1.25,6,6,0,0,1-2.23-3.43h17.62V36.74a11.71,11.71,0,0,0-.87-4.56,10.5,10.5,0,0,0-2.35-3.59Zm-14.21,5.85a6.38,6.38,0,0,1,2.26-3.12,6.11,6.11,0,0,1,3.74-1.15,6.26,6.26,0,0,1,3.73,1.08,5.56,5.56,0,0,1,2.1,3.19ZM167,16.08a6.05,6.05,0,0,0-2.91,1.54,6.15,6.15,0,0,0-1.56,2.89,18.1,18.1,0,0,0-.48,4.52v.78H158.4v5.1h3.65V48h5.63V30.91H173v-5.1h-5.3V24.75a13.34,13.34,0,0,1,.12-2,2,2,0,0,1,.6-1.19,2.45,2.45,0,0,1,1.33-.57,15.25,15.25,0,0,1,2.34-.15H173V15.63h-1.48A19.06,19.06,0,0,0,167,16.08Zm27.4,12.65a12,12,0,0,0-16.72,0,10.87,10.87,0,0,0-2.46,3.67,11.61,11.61,0,0,0-.89,4.5,11.46,11.46,0,0,0,7.07,10.64,11.73,11.73,0,0,0,4.64.9,12,12,0,0,0,4.66-.9,11.26,11.26,0,0,0,3.72-2.49,11.83,11.83,0,0,0,2.46-3.67,11.31,11.31,0,0,0,.9-4.48A11.43,11.43,0,0,0,194.4,28.73ZM191.7,39.3a5.88,5.88,0,0,1-1.29,2,6.53,6.53,0,0,1-1.93,1.31,6,6,0,0,1-4.76,0,6.34,6.34,0,0,1-1.93-1.31,6.06,6.06,0,0,1-1.3-2,6.48,6.48,0,0,1,0-4.86,5.76,5.76,0,0,1,1.3-2,6.08,6.08,0,0,1,1.93-1.32,6,6,0,0,1,4.76,0,6.37,6.37,0,0,1,1.93,1.32,5.73,5.73,0,0,1,1.29,2A6.39,6.39,0,0,1,191.7,39.3Zm29.47-13.49h-6.65l-4.68,6.57-4.64-6.57h-6.74l7.84,10.8L198,48h6.82l5-6.94L214.89,48h6.86l-8.46-11.34Zm34,7.46a12.88,12.88,0,0,0-3.37-1.44c-1.25-.34-2.46-.63-3.63-.88l-3.08-.7a10.64,10.64,0,0,1-2.51-.86A4.54,4.54,0,0,1,240.87,28a3.61,3.61,0,0,1-.62-2.19,4.8,4.8,0,0,1,1.58-3.7c1.06-1,2.73-1.44,5-1.44a9.84,9.84,0,0,1,5.07,1.17,10.47,10.47,0,0,1,3.39,3.23l2.79-2.18A15.22,15.22,0,0,0,253.45,19a13.8,13.8,0,0,0-6.59-1.44,12.13,12.13,0,0,0-4.14.66A10.33,10.33,0,0,0,239.53,20a7.53,7.53,0,0,0-2.05,2.63,7.41,7.41,0,0,0-.72,3.24,6.7,6.7,0,0,0,.84,3.53,7.06,7.06,0,0,0,2.2,2.22A11.11,11.11,0,0,0,242.86,33c1.13.32,2.29.6,3.47.84l3.26.74a12.63,12.63,0,0,1,2.8,1,5.86,5.86,0,0,1,2,1.56,3.88,3.88,0,0,1,.74,2.42,5.2,5.2,0,0,1-1.81,4.09A7.83,7.83,0,0,1,248,45.2a11,11,0,0,1-9.89-5.38l-3,2.34a15.86,15.86,0,0,0,5.23,4.54,16.06,16.06,0,0,0,7.7,1.7,12.58,12.58,0,0,0,4.38-.72,10.14,10.14,0,0,0,3.3-2,8.79,8.79,0,0,0,2.1-2.85,8.09,8.09,0,0,0,.74-3.39,6.94,6.94,0,0,0-1-3.8,7.71,7.71,0,0,0-2.42-2.37Zm27.51-4.72a10.53,10.53,0,0,0-3.58-2.34,11.89,11.89,0,0,0-4.49-.84,11.6,11.6,0,0,0-4.62.9,11.35,11.35,0,0,0-3.66,2.46A11.84,11.84,0,0,0,263,37a12.21,12.21,0,0,0,.82,4.51,10.53,10.53,0,0,0,2.36,3.64,11.24,11.24,0,0,0,3.7,2.42,12.41,12.41,0,0,0,4.82.88A11.68,11.68,0,0,0,280.82,47,12.84,12.84,0,0,0,285,42.82l-2.88-1.69a7.85,7.85,0,0,1-7.43,4.27,9,9,0,0,1-3.22-.53,8.21,8.21,0,0,1-2.55-1.5,8,8,0,0,1-1.78-2.28,7.79,7.79,0,0,1-.87-2.91h19.59V36.66a11.75,11.75,0,0,0-.86-4.54,10.92,10.92,0,0,0-2.35-3.57ZM266.4,35.22a8.88,8.88,0,0,1,1-2.73,8.55,8.55,0,0,1,1.79-2.18,8,8,0,0,1,2.44-1.43,8.31,8.31,0,0,1,3-.52,7.45,7.45,0,0,1,7.84,6.86ZM308.82,28a8.11,8.11,0,0,0-3-2,10.89,10.89,0,0,0-3.92-.67,9.06,9.06,0,0,0-4.58,1.14,8.76,8.76,0,0,0-3.14,3V25.82h-3.29V48h3.37V35.67a7.92,7.92,0,0,1,.53-2.93,7,7,0,0,1,1.48-2.3,6.46,6.46,0,0,1,2.22-1.5,7,7,0,0,1,2.75-.54,6.33,6.33,0,0,1,5,1.93A7.46,7.46,0,0,1,308,35.51V48h3.41V35.34a12.46,12.46,0,0,0-.66-4.19A8.68,8.68,0,0,0,308.82,28Zm27-12.42v14.1a8.14,8.14,0,0,0-1.58-1.83,10.08,10.08,0,0,0-2-1.36,10.39,10.39,0,0,0-2.3-.84,10.22,10.22,0,0,0-2.4-.28,11.63,11.63,0,0,0-4.4.84,11.09,11.09,0,0,0-3.59,2.38,11.3,11.3,0,0,0-2.42,3.65,12.81,12.81,0,0,0,0,9.32,11.56,11.56,0,0,0,2.4,3.66,10.58,10.58,0,0,0,3.59,2.38,11.77,11.77,0,0,0,4.42.84,9.69,9.69,0,0,0,2.4-.31,11,11,0,0,0,2.3-.86,9.72,9.72,0,0,0,2-1.37,8.75,8.75,0,0,0,1.58-1.85v4h3.33V15.59Zm-.37,24.58a8.3,8.3,0,0,1-10.85,4.47h0a7.68,7.68,0,0,1-2.6-1.76,7.88,7.88,0,0,1-1.73-2.67,8.93,8.93,0,0,1-.62-3.35,8.67,8.67,0,0,1,.62-3.3A8,8,0,0,1,322,30.89a8.17,8.17,0,0,1,2.6-1.79,8.27,8.27,0,0,1,6.51,0,8.64,8.64,0,0,1,2.63,1.81,7.85,7.85,0,0,1,1.72,2.67,8.67,8.67,0,0,1,.62,3.26,8.86,8.86,0,0,1-.65,3.33Z" fill="currentColor"/>
|
||||
</symbol>
|
||||
<use xlink:href="#logo"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
|
@ -1,284 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="336px"
|
||||
height="210px"
|
||||
viewBox="0 0 336 210"
|
||||
version="1.1"
|
||||
id="svg117"
|
||||
sodipodi:docname="completed.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata121">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>CC310D7B-7EC7-4AEF-90E5-10044C2FA0F1</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1048"
|
||||
id="namedview119"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.4075302"
|
||||
inkscape:cx="148.92273"
|
||||
inkscape:cy="105.20232"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="firefox-send_illustrations-03" />
|
||||
<!-- Generator: sketchtool 53.1 (72631) - https://sketchapp.com -->
|
||||
<title
|
||||
id="title2">CC310D7B-7EC7-4AEF-90E5-10044C2FA0F1</title>
|
||||
<desc
|
||||
id="desc4">Created with sketchtool.</desc>
|
||||
<defs
|
||||
id="defs42">
|
||||
<linearGradient
|
||||
x1="-28.184294%"
|
||||
y1="-47.2118902%"
|
||||
x2="84.470028%"
|
||||
y2="96.7133243%"
|
||||
id="linearGradient-1">
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="0%"
|
||||
id="stop6" />
|
||||
<stop
|
||||
stop-color="#7878FF"
|
||||
offset="99.91%"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="20.1958296%"
|
||||
y1="50.3861311%"
|
||||
x2="169.064414%"
|
||||
y2="48.680104%"
|
||||
id="linearGradient-2">
|
||||
<stop
|
||||
stop-color="#FFF361"
|
||||
offset="0%"
|
||||
id="stop11" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop13" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="7.13940616%"
|
||||
y1="-13.3627152%"
|
||||
x2="84.3212705%"
|
||||
y2="120.017199%"
|
||||
id="linearGradient-3">
|
||||
<stop
|
||||
stop-color="#FF5162"
|
||||
offset="0%"
|
||||
id="stop16" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="100%"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="50.0466667%"
|
||||
y1="98.7466885%"
|
||||
x2="50.0466667%"
|
||||
y2="63.9770799%"
|
||||
id="linearGradient-4">
|
||||
<stop
|
||||
stop-color="#008787"
|
||||
offset="0.4302823%"
|
||||
id="stop21" />
|
||||
<stop
|
||||
stop-color="#005E5E"
|
||||
offset="99.91%"
|
||||
id="stop23" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="34.0866057%"
|
||||
y1="25.5581764%"
|
||||
x2="59.4765337%"
|
||||
y2="63.0992243%"
|
||||
id="linearGradient-5">
|
||||
<stop
|
||||
stop-color="#FFD943"
|
||||
offset="0%"
|
||||
id="stop26" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop28" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="21.6627829%"
|
||||
y1="-7.19090722%"
|
||||
x2="65.1350317%"
|
||||
y2="106.40324%"
|
||||
id="linearGradient-6">
|
||||
<stop
|
||||
stop-color="#FF8748"
|
||||
offset="0%"
|
||||
id="stop31" />
|
||||
<stop
|
||||
stop-color="#FE7852"
|
||||
offset="13.28%"
|
||||
id="stop33" />
|
||||
<stop
|
||||
stop-color="#FC546A"
|
||||
offset="50.49%"
|
||||
id="stop35" />
|
||||
<stop
|
||||
stop-color="#FA3D79"
|
||||
offset="80.73%"
|
||||
id="stop37" />
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="100%"
|
||||
id="stop39" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<g
|
||||
id="Send_Download-Completed"
|
||||
transform="translate(-552.000000, -339.000000)"
|
||||
fill-rule="nonzero">
|
||||
<g
|
||||
id="firefox-send_illustrations-03"
|
||||
transform="translate(552.000000, 339.000000)">
|
||||
<ellipse
|
||||
id="Oval"
|
||||
fill="#ededf0"
|
||||
opacity="0.5"
|
||||
cx="165.88687"
|
||||
cy="168.0954"
|
||||
rx="73.526253"
|
||||
ry="11.563125" />
|
||||
<g
|
||||
id="Group"
|
||||
transform="translate(0.000000, 39.375000)"
|
||||
fill="#EDEDF0"
|
||||
opacity="0.5">
|
||||
<g
|
||||
transform="translate(30.187500, 116.812500)"
|
||||
id="g55">
|
||||
<g
|
||||
transform="translate(21.000000, 5.250000)"
|
||||
id="Path">
|
||||
<path
|
||||
d="M1.575,3.255 L91.546875,3.255 C92.26875,3.255 92.859375,2.664375 92.859375,1.9425 C92.859375,1.220625 92.26875,0.63 91.546875,0.63 L1.575,0.63 C0.853125,0.63 0.2625,1.220625 0.2625,1.9425 C0.2625,2.664375 0.853125,3.255 1.575,3.255 Z"
|
||||
id="path45" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(76.125000, 0.000000)"
|
||||
id="g50">
|
||||
<path
|
||||
d="M1.693125,1.8375 L24.268125,1.8375 C24.635625,1.8375 24.924375,1.54875 24.924375,1.18125 C24.924375,0.81375 24.635625,0.525 24.268125,0.525 L1.693125,0.525 C1.325625,0.525 1.036875,0.81375 1.036875,1.18125 C1.036875,1.54875 1.325625,1.8375 1.693125,1.8375 Z"
|
||||
id="path48" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 11.812500)"
|
||||
id="Shape">
|
||||
<path
|
||||
d="M0.525,1.89 C0.525,1.5225 0.81375,1.23375 1.18125,1.23375 L5.11875,1.23375 C5.48625,1.23375 5.775,1.5225 5.775,1.89 C5.775,2.2575 5.48625,2.54625 5.11875,2.54625 L1.18125,2.54625 C0.81375,2.54625 0.525,2.2575 0.525,1.89 Z M14.9625,1.89 C14.9625,1.5225 15.25125,1.23375 15.61875,1.23375 L31.36875,1.23375 C31.73625,1.23375 32.025,1.5225 32.025,1.89 C32.025,2.2575 31.73625,2.54625 31.36875,2.54625 L15.61875,2.54625 C15.25125,2.54625 14.9625,2.2575 14.9625,1.89 Z M42.525,1.89 C42.525,1.5225 42.81375,1.23375 43.18125,1.23375 L44.49375,1.23375 C44.86125,1.23375 45.15,1.5225 45.15,1.89 C45.15,2.2575 44.86125,2.54625 44.49375,2.54625 L43.18125,2.54625 C42.81375,2.54625 42.525,2.2575 42.525,1.89 Z M49.0875,1.89 C49.0875,1.5225 49.37625,1.23375 49.74375,1.23375 L53.68125,1.23375 C54.04875,1.23375 54.3375,1.5225 54.3375,1.89 C54.3375,2.2575 54.04875,2.54625 53.68125,2.54625 L49.74375,2.54625 C49.37625,2.54625 49.0875,2.2575 49.0875,1.89 Z M63.525,1.89 C63.525,1.5225 63.81375,1.23375 64.18125,1.23375 L79.93125,1.23375 C80.29875,1.23375 80.5875,1.5225 80.5875,1.89 C80.5875,2.2575 80.29875,2.54625 79.93125,2.54625 L64.18125,2.54625 C63.81375,2.54625 63.525,2.2575 63.525,1.89 Z"
|
||||
id="path52" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(123.375000, 72.187500)"
|
||||
id="g69">
|
||||
<g
|
||||
transform="translate(26.250000, 5.250000)"
|
||||
id="g59">
|
||||
<path
|
||||
d="M1.771875,3.163125 L147.039375,3.163125 C147.76125,3.163125 148.351875,2.5725 148.351875,1.850625 C148.351875,1.12875 147.76125,0.538125 147.039375,0.538125 L1.771875,0.538125 C1.05,0.538125 0.459375,1.12875 0.459375,1.850625 C0.459375,2.5725 1.05,3.163125 1.771875,3.163125 Z"
|
||||
id="path57" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(45.937500, 0.000000)"
|
||||
id="g63">
|
||||
<path
|
||||
d="M1.70625,1.850625 L38.14125,1.850625 C38.50875,1.850625 38.7975,1.561875 38.7975,1.194375 C38.7975,0.826875 38.50875,0.538125 38.14125,0.538125 L1.70625,0.538125 C1.33875,0.538125 1.05,0.826875 1.05,1.194375 C1.05,1.561875 1.351875,1.850625 1.70625,1.850625 Z"
|
||||
id="path61" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 11.812500)"
|
||||
id="g67">
|
||||
<path
|
||||
d="M1.2075,1.666875 C1.2075,1.299375 1.49625,1.010625 1.86375,1.010625 L17.61375,1.010625 C17.98125,1.010625 18.27,1.299375 18.27,1.666875 C18.27,2.034375 17.98125,2.323125 17.61375,2.323125 L1.86375,2.323125 C1.49625,2.323125 1.2075,2.034375 1.2075,1.666875 Z M27.4575,1.666875 C27.4575,1.299375 27.74625,1.010625 28.11375,1.010625 L32.05125,1.010625 C32.41875,1.010625 32.7075,1.299375 32.7075,1.666875 C32.7075,2.034375 32.41875,2.323125 32.05125,2.323125 L28.11375,2.323125 C27.74625,2.323125 27.4575,2.034375 27.4575,1.666875 Z M36.645,1.666875 C36.645,1.299375 36.93375,1.010625 37.30125,1.010625 L38.61375,1.010625 C38.98125,1.010625 39.27,1.299375 39.27,1.666875 C39.27,2.034375 38.98125,2.323125 38.61375,2.323125 L37.30125,2.323125 C36.93375,2.323125 36.645,2.034375 36.645,1.666875 Z M49.77,1.666875 C49.77,1.299375 50.05875,1.010625 50.42625,1.010625 L66.17625,1.010625 C66.54375,1.010625 66.8325,1.299375 66.8325,1.666875 C66.8325,2.034375 66.54375,2.323125 66.17625,2.323125 L50.42625,2.323125 C50.05875,2.323125 49.77,2.034375 49.77,1.666875 Z M76.02,1.666875 C76.02,1.299375 76.30875,1.010625 76.67625,1.010625 L80.61375,1.010625 C80.98125,1.010625 81.27,1.299375 81.27,1.666875 C81.27,2.034375 80.98125,2.323125 80.61375,2.323125 L76.67625,2.323125 C76.30875,2.323125 76.02,2.034375 76.02,1.666875 Z M85.2075,1.666875 C85.2075,1.299375 85.49625,1.010625 85.86375,1.010625 L87.17625,1.010625 C87.54375,1.010625 87.8325,1.299375 87.8325,1.666875 C87.8325,2.034375 87.54375,2.323125 87.17625,2.323125 L85.86375,2.323125 C85.49625,2.323125 85.2075,2.034375 85.2075,1.666875 Z M98.3325,1.666875 C98.3325,1.299375 98.62125,1.010625 98.98875,1.010625 L114.73875,1.010625 C115.10625,1.010625 115.395,1.299375 115.395,1.666875 C115.395,2.034375 115.10625,2.323125 114.73875,2.323125 L98.98875,2.323125 C98.62125,2.323125 98.3325,2.034375 98.3325,1.666875 Z M124.5825,1.666875 C124.5825,1.299375 124.87125,1.010625 125.23875,1.010625 L129.17625,1.010625 C129.54375,1.010625 129.8325,1.299375 129.8325,1.666875 C129.8325,2.034375 129.54375,2.323125 129.17625,2.323125 L125.23875,2.323125 C124.87125,2.323125 124.5825,2.034375 124.5825,1.666875 Z M133.77,1.666875 C133.77,1.299375 134.05875,1.010625 134.42625,1.010625 L135.73875,1.010625 C136.10625,1.010625 136.395,1.299375 136.395,1.666875 C136.395,2.034375 136.10625,2.323125 135.73875,2.323125 L134.42625,2.323125 C134.05875,2.323125 133.77,2.034375 133.77,1.666875 Z M146.895,1.666875 C146.895,1.299375 147.18375,1.010625 147.55125,1.010625 L163.30125,1.010625 C163.66875,1.010625 163.9575,1.299375 163.9575,1.666875 C163.9575,2.034375 163.66875,2.323125 163.30125,2.323125 L147.55125,2.323125 C147.18375,2.323125 146.895,2.034375 146.895,1.666875 Z M173.145,1.666875 C173.145,1.299375 173.43375,1.010625 173.80125,1.010625 L177.73875,1.010625 C178.10625,1.010625 178.395,1.299375 178.395,1.666875 C178.395,2.034375 178.10625,2.323125 177.73875,2.323125 L173.80125,2.323125 C173.43375,2.323125 173.145,2.034375 173.145,1.666875 Z M182.3325,1.666875 C182.3325,1.299375 182.62125,1.010625 182.98875,1.010625 L184.30125,1.010625 C184.66875,1.010625 184.9575,1.299375 184.9575,1.666875 C184.9575,2.034375 184.66875,2.323125 184.30125,2.323125 L182.98875,2.323125 C182.62125,2.323125 182.3325,2.034375 182.3325,1.666875 Z M195.4575,1.666875 C195.4575,1.299375 195.74625,1.010625 196.11375,1.010625 L211.86375,1.010625 C212.23125,1.010625 212.52,1.299375 212.52,1.666875 C212.52,2.034375 212.23125,2.323125 211.86375,2.323125 L196.11375,2.323125 C195.74625,2.323125 195.4575,2.034375 195.4575,1.666875 Z"
|
||||
id="path65" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g81">
|
||||
<path
|
||||
d="M2.139375,33.2325 L35.503125,33.2325 C35.503125,33.2325 25.06875,9.89625 47.22375,6.8775 C66.99,4.186875 74.799375,24.504375 74.799375,24.504375 C74.799375,24.504375 77.14875,12.78375 88.895625,15.028125 C100.485,17.233125 109.0425,35.88375 109.0425,35.88375 L138.10125,35.88375"
|
||||
id="path71" />
|
||||
<g
|
||||
transform="translate(1.312500, 0.000000)"
|
||||
id="g75">
|
||||
<path
|
||||
d="M137.36625,30.37125 L128.7825,30.37125 C128.349375,30.37125 128.008125,30.03 128.008125,29.596875 C128.008125,29.16375 128.349375,28.8225 128.7825,28.8225 L137.36625,28.8225 C137.799375,28.8225 138.140625,29.16375 138.140625,29.596875 C138.140625,30.03 137.799375,30.37125 137.36625,30.37125 Z M114.883125,30.37125 L113.334375,30.37125 C112.90125,30.37125 112.56,30.03 112.56,29.596875 C112.56,29.16375 112.90125,28.8225 113.334375,28.8225 L114.883125,28.8225 C115.31625,28.8225 115.6575,29.16375 115.6575,29.596875 C115.6575,30.03 115.303125,30.37125 114.883125,30.37125 Z M34.755,29.439375 L32.274375,29.439375 C31.84125,29.439375 31.5,29.098125 31.5,28.665 C31.5,28.231875 31.84125,27.890625 32.274375,27.890625 L33.613125,27.890625 C33.508125,27.615 33.39,27.27375 33.25875,26.893125 C33.1275,26.48625 33.3375,26.053125 33.744375,25.90875 C34.15125,25.7775 34.584375,25.9875 34.72875,26.394375 C35.135625,27.58875 35.46375,28.32375 35.46375,28.336875 C35.56875,28.573125 35.5425,28.84875 35.41125,29.071875 C35.266875,29.308125 35.0175,29.439375 34.755,29.439375 Z M19.92375,29.439375 L1.39125,29.439375 C0.958125,29.439375 0.616875,29.098125 0.616875,28.665 C0.616875,28.231875 0.958125,27.890625 1.39125,27.890625 L19.92375,27.890625 C20.356875,27.890625 20.698125,28.231875 20.698125,28.665 C20.698125,29.098125 20.34375,29.439375 19.92375,29.439375 Z M107.769375,29.360625 C107.49375,29.360625 107.23125,29.21625 107.1,28.966875 C106.60125,28.0875 105.7875,26.69625 104.698125,25.06875 C104.461875,24.714375 104.55375,24.22875 104.908125,23.9925 C105.2625,23.75625 105.748125,23.848125 105.984375,24.2025 C107.1,25.869375 107.94,27.3 108.451875,28.205625 C108.661875,28.573125 108.530625,29.045625 108.15,29.255625 C108.01875,29.32125 107.8875,29.360625 107.769375,29.360625 Z M32.55,21.42 C32.169375,21.42 31.84125,21.144375 31.78875,20.750625 C31.71,20.23875 31.6575,19.700625 31.618125,19.1625 C31.57875,18.7425 31.906875,18.361875 32.326875,18.335625 C32.773125,18.309375 33.1275,18.61125 33.15375,19.044375 C33.193125,19.55625 33.245625,20.055 33.324375,20.540625 C33.39,20.960625 33.088125,21.354375 32.668125,21.406875 C32.62875,21.42 32.589375,21.42 32.55,21.42 Z M72.778125,18.020625 C72.5025,18.020625 72.24,17.87625 72.095625,17.61375 C71.8725,17.206875 71.623125,16.760625 71.3475,16.30125 C71.124375,15.93375 71.2425,15.46125 71.61,15.238125 C71.9775,15.015 72.45,15.133125 72.673125,15.500625 C72.961875,15.98625 73.224375,16.445625 73.460625,16.87875 C73.6575,17.259375 73.52625,17.71875 73.145625,17.92875 C73.0275,17.994375 72.89625,18.020625 72.778125,18.020625 Z M97.295625,16.051875 C97.111875,16.051875 96.94125,15.98625 96.796875,15.868125 C93.84375,13.335 90.90375,11.773125 88.029375,11.221875 C85.2075,10.68375 82.71375,10.959375 80.64,12.0225 C80.259375,12.219375 79.8,12.061875 79.603125,11.694375 C79.40625,11.31375 79.550625,10.854375 79.93125,10.6575 C82.306875,9.42375 85.155,9.10875 88.318125,9.7125 C91.455,10.31625 94.644375,11.983125 97.8075,14.7 C98.135625,14.975625 98.161875,15.46125 97.88625,15.789375 C97.715625,15.96 97.505625,16.051875 97.295625,16.051875 Z M68.394375,11.668125 C68.184375,11.668125 67.96125,11.57625 67.816875,11.405625 C66.80625,10.2375 65.716875,9.174375 64.60125,8.2425 C64.273125,7.966875 64.23375,7.48125 64.509375,7.153125 C64.785,6.825 65.270625,6.785625 65.59875,7.06125 C66.78,8.045625 67.921875,9.174375 68.985,10.395 C69.260625,10.723125 69.234375,11.20875 68.90625,11.484375 C68.74875,11.6025 68.565,11.668125 68.394375,11.668125 Z M36.553125,7.16625 C36.343125,7.16625 36.133125,7.074375 35.975625,6.916875 C35.686875,6.601875 35.713125,6.11625 36.028125,5.8275 C38.495625,3.59625 41.97375,2.1525 46.370625,1.561875 C49.06125,1.194375 51.699375,1.23375 54.193125,1.666875 C54.613125,1.745625 54.88875,2.139375 54.823125,2.559375 C54.744375,2.979375 54.350625,3.268125 53.930625,3.189375 C51.594375,2.7825 49.11375,2.75625 46.580625,3.0975 C42.49875,3.661875 39.29625,4.96125 37.065,6.9825 C36.920625,7.100625 36.736875,7.16625 36.553125,7.16625 Z"
|
||||
id="path73" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 32.812500)"
|
||||
id="g79">
|
||||
<path
|
||||
d="M139.636875,3.49125 L2.12625,3.49125 C1.273125,3.49125 0.5775,2.795625 0.5775,1.9425 C0.5775,1.089375 1.273125,0.39375 2.12625,0.39375 L139.636875,0.39375 C140.49,0.39375 141.185625,1.089375 141.185625,1.9425 C141.185625,2.795625 140.49,3.49125 139.636875,3.49125 Z"
|
||||
id="path77" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(217.875000, 1.312500)"
|
||||
id="g93">
|
||||
<path
|
||||
d="M2.034375,19.359375 L20.65875,19.359375 C20.65875,19.359375 14.83125,6.339375 27.195,4.659375 C38.22,3.163125 42.590625,14.49 42.590625,14.49 C42.590625,14.49 43.903125,7.95375 50.465625,9.200625 C56.93625,10.434375 61.71375,20.8425 61.71375,20.8425 L77.923125,20.8425"
|
||||
id="path83" />
|
||||
<g
|
||||
transform="translate(1.312500, 0.000000)"
|
||||
id="g87">
|
||||
<path
|
||||
d="M19.884375,17.2725 L1.28625,17.2725 C0.853125,17.2725 0.511875,16.93125 0.511875,16.498125 C0.511875,16.065 0.853125,15.72375 1.28625,15.72375 L19.884375,15.72375 C20.3175,15.72375 20.65875,16.065 20.65875,16.498125 C20.65875,16.93125 20.3175,17.2725 19.884375,17.2725 Z M77.175,17.023125 L76.453125,17.023125 C76.02,17.023125 75.67875,16.681875 75.67875,16.24875 C75.67875,15.815625 76.02,15.474375 76.453125,15.474375 L77.175,15.474375 C77.608125,15.474375 77.949375,15.815625 77.949375,16.24875 C77.949375,16.681875 77.608125,17.023125 77.175,17.023125 Z M70.258125,17.023125 L65.611875,17.023125 C65.17875,17.023125 64.8375,16.681875 64.8375,16.24875 C64.8375,15.815625 65.17875,15.474375 65.611875,15.474375 L70.258125,15.474375 C70.69125,15.474375 71.0325,15.815625 71.0325,16.24875 C71.0325,16.681875 70.69125,17.023125 70.258125,17.023125 Z M41.855625,12.39 C41.540625,12.39 41.251875,12.18 41.13375,11.89125 L41.015625,11.615625 C40.858125,11.26125 40.989375,10.84125 41.3175,10.644375 C42.039375,8.47875 44.07375,5.394375 48.129375,5.394375 C48.680625,5.394375 49.27125,5.446875 49.875,5.565 C52.185,5.998125 54.508125,7.35 56.791875,9.555 C57.09375,9.856875 57.106875,10.3425 56.805,10.644375 C56.503125,10.959375 56.0175,10.959375 55.715625,10.6575 C53.655,8.6625 51.594375,7.455 49.58625,7.074375 C49.074375,6.9825 48.58875,6.93 48.129375,6.93 C43.666875,6.93 42.65625,11.563125 42.616875,11.76 C42.538125,12.140625 42.223125,12.39 41.855625,12.39 Z M20.29125,5.473125 C20.1075,5.473125 19.936875,5.4075 19.7925,5.289375 C19.464375,5.01375 19.425,4.528125 19.700625,4.2 C20.724375,2.9925 22.155,2.1 23.953125,1.535625 C24.36,1.404375 24.793125,1.640625 24.924375,2.0475 C25.055625,2.454375 24.819375,2.8875 24.4125,3.01875 C22.903125,3.49125 21.721875,4.22625 20.881875,5.1975 C20.7375,5.38125 20.514375,5.473125 20.29125,5.473125 Z M31.828125,2.874375 C31.7625,2.874375 31.696875,2.86125 31.618125,2.848125 C31.15875,2.73 30.68625,2.625 30.200625,2.559375 C29.780625,2.49375 29.47875,2.1 29.544375,1.68 C29.61,1.26 30.00375,0.984375 30.42375,1.02375 C30.975,1.1025 31.513125,1.220625 32.025,1.351875 C32.431875,1.47 32.68125,1.89 32.57625,2.296875 C32.484375,2.638125 32.169375,2.874375 31.828125,2.874375 Z"
|
||||
id="path85" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 18.375000)"
|
||||
id="g91">
|
||||
<path
|
||||
d="M79.1175,4.095 L2.375625,4.095 C1.5225,4.095 0.826875,3.399375 0.826875,2.54625 C0.826875,1.693125 1.5225,0.9975 2.375625,0.9975 L79.1175,0.9975 C79.970625,0.9975 80.66625,1.693125 80.66625,2.54625 C80.66625,3.399375 79.970625,4.095 79.1175,4.095 Z"
|
||||
id="path89" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="cloud-check"
|
||||
d="m 240.12048,110.31165 a 39.582604,39.582604 0 0 1 -10.23938,26.55813 33.935974,33.935974 0 0 1 -20.28366,10.27635 39.949372,39.949372 0 0 0 0.80301,-16.48404 16.944722,16.944722 0 0 0 7.65405,-4.47239 23.665469,23.665469 0 0 0 6.1311,-15.87805 26.589359,26.589359 0 0 0 -26.55812,-26.558123 c -0.87568,0 -5.3742,0.56186 -8.11085,0.91445 a 2.6398778,2.6398778 0 0 1 -2.83769,-1.77451 l -1.08155,-3.155106 A 32.772357,32.772357 0 0 0 158.37085,57.356128 31.757517,31.757517 0 0 0 124.14114,96.347867 l 1.13419,4.851433 a 2.6558127,2.6558127 0 0 1 -1.8179,3.14687 l -4.77313,1.44232 a 15.788381,15.788381 0 0 0 -11.35445,15.14642 10.699791,10.699791 0 0 0 2.19933,6.52543 12.871343,12.871343 0 0 0 9.50281,4.09782 h 7.25749 a 40.137987,40.137987 0 0 0 1.02966,15.93487 h -8.28715 A 28.433555,28.433555 0 0 1 96.535402,136.68302 26.739094,26.739094 0 0 1 91.39497,120.93491 31.54075,31.54075 0 0 1 107.53217,93.318597 c -0.13492,-1.42644 -0.20238,-2.84772 -0.20238,-4.25345 a 47.786197,47.786197 0 0 1 90.59848,-21.246498 42.542454,42.542454 0 0 1 42.19216,42.493001 z m -39.83719,26.55813 a 31.869752,31.869752 0 1 1 -31.86975,-31.86975 31.869752,31.869752 0 0 1 31.86975,31.86975 z m -15.15067,-11.86394 -2.71673,-2.01199 a 1.5763311,1.5763311 0 0 0 -2.00127,0.14182 l -16.73162,15.72576 -9.38033,-4.48657 a 1.7144864,1.7144864 0 0 0 -2.00221,0.5062 l -2.30275,2.94497 a 1.576756,1.576756 0 0 0 0.14182,2.00158 l 11.86234,11.8768 a 4.410933,4.410933 0 0 0 6.89242,-0.53116 l 16.51629,-24.2992 a 1.346922,1.346922 0 0 0 -0.27833,-1.86831 z"
|
||||
style="fill:#45a1ff;fill-opacity:1;stroke-width:5.31163" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 22 KiB |
|
@ -1,284 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="356px"
|
||||
height="210px"
|
||||
viewBox="0 0 356 210"
|
||||
version="1.1"
|
||||
id="svg114"
|
||||
sodipodi:docname="error.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata118">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>5A8EEB55-E89B-49C5-8493-6FC78CEDF580</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1606"
|
||||
inkscape:window-height="1038"
|
||||
id="namedview116"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.298097"
|
||||
inkscape:cx="165.36624"
|
||||
inkscape:cy="104.49445"
|
||||
inkscape:window-x="1924"
|
||||
inkscape:window-y="36"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="firefox-send_illustrations-02" />
|
||||
<!-- Generator: sketchtool 53.1 (72631) - https://sketchapp.com -->
|
||||
<title
|
||||
id="title2">5A8EEB55-E89B-49C5-8493-6FC78CEDF580</title>
|
||||
<desc
|
||||
id="desc4">Created with sketchtool.</desc>
|
||||
<defs
|
||||
id="defs42">
|
||||
<linearGradient
|
||||
x1="58.3126473%"
|
||||
y1="123.961053%"
|
||||
x2="40.1375665%"
|
||||
y2="-37.2724424%"
|
||||
id="linearGradient-1">
|
||||
<stop
|
||||
stop-color="#0A5CC7"
|
||||
offset="0.4302823%"
|
||||
id="stop6" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="99.91%"
|
||||
id="stop8" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="-28.1745341%"
|
||||
y1="-47.2105072%"
|
||||
x2="84.4799145%"
|
||||
y2="96.7146446%"
|
||||
id="linearGradient-2">
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="0%"
|
||||
id="stop11" />
|
||||
<stop
|
||||
stop-color="#7878FF"
|
||||
offset="99.91%"
|
||||
id="stop13" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="20.1896063%"
|
||||
y1="50.397188%"
|
||||
x2="169.058059%"
|
||||
y2="48.6911625%"
|
||||
id="linearGradient-3">
|
||||
<stop
|
||||
stop-color="#FFF361"
|
||||
offset="0%"
|
||||
id="stop16" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop18" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="7.14778295%"
|
||||
y1="-13.3614253%"
|
||||
x2="84.3296473%"
|
||||
y2="120.018489%"
|
||||
id="linearGradient-4">
|
||||
<stop
|
||||
stop-color="#FF5162"
|
||||
offset="0%"
|
||||
id="stop21" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="100%"
|
||||
id="stop23" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="34.0837535%"
|
||||
y1="25.5596147%"
|
||||
x2="59.4736431%"
|
||||
y2="63.1005055%"
|
||||
id="linearGradient-5">
|
||||
<stop
|
||||
stop-color="#FFD943"
|
||||
offset="0%"
|
||||
id="stop26" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop28" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="21.6679292%"
|
||||
y1="-7.19688832%"
|
||||
x2="65.140178%"
|
||||
y2="106.397259%"
|
||||
id="linearGradient-6">
|
||||
<stop
|
||||
stop-color="#FF8748"
|
||||
offset="0%"
|
||||
id="stop31" />
|
||||
<stop
|
||||
stop-color="#FE7852"
|
||||
offset="13.28%"
|
||||
id="stop33" />
|
||||
<stop
|
||||
stop-color="#FC546A"
|
||||
offset="50.49%"
|
||||
id="stop35" />
|
||||
<stop
|
||||
stop-color="#FA3D79"
|
||||
offset="80.73%"
|
||||
id="stop37" />
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="100%"
|
||||
id="stop39" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<g
|
||||
id="Send_Went_Wrong"
|
||||
transform="translate(-542.000000, -304.000000)"
|
||||
fill-rule="nonzero">
|
||||
<g
|
||||
id="firefox-send_illustrations-02"
|
||||
transform="translate(541.986755, 304.000000)">
|
||||
<g
|
||||
id="Group"
|
||||
transform="translate(0.000000, 41.721854)"
|
||||
fill="#EDEDF0"
|
||||
opacity="0.5">
|
||||
<g
|
||||
transform="translate(31.986755, 123.774834)"
|
||||
id="g54">
|
||||
<g
|
||||
transform="translate(22.251656, 5.562914)"
|
||||
id="Path">
|
||||
<path
|
||||
d="M1.71059603,3.36556291 L97.0450331,3.36556291 C97.8099338,3.36556291 98.4357616,2.7397351 98.4357616,1.97483444 C98.4357616,1.20993377 97.8099338,0.58410596 97.0450331,0.58410596 L1.71059603,0.58410596 C0.945695364,0.58410596 0.31986755,1.20993377 0.31986755,1.97483444 C0.31986755,2.7397351 0.945695364,3.36556291 1.71059603,3.36556291 Z"
|
||||
id="path44" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(80.662252, 0.000000)"
|
||||
id="g49">
|
||||
<path
|
||||
d="M1.84966887,1.86357616 L25.7701987,1.86357616 C26.1596026,1.86357616 26.4655629,1.55761589 26.4655629,1.16821192 C26.4655629,0.778807947 26.1596026,0.472847682 25.7701987,0.472847682 L1.84966887,0.472847682 C1.4602649,0.472847682 1.15430464,0.778807947 1.15430464,1.16821192 C1.15430464,1.55761589 1.4602649,1.86357616 1.84966887,1.86357616 Z"
|
||||
id="path47" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 12.516556)"
|
||||
id="Shape">
|
||||
<path
|
||||
d="M0.598013245,1.9192053 C0.598013245,1.52980132 0.90397351,1.22384106 1.29337748,1.22384106 L5.46556291,1.22384106 C5.85496689,1.22384106 6.16092715,1.52980132 6.16092715,1.9192053 C6.16092715,2.30860927 5.85496689,2.61456954 5.46556291,2.61456954 L1.29337748,2.61456954 C0.917880795,2.61456954 0.598013245,2.29470199 0.598013245,1.9192053 Z M15.8960265,1.9192053 C15.8960265,1.52980132 16.2019868,1.22384106 16.5913907,1.22384106 L33.2801325,1.22384106 C33.6695364,1.22384106 33.9754967,1.52980132 33.9754967,1.9192053 C33.9754967,2.30860927 33.6695364,2.61456954 33.2801325,2.61456954 L16.5913907,2.61456954 C16.215894,2.61456954 15.8960265,2.29470199 15.8960265,1.9192053 Z M45.1013245,1.9192053 C45.1013245,1.52980132 45.4072848,1.22384106 45.7966887,1.22384106 L47.1874172,1.22384106 C47.5768212,1.22384106 47.8827815,1.52980132 47.8827815,1.9192053 C47.8827815,2.30860927 47.5768212,2.61456954 47.1874172,2.61456954 L45.7966887,2.61456954 C45.4211921,2.61456954 45.1013245,2.29470199 45.1013245,1.9192053 Z M52.0549669,1.9192053 C52.0549669,1.52980132 52.3609272,1.22384106 52.7503311,1.22384106 L56.9225166,1.22384106 C57.3119205,1.22384106 57.6178808,1.52980132 57.6178808,1.9192053 C57.6178808,2.30860927 57.3119205,2.61456954 56.9225166,2.61456954 L52.7503311,2.61456954 C52.3748344,2.61456954 52.0549669,2.29470199 52.0549669,1.9192053 Z M67.3529801,1.9192053 C67.3529801,1.52980132 67.6589404,1.22384106 68.0483444,1.22384106 L84.7370861,1.22384106 C85.1264901,1.22384106 85.4324503,1.52980132 85.4324503,1.9192053 C85.4324503,2.30860927 85.1264901,2.61456954 84.7370861,2.61456954 L68.0483444,2.61456954 C67.6728477,2.61456954 67.3529801,2.29470199 67.3529801,1.9192053 Z"
|
||||
id="path51" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(130.728477, 76.490066)"
|
||||
id="g68">
|
||||
<g
|
||||
transform="translate(27.814570, 5.562914)"
|
||||
id="g58">
|
||||
<path
|
||||
d="M1.93311258,3.25430464 L155.85894,3.25430464 C156.623841,3.25430464 157.249669,2.62847682 157.249669,1.86357616 C157.249669,1.0986755 156.623841,0.472847682 155.85894,0.472847682 L1.93311258,0.472847682 C1.16821192,0.472847682 0.542384106,1.0986755 0.542384106,1.86357616 C0.542384106,2.62847682 1.15430464,3.25430464 1.93311258,3.25430464 Z"
|
||||
id="path56" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(48.675497, 0.000000)"
|
||||
id="g62">
|
||||
<path
|
||||
d="M1.86357616,1.86357616 L40.4701987,1.86357616 C40.8596026,1.86357616 41.1655629,1.55761589 41.1655629,1.16821192 C41.1655629,0.778807947 40.8596026,0.472847682 40.4701987,0.472847682 L1.86357616,0.472847682 C1.47417219,0.472847682 1.16821192,0.778807947 1.16821192,1.16821192 C1.16821192,1.55761589 1.47417219,1.86357616 1.86357616,1.86357616 Z"
|
||||
id="path60" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 12.516556)"
|
||||
id="g66">
|
||||
<path
|
||||
d="M1.32119205,1.68278146 C1.32119205,1.29337748 1.62715232,0.987417219 2.01655629,0.987417219 L18.705298,0.987417219 C19.094702,0.987417219 19.4006623,1.29337748 19.4006623,1.68278146 C19.4006623,2.07218543 19.094702,2.3781457 18.705298,2.3781457 L2.01655629,2.3781457 C1.6410596,2.3781457 1.32119205,2.07218543 1.32119205,1.68278146 Z M29.1357616,1.68278146 C29.1357616,1.29337748 29.4417219,0.987417219 29.8311258,0.987417219 L34.0033113,0.987417219 C34.3927152,0.987417219 34.6986755,1.29337748 34.6986755,1.68278146 C34.6986755,2.07218543 34.3927152,2.3781457 34.0033113,2.3781457 L29.8311258,2.3781457 C29.4556291,2.3781457 29.1357616,2.07218543 29.1357616,1.68278146 Z M38.8708609,1.68278146 C38.8708609,1.29337748 39.1768212,0.987417219 39.5662252,0.987417219 L40.9569536,0.987417219 C41.3463576,0.987417219 41.6523179,1.29337748 41.6523179,1.68278146 C41.6523179,2.07218543 41.3463576,2.3781457 40.9569536,2.3781457 L39.5662252,2.3781457 C39.1907285,2.3781457 38.8708609,2.07218543 38.8708609,1.68278146 Z M52.7781457,1.68278146 C52.7781457,1.29337748 53.084106,0.987417219 53.4735099,0.987417219 L70.1622517,0.987417219 C70.5516556,0.987417219 70.8576159,1.29337748 70.8576159,1.68278146 C70.8576159,2.07218543 70.5516556,2.3781457 70.1622517,2.3781457 L53.4735099,2.3781457 C53.0980132,2.3781457 52.7781457,2.07218543 52.7781457,1.68278146 Z M80.5927152,1.68278146 C80.5927152,1.29337748 80.8986755,0.987417219 81.2880795,0.987417219 L85.4602649,0.987417219 C85.8496689,0.987417219 86.1556291,1.29337748 86.1556291,1.68278146 C86.1556291,2.07218543 85.8496689,2.3781457 85.4602649,2.3781457 L81.2880795,2.3781457 C80.9125828,2.3781457 80.5927152,2.07218543 80.5927152,1.68278146 Z M90.3278146,1.68278146 C90.3278146,1.29337748 90.6337748,0.987417219 91.0231788,0.987417219 L92.4139073,0.987417219 C92.8033113,0.987417219 93.1092715,1.29337748 93.1092715,1.68278146 C93.1092715,2.07218543 92.8033113,2.3781457 92.4139073,2.3781457 L91.0231788,2.3781457 C90.6476821,2.3781457 90.3278146,2.07218543 90.3278146,1.68278146 Z M104.235099,1.68278146 C104.235099,1.29337748 104.54106,0.987417219 104.930464,0.987417219 L121.619205,0.987417219 C122.008609,0.987417219 122.31457,1.29337748 122.31457,1.68278146 C122.31457,2.07218543 122.008609,2.3781457 121.619205,2.3781457 L104.930464,2.3781457 C104.554967,2.3781457 104.235099,2.07218543 104.235099,1.68278146 Z M132.049669,1.68278146 C132.049669,1.29337748 132.355629,0.987417219 132.745033,0.987417219 L136.917219,0.987417219 C137.306623,0.987417219 137.612583,1.29337748 137.612583,1.68278146 C137.612583,2.07218543 137.306623,2.3781457 136.917219,2.3781457 L132.745033,2.3781457 C132.369536,2.3781457 132.049669,2.07218543 132.049669,1.68278146 Z M141.784768,1.68278146 C141.784768,1.29337748 142.090728,0.987417219 142.480132,0.987417219 L143.870861,0.987417219 C144.260265,0.987417219 144.566225,1.29337748 144.566225,1.68278146 C144.566225,2.07218543 144.260265,2.3781457 143.870861,2.3781457 L142.480132,2.3781457 C142.104636,2.3781457 141.784768,2.07218543 141.784768,1.68278146 Z M155.692053,1.68278146 C155.692053,1.29337748 155.998013,0.987417219 156.387417,0.987417219 L173.076159,0.987417219 C173.465563,0.987417219 173.771523,1.29337748 173.771523,1.68278146 C173.771523,2.07218543 173.465563,2.3781457 173.076159,2.3781457 L156.387417,2.3781457 C156.011921,2.3781457 155.692053,2.07218543 155.692053,1.68278146 Z M183.506623,1.68278146 C183.506623,1.29337748 183.812583,0.987417219 184.201987,0.987417219 L188.374172,0.987417219 C188.763576,0.987417219 189.069536,1.29337748 189.069536,1.68278146 C189.069536,2.07218543 188.763576,2.3781457 188.374172,2.3781457 L184.201987,2.3781457 C183.82649,2.3781457 183.506623,2.07218543 183.506623,1.68278146 Z M193.241722,1.68278146 C193.241722,1.29337748 193.547682,0.987417219 193.937086,0.987417219 L195.327815,0.987417219 C195.717219,0.987417219 196.023179,1.29337748 196.023179,1.68278146 C196.023179,2.07218543 195.717219,2.3781457 195.327815,2.3781457 L193.937086,2.3781457 C193.561589,2.3781457 193.241722,2.07218543 193.241722,1.68278146 Z M207.149007,1.68278146 C207.149007,1.29337748 207.454967,0.987417219 207.844371,0.987417219 L224.533113,0.987417219 C224.922517,0.987417219 225.228477,1.29337748 225.228477,1.68278146 C225.228477,2.07218543 224.922517,2.3781457 224.533113,2.3781457 L207.844371,2.3781457 C207.468874,2.3781457 207.149007,2.07218543 207.149007,1.68278146 Z"
|
||||
id="path64" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g80">
|
||||
<path
|
||||
d="M2.30860927,35.1298013 L37.6609272,35.1298013 C37.6609272,35.1298013 26.6046358,10.402649 50.0801325,7.20397351 C71.0245033,4.35298013 79.2993377,25.881457 79.2993377,25.881457 C79.2993377,25.881457 81.7887417,13.4622517 94.2357616,15.8403974 C106.515894,18.1768212 115.583444,37.9390728 115.583444,37.9390728 L146.374172,37.9390728"
|
||||
id="path70" />
|
||||
<g
|
||||
transform="translate(1.390728, 0.000000)"
|
||||
id="g74">
|
||||
<path
|
||||
d="M145.609272,32.0980132 L136.513907,32.0980132 C136.054967,32.0980132 135.693377,31.7364238 135.693377,31.2774834 C135.693377,30.818543 136.054967,30.4569536 136.513907,30.4569536 L145.609272,30.4569536 C146.068212,30.4569536 146.429801,30.818543 146.429801,31.2774834 C146.429801,31.7364238 146.054305,32.0980132 145.609272,32.0980132 Z M121.772185,32.0980132 L120.131126,32.0980132 C119.672185,32.0980132 119.310596,31.7364238 119.310596,31.2774834 C119.310596,30.818543 119.672185,30.4569536 120.131126,30.4569536 L121.772185,30.4569536 C122.231126,30.4569536 122.592715,30.818543 122.592715,31.2774834 C122.592715,31.7364238 122.231126,32.0980132 121.772185,32.0980132 Z M36.8821192,31.110596 L34.2536424,31.110596 C33.794702,31.110596 33.4331126,30.7490066 33.4331126,30.2900662 C33.4331126,29.8311258 33.794702,29.4695364 34.2536424,29.4695364 L35.6721854,29.4695364 C35.5609272,29.1774834 35.4357616,28.815894 35.2966887,28.4125828 C35.1576159,27.981457 35.3801325,27.5225166 35.8112583,27.3695364 C36.2423841,27.2304636 36.7013245,27.4529801 36.8543046,27.884106 C37.2854305,29.1496689 37.6331126,29.9284768 37.6331126,29.9423841 C37.7443709,30.1927152 37.7165563,30.4847682 37.5774834,30.7211921 C37.410596,30.9715232 37.1602649,31.110596 36.8821192,31.110596 Z M21.1529801,31.110596 L1.52980132,31.110596 C1.07086093,31.110596 0.709271523,30.7490066 0.709271523,30.2900662 C0.709271523,29.8311258 1.07086093,29.4695364 1.52980132,29.4695364 L21.1668874,29.4695364 C21.6258278,29.4695364 21.9874172,29.8311258 21.9874172,30.2900662 C21.9735099,30.7350993 21.6119205,31.110596 21.1529801,31.110596 Z M114.234437,31.013245 C113.942384,31.013245 113.664238,30.8602649 113.525166,30.5960265 C112.996689,29.6642384 112.134437,28.1900662 110.980132,26.4655629 C110.729801,26.0900662 110.827152,25.5754967 111.202649,25.3251656 C111.578146,25.0748344 112.092715,25.1721854 112.343046,25.5476821 C113.525166,27.3139073 114.415232,28.8298013 114.957616,29.789404 C115.180132,30.1788079 115.04106,30.6794702 114.637748,30.9019868 C114.512583,30.9854305 114.37351,31.013245 114.234437,31.013245 Z M34.5456954,22.613245 C34.1423841,22.613245 33.794702,22.3211921 33.7390728,21.9039735 C33.6556291,21.3615894 33.6,20.7913907 33.5582781,20.2211921 C33.5165563,19.7761589 33.8642384,19.3728477 34.3092715,19.3450331 C34.7821192,19.3172185 35.1576159,19.6370861 35.1854305,20.0960265 C35.2271523,20.6384106 35.2827815,21.1668874 35.3662252,21.681457 C35.4357616,22.1264901 35.115894,22.5437086 34.6708609,22.5993377 C34.6152318,22.613245 34.5735099,22.613245 34.5456954,22.613245 Z M77.1576159,19.0112583 C76.8655629,19.0112583 76.5874172,18.8582781 76.4344371,18.5801325 C76.1980132,18.1490066 75.9337748,17.6761589 75.6417219,17.189404 C75.405298,16.8 75.5304636,16.2993377 75.9198675,16.0629139 C76.3092715,15.8264901 76.8099338,15.9516556 77.0463576,16.3410596 C77.3523179,16.8556291 77.6304636,17.3423841 77.8807947,17.8013245 C78.089404,18.2046358 77.9503311,18.6913907 77.5470199,18.9139073 C77.4218543,18.9695364 77.2966887,19.0112583 77.1576159,19.0112583 Z M103.136424,16.9112583 C102.941722,16.9112583 102.760927,16.8417219 102.607947,16.7165563 C99.4788079,14.0324503 96.3635762,12.3774834 93.3178808,11.7933775 C90.3278146,11.2231788 87.6854305,11.5152318 85.4880795,12.6417219 C85.0847682,12.8503311 84.5980132,12.6834437 84.389404,12.2940397 C84.1807947,11.8907285 84.3337748,11.4039735 84.7370861,11.1953642 C87.2543046,9.88807947 90.2721854,9.55430464 93.6238411,10.1940397 C96.9476821,10.8337748 100.327152,12.6 103.678808,15.4788079 C104.02649,15.7708609 104.054305,16.2854305 103.762252,16.6331126 C103.595364,16.8139073 103.372848,16.9112583 103.136424,16.9112583 Z M72.5125828,12.2801325 C72.2900662,12.2801325 72.0536424,12.1827815 71.9006623,12.0019868 C70.8298013,10.7642384 69.6754967,9.63774834 68.4933775,8.65033113 C68.1456954,8.35827815 68.1039735,7.84370861 68.3960265,7.49602649 C68.6880795,7.14834437 69.202649,7.10662252 69.5503311,7.3986755 C70.8019868,8.44172185 72.0119205,9.63774834 73.1384106,10.9311258 C73.4304636,11.2788079 73.402649,11.7933775 73.0549669,12.0854305 C72.9019868,12.210596 72.7072848,12.2801325 72.5125828,12.2801325 Z M38.7735099,7.50993377 C38.5509934,7.50993377 38.3284768,7.41258278 38.1615894,7.24569536 C37.8556291,6.91192053 37.8834437,6.39735099 38.2172185,6.09139073 C40.8317881,3.72715232 44.5172185,2.19735099 49.1761589,1.57152318 C52.0271523,1.18211921 54.8225166,1.22384106 57.4649007,1.68278146 C57.9099338,1.76622517 58.2019868,2.18344371 58.1324503,2.62847682 C58.0490066,3.07350993 57.6317881,3.3794702 57.186755,3.29602649 C54.7112583,2.86490066 52.0827815,2.83708609 49.3986755,3.1986755 C45.0735099,3.79668874 41.6801325,5.17350993 39.315894,7.31523179 C39.1629139,7.44039735 38.9682119,7.50993377 38.7735099,7.50993377 Z"
|
||||
id="path72" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 34.768212)"
|
||||
id="g78">
|
||||
<path
|
||||
d="M148.015232,3.60198675 L2.30860927,3.60198675 C1.40463576,3.60198675 0.667549669,2.86490066 0.667549669,1.96092715 C0.667549669,1.05695364 1.40463576,0.31986755 2.30860927,0.31986755 L148.015232,0.31986755 C148.919205,0.31986755 149.656291,1.05695364 149.656291,1.96092715 C149.642384,2.87880795 148.919205,3.60198675 148.015232,3.60198675 Z"
|
||||
id="path76" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(230.860927, 1.390728)"
|
||||
id="g92">
|
||||
<path
|
||||
d="M2.21125828,20.415894 L21.9456954,20.415894 C21.9456954,20.415894 15.7708609,6.61986755 28.8715232,4.8397351 C40.5536424,3.25430464 45.1847682,15.2562914 45.1847682,15.2562914 C45.1847682,15.2562914 46.5754967,8.33046358 53.5291391,9.65165563 C60.3854305,10.9589404 65.4476821,21.9874172 65.4476821,21.9874172 L82.6231788,21.9874172"
|
||||
id="path82" />
|
||||
<g
|
||||
transform="translate(1.390728, 0.000000)"
|
||||
id="g86">
|
||||
<path
|
||||
d="M21.1251656,18.2046358 L1.41854305,18.2046358 C0.959602649,18.2046358 0.598013245,17.8430464 0.598013245,17.384106 C0.598013245,16.9251656 0.959602649,16.5635762 1.41854305,16.5635762 L21.1251656,16.5635762 C21.584106,16.5635762 21.9456954,16.9251656 21.9456954,17.384106 C21.9456954,17.8430464 21.584106,18.2046358 21.1251656,18.2046358 Z M81.8304636,17.9543046 L81.0655629,17.9543046 C80.6066225,17.9543046 80.2450331,17.5927152 80.2450331,17.1337748 C80.2450331,16.6748344 80.6066225,16.313245 81.0655629,16.313245 L81.8304636,16.313245 C82.289404,16.313245 82.6509934,16.6748344 82.6509934,17.1337748 C82.6509934,17.5927152 82.2754967,17.9543046 81.8304636,17.9543046 Z M74.5013245,17.9543046 L69.5781457,17.9543046 C69.1192053,17.9543046 68.7576159,17.5927152 68.7576159,17.1337748 C68.7576159,16.6748344 69.1192053,16.313245 69.5781457,16.313245 L74.5013245,16.313245 C74.9602649,16.313245 75.3218543,16.6748344 75.3218543,17.1337748 C75.3218543,17.5927152 74.9602649,17.9543046 74.5013245,17.9543046 Z M44.392053,13.0450331 C44.0582781,13.0450331 43.7523179,12.8225166 43.6271523,12.5165563 L43.5019868,12.2245033 C43.3350993,11.8490066 43.4741722,11.4039735 43.8218543,11.1953642 C44.586755,8.90066225 46.7423841,5.63245033 51.0397351,5.63245033 C51.6238411,5.63245033 52.2496689,5.68807947 52.889404,5.81324503 C55.3370861,6.27218543 57.7986755,7.70463576 60.218543,10.0410596 C60.5384106,10.3609272 60.5523179,10.8754967 60.2324503,11.1953642 C59.9125828,11.5291391 59.3980132,11.5291391 59.0781457,11.2092715 C56.894702,9.09536424 54.7112583,7.81589404 52.5834437,7.41258278 C52.0410596,7.31523179 51.5264901,7.25960265 51.0397351,7.25960265 C46.3112583,7.25960265 45.2403974,12.1688742 45.1986755,12.3774834 C45.1152318,12.7668874 44.781457,13.0450331 44.392053,13.0450331 Z M21.5562914,5.71589404 C21.3615894,5.71589404 21.1807947,5.64635762 21.0278146,5.52119205 C20.6801325,5.22913907 20.6384106,4.71456954 20.9304636,4.36688742 C22.0152318,3.08741722 23.5311258,2.14172185 25.4364238,1.54370861 C25.8675497,1.40463576 26.3264901,1.65496689 26.4655629,2.08609272 C26.6046358,2.51721854 26.3543046,2.97615894 25.9231788,3.11523179 C24.3238411,3.61589404 23.0721854,4.39470199 22.1821192,5.42384106 C22.0152318,5.61854305 21.7927152,5.71589404 21.5562914,5.71589404 Z M33.7668874,2.94834437 C33.697351,2.94834437 33.6278146,2.93443709 33.5443709,2.9205298 C33.0576159,2.79536424 32.5569536,2.68410596 32.0423841,2.61456954 C31.597351,2.54503311 31.2774834,2.12781457 31.3470199,1.68278146 C31.4165563,1.23774834 31.8337748,0.945695364 32.2788079,0.987417219 C32.8629139,1.07086093 33.4331126,1.19602649 33.9754967,1.33509934 C34.4066225,1.4602649 34.6708609,1.90529801 34.5596026,2.33642384 C34.4622517,2.71192053 34.1284768,2.94834437 33.7668874,2.94834437 Z"
|
||||
id="path84" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 19.470199)"
|
||||
id="g90">
|
||||
<path
|
||||
d="M83.8887417,4.24172185 L2.57284768,4.24172185 C1.66887417,4.24172185 0.931788079,3.50463576 0.931788079,2.60066225 C0.931788079,1.69668874 1.66887417,0.959602649 2.57284768,0.959602649 L83.8887417,0.959602649 C84.7927152,0.959602649 85.5298013,1.69668874 85.5298013,2.60066225 C85.5298013,3.50463576 84.7927152,4.24172185 83.8887417,4.24172185 Z"
|
||||
id="path88" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<ellipse
|
||||
id="Oval"
|
||||
fill="#ededf0"
|
||||
opacity="0.5"
|
||||
cx="175.9178"
|
||||
cy="170.85991"
|
||||
rx="73.526253"
|
||||
ry="11.563125" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="cloud-alert"
|
||||
d="m 254.54362,110.61709 a 41.858804,41.858804 0 0 1 -10.8282,28.08534 35.887465,35.887465 0 0 1 -21.45007,10.8673 42.246663,42.246663 0 0 0 0.84918,-17.43196 17.919131,17.919131 0 0 0 8.09421,-4.72957 25.026353,25.026353 0 0 0 6.48366,-16.79111 28.118382,28.118382 0 0 0 -28.08535,-28.085359 c -0.92602,0 -5.68324,0.594174 -8.57727,0.967035 a 2.7916842,2.7916842 0 0 1 -3.0008,-1.876551 l -1.14369,-3.336147 A 34.656989,34.656989 0 0 0 168.09302,54.616462 33.58368,33.58368 0 0 0 131.89488,95.850311 l 1.19942,5.130409 a 2.8085354,2.8085354 0 0 1 -1.92244,3.32783 l -5.04762,1.52526 a 16.696293,16.696293 0 0 0 -12.00739,16.01742 11.315083,11.315083 0 0 0 2.32581,6.90069 13.611511,13.611511 0 0 0 10.04928,4.33345 h 7.67482 a 42.446125,42.446125 0 0 0 1.08887,16.85122 h -8.76369 A 30.06863,30.06863 0 0 1 102.70166,138.50495 28.276728,28.276728 0 0 1 97.265633,121.85123 33.354503,33.354503 0 0 1 114.33081,92.64684 c -0.14268,-1.508465 -0.21401,-3.01148 -0.21401,-4.498037 a 50.534146,50.534146 0 0 1 95.80834,-22.468284 44.988861,44.988861 0 0 1 44.61843,44.936571 z m -42.12804,28.08534 a 33.702425,33.702425 0 1 1 -33.70241,-33.70242 33.702425,33.702425 0 0 1 33.70241,33.70242 z m -28.08535,14.04269 a 2.8085354,2.8085354 0 0 0 -2.80853,-2.80853 h -5.61707 a 2.8085354,2.8085354 0 0 0 -2.80853,2.80853 v 5.61706 a 2.8085354,2.8085354 0 0 0 2.80853,2.80855 h 5.61707 a 2.8085354,2.8085354 0 0 0 2.80853,-2.80855 z m 0,-33.70243 a 2.8166239,2.8166239 0 0 0 -2.80853,-2.80853 h -5.61707 a 2.8166239,2.8166239 0 0 0 -2.80853,2.80853 v 11.23415 a 22.144684,22.144684 0 0 0 0.83447,5.49022 l 2.24351,7.21126 a 2.0333796,2.0333796 0 0 0 1.82117,1.34118 h 1.43583 a 2.0333796,2.0333796 0 0 0 1.82118,-1.34118 l 2.2435,-7.21126 a 22.144684,22.144684 0 0 0 0.83447,-5.49022 z"
|
||||
style="stroke-width:5.61707;fill:#45a1ff;fill-opacity:1" />
|
||||
</svg>
|
Before Width: | Height: | Size: 25 KiB |
|
@ -1,76 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64mm"
|
||||
height="64mm"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg898"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:export-filename="/home/timvisee/git/send/assets/favicon-32x32.png"
|
||||
inkscape:export-xdpi="12.7"
|
||||
inkscape:export-ydpi="12.7"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<defs
|
||||
id="defs892" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="196.2752"
|
||||
inkscape:cy="146.91833"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1048"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata895">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
id="cloud-upload"
|
||||
d="m 63.999948,34.285731 a 17.033293,17.033293 0 0 1 -4.406235,11.428568 14.856655,14.856655 0 0 1 -10.55805,4.571428 h -2.178561 v -6.857139 h 2.178561 A 8.0044292,8.0044292 0 0 0 54.504416,41.118327 10.183788,10.183788 0 0 0 57.14281,34.285731 11.442004,11.442004 0 0 0 45.714251,22.857173 c -0.37683,0 -2.312648,0.241803 -3.490288,0.393502 A 1.1359993,1.1359993 0 0 1 41.00286,22.487082 L 40.537483,21.129528 A 14.102711,14.102711 0 0 0 28.821257,11.497829 13.665957,13.665957 0 0 0 14.091416,28.276812 l 0.488099,2.087681 a 1.1428564,1.1428564 0 0 1 -0.782255,1.354176 l -2.053987,0.62062 a 6.7940986,6.7940986 0 0 0 -4.8860757,6.517846 4.6043628,4.6043628 0 0 0 0.9464197,2.808045 5.5388308,5.5388308 0 0 0 4.089282,1.763384 h 5.250006 v 6.857137 H 11.892899 A 12.235604,12.235604 0 0 1 2.2121047,45.633903 11.506439,11.506439 0 0 1 5.8514086e-5,38.857135 13.5727,13.5727 0 0 1 6.9442617,26.97321 C 6.8863778,26.359414 6.8571876,25.747771 6.8571876,25.142857 A 20.563484,20.563484 0 0 1 45.843766,16.000009 18.306983,18.306983 0 0 1 64,34.285707 Z M 32.923239,32.122512 a 1.1428564,1.1428564 0 0 0 -1.846543,0 l -8.591651,11.775239 a 1.1428564,1.1428564 0 0 0 0.923268,1.816548 h 5.163091 v 12.571418 a 1.1428564,1.1428564 0 0 0 1.14285,1.142858 h 4.571428 a 1.1428564,1.1428564 0 0 0 1.142859,-1.142858 V 45.714299 h 5.163084 a 1.1428564,1.1428564 0 0 0 0.923265,-1.816548 z"
|
||||
style="stroke-width:2.28572;fill:#45a1ff;fill-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.6 KiB |
|
@ -1,300 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="348px"
|
||||
height="210px"
|
||||
viewBox="0 0 348 210"
|
||||
version="1.1"
|
||||
id="svg124"
|
||||
sodipodi:docname="notFound.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata128">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title>27A08916-26BA-4E40-BE07-5F49802F2EFC</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1080"
|
||||
id="namedview126"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.83117816"
|
||||
inkscape:cx="-34.146598"
|
||||
inkscape:cy="-144.04542"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg124" />
|
||||
<!-- Generator: sketchtool 53.1 (72631) - https://sketchapp.com -->
|
||||
<title
|
||||
id="title2">27A08916-26BA-4E40-BE07-5F49802F2EFC</title>
|
||||
<desc
|
||||
id="desc4">Created with sketchtool.</desc>
|
||||
<defs
|
||||
id="defs50">
|
||||
<linearGradient
|
||||
x1="41.8088067%"
|
||||
y1="202.924064%"
|
||||
x2="57.7028735%"
|
||||
y2="-81.3762312%"
|
||||
id="linearGradient-1">
|
||||
<stop
|
||||
stop-color="#EDEDF0"
|
||||
offset="29.11%"
|
||||
id="stop6" />
|
||||
<stop
|
||||
stop-color="#D9E4EF"
|
||||
offset="32.86%"
|
||||
id="stop8" />
|
||||
<stop
|
||||
stop-color="#A5CCEE"
|
||||
offset="40.56%"
|
||||
id="stop10" />
|
||||
<stop
|
||||
stop-color="#53A7EC"
|
||||
offset="51.45%"
|
||||
id="stop12" />
|
||||
<stop
|
||||
stop-color="#47A1EB"
|
||||
offset="52.89%"
|
||||
id="stop14" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="71.86%"
|
||||
id="stop16" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="-28.1787365%"
|
||||
y1="-47.1973036%"
|
||||
x2="84.4756344%"
|
||||
y2="96.7280729%"
|
||||
id="linearGradient-2">
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="0%"
|
||||
id="stop19" />
|
||||
<stop
|
||||
stop-color="#7878FF"
|
||||
offset="99.91%"
|
||||
id="stop21" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="20.1959513%"
|
||||
y1="50.3857706%"
|
||||
x2="169.064404%"
|
||||
y2="48.6797451%"
|
||||
id="linearGradient-3">
|
||||
<stop
|
||||
stop-color="#FFF361"
|
||||
offset="0%"
|
||||
id="stop24" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop26" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="7.14415651%"
|
||||
y1="-13.348307%"
|
||||
x2="84.3260208%"
|
||||
y2="120.031607%"
|
||||
id="linearGradient-4">
|
||||
<stop
|
||||
stop-color="#FF5162"
|
||||
offset="0%"
|
||||
id="stop29" />
|
||||
<stop
|
||||
stop-color="#83219D"
|
||||
offset="100%"
|
||||
id="stop31" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="34.0909977%"
|
||||
y1="25.5724875%"
|
||||
x2="59.4809257%"
|
||||
y2="63.1135354%"
|
||||
id="linearGradient-5">
|
||||
<stop
|
||||
stop-color="#FFD943"
|
||||
offset="0%"
|
||||
id="stop34" />
|
||||
<stop
|
||||
stop-color="#FFA80A"
|
||||
offset="100%"
|
||||
id="stop36" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="21.6627754%"
|
||||
y1="-7.19126071%"
|
||||
x2="65.1350234%"
|
||||
y2="106.402717%"
|
||||
id="linearGradient-6">
|
||||
<stop
|
||||
stop-color="#FF8748"
|
||||
offset="0%"
|
||||
id="stop39" />
|
||||
<stop
|
||||
stop-color="#FE7852"
|
||||
offset="13.28%"
|
||||
id="stop41" />
|
||||
<stop
|
||||
stop-color="#FC546A"
|
||||
offset="50.49%"
|
||||
id="stop43" />
|
||||
<stop
|
||||
stop-color="#FA3D79"
|
||||
offset="80.73%"
|
||||
id="stop45" />
|
||||
<stop
|
||||
stop-color="#FA357F"
|
||||
offset="100%"
|
||||
id="stop47" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="Page-1"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<g
|
||||
id="Send_Expired-Link"
|
||||
transform="translate(-546.000000, -349.000000)"
|
||||
fill-rule="nonzero">
|
||||
<g
|
||||
id="firefox-send_illustrations-01"
|
||||
transform="translate(546.014493, 349.000000)">
|
||||
<g
|
||||
id="Group"
|
||||
transform="translate(0.000000, 41.705515)"
|
||||
fill="#EDEDF0"
|
||||
opacity="0.5">
|
||||
<g
|
||||
transform="translate(31.196450, 119.702206)"
|
||||
id="g62">
|
||||
<g
|
||||
transform="translate(21.701878, 5.425470)"
|
||||
id="Path">
|
||||
<path
|
||||
d="M1.62764089,3.36379116 L94.6066265,3.36379116 C95.3526286,3.36379116 95.9629939,2.75342583 95.9629939,2.00742376 C95.9629939,1.26142169 95.3526286,0.651056354 94.6066265,0.651056354 L1.62764089,0.651056354 C0.881638813,0.651056354 0.271273481,1.26142169 0.271273481,2.00742376 C0.271273481,2.75342583 0.881638813,3.36379116 1.62764089,3.36379116 Z"
|
||||
id="path52" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(79.683802, 0.000000)"
|
||||
id="g57">
|
||||
<path
|
||||
d="M0.735221199,1.89891437 L24.0647406,1.89891437 C24.4445234,1.89891437 24.7429243,1.60051354 24.7429243,1.22073066 C24.7429243,0.840947791 24.4445234,0.542546962 24.0647406,0.542546962 L0.735221199,0.542546962 C0.355438325,0.542546962 0.0570374962,0.840947791 0.0570374962,1.22073066 C0.0570374962,1.60051354 0.355438325,1.89891437 0.735221199,1.89891437 Z"
|
||||
id="path55" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 13.221799)"
|
||||
id="Shape">
|
||||
<path
|
||||
d="M0.542546962,0.938676309 C0.542546962,0.558893436 0.840947791,0.260492607 1.22073066,0.260492607 L5.28983288,0.260492607 C5.66961575,0.260492607 5.96801658,0.558893436 5.96801658,0.938676309 C5.96801658,1.31845918 5.66961575,1.61686001 5.28983288,1.61686001 L1.22073066,1.61686001 C0.840947791,1.61686001 0.542546962,1.31845918 0.542546962,0.938676309 Z M15.4625884,0.938676309 C15.4625884,0.558893436 15.7609892,0.260492607 16.1407721,0.260492607 L32.417181,0.260492607 C32.7969639,0.260492607 33.0953647,0.558893436 33.0953647,0.938676309 C33.0953647,1.31845918 32.7969639,1.61686001 32.417181,1.61686001 L16.1407721,1.61686001 C15.7609892,1.61686001 15.4625884,1.31845918 15.4625884,0.938676309 Z M43.9463039,0.938676309 C43.9463039,0.558893436 44.2447047,0.260492607 44.6244876,0.260492607 L45.980855,0.260492607 C46.3606379,0.260492607 46.6590387,0.558893436 46.6590387,0.938676309 C46.6590387,1.31845918 46.3606379,1.61686001 45.980855,1.61686001 L44.6244876,1.61686001 C44.2447047,1.61686001 43.9463039,1.31845918 43.9463039,0.938676309 Z M50.7281409,0.938676309 C50.7281409,0.558893436 51.0265418,0.260492607 51.4063246,0.260492607 L55.4754269,0.260492607 C55.8552097,0.260492607 56.1536106,0.558893436 56.1536106,0.938676309 C56.1536106,1.31845918 55.8552097,1.61686001 55.4754269,1.61686001 L51.4063246,1.61686001 C51.0265418,1.61686001 50.7281409,1.31845918 50.7281409,0.938676309 Z M65.6481824,0.938676309 C65.6481824,0.558893436 65.9465832,0.260492607 66.3263661,0.260492607 L82.602775,0.260492607 C82.9825578,0.260492607 83.2809587,0.558893436 83.2809587,0.938676309 C83.2809587,1.31845918 82.9825578,1.61686001 82.602775,1.61686001 L66.3263661,1.61686001 C65.9465832,1.61686001 65.6481824,1.31845918 65.6481824,0.938676309 Z"
|
||||
id="path59" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(128.513029, 73.585715)"
|
||||
id="g76">
|
||||
<g
|
||||
transform="translate(26.112855, 5.425470)"
|
||||
id="g66">
|
||||
<path
|
||||
d="M1.831096,3.26884545 L151.95384,3.26884545 C152.699842,3.26884545 153.310208,2.65848011 153.310208,1.91247804 C153.310208,1.16647597 152.699842,0.556110636 151.95384,0.556110636 L1.831096,0.556110636 C1.08509392,0.556110636 0.474728592,1.16647597 0.474728592,1.91247804 C0.474728592,2.65848011 1.08509392,3.26884545 1.831096,3.26884545 Z"
|
||||
id="path64" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(47.472859, 0.000000)"
|
||||
id="g70">
|
||||
<path
|
||||
d="M0.748784873,1.91247804 L38.401544,1.91247804 C38.7813269,1.91247804 39.0797277,1.61407721 39.0797277,1.23429434 C39.0797277,0.854511465 38.7813269,0.556110636 38.401544,0.556110636 L0.748784873,0.556110636 C0.369001999,0.556110636 0.0706011703,0.854511465 0.0706011703,1.23429434 C0.0706011703,1.61407721 0.382565673,1.91247804 0.748784873,1.91247804 Z"
|
||||
id="path68" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 13.221799)"
|
||||
id="g74">
|
||||
<path
|
||||
d="M0.233365259,0.708093851 C0.233365259,0.328310977 0.531766088,0.0299101482 0.911548961,0.0299101482 L17.1879578,0.0299101482 C17.5677407,0.0299101482 17.8661415,0.328310977 17.8661415,0.708093851 C17.8661415,1.08787672 17.5677407,1.38627755 17.1879578,1.38627755 L0.911548961,1.38627755 C0.531766088,1.38627755 0.233365259,1.08787672 0.233365259,0.708093851 Z M27.3607134,0.708093851 C27.3607134,0.328310977 27.6591142,0.0299101482 28.0388971,0.0299101482 L32.1079993,0.0299101482 C32.4877821,0.0299101482 32.786183,0.328310977 32.786183,0.708093851 C32.786183,1.08787672 32.4877821,1.38627755 32.1079993,1.38627755 L28.0388971,1.38627755 C27.6591142,1.38627755 27.3607134,1.08787672 27.3607134,0.708093851 Z M36.8552852,0.708093851 C36.8552852,0.328310977 37.153686,0.0299101482 37.5334689,0.0299101482 L38.8898363,0.0299101482 C39.2696192,0.0299101482 39.56802,0.328310977 39.56802,0.708093851 C39.56802,1.08787672 39.2696192,1.38627755 38.8898363,1.38627755 L37.5334689,1.38627755 C37.153686,1.38627755 36.8552852,1.08787672 36.8552852,0.708093851 Z M50.4189592,0.708093851 C50.4189592,0.328310977 50.7173601,0.0299101482 51.0971429,0.0299101482 L67.3735518,0.0299101482 C67.7533347,0.0299101482 68.0517355,0.328310977 68.0517355,0.708093851 C68.0517355,1.08787672 67.7533347,1.38627755 67.3735518,1.38627755 L51.0971429,1.38627755 C50.7173601,1.38627755 50.4189592,1.08787672 50.4189592,0.708093851 Z M77.5463073,0.708093851 C77.5463073,0.328310977 77.8447082,0.0299101482 78.224491,0.0299101482 L82.2935933,0.0299101482 C82.6733761,0.0299101482 82.971777,0.328310977 82.971777,0.708093851 C82.971777,1.08787672 82.6733761,1.38627755 82.2935933,1.38627755 L78.224491,1.38627755 C77.8447082,1.38627755 77.5463073,1.08787672 77.5463073,0.708093851 Z M87.0408792,0.708093851 C87.0408792,0.328310977 87.33928,0.0299101482 87.7190629,0.0299101482 L89.0754303,0.0299101482 C89.4552132,0.0299101482 89.753614,0.328310977 89.753614,0.708093851 C89.753614,1.08787672 89.4552132,1.38627755 89.0754303,1.38627755 L87.7190629,1.38627755 C87.33928,1.38627755 87.0408792,1.08787672 87.0408792,0.708093851 Z M100.604553,0.708093851 C100.604553,0.328310977 100.902954,0.0299101482 101.282737,0.0299101482 L117.559146,0.0299101482 C117.938929,0.0299101482 118.237329,0.328310977 118.237329,0.708093851 C118.237329,1.08787672 117.938929,1.38627755 117.559146,1.38627755 L101.282737,1.38627755 C100.902954,1.38627755 100.604553,1.08787672 100.604553,0.708093851 Z M127.731901,0.708093851 C127.731901,0.328310977 128.030302,0.0299101482 128.410085,0.0299101482 L132.479187,0.0299101482 C132.85897,0.0299101482 133.157371,0.328310977 133.157371,0.708093851 C133.157371,1.08787672 132.85897,1.38627755 132.479187,1.38627755 L128.410085,1.38627755 C128.030302,1.38627755 127.731901,1.08787672 127.731901,0.708093851 Z M137.226473,0.708093851 C137.226473,0.328310977 137.524874,0.0299101482 137.904657,0.0299101482 L139.261024,0.0299101482 C139.640807,0.0299101482 139.939208,0.328310977 139.939208,0.708093851 C139.939208,1.08787672 139.640807,1.38627755 139.261024,1.38627755 L137.904657,1.38627755 C137.524874,1.38627755 137.226473,1.08787672 137.226473,0.708093851 Z M150.790147,0.708093851 C150.790147,0.328310977 151.088548,0.0299101482 151.468331,0.0299101482 L167.74474,0.0299101482 C168.124523,0.0299101482 168.422923,0.328310977 168.422923,0.708093851 C168.422923,1.08787672 168.124523,1.38627755 167.74474,1.38627755 L151.468331,1.38627755 C151.088548,1.38627755 150.790147,1.08787672 150.790147,0.708093851 Z M177.917495,0.708093851 C177.917495,0.328310977 178.215896,0.0299101482 178.595679,0.0299101482 L182.664781,0.0299101482 C183.044564,0.0299101482 183.342965,0.328310977 183.342965,0.708093851 C183.342965,1.08787672 183.044564,1.38627755 182.664781,1.38627755 L178.595679,1.38627755 C178.215896,1.38627755 177.917495,1.08787672 177.917495,0.708093851 Z M187.412067,0.708093851 C187.412067,0.328310977 187.710468,0.0299101482 188.090251,0.0299101482 L189.446618,0.0299101482 C189.826401,0.0299101482 190.124802,0.328310977 190.124802,0.708093851 C190.124802,1.08787672 189.826401,1.38627755 189.446618,1.38627755 L188.090251,1.38627755 C187.710468,1.38627755 187.412067,1.08787672 187.412067,0.708093851 Z M200.975741,0.708093851 C200.975741,0.328310977 201.274142,0.0299101482 201.653925,0.0299101482 L217.930334,0.0299101482 C218.310117,0.0299101482 218.608517,0.328310977 218.608517,0.708093851 C218.608517,1.08787672 218.310117,1.38627755 217.930334,1.38627755 L201.653925,1.38627755 C201.274142,1.38627755 200.975741,1.08787672 200.975741,0.708093851 Z"
|
||||
id="path72" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g88">
|
||||
<path
|
||||
d="M2.21087887,33.3287299 L36.6897383,33.3287299 C36.6897383,33.3287299 25.9066174,9.21251748 48.8020992,6.09287245 C69.2289923,3.31231927 77.2993784,24.3088867 77.2993784,24.3088867 C77.2993784,24.3088867 79.7272761,12.1965258 91.8667643,14.515914 C103.843489,16.7946113 112.687004,36.0685921 112.687004,36.0685921 L142.716978,36.0685921"
|
||||
id="path78" />
|
||||
<g
|
||||
transform="translate(1.356367, 0.000000)"
|
||||
id="g82">
|
||||
<path
|
||||
d="M141.957413,30.371849 L133.08677,30.371849 C132.639169,30.371849 132.286513,30.0191935 132.286513,29.5715922 C132.286513,29.123991 132.639169,28.7713355 133.08677,28.7713355 L141.957413,28.7713355 C142.405014,28.7713355 142.757669,29.123991 142.757669,29.5715922 C142.757669,30.0191935 142.405014,30.371849 141.957413,30.371849 Z M118.722839,30.371849 L117.122325,30.371849 C116.674724,30.371849 116.322069,30.0191935 116.322069,29.5715922 C116.322069,29.123991 116.674724,28.7713355 117.122325,28.7713355 L118.722839,28.7713355 C119.17044,28.7713355 119.523096,29.123991 119.523096,29.5715922 C119.523096,30.0191935 119.156877,30.371849 118.722839,30.371849 Z M35.9166089,29.4088281 L33.3530745,29.4088281 C32.9054732,29.4088281 32.5528177,29.0561726 32.5528177,28.6085714 C32.5528177,28.1609701 32.9054732,27.8083146 33.3530745,27.8083146 L34.7365692,27.8083146 C34.6280598,27.5234774 34.5059868,27.1708219 34.37035,26.7774754 C34.2347133,26.3570015 34.4517321,25.9094002 34.872206,25.7601998 C35.2926799,25.6245631 35.7402811,25.8415819 35.8894815,26.2620558 C36.3099554,27.4963501 36.6490473,28.2559158 36.6490473,28.2694795 C36.7575567,28.5136257 36.7304293,28.7984628 36.5947926,29.0290453 C36.4455922,29.2731914 36.1878824,29.4088281 35.9166089,29.4088281 Z M20.5896572,29.4088281 L1.43774945,29.4088281 C0.990148206,29.4088281 0.63749268,29.0561726 0.63749268,28.6085714 C0.63749268,28.1609701 0.990148206,27.8083146 1.43774945,27.8083146 L20.5896572,27.8083146 C21.0372585,27.8083146 21.389914,28.1609701 21.389914,28.6085714 C21.389914,29.0561726 21.0236948,29.4088281 20.5896572,29.4088281 Z M111.371328,29.3274461 C111.08649,29.3274461 110.815217,29.1782457 110.67958,28.9205359 C110.164161,28.0117697 109.323213,26.5740203 108.197428,24.8921247 C107.953282,24.5259055 108.048227,24.0240495 108.414447,23.7799034 C108.780666,23.5357573 109.282522,23.630703 109.526668,23.9969222 C110.67958,25.7195088 111.547655,27.1979493 112.076639,28.1338428 C112.293657,28.5136257 112.158021,29.0019179 111.764674,29.2189367 C111.629037,29.2867551 111.493401,29.3274461 111.371328,29.3274461 Z M33.6379116,21.1214233 C33.2445651,21.1214233 32.9054732,20.8365861 32.8512185,20.4296759 C32.7698365,19.9006926 32.7155818,19.344582 32.6748908,18.7884714 C32.6341998,18.3544338 32.9732916,17.9610872 33.4073292,17.9339599 C33.8684941,17.9068325 34.2347133,18.218797 34.2618406,18.6663983 C34.3025317,19.1953816 34.3567864,19.7108012 34.4381684,20.2126571 C34.5059868,20.6466947 34.1940223,21.0536049 33.7599847,21.1078596 C33.7192937,21.1214233 33.6786027,21.1214233 33.6379116,21.1214233 Z M75.2105726,17.6084317 C74.9257354,17.6084317 74.654462,17.4592313 74.5052616,17.1879578 C74.2746791,16.7674839 74.0169693,16.306319 73.7321321,15.8315904 C73.5015497,15.4518075 73.6236227,14.9635153 74.0034056,14.7329328 C74.3831885,14.5023504 74.8714808,14.6244234 75.1020632,15.0042063 C75.400464,15.5060622 75.6717375,15.9807908 75.9158837,16.4283921 C76.1193388,16.8217386 75.983702,17.2964672 75.5903555,17.513486 C75.4682824,17.5813044 75.3326457,17.6084317 75.2105726,17.6084317 Z M100.547516,15.5738806 C100.357624,15.5738806 100.181297,15.5060622 100.032096,15.3839892 C96.9802695,12.7662001 93.9420065,11.1521229 90.9715618,10.5824486 C88.0553719,10.0263379 85.4782739,10.3111751 83.3352134,11.4098327 C82.9418668,11.6132878 82.4671382,11.4505237 82.2636831,11.0707408 C82.060228,10.6773943 82.2094284,10.2026657 82.602775,9.99921057 C85.0578,8.72422521 88.0011172,8.39869704 91.2699627,9.02262604 C94.5116808,9.64655505 97.8076536,11.3691417 101.076499,14.1768222 C101.415591,14.4616593 101.442718,14.9635153 101.157881,15.3026071 C100.981553,15.4789349 100.764535,15.5738806 100.547516,15.5738806 Z M70.6803055,11.0436135 C70.4632867,11.0436135 70.2327042,10.9486678 70.0835038,10.77234 C69.0391009,9.565173 67.913316,8.46651541 66.7604037,7.50349455 C66.4213118,7.21865739 66.3806208,6.71680145 66.665458,6.3777096 C66.9502951,6.03861775 67.452151,5.99792673 67.7912429,6.28276388 C69.0119736,7.30003944 70.1920132,8.46651541 71.2906708,9.72793709 C71.575508,10.0670289 71.5483806,10.5688849 71.2092888,10.853722 C71.0465247,10.9757951 70.8566332,11.0436135 70.6803055,11.0436135 Z M37.7748322,6.39127328 C37.5578134,6.39127328 37.3407947,6.29632756 37.1780306,6.13356347 C36.8796297,5.80803529 36.9067571,5.30617935 37.2322853,5.00777852 C39.782256,2.70195394 43.3766296,1.20994979 47.9204604,0.599584458 C50.7010136,0.219801585 53.4273121,0.260492607 56.0044101,0.708093851 C56.4384477,0.789475895 56.7232849,1.19638612 56.6554665,1.63042369 C56.5740845,2.06446126 56.1671742,2.36286208 55.7331367,2.28148004 C53.3188027,1.86100614 50.7552683,1.8338788 48.1374792,2.18653432 C43.9191766,2.76977231 40.6096401,4.11257604 38.3038155,6.20138184 C38.1546151,6.32345491 37.9647237,6.39127328 37.7748322,6.39127328 Z"
|
||||
id="path80" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 32.894692)"
|
||||
id="g86">
|
||||
<path
|
||||
d="M144.303928,3.6079373 L2.1973152,3.6079373 C1.31567638,3.6079373 0.596801658,2.88906257 0.596801658,2.00742376 C0.596801658,1.12578495 1.31567638,0.406910221 2.1973152,0.406910221 L144.303928,0.406910221 C145.185567,0.406910221 145.904442,1.12578495 145.904442,2.00742376 C145.904442,2.88906257 145.185567,3.6079373 144.303928,3.6079373 Z"
|
||||
id="path84" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
transform="translate(225.156989, 1.356367)"
|
||||
id="g100">
|
||||
<path
|
||||
d="M2.10236948,18.9919265 L21.349223,18.9919265 C21.349223,18.9919265 15.3269517,5.53676181 28.1039326,3.80061153 C39.4974188,2.25435269 44.0141223,13.9598034 44.0141223,13.9598034 C44.0141223,13.9598034 45.3704897,7.20509372 52.1523267,8.49364275 C58.839218,9.76862812 63.7763954,20.5246216 63.7763954,20.5246216 L80.5275328,20.5246216"
|
||||
id="path90" />
|
||||
<g
|
||||
transform="translate(1.356367, 0.000000)"
|
||||
id="g94">
|
||||
<path
|
||||
d="M20.5489662,16.8353023 L1.32924006,16.8353023 C0.881638813,16.8353023 0.528983288,16.4826468 0.528983288,16.0350455 C0.528983288,15.5874443 0.881638813,15.2347888 1.32924006,15.2347888 L20.5489662,15.2347888 C20.9965674,15.2347888 21.349223,15.5874443 21.349223,16.0350455 C21.349223,16.4826468 20.9965674,16.8353023 20.5489662,16.8353023 Z M79.7544034,16.5775925 L79.0084013,16.5775925 C78.5608001,16.5775925 78.2081446,16.224937 78.2081446,15.7773357 C78.2081446,15.3297345 78.5608001,14.977079 79.0084013,14.977079 L79.7544034,14.977079 C80.2020047,14.977079 80.5546602,15.3297345 80.5546602,15.7773357 C80.5546602,16.224937 80.2020047,16.5775925 79.7544034,16.5775925 Z M72.6063472,16.5775925 L67.8048066,16.5775925 C67.3572053,16.5775925 67.0045498,16.224937 67.0045498,15.7773357 C67.0045498,15.3297345 67.3572053,14.977079 67.8048066,14.977079 L72.6063472,14.977079 C73.0539484,14.977079 73.406604,15.3297345 73.406604,15.7773357 C73.406604,16.224937 73.0539484,16.5775925 72.6063472,16.5775925 Z M43.2545565,11.7896155 C42.9290284,11.7896155 42.6306275,11.5725968 42.5085545,11.2741959 L42.3864814,10.9893588 C42.2237173,10.6231396 42.3593541,10.189102 42.6984459,9.9856469 C43.444448,7.74764068 45.5468175,4.56017728 49.7379927,4.56017728 C50.307667,4.56017728 50.9180324,4.61443198 51.5419614,4.73650504 C53.929168,5.18410629 56.3299383,6.58116471 58.6900176,8.85986195 C59.0019821,9.17182646 59.0155458,9.6736824 58.7035813,9.9856469 C58.3916168,10.3111751 57.8897608,10.3111751 57.5777963,9.99921057 C55.4482995,7.93753212 53.3188027,6.68967411 51.2435606,6.29632756 C50.7145773,6.20138184 50.2127213,6.14712714 49.7379927,6.14712714 C45.1263436,6.14712714 44.0819407,10.9351041 44.0412496,11.1385592 C43.9598676,11.5319057 43.6343394,11.7896155 43.2545565,11.7896155 Z M20.9694401,4.64155932 C20.7795486,4.64155932 20.6032209,4.57374095 20.4540205,4.45166789 C20.1149286,4.16683073 20.0742376,3.66497479 20.3590747,3.32588294 C21.4170413,2.07802493 22.8954818,1.15569509 24.7537051,0.57245711 C25.174179,0.43682037 25.6217803,0.680966503 25.757417,1.1014404 C25.8930538,1.52191429 25.6489076,1.96951554 25.2284337,2.10515228 C23.6686112,2.59344454 22.4478806,3.35301029 21.5798054,4.35672217 C21.430605,4.54661361 21.2000225,4.64155932 20.9694401,4.64155932 Z M32.8919096,1.95595186 C32.8240912,1.95595186 32.7562728,1.94238819 32.6748908,1.92882452 C32.2001622,1.80675145 31.7118699,1.69824206 31.210014,1.63042369 C30.7759764,1.56260532 30.4640119,1.15569509 30.5318303,0.721657525 C30.5996487,0.287619955 31.0065589,0.00278280005 31.4405964,0.0434738222 C32.0102708,0.124855866 32.5663814,0.246928933 33.0953647,0.382565673 C33.5158386,0.50463874 33.7735484,0.938676309 33.665039,1.3591502 C33.5700933,1.71180573 33.2445651,1.95595186 32.8919096,1.95595186 Z"
|
||||
id="path92" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(0.000000, 18.989144)"
|
||||
id="g98">
|
||||
<path
|
||||
d="M81.7618272,3.21737355 L2.455025,3.21737355 C1.57338619,3.21737355 0.854511465,2.49849883 0.854511465,1.61686001 C0.854511465,0.735221199 1.57338619,0.0163464741 2.455025,0.0163464741 L81.7618272,0.0163464741 C82.643466,0.0163464741 83.3623407,0.735221199 83.3623407,1.61686001 C83.3623407,2.49849883 82.643466,3.21737355 81.7618272,3.21737355 Z"
|
||||
id="path96" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<ellipse
|
||||
id="Oval"
|
||||
fill="#ededf0"
|
||||
opacity="0.5"
|
||||
cx="174.42477"
|
||||
cy="172.67894"
|
||||
rx="73.526253"
|
||||
ry="11.563125" />
|
||||
<path
|
||||
id="cloud-off"
|
||||
d="M 232.66609,50.155807 A 8.2118103,8.2118103 0 0 0 221.05286,38.54253 l -24.58739,24.587284 a 49.087021,49.087021 0 0 0 -82.69072,35.970548 c 0,1.448998 0.0696,2.914018 0.20861,4.384368 a 32.511588,32.511588 0 0 0 -16.633903,28.46635 27.562135,27.562135 0 0 0 5.298643,16.23286 22.799931,22.799931 0 0 0 4.2838,4.4793 l -7.176402,7.17673 a 8.2118072,8.2118072 0 1 0 11.613272,11.61322 z M 118.72657,140.86955 a 8.5946237,8.5946237 0 0 1 -2.68479,-2.19217 11.029135,11.029135 0 0 1 -2.26703,-6.7263 16.274355,16.274355 0 0 1 11.70415,-15.61263 l 4.92005,-1.48644 a 2.738162,2.738162 0 0 0 1.8737,-3.24418 l -1.16893,-5.00059 a 32.735029,32.735029 0 0 1 35.28314,-40.191861 31.860268,31.860268 0 0 1 18.36694,8.426592 z m 131.92616,-19.86871 a 40.800975,40.800975 0 0 1 -10.55455,27.3756 35.587128,35.587128 0 0 1 -25.2904,10.95024 h -71.10166 l 16.42536,-16.42536 h 54.6763 a 19.17354,19.17354 0 0 0 13.09966,-5.53393 24.393903,24.393903 0 0 0 6.31993,-16.36655 27.319807,27.319807 0 0 0 -25.05414,-27.140158 l 13.61114,-13.61313 a 43.833807,43.833807 0 0 1 27.86836,40.753288 z"
|
||||
style="fill:#45a1ff;fill-opacity:1;stroke-width:5.47512" />
|
||||
</svg>
|
Before Width: | Height: | Size: 25 KiB |
|
@ -1,76 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="64mm"
|
||||
height="64mm"
|
||||
viewBox="0 0 64 64"
|
||||
version="1.1"
|
||||
id="svg898"
|
||||
sodipodi:docname="icon-inkscape.svg"
|
||||
inkscape:export-filename="/home/timvisee/git/send/assets/favicon-32x32.png"
|
||||
inkscape:export-xdpi="12.7"
|
||||
inkscape:export-ydpi="12.7"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<defs
|
||||
id="defs892" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.979899"
|
||||
inkscape:cx="196.2752"
|
||||
inkscape:cy="146.91833"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="false"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:bbox-paths="true"
|
||||
inkscape:bbox-nodes="true"
|
||||
inkscape:snap-bbox-edge-midpoints="true"
|
||||
inkscape:snap-bbox-midpoints="true"
|
||||
inkscape:snap-nodes="true"
|
||||
inkscape:snap-page="true"
|
||||
inkscape:snap-object-midpoints="true"
|
||||
inkscape:snap-text-baseline="true"
|
||||
inkscape:snap-center="true"
|
||||
inkscape:snap-midpoints="true"
|
||||
inkscape:snap-smooth-nodes="true"
|
||||
inkscape:snap-intersection-paths="true"
|
||||
inkscape:object-paths="true"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1048"
|
||||
inkscape:window-x="1920"
|
||||
inkscape:window-y="32"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata895">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
id="cloud-upload"
|
||||
d="m 63.999948,34.285731 a 17.033293,17.033293 0 0 1 -4.406235,11.428568 14.856655,14.856655 0 0 1 -10.55805,4.571428 h -2.178561 v -6.857139 h 2.178561 A 8.0044292,8.0044292 0 0 0 54.504416,41.118327 10.183788,10.183788 0 0 0 57.14281,34.285731 11.442004,11.442004 0 0 0 45.714251,22.857173 c -0.37683,0 -2.312648,0.241803 -3.490288,0.393502 A 1.1359993,1.1359993 0 0 1 41.00286,22.487082 L 40.537483,21.129528 A 14.102711,14.102711 0 0 0 28.821257,11.497829 13.665957,13.665957 0 0 0 14.091416,28.276812 l 0.488099,2.087681 a 1.1428564,1.1428564 0 0 1 -0.782255,1.354176 l -2.053987,0.62062 a 6.7940986,6.7940986 0 0 0 -4.8860757,6.517846 4.6043628,4.6043628 0 0 0 0.9464197,2.808045 5.5388308,5.5388308 0 0 0 4.089282,1.763384 h 5.250006 v 6.857137 H 11.892899 A 12.235604,12.235604 0 0 1 2.2121047,45.633903 11.506439,11.506439 0 0 1 5.8514086e-5,38.857135 13.5727,13.5727 0 0 1 6.9442617,26.97321 C 6.8863778,26.359414 6.8571876,25.747771 6.8571876,25.142857 A 20.563484,20.563484 0 0 1 45.843766,16.000009 18.306983,18.306983 0 0 1 64,34.285707 Z M 32.923239,32.122512 a 1.1428564,1.1428564 0 0 0 -1.846543,0 l -8.591651,11.775239 a 1.1428564,1.1428564 0 0 0 0.923268,1.816548 h 5.163091 v 12.571418 a 1.1428564,1.1428564 0 0 0 1.14285,1.142858 h 4.571428 a 1.1428564,1.1428564 0 0 0 1.142859,-1.142858 V 45.714299 h 5.163084 a 1.1428564,1.1428564 0 0 0 0.923265,-1.816548 z"
|
||||
style="stroke-width:2.28572;fill:#000000;fill-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.6 KiB |
|
@ -20,7 +20,7 @@ class AndroidIndexPlugin {
|
|||
const page = html`
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<title>Send</title>
|
||||
<title>Firefox Send</title>
|
||||
<meta charset="utf-8" />
|
||||
<meta
|
||||
name="viewport"
|
||||
|
|
236
docs/AWS.md
|
@ -1,236 +0,0 @@
|
|||
# Deployment to AWS
|
||||
|
||||
This document describes how to do a deployment of Send in AWS
|
||||
|
||||
## AWS requirements
|
||||
|
||||
### Security groups (2)
|
||||
|
||||
* ALB:
|
||||
- inbound: allow traffic from anywhere on port 80 and 443
|
||||
- ountbound: allow traffic to the instance security group on port `8080`
|
||||
|
||||
* Instance:
|
||||
- inbound: allow SSH from your public IP or a bastion (changing the default SSH port is a good idea)
|
||||
- inbound: allow traffic from the ALB security group on port `8080`
|
||||
- ountbound: allow all traffic to anywhere
|
||||
|
||||
### Resources
|
||||
|
||||
* An S3 bucket (block all public access)
|
||||
|
||||
* A private EC2 instance running Ubuntu `20.04` (you can use the [Amazon EC2 AMI Locator](https://cloud-images.ubuntu.com/locator/ec2/) to find the latest)
|
||||
|
||||
Attach an IAM role to the instance with the following inline policy:
|
||||
|
||||
```json
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Action": [
|
||||
"s3:ListAllMyBuckets"
|
||||
],
|
||||
"Resource": [
|
||||
"*"
|
||||
],
|
||||
"Effect": "Allow"
|
||||
},
|
||||
{
|
||||
"Action": [
|
||||
"s3:ListBucket",
|
||||
"s3:GetBucketLocation",
|
||||
"s3:ListBucketMultipartUploads"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::<s3_bucket_name>"
|
||||
],
|
||||
"Effect": "Allow"
|
||||
},
|
||||
{
|
||||
"Action": [
|
||||
"s3:GetObject",
|
||||
"s3:GetObjectVersion",
|
||||
"s3:ListMultipartUploadParts",
|
||||
"s3:PutObject",
|
||||
"s3:AbortMultipartUpload",
|
||||
"s3:DeleteObject",
|
||||
"s3:DeleteObjectVersion"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::<s3_bucket_name>/*"
|
||||
],
|
||||
"Effect": "Allow"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
* A public ALB:
|
||||
|
||||
- Create a target group with the instance registered (HTTP on port `8080` and path `/`)
|
||||
- Configure HTTP (port 80) to redirect to HTTPS (port 443)
|
||||
- HTTPS (port 443) using the latest security policy and an ACM certificate like `send.mydomain.com`
|
||||
|
||||
* A Route53 public record, alias from `send.mydomain.com` to the ALB
|
||||
|
||||
## Software requirements
|
||||
|
||||
* Git
|
||||
* NodeJS `15.x` LTS
|
||||
* Local Redis server
|
||||
|
||||
### Prerequisite packages
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
|
||||
```
|
||||
|
||||
### Add repositories
|
||||
|
||||
* NodeJS `15.x` LTS (checkout [package.json](../package.json)):
|
||||
|
||||
```bash
|
||||
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | sudo apt-key add -
|
||||
echo 'deb [arch=amd64] https://deb.nodesource.com/node_15.x focal main' | sudo tee /etc/apt/sources.list.d/nodejs.list
|
||||
```
|
||||
|
||||
* Git (latest)
|
||||
|
||||
```bash
|
||||
sudo add-apt-repository ppa:git-core/ppa
|
||||
```
|
||||
|
||||
* Redis (latest)
|
||||
|
||||
```bash
|
||||
sudo add-apt-repository ppa:redislabs/redis
|
||||
```
|
||||
|
||||
### Install required packages
|
||||
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install git nodejs redis-server telnet
|
||||
```
|
||||
|
||||
### Redis server
|
||||
|
||||
#### Password (optional)
|
||||
|
||||
Generate a strong password:
|
||||
|
||||
```bash
|
||||
makepasswd --chars=100
|
||||
```
|
||||
|
||||
Edit Redis configuration file `/etc/redis/redis.conf`:
|
||||
|
||||
```bash
|
||||
requirepass <redis_password>
|
||||
```
|
||||
|
||||
_Note: documentation on securing Redis https://redis.io/topics/security_
|
||||
|
||||
#### Systemd
|
||||
|
||||
Enable and (re)start the Redis server service:
|
||||
|
||||
```bash
|
||||
sudo systemctl enable redis-server
|
||||
sudo systemctl restart redis-server
|
||||
sudo systemctl status redis-server
|
||||
```
|
||||
|
||||
## Website directory
|
||||
|
||||
Setup a directory for the data
|
||||
|
||||
```
|
||||
sudo mkdir -pv /var/www/send
|
||||
sudo chown www-data:www-data /var/www/send
|
||||
sudo 750 /var/www/send
|
||||
```
|
||||
|
||||
### NodeJS
|
||||
|
||||
Update npm:
|
||||
|
||||
```bash
|
||||
sudo npm install -g npm
|
||||
```
|
||||
|
||||
Checkout current NodeJS and npm versions:
|
||||
|
||||
```bash
|
||||
node --version
|
||||
npm --version
|
||||
```
|
||||
|
||||
Clone repository, install JavaScript packages and compiles the assets:
|
||||
|
||||
```bash
|
||||
sudo su -l www-data -s /bin/bash
|
||||
cd /var/www/send
|
||||
git clone https://gitlab.com/timvisee/send.git .
|
||||
npm install
|
||||
npm run build
|
||||
exit
|
||||
```
|
||||
|
||||
Create the file `/var/www/send/.env` used by Systemd with your environment variables
|
||||
(checkout [config.js](../server/config.js) for more configuration environment variables):
|
||||
|
||||
```
|
||||
BASE_URL='https://send.mydomain.com'
|
||||
NODE_ENV='production'
|
||||
PORT='8080'
|
||||
REDIS_PASSWORD='<redis_password>'
|
||||
S3_BUCKET='<s3_bucket_name>'
|
||||
```
|
||||
|
||||
Lower files and folders permissions to user and group `www-data`:
|
||||
|
||||
```
|
||||
sudo find /var/www/send -type d -exec chmod 750 {} \;
|
||||
sudo find /var/www/send -type f -exec chmod 640 {} \;
|
||||
sudo find -L /var/www/send/node_modules/.bin/ -exec chmod 750 {} \;
|
||||
```
|
||||
|
||||
### Systemd
|
||||
|
||||
Create the file `/etc/systemd/system/send.service` with `root` user and `644` mode:
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Send
|
||||
After=network.target
|
||||
Requires=redis-server.service
|
||||
Documentation=https://gitlab.com/timvisee/send
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/npm run prod
|
||||
EnvironmentFile=/var/www/send/.env
|
||||
WorkingDirectory=/var/www/send
|
||||
User=www-data
|
||||
Group=www-data
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
_Note: could be better tuner to secure the service by restricting system permissions,
|
||||
check with `systemd-analyze security send`_
|
||||
|
||||
Enable and start the Send service, check logs:
|
||||
|
||||
```
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable send
|
||||
sudo systemctl start send
|
||||
sudo systemctl status send
|
||||
journalctl -fu send
|
||||
```
|
|
@ -1,2 +1,2 @@
|
|||
# timvisee as main contact for string changes
|
||||
public/locales/en-US/*.ftl @timvisee
|
||||
# flod as main contact for string changes
|
||||
public/locales/en-US/*.ftl @flodolo
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
Adapted from [this spreadsheet](https://airtable.com/shrkcBPOLkvNFOrpp)
|
||||
|
||||
- [ ] It should look and feel of an Android App
|
||||
- [ ] It should look and feel like the Send Web Client
|
||||
- [ ] It should look and feel like the Firefox Send Web Client
|
||||
|
||||
### Main Screen
|
||||
- [ ] It should clearly Indicate the name of the product
|
||||
|
@ -59,7 +59,7 @@ Adapted from [this spreadsheet](https://airtable.com/shrkcBPOLkvNFOrpp)
|
|||
- [ ] It should allow users to opt into notifications when their link is downloaded
|
||||
|
||||
## Annotations on Mobile Spec
|
||||
This document tracks differences between the UX spec for Send and the intended MVP.
|
||||
This document tracks differences between the UX spec for Firefox Send and the intended MVP.
|
||||
|
||||
[Spec Link](https://mozilla.invisionapp.com/share/GNN6KKOQ5XS)
|
||||
|
||||
|
|
|
@ -1,96 +1,68 @@
|
|||
## Requirements
|
||||
This document describes how to do a full deployment of Firefox Send on your own Linux server. You will need:
|
||||
|
||||
This document describes how to do a full deployment of Send on your own Linux server. You will need:
|
||||
|
||||
* A working (and ideally somewhat recent) installation of NodeJS and npm
|
||||
* Git
|
||||
* Apache webserver
|
||||
* A working (and ideally somewhat recent) installation of NodeJS and NPM
|
||||
* GIT
|
||||
* An Apache webserver
|
||||
* Optionally telnet, to be able to quickly check your installation
|
||||
|
||||
For example in Debian/Ubuntu systems:
|
||||
For Debian/Ubuntu systems this probably just means something like this:
|
||||
|
||||
```bash
|
||||
sudo apt install git apache2 nodejs npm telnet
|
||||
```
|
||||
* apt install git apache2 nodejs npm telnet
|
||||
|
||||
## Building
|
||||
|
||||
* We assume an already configured virtual-host on your webserver with an existing empty htdocs folder
|
||||
* First, remove that htdocs folder - we will replace it with Send's version now
|
||||
* git clone https://github.com/timvisee/send.git htdocs
|
||||
* First, remove that htdocs folder - we will replace it with Firefox Send's version now
|
||||
* git clone https://github.com/mozilla/send.git htdocs
|
||||
* Make now sure you are NOT root but rather the user your webserver is serving files under (e.g. "su www-data" or whoever the owner of your htdocs folder is)
|
||||
* npm install
|
||||
* npm run build
|
||||
|
||||
## Running
|
||||
To have a permanently running version of Firefox Send as a background process:
|
||||
|
||||
To have a permanently running version of Send as a background process:
|
||||
|
||||
* Create a file `run.sh` with:
|
||||
|
||||
```bash
|
||||
* Create a file "run.sh" with:
|
||||
```
|
||||
#!/bin/bash
|
||||
nohup su www-data -c "npm run prod" 2>/dev/null &
|
||||
```
|
||||
* chmod +x run.sh
|
||||
* ./run.sh
|
||||
|
||||
* Execute the script:
|
||||
|
||||
```bash
|
||||
chmod +x run.sh
|
||||
./run.sh
|
||||
```
|
||||
|
||||
Now the Send backend should be running on port 1443. You can check with:
|
||||
|
||||
```bash
|
||||
telnet localhost 1443
|
||||
```
|
||||
Now the Firefox Send backend should be running on port 1443. You can check with:
|
||||
* telnet localhost 1443
|
||||
|
||||
## Reverse Proxy
|
||||
|
||||
Of course, we don't want to expose the service on port 1443. Instead we want our normal webserver to forward all requests to Send ("Reverse proxy").
|
||||
Of course, we don't want to expose the service on port 1443. Instead we want our normal webserver to forward all requests to Firefox send ("Reverse proxy").
|
||||
|
||||
# Apache webserver
|
||||
|
||||
* Enable Apache required modules:
|
||||
* a2enmod proxy
|
||||
* a2enmod proxy_http
|
||||
* a2enmod proxy_wstunnel
|
||||
|
||||
```bash
|
||||
sudo a2enmod headers
|
||||
sudo a2enmod proxy
|
||||
sudo a2enmod proxy_http
|
||||
sudo a2enmod proxy_wstunnel
|
||||
sudo a2enmod rewrite
|
||||
```
|
||||
|
||||
* Edit your Apache virtual host configuration file, insert this:
|
||||
In your Apache virtual host configuration file, insert this:
|
||||
|
||||
```
|
||||
# Enable rewrite engine
|
||||
RewriteEngine on
|
||||
# Enable rewrite engine
|
||||
RewriteEngine on
|
||||
|
||||
# Make sure the original domain name is forwarded to Send
|
||||
# Otherwise the generated URLs will be wrong
|
||||
ProxyPreserveHost on
|
||||
# Make sure the original domain name is forwarded to Send
|
||||
# Otherwise the generated URLs will be wrong
|
||||
ProxyPreserveHost on
|
||||
|
||||
# Make sure the generated URL is https://
|
||||
RequestHeader set X-Forwarded-Proto https
|
||||
# Make sure the generated URL is https://
|
||||
RequestHeader set X-Forwarded-Proto https
|
||||
|
||||
# If it's a normal file (e.g. PNG, CSS) just return it
|
||||
RewriteCond %{REQUEST_FILENAME} -f
|
||||
RewriteRule .* - [L]
|
||||
# If it's a normal file (e.g. PNG, CSS) just return it
|
||||
RewriteCond %{REQUEST_FILENAME} -f
|
||||
RewriteRule .* - [L]
|
||||
|
||||
# If it's a websocket connection, redirect it to a Send WS connection
|
||||
RewriteCond %{HTTP:Upgrade} =websocket [NC]
|
||||
RewriteRule /(.*) ws://127.0.0.1:1443/$1 [P,L]
|
||||
# If it's a websocket connection, redirect it to a Send WS connection
|
||||
RewriteCond %{HTTP:Upgrade} =websocket [NC]
|
||||
RewriteRule /(.*) ws://127.0.0.1:1443/$1 [P,L]
|
||||
|
||||
# Otherwise redirect it to a normal HTTP connection
|
||||
RewriteRule ^/(.*)$ http://127.0.0.1:1443/$1 [P,QSA]
|
||||
ProxyPassReverse "/" "http://127.0.0.1:1443"
|
||||
```
|
||||
|
||||
* Test configuration and restart Apache:
|
||||
|
||||
```bash
|
||||
sudo apache2ctl configtest
|
||||
sudo systemctl restart apache2
|
||||
# Otherwise redirect it to a normal HTTP connection
|
||||
RewriteRule ^/(.*)$ http://127.0.0.1:1443/$1 [P,QSA]
|
||||
ProxyPassReverse "/" "http://127.0.0.1:1443"
|
||||
```
|
||||
|
|
164
docs/docker.md
|
@ -1,160 +1,28 @@
|
|||
## Docker Quickstart
|
||||
## Setup
|
||||
|
||||
Use `registry.gitlab.com/timvisee/send:latest` from [`timvisee/send`'s Gitlab image registry](https://gitlab.com/timvisee/send/container_registry) for the latest Docker image.
|
||||
Run `docker build -t send:latest .` to create an image or `docker-compose up` to run a full testable stack. *We don't recommend using docker-compose for production.*
|
||||
|
||||
```bash
|
||||
docker pull registry.gitlab.com/timvisee/send:latest
|
||||
## Environment variables:
|
||||
|
||||
# example quickstart (point REDIS_HOST to an already-running redis server)
|
||||
docker run -v $PWD/uploads:/uploads -p 1443:1443 \
|
||||
-e 'DETECT_BASE_URL=true' \
|
||||
-e 'REDIS_HOST=localhost' \
|
||||
-e 'FILE_DIR=/uploads' \
|
||||
registry.gitlab.com/timvisee/send:latest
|
||||
```
|
||||
|
||||
Or clone this repo and run `docker build -t send:latest .` to build an image locally.
|
||||
|
||||
*Note: for Docker Compose, see: https://github.com/timvisee/send-docker-compose*
|
||||
|
||||
## Environment Variables
|
||||
|
||||
All the available config options and their defaults can be found here: https://github.com/timvisee/send/blob/master/server/config.js
|
||||
|
||||
Config options should be set as unquoted environment variables. Boolean options should be `true`/`false`, time/duration should be integers (seconds), and filesize values should be integers (bytes).
|
||||
|
||||
Config options expecting array values (e.g. `EXPIRE_TIMES_SECONDS`, `DOWNLOAD_COUNTS`) should be in unquoted CSV format. UI dropdowns will default to the first value in the CSV, e.g. `DOWNLOAD_COUNTS=5,1,10,100` will show four dropdown options, with `5` selected by the default.
|
||||
|
||||
#### Server Configuration
|
||||
|
||||
| Name | Description |
|
||||
| Name | Description
|
||||
|------------------|-------------|
|
||||
| `PORT` | Port the server will listen on (defaults to 1443).
|
||||
| `S3_BUCKET` | The S3 bucket name.
|
||||
| `REDIS_HOST` | Host name of the Redis server.
|
||||
| `SENTRY_CLIENT` | Sentry Client ID
|
||||
| `SENTRY_DSN` | Sentry DSN
|
||||
| `MAX_FILE_SIZE` | in bytes (defaults to 2147483648)
|
||||
| `NODE_ENV` | "production"
|
||||
| `BASE_URL` | The HTTPS URL where traffic will be served (e.g. `https://send.firefox.com`)
|
||||
| `DETECT_BASE_URL` | Autodetect the base URL using browser if `BASE_URL` is unset (defaults to `false`)
|
||||
| `PORT` | Port the server will listen on (defaults to `1443`)
|
||||
| `NODE_ENV` | Run in `development` mode (unsafe) or `production` mode (the default)
|
||||
| `SEND_FOOTER_DMCA_URL` | A URL to a contact page for DMCA requests (empty / not shown by default)
|
||||
| `SENTRY_CLIENT`, `SENTRY_DSN` | Sentry Client ID and DSN for error tracking (optional, disabled by default)
|
||||
|
||||
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*
|
||||
## Example:
|
||||
|
||||
#### Upload and Download Limits
|
||||
|
||||
Configure the limits for uploads and downloads. Long expiration times are risky on public servers as people may use you as free hosting for copyrighted content or malware (which is why Mozilla shut down their `send` service). It's advised to only expose your service on a LAN/intranet, password protect it with a proxy/gateway, or make sure to set `SEND_FOOTER_DMCA_URL` above so you can respond to takedown requests.
|
||||
|
||||
| Name | Description |
|
||||
|------------------|-------------|
|
||||
| `MAX_FILE_SIZE` | Maximum upload file size in bytes (defaults to `2147483648` aka 2GB)
|
||||
| `MAX_FILES_PER_ARCHIVE` | Maximum number of files per archive (defaults to `64`)
|
||||
| `MAX_EXPIRE_SECONDS` | Maximum upload expiry time in seconds (defaults to `604800` aka 7 days)
|
||||
| `MAX_DOWNLOADS` | Maximum number of downloads (defaults to `100`)
|
||||
| `DOWNLOAD_COUNTS` | Download limit options to show in UI dropdown, e.g. `10,1,2,5,10,15,25,50,100,1000`
|
||||
| `EXPIRE_TIMES_SECONDS` | Expire time options to show in UI dropdown, e.g. `3600,86400,604800,2592000,31536000`
|
||||
| `DEFAULT_DOWNLOADS` | Default download limit in UI (defaults to `1`)
|
||||
| `DEFAULT_EXPIRE_SECONDS` | Default expire time in UI (defaults to `86400`)
|
||||
|
||||
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*
|
||||
|
||||
#### Storage Backend Options
|
||||
|
||||
Pick how you want to store uploaded files and set these config options accordingly:
|
||||
|
||||
- Local filesystem (the default): set `FILE_DIR` to the local path used inside the container for storage (or leave the default)
|
||||
- S3-compatible object store: set `S3_BUCKET`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` (and `S3_ENDPOINT` if using something other than AWS)
|
||||
- Google Cloud Storage: set `GCS_BUCKET` to the name of a GCS bucket (auth should be set up using [Application Default Credentials](https://cloud.google.com/docs/authentication/production#auth-cloud-implicit-nodejs))
|
||||
|
||||
Redis is used as the metadata database for the backend and is required no matter which storage method you use.
|
||||
|
||||
| Name | Description |
|
||||
|------------------|-------------|
|
||||
| `REDIS_HOST`, `REDIS_PORT`, `REDIS_USER`, `REDIS_PASSWORD`, `REDIS_DB` | Host name, port, and pass of the Redis server (defaults to `localhost`, `6379`, and no password)
|
||||
| `FILE_DIR` | Directory for storage inside the Docker container (defaults to `/uploads`)
|
||||
| `S3_BUCKET` | The S3 bucket name to use (only set if using S3 for storage)
|
||||
| `S3_ENDPOINT` | An optional custom endpoint to use for S3 (defaults to AWS)
|
||||
| `S3_USE_PATH_STYLE_ENDPOINT`| Whether to force [path style URLs](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Config.html#s3ForcePathStyle-property) for S3 objects (defaults to `false`)
|
||||
| `AWS_ACCESS_KEY_ID` | S3 access key ID (only set if using S3 for storage)
|
||||
| `AWS_SECRET_ACCESS_KEY` | S3 secret access key ID (only set if using S3 for storage)
|
||||
| `GCS_BUCKET` | Google Cloud Storage bucket (only set if using GCP for storage)
|
||||
|
||||
*Note: more options can be found here: https://github.com/timvisee/send/blob/master/server/config.js*
|
||||
|
||||
## Branding
|
||||
|
||||
To change the look the colors aswell as some graphics can be changed via environment variables.
|
||||
See the table below for the variables and their default values.
|
||||
|
||||
| Name | Default | Description |
|
||||
|---|---|---|
|
||||
| UI_COLOR_PRIMARY | #0a84ff | The primary color |
|
||||
| UI_COLOR_ACCENT | #003eaa | The accent color (eg. for hover-effects) |
|
||||
| UI_CUSTOM_ASSETS_ANDROID_CHROME_192PX | | A custom icon for Android (192x192px) |
|
||||
| UI_CUSTOM_ASSETS_ANDROID_CHROME_512PX | | A custom icon for Android (512x512px) |
|
||||
| UI_CUSTOM_ASSETS_APPLE_TOUCH_ICON | | A custom icon for Apple |
|
||||
| UI_CUSTOM_ASSETS_FAVICON_16PX | | A custom favicon (16x16px) |
|
||||
| UI_CUSTOM_ASSETS_FAVICON_32PX | | A custom favicon (32x32px) |
|
||||
| UI_CUSTOM_ASSETS_ICON | | A custom icon (Logo on the top-left of the UI) |
|
||||
| UI_CUSTOM_ASSETS_SAFARI_PINNED_TAB | | A custom icon for Safari |
|
||||
| UI_CUSTOM_ASSETS_FACEBOOK | | A custom header image for Facebook |
|
||||
| UI_CUSTOM_ASSETS_TWITTER | | A custom header image for Twitter |
|
||||
| UI_CUSTOM_ASSETS_WORDMARK | | A custom wordmark (Text next to the logo) |
|
||||
| UI_CUSTOM_CSS | | Allows you to define a custom CSS file for custom styling |
|
||||
| CUSTOM_FOOTER_TEXT | | Allows you to define a custom footer |
|
||||
| CUSTOM_FOOTER_URL | | Allows you to define a custom URL in your footer |
|
||||
|
||||
Side note: If you define a custom URL and a custom footer, only the footer text will display, but will be hyperlinked to the URL.
|
||||
|
||||
## Examples
|
||||
|
||||
**Run using an Amazon Elasticache for the Redis DB, Amazon S3 for the storage backend, and Sentry for error reporting.**
|
||||
|
||||
```bash
|
||||
$ docker run -p 1443:1443 \
|
||||
```sh
|
||||
$ docker run --net=host -e 'NODE_ENV=production' \
|
||||
-e 'S3_BUCKET=testpilot-p2p-dev' \
|
||||
-e 'REDIS_HOST=dyf9s2r4vo3.bolxr4.0001.usw2.cache.amazonaws.com' \
|
||||
-e 'SENTRY_CLIENT=https://51e23d7263e348a7a3b90a5357c61cb2@sentry.prod.mozaws.net/168' \
|
||||
-e 'SENTRY_DSN=https://51e23d7263e348a7a3b90a5357c61cb2:65e23d7263e348a7a3b90a5357c61c44@sentry.prod.mozaws.net/168' \
|
||||
-e 'BASE_URL=https://send.example.com' \
|
||||
registry.gitlab.com/timvisee/send:latest
|
||||
-e 'BASE_URL=https://send.firefox.com' \
|
||||
mozilla/send:latest
|
||||
```
|
||||
|
||||
*Note: make sure to replace the example values above with your real values before running.*
|
||||
|
||||
|
||||
**Run totally self-hosted using the current filesystem directry (`$PWD`) to store the Redis data and file uploads, with a `5GB` upload limit, 1 month expiry, and contact URL set.**
|
||||
|
||||
```bash
|
||||
# create a network for the send backend and redis containers to talk to each other
|
||||
$ docker network create timviseesend
|
||||
|
||||
# start the redis container
|
||||
$ docker run --net=timviseesend -v $PWD/redis:/data redis-server --appendonly yes
|
||||
|
||||
# start the send backend container
|
||||
$ docker run --net=timviseesend -v $PWD/uploads:/uploads -p 1443:1443 \
|
||||
-e 'BASE_URL=http://localhost:1443' \
|
||||
-e 'MAX_FILE_SIZE=5368709120' \
|
||||
-e 'MAX_EXPIRE_SECONDS=2592000' \
|
||||
-e 'SEND_FOOTER_DMCA_URL=https://example.com/dmca-contact-info' \
|
||||
registry.gitlab.com/timvisee/send:latest
|
||||
```
|
||||
Then open http://localhost:1443 to view the UI. (change the `localhost` to your IP or hostname above to serve the UI to others)
|
||||
|
||||
To run with HTTPS, you will need to set up a reverse proxy with SSL termination in front of the backend. See Docker Compose below for an example setup.
|
||||
|
||||
|
||||
**Run with custom branding.**
|
||||
|
||||
```bash
|
||||
$ docker run -p 1443:1443 \
|
||||
-v $PWD/custom_assets:/app/dist/custom_assets \
|
||||
-e 'UI_COLOR_PRIMARY=#f00' \
|
||||
-e 'UI_COLOR_ACCENT=#a00' \
|
||||
-e 'UI_CUSTOM_ASSETS_ICON=custom_assets/logo.svg' \
|
||||
registry.gitlab.com/timvisee/send:latest
|
||||
```
|
||||
|
||||
## Docker Compose
|
||||
|
||||
For a Docker compose configuration example, see:
|
||||
|
||||
https://github.com/timvisee/send-docker-compose
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# File Encryption
|
||||
|
||||
Send uses 128-bit AES-GCM encryption via the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) to encrypt files in the browser before uploading them to the server. The code is in [app/keychain.js](../app/keychain.js).
|
||||
Send use 128-bit AES-GCM encryption via the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) to encrypt files in the browser before uploading them to the server. The code is in [app/keychain.js](../app/keychain.js).
|
||||
|
||||
## Steps
|
||||
|
||||
|
|
24
docs/faq.md
|
@ -1,12 +1,12 @@
|
|||
## How big of a file can I transfer with Send?
|
||||
## How big of a file can I transfer with Firefox Send?
|
||||
|
||||
There is a 2GB file size limit built in to Send, but this may be changed by the
|
||||
hoster. Send encrypts and decrypts the files in the browser which is great for
|
||||
security but will tax your system resources. In particular you can expect to
|
||||
see your memory usage go up by at least the size of the file when the transfer
|
||||
is processing. You can see [the results of some
|
||||
testing](https://github.com/mozilla/send/issues/170#issuecomment-314107793). For
|
||||
the most reliable operation on common computers, it’s probably best to stay
|
||||
There is a 2.5GB file size limit built in to Send(1GB for non-signed in users), however, in practice you may
|
||||
be unable to send files that large. Send encrypts and decrypts the files in
|
||||
the browser which is great for security but will tax your system resources. In
|
||||
particular you can expect to see your memory usage go up by at least the size
|
||||
of the file when the transfer is processing. You can see [the results of some
|
||||
testing](https://github.com/mozilla/send/issues/170#issuecomment-314107793).
|
||||
For the most reliable operation on common computers, it’s probably best to stay
|
||||
under a few hundred megabytes.
|
||||
|
||||
## Why is my browser not supported?
|
||||
|
@ -17,16 +17,16 @@ Many browsers support this standard and should work fine, but some have not
|
|||
implemented it yet (mobile browsers lag behind on this, in
|
||||
particular).
|
||||
|
||||
## Why does Send require JavaScript?
|
||||
## Why does Firefox Send require JavaScript?
|
||||
|
||||
Send uses JavaScript to:
|
||||
Firefox Send uses JavaScript to:
|
||||
|
||||
- Encrypt and decrypt files locally on the client instead of the server.
|
||||
- Render the user interface.
|
||||
- Manage translations on the website into [various different languages](https://github.com/timvisee/send#localization).
|
||||
- Manage translations on the website into [various different languages](https://github.com/mozilla/send#localization).
|
||||
- Collect data to help us improve Send in accordance with our [Terms & Privacy](https://send.firefox.com/legal).
|
||||
|
||||
Since Send is an open source project, you can see all of the cool ways we use JavaScript by [examining our code](https://github.com/timvisee/send/).
|
||||
Since Send is an open source project, you can see all of the cool ways we use JavaScript by [examining our code](https://github.com/mozilla/send/).
|
||||
|
||||
## How long are files available for?
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Localization
|
||||
|
||||
Send is localized in over 50 languages. We use the [fluent](http://projectfluent.org/) library and store our translations in [FTL](http://projectfluent.org/fluent/guide/) files in `public/locales/`. `en-US` is our base language.
|
||||
Send is localized in over 50 languages. We use the [fluent](http://projectfluent.org/) library and store our translations in [FTL](http://projectfluent.org/fluent/guide/) files in `public/locales/`. `en-US` is our base language, and other languages are managed by [pontoon](https://pontoon.mozilla.org/projects/test-pilot-firefox-send/).
|
||||
|
||||
## Process
|
||||
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
# Send V2 Metrics Definitions
|
||||
|
||||
## Key Value Prop
|
||||
|
||||
Quickly and privately transfer large files from any device to any device.
|
||||
|
||||
## Key Business Question to Answer
|
||||
|
||||
Is the value proposition of a large encrypted file transfer service enough to drive Firefox Account relationships for non-Firefox users.
|
||||
|
||||
## Hypotheses to Test
|
||||
|
||||
### Primary - In support of Relationships KPI
|
||||
|
||||
We believe that a privacy-respecting file transfer service can drive Firefox Accounts beyond the Firefox Browser.
|
||||
|
||||
We will know this to be true when we see 250k Firefox Account creations from non-Firefox contexts w/in six months of launch.
|
||||
|
||||
### Secondary - In support of Revenue KPI
|
||||
|
||||
We believe that a privacy respecting service accessible beyond the reach of Firefox will provide a valuable platform to research, communicate with, and market to conscious choosers we have traditionally found hard to reach.
|
||||
|
||||
We will know this to be true when we can conduct six research tasks (surveys, A/B tests, fake doors, etc) in support of premium services KPIs in the first six months after launch.
|
||||
|
||||
## Overview of Key Measures
|
||||
|
||||
* Number of people using the service to send and receive files
|
||||
* Why: measure of service size. Important for understanding addressable market size
|
||||
* Percent of users who have or create an FxAccount via Send
|
||||
* Why: representation of % of any service users who might be amenable to an upsell
|
||||
* % of downloaders who convert into uploaders
|
||||
* Why: represents a measure of our key growth-loop potential
|
||||
* Count of uploads and size
|
||||
* Why: Represents cost of service on a running basis
|
||||
|
||||
## Key Funnels
|
||||
* App Open or Visit `--- DESIRED OUTCOME --->` Successful Upload
|
||||
* Download UI Visit `--- DESIRED OUTCOME --->` Successful Download
|
||||
* FxA UI Engagement `--- DESIRED OUTCOME --->` Authenticate
|
||||
* **STRETCH** App Open or Visit `--- DESIRED OUTCOME --->` Successful Download
|
||||
|
||||
## Amplitude Schema
|
||||
|
||||
Please see, **See Amplitude HTTP API**(https://amplitude.zendesk.com/hc/en-us/articles/204771828) for HTTP API reference.
|
||||
|
||||
## Metric Events
|
||||
|
||||
In support of our KPIs we collect events from two separate contexts, server and client. The events are designed to have minimal correlation between contexts.
|
||||
|
||||
Server events collect lifecycle information about individual uploads but no user information; also time precision is truncated to hour increments. Client events collect information about how users interact with the UI but no upload identifiers.
|
||||
|
||||
### Server Events
|
||||
|
||||
Server events allow us to aggregate data about file lifecycle without collecting data about individual users. In this context `user_id` and `user_properties` describe the uploaded archive.
|
||||
|
||||
* `session_id` -1 (not part of a session)
|
||||
* `user_id` hash of (archive_id + owner_id)
|
||||
* `app_version` package.json version
|
||||
* `time` timestamp truncated to hour precision
|
||||
* `country`
|
||||
* `region`
|
||||
* `event_type` [server_upload | server_download | server_delete]
|
||||
* `user_properties`
|
||||
* `download_limit` set number of downloads
|
||||
* `time_limit` set expiry duration
|
||||
* `size` approximate size (log10)
|
||||
* `anonymous` true if anonymous, false if fxa
|
||||
* `event_properties`
|
||||
* `download_count` downloads completed
|
||||
* `ttl` time remaining before expiry truncated to hour
|
||||
* `agent` the browser name or first 6 characters of the user agent that made the request
|
||||
|
||||
### Client Events
|
||||
|
||||
Client events allow us to aggregate data about how the user interface is being used without tracking the lifecycle of individual files. In this context `user_id` and `user_properties` describe the user. The `user_id` and `device_id` change for all users at the beginning of each month.
|
||||
|
||||
* `session_id` timestamp
|
||||
* `user_id` hash of (fxa_id + Date.year + Date.month)
|
||||
* `device_id` hash of (localStorage random id + Date.year + Date.month)
|
||||
* `platform` [web | android]
|
||||
* `country`
|
||||
* `region`
|
||||
* `language`
|
||||
* `time` timestamp
|
||||
* `os_name`
|
||||
* `event_type` [client_visit | client_upload | client_download | client_delete | client_login | client_logout]
|
||||
* `event_properties`
|
||||
* `browser`
|
||||
* `browser_version`
|
||||
* `status` [ ok | error | cancel ]
|
||||
* Event specific properties (see below)
|
||||
* `user_properties`
|
||||
* `active_count` number of active uploads
|
||||
* `anonymous` true if anonymous, false if fxa
|
||||
* `experiments` list of experiment ids the user is participating in
|
||||
* `first_action` how this use came to Send the first time [ upload | download ]
|
||||
|
||||
#### Visit Event
|
||||
|
||||
* `entrypoint` [ upload | download ]
|
||||
|
||||
#### Upload Event
|
||||
|
||||
* `download_limit` download limit
|
||||
* `file_count` number of files
|
||||
* `password_protected` boolean
|
||||
* `size` approximate size (log10)
|
||||
* `time_limit` time limit
|
||||
* `duration` approximate transfer duration (log10)
|
||||
|
||||
#### Download Event
|
||||
|
||||
* `password_protected` boolean
|
||||
* `size` approximate size (log10)
|
||||
* `duration` approximate transfer duration (log10)
|
||||
|
||||
#### Delete Event
|
||||
|
||||
* `age` hours since uploaded
|
||||
* `downloaded` downloaded at least once
|
||||
|
||||
#### Login Event
|
||||
|
||||
* `trigger` [button | time | count | size]
|
||||
|
||||
#### Logout Event
|
||||
|
||||
* `trigger` [button | timeout]
|
|
@ -2,7 +2,7 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<title>Send</title>
|
||||
<title>Firefox Send</title>
|
||||
<link href="index.css" rel="stylesheet">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
</head>
|
||||
|
|
115
package.json
|
@ -1,13 +1,10 @@
|
|||
{
|
||||
"name": "send",
|
||||
"name": "firefox-send",
|
||||
"description": "File Sharing Experiment",
|
||||
"version": "3.4.23",
|
||||
"version": "3.0.22",
|
||||
"author": "Mozilla (https://mozilla.org)",
|
||||
"contributors": [
|
||||
"Tim Visee <3a4fb3964f@sinenomine.email> (https://timvisee.com)"
|
||||
],
|
||||
"repository": "gitlab:timvisee/send",
|
||||
"homepage": "https://gitlab.com/timvisee/send/",
|
||||
"repository": "mozilla/send",
|
||||
"homepage": "https://github.com/mozilla/send/",
|
||||
"license": "MPL-2.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
@ -26,18 +23,20 @@
|
|||
"release": "npm-run-all contributors changelog",
|
||||
"test": "npm-run-all test:*",
|
||||
"test:backend": "nyc --reporter=lcovonly mocha --reporter=min test/backend",
|
||||
"test:frontend": "cross-env NODE_ENV=development node test/frontend/runner.js",
|
||||
"test:frontend": "cross-env NODE_ENV=development FXA_REQUIRED=false node test/frontend/runner.js",
|
||||
"test:report": "nyc report --reporter=html",
|
||||
"test-integration": "cross-env NODE_ENV=development wdio test/wdio.docker.conf.js",
|
||||
"circleci-test-integration": "echo 'webdriverio tests need to be updated to node 12'",
|
||||
"start": "npm run clean && cross-env NODE_ENV=development L10N_DEV=true BASE_URL=http://localhost:8080 DETECT_BASE_URL=true webpack-dev-server --mode=development",
|
||||
"start": "npm run clean && cross-env NODE_ENV=development L10N_DEV=true FXA_CLIENT_ID=fced6b5e3f4c66b9 BASE_URL=http://localhost:1337 webpack-dev-server --port=1337 --mode=development",
|
||||
"android": "cross-env ANDROID=1 npm start",
|
||||
"prod": "node server/bin/prod.js"
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "lint-staged",
|
||||
"pre-push": "npm test"
|
||||
"pre-push": "npm test",
|
||||
"post-merge": "npm install",
|
||||
"post-checkout": "scripts/sync-npm-dependencies.sh"
|
||||
}
|
||||
},
|
||||
"lint-staged": {
|
||||
|
@ -59,99 +58,97 @@
|
|||
"cache": true
|
||||
},
|
||||
"engines": {
|
||||
"node": "^16.13.0"
|
||||
"node": "^12.16.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.17.9",
|
||||
"@babel/plugin-proposal-class-properties": "^7.16.7",
|
||||
"@babel/core": "^7.10.5",
|
||||
"@babel/plugin-proposal-class-properties": "^7.10.4",
|
||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||
"@babel/preset-env": "^7.16.11",
|
||||
"@babel/preset-env": "^7.10.4",
|
||||
"@dannycoates/webcrypto-liner": "^0.1.37",
|
||||
"@fullhuman/postcss-purgecss": "^4.1.3",
|
||||
"@fullhuman/postcss-purgecss": "^1.3.0",
|
||||
"@mattiasbuelens/web-streams-polyfill": "0.2.1",
|
||||
"@sentry/browser": "^5.30.0",
|
||||
"@sentry/browser": "^5.20.1",
|
||||
"asmcrypto.js": "^0.22.0",
|
||||
"babel-loader": "^8.2.4",
|
||||
"babel-loader": "^8.0.6",
|
||||
"babel-plugin-istanbul": "^5.2.0",
|
||||
"base64-js": "^1.5.1",
|
||||
"content-disposition": "^0.5.4",
|
||||
"copy-webpack-plugin": "^6.4.0",
|
||||
"core-js": "^3.21.1",
|
||||
"crc": "^3.8.0",
|
||||
"base64-js": "^1.3.1",
|
||||
"content-disposition": "^0.5.3",
|
||||
"copy-webpack-plugin": "^5.0.5",
|
||||
"core-js": "^3.4.0",
|
||||
"cross-env": "^6.0.3",
|
||||
"css-loader": "^5.2.7",
|
||||
"css-loader": "^3.2.0",
|
||||
"css-mqpacker": "^7.0.0",
|
||||
"cssnano": "^5.1.12",
|
||||
"cssnano": "^4.1.10",
|
||||
"eslint": "^6.6.0",
|
||||
"eslint-config-prettier": "^6.15.0",
|
||||
"eslint-config-prettier": "^6.5.0",
|
||||
"eslint-plugin-mocha": "^6.2.1",
|
||||
"eslint-plugin-node": "^10.0.0",
|
||||
"eslint-plugin-security": "^1.4.0",
|
||||
"expose-loader": "^0.7.5",
|
||||
"extract-loader": "^3.2.0",
|
||||
"extract-loader": "^3.1.0",
|
||||
"extract-text-webpack-plugin": "^4.0.0-beta.0",
|
||||
"fast-text-encoding": "^1.0.3",
|
||||
"file-loader": "^6.2.0",
|
||||
"git-rev-sync": "^3.0.2",
|
||||
"file-loader": "^4.2.0",
|
||||
"git-rev-sync": "^1.12.0",
|
||||
"html-loader": "^0.5.5",
|
||||
"http_ece": "^1.1.0",
|
||||
"husky": "^3.0.9",
|
||||
"intl-pluralrules": "^1.3.1",
|
||||
"intl-pluralrules": "^1.1.1",
|
||||
"lint-staged": "^9.4.2",
|
||||
"mocha": "^10.1.0",
|
||||
"mocha": "^6.2.2",
|
||||
"morgan": "^1.9.1",
|
||||
"nanobus": "^4.5.0",
|
||||
"nanobus": "^4.4.0",
|
||||
"nanohtml": "^1.9.0",
|
||||
"nanotiming": "^7.3.1",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"nyc": "^14.1.1",
|
||||
"postcss": "^8.4.14",
|
||||
"postcss-loader": "^4.2.0",
|
||||
"postcss-preset-env": "^7.7.2",
|
||||
"postcss-loader": "^3.0.0",
|
||||
"postcss-preset-env": "^6.7.0",
|
||||
"prettier": "^1.19.1",
|
||||
"proxyquire": "^2.1.3",
|
||||
"puppeteer": "^2.0.0",
|
||||
"raw-loader": "^3.1.0",
|
||||
"redis-mock": "^0.47.0",
|
||||
"rimraf": "^3.0.0",
|
||||
"script-loader": "^0.7.2",
|
||||
"sinon": "^7.5.0",
|
||||
"string-hash": "^1.1.3",
|
||||
"stylelint": "^14.9.1",
|
||||
"stylelint-config-standard": "^26.0.0",
|
||||
"stylelint-no-unsupported-browser-features": "^5.0.3",
|
||||
"svgo": "^2.8.0",
|
||||
"svgo-loader": "^3.0.1",
|
||||
"tailwindcss": "^2",
|
||||
"val-loader": "^2.1.2",
|
||||
"stylelint": "^11.1.1",
|
||||
"stylelint-config-standard": "^19.0.0",
|
||||
"stylelint-no-unsupported-browser-features": "^3.0.2",
|
||||
"svgo": "^1.3.2",
|
||||
"svgo-loader": "^2.2.1",
|
||||
"tailwindcss": "^1.1.3",
|
||||
"val-loader": "^1.1.1",
|
||||
"webpack": "4.38.0",
|
||||
"webpack-cli": "^3.3.12",
|
||||
"webpack-dev-middleware": "^3.7.3",
|
||||
"webpack-dev-server": "^3.11.3",
|
||||
"webpack-dev-middleware": "^3.7.2",
|
||||
"webpack-dev-server": "^3.11.0",
|
||||
"webpack-manifest-plugin": "^2.2.0",
|
||||
"webpack-unassert-loader": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@dannycoates/express-ws": "^5.0.3",
|
||||
"@fluent/bundle": "^0.17.1",
|
||||
"@fluent/langneg": "^0.6.2",
|
||||
"@google-cloud/storage": "^6.2.3",
|
||||
"@sentry/node": "^7.7.0",
|
||||
"aws-sdk": "^2.1109.0",
|
||||
"body-parser": "^1.20.0",
|
||||
"@fluent/bundle": "^0.13.0",
|
||||
"@fluent/langneg": "^0.3.0",
|
||||
"@google-cloud/storage": "^5.1.2",
|
||||
"@peculiar/webcrypto": "^1.1.1",
|
||||
"@sentry/node": "^5.20.1",
|
||||
"aws-sdk": "^2.568.0",
|
||||
"body-parser": "^1.19.0",
|
||||
"choo": "^7.0.0",
|
||||
"cldr-core": "^35.1.0",
|
||||
"configstore": "github:dannycoates/configstore#master",
|
||||
"convict": "^6.2.4",
|
||||
"convict-format-with-validator": "^6.2.0",
|
||||
"double-ended-queue": "^2.1.0-0",
|
||||
"express": "^4.17.3",
|
||||
"convict": "^5.2.0",
|
||||
"express": "^4.17.1",
|
||||
"helmet": "^3.23.3",
|
||||
"mozlog": "^3.0.1",
|
||||
"node-fetch": "^2.6.7",
|
||||
"redis": "^3.1.1",
|
||||
"redis-mock": "^0.47.0",
|
||||
"selenium-standalone": "^6.24.0",
|
||||
"ua-parser-js": "^0.7.31"
|
||||
"mkdirp": "^0.5.1",
|
||||
"mozlog": "^2.2.0",
|
||||
"node-fetch": "^2.6.0",
|
||||
"redis": "^3.0.2",
|
||||
"selenium-standalone": "^6.15.6",
|
||||
"ua-parser-js": "^0.7.21"
|
||||
},
|
||||
"availableLanguages": [
|
||||
"en-US",
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
const TailwindExtractor = content => {
|
||||
class TailwindExtractor {
|
||||
static extract(content) {
|
||||
return content.match(/[A-Za-z0-9-_:/]+/g) || [];
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
const options = {
|
||||
plugins: [
|
||||
|
|
|
@ -2,16 +2,21 @@
|
|||
"name": "firefox-send",
|
||||
"description": "File Sharing Experiment",
|
||||
"repository": {
|
||||
"url": "https://github.com/send/send/",
|
||||
"url": "https://github.com/mozilla/send/",
|
||||
"license": "MPL-2.0"
|
||||
},
|
||||
"participate": {
|
||||
"home": "https://github.com/send/send/blob/master/README.md",
|
||||
"docs": "https://github.com/send/send/blob/master/README.md"
|
||||
"home": "https://github.com/mozilla/send/blob/master/README.md",
|
||||
"docs": "https://github.com/mozilla/send/blob/master/README.md"
|
||||
},
|
||||
"bugs": {
|
||||
"list": "https://gitlab.com/send/send/issues",
|
||||
"report": "https://gitlab.com/send/send/issues/new"
|
||||
"list": "https://github.com/mozilla/send/issues",
|
||||
"report": "https://github.com/mozilla/send/issues/new"
|
||||
},
|
||||
"urls": {
|
||||
"prod": "https://send.firefox.com/",
|
||||
"stage": "https://stage.send.nonprod.cloudops.mozgcp.net/",
|
||||
"dev": "https://send2.dev.lcip.org/"
|
||||
},
|
||||
"keywords": [
|
||||
"JavaScript",
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
title = Send
|
||||
# Firefox Send is a brand name and should not be localized.
|
||||
title = Firefox Send
|
||||
importingFile = Se ye importando…
|
||||
encryptingFile = Se ye cifrando…
|
||||
decryptingFile = Se ye descifrando…
|
||||
|
@ -18,19 +19,22 @@ unlockButtonLabel = Desblocar
|
|||
downloadButtonLabel = Descargar
|
||||
downloadFinish = Descarga completa
|
||||
fileSizeProgress = ({ $partialSize } de { $totalSize })
|
||||
sendYourFilesLink = Preba Send
|
||||
sendYourFilesLink = Preba Firefox Send
|
||||
errorPageHeader = I ha habiu bell problema!
|
||||
fileTooBig = Ixe fichero ye masiau gran pa cargar-lo. Ha de tener menos de { $size }
|
||||
linkExpiredAlt = Lo vinclo ye caducau
|
||||
notSupportedHeader = Lo suyo navegador no ye compatible
|
||||
notSupportedLink = Per qué no ye compatible lo mío navegador?
|
||||
notSupportedOutdatedDetail = Esta versión de Firefox no admite la tecnolochía web con que funciona lo Send. Habrás d'esviellar lo navegador.
|
||||
notSupportedOutdatedDetail = Esta versión de Firefox no admite la tecnolochía web con que funciona lo Firefox Send. Habrás d'esviellar lo navegador.
|
||||
updateFirefox = Esviellar Firefox
|
||||
deletePopupCancel = Cancelar
|
||||
deleteButtonHover = Borrar
|
||||
footerLinkLegal = Aviso legal
|
||||
footerLinkPrivacy = Privacidat
|
||||
footerLinkCookies = Cookies
|
||||
passwordTryAgain = La contrasenya ye incorrecta. Torne-lo a intentar.
|
||||
javascriptRequired = Send necesita JavaScript
|
||||
whyJavascript = Per qué Send necesita JavaScript?
|
||||
javascriptRequired = Firefox Send necesita JavaScript
|
||||
whyJavascript = Per qué Firefox Send necesita JavaScript?
|
||||
enableJavascript = Activa JavaScript y torna-lo a intentar.
|
||||
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
|
||||
expiresHoursMinutes = { $hours } h { $minutes } min
|
||||
|
@ -43,7 +47,8 @@ passwordSetError = No s'ha puesto definir la clau
|
|||
|
||||
## Send version 2 strings
|
||||
|
||||
-send-brand = Send
|
||||
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
|
||||
-send-brand = Firefox Send
|
||||
-send-short-brand = Send
|
||||
-firefox = Firefox
|
||||
-mozilla = Mozilla
|
||||
|
@ -110,6 +115,7 @@ legalDateStamp = Versió 1.0, con data d'o 12 de marzo de 2019
|
|||
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
|
||||
expiresDaysHoursMinutes = { $days } d { $hours } h { $minutes } min
|
||||
addFilesButton = Triar los fichers a cargar
|
||||
trustWarningMessage = Asegura-te de que confías en o destinatario quan compartas datos confidencials.
|
||||
uploadButton = Cargar
|
||||
# the first part of the string 'Drag and drop files or click to send up to 1GB'
|
||||
dragAndDropFiles = Arrociega y suelta los fichers
|
||||
|
@ -147,3 +153,33 @@ shareLinkButton = Compartir lo vinclo
|
|||
shareMessage = Baixa-te «{ $name }» con { -send-brand }: compartición de fiches simpla y segura
|
||||
trailheadPromo = I hai una manera de protecher la tuya privacidat. Une-te a Firefox.
|
||||
learnMore = Mas información
|
||||
downloadFlagged = Este vinclo s'ha desactivau per violar las condiciones d'uso.
|
||||
downloadConfirmTitle = Una coseta mas
|
||||
downloadConfirmDescription = Asegura-te de que confías en a persona que t'ha ninviau este fichero, perque no podemos verificar que no danyará lo tuyo dispositivo.
|
||||
# This string has a special case for '1' and [other] (default). If necessary for
|
||||
# your language, you can add {$count} to your translations and use the
|
||||
# standard CLDR forms, or only use the form for [other] if both strings should
|
||||
# be identical.
|
||||
downloadTrustCheckbox =
|
||||
{ $count ->
|
||||
[one] Confío en a persona que ha ninviau este fichero
|
||||
*[other] Confío en a persona que ha ninviau estes fichers
|
||||
}
|
||||
# This string has a special case for '1' and [other] (default). If necessary for
|
||||
# your language, you can add {$count} to your translations and use the
|
||||
# standard CLDR forms, or only use the form for [other] if both strings should
|
||||
# be identical.
|
||||
reportFile =
|
||||
{ $count ->
|
||||
[one] Sinyalar este fichero como sospeitoso
|
||||
*[other] Sinyalar estes fichers como sospeitoso
|
||||
}
|
||||
reportDescription = Aduya-nos a comprender qué ha pasau. Quál creyes que ye lo problema con estes fichers?
|
||||
reportUnknownDescription = Vest ta la URL d'o vinclo que quiers sinyalar y fe clic en « { reportFile } ».
|
||||
reportButton = Informar
|
||||
reportReasonMalware = Estes fichers contienen malware u fan parte d'un ataque de phishing.
|
||||
reportReasonPii = Estes fichers contienen información personal identificable sobre yo.
|
||||
reportReasonAbuse = Estes fichers contienen conteniu ilegal u abusivo.
|
||||
reportReasonCopyright = Pa informar sobre una violación de dreitos d'autor u de marca, sigue lo procedimiento descrito en <a>esta pachina</a>.
|
||||
reportedTitle = Fichers sinyalaus
|
||||
reportedDescription = Gracias. Hemos recibiu lo tuyo informe sobre estes fichers.
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
# Firefox Send is a brand name and should not be localized.
|
||||
title = فَيَرفُكس سِنْد
|
||||
siteFeedback = الانطباعات
|
||||
importingFile = يستورد…
|
||||
encryptingFile = يعمّي…
|
||||
decryptingFile = يفك التعمية…
|
||||
|
@ -36,6 +38,9 @@ notSupportedOutdatedDetail = للأسف فإن إصدارة فَيَرفُكس
|
|||
updateFirefox = حدّث فَيَرفُكس
|
||||
deletePopupCancel = ألغِ
|
||||
deleteButtonHover = احذف
|
||||
footerLinkLegal = القانونية
|
||||
footerLinkPrivacy = الخصوصية
|
||||
footerLinkCookies = الكعكات
|
||||
passwordTryAgain = كلمة السر خاطئة. أعِد المحاولة.
|
||||
javascriptRequired = يتطلب فَيَرفُكس سِنْد جافاسكربت
|
||||
whyJavascript = لماذا يتطلب فَيَرفُكس سِنْد جافاسكربت؟
|
||||
|
@ -51,7 +56,8 @@ passwordSetError = يجب ألا تُضبط كلمة السر هذه
|
|||
|
||||
## Send version 2 strings
|
||||
|
||||
-send-brand = Send
|
||||
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
|
||||
-send-brand = Firefox Send
|
||||
-send-short-brand = Send
|
||||
-firefox = Firefox
|
||||
-mozilla = Mozilla
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
title = Send
|
||||
# Firefox Send is a brand name and should not be localized.
|
||||
title = Firefox Send
|
||||
importingFile = Importando...
|
||||
encryptingFile = Cifrando...
|
||||
decryptingFile = Descifrando...
|
||||
|
@ -18,19 +19,22 @@ unlockButtonLabel = Desbloquiar
|
|||
downloadButtonLabel = Baxar
|
||||
downloadFinish = Completóse la descarga
|
||||
fileSizeProgress = ({ $partialSize } de { $totalSize })
|
||||
sendYourFilesLink = Probar Send
|
||||
sendYourFilesLink = Probar Firefox Send
|
||||
errorPageHeader = ¡Asocedió daqué malo!
|
||||
fileTooBig = Esti ficheru ye mui grande como pa xubilu. Debería tener menos de { $size }.
|
||||
linkExpiredAlt = Caducó l'enllaz
|
||||
notSupportedHeader = El to restolador nun ta sofitáu.
|
||||
notSupportedLink = ¿Por qué'l mio restolador nun ta sofitáu?
|
||||
notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Send. Vas precisar anovar el restolador.
|
||||
notSupportedOutdatedDetail = Desafortunadamente esta versión de Firefox nun sofita la teunoloxía web qu'usa Firefox Send. Vas precisar anovar el restolador.
|
||||
updateFirefox = Anovar Firefox
|
||||
deletePopupCancel = Encaboxar
|
||||
deleteButtonHover = Desaniciar
|
||||
footerLinkLegal = Llegal
|
||||
footerLinkPrivacy = Privacidá
|
||||
footerLinkCookies = Cookies
|
||||
passwordTryAgain = La contraseña ye incorreuta. Volvi tentalo.
|
||||
javascriptRequired = Send rique JavaScript
|
||||
whyJavascript = ¿Por qué Send rique JavaScript?
|
||||
javascriptRequired = Firefox Send rique JavaScript
|
||||
whyJavascript = ¿Por qué Firefox Send rique JavaScript?
|
||||
enableJavascript = Activa JavaScript y volvi tentalo, por favor.
|
||||
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
|
||||
expiresHoursMinutes = { $hours }h { $minutes }m
|
||||
|
@ -43,7 +47,8 @@ passwordSetError = Nun pudo afitase esta contraseña
|
|||
|
||||
## Send version 2 strings
|
||||
|
||||
-send-brand = Send
|
||||
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
|
||||
-send-brand = Firefox Send
|
||||
-send-short-brand = Send
|
||||
-firefox = Firefox
|
||||
-mozilla = Mozilla
|
||||
|
@ -93,14 +98,14 @@ trySendDescription = Prueba { -send-brand } pa una compartición de ficheros cen
|
|||
# count will always be > 10
|
||||
tooManyFiles =
|
||||
{ $count ->
|
||||
[one] Namái pue xubise 1 ficheru al empar.
|
||||
*[other] Namái puen xubise { $count } ficheros al empar.
|
||||
[one] Namás pue xubise 1 ficheru al empar.
|
||||
*[other] Namás puen xubise { $count } ficheros al empar.
|
||||
}
|
||||
# count will always be > 10
|
||||
tooManyArchives =
|
||||
{ $count ->
|
||||
[one] Namái se permite 1 archivu
|
||||
*[other] Namái se permiten { $count } archivos
|
||||
[one] Namás se permite 1 archivu
|
||||
*[other] Namás se permiten { $count } archivos
|
||||
}
|
||||
expiredTitle = Esti enllaz caducó.
|
||||
notSupportedDescription = { -send-brand } nun va funcionar con esti restolador. { -send-short-brand } funciona meyor cola última versión de { -firefox } y l'actual de la mayoría de restoladores.
|
||||
|
@ -110,6 +115,7 @@ legalDateStamp = Versión 1.0, con data del 12 de marzu de 2019
|
|||
# A short representation of a countdown timer containing the number of days, hours, and minutes remaining as digits, example "2d 11h 56m"
|
||||
expiresDaysHoursMinutes = { $days }d { $hours }h { $minutes }m
|
||||
addFilesButton = Esbillar los ficheros a unviar
|
||||
trustWarningMessage = Asegúrate de que t'enfotes nel destinatariu al compartir datos sensibles.
|
||||
uploadButton = Xubir
|
||||
# the first part of the string 'Drag and drop files or click to send up to 1GB'
|
||||
dragAndDropFiles = Arrastra y suelta ficheros
|
||||
|
@ -138,3 +144,9 @@ downloadingTitle = Baxando
|
|||
noStreamsWarning = Esti restolador quiciabes nun seya a descifrar un ficheru d'esti tamañu.
|
||||
trailheadPromo = Hai un mou de protexer la to privacidá. Xúnite a Firefox.
|
||||
learnMore = Deprender más.
|
||||
downloadFlagged = Esti enllaz desactivóse por violar los términos del serviciu.
|
||||
downloadConfirmTitle = Una cosa más
|
||||
reportReasonMalware = Estos ficheros contienen malware o son parte d'un ataque de phishing
|
||||
reportReasonPii = Estos ficheros contienen información que m'identifica.
|
||||
reportReasonAbuse = Estos ficheros contienen conteníu illegal o abusivu.
|
||||
reportedDescription = Gracies. Recibiemos l'informe tocante a estos ficheros.
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
title = Send
|
||||
# Firefox Send is a brand name and should not be localized.
|
||||
title = Firefox Send
|
||||
siteFeedback = Geri dönüş
|
||||
importingFile = İdxal edilir…
|
||||
encryptingFile = Şifrələnir...
|
||||
decryptingFile = Şifrə açılır...
|
||||
|
@ -18,19 +20,22 @@ unlockButtonLabel = Aç
|
|||
downloadButtonLabel = Endir
|
||||
downloadFinish = Endirmə Tamamlandı
|
||||
fileSizeProgress = ({ $partialSize } / { $totalSize })
|
||||
sendYourFilesLink = Send Yoxla
|
||||
sendYourFilesLink = Firefox Send Yoxla
|
||||
errorPageHeader = Nəsə səhv getdi!
|
||||
fileTooBig = Fayl yükləmək üçün çox böyükdür. Fayl { $size }-dan az olmalıdır.
|
||||
linkExpiredAlt = Keçidin vaxtı çıxıb
|
||||
notSupportedHeader = Səyyahınız dəstəklənmir.
|
||||
notSupportedLink = Səyyahım niyə dəstəklənmir?
|
||||
notSupportedOutdatedDetail = Heyf ki, Firefox səyyahının bu versiyası Send-ə güc verən web texnologiyalarını dəstəkləmir. Səyyahınızı yeniləməlisiniz.
|
||||
notSupportedOutdatedDetail = Heyf ki, Firefox səyyahının bu versiyası Firefox Send-ə güc verən web texnologiyalarını dəstəkləmir. Səyyahınızı yeniləməlisiniz.
|
||||
updateFirefox = Firefox-u Yenilə
|
||||
deletePopupCancel = Ləğv et
|
||||
deleteButtonHover = Sil
|
||||
footerLinkLegal = Hüquqi
|
||||
footerLinkPrivacy = Məxfilik
|
||||
footerLinkCookies = Çərəzlər
|
||||
passwordTryAgain = Səhv parol. Təkrar yoxlayın.
|
||||
javascriptRequired = Send üçün JavaScript lazımdır
|
||||
whyJavascript = Send niyə JavaScript tələb edir?
|
||||
javascriptRequired = Firefox Send üçün JavaScript lazımdır
|
||||
whyJavascript = Firefox Send niyə JavaScript tələb edir?
|
||||
enableJavascript = Lütfən JavaScript-i aktiv edib təkrar yoxlayın.
|
||||
# A short representation of a countdown timer containing the number of hours and minutes remaining as digits, example "13h 47m"
|
||||
expiresHoursMinutes = { $hours } saat { $minutes } dəq
|
||||
|
@ -43,7 +48,8 @@ passwordSetError = Parol qurula bilmədi
|
|||
|
||||
## Send version 2 strings
|
||||
|
||||
-send-brand = Send
|
||||
# Firefox Send, Send, Firefox, Mozilla are proper names and should not be localized
|
||||
-send-brand = Firefox Send
|
||||
-send-short-brand = Send
|
||||
-firefox = Firefox
|
||||
-mozilla = Mozilla
|
||||
|
|