Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
873dc440b8
|
||
|
|
123a65addf
|
||
|
|
c5b703efe8
|
||
|
|
4a69fb5e62
|
||
|
|
908ae6b779
|
||
|
|
d68352ba9b
|
||
|
|
d1bece9cfe
|
||
|
|
182d44d2f3
|
||
|
|
27bc87cf5c
|
||
|
|
82dc2545b9
|
||
|
|
74398852d6
|
||
|
|
a2ebfb435c
|
||
|
|
032f3690d2
|
||
|
|
76c39a7c2e
|
@@ -6,6 +6,10 @@ set shell := ["bash", "-uc"]
|
||||
outdir := "out"
|
||||
report_out_path := outdir / "report.pdf"
|
||||
summary_out_path := outdir / "summary.pdf"
|
||||
poster_out_path := outdir / "poster.pdf"
|
||||
presentation_out_path := outdir / "presentation.pdf"
|
||||
presentation_handout_path := outdir / "presentation_handout.pdf"
|
||||
presentation_pdfpc_path := outdir / "presentation.pdfpc"
|
||||
|
||||
default: all
|
||||
|
||||
@@ -35,4 +39,17 @@ report: _setup
|
||||
summary: _setup
|
||||
typst c --root . summary/exec_summary.typ {{summary_out_path}}
|
||||
|
||||
all: report summary
|
||||
poster: _setup
|
||||
typst c --root . poster/poster.typ {{poster_out_path}}
|
||||
|
||||
presentation: _setup
|
||||
typst c --root . presentation/presentation.typ {{presentation_out_path}}
|
||||
typst eval --root . 'query(<pdfpc-file>).first().value' --in presentation/presentation.typ > {{presentation_pdfpc_path}}
|
||||
|
||||
presentation-handout: _setup
|
||||
typst c --root . --input handout=true presentation/presentation.typ {{presentation_handout_path}}
|
||||
|
||||
present: presentation
|
||||
pdfpc {{presentation_out_path}}
|
||||
|
||||
all: report summary poster presentation presentation-handout
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
@@ -0,0 +1,26 @@
|
||||
import qrcode
|
||||
import qrcode.constants
|
||||
from qrcode.image.svg import SvgPathImage
|
||||
|
||||
|
||||
def main():
|
||||
urls: dict[str, str | tuple[str, int | None]] = {
|
||||
"gitea": "https://git.kb28.ch/HEL/midas",
|
||||
"github": "https://github.com/LordBaryhobal/midas",
|
||||
"docs": "https://git.kb28.ch/HEL/TB-Docs",
|
||||
}
|
||||
|
||||
factory = SvgPathImage
|
||||
for name, url in urls.items():
|
||||
version: int | None = 4
|
||||
if isinstance(url, tuple):
|
||||
url, version = url
|
||||
qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_Q, version=version)
|
||||
qr.add_data(url)
|
||||
qr.make()
|
||||
img = qr.make_image(image_factory=factory)
|
||||
img.save(f"qr_{name}.svg")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,207 @@
|
||||
// ___ ____ ____ _ _ _____ ___
|
||||
// |_ _/ ___| / ___| | | | | ____|_ _| Informatique et
|
||||
// | |\___ \| | ___ | |_| | _| | | systèmes de communication
|
||||
// | | ___) | |__|___| | _ | |___ | | HEI Sion · HES-SO Valais / mui 24-26
|
||||
// |___|____/ \____| |_| |_|_____|___|
|
||||
//
|
||||
// 52 65 61 64 69 6e 67 20 68 65 78 20 66 6f 72 20 66 75 6e 3f 20 49 53 43 20 66 6f 72 65 76 65 72
|
||||
//
|
||||
|
||||
#import "@preview/isc-hei-poster:0.8.1": isc-poster, isc-card, isc-colbreak
|
||||
#import "@preview/cetz:0.5.2": canvas, draw
|
||||
#import "../meta.typ"
|
||||
#import "../report/figs/architecture.typ"
|
||||
#import "@local/codly:1.3.1": codly, codly-init, local
|
||||
#import "@preview/codly-languages:0.1.10": codly-languages
|
||||
|
||||
#let poster-orientation = "portrait"
|
||||
|
||||
#show: codly-init
|
||||
#codly(
|
||||
languages: codly-languages
|
||||
+ (
|
||||
midas: (
|
||||
name: "Midas",
|
||||
color: rgb("#eedd47"),
|
||||
icon: box(
|
||||
image(
|
||||
"../assets/icon.svg",
|
||||
height: 130%,
|
||||
fit: "contain",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
#set raw(
|
||||
syntaxes: path("../midas.sublime-syntax")
|
||||
)
|
||||
#show raw.where(block: true): set text(size: 0.9em)
|
||||
|
||||
/*
|
||||
#show columns: it => {
|
||||
it
|
||||
|
||||
place(
|
||||
top + center,
|
||||
//dx: 0cm,
|
||||
//dy: 21cm,
|
||||
dx: -6cm,
|
||||
dy: 21.3cm,
|
||||
rect(
|
||||
stroke: gray + 2pt,
|
||||
fill: white,
|
||||
radius: 0.5cm,
|
||||
//image("../assets/icon.svg", width: 3cm)
|
||||
image("../assets/icon.svg", width: 4cm)
|
||||
)
|
||||
)
|
||||
}
|
||||
*/
|
||||
|
||||
#show: isc-poster.with(
|
||||
title: meta.title,
|
||||
subtitle: meta.subtitle,
|
||||
student: meta.authors,
|
||||
permanent-email: meta.permanent-email,
|
||||
supervisor:meta.thesis-supervisor,
|
||||
co-supervisor: none,
|
||||
expert: meta.thesis-expert,
|
||||
thesis-id: meta.thesis-id,
|
||||
academic-year: "2025-2026",
|
||||
school: meta.school,
|
||||
programme: "Informatique et systèmes de communication",
|
||||
major: meta.major,
|
||||
orientation: poster-orientation,
|
||||
language: "en", // Valid values are [en, fr, de]
|
||||
num-columns: 2,
|
||||
distribute-columns: true,
|
||||
)
|
||||
|
||||
#let Midas = [_*Midas*_]
|
||||
|
||||
#isc-card(title: "Summary")[
|
||||
Python is one of the most popular programming languages, especially in data science. Although highly flexible and somewhat easy to learn, its leniency can often lead to type errors. Indeed, with duck-typing, the developer is responsible for making sure operations are valid and do what they are meant to do.
|
||||
This project introduces #Midas, a new type system built on top of Python's type hints, capable of checking types at *compile-time* and generating *runtime assertions* for cases that are not statically known.
|
||||
#Midas allows users to define *custom types* in a simple DSL, use them in Python type hints and compile their code to a fully type-checked script with added assertions.
|
||||
Its typing rules are stricter than Python's and allow typing complex *operations on Pandas dataframes*, as well as *dependent types*.
|
||||
]
|
||||
|
||||
#isc-card(title: "Motivations")[
|
||||
In real world data science, values may come in a variety of forms.
|
||||
Sometimes they can be mixed but sometimes they cannot.
|
||||
This is exactly what happened to NASA's Mars Climate Orbiter, which failed its orbital insertion because of a unit mixup@MCOReport.
|
||||
|
||||
While some programming languages use some form of static typing, Python applies the principles of _duck-typing_. This defers attributes and methods checks to *runtime* access, and omits any real type checks.
|
||||
For example, the following:
|
||||
```python
|
||||
price_chf = 3.2
|
||||
price_usd = 9.5
|
||||
total = price_chf + price_usd
|
||||
```
|
||||
|
||||
is perfectly valid Python code that will execute without error and even pass static type checking. However, the result will be a meaningless combination of two float values of different types.
|
||||
|
||||
#Midas was created to help developers and data engineers by (1)~allowing custom type definitions in a more powerful language than Python's type annotations, (2)~strictly carrying out static type checking and (3)~generating assertions to verify at runtime values which cannot be checked statically. This new type system also allows users to define some *dependent types*.
|
||||
]
|
||||
|
||||
#isc-card(title: "Implementation")[
|
||||
The type checker is composed of four main elements, as shown in @fig:architecture:
|
||||
- *Types Registry*: holds all builtin and user-defined types
|
||||
- *Midas Typer*: parses custom definitions and registers types
|
||||
- *Python Typer*: checks Python source code
|
||||
- *Generator*: inserts runtime assertions to produce a runnable script
|
||||
|
||||
#figure(
|
||||
{
|
||||
set par(justify: false)
|
||||
architecture.overview
|
||||
},
|
||||
caption: [Implementation architecture overview]
|
||||
) <fig:architecture>
|
||||
|
||||
First, typing rules were formally defined, drawing heavily on _Types and Programming Languages_@tapl.
|
||||
The implementation of the parser for the definition language follows R. Nystrom's _Crafting Interpreters_@Nystrom2021. The whole system is itself implemented in Python, leveraging the language's own `ast` module to parse and manipulate source code.
|
||||
The type checker also includes some machinery to infer the result types of several *dataframe operations* and *aggregation methods*.
|
||||
]
|
||||
|
||||
#isc-colbreak()
|
||||
|
||||
#isc-card(title: "Results")[
|
||||
Developers can define *custom types* and *predicates* using the Midas language. *Dependent types* and *dataframe schemas* are supported, as shown in @fig:example-midas.
|
||||
|
||||
#codly(
|
||||
header: [types.midas]
|
||||
)
|
||||
#figure(
|
||||
```midas
|
||||
predicate not_empty(text: str) = len(text) != 0
|
||||
type Height = float where _ >= 0
|
||||
alias People = Frame[
|
||||
name: str where not_empty(_),
|
||||
height: Height
|
||||
]
|
||||
```,
|
||||
caption: [Example custom type definitions]
|
||||
) <fig:example-midas>
|
||||
|
||||
These types can then be used in a regular Python script. Running the type checker and compiler will then produce _diagnostics_. Some may be simple warnings about unknown variables, but definite type errors will prevent compilation. As demonstrated in @fig:example-python, type checking of dataframe operations is rather extensive, providing great coverage of common data science applications.
|
||||
#codly(
|
||||
header: [script.py],
|
||||
highlights: (
|
||||
(
|
||||
line: 3,
|
||||
start: 11,
|
||||
tag: [#h(2pt)Column[Height]],
|
||||
fill: blue.lighten(60%)
|
||||
),
|
||||
(
|
||||
line: 4,
|
||||
start: 17,
|
||||
tag: [#h(2pt)Height],
|
||||
fill: blue.lighten(60%)
|
||||
),
|
||||
)
|
||||
)
|
||||
#figure(
|
||||
```python
|
||||
import pandas as pd
|
||||
people: People = cast(People, pd.read_csv(...))
|
||||
heights = people["height"]
|
||||
median_height = heights.median()
|
||||
```,
|
||||
caption: [Example type checking of dataframe operations]
|
||||
) <fig:example-python>
|
||||
|
||||
Cast expressions such as in @fig:example-python:2 insert runtime assertions to check that values do conform to the expected type.
|
||||
]
|
||||
|
||||
#let repos = (
|
||||
([Main repository], path("figs/qr_gitea.svg"), meta.project-repos),
|
||||
([Mirror], path("figs/qr_github.svg"), meta.mirror-repo),
|
||||
)
|
||||
|
||||
#isc-card(title: "Conclusion")[
|
||||
#Midas provides a solid foundation for a hybrid typing system which can make Python better and safer. Its modular architecture makes it easily extensible.
|
||||
|
||||
*Strengths~:* strict static checking of a great subset of Python, thorough runtime checking of cast expressions and dependent types, extensive type inference of dataframe operations, modular and easily extensible
|
||||
|
||||
*Current Limitations~:* bypass of logical short-circuiting, unsupported reverse operators, oblivious to references and remote modifications
|
||||
|
||||
*Possible Extensions~:* multi-file projects with ```py import``` statements, Numpy arrays, constraint solving
|
||||
|
||||
The source code is published openly under the Apache 2.0 license.
|
||||
|
||||
#grid(
|
||||
columns: (1fr,) * repos.len(),
|
||||
align: center,
|
||||
..repos.map(r => strong(text(size: 0.8em, r.at(0)))),
|
||||
..repos.map(r => image(r.at(1), width: 3cm)),
|
||||
..repos.map(r => text(size: 0.8em, r.at(2)))
|
||||
)
|
||||
]
|
||||
|
||||
#isc-card(title: "References")[
|
||||
#bibliography("../report/bibliography.bib", title: none)
|
||||
]
|
||||
@@ -0,0 +1,133 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="164.258pt"
|
||||
height="39.507999pt"
|
||||
viewBox="-2 -2 164.258 39.507998"
|
||||
version="1.1"
|
||||
id="svg41"
|
||||
sodipodi:docname="HES-SO_logo_CMJN.eps"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview43"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="pt"
|
||||
showgrid="false"
|
||||
inkscape:zoom="7.0842707"
|
||||
inkscape:cx="99.516243"
|
||||
inkscape:cy="35.642342"
|
||||
inkscape:window-width="5120"
|
||||
inkscape:window-height="2083"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="40"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg41" />
|
||||
<defs
|
||||
id="defs17">
|
||||
<clipPath
|
||||
id="clip-0">
|
||||
<path
|
||||
clip-rule="nonzero"
|
||||
d="m 158,73 h 21 v 27.87109 h -21 z m 0,0"
|
||||
id="path2" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clip-1">
|
||||
<path
|
||||
clip-rule="nonzero"
|
||||
d="m 182,73 h 26.35937 v 27.87109 H 182 Z m 0,0"
|
||||
id="path5" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clip-2">
|
||||
<path
|
||||
clip-rule="nonzero"
|
||||
d="M 49.101562,65.363281 H 82 V 100.87109 H 49.101562 Z m 0,0"
|
||||
id="path8" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clip-3">
|
||||
<path
|
||||
clip-rule="nonzero"
|
||||
d="m 86,73 h 27 v 27.87109 H 86 Z m 0,0"
|
||||
id="path11" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
id="clip-4">
|
||||
<path
|
||||
clip-rule="nonzero"
|
||||
d="m 118,73 h 23 v 27.87109 h -23 z m 0,0"
|
||||
id="path14" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
clip-path="url(#clip-0)"
|
||||
id="g21"
|
||||
transform="translate(-49.101562,-65.363281)">
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#ab9f93"
|
||||
fill-opacity="1"
|
||||
d="m 171.23828,85.125 c 2.08984,0.640625 6.85156,2.167969 6.85156,7.390625 0,1.96875 -0.78515,4.183594 -2.92968,5.8125 -2.76954,2.214845 -6.48438,2.363285 -8.36719,2.363285 -2.82031,0 -5.17578,-0.49219 -7.16016,-1.234379 -0.26172,-0.09766 -0.52344,-0.195312 -0.78515,-0.292969 l -0.26172,-0.445312 c 0.21093,-1.921875 0.21093,-2.167969 0.3125,-4.136719 l 0.52343,-0.148437 c 0.94141,0.691406 3.24219,2.363281 7.26954,2.363281 4.1289,0 5.64843,-2.164063 5.64843,-3.691406 0,-2.265625 -2.25,-3.003907 -5.4414,-3.988281 l -1.67188,-0.542969 c -2.14453,-0.640625 -6.84765,-2.066407 -6.84765,-7.140625 0,-5.074219 4.70312,-7.585938 10.55859,-7.585938 3.87109,0 6.58594,1.035156 7.53125,1.378906 l 0.26172,0.347657 c -0.21094,1.820312 -0.26172,2.015625 -0.42188,3.890625 l -0.46875,0.195312 c -1.30859,-0.789062 -3.34765,-1.96875 -6.74609,-1.96875 -0.73047,0 -1.46094,0.04687 -2.24609,0.246094 -1.56641,0.390625 -2.875,1.425781 -2.875,2.953125 0,2.117187 2.14062,2.757813 5.38671,3.695313 l 1.87891,0.539062"
|
||||
id="path19" />
|
||||
</g>
|
||||
<g
|
||||
clip-path="url(#clip-1)"
|
||||
id="g25"
|
||||
transform="translate(-49.101562,-65.363281)">
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#ab9f93"
|
||||
fill-opacity="1"
|
||||
d="m 202.66016,87.097656 c 0.0547,1.03125 0,4.332032 -1.20313,6.550782 -1.51562,2.707031 -4.02344,3.296874 -5.95703,3.296874 -1.05078,0 -2.14844,-0.195312 -3.08984,-0.640624 -4.12891,-1.96875 -4.17969,-6.945313 -4.17969,-8.914063 0,-2.066406 0.16015,-4.921875 1.57031,-6.941406 1.82813,-2.757813 4.75781,-2.859375 5.75,-2.859375 2.92969,0 4.60156,1.28125 5.59375,2.808594 1.30469,2.167968 1.51563,5.464843 1.51563,6.699218 m 5.69921,-0.199218 c -0.10546,-3.445313 -0.78515,-6.894532 -3.1875,-9.503907 -2.30078,-2.460937 -5.80468,-3.546875 -9.35937,-3.546875 -5.23047,0 -8.25781,2.019532 -9.72656,3.449219 -3.5,3.300781 -3.60547,8.125 -3.60547,9.996094 0,1.625 0.0508,6.648437 3.60547,10.046875 1.67187,1.625 4.65234,3.300786 9.35937,3.300786 3.66016,0 6.7461,-0.839849 9.04297,-3.007818 1.73047,-1.621093 2.82422,-3.542968 3.39844,-5.957031 0.36719,-1.476562 0.47265,-3.101562 0.47265,-4.777343"
|
||||
id="path23" />
|
||||
</g>
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#ab9f93"
|
||||
fill-opacity="1"
|
||||
d="m 103.3125,21.941407 c 0,1.71875 -1.39453,3.113281 -3.11328,3.113281 -1.718752,0 -3.109372,-1.394531 -3.109372,-3.113281 0,-1.71875 1.39062,-3.113282 3.109372,-3.113282 1.71875,0 3.11328,1.394532 3.11328,3.113282"
|
||||
id="path27" />
|
||||
<g
|
||||
clip-path="url(#clip-2)"
|
||||
id="g31"
|
||||
transform="translate(-49.101562,-65.363281)">
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#1a619a"
|
||||
fill-opacity="1"
|
||||
d="m 80.785156,65.660156 c -0.05469,3.792969 -0.105468,6.105469 -0.105468,9.554688 0,8.273437 0.15625,16.496094 0.574218,24.769531 l -0.261718,0.296875 c -4.445313,-0.0508 -5.488282,0 -9.410157,0.14844 l -0.261719,-0.29688 c 0.261719,-6.94531 0.261719,-8.57031 0.15625,-15.214841 -2.089843,-0.05078 -4.183593,-0.101563 -6.273437,-0.101563 -2.039063,0 -3.972656,0.05078 -6.273437,0.148438 0.05078,7.140625 0.101562,8.914062 0.417968,15.019531 l -0.261718,0.296875 c -4.597657,-0.0508 -5.542969,0 -9.359376,0.14844 l -0.257812,-0.29688 c 0.101562,-4.136716 0.207031,-6.546872 0.207031,-10.980466 0,-12.214844 -0.3125,-18.269532 -0.574219,-23.34375 l 0.3125,-0.296875 c 4.550782,0 5.332032,0 9.359376,-0.148438 l 0.257812,0.296875 -0.101562,13 c 1.832031,0 3.710937,0.05078 5.539062,0.05078 2.355469,0 4.65625,-0.05078 6.957031,-0.09766 C 71.375,72.800781 71.375,71.371094 71.007812,65.808594 l 0.261719,-0.296875 c 4.390625,0 5.070313,0 9.253907,-0.148438 l 0.261718,0.296875"
|
||||
id="path29" />
|
||||
</g>
|
||||
<g
|
||||
clip-path="url(#clip-3)"
|
||||
id="g35"
|
||||
transform="translate(-49.101562,-65.363281)">
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#1a619a"
|
||||
fill-opacity="1"
|
||||
d="m 95.257812,84.175781 c 0.15625,-1.527343 0.519532,-3.59375 2.507813,-4.777343 0.628906,-0.390626 1.363281,-0.539063 2.089844,-0.539063 1.726561,0 2.769531,0.835937 3.347661,1.722656 0.73046,1.085938 0.78515,2.265625 0.78515,3.398438 z m 15.839848,8.816407 c -1.98828,0.984374 -4.33985,2.117187 -8.15625,2.117187 -3.136722,0 -5.281254,-0.933594 -6.53516,-2.707031 -0.785156,-1.035156 -0.941406,-2.019532 -1.148438,-3.003906 l 16.886718,-0.296876 0.3125,-0.34375 c -0.0508,-2.414062 -0.10547,-4.875 -0.83594,-7.339843 -1.83203,-5.8125 -5.85546,-6.992188 -7.63281,-7.386719 -1.30859,-0.34375 -2.51172,-0.441406 -3.71484,-0.441406 -8.207034,0 -13.644534,5.070312 -13.644534,13.589844 0,2.316406 0.417969,4.726562 1.253906,6.453124 3.035157,6.648438 10.144532,7.238278 13.910158,7.238278 4.33984,0 6.22266,-0.73828 8.99219,-1.773434 l 0.3125,-0.394531 0.36718,-5.5625 -0.36718,-0.148437"
|
||||
id="path33" />
|
||||
</g>
|
||||
<g
|
||||
clip-path="url(#clip-4)"
|
||||
id="g39"
|
||||
transform="translate(-49.101562,-65.363281)">
|
||||
<path
|
||||
fill-rule="nonzero"
|
||||
fill="#1a619a"
|
||||
fill-opacity="1"
|
||||
d="m 133.16016,84.175781 c 2.875,1.035157 6.90234,2.464844 6.90234,7.878907 0,0.347656 0,0.691406 -0.0547,1.085937 -0.9375,7.042965 -8.78125,7.730465 -12.7539,7.730465 -3.81641,0 -6.01563,-0.78515 -8.57422,-1.671871 l -0.26172,-0.445313 c 0.21094,-2.460937 0.26172,-3.003906 0.36719,-5.5625 l 0.46875,-0.199218 c 0.78125,0.59375 1.20312,0.9375 2.09375,1.378906 1.92968,0.9375 4.07812,1.378906 5.53906,1.378906 2.92578,0 4.1289,-1.328125 4.1289,-2.558594 0,-1.773437 -2.30078,-2.515625 -3.71093,-2.957031 l -1.98828,-0.691406 c -2.45703,-0.882813 -6.79297,-2.460938 -6.79297,-7.730469 0,-1.96875 0.73047,-3.445312 1.41015,-4.332031 2.71875,-3.695313 7.84375,-3.890625 10.40235,-3.890625 3.39843,0 5.54297,0.589844 8,1.230468 l 0.26172,0.292969 -0.52344,5.371094 -0.46875,0.148437 C 136.29686,79.84375 134.2578,78.5625 131.0703,78.5625 c -3.24218,0 -3.66015,1.625 -3.66015,2.214844 0,1.378906 1.41015,1.921875 3.1875,2.511718 l 2.5625,0.886719"
|
||||
id="path37" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 369.92 127.56">
|
||||
<!-- Generator: Adobe Illustrator 30.1.0, SVG Export Plug-In . SVG Version: 2.1.1 Build 136) -->
|
||||
<defs>
|
||||
<style>
|
||||
.st0 {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
.st1 {
|
||||
fill: #231f20;
|
||||
}
|
||||
|
||||
.st2 {
|
||||
fill: #e20571;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="st1" d="M204.44,23.01c-15.5,32.84-15.05,31.73-15.49,32.84-.86,1.7-1.73,3.47-3.96,3.47-1.83,0-3.27-1.52-3.27-3.45,0-1.04.22-1.5.95-3.02.49-1.06.04-.07,14.88-31.7,1.02-2.11,2-4.12,4.25-4.12,1.9,0,3.32,1.43,3.32,3.33,0,1.05-.33,1.85-.69,2.63M206.85,20.38c0-2.83-2.22-5.05-5.05-5.05-3.34,0-4.71,2.85-5.72,4.93.46-1-.07.16-14.93,31.78-.8,1.68-1.16,2.41-1.16,3.84,0,2.89,2.19,5.16,4.99,5.16,3.28,0,4.56-2.55,5.5-4.42l15.51-32.88c.43-.93.86-1.96.86-3.36"/>
|
||||
<path class="st1" d="M218.65,23.01c-15.49,32.84-14.93,32.05-15.5,32.84-.85,1.71-1.73,3.47-3.95,3.47-1.84,0-3.27-1.52-3.27-3.45,0-1.04.22-1.5.96-3.02.48-1.07.03-.07,14.88-31.7,1.02-2.1,2-4.12,4.25-4.12,1.89,0,3.34,1.43,3.34,3.33,0,1.05-.33,1.85-.7,2.63M216.02,15.33c-3.34,0-4.71,2.85-5.72,4.93.48-.98-.08.16-14.93,31.78-.8,1.68-1.16,2.41-1.16,3.84,0,2.89,2.2,5.16,4.99,5.16,3.29,0,4.57-2.55,5.5-4.43l15.51-32.87c.42-.89.86-1.96.86-3.36,0-2.83-2.22-5.05-5.05-5.05"/>
|
||||
<path class="st1" d="M230.33,35.02c.28.68.64,1.23,1.58,1.23s1.3-.55,1.58-1.23l4.67-11.87c.1-.28.14-.49.14-.79,0-.89-.78-1.54-1.64-1.54-.72,0-1.17.47-1.45,1.04l-3.31,8.86-3.3-8.86c-.29-.57-.73-1.04-1.46-1.04-.85,0-1.64.64-1.64,1.54,0,.3.04.51.15.79l4.66,11.87Z"/>
|
||||
<path class="st1" d="M243.25,24.14h.04l1.98,6.18h-4.05l2.03-6.18ZM236.56,34.89c0,.85.72,1.49,1.57,1.49s1.31-.47,1.53-1.13l.64-1.98h5.92l.64,2c.21.64.66,1.11,1.56,1.11.79,0,1.47-.57,1.47-1.4,0-.15-.04-.45-.17-.79l-4.18-11.59c-.36-1.02-1.15-1.77-2.28-1.77s-1.91.79-2.28,1.77l-4.29,11.59c-.04.11-.14.36-.14.71"/>
|
||||
<path class="st1" d="M252.98,36.12h5.33c.93,0,1.49-.7,1.54-1.41.02-.72-.45-1.54-1.54-1.54h-3.79v-10.7c0-1.06-.68-1.66-1.6-1.66s-1.6.6-1.6,1.66v11.89c0,1.07.62,1.75,1.66,1.75"/>
|
||||
<path class="st1" d="M267.24,24.14h.05l1.98,6.18h-4.05l2.02-6.18ZM262.12,36.38c.88,0,1.32-.47,1.54-1.13l.64-1.98h5.91l.65,2c.21.64.66,1.11,1.55,1.11.79,0,1.48-.57,1.48-1.4,0-.15-.05-.45-.17-.79l-4.18-11.59c-.37-1.02-1.15-1.77-2.29-1.77s-1.91.79-2.28,1.77l-4.28,11.59c-.05.11-.15.36-.15.71,0,.85.72,1.49,1.57,1.49"/>
|
||||
<path class="st1" d="M278.51,34.59v-12.1c0-1.06-.68-1.66-1.6-1.66s-1.6.6-1.6,1.66v12.1c0,1.07.69,1.66,1.6,1.66s1.6-.59,1.6-1.66"/>
|
||||
<path class="st1" d="M285.54,33.43c-1.38,0-2.57-.83-3.57-.83-.88,0-1.43.68-1.43,1.51,0,2,3.53,2.39,5.18,2.39,2.94,0,5.46-1.9,5.46-4.95,0-5.5-7.12-4.09-7.12-6.29,0-.89.83-1.38,1.75-1.38,1.28,0,1.96.64,2.83.64s1.43-.75,1.43-1.57c0-1.68-2.98-2.13-4.17-2.13-2.84,0-5.29,1.85-5.29,4.83,0,4.94,7.11,3.43,7.11,5.94,0,1.05-.77,1.83-2.18,1.83"/>
|
||||
<path class="st1" d="M242.78,41.53c0-.68-.57-1.41-1.51-1.41-1.02,0-1.51.59-1.7,1.54l-1.81,9.05h-.05l-2.77-9.33c-.23-.77-.88-1.26-1.66-1.26s-1.43.49-1.66,1.26l-2.77,9.33h-.04l-1.82-9.05c-.18-.95-.68-1.54-1.7-1.54-.95,0-1.52.73-1.52,1.41,0,.3.02.45.09.73l2.71,11.63c.21.9.92,1.66,2.11,1.66,1.04,0,1.85-.68,2.11-1.55l2.47-8.21h.05l2.47,8.21c.26.88,1.07,1.55,2.11,1.55,1.2,0,1.9-.76,2.12-1.66l2.7-11.63c.06-.28.08-.43.08-.73"/>
|
||||
<path class="st1" d="M246.87,49.5l2.04-6.18h.03l1.98,6.18h-4.05ZM251.2,41.77c-.37-1.03-1.16-1.77-2.28-1.77s-1.92.79-2.29,1.77l-4.28,11.59c-.04.11-.15.37-.15.7,0,.86.72,1.49,1.57,1.49s1.32-.46,1.54-1.12l.64-1.98h5.92l.64,2c.21.64.66,1.11,1.55,1.11.79,0,1.47-.57,1.47-1.4,0-.15-.04-.45-.17-.79l-4.18-11.59Z"/>
|
||||
<path class="st1" d="M263.96,52.6h-3.79v-10.69c0-1.07-.68-1.66-1.6-1.66s-1.6.59-1.6,1.66v11.89c0,1.07.62,1.75,1.67,1.75h5.32c.93,0,1.49-.7,1.53-1.4.03-.73-.44-1.54-1.53-1.54"/>
|
||||
<path class="st1" d="M273.46,52.6h-3.79v-10.69c0-1.07-.68-1.66-1.6-1.66s-1.59.59-1.59,1.66v11.89c0,1.07.62,1.75,1.66,1.75h5.33c.93,0,1.49-.7,1.53-1.4.02-.73-.45-1.54-1.53-1.54"/>
|
||||
<path class="st1" d="M277.57,40.12c-.91,0-1.6.59-1.6,1.66v12.1c0,1.07.68,1.66,1.6,1.66s1.6-.59,1.6-1.66v-12.1c0-1.07-.68-1.66-1.6-1.66"/>
|
||||
<path class="st1" d="M284.05,44.32c0-.9.83-1.39,1.75-1.39,1.28,0,1.96.64,2.83.64s1.43-.74,1.43-1.57c0-1.69-2.98-2.13-4.18-2.13-2.83,0-5.28,1.85-5.28,4.83,0,4.95,7.11,3.43,7.11,5.95,0,1.04-.77,1.83-2.17,1.83s-2.58-.83-3.58-.83c-.88,0-1.43.68-1.43,1.51,0,2,3.54,2.39,5.18,2.39,2.95,0,5.46-1.89,5.46-4.94,0-5.5-7.12-4.09-7.12-6.29"/>
|
||||
<path class="st1" d="M140.09,40.15l-1.84-.53c-3.18-.91-5.27-1.54-5.27-3.61,0-1.5,1.29-2.51,2.81-2.89.77-.2,1.49-.24,2.2-.24,3.32,0,5.32,1.15,6.6,1.93l.45-.2c.16-1.83.21-2.02.41-3.8l-.25-.34c-.93-.34-3.58-1.35-7.36-1.35-5.73,0-10.32,2.46-10.32,7.42s4.6,6.36,6.7,6.98l1.64.53c3.12.96,5.31,1.68,5.31,3.9,0,1.49-1.48,3.61-5.52,3.61s-6.19-1.64-7.11-2.31l-.51.15c-.1,1.92-.1,2.16-.3,4.04l.25.44c.26.09.52.19.77.29,1.94.73,4.24,1.21,7,1.21,1.84,0,5.47-.14,8.18-2.31,2.09-1.59,2.86-3.75,2.86-5.68,0-5.11-4.65-6.6-6.7-7.23"/>
|
||||
<path class="st1" d="M169.64,48.48c-1.48,2.64-3.93,3.23-5.82,3.23-1.03,0-2.1-.2-3.02-.63-4.04-1.93-4.09-6.79-4.09-8.71,0-2.03.15-4.82,1.54-6.79,1.79-2.69,4.66-2.79,5.62-2.79,2.87,0,4.5,1.25,5.48,2.75,1.27,2.12,1.48,5.35,1.48,6.55.05,1.01,0,4.24-1.18,6.41M164.12,29.12c-5.11,0-8.07,1.97-9.51,3.37-3.43,3.22-3.53,7.94-3.53,9.77,0,1.59.05,6.5,3.53,9.82,1.64,1.6,4.55,3.23,9.15,3.23,3.58,0,6.6-.82,8.84-2.94,1.7-1.59,2.77-3.46,3.32-5.83.36-1.44.46-3.04.46-4.67-.1-3.37-.77-6.74-3.12-9.29-2.25-2.41-5.68-3.46-9.16-3.46"/>
|
||||
<path class="st1" d="M118.64,39.23c-1.69,0-3.04,1.37-3.04,3.04s1.36,3.04,3.04,3.04,3.04-1.36,3.04-3.04-1.36-3.04-3.04-3.04"/>
|
||||
<path class="st1" d="M51.62,21.11l-.25-.29c-4.09.14-4.76.14-9.05.14l-.26.29c.36,5.44.36,6.84.41,12.52-2.25.05-4.5.1-6.8.1-1.79,0-3.63-.05-5.42-.05l.1-12.71-.26-.29c-3.93.14-4.7.14-9.15.14l-.3.29c.26,4.96.57,10.88.57,22.83,0,4.34-.11,6.69-.21,10.74l.25.29c3.73-.14,4.65-.2,9.15-.14l.26-.29c-.31-5.97-.36-7.71-.41-14.69,2.25-.09,4.14-.14,6.14-.14s4.08.05,6.13.1c.1,6.5.1,8.09-.16,14.88l.26.29c3.84-.14,4.86-.2,9.2-.14l.25-.29c-.41-8.09-.56-16.14-.56-24.23,0-3.37.05-5.64.1-9.34"/>
|
||||
<path class="st1" d="M65.78,39.22c.16-1.49.52-3.52,2.46-4.67.61-.39,1.33-.53,2.04-.53,1.69,0,2.7.82,3.27,1.69.71,1.06.76,2.21.76,3.32l-8.54.19ZM74.32,29.3c-1.27-.33-2.45-.43-3.62-.43-8.03,0-13.35,4.96-13.35,13.3,0,2.27.41,4.62,1.22,6.31,2.97,6.5,9.92,7.08,13.61,7.08,4.23,0,6.08-.73,8.79-1.73l.31-.39.36-5.44-.36-.14c-1.95.96-4.25,2.07-7.98,2.07-3.07,0-5.16-.92-6.39-2.66-.77-1-.92-1.96-1.12-2.93l16.52-.29.31-.33c-.05-2.36-.1-4.77-.82-7.18-1.79-5.68-5.72-6.84-7.46-7.23"/>
|
||||
<path class="st1" d="M102.85,39.22l-2.5-.87c-1.74-.58-3.12-1.11-3.12-2.46,0-.58.41-2.17,3.59-2.17s5.11,1.25,6.39,2.03l.46-.15.51-5.25-.25-.29c-2.4-.62-4.5-1.21-7.82-1.21-2.5,0-7.52.2-10.18,3.81-.66.87-1.38,2.31-1.38,4.24,0,5.16,4.25,6.7,6.65,7.56l1.94.67c1.38.44,3.64,1.16,3.64,2.89,0,1.21-1.18,2.51-4.04,2.51-1.43,0-3.53-.43-5.42-1.34-.87-.43-1.29-.78-2.05-1.35l-.46.19c-.1,2.51-.14,3.04-.35,5.45l.25.43c2.5.87,4.65,1.64,8.38,1.64s11.56-.68,12.48-7.56c.05-.39.05-.73.05-1.06,0-5.29-3.93-6.69-6.75-7.7"/>
|
||||
<path class="st2" d="M75,76.07v10.98h-2.09v-4.57h-5.18v4.57h-2.09v-10.98h2.09v4.37h5.18v-4.37h2.09Z"/>
|
||||
<path class="st2" d="M80.95,84.13h-1.36c-.61,0-1,.31-1,.84s.36.78.92.78c.83,0,1.45-.58,1.45-1.62M84.03,86.71c-.29.25-.82.48-1.46.48-.71,0-1.22-.26-1.41-.87-.46.59-1.16.91-2.21.91-1.48,0-2.34-.83-2.34-2.12s.95-2.28,2.94-2.28h1.39v-.44c0-.94-.46-1.31-1.16-1.31s-1.05.32-1.21.9l-1.73-.51c.34-1.24,1.31-2.11,3.1-2.11s2.97.87,2.97,3.07v2.76c0,.2.12.32.3.32.11,0,.19-.04.27-.12l.54,1.31Z"/>
|
||||
<path class="st2" d="M92.07,79.64v7.41h-1.99v-.71c-.51.61-1.26.97-2.26.97-2.01,0-2.84-1.34-2.84-3.3v-4.37h2.04v4.21c0,1,.46,1.66,1.48,1.66.92,0,1.53-.66,1.53-1.75v-4.13h2.04Z"/>
|
||||
<path class="st2" d="M99.6,85.85c-.38.77-1.07,1.41-2.45,1.41-1.56,0-2.5-.83-2.5-2.41l.02-3.52h-1.46v-.44l3.01-2.82h.44v1.58h2.52l-.02,1.68h-2.45v3.37c0,.46.22.8.73.8.41,0,.61-.16.8-.51l1.36.87Z"/>
|
||||
<path class="st2" d="M102.1,82.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M107.37,83.84h-5.32c.15,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M119.18,85.23v1.82h-6.44v-10.98h6.27v1.82h-4.18v2.62h3.77v1.84h-3.77v2.89h4.35Z"/>
|
||||
<path class="st2" d="M120.2,83.3c0-2.45,1.8-3.93,3.93-3.93,1.39,0,2.5.51,3.18,1.8l-1.48.98c-.38-.68-.92-1.02-1.7-1.02-1.09,0-1.96.8-1.96,2.16s.87,2.19,1.96,2.19c.9,0,1.39-.34,1.75-1.04l1.46.95c-.68,1.34-1.94,1.83-3.33,1.83-2.14,0-3.81-1.34-3.81-3.94"/>
|
||||
<path class="st2" d="M134.09,83.32c0-1.26-.82-2.21-2.02-2.21s-2.02.97-2.02,2.23.8,2.18,2.02,2.18,2.02-.99,2.02-2.19M128.07,83.32c0-2.16,1.62-3.95,4-3.95,2.5,0,4,1.7,4,3.95s-1.63,3.94-4,3.94c-2.54,0-4-1.7-4-3.94"/>
|
||||
<path class="st2" d="M137.58,75.51h2.06v11.54h-2.06v-11.54Z"/>
|
||||
<path class="st2" d="M143.22,82.45h3.31c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M148.49,83.84h-5.32c.15,1.09.8,1.75,1.85,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M159.03,83.3c0-1.24-.8-2.16-1.99-2.16s-2.04.92-2.04,2.16.8,2.19,2.04,2.19c1.17,0,1.99-.9,1.99-2.19M161,75.51v11.54h-1.96v-.99c-.56.79-1.43,1.19-2.5,1.19-2.06,0-3.54-1.57-3.52-3.96,0-2.33,1.53-3.93,3.54-3.93,1.02,0,1.84.32,2.38,1v-4.86h2.06Z"/>
|
||||
<path class="st2" d="M162.98,75.39h2.24l-1.31,3.8-1.48-.18.55-3.62Z"/>
|
||||
<path class="st2" d="M166.82,76.07h2.09v10.98h-2.09v-10.98Z"/>
|
||||
<path class="st2" d="M178.38,82.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.56-1.75s-1.6.76-1.6,1.77v4.15h-2.06v-7.41h1.91v.83c.51-.7,1.29-1.11,2.43-1.11,1.95,0,2.93,1.32,2.93,3.28"/>
|
||||
<path class="st2" d="M182.93,83.72c.71,0,1.19-.56,1.19-1.26s-.46-1.22-1.19-1.22c-.78,0-1.22.53-1.22,1.22,0,.73.46,1.26,1.22,1.26M186.96,81.22h-1.34c.25.41.41.87.41,1.34,0,.82-.39,1.5-1.19,2.12l-.88.75c-.15.12-.29.22-.46.29h.92c1.63,0,2.48.8,2.48,2.14,0,1.55-1.39,2.62-3.77,2.62-1.8,0-2.98-.51-3.59-1.67l1.43-1.09c.41.75,1,1.12,2.14,1.12,1.27,0,1.9-.29,1.9-.88,0-.46-.3-.66-.8-.66h-2.79v-1.24l1.05-.9c-1.63-.15-2.68-1.14-2.68-2.7s1.29-2.82,3.14-2.82h4.05l-.02,1.58Z"/>
|
||||
<path class="st2" d="M191.71,78.79l-1.52-.38,1.28-2.99h2.55l-2.31,3.37ZM189.75,82.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M195.02,83.84h-5.32c.15,1.09.8,1.75,1.85,1.75.85,0,1.34-.32,1.68-.99l1.62.7c-.58,1.27-1.79,1.95-3.35,1.95-2.12,0-3.8-1.28-3.8-3.93,0-2.19,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.81c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M203.84,82.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.57-1.75s-1.6.76-1.6,1.77v4.15h-2.05v-7.41h1.9v.83c.51-.7,1.29-1.11,2.43-1.11,1.96,0,2.93,1.32,2.93,3.28"/>
|
||||
<path class="st2" d="M205.77,79.64h2.05v7.41h-2.05v-7.41ZM205.44,77.08c0-.75.59-1.34,1.36-1.34s1.36.59,1.36,1.34-.61,1.38-1.36,1.38-1.36-.61-1.36-1.38"/>
|
||||
<path class="st2" d="M211.41,82.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M216.68,83.84h-5.32c.16,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M222.59,79.46v2.02c-1.31,0-2.29.8-2.29,2.25v3.33h-2.06v-7.41h2.01v1.12c.47-.8,1.22-1.31,2.34-1.31"/>
|
||||
<path class="st2" d="M223.87,79.64h2.05v7.41h-2.05v-7.41ZM223.55,77.08c0-.75.59-1.34,1.36-1.34s1.36.59,1.36,1.34-.61,1.38-1.36,1.38-1.36-.61-1.36-1.38"/>
|
||||
<path class="st2" d="M229.51,82.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M234.78,83.84h-5.32c.15,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M75,96.07v10.98h-2.09v-4.57h-5.18v4.57h-2.09v-10.98h2.09v4.37h5.18v-4.37h2.09Z"/>
|
||||
<path class="st2" d="M82.62,103.32c0-1.26-.82-2.21-2.02-2.21s-2.02.97-2.02,2.23.8,2.18,2.02,2.18,2.02-.99,2.02-2.19M76.6,103.32c0-2.16,1.62-3.95,4-3.95,2.5,0,4,1.7,4,3.95s-1.63,3.94-4,3.94c-2.53,0-4-1.7-4-3.94"/>
|
||||
<path class="st2" d="M85.61,103.3c0-2.45,1.8-3.93,3.93-3.93,1.39,0,2.5.51,3.18,1.8l-1.48.98c-.37-.68-.92-1.02-1.7-1.02-1.09,0-1.95.8-1.95,2.16s.87,2.19,1.95,2.19c.9,0,1.39-.34,1.75-1.04l1.46.95c-.68,1.34-1.94,1.83-3.33,1.83-2.14,0-3.81-1.34-3.81-3.94"/>
|
||||
<path class="st2" d="M101.28,102.69v4.37h-2.04v-4.18c0-1-.54-1.73-1.56-1.73s-1.58.76-1.58,1.75v4.16h-2.05v-11.54h2.05v4.05l-.04.78c.5-.61,1.24-.97,2.3-.97,1.95,0,2.92,1.36,2.92,3.32"/>
|
||||
<path class="st2" d="M102.59,105.23l1.6-.59c.25.77.7,1.04,1.48,1.04.7,0,1.09-.25,1.09-.73s-.27-.66-1.51-.92c-1.62-.34-2.35-1.05-2.35-2.31,0-1.44,1.16-2.34,2.74-2.34,1.46,0,2.34.53,2.7,1.77l-1.62.59c-.2-.51-.48-.8-1.11-.8-.54,0-.87.27-.87.65,0,.42.27.63,1.53.88,1.7.36,2.33,1.07,2.33,2.41-.02,1.45-1.17,2.38-2.99,2.38-1.66,0-2.67-.63-3.02-2.02"/>
|
||||
<path class="st2" d="M109.63,103.3c0-2.45,1.8-3.93,3.93-3.93,1.39,0,2.5.51,3.18,1.8l-1.48.98c-.38-.68-.92-1.02-1.7-1.02-1.09,0-1.96.8-1.96,2.16s.87,2.19,1.96,2.19c.9,0,1.39-.34,1.75-1.04l1.46.95c-.68,1.34-1.94,1.83-3.33,1.83-2.14,0-3.81-1.34-3.81-3.94"/>
|
||||
<path class="st2" d="M125.3,102.69v4.37h-2.04v-4.18c0-1-.54-1.73-1.56-1.73s-1.58.76-1.58,1.75v4.16h-2.05v-11.54h2.05v4.05l-.03.78c.49-.61,1.24-.97,2.29-.97,1.96,0,2.93,1.36,2.93,3.32"/>
|
||||
<path class="st2" d="M134.21,99.64v7.41h-1.99v-.71c-.51.61-1.26.97-2.26.97-2,0-2.84-1.34-2.84-3.3v-4.37h2.04v4.21c0,1,.46,1.66,1.48,1.66.92,0,1.53-.66,1.53-1.75v-4.13h2.04Z"/>
|
||||
<path class="st2" d="M136.25,95.51h2.05v11.54h-2.05v-11.54Z"/>
|
||||
<path class="st2" d="M141.89,102.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M147.16,103.84h-5.32c.15,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.62.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M154.85,99.64h1.94v1.68h-1.94v5.73h-2.05v-5.73h-1.16v-1.68h1.16v-1.39c0-1.8,1.12-2.88,2.82-2.88,1.04,0,1.82.38,2.33,1.16l-1.32,1.16c-.17-.32-.44-.49-.83-.49-.6,0-.94.39-.94,1.14v1.31Z"/>
|
||||
<path class="st2" d="M162.02,97.09c0-.71.58-1.29,1.29-1.29s1.27.58,1.27,1.29-.58,1.27-1.27,1.27-1.29-.58-1.29-1.27M158.4,97.09c.02-.71.59-1.29,1.29-1.29s1.29.58,1.29,1.29-.58,1.27-1.29,1.27-1.28-.58-1.29-1.27M164.96,99.64v7.41h-1.99v-.71c-.51.61-1.26.97-2.26.97-2.01,0-2.84-1.34-2.84-3.3v-4.37h2.04v4.21c0,1,.46,1.66,1.48,1.66.92,0,1.53-.66,1.53-1.75v-4.13h2.04Z"/>
|
||||
<path class="st2" d="M171.36,99.46v2.02c-1.31,0-2.29.8-2.29,2.25v3.33h-2.06v-7.41h2.01v1.12c.47-.8,1.22-1.31,2.34-1.31"/>
|
||||
<path class="st2" d="M176.12,96.07h2.09v10.98h-2.09v-10.98Z"/>
|
||||
<path class="st2" d="M187.68,102.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.57-1.75s-1.6.76-1.6,1.77v4.15h-2.05v-7.41h1.9v.83c.51-.7,1.29-1.11,2.43-1.11,1.96,0,2.93,1.32,2.93,3.28"/>
|
||||
<path class="st2" d="M192.23,103.72c.71,0,1.19-.56,1.19-1.26s-.46-1.22-1.19-1.22c-.78,0-1.22.53-1.22,1.22,0,.73.46,1.26,1.22,1.26M196.26,101.22h-1.34c.25.41.41.87.41,1.34,0,.82-.39,1.5-1.19,2.12l-.89.75c-.15.12-.29.22-.46.29h.92c1.63,0,2.48.8,2.48,2.14,0,1.55-1.39,2.62-3.77,2.62-1.8,0-2.97-.51-3.59-1.67l1.43-1.09c.41.75,1,1.12,2.14,1.12,1.27,0,1.9-.29,1.9-.88,0-.46-.3-.66-.8-.66h-2.79v-1.24l1.05-.9c-1.63-.15-2.69-1.14-2.69-2.7s1.29-2.82,3.14-2.82h4.05l-.02,1.58Z"/>
|
||||
<path class="st2" d="M199.05,102.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M204.32,103.84h-5.32c.16,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M213.14,102.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.57-1.75s-1.59.76-1.59,1.77v4.15h-2.06v-7.41h1.9v.83c.51-.7,1.29-1.11,2.43-1.11,1.95,0,2.92,1.32,2.92,3.28"/>
|
||||
<path class="st2" d="M215.06,99.64h2.06v7.41h-2.06v-7.41ZM214.74,97.08c0-.75.6-1.34,1.36-1.34s1.36.59,1.36,1.34-.61,1.38-1.36,1.38-1.36-.61-1.36-1.38"/>
|
||||
<path class="st2" d="M220.71,102.45h3.32c-.16-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M225.98,103.84h-5.32c.15,1.09.8,1.75,1.85,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.78,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.52-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M234.53,99.64v7.41h-1.99v-.71c-.51.61-1.26.97-2.26.97-2.01,0-2.84-1.34-2.84-3.3v-4.37h2.04v4.21c0,1,.46,1.66,1.48,1.66.92,0,1.53-.66,1.53-1.75v-4.13h2.04Z"/>
|
||||
<path class="st2" d="M240.92,99.46v2.02c-1.31,0-2.29.8-2.29,2.25v3.33h-2.06v-7.41h2.01v1.12c.48-.8,1.22-1.31,2.34-1.31"/>
|
||||
<path class="st2" d="M253.02,99.64l-3.13,7.61h-.88l-1.85-4.1-1.94,4.1h-.9l-3.11-7.61h2.2l1.58,4.4,2.04-4.5h.32l1.99,4.5,1.63-4.4h2.06Z"/>
|
||||
<path class="st2" d="M254.04,99.64h2.06v7.41h-2.06v-7.41ZM253.72,97.08c0-.75.59-1.34,1.36-1.34s1.36.59,1.36,1.34-.61,1.38-1.36,1.38-1.36-.61-1.36-1.38"/>
|
||||
<path class="st2" d="M257.51,105.23l1.6-.59c.25.77.7,1.04,1.48,1.04.7,0,1.09-.25,1.09-.73s-.27-.66-1.51-.92c-1.62-.34-2.35-1.05-2.35-2.31,0-1.44,1.16-2.34,2.74-2.34,1.46,0,2.34.53,2.7,1.77l-1.62.59c-.2-.51-.47-.8-1.1-.8-.55,0-.87.27-.87.65,0,.42.27.63,1.53.88,1.7.36,2.33,1.07,2.33,2.41-.02,1.45-1.17,2.38-2.99,2.38-1.67,0-2.67-.63-3.03-2.02"/>
|
||||
<path class="st2" d="M264.43,105.23l1.6-.59c.25.77.7,1.04,1.48,1.04.7,0,1.09-.25,1.09-.73s-.27-.66-1.51-.92c-1.61-.34-2.35-1.05-2.35-2.31,0-1.44,1.16-2.34,2.74-2.34,1.46,0,2.35.53,2.7,1.77l-1.61.59c-.21-.51-.48-.8-1.11-.8-.54,0-.87.27-.87.65,0,.42.27.63,1.53.88,1.7.36,2.33,1.07,2.33,2.41-.02,1.45-1.18,2.38-2.99,2.38-1.67,0-2.67-.63-3.03-2.02"/>
|
||||
<path class="st2" d="M273.52,102.45h3.32c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M278.79,103.84h-5.32c.15,1.09.8,1.75,1.86,1.75.85,0,1.34-.32,1.68-.99l1.61.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.51-3.96,3.82-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M287.62,102.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.57-1.75s-1.59.76-1.59,1.77v4.15h-2.06v-7.41h1.9v.83c.51-.7,1.29-1.11,2.43-1.11,1.95,0,2.92,1.32,2.92,3.28"/>
|
||||
<path class="st2" d="M288.93,105.23l1.6-.59c.26.77.7,1.04,1.48,1.04.7,0,1.09-.25,1.09-.73s-.27-.66-1.52-.92c-1.61-.34-2.34-1.05-2.34-2.31,0-1.44,1.16-2.34,2.73-2.34,1.46,0,2.35.53,2.7,1.77l-1.61.59c-.2-.51-.48-.8-1.11-.8-.54,0-.87.27-.87.65,0,.42.27.63,1.53.88,1.7.36,2.33,1.07,2.33,2.41-.02,1.45-1.17,2.38-2.99,2.38-1.67,0-2.67-.63-3.03-2.02"/>
|
||||
<path class="st2" d="M295.96,103.3c0-2.45,1.8-3.93,3.93-3.93,1.39,0,2.5.51,3.18,1.8l-1.48.98c-.37-.68-.92-1.02-1.7-1.02-1.09,0-1.95.8-1.95,2.16s.87,2.19,1.95,2.19c.9,0,1.39-.34,1.75-1.04l1.46.95c-.68,1.34-1.94,1.83-3.33,1.83-2.14,0-3.81-1.34-3.81-3.94"/>
|
||||
<path class="st2" d="M311.64,102.69v4.37h-2.04v-4.18c0-1-.54-1.73-1.56-1.73s-1.58.76-1.58,1.75v4.16h-2.05v-11.54h2.05v4.05l-.04.78c.49-.61,1.24-.97,2.3-.97,1.95,0,2.92,1.36,2.92,3.32"/>
|
||||
<path class="st2" d="M317.37,104.13h-1.36c-.61,0-1,.31-1,.84s.36.78.92.78c.83,0,1.45-.58,1.45-1.62M320.44,106.71c-.29.25-.81.48-1.46.48-.71,0-1.22-.26-1.41-.87-.46.59-1.16.91-2.21.91-1.48,0-2.34-.83-2.34-2.12s.95-2.28,2.94-2.28h1.39v-.44c0-.94-.46-1.31-1.15-1.31s-1.05.32-1.21.9l-1.73-.51c.34-1.24,1.31-2.11,3.09-2.11s2.97.87,2.97,3.07v2.76c0,.2.12.32.31.32.1,0,.18-.04.27-.12l.54,1.31Z"/>
|
||||
<path class="st2" d="M324.08,99.64h1.94v1.68h-1.94v5.73h-2.06v-5.73h-1.16v-1.68h1.16v-1.39c0-1.8,1.12-2.88,2.82-2.88,1.04,0,1.82.38,2.33,1.16l-1.32,1.16c-.17-.32-.45-.49-.83-.49-.6,0-.94.39-.94,1.14v1.31Z"/>
|
||||
<path class="st2" d="M332.7,105.85c-.37.77-1.07,1.41-2.45,1.41-1.57,0-2.5-.83-2.5-2.41l.02-3.52h-1.46v-.44l3.01-2.82h.45v1.58h2.51l-.02,1.68h-2.45v3.37c0,.46.22.8.73.8.41,0,.61-.16.8-.51l1.36.87Z"/>
|
||||
<path class="st2" d="M335.2,102.45h3.31c-.15-.94-.68-1.48-1.58-1.48-.85,0-1.5.49-1.73,1.48M340.47,103.84h-5.32c.15,1.09.8,1.75,1.85,1.75.85,0,1.34-.32,1.68-.99l1.62.7c-.58,1.28-1.79,1.96-3.35,1.96-2.12,0-3.81-1.27-3.81-3.93,0-2.2,1.52-3.96,3.83-3.96s3.55,1.55,3.55,3.8c0,.24,0,.46-.05.66"/>
|
||||
<path class="st2" d="M349.29,102.65v4.4h-2.04v-4.16c0-1.05-.53-1.75-1.57-1.75s-1.6.76-1.6,1.77v4.15h-2.05v-7.41h1.9v.83c.51-.7,1.29-1.11,2.43-1.11,1.96,0,2.93,1.32,2.93,3.28"/>
|
||||
<path class="st2" d="M20.54,104.79c0,1.3,1.06,2.37,2.36,2.37h26.23c1.3,0,2.37-1.06,2.37-2.37v-26.23c0-1.31-1.06-2.37-2.37-2.37h-26.23c-1.3,0-2.36,1.06-2.36,2.37v26.23Z"/>
|
||||
<path class="st0" d="M37.73,86.04h-3.57c-.18,2.07-.35,3.84-.51,5.16-.17,1.32-.32,2.33-.48,3.29-.16.95-.32,1.82-.48,2.6-.14.61-.33,1.09-.59,1.43-.26.35-.64.59-1.14.72-.42.11-.83.02-1.24-.25-.41-.27-.65-.59-.73-.96-.06-.27-.08-.51-.04-.7.02-.19.08-.37.17-.53.08-.17.18-.32.28-.45.1-.13.21-.27.32-.4.04-.04.22-.25.54-.63.32-.38.57-.73.73-1.05.16-.31.52-1,.7-1.86s.55-3.8.54-6.36h-1.5c-.43,0-.84.14-1.23.34-.38.2-.71.54-.87.73-.16.2-.57.86-.67.99-.09.13-.29.42-.44.38-.16-.05-.12-.23-.1-.38.03-.14.32-.89.54-1.44.23-.56.52-1.11.91-1.63.29-.45.7-.76,1.2-1.08.51-.33,1.09-.49,1.77-.49h10.95c.19,0,1.22.08,1.22,1.28s-1.09,1.3-1.22,1.3h-3.11c-.26,2.46-.39,5.01-.39,7.5,0,.45.08.9.23,1.33.16.43.34.77.57.99.29.27.64.44,1.06.52.42.08.85-.05,1.28-.39.24-.19.41-.4.52-.63.11-.24.18-.47.21-.68.03-.22.08-.52.09-.6s0-.34.3-.37.34.25.37.55c.02.29-.13,1.39-.38,2.08-.25.69-.55,1.24-.89,1.65-.34.42-.68.72-1,.91-.38.23-.81.36-1.3.41-.5.05-.96-.07-1.37-.35-.68-.5-1.2-1.27-1.55-2.33-.2-.62-.31-1.44-.33-2.45-.03-1.02,0-2.01.1-2.98l.54-5.15Z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1,988 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="482.222" height="84.6667" viewBox="0 0 482.222 84.6667">
|
||||
<defs>
|
||||
<g>
|
||||
<g id="glyph-0-0">
|
||||
<path d="M 6.6875 0 L 1.8125 0 L 1.8125 -18.765625 L 6.6875 -18.765625 Z M 6.6875 0 "/>
|
||||
</g>
|
||||
<g id="glyph-0-1">
|
||||
<path d="M 5.96875 -13.640625 L 5.96875 -12.375 C 6.28125 -12.84375 6.796875 -13.21875 7.515625 -13.5 C 8.234375 -13.78125 8.976562 -13.921875 9.75 -13.921875 C 11.613281 -13.921875 12.992188 -13.394531 13.890625 -12.34375 C 14.785156 -11.300781 15.234375 -9.847656 15.234375 -7.984375 L 15.234375 0 L 10.53125 0 L 10.53125 -6.890625 C 10.53125 -7.972656 10.359375 -8.742188 10.015625 -9.203125 C 9.679688 -9.660156 9.066406 -9.890625 8.171875 -9.890625 C 7.503906 -9.890625 6.863281 -9.71875 6.25 -9.375 L 6.25 0 L 1.546875 0 L 1.546875 -13.640625 Z M 5.96875 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-2">
|
||||
<path d="M 2.796875 -13.640625 L 2.796875 -14.28125 C 2.796875 -16 3.335938 -17.3125 4.421875 -18.21875 C 5.503906 -19.132812 6.894531 -19.59375 8.59375 -19.59375 C 9.5625 -19.59375 10.410156 -19.519531 11.140625 -19.375 L 11.140625 -15.453125 C 10.640625 -15.546875 10.164062 -15.59375 9.71875 -15.59375 C 8.238281 -15.59375 7.5 -14.941406 7.5 -13.640625 L 11.140625 -13.640625 L 11.140625 -9.859375 L 7.5 -9.859375 L 7.5 0 L 2.796875 0 L 2.796875 -9.859375 L 0.84375 -9.859375 L 0.84375 -13.640625 Z M 2.796875 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-3">
|
||||
<path d="M 0.984375 -6.828125 C 0.984375 -8.847656 1.710938 -10.535156 3.171875 -11.890625 C 4.640625 -13.242188 6.457031 -13.921875 8.625 -13.921875 C 10.789062 -13.921875 12.613281 -13.242188 14.09375 -11.890625 C 15.582031 -10.535156 16.328125 -8.847656 16.328125 -6.828125 C 16.328125 -4.816406 15.585938 -3.128906 14.109375 -1.765625 C 12.617188 -0.398438 10.789062 0.28125 8.625 0.28125 C 6.457031 0.28125 4.640625 -0.398438 3.171875 -1.765625 C 1.710938 -3.128906 0.984375 -4.816406 0.984375 -6.828125 Z M 6.53125 -4.640625 C 7.050781 -4.066406 7.75 -3.78125 8.625 -3.78125 C 9.5 -3.78125 10.207031 -4.0625 10.75 -4.625 C 11.289062 -5.195312 11.5625 -5.929688 11.5625 -6.828125 C 11.5625 -7.703125 11.289062 -8.429688 10.75 -9.015625 C 10.207031 -9.597656 9.5 -9.890625 8.625 -9.890625 C 7.769531 -9.890625 7.070312 -9.597656 6.53125 -9.015625 C 6 -8.429688 5.734375 -7.703125 5.734375 -6.828125 C 5.734375 -5.929688 6 -5.203125 6.53125 -4.640625 Z M 6.53125 -4.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-4">
|
||||
<path d="M 1.546875 -13.640625 L 5.96875 -13.640625 L 5.96875 -12.234375 C 6.25 -12.734375 6.6875 -13.113281 7.28125 -13.375 C 7.875 -13.644531 8.507812 -13.78125 9.1875 -13.78125 C 9.65625 -13.78125 10.140625 -13.722656 10.640625 -13.609375 L 10.640625 -9.375 C 10.046875 -9.4375 9.457031 -9.46875 8.875 -9.46875 C 7.8125 -9.46875 6.9375 -9.328125 6.25 -9.046875 L 6.25 0 L 1.546875 0 Z M 1.546875 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-5">
|
||||
<path d="M 5.96875 -13.640625 L 5.96875 -12.375 C 6.28125 -12.84375 6.796875 -13.21875 7.515625 -13.5 C 8.234375 -13.78125 8.976562 -13.921875 9.75 -13.921875 C 11.707031 -13.921875 13.148438 -13.320312 14.078125 -12.125 C 14.421875 -12.644531 14.988281 -13.070312 15.78125 -13.40625 C 16.570312 -13.75 17.367188 -13.921875 18.171875 -13.921875 C 20.078125 -13.921875 21.5625 -13.382812 22.625 -12.3125 C 23.6875 -11.25 24.21875 -9.804688 24.21875 -7.984375 L 24.21875 0 L 19.515625 0 L 19.515625 -6.890625 C 19.515625 -7.972656 19.347656 -8.742188 19.015625 -9.203125 C 18.679688 -9.660156 18.066406 -9.890625 17.171875 -9.890625 C 16.472656 -9.890625 15.796875 -9.710938 15.140625 -9.359375 C 15.203125 -8.921875 15.234375 -8.460938 15.234375 -7.984375 L 15.234375 0 L 10.53125 0 L 10.53125 -6.890625 C 10.53125 -7.972656 10.359375 -8.742188 10.015625 -9.203125 C 9.679688 -9.660156 9.066406 -9.890625 8.171875 -9.890625 C 7.503906 -9.890625 6.863281 -9.71875 6.25 -9.375 L 6.25 0 L 1.546875 0 L 1.546875 -13.640625 Z M 5.96875 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-6">
|
||||
<path d="M 2.828125 -11.90625 C 4.054688 -13.25 5.671875 -13.921875 7.671875 -13.921875 C 9.410156 -13.921875 10.625 -13.472656 11.3125 -12.578125 L 11.3125 -13.640625 L 15.734375 -13.640625 L 15.734375 0 L 11.3125 0 L 11.3125 -1.0625 C 10.601562 -0.164062 9.390625 0.28125 7.671875 0.28125 C 5.671875 0.28125 4.054688 -0.394531 2.828125 -1.75 C 1.597656 -3.101562 0.984375 -4.796875 0.984375 -6.828125 C 0.984375 -8.847656 1.597656 -10.539062 2.828125 -11.90625 Z M 6.546875 -4.625 C 7.085938 -4.039062 7.789062 -3.75 8.65625 -3.75 C 9.457031 -3.75 10.269531 -3.992188 11.09375 -4.484375 L 11.09375 -9.1875 C 10.34375 -9.65625 9.53125 -9.890625 8.65625 -9.890625 C 7.789062 -9.890625 7.085938 -9.597656 6.546875 -9.015625 C 6.003906 -8.429688 5.734375 -7.703125 5.734375 -6.828125 C 5.734375 -5.929688 6.003906 -5.195312 6.546875 -4.625 Z M 6.546875 -4.625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-7">
|
||||
<path d="M 2.796875 -13.640625 L 2.796875 -17.046875 L 7.5 -17.046875 L 7.5 -13.640625 L 11.140625 -13.640625 L 11.140625 -9.859375 L 7.5 -9.859375 L 7.5 -6.078125 C 7.5 -5.273438 7.6875 -4.703125 8.0625 -4.359375 C 8.4375 -4.023438 8.988281 -3.859375 9.71875 -3.859375 C 10.164062 -3.859375 10.640625 -3.90625 11.140625 -4 L 11.140625 -0.078125 C 10.410156 0.0664062 9.5625 0.140625 8.59375 0.140625 C 6.851562 0.140625 5.453125 -0.273438 4.390625 -1.109375 C 3.328125 -1.941406 2.796875 -3.207031 2.796875 -4.90625 L 2.796875 -9.859375 L 0.84375 -9.859375 L 0.84375 -13.640625 Z M 2.796875 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-8">
|
||||
<path d="M 1.546875 0 L 1.546875 -13.640625 L 6.25 -13.640625 L 6.25 0 Z M 1.203125 -17.78125 C 1.203125 -18.488281 1.460938 -19.097656 1.984375 -19.609375 C 2.503906 -20.128906 3.140625 -20.390625 3.890625 -20.390625 C 4.640625 -20.390625 5.273438 -20.128906 5.796875 -19.609375 C 6.316406 -19.097656 6.578125 -18.488281 6.578125 -17.78125 C 6.578125 -17.070312 6.316406 -16.460938 5.796875 -15.953125 C 5.273438 -15.429688 4.640625 -15.171875 3.890625 -15.171875 C 3.140625 -15.171875 2.503906 -15.425781 1.984375 -15.9375 C 1.460938 -16.457031 1.203125 -17.070312 1.203125 -17.78125 Z M 1.203125 -17.78125 "/>
|
||||
</g>
|
||||
<g id="glyph-0-9">
|
||||
<path d="M 2.828125 -11.90625 C 4.054688 -13.25 5.671875 -13.921875 7.671875 -13.921875 C 9.390625 -13.921875 10.601562 -13.472656 11.3125 -12.578125 L 11.3125 -13.640625 L 15.734375 -13.640625 L 15.734375 5.59375 L 11.03125 5.59375 L 11.03125 -0.75 C 10.25 -0.0625 9.128906 0.28125 7.671875 0.28125 C 5.671875 0.28125 4.054688 -0.394531 2.828125 -1.75 C 1.597656 -3.101562 0.984375 -4.785156 0.984375 -6.796875 C 0.984375 -8.835938 1.597656 -10.539062 2.828125 -11.90625 Z M 6.546875 -4.625 C 7.085938 -4.039062 7.789062 -3.75 8.65625 -3.75 C 9.53125 -3.75 10.34375 -3.984375 11.09375 -4.453125 L 11.09375 -9.15625 C 10.269531 -9.644531 9.457031 -9.890625 8.65625 -9.890625 C 7.789062 -9.890625 7.085938 -9.597656 6.546875 -9.015625 C 6.003906 -8.429688 5.734375 -7.691406 5.734375 -6.796875 C 5.734375 -5.921875 6.003906 -5.195312 6.546875 -4.625 Z M 6.546875 -4.625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-10">
|
||||
<path d="M 1.40625 -13.640625 L 6.109375 -13.640625 L 6.109375 -6.1875 C 6.109375 -5.382812 6.28125 -4.773438 6.625 -4.359375 C 6.96875 -3.953125 7.578125 -3.75 8.453125 -3.75 C 9.109375 -3.75 9.71875 -3.898438 10.28125 -4.203125 L 10.28125 -13.640625 L 14.984375 -13.640625 L 14.984375 0 L 10.578125 0 L 10.578125 -1.140625 C 10.242188 -0.710938 9.722656 -0.367188 9.015625 -0.109375 C 8.304688 0.148438 7.597656 0.28125 6.890625 0.28125 C 5.023438 0.28125 3.644531 -0.238281 2.75 -1.28125 C 1.851562 -2.332031 1.40625 -3.789062 1.40625 -5.65625 Z M 1.40625 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-11">
|
||||
<path d="M 15.625 -6.796875 C 15.625 -6.347656 15.597656 -5.898438 15.546875 -5.453125 L 5.59375 -5.453125 C 6.175781 -4.191406 7.53125 -3.5625 9.65625 -3.5625 C 11.132812 -3.5625 12.609375 -3.820312 14.078125 -4.34375 L 14.078125 -0.59375 C 12.703125 -0.0078125 11.085938 0.28125 9.234375 0.28125 C 6.703125 0.28125 4.691406 -0.359375 3.203125 -1.640625 C 1.722656 -2.929688 0.984375 -4.660156 0.984375 -6.828125 C 0.984375 -8.867188 1.675781 -10.5625 3.0625 -11.90625 C 4.457031 -13.25 6.207031 -13.921875 8.3125 -13.921875 C 10.425781 -13.921875 12.171875 -13.25 13.546875 -11.90625 C 14.929688 -10.5625 15.625 -8.859375 15.625 -6.796875 Z M 8.3125 -10.109375 C 6.875 -10.109375 5.941406 -9.472656 5.515625 -8.203125 L 11.03125 -8.203125 C 10.625 -9.472656 9.71875 -10.109375 8.3125 -10.109375 Z M 8.3125 -10.109375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-12">
|
||||
</g>
|
||||
<g id="glyph-0-13">
|
||||
<path d="M 2.4375 -12.65625 C 3.40625 -13.5 4.75 -13.921875 6.46875 -13.921875 C 8.28125 -13.921875 9.894531 -13.65625 11.3125 -13.125 L 11.3125 -9.484375 C 9.632812 -10.015625 8.046875 -10.28125 6.546875 -10.28125 C 5.671875 -10.28125 5.234375 -10.070312 5.234375 -9.65625 C 5.234375 -9.46875 5.34375 -9.320312 5.5625 -9.21875 C 5.789062 -9.125 6.203125 -9.007812 6.796875 -8.875 L 7.984375 -8.625 C 9.472656 -8.300781 10.5625 -7.816406 11.25 -7.171875 C 11.945312 -6.535156 12.296875 -5.617188 12.296875 -4.421875 C 12.296875 -3.023438 11.769531 -1.890625 10.71875 -1.015625 C 9.675781 -0.148438 8.164062 0.28125 6.1875 0.28125 C 4.4375 0.28125 2.820312 -0.0234375 1.34375 -0.640625 L 1.34375 -4.484375 C 3.039062 -3.773438 4.722656 -3.421875 6.390625 -3.421875 C 7.472656 -3.421875 8.015625 -3.660156 8.015625 -4.140625 C 8.015625 -4.347656 7.910156 -4.503906 7.703125 -4.609375 C 7.492188 -4.710938 7.09375 -4.816406 6.5 -4.921875 L 5.1875 -5.203125 C 2.382812 -5.804688 0.984375 -7.191406 0.984375 -9.359375 C 0.984375 -10.710938 1.46875 -11.8125 2.4375 -12.65625 Z M 2.4375 -12.65625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-14">
|
||||
<path d="M 0.140625 -13.640625 L 5.234375 -13.640625 L 8.203125 -6.828125 L 11.203125 -13.640625 L 16.21875 -13.640625 L 7.03125 5.59375 L 2.078125 5.59375 L 5.796875 -1.875 Z M 0.140625 -13.640625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-15">
|
||||
<path d="M 9.21875 -19.40625 L 10.046875 -15.171875 L 6.546875 -15.171875 L 4.3125 -19.40625 Z M 15.625 -6.796875 C 15.625 -6.347656 15.597656 -5.898438 15.546875 -5.453125 L 5.59375 -5.453125 C 6.175781 -4.191406 7.53125 -3.5625 9.65625 -3.5625 C 11.132812 -3.5625 12.609375 -3.820312 14.078125 -4.34375 L 14.078125 -0.59375 C 12.703125 -0.0078125 11.085938 0.28125 9.234375 0.28125 C 6.703125 0.28125 4.691406 -0.359375 3.203125 -1.640625 C 1.722656 -2.929688 0.984375 -4.660156 0.984375 -6.828125 C 0.984375 -8.867188 1.675781 -10.5625 3.0625 -11.90625 C 4.457031 -13.25 6.207031 -13.921875 8.3125 -13.921875 C 10.425781 -13.921875 12.171875 -13.25 13.546875 -11.90625 C 14.929688 -10.5625 15.625 -8.859375 15.625 -6.796875 Z M 8.3125 -10.109375 C 6.875 -10.109375 5.941406 -9.472656 5.515625 -8.203125 L 11.03125 -8.203125 C 10.625 -9.472656 9.71875 -10.109375 8.3125 -10.109375 Z M 8.3125 -10.109375 "/>
|
||||
</g>
|
||||
<g id="glyph-0-16">
|
||||
<path d="M 2.828125 -11.90625 C 4.054688 -13.25 5.671875 -13.921875 7.671875 -13.921875 C 9.128906 -13.921875 10.25 -13.570312 11.03125 -12.875 L 11.03125 -19.3125 L 15.734375 -19.3125 L 15.734375 0 L 11.375 0 L 11.375 -1.140625 C 10.65625 -0.191406 9.421875 0.28125 7.671875 0.28125 C 5.671875 0.28125 4.054688 -0.394531 2.828125 -1.75 C 1.597656 -3.101562 0.984375 -4.796875 0.984375 -6.828125 C 0.984375 -8.847656 1.597656 -10.539062 2.828125 -11.90625 Z M 6.546875 -4.625 C 7.085938 -4.039062 7.789062 -3.75 8.65625 -3.75 C 9.457031 -3.75 10.269531 -3.992188 11.09375 -4.484375 L 11.09375 -9.1875 C 10.34375 -9.65625 9.53125 -9.890625 8.65625 -9.890625 C 7.789062 -9.890625 7.085938 -9.597656 6.546875 -9.015625 C 6.003906 -8.429688 5.734375 -7.703125 5.734375 -6.828125 C 5.734375 -5.929688 6.003906 -5.195312 6.546875 -4.625 Z M 6.546875 -4.625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-17">
|
||||
<path d="M 3.140625 -11.90625 C 4.578125 -13.25 6.40625 -13.921875 8.625 -13.921875 C 10.28125 -13.921875 11.800781 -13.65625 13.1875 -13.125 L 13.1875 -9.046875 C 11.882812 -9.609375 10.644531 -9.890625 9.46875 -9.890625 C 8.269531 -9.890625 7.347656 -9.601562 6.703125 -9.03125 C 6.054688 -8.457031 5.734375 -7.722656 5.734375 -6.828125 C 5.734375 -5.910156 6.054688 -5.171875 6.703125 -4.609375 C 7.347656 -4.054688 8.269531 -3.78125 9.46875 -3.78125 C 10.582031 -3.78125 11.820312 -4.0625 13.1875 -4.625 L 13.1875 -0.5 C 11.800781 0.0195312 10.28125 0.28125 8.625 0.28125 C 6.40625 0.28125 4.578125 -0.394531 3.140625 -1.75 C 1.703125 -3.101562 0.984375 -4.796875 0.984375 -6.828125 C 0.984375 -8.867188 1.703125 -10.5625 3.140625 -11.90625 Z M 3.140625 -11.90625 "/>
|
||||
</g>
|
||||
<g id="glyph-0-18">
|
||||
<path d="M 1.546875 -13.25 C 1.546875 -15.050781 2.179688 -16.488281 3.453125 -17.5625 C 4.734375 -18.644531 6.398438 -19.1875 8.453125 -19.1875 C 10.660156 -19.1875 12.734375 -18.8125 14.671875 -18.0625 L 14.671875 -13.78125 C 12.578125 -14.613281 10.609375 -15.03125 8.765625 -15.03125 C 7.117188 -15.03125 6.296875 -14.582031 6.296875 -13.6875 C 6.296875 -13.238281 6.484375 -12.90625 6.859375 -12.6875 C 7.234375 -12.476562 7.882812 -12.234375 8.8125 -11.953125 L 10.1875 -11.5625 C 12 -11.0625 13.367188 -10.351562 14.296875 -9.4375 C 15.234375 -8.519531 15.703125 -7.332031 15.703125 -5.875 C 15.703125 -3.882812 15.007812 -2.335938 13.625 -1.234375 C 12.25 -0.128906 10.378906 0.421875 8.015625 0.421875 C 5.941406 0.421875 3.929688 0.046875 1.984375 -0.703125 L 1.984375 -5.046875 C 4.097656 -4.203125 6.097656 -3.78125 7.984375 -3.78125 C 8.953125 -3.78125 9.6875 -3.925781 10.1875 -4.21875 C 10.695312 -4.519531 10.953125 -4.929688 10.953125 -5.453125 C 10.953125 -5.941406 10.78125 -6.285156 10.4375 -6.484375 C 10.101562 -6.691406 9.441406 -6.929688 8.453125 -7.203125 L 6.9375 -7.609375 C 3.34375 -8.617188 1.546875 -10.5 1.546875 -13.25 Z M 1.546875 -13.25 "/>
|
||||
</g>
|
||||
<g id="glyph-0-19">
|
||||
<path d="M 3.953125 -16.375 C 5.847656 -18.25 8.367188 -19.1875 11.515625 -19.1875 C 13.878906 -19.1875 15.976562 -18.820312 17.8125 -18.09375 L 17.8125 -13.5 C 15.945312 -14.238281 14.03125 -14.609375 12.0625 -14.609375 C 10.195312 -14.609375 8.738281 -14.125 7.6875 -13.15625 C 6.644531 -12.1875 6.125 -10.925781 6.125 -9.375 C 6.125 -7.832031 6.644531 -6.570312 7.6875 -5.59375 C 8.738281 -4.625 10.195312 -4.140625 12.0625 -4.140625 C 14.03125 -4.140625 15.945312 -4.515625 17.8125 -5.265625 L 17.8125 -0.671875 C 15.976562 0.0546875 13.878906 0.421875 11.515625 0.421875 C 8.367188 0.421875 5.84375 -0.515625 3.9375 -2.390625 C 2.039062 -4.265625 1.09375 -6.59375 1.09375 -9.375 C 1.09375 -12.15625 2.046875 -14.488281 3.953125 -16.375 Z M 3.953125 -16.375 "/>
|
||||
</g>
|
||||
</g>
|
||||
<clipPath id="clip-0">
|
||||
<path clip-rule="nonzero" d="M 2 44 L 80 44 L 80 81 L 2 81 Z M 2 44 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-1">
|
||||
<path clip-rule="nonzero" d="M 20.523438 44.191406 C 10.375 44.191406 2.144531 52.421875 2.144531 62.570312 C 2.144531 72.71875 10.375 80.949219 20.523438 80.949219 L 60.722656 80.949219 C 70.871094 80.949219 79.097656 72.71875 79.097656 62.570312 C 79.097656 52.421875 70.871094 44.191406 60.722656 44.191406 Z M 20.523438 44.191406 "/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-pattern-0" gradientUnits="userSpaceOnUse" x1="0.00000772817" y1="0" x2="1.000005" y2="0" gradientTransform="matrix(-76.952225, 0, 0, -76.952225, 79.098595, 62.570047)">
|
||||
<stop offset="0" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.015625" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0234375" stop-color="rgb(100%, 100%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.03125" stop-color="rgb(100%, 100%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.0390625" stop-color="rgb(100%, 100%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.046875" stop-color="rgb(100%, 99.607849%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.0546875" stop-color="rgb(100%, 99.607849%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.0625" stop-color="rgb(100%, 99.607849%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.0703125" stop-color="rgb(100%, 99.607849%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.078125" stop-color="rgb(100%, 99.607849%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.0859375" stop-color="rgb(100%, 99.607849%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.09375" stop-color="rgb(100%, 99.607849%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.101562" stop-color="rgb(100%, 99.607849%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.109375" stop-color="rgb(100%, 99.215698%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.117187" stop-color="rgb(100%, 99.215698%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.125" stop-color="rgb(99.607849%, 99.215698%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.132812" stop-color="rgb(99.607849%, 99.215698%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.140625" stop-color="rgb(99.607849%, 99.215698%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.148438" stop-color="rgb(99.607849%, 99.215698%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.15625" stop-color="rgb(99.607849%, 99.215698%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.164062" stop-color="rgb(99.607849%, 99.215698%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.171875" stop-color="rgb(99.607849%, 98.823547%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.179688" stop-color="rgb(99.607849%, 98.823547%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.1875" stop-color="rgb(99.607849%, 98.823547%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.195312" stop-color="rgb(99.607849%, 98.823547%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.203125" stop-color="rgb(99.607849%, 98.823547%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.210937" stop-color="rgb(99.607849%, 98.823547%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.21875" stop-color="rgb(99.607849%, 98.823547%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.226562" stop-color="rgb(99.607849%, 98.823547%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.234375" stop-color="rgb(99.607849%, 98.431396%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.242188" stop-color="rgb(99.607849%, 98.431396%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.25" stop-color="rgb(99.607849%, 98.431396%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.257812" stop-color="rgb(99.607849%, 98.431396%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.265625" stop-color="rgb(99.607849%, 98.431396%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.273438" stop-color="rgb(99.607849%, 98.431396%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.28125" stop-color="rgb(99.607849%, 98.431396%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.289062" stop-color="rgb(99.607849%, 98.431396%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.296875" stop-color="rgb(99.607849%, 98.431396%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.304688" stop-color="rgb(99.607849%, 98.431396%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.3125" stop-color="rgb(99.607849%, 98.431396%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.320312" stop-color="rgb(99.607849%, 98.039246%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.328125" stop-color="rgb(99.607849%, 98.039246%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.335938" stop-color="rgb(99.215698%, 98.039246%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.34375" stop-color="rgb(99.215698%, 98.039246%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.351562" stop-color="rgb(99.215698%, 98.039246%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.359375" stop-color="rgb(99.215698%, 98.039246%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.367188" stop-color="rgb(99.215698%, 98.039246%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.375" stop-color="rgb(99.215698%, 98.039246%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.382812" stop-color="rgb(99.215698%, 97.647095%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.390625" stop-color="rgb(99.215698%, 97.647095%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.398437" stop-color="rgb(99.215698%, 97.647095%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.40625" stop-color="rgb(99.215698%, 97.647095%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.414062" stop-color="rgb(99.215698%, 97.647095%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.421875" stop-color="rgb(99.215698%, 97.647095%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.429688" stop-color="rgb(99.215698%, 97.647095%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.4375" stop-color="rgb(99.215698%, 97.647095%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.445312" stop-color="rgb(99.215698%, 97.254944%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.453125" stop-color="rgb(99.215698%, 97.254944%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.460938" stop-color="rgb(99.215698%, 97.254944%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.46875" stop-color="rgb(99.215698%, 97.254944%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.476562" stop-color="rgb(99.215698%, 97.254944%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.484375" stop-color="rgb(99.215698%, 97.254944%, 80.784607%)" stop-opacity="1"/>
|
||||
<stop offset="0.492187" stop-color="rgb(98.823547%, 97.254944%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="rgb(98.823547%, 97.254944%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.507812" stop-color="rgb(98.823547%, 96.862793%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.515625" stop-color="rgb(98.823547%, 96.862793%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.523438" stop-color="rgb(98.823547%, 96.862793%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.53125" stop-color="rgb(98.823547%, 96.862793%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.539062" stop-color="rgb(98.823547%, 96.862793%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.546875" stop-color="rgb(98.823547%, 96.862793%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.554688" stop-color="rgb(98.823547%, 96.862793%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.5625" stop-color="rgb(98.823547%, 96.862793%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.570312" stop-color="rgb(98.823547%, 96.862793%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.578125" stop-color="rgb(98.823547%, 96.862793%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.585938" stop-color="rgb(98.823547%, 96.470642%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.59375" stop-color="rgb(98.823547%, 96.470642%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.601562" stop-color="rgb(98.823547%, 96.470642%, 76.078796%)" stop-opacity="1"/>
|
||||
<stop offset="0.609375" stop-color="rgb(98.823547%, 96.470642%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.617188" stop-color="rgb(98.431396%, 96.470642%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.625" stop-color="rgb(98.431396%, 96.470642%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.632812" stop-color="rgb(98.431396%, 96.470642%, 74.902344%)" stop-opacity="1"/>
|
||||
<stop offset="0.640625" stop-color="rgb(98.431396%, 96.470642%, 74.510193%)" stop-opacity="1"/>
|
||||
<stop offset="0.648438" stop-color="rgb(98.431396%, 96.078491%, 74.118042%)" stop-opacity="1"/>
|
||||
<stop offset="0.65625" stop-color="rgb(98.431396%, 96.078491%, 73.725891%)" stop-opacity="1"/>
|
||||
<stop offset="0.664062" stop-color="rgb(98.431396%, 96.078491%, 73.33374%)" stop-opacity="1"/>
|
||||
<stop offset="0.671875" stop-color="rgb(98.431396%, 96.078491%, 73.33374%)" stop-opacity="1"/>
|
||||
<stop offset="0.679688" stop-color="rgb(98.431396%, 96.078491%, 72.941589%)" stop-opacity="1"/>
|
||||
<stop offset="0.6875" stop-color="rgb(98.431396%, 96.078491%, 72.549438%)" stop-opacity="1"/>
|
||||
<stop offset="0.695312" stop-color="rgb(98.431396%, 96.078491%, 72.157288%)" stop-opacity="1"/>
|
||||
<stop offset="0.703125" stop-color="rgb(98.431396%, 96.078491%, 71.765137%)" stop-opacity="1"/>
|
||||
<stop offset="0.710938" stop-color="rgb(98.431396%, 96.078491%, 71.372986%)" stop-opacity="1"/>
|
||||
<stop offset="0.71875" stop-color="rgb(98.431396%, 96.078491%, 71.372986%)" stop-opacity="1"/>
|
||||
<stop offset="0.726562" stop-color="rgb(98.431396%, 95.68634%, 70.980835%)" stop-opacity="1"/>
|
||||
<stop offset="0.734375" stop-color="rgb(98.431396%, 95.68634%, 70.588684%)" stop-opacity="1"/>
|
||||
<stop offset="0.742188" stop-color="rgb(98.431396%, 95.68634%, 70.196533%)" stop-opacity="1"/>
|
||||
<stop offset="0.75" stop-color="rgb(98.431396%, 95.68634%, 69.804382%)" stop-opacity="1"/>
|
||||
<stop offset="0.757812" stop-color="rgb(98.431396%, 95.68634%, 69.412231%)" stop-opacity="1"/>
|
||||
<stop offset="0.765625" stop-color="rgb(98.431396%, 95.68634%, 69.412231%)" stop-opacity="1"/>
|
||||
<stop offset="0.773437" stop-color="rgb(98.431396%, 95.68634%, 69.020081%)" stop-opacity="1"/>
|
||||
<stop offset="0.78125" stop-color="rgb(98.431396%, 95.68634%, 68.62793%)" stop-opacity="1"/>
|
||||
<stop offset="0.789062" stop-color="rgb(98.431396%, 95.68634%, 68.62793%)" stop-opacity="1"/>
|
||||
<stop offset="0.796875" stop-color="rgb(98.039246%, 95.68634%, 68.235779%)" stop-opacity="1"/>
|
||||
<stop offset="0.804688" stop-color="rgb(98.039246%, 95.68634%, 67.843628%)" stop-opacity="1"/>
|
||||
<stop offset="0.8125" stop-color="rgb(98.039246%, 95.294189%, 67.451477%)" stop-opacity="1"/>
|
||||
<stop offset="0.820312" stop-color="rgb(98.039246%, 95.294189%, 67.059326%)" stop-opacity="1"/>
|
||||
<stop offset="0.828125" stop-color="rgb(98.039246%, 95.294189%, 66.667175%)" stop-opacity="1"/>
|
||||
<stop offset="0.835938" stop-color="rgb(98.039246%, 95.294189%, 66.667175%)" stop-opacity="1"/>
|
||||
<stop offset="0.84375" stop-color="rgb(98.039246%, 95.294189%, 66.275024%)" stop-opacity="1"/>
|
||||
<stop offset="0.851562" stop-color="rgb(98.039246%, 95.294189%, 65.882874%)" stop-opacity="1"/>
|
||||
<stop offset="0.859375" stop-color="rgb(98.039246%, 95.294189%, 65.490723%)" stop-opacity="1"/>
|
||||
<stop offset="0.867187" stop-color="rgb(98.039246%, 95.294189%, 65.490723%)" stop-opacity="1"/>
|
||||
<stop offset="0.875" stop-color="rgb(98.039246%, 95.294189%, 65.098572%)" stop-opacity="1"/>
|
||||
<stop offset="0.882812" stop-color="rgb(98.039246%, 95.294189%, 64.706421%)" stop-opacity="1"/>
|
||||
<stop offset="0.890625" stop-color="rgb(98.039246%, 94.902039%, 64.31427%)" stop-opacity="1"/>
|
||||
<stop offset="0.898438" stop-color="rgb(98.039246%, 94.902039%, 64.31427%)" stop-opacity="1"/>
|
||||
<stop offset="0.90625" stop-color="rgb(98.039246%, 94.902039%, 63.922119%)" stop-opacity="1"/>
|
||||
<stop offset="0.914062" stop-color="rgb(98.039246%, 94.902039%, 63.529968%)" stop-opacity="1"/>
|
||||
<stop offset="0.921875" stop-color="rgb(98.039246%, 94.902039%, 63.137817%)" stop-opacity="1"/>
|
||||
<stop offset="0.9375" stop-color="rgb(98.039246%, 94.902039%, 62.745667%)" stop-opacity="1"/>
|
||||
<stop offset="0.945312" stop-color="rgb(98.039246%, 94.902039%, 62.745667%)" stop-opacity="1"/>
|
||||
<stop offset="0.953125" stop-color="rgb(98.039246%, 94.902039%, 62.353516%)" stop-opacity="1"/>
|
||||
<stop offset="0.960937" stop-color="rgb(98.039246%, 94.902039%, 61.961365%)" stop-opacity="1"/>
|
||||
<stop offset="0.96875" stop-color="rgb(98.039246%, 94.902039%, 61.569214%)" stop-opacity="1"/>
|
||||
<stop offset="0.984375" stop-color="rgb(98.039246%, 94.509888%, 61.177063%)" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="rgb(98.039246%, 94.509888%, 60.784912%)" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip-2">
|
||||
<path clip-rule="nonzero" d="M 13 15 L 80 15 L 80 81 L 13 81 Z M 13 15 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-3">
|
||||
<path clip-rule="nonzero" d="M 19.300781 21.152344 C 12.125 28.328125 12.125 39.964844 19.300781 47.140625 L 47.726562 75.566406 C 51.316406 79.15625 56.019531 80.949219 60.722656 80.949219 C 65.425781 80.949219 70.128906 79.15625 73.714844 75.566406 C 80.894531 68.386719 80.894531 56.753906 73.714844 49.574219 L 45.292969 21.152344 C 41.703125 17.5625 37 15.769531 32.296875 15.769531 C 27.59375 15.769531 22.890625 17.5625 19.300781 21.152344 "/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-pattern-1" gradientUnits="userSpaceOnUse" x1="-0.115399" y1="0" x2="1.115408" y2="0" gradientTransform="matrix(-54.414318, -54.414318, 54.414318, -54.414318, 73.71669, 75.565292)">
|
||||
<stop offset="0" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0625" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.09375" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0976562" stop-color="rgb(99.607849%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.101562" stop-color="rgb(99.607849%, 99.607849%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.105469" stop-color="rgb(99.215698%, 99.607849%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.109375" stop-color="rgb(99.215698%, 99.607849%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.113281" stop-color="rgb(98.823547%, 99.215698%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.117188" stop-color="rgb(98.431396%, 99.215698%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.121094" stop-color="rgb(98.431396%, 99.215698%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.125" stop-color="rgb(98.039246%, 99.215698%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.128906" stop-color="rgb(98.039246%, 98.823547%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.132812" stop-color="rgb(97.647095%, 98.823547%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.136719" stop-color="rgb(97.254944%, 98.823547%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.140625" stop-color="rgb(97.254944%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.144531" stop-color="rgb(96.862793%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.148438" stop-color="rgb(96.470642%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.152344" stop-color="rgb(96.078491%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.15625" stop-color="rgb(95.68634%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.160156" stop-color="rgb(95.68634%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.164062" stop-color="rgb(95.294189%, 98.431396%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.167969" stop-color="rgb(94.902039%, 98.039246%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.171875" stop-color="rgb(94.902039%, 98.039246%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.175781" stop-color="rgb(94.509888%, 98.039246%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.179688" stop-color="rgb(94.509888%, 97.647095%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.183594" stop-color="rgb(94.117737%, 97.647095%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.1875" stop-color="rgb(93.725586%, 97.647095%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.191406" stop-color="rgb(93.725586%, 97.254944%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.195312" stop-color="rgb(93.333435%, 97.254944%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.199219" stop-color="rgb(93.333435%, 97.254944%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.203125" stop-color="rgb(92.941284%, 97.254944%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.207031" stop-color="rgb(92.549133%, 96.862793%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.210937" stop-color="rgb(92.549133%, 96.862793%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.214844" stop-color="rgb(92.156982%, 96.862793%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.21875" stop-color="rgb(91.764832%, 96.470642%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.222656" stop-color="rgb(91.372681%, 96.470642%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.226563" stop-color="rgb(90.98053%, 96.470642%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.230469" stop-color="rgb(90.98053%, 96.078491%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.234375" stop-color="rgb(90.588379%, 96.078491%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.238281" stop-color="rgb(90.588379%, 96.078491%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.242188" stop-color="rgb(90.196228%, 95.68634%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.246094" stop-color="rgb(89.804077%, 95.68634%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.25" stop-color="rgb(89.804077%, 95.68634%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.253906" stop-color="rgb(89.411926%, 95.68634%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.257812" stop-color="rgb(89.411926%, 95.294189%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.261719" stop-color="rgb(89.019775%, 95.294189%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.265625" stop-color="rgb(88.627625%, 95.294189%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.269531" stop-color="rgb(88.627625%, 94.902039%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.273438" stop-color="rgb(88.235474%, 94.902039%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.277344" stop-color="rgb(88.235474%, 94.902039%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.28125" stop-color="rgb(87.843323%, 94.509888%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.285156" stop-color="rgb(87.451172%, 94.509888%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.289062" stop-color="rgb(87.451172%, 94.509888%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.292969" stop-color="rgb(87.059021%, 94.509888%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.296875" stop-color="rgb(86.66687%, 94.117737%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.300781" stop-color="rgb(86.66687%, 94.117737%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.304688" stop-color="rgb(86.274719%, 94.117737%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.308594" stop-color="rgb(85.882568%, 93.725586%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.3125" stop-color="rgb(85.490417%, 93.725586%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.316406" stop-color="rgb(85.098267%, 93.725586%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.320312" stop-color="rgb(85.098267%, 93.333435%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.324219" stop-color="rgb(84.706116%, 93.333435%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.328125" stop-color="rgb(84.706116%, 93.333435%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.332031" stop-color="rgb(84.313965%, 93.333435%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.335938" stop-color="rgb(83.921814%, 92.941284%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.339844" stop-color="rgb(83.921814%, 92.941284%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.34375" stop-color="rgb(83.529663%, 92.941284%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.347656" stop-color="rgb(83.529663%, 92.549133%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.351562" stop-color="rgb(83.137512%, 92.549133%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.355469" stop-color="rgb(82.745361%, 92.549133%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.359375" stop-color="rgb(82.35321%, 92.156982%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.363281" stop-color="rgb(81.96106%, 92.156982%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.367188" stop-color="rgb(81.96106%, 92.156982%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.371094" stop-color="rgb(81.568909%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.375" stop-color="rgb(81.176758%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.378906" stop-color="rgb(81.176758%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.382812" stop-color="rgb(80.784607%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.386719" stop-color="rgb(80.784607%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.390625" stop-color="rgb(80.392456%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.394531" stop-color="rgb(80.000305%, 91.764832%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.398438" stop-color="rgb(80.000305%, 91.372681%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.402344" stop-color="rgb(79.608154%, 91.372681%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.40625" stop-color="rgb(79.608154%, 91.372681%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.410156" stop-color="rgb(79.216003%, 90.98053%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.414062" stop-color="rgb(78.823853%, 90.98053%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.417969" stop-color="rgb(78.431702%, 90.98053%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.421875" stop-color="rgb(78.431702%, 90.98053%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.425781" stop-color="rgb(78.039551%, 90.588379%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.429688" stop-color="rgb(77.6474%, 90.588379%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.433594" stop-color="rgb(77.255249%, 90.588379%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.4375" stop-color="rgb(77.255249%, 90.196228%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.441406" stop-color="rgb(76.863098%, 90.196228%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.445312" stop-color="rgb(76.470947%, 90.196228%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.449219" stop-color="rgb(76.470947%, 89.804077%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.453125" stop-color="rgb(76.078796%, 89.804077%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.457031" stop-color="rgb(75.686646%, 89.804077%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.460938" stop-color="rgb(75.686646%, 89.804077%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.464844" stop-color="rgb(75.294495%, 89.411926%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.46875" stop-color="rgb(74.902344%, 89.411926%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.472656" stop-color="rgb(74.510193%, 89.411926%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.476563" stop-color="rgb(74.510193%, 89.019775%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.480469" stop-color="rgb(74.118042%, 89.019775%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.484375" stop-color="rgb(73.725891%, 89.019775%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.488281" stop-color="rgb(73.33374%, 88.627625%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.492187" stop-color="rgb(72.941589%, 88.627625%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.496094" stop-color="rgb(72.941589%, 88.627625%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="rgb(72.549438%, 88.235474%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.503906" stop-color="rgb(72.157288%, 88.235474%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.507812" stop-color="rgb(72.157288%, 88.235474%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.511719" stop-color="rgb(71.765137%, 88.235474%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.515625" stop-color="rgb(71.765137%, 87.843323%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.519531" stop-color="rgb(71.372986%, 87.843323%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.523437" stop-color="rgb(70.980835%, 87.843323%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.527344" stop-color="rgb(70.588684%, 87.451172%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.53125" stop-color="rgb(70.196533%, 87.451172%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.535156" stop-color="rgb(70.196533%, 87.451172%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.539062" stop-color="rgb(69.804382%, 87.059021%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.542969" stop-color="rgb(69.412231%, 87.059021%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.546875" stop-color="rgb(69.412231%, 87.059021%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.550781" stop-color="rgb(69.020081%, 87.059021%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.554687" stop-color="rgb(68.62793%, 86.66687%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.558594" stop-color="rgb(68.235779%, 86.66687%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.5625" stop-color="rgb(67.843628%, 86.66687%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.566406" stop-color="rgb(67.843628%, 86.66687%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.570312" stop-color="rgb(67.451477%, 86.66687%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.574219" stop-color="rgb(67.059326%, 86.66687%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.578125" stop-color="rgb(66.667175%, 86.274719%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.582031" stop-color="rgb(66.275024%, 86.274719%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.585937" stop-color="rgb(66.275024%, 86.274719%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.589844" stop-color="rgb(65.882874%, 86.274719%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.59375" stop-color="rgb(65.490723%, 85.882568%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.597656" stop-color="rgb(65.490723%, 85.882568%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.601562" stop-color="rgb(65.098572%, 85.882568%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.605469" stop-color="rgb(64.706421%, 85.490417%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.609375" stop-color="rgb(64.31427%, 85.490417%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.613281" stop-color="rgb(63.922119%, 85.490417%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.617188" stop-color="rgb(63.922119%, 85.098267%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.621094" stop-color="rgb(63.529968%, 85.098267%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.625" stop-color="rgb(63.137817%, 85.098267%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.628906" stop-color="rgb(63.137817%, 85.098267%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.632812" stop-color="rgb(62.745667%, 84.706116%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.636719" stop-color="rgb(62.353516%, 84.706116%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.640625" stop-color="rgb(61.961365%, 84.706116%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.644531" stop-color="rgb(61.961365%, 84.313965%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.648438" stop-color="rgb(61.569214%, 84.313965%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.652344" stop-color="rgb(61.177063%, 84.313965%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.65625" stop-color="rgb(60.784912%, 83.921814%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.660156" stop-color="rgb(60.392761%, 83.921814%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.664063" stop-color="rgb(60.392761%, 83.921814%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.667969" stop-color="rgb(60.00061%, 83.529663%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.671875" stop-color="rgb(59.608459%, 83.529663%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.675781" stop-color="rgb(59.608459%, 83.529663%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.679688" stop-color="rgb(59.216309%, 83.529663%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.683594" stop-color="rgb(58.824158%, 83.137512%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.6875" stop-color="rgb(58.432007%, 83.137512%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.691406" stop-color="rgb(58.039856%, 83.137512%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.695313" stop-color="rgb(58.039856%, 83.137512%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.699219" stop-color="rgb(57.647705%, 83.137512%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.703125" stop-color="rgb(57.255554%, 83.137512%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.707031" stop-color="rgb(56.863403%, 82.745361%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.710938" stop-color="rgb(56.471252%, 82.745361%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.714844" stop-color="rgb(56.471252%, 82.745361%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.71875" stop-color="rgb(56.079102%, 82.745361%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.722656" stop-color="rgb(55.686951%, 82.35321%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.726563" stop-color="rgb(55.686951%, 82.35321%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.730469" stop-color="rgb(55.2948%, 82.35321%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.734375" stop-color="rgb(54.902649%, 81.96106%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.738281" stop-color="rgb(54.510498%, 81.96106%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.742188" stop-color="rgb(54.118347%, 81.96106%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.746094" stop-color="rgb(54.118347%, 81.568909%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.75" stop-color="rgb(53.726196%, 81.568909%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.753906" stop-color="rgb(53.334045%, 81.568909%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.757812" stop-color="rgb(53.334045%, 81.568909%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.761719" stop-color="rgb(52.941895%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.765625" stop-color="rgb(52.549744%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.769531" stop-color="rgb(52.157593%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.773437" stop-color="rgb(52.157593%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.777344" stop-color="rgb(51.765442%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.78125" stop-color="rgb(51.373291%, 81.176758%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.785156" stop-color="rgb(50.98114%, 80.784607%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.789062" stop-color="rgb(50.588989%, 80.784607%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.792969" stop-color="rgb(50.588989%, 80.784607%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.796875" stop-color="rgb(50.196838%, 80.392456%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.800781" stop-color="rgb(49.803162%, 80.392456%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.804687" stop-color="rgb(49.803162%, 80.392456%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.808594" stop-color="rgb(49.411011%, 80.392456%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.8125" stop-color="rgb(49.01886%, 80.000305%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.816406" stop-color="rgb(48.626709%, 80.000305%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.820312" stop-color="rgb(48.234558%, 80.000305%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.824219" stop-color="rgb(47.842407%, 80.000305%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.828125" stop-color="rgb(47.450256%, 80.000305%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.832031" stop-color="rgb(47.450256%, 80.000305%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.835937" stop-color="rgb(47.058105%, 79.608154%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.839844" stop-color="rgb(46.665955%, 79.608154%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.84375" stop-color="rgb(46.665955%, 79.608154%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.847656" stop-color="rgb(46.273804%, 79.608154%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.851562" stop-color="rgb(45.881653%, 79.216003%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.855469" stop-color="rgb(45.489502%, 79.216003%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.859375" stop-color="rgb(45.097351%, 79.216003%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.863281" stop-color="rgb(45.097351%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.867188" stop-color="rgb(44.7052%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.871094" stop-color="rgb(44.313049%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.875" stop-color="rgb(43.920898%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.878906" stop-color="rgb(43.528748%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.882812" stop-color="rgb(43.528748%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.886719" stop-color="rgb(43.136597%, 78.823853%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.890625" stop-color="rgb(42.744446%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.894531" stop-color="rgb(42.744446%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.898438" stop-color="rgb(42.352295%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.902344" stop-color="rgb(42.352295%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.90625" stop-color="rgb(41.960144%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.9375" stop-color="rgb(41.960144%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="rgb(41.960144%, 78.431702%, 90.98053%)" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip-4">
|
||||
<path clip-rule="nonzero" d="M 42 3 L 80 3 L 80 81 L 42 81 Z M 42 3 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-5">
|
||||
<path clip-rule="nonzero" d="M 42.34375 22.371094 L 42.34375 62.570312 C 42.34375 72.71875 50.570312 80.949219 60.722656 80.949219 C 70.871094 80.949219 79.097656 72.71875 79.097656 62.570312 L 79.097656 22.371094 C 79.097656 12.222656 70.871094 3.996094 60.722656 3.996094 C 50.570312 3.996094 42.34375 12.222656 42.34375 22.371094 "/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-pattern-2" gradientUnits="userSpaceOnUse" x1="0.00000321492" y1="0" x2="0.999994" y2="0" gradientTransform="matrix(0, -76.95372, 76.95372, 0, 60.721073, 80.947947)">
|
||||
<stop offset="0" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0078125" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.015625" stop-color="rgb(99.607849%, 99.607849%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.0234375" stop-color="rgb(99.607849%, 99.215698%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.03125" stop-color="rgb(99.215698%, 98.823547%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.0390625" stop-color="rgb(98.823547%, 98.431396%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.046875" stop-color="rgb(98.431396%, 98.039246%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.0546875" stop-color="rgb(98.431396%, 97.647095%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.0625" stop-color="rgb(98.039246%, 97.254944%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.0703125" stop-color="rgb(97.647095%, 96.862793%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.078125" stop-color="rgb(97.254944%, 96.470642%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.0859375" stop-color="rgb(97.254944%, 96.078491%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.09375" stop-color="rgb(96.862793%, 95.68634%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.101562" stop-color="rgb(96.470642%, 95.294189%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.109375" stop-color="rgb(96.078491%, 94.902039%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.117188" stop-color="rgb(96.078491%, 94.509888%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.125" stop-color="rgb(95.68634%, 94.117737%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.132812" stop-color="rgb(95.294189%, 93.725586%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.140625" stop-color="rgb(94.902039%, 93.333435%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.148438" stop-color="rgb(94.902039%, 92.941284%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.15625" stop-color="rgb(94.509888%, 92.549133%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.164062" stop-color="rgb(94.117737%, 92.156982%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.171875" stop-color="rgb(93.725586%, 91.764832%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.179688" stop-color="rgb(93.725586%, 91.372681%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.1875" stop-color="rgb(93.333435%, 90.98053%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.195312" stop-color="rgb(92.941284%, 90.588379%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.203125" stop-color="rgb(92.549133%, 90.196228%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.210937" stop-color="rgb(92.549133%, 89.804077%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.21875" stop-color="rgb(92.156982%, 89.411926%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.226562" stop-color="rgb(91.764832%, 89.019775%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.234375" stop-color="rgb(91.372681%, 88.627625%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.242187" stop-color="rgb(91.372681%, 88.235474%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.25" stop-color="rgb(90.98053%, 87.843323%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.257812" stop-color="rgb(90.98053%, 87.451172%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.265625" stop-color="rgb(90.588379%, 87.451172%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.273438" stop-color="rgb(90.196228%, 87.059021%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.28125" stop-color="rgb(90.196228%, 86.66687%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.289062" stop-color="rgb(89.804077%, 86.274719%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.296875" stop-color="rgb(89.411926%, 85.882568%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.304687" stop-color="rgb(89.019775%, 85.490417%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.3125" stop-color="rgb(89.019775%, 85.098267%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.320312" stop-color="rgb(88.627625%, 84.706116%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.328125" stop-color="rgb(88.627625%, 84.313965%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.335937" stop-color="rgb(88.235474%, 83.921814%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.34375" stop-color="rgb(87.843323%, 83.529663%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.351562" stop-color="rgb(87.451172%, 83.137512%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.359375" stop-color="rgb(87.451172%, 82.745361%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.367188" stop-color="rgb(87.059021%, 82.35321%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.375" stop-color="rgb(87.059021%, 81.96106%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.382812" stop-color="rgb(86.66687%, 81.568909%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.390625" stop-color="rgb(86.274719%, 81.176758%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.398437" stop-color="rgb(85.882568%, 80.784607%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.40625" stop-color="rgb(85.882568%, 80.784607%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.414062" stop-color="rgb(85.490417%, 80.392456%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.421875" stop-color="rgb(85.490417%, 80.000305%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.429688" stop-color="rgb(85.098267%, 79.608154%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.4375" stop-color="rgb(84.706116%, 79.216003%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.445312" stop-color="rgb(84.313965%, 78.823853%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.453125" stop-color="rgb(84.313965%, 78.431702%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.460938" stop-color="rgb(83.921814%, 78.039551%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.46875" stop-color="rgb(83.921814%, 77.6474%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.476562" stop-color="rgb(83.529663%, 77.255249%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.484375" stop-color="rgb(83.529663%, 76.863098%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.492188" stop-color="rgb(83.137512%, 76.470947%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="rgb(82.745361%, 76.470947%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.507812" stop-color="rgb(82.745361%, 76.078796%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.515625" stop-color="rgb(82.35321%, 76.078796%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.523438" stop-color="rgb(81.96106%, 75.686646%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.53125" stop-color="rgb(81.96106%, 75.294495%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.539062" stop-color="rgb(81.568909%, 74.902344%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.546875" stop-color="rgb(81.568909%, 74.510193%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.554687" stop-color="rgb(81.176758%, 74.118042%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.5625" stop-color="rgb(81.176758%, 73.725891%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.570313" stop-color="rgb(80.784607%, 73.33374%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.578125" stop-color="rgb(80.784607%, 73.33374%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.585938" stop-color="rgb(80.392456%, 72.941589%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.59375" stop-color="rgb(80.000305%, 72.549438%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.601562" stop-color="rgb(79.608154%, 72.157288%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.609375" stop-color="rgb(79.608154%, 71.765137%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.617188" stop-color="rgb(79.216003%, 71.372986%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.625" stop-color="rgb(79.216003%, 70.980835%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.632812" stop-color="rgb(78.823853%, 70.588684%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.640625" stop-color="rgb(78.823853%, 70.588684%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.648437" stop-color="rgb(78.431702%, 70.196533%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.65625" stop-color="rgb(78.431702%, 69.804382%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.664063" stop-color="rgb(78.039551%, 69.412231%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.671875" stop-color="rgb(78.039551%, 69.020081%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.679688" stop-color="rgb(77.6474%, 68.62793%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.6875" stop-color="rgb(77.255249%, 68.62793%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.695312" stop-color="rgb(76.863098%, 68.235779%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.703125" stop-color="rgb(76.863098%, 67.843628%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.710938" stop-color="rgb(76.470947%, 67.451477%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.71875" stop-color="rgb(76.470947%, 67.059326%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.726562" stop-color="rgb(76.078796%, 66.667175%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.734375" stop-color="rgb(76.078796%, 66.667175%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.742188" stop-color="rgb(75.686646%, 66.275024%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.75" stop-color="rgb(75.686646%, 65.882874%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.757813" stop-color="rgb(75.686646%, 65.490723%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.765625" stop-color="rgb(75.294495%, 65.098572%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.773438" stop-color="rgb(75.294495%, 65.098572%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.78125" stop-color="rgb(74.902344%, 64.706421%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.789062" stop-color="rgb(74.902344%, 64.31427%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.796875" stop-color="rgb(74.510193%, 63.922119%, 80.784607%)" stop-opacity="1"/>
|
||||
<stop offset="0.804688" stop-color="rgb(74.510193%, 63.922119%, 80.784607%)" stop-opacity="1"/>
|
||||
<stop offset="0.8125" stop-color="rgb(74.118042%, 63.529968%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.820312" stop-color="rgb(74.118042%, 63.137817%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.828125" stop-color="rgb(73.725891%, 62.745667%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.835938" stop-color="rgb(73.33374%, 62.353516%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.84375" stop-color="rgb(72.941589%, 61.961365%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.851563" stop-color="rgb(72.941589%, 61.961365%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.859375" stop-color="rgb(72.549438%, 61.569214%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.867188" stop-color="rgb(72.549438%, 61.177063%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.875" stop-color="rgb(72.157288%, 60.784912%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.890625" stop-color="rgb(71.765137%, 60.392761%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.898437" stop-color="rgb(71.765137%, 60.392761%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.90625" stop-color="rgb(71.765137%, 60.00061%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.914063" stop-color="rgb(71.765137%, 59.608459%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.921875" stop-color="rgb(71.372986%, 59.216309%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.9375" stop-color="rgb(70.980835%, 58.824158%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.945312" stop-color="rgb(70.980835%, 58.824158%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.953125" stop-color="rgb(70.588684%, 58.432007%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.960938" stop-color="rgb(70.588684%, 58.039856%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.96875" stop-color="rgb(70.196533%, 57.647705%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.984375" stop-color="rgb(69.804382%, 57.255554%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="rgb(69.804382%, 56.863403%, 76.470947%)" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip-6">
|
||||
<path clip-rule="nonzero" d="M 42 15 L 108 15 L 108 81 L 42 81 Z M 42 15 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-7">
|
||||
<path clip-rule="nonzero" d="M 76.152344 21.152344 L 47.726562 49.574219 C 40.550781 56.75 40.550781 68.386719 47.726562 75.566406 C 51.316406 79.15625 56.019531 80.949219 60.722656 80.949219 C 65.425781 80.949219 70.128906 79.152344 73.714844 75.566406 L 102.140625 47.140625 C 109.316406 39.964844 109.316406 28.328125 102.140625 21.152344 C 98.550781 17.5625 93.847656 15.769531 89.144531 15.769531 C 84.441406 15.769531 79.738281 17.5625 76.152344 21.152344 "/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-pattern-3" gradientUnits="userSpaceOnUse" x1="-0.115406" y1="0" x2="1.115401" y2="0" gradientTransform="matrix(54.414692, -54.414692, 54.414692, 54.414692, 47.726387, 75.56548)">
|
||||
<stop offset="0" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0625" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.09375" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.101562" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.109375" stop-color="rgb(100%, 99.607849%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.113281" stop-color="rgb(100%, 99.215698%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.117188" stop-color="rgb(100%, 98.823547%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.125" stop-color="rgb(100%, 98.823547%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.132812" stop-color="rgb(100%, 98.431396%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.140625" stop-color="rgb(100%, 98.431396%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.148438" stop-color="rgb(99.607849%, 98.039246%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.152344" stop-color="rgb(99.607849%, 97.647095%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.15625" stop-color="rgb(99.607849%, 97.254944%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.164062" stop-color="rgb(99.607849%, 97.254944%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.171875" stop-color="rgb(99.607849%, 96.862793%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.175781" stop-color="rgb(99.607849%, 96.862793%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.179687" stop-color="rgb(99.607849%, 96.470642%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.1875" stop-color="rgb(99.607849%, 96.470642%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.191406" stop-color="rgb(99.607849%, 96.078491%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.195312" stop-color="rgb(99.607849%, 95.68634%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.203125" stop-color="rgb(99.607849%, 95.68634%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.210938" stop-color="rgb(99.607849%, 95.294189%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.214844" stop-color="rgb(99.607849%, 94.902039%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.21875" stop-color="rgb(99.607849%, 94.902039%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.226562" stop-color="rgb(99.607849%, 94.509888%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.234375" stop-color="rgb(99.215698%, 94.117737%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.242187" stop-color="rgb(99.215698%, 94.117737%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.25" stop-color="rgb(99.215698%, 93.725586%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.253906" stop-color="rgb(99.215698%, 93.333435%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.257812" stop-color="rgb(99.215698%, 93.333435%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.265625" stop-color="rgb(99.215698%, 92.941284%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.273437" stop-color="rgb(99.215698%, 92.549133%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.28125" stop-color="rgb(99.215698%, 92.549133%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.289062" stop-color="rgb(99.215698%, 92.156982%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.292969" stop-color="rgb(99.215698%, 91.764832%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.296875" stop-color="rgb(99.215698%, 91.372681%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.304687" stop-color="rgb(99.215698%, 91.372681%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.3125" stop-color="rgb(98.823547%, 90.98053%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.316406" stop-color="rgb(98.823547%, 90.588379%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.320312" stop-color="rgb(98.823547%, 90.588379%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.324219" stop-color="rgb(98.823547%, 90.196228%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.328125" stop-color="rgb(98.823547%, 90.196228%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.335937" stop-color="rgb(98.823547%, 90.196228%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.34375" stop-color="rgb(98.823547%, 89.804077%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.351562" stop-color="rgb(98.823547%, 89.411926%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.355469" stop-color="rgb(98.823547%, 89.019775%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.359375" stop-color="rgb(98.823547%, 89.019775%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.363281" stop-color="rgb(98.823547%, 88.627625%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.367187" stop-color="rgb(98.823547%, 88.627625%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.375" stop-color="rgb(98.823547%, 88.235474%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.378906" stop-color="rgb(98.823547%, 88.235474%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.382812" stop-color="rgb(98.823547%, 88.235474%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.386719" stop-color="rgb(98.431396%, 87.843323%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.390625" stop-color="rgb(98.431396%, 87.843323%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.394531" stop-color="rgb(98.431396%, 87.451172%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.398438" stop-color="rgb(98.431396%, 87.451172%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.40625" stop-color="rgb(98.431396%, 87.059021%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.414062" stop-color="rgb(98.431396%, 86.66687%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.421875" stop-color="rgb(98.431396%, 86.66687%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.429687" stop-color="rgb(98.431396%, 86.274719%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.433594" stop-color="rgb(98.431396%, 85.882568%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.4375" stop-color="rgb(98.431396%, 85.882568%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.445312" stop-color="rgb(98.431396%, 85.490417%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.453125" stop-color="rgb(98.039246%, 85.098267%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.457031" stop-color="rgb(98.039246%, 85.098267%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.460937" stop-color="rgb(98.039246%, 84.706116%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.464844" stop-color="rgb(98.039246%, 84.313965%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.46875" stop-color="rgb(98.039246%, 84.313965%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.476562" stop-color="rgb(98.039246%, 84.313965%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.484375" stop-color="rgb(98.039246%, 83.921814%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.488281" stop-color="rgb(98.039246%, 83.529663%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.492188" stop-color="rgb(98.039246%, 83.529663%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.496094" stop-color="rgb(98.039246%, 83.529663%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="rgb(98.039246%, 83.137512%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.503906" stop-color="rgb(98.039246%, 82.745361%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.507812" stop-color="rgb(98.039246%, 82.745361%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.515625" stop-color="rgb(98.039246%, 82.745361%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.523438" stop-color="rgb(98.039246%, 82.35321%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.53125" stop-color="rgb(97.647095%, 81.96106%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.535156" stop-color="rgb(97.647095%, 81.96106%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.539063" stop-color="rgb(97.647095%, 81.568909%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.542969" stop-color="rgb(97.647095%, 81.176758%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.546875" stop-color="rgb(97.647095%, 81.176758%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.554688" stop-color="rgb(97.647095%, 81.176758%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.5625" stop-color="rgb(97.647095%, 80.784607%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.570312" stop-color="rgb(97.647095%, 80.392456%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.574219" stop-color="rgb(97.647095%, 80.000305%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.578125" stop-color="rgb(97.647095%, 80.000305%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.582031" stop-color="rgb(97.647095%, 79.608154%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.585938" stop-color="rgb(97.647095%, 79.608154%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.59375" stop-color="rgb(97.647095%, 79.608154%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.601562" stop-color="rgb(97.254944%, 79.216003%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.605469" stop-color="rgb(97.254944%, 78.823853%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.609375" stop-color="rgb(97.254944%, 78.431702%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.617187" stop-color="rgb(97.254944%, 78.431702%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.625" stop-color="rgb(97.254944%, 78.039551%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.632813" stop-color="rgb(97.254944%, 78.039551%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.636719" stop-color="rgb(97.254944%, 77.6474%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.640625" stop-color="rgb(97.254944%, 77.255249%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.644531" stop-color="rgb(97.254944%, 77.255249%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.648438" stop-color="rgb(97.254944%, 76.863098%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.65625" stop-color="rgb(97.254944%, 76.863098%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.664062" stop-color="rgb(96.862793%, 76.470947%, 80.784607%)" stop-opacity="1"/>
|
||||
<stop offset="0.671875" stop-color="rgb(96.862793%, 76.078796%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.675781" stop-color="rgb(96.862793%, 76.078796%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.679688" stop-color="rgb(96.862793%, 75.686646%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.683594" stop-color="rgb(96.862793%, 75.686646%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.6875" stop-color="rgb(96.862793%, 75.294495%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.695312" stop-color="rgb(96.862793%, 75.294495%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.703125" stop-color="rgb(96.862793%, 74.902344%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.710937" stop-color="rgb(96.862793%, 74.510193%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.71875" stop-color="rgb(96.862793%, 74.510193%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.726562" stop-color="rgb(96.862793%, 74.118042%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.730469" stop-color="rgb(96.862793%, 73.725891%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.734375" stop-color="rgb(96.470642%, 73.725891%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.742188" stop-color="rgb(96.470642%, 73.33374%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.75" stop-color="rgb(96.470642%, 72.941589%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.757812" stop-color="rgb(96.470642%, 72.941589%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.765625" stop-color="rgb(96.470642%, 72.549438%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.769531" stop-color="rgb(96.470642%, 72.157288%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.773438" stop-color="rgb(96.470642%, 72.157288%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.78125" stop-color="rgb(96.470642%, 71.765137%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.789063" stop-color="rgb(96.470642%, 71.372986%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.796875" stop-color="rgb(96.470642%, 71.372986%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.804688" stop-color="rgb(96.470642%, 70.980835%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.8125" stop-color="rgb(96.470642%, 70.980835%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.820312" stop-color="rgb(96.078491%, 70.588684%, 76.078796%)" stop-opacity="1"/>
|
||||
<stop offset="0.828125" stop-color="rgb(96.078491%, 70.196533%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.832031" stop-color="rgb(96.078491%, 69.804382%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.835938" stop-color="rgb(96.078491%, 69.804382%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.839844" stop-color="rgb(96.078491%, 69.412231%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.84375" stop-color="rgb(96.078491%, 69.412231%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.851562" stop-color="rgb(96.078491%, 69.412231%, 75.294495%)" stop-opacity="1"/>
|
||||
<stop offset="0.859375" stop-color="rgb(96.078491%, 69.020081%, 74.902344%)" stop-opacity="1"/>
|
||||
<stop offset="0.867187" stop-color="rgb(96.078491%, 68.62793%, 74.510193%)" stop-opacity="1"/>
|
||||
<stop offset="0.875" stop-color="rgb(96.078491%, 68.62793%, 74.510193%)" stop-opacity="1"/>
|
||||
<stop offset="0.882813" stop-color="rgb(96.078491%, 68.235779%, 74.118042%)" stop-opacity="1"/>
|
||||
<stop offset="0.890625" stop-color="rgb(96.078491%, 68.235779%, 74.118042%)" stop-opacity="1"/>
|
||||
<stop offset="0.898438" stop-color="rgb(96.078491%, 67.843628%, 74.118042%)" stop-opacity="1"/>
|
||||
<stop offset="0.90625" stop-color="rgb(95.68634%, 67.451477%, 73.725891%)" stop-opacity="1"/>
|
||||
<stop offset="0.9375" stop-color="rgb(95.68634%, 67.451477%, 73.725891%)" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="rgb(95.68634%, 67.451477%, 73.725891%)" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
<clipPath id="clip-8">
|
||||
<path clip-rule="nonzero" d="M 42 44 L 120 44 L 120 81 L 42 81 Z M 42 44 "/>
|
||||
</clipPath>
|
||||
<clipPath id="clip-9">
|
||||
<path clip-rule="nonzero" d="M 60.722656 44.191406 C 50.570312 44.191406 42.34375 52.421875 42.34375 62.570312 C 42.34375 72.71875 50.570312 80.949219 60.722656 80.949219 L 100.917969 80.949219 C 111.066406 80.949219 119.296875 72.71875 119.296875 62.570312 C 119.296875 52.421875 111.066406 44.191406 100.917969 44.191406 Z M 60.722656 44.191406 "/>
|
||||
</clipPath>
|
||||
<linearGradient id="linear-pattern-4" gradientUnits="userSpaceOnUse" x1="-0.00000221172" y1="0" x2="1.000001" y2="0" gradientTransform="matrix(76.95372, 0, 0, 76.95372, 42.34317, 62.570047)">
|
||||
<stop offset="0" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.0078125" stop-color="rgb(100%, 100%, 100%)" stop-opacity="1"/>
|
||||
<stop offset="0.015625" stop-color="rgb(99.607849%, 99.607849%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.0234375" stop-color="rgb(99.215698%, 99.607849%, 99.607849%)" stop-opacity="1"/>
|
||||
<stop offset="0.03125" stop-color="rgb(98.823547%, 99.215698%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.0390625" stop-color="rgb(98.431396%, 99.215698%, 99.215698%)" stop-opacity="1"/>
|
||||
<stop offset="0.046875" stop-color="rgb(98.039246%, 98.823547%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.0546875" stop-color="rgb(97.647095%, 98.823547%, 98.823547%)" stop-opacity="1"/>
|
||||
<stop offset="0.0625" stop-color="rgb(97.254944%, 98.431396%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.0703125" stop-color="rgb(96.862793%, 98.431396%, 98.431396%)" stop-opacity="1"/>
|
||||
<stop offset="0.078125" stop-color="rgb(96.470642%, 98.039246%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.0859375" stop-color="rgb(96.078491%, 98.039246%, 98.039246%)" stop-opacity="1"/>
|
||||
<stop offset="0.09375" stop-color="rgb(95.68634%, 98.039246%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.101562" stop-color="rgb(95.68634%, 98.039246%, 97.647095%)" stop-opacity="1"/>
|
||||
<stop offset="0.109375" stop-color="rgb(95.294189%, 97.647095%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.117187" stop-color="rgb(94.902039%, 97.647095%, 97.254944%)" stop-opacity="1"/>
|
||||
<stop offset="0.125" stop-color="rgb(94.509888%, 97.254944%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.132812" stop-color="rgb(94.117737%, 97.254944%, 96.862793%)" stop-opacity="1"/>
|
||||
<stop offset="0.140625" stop-color="rgb(93.725586%, 96.862793%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.148438" stop-color="rgb(93.333435%, 96.862793%, 96.470642%)" stop-opacity="1"/>
|
||||
<stop offset="0.15625" stop-color="rgb(92.941284%, 96.470642%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.164062" stop-color="rgb(92.549133%, 96.470642%, 96.078491%)" stop-opacity="1"/>
|
||||
<stop offset="0.171875" stop-color="rgb(92.156982%, 96.078491%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.179688" stop-color="rgb(91.764832%, 96.078491%, 95.68634%)" stop-opacity="1"/>
|
||||
<stop offset="0.1875" stop-color="rgb(91.372681%, 95.68634%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.195312" stop-color="rgb(90.98053%, 95.68634%, 95.294189%)" stop-opacity="1"/>
|
||||
<stop offset="0.203125" stop-color="rgb(90.588379%, 95.294189%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.210938" stop-color="rgb(90.196228%, 95.294189%, 94.902039%)" stop-opacity="1"/>
|
||||
<stop offset="0.21875" stop-color="rgb(89.804077%, 94.902039%, 94.509888%)" stop-opacity="1"/>
|
||||
<stop offset="0.226562" stop-color="rgb(89.411926%, 94.902039%, 94.117737%)" stop-opacity="1"/>
|
||||
<stop offset="0.234375" stop-color="rgb(89.019775%, 94.509888%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.242188" stop-color="rgb(88.627625%, 94.509888%, 93.725586%)" stop-opacity="1"/>
|
||||
<stop offset="0.25" stop-color="rgb(88.235474%, 94.117737%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.257812" stop-color="rgb(87.843323%, 94.117737%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.265625" stop-color="rgb(87.451172%, 94.117737%, 93.333435%)" stop-opacity="1"/>
|
||||
<stop offset="0.273438" stop-color="rgb(87.059021%, 93.725586%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.28125" stop-color="rgb(86.66687%, 93.725586%, 92.941284%)" stop-opacity="1"/>
|
||||
<stop offset="0.289062" stop-color="rgb(86.274719%, 93.333435%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.296875" stop-color="rgb(85.882568%, 93.333435%, 92.549133%)" stop-opacity="1"/>
|
||||
<stop offset="0.304687" stop-color="rgb(85.490417%, 92.941284%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.3125" stop-color="rgb(85.098267%, 92.941284%, 92.156982%)" stop-opacity="1"/>
|
||||
<stop offset="0.320312" stop-color="rgb(84.706116%, 92.549133%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.328125" stop-color="rgb(84.313965%, 92.549133%, 91.764832%)" stop-opacity="1"/>
|
||||
<stop offset="0.335937" stop-color="rgb(83.921814%, 92.156982%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.34375" stop-color="rgb(83.529663%, 92.156982%, 91.372681%)" stop-opacity="1"/>
|
||||
<stop offset="0.351562" stop-color="rgb(83.137512%, 92.156982%, 90.98053%)" stop-opacity="1"/>
|
||||
<stop offset="0.359375" stop-color="rgb(82.745361%, 92.156982%, 90.588379%)" stop-opacity="1"/>
|
||||
<stop offset="0.367187" stop-color="rgb(82.35321%, 91.764832%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.375" stop-color="rgb(81.96106%, 91.764832%, 90.196228%)" stop-opacity="1"/>
|
||||
<stop offset="0.382812" stop-color="rgb(81.568909%, 91.372681%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.390625" stop-color="rgb(81.176758%, 91.372681%, 89.804077%)" stop-opacity="1"/>
|
||||
<stop offset="0.398437" stop-color="rgb(80.784607%, 90.98053%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.40625" stop-color="rgb(80.392456%, 90.98053%, 89.411926%)" stop-opacity="1"/>
|
||||
<stop offset="0.414062" stop-color="rgb(80.000305%, 90.588379%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.421875" stop-color="rgb(79.608154%, 90.588379%, 89.019775%)" stop-opacity="1"/>
|
||||
<stop offset="0.429687" stop-color="rgb(79.216003%, 90.196228%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.4375" stop-color="rgb(78.823853%, 90.196228%, 88.627625%)" stop-opacity="1"/>
|
||||
<stop offset="0.445312" stop-color="rgb(78.431702%, 89.804077%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.453125" stop-color="rgb(78.039551%, 89.804077%, 88.235474%)" stop-opacity="1"/>
|
||||
<stop offset="0.460937" stop-color="rgb(77.6474%, 89.411926%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.46875" stop-color="rgb(77.255249%, 89.411926%, 87.843323%)" stop-opacity="1"/>
|
||||
<stop offset="0.476562" stop-color="rgb(76.863098%, 89.019775%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.484375" stop-color="rgb(76.470947%, 89.019775%, 87.451172%)" stop-opacity="1"/>
|
||||
<stop offset="0.492187" stop-color="rgb(76.078796%, 88.627625%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.5" stop-color="rgb(75.686646%, 88.627625%, 87.059021%)" stop-opacity="1"/>
|
||||
<stop offset="0.507812" stop-color="rgb(75.686646%, 88.627625%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.515625" stop-color="rgb(75.294495%, 88.627625%, 86.66687%)" stop-opacity="1"/>
|
||||
<stop offset="0.523437" stop-color="rgb(74.902344%, 88.235474%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.527344" stop-color="rgb(74.118042%, 88.235474%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.53125" stop-color="rgb(74.118042%, 88.235474%, 86.274719%)" stop-opacity="1"/>
|
||||
<stop offset="0.535156" stop-color="rgb(73.725891%, 87.843323%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.539062" stop-color="rgb(73.33374%, 87.843323%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.542969" stop-color="rgb(73.33374%, 87.843323%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.546875" stop-color="rgb(72.941589%, 87.843323%, 85.882568%)" stop-opacity="1"/>
|
||||
<stop offset="0.554687" stop-color="rgb(72.941589%, 87.451172%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.5625" stop-color="rgb(72.549438%, 87.451172%, 85.490417%)" stop-opacity="1"/>
|
||||
<stop offset="0.570312" stop-color="rgb(72.157288%, 87.059021%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.578125" stop-color="rgb(71.765137%, 87.059021%, 85.098267%)" stop-opacity="1"/>
|
||||
<stop offset="0.585937" stop-color="rgb(71.372986%, 86.66687%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.59375" stop-color="rgb(70.980835%, 86.66687%, 84.706116%)" stop-opacity="1"/>
|
||||
<stop offset="0.601562" stop-color="rgb(70.588684%, 86.274719%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.609375" stop-color="rgb(70.196533%, 86.274719%, 84.313965%)" stop-opacity="1"/>
|
||||
<stop offset="0.617187" stop-color="rgb(69.804382%, 85.882568%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.625" stop-color="rgb(69.412231%, 85.882568%, 83.921814%)" stop-opacity="1"/>
|
||||
<stop offset="0.632812" stop-color="rgb(69.020081%, 85.490417%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.636719" stop-color="rgb(68.62793%, 85.490417%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.640625" stop-color="rgb(68.235779%, 85.490417%, 83.529663%)" stop-opacity="1"/>
|
||||
<stop offset="0.644531" stop-color="rgb(67.843628%, 85.098267%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.648437" stop-color="rgb(67.451477%, 85.098267%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.652344" stop-color="rgb(67.451477%, 85.098267%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.65625" stop-color="rgb(67.059326%, 85.098267%, 83.137512%)" stop-opacity="1"/>
|
||||
<stop offset="0.664062" stop-color="rgb(67.059326%, 84.706116%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.671875" stop-color="rgb(66.667175%, 84.706116%, 82.745361%)" stop-opacity="1"/>
|
||||
<stop offset="0.679687" stop-color="rgb(66.275024%, 84.313965%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.6875" stop-color="rgb(65.882874%, 84.313965%, 82.35321%)" stop-opacity="1"/>
|
||||
<stop offset="0.695312" stop-color="rgb(65.490723%, 84.313965%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.703125" stop-color="rgb(65.098572%, 84.313965%, 81.96106%)" stop-opacity="1"/>
|
||||
<stop offset="0.710937" stop-color="rgb(64.706421%, 83.921814%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.71875" stop-color="rgb(64.31427%, 83.921814%, 81.568909%)" stop-opacity="1"/>
|
||||
<stop offset="0.726562" stop-color="rgb(63.922119%, 83.529663%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.734375" stop-color="rgb(63.529968%, 83.529663%, 81.176758%)" stop-opacity="1"/>
|
||||
<stop offset="0.742187" stop-color="rgb(63.137817%, 83.137512%, 80.784607%)" stop-opacity="1"/>
|
||||
<stop offset="0.746094" stop-color="rgb(62.745667%, 83.137512%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.75" stop-color="rgb(62.353516%, 83.137512%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.753906" stop-color="rgb(62.353516%, 83.137512%, 80.392456%)" stop-opacity="1"/>
|
||||
<stop offset="0.757812" stop-color="rgb(61.961365%, 82.745361%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.761719" stop-color="rgb(61.569214%, 82.745361%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.765625" stop-color="rgb(61.569214%, 82.745361%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.773437" stop-color="rgb(61.177063%, 82.745361%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.78125" stop-color="rgb(60.784912%, 82.35321%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.789062" stop-color="rgb(60.392761%, 82.35321%, 80.000305%)" stop-opacity="1"/>
|
||||
<stop offset="0.796875" stop-color="rgb(60.00061%, 82.35321%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.804687" stop-color="rgb(59.608459%, 82.35321%, 79.608154%)" stop-opacity="1"/>
|
||||
<stop offset="0.8125" stop-color="rgb(59.216309%, 81.96106%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.820312" stop-color="rgb(58.824158%, 81.96106%, 79.216003%)" stop-opacity="1"/>
|
||||
<stop offset="0.828125" stop-color="rgb(58.432007%, 81.568909%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.835937" stop-color="rgb(58.039856%, 81.568909%, 78.823853%)" stop-opacity="1"/>
|
||||
<stop offset="0.84375" stop-color="rgb(57.647705%, 81.176758%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.851562" stop-color="rgb(57.255554%, 81.176758%, 78.431702%)" stop-opacity="1"/>
|
||||
<stop offset="0.859375" stop-color="rgb(56.863403%, 80.784607%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.867187" stop-color="rgb(56.471252%, 80.784607%, 78.039551%)" stop-opacity="1"/>
|
||||
<stop offset="0.875" stop-color="rgb(56.079102%, 80.784607%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.882812" stop-color="rgb(55.686951%, 80.784607%, 77.6474%)" stop-opacity="1"/>
|
||||
<stop offset="0.890625" stop-color="rgb(55.2948%, 80.392456%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.898437" stop-color="rgb(54.902649%, 80.392456%, 77.255249%)" stop-opacity="1"/>
|
||||
<stop offset="0.90625" stop-color="rgb(54.510498%, 80.000305%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.914062" stop-color="rgb(54.118347%, 80.000305%, 76.863098%)" stop-opacity="1"/>
|
||||
<stop offset="0.921875" stop-color="rgb(53.726196%, 79.608154%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.929687" stop-color="rgb(53.334045%, 79.608154%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.9375" stop-color="rgb(52.941895%, 79.608154%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.945312" stop-color="rgb(52.549744%, 79.608154%, 76.470947%)" stop-opacity="1"/>
|
||||
<stop offset="0.953125" stop-color="rgb(52.157593%, 79.216003%, 76.078796%)" stop-opacity="1"/>
|
||||
<stop offset="0.960937" stop-color="rgb(51.765442%, 79.216003%, 76.078796%)" stop-opacity="1"/>
|
||||
<stop offset="0.96875" stop-color="rgb(51.373291%, 78.823853%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.976562" stop-color="rgb(51.373291%, 78.823853%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.984375" stop-color="rgb(50.98114%, 78.823853%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="0.992187" stop-color="rgb(50.588989%, 78.823853%, 75.686646%)" stop-opacity="1"/>
|
||||
<stop offset="1" stop-color="rgb(50.196838%, 78.431702%, 75.294495%)" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g clip-path="url(#clip-0)">
|
||||
<g clip-path="url(#clip-1)">
|
||||
<path fill-rule="nonzero" fill="url(#linear-pattern-0)" d="M 79.097656 80.949219 L 79.097656 44.191406 L 2.144531 44.191406 L 2.144531 80.949219 Z M 79.097656 80.949219 "/>
|
||||
</g>
|
||||
</g>
|
||||
<g clip-path="url(#clip-2)">
|
||||
<g clip-path="url(#clip-3)">
|
||||
<path fill-rule="nonzero" fill="url(#linear-pattern-1)" d="M 46.507812 115.332031 L 113.484375 48.359375 L 46.507812 -18.617188 L -20.464844 48.359375 Z M 46.507812 115.332031 "/>
|
||||
</g>
|
||||
</g>
|
||||
<g clip-path="url(#clip-4)">
|
||||
<g clip-path="url(#clip-5)">
|
||||
<path fill-rule="nonzero" fill="url(#linear-pattern-2)" d="M 42.34375 80.949219 L 79.097656 80.949219 L 79.097656 3.996094 L 42.34375 3.996094 Z M 42.34375 80.949219 "/>
|
||||
</g>
|
||||
</g>
|
||||
<g clip-path="url(#clip-6)">
|
||||
<g clip-path="url(#clip-7)">
|
||||
<path fill-rule="nonzero" fill="url(#linear-pattern-3)" d="M 7.960938 48.359375 L 74.933594 115.332031 L 141.90625 48.359375 L 74.933594 -18.617188 Z M 7.960938 48.359375 "/>
|
||||
</g>
|
||||
</g>
|
||||
<g clip-path="url(#clip-8)">
|
||||
<g clip-path="url(#clip-9)">
|
||||
<path fill-rule="nonzero" fill="url(#linear-pattern-4)" d="M 42.34375 44.191406 L 42.34375 80.949219 L 119.296875 80.949219 L 119.296875 44.191406 Z M 42.34375 44.191406 "/>
|
||||
</g>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 79.097656 62.570312 C 79.097656 72.71875 70.871094 80.949219 60.722656 80.949219 C 50.570312 80.949219 42.34375 72.71875 42.34375 62.570312 C 42.34375 52.421875 50.570312 44.191406 60.722656 44.191406 C 70.871094 44.191406 79.097656 52.421875 79.097656 62.570312 "/>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-0" x="133.1255" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="141.8111" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-2" x="158.2975" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="170.0435" y="39.8591"/>
|
||||
<use xlink:href="#glyph-0-4" x="187.3475" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="198.5587" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="224.2543" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="241.4435" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="253.7943" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-9" x="261.5951" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="279.0391" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="295.5983" y="39.8591"/>
|
||||
<use xlink:href="#glyph-0-12" x="312.1183" y="39.8591"/>
|
||||
<use xlink:href="#glyph-0-11" x="316.5983" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="332.8551" y="39.8591"/>
|
||||
<use xlink:href="#glyph-0-12" x="344.9791" y="39.8591"/>
|
||||
<use xlink:href="#glyph-0-13" x="349.4591" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-14" x="362.3475" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="378.3775" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="391.1511" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-15" x="403.2219" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="419.8231" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="445.4655" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-13" x="462.0303" y="39.8591"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-16" x="133.1255" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-11" x="150.4547" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-12" x="166.9747" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-17" x="171.4547" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="185.8383" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-5" x="203.1423" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-5" x="228.9331" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-10" x="254.6539" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-1" x="271.2971" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="288.0467" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-17" x="295.7887" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-6" x="310.2927" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-7" x="327.4847" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-8" x="339.8327" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-3" x="347.5747" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-1" x="364.8787" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-12" x="381.5107" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-12" x="385.9907" y="66.8511"/>
|
||||
<use xlink:href="#glyph-0-0" x="390.4707" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-18" x="399.0331" y="66.8511"/>
|
||||
</g>
|
||||
<g fill="rgb(21.960449%, 21.960449%, 21.960449%)" fill-opacity="1">
|
||||
<use xlink:href="#glyph-0-19" x="415.7099" y="66.8511"/>
|
||||
</g>
|
||||
<path fill-rule="nonzero" fill="rgb(86.66687%, 0%, 41.175842%)" fill-opacity="1" d="M 453.445312 65.542969 C 453.445312 66.425781 454.160156 67.140625 455.039062 67.140625 L 472.71875 67.140625 C 473.597656 67.140625 474.3125 66.425781 474.3125 65.542969 L 474.3125 47.867188 C 474.3125 46.984375 473.597656 46.273438 472.71875 46.273438 L 455.039062 46.273438 C 454.160156 46.273438 453.445312 46.984375 453.445312 47.867188 Z M 453.445312 65.542969 "/>
|
||||
<path fill-rule="nonzero" fill="rgb(100%, 100%, 100%)" fill-opacity="1" d="M 465.027344 52.910156 L 462.621094 52.910156 C 462.5 54.304688 462.382812 55.492188 462.273438 56.386719 C 462.160156 57.277344 462.054688 57.957031 461.953125 58.597656 C 461.84375 59.242188 461.738281 59.824219 461.628906 60.351562 C 461.535156 60.765625 461.40625 61.085938 461.226562 61.316406 C 461.050781 61.550781 460.796875 61.710938 460.460938 61.800781 C 460.175781 61.867188 459.902344 61.816406 459.625 61.632812 C 459.351562 61.453125 459.191406 61.238281 459.128906 60.988281 C 459.089844 60.800781 459.078125 60.644531 459.101562 60.515625 C 459.117188 60.386719 459.15625 60.265625 459.214844 60.15625 C 459.269531 60.046875 459.332031 59.945312 459.40625 59.851562 C 459.46875 59.761719 459.542969 59.671875 459.617188 59.582031 C 459.644531 59.554688 459.761719 59.414062 459.984375 59.15625 C 460.203125 58.898438 460.363281 58.664062 460.476562 58.453125 C 460.585938 58.242188 460.828125 57.773438 460.949219 57.195312 C 461.070312 56.617188 461.320312 54.632812 461.316406 52.910156 L 460.300781 52.910156 C 460.015625 52.910156 459.734375 53.003906 459.472656 53.140625 C 459.21875 53.273438 458.992188 53.5 458.890625 53.632812 C 458.78125 53.765625 458.503906 54.210938 458.441406 54.296875 C 458.375 54.382812 458.242188 54.582031 458.144531 54.550781 C 458.035156 54.515625 458.058594 54.394531 458.074219 54.296875 C 458.09375 54.199219 458.292969 53.699219 458.441406 53.324219 C 458.589844 52.945312 458.792969 52.578125 459.046875 52.226562 C 459.246094 51.925781 459.519531 51.710938 459.859375 51.496094 C 460.203125 51.273438 460.597656 51.164062 461.050781 51.164062 L 468.429688 51.164062 C 468.5625 51.164062 469.253906 51.21875 469.253906 52.03125 C 469.253906 52.839844 468.515625 52.910156 468.429688 52.910156 L 466.335938 52.910156 C 466.160156 54.570312 466.074219 56.28125 466.074219 57.964844 C 466.074219 58.269531 466.125 58.570312 466.230469 58.859375 C 466.335938 59.152344 466.464844 59.375 466.617188 59.523438 C 466.816406 59.707031 467.050781 59.824219 467.332031 59.875 C 467.617188 59.925781 467.902344 59.839844 468.191406 59.609375 C 468.351562 59.484375 468.46875 59.34375 468.542969 59.1875 C 468.617188 59.023438 468.660156 58.871094 468.683594 58.726562 C 468.703125 58.578125 468.738281 58.371094 468.742188 58.320312 C 468.746094 58.273438 468.738281 58.089844 468.945312 58.074219 C 469.152344 58.058594 469.171875 58.242188 469.191406 58.441406 C 469.210938 58.640625 469.101562 59.382812 468.9375 59.84375 C 468.769531 60.308594 468.570312 60.679688 468.339844 60.957031 C 468.109375 61.242188 467.886719 61.445312 467.664062 61.566406 C 467.410156 61.71875 467.117188 61.8125 466.785156 61.84375 C 466.449219 61.878906 466.140625 61.796875 465.867188 61.613281 C 465.40625 61.277344 465.054688 60.753906 464.824219 60.039062 C 464.683594 59.621094 464.617188 59.070312 464.597656 58.386719 C 464.578125 57.703125 464.601562 57.035156 464.664062 56.382812 Z M 465.027344 52.910156 "/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 96 KiB |
@@ -0,0 +1,13 @@
|
||||
Info in /tmp/test3.py from L1:15 to L1:17:
|
||||
mean_height = [36mdf[0m["height"].mean()
|
||||
[36m~~> Type: Frame[name: Column[str], height: Column[Meter], age: Column[Age]][0m
|
||||
|
||||
Info in /tmp/test3.py from L1:15 to L1:27:
|
||||
mean_height = [36mdf["height"][0m.mean()
|
||||
[36m~~~~~~~~~~~~> Type: Column[Meter][0m
|
||||
|
||||
Info in /tmp/test3.py from L1:15 to L1:34:
|
||||
mean_height = [36mdf["height"].mean()[0m
|
||||
[36m~~~~~~~~~~~~~~~~~~~> Type: Meter[0m
|
||||
|
||||
[36mInfos[0m: 3
|
||||
@@ -0,0 +1,5 @@
|
||||
Error in /tmp/script.py from L2:12 to L2:15:
|
||||
fib.append([31m3.0[0m)
|
||||
[31m~~~> Wrong type for argument 'object', expected int, got float[0m
|
||||
|
||||
[31mErrors[0m: 1
|
||||
@@ -0,0 +1,33 @@
|
||||
Info in /tmp/script.py from L1:8 to L1:9:
|
||||
fib = [[36m1[0m,1,2]
|
||||
[36m~> Type: int[0m
|
||||
|
||||
Info in /tmp/script.py from L1:10 to L1:11:
|
||||
fib = [1,[36m1[0m,2]
|
||||
[36m~> Type: int[0m
|
||||
|
||||
Info in /tmp/script.py from L1:12 to L1:13:
|
||||
fib = [1,1,[36m2[0m]
|
||||
[36m~> Type: int[0m
|
||||
|
||||
Info in /tmp/script.py from L1:7 to L1:14:
|
||||
fib = [36m[1,1,2][0m
|
||||
[36m~~~~~~~> Type: list[int][0m
|
||||
|
||||
Info in /tmp/script.py from L2:12 to L2:15:
|
||||
fib.append([36m3.0[0m)
|
||||
[36m~~~> Type: float[0m
|
||||
|
||||
Info in /tmp/script.py from L2:1 to L2:4:
|
||||
[36mfib[0m.append(3.0)
|
||||
[36m~~~> Type: list[int][0m
|
||||
|
||||
Info in /tmp/script.py from L2:1 to L2:16:
|
||||
[36mfib.append(3.0)[0m
|
||||
[36m~~~~~~~~~~~~~~~> Type: <Unknown>[0m
|
||||
|
||||
Error in /tmp/script.py from L2:12 to L2:15:
|
||||
fib.append([31m3.0[0m)
|
||||
[31m~~~> Wrong type for argument 'object', expected int, got float[0m
|
||||
|
||||
[31mErrors[0m: 1 [36mInfos[0m: 7
|
||||
@@ -0,0 +1,99 @@
|
||||
<?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"
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
height="175.94801"
|
||||
width="873.66284"
|
||||
inkscape:version="0.91 r13725"
|
||||
sodipodi:docname="mypy_light.svg">
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1680"
|
||||
inkscape:window-height="1001"
|
||||
id="namedview4260"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.0737884"
|
||||
inkscape:cx="473.10057"
|
||||
inkscape:cy="55.723359"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="1"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg2"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<defs
|
||||
id="defs4" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<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>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path8615"
|
||||
d="m 87.796991,0 c -44.90034,0 -42.09648,19.4715 -42.09648,19.4715 l 0.05,20.17227 42.8473,0 0,6.05668 -59.866091,0 c 0,0 -28.73172,-3.25844 -28.73172,42.04643 0,45.30485 25.07769,43.69824 25.07769,43.69824 l 14.966521,0 0,-21.02321 c 0,0 -0.80673,-25.07769 24.67724,-25.07769 25.48398,0 42.496919,0 42.496919,0 0,0 23.87636,0.38596 23.87636,-23.07547 0,-23.46144 0,-38.79283 0,-38.79283 0,0 3.62509,-23.47592 -43.297799,-23.47592 z m -23.62608,13.56498 c 4.26299,0 7.70851,3.44551 7.70851,7.70851 0,4.26299 -3.44552,7.70851 -7.70851,7.70851 -4.263,0 -7.70851,-3.44552 -7.70851,-7.70851 0,-4.263 3.44551,-7.70851 7.70851,-7.70851 z"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#2a6db2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#505050;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none"
|
||||
d="m 89.072161,175.94801 c 44.900349,0 42.096469,-19.47149 42.096469,-19.47149 l -0.05,-20.17228 -42.847309,0 0,-6.05668 59.866099,0 c 0,0 28.73172,3.25843 28.73172,-42.04644 2e-5,-45.30485 -25.07769,-43.69824 -25.07769,-43.69824 l -14.96652,0 0,21.02321 c 0,0 0.80675,25.07768 -24.67725,25.07768 -25.483969,0 -42.496909,0 -42.496909,0 0,0 -23.87636,-0.38596 -23.87636,23.0755 0,23.46142 0,38.79282 0,38.79282 0,0 -3.62509,23.47592 43.2978,23.47592 z m 23.626079,-13.56497 c -4.26299,0 -7.70851,-3.44552 -7.70851,-7.70851 0,-4.263 3.44552,-7.70851 7.70851,-7.70851 4.263,0 7.70851,3.44551 7.70851,7.70851 2e-5,4.26299 -3.44551,7.70851 -7.70851,7.70851 z"
|
||||
id="path8620" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3890"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#505050;fill-opacity:1;stroke:none"
|
||||
d="m 211.33512,110.31397 16.94571,0 0,20.39908 -16.94571,0 0,-20.39908 m 0,-64.65064 16.94571,0 0,20.39908 -16.94571,0 0,-20.39908" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3892"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#2a6db2;fill-opacity:1;stroke:none"
|
||||
d="m 385.53045,56.03127 c 3.69422,-6.63898 7.57434,-9.86018 12.71435,-13.01919 5.13983,-3.15881 11.72695,-4.41606 18.68739,-4.41616 9.36953,1e-4 16.59754,3.29285 21.68407,9.8783 5.08624,6.53208 7.62943,15.84819 7.62957,27.94836 l 0,54.29047 -14.8576,0 0,-53.80861 c -1.3e-4,-8.62001 -1.52605,-15.01815 -4.57774,-19.19441 -3.05196,-4.17611 -7.71002,-6.26421 -13.97418,-6.26429 -7.65645,8e-5 -13.70657,2.54327 -18.15038,7.62958 -4.44397,5.08646 -6.66592,12.02 -6.66584,20.80064 l 0,50.83709 -14.8576,0 0,-53.80861 c -6e-5,-8.67356 -1.52599,-15.07169 -4.57774,-19.19441 -3.0519,-4.17611 -7.7635,-6.26421 -14.13481,-6.26429 -7.54931,8e-5 -13.54588,2.57004 -17.98973,7.70989 -4.44393,5.08646 -6.66587,11.99322 -6.66584,20.72033 l 0,50.83709 -14.8576,0 0,-89.94872 14.8576,0 0,11.97418 c 3.37304,-5.51463 6.87835,-8.01335 11.58999,-10.63695 4.71155,-2.62341 10.8436,-3.50554 17.32209,-3.50564 6.53193,1e-4 12.07341,1.65987 16.62445,4.97931 4.60445,3.31962 8.00428,6.1383 10.19955,12.45604" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3894"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#2a6db2;fill-opacity:1;stroke:none"
|
||||
d="m 513.22549,139.06544 c -4.17622,10.70815 -8.24534,17.69524 -12.20731,20.96125 -3.96207,3.26597 -9.26261,4.89896 -15.90166,4.89899 l -11.80577,0 0,-12.36794 8.67363,0 c 4.06908,-2e-5 7.22799,-0.96375 9.47675,-2.89121 2.24867,-1.92749 4.73833,-6.47846 7.46895,-13.65293 l 2.65027,-6.74615 -36.38105,-88.50312 15.66072,0 28.10898,70.35275 28.10897,-70.35275 15.66072,0 -39.5132,98.30111" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3896"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#505050;fill-opacity:1;stroke:none"
|
||||
d="m 571.77248,5.74859 34.05203,0 0,11.48452 -19.27474,0 0,123.67949 19.27474,0 0,11.48452 -34.05203,0 0,-146.64853" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3898"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#2a6db2;fill-opacity:1;stroke:none"
|
||||
d="m 651.68231,117.22074 0,47.70494 -14.85761,0 0,-124.16135 14.85761,0 0,13.65293 c 3.10535,-5.354 7.01382,-9.31603 11.72545,-11.88608 4.7651,-2.62341 10.44043,-3.93516 17.02602,-3.93526 10.92226,1e-4 19.78328,4.3369 26.58306,13.01045 6.85313,8.6737 10.27975,20.07789 10.27984,34.21263 -9e-5,14.13484 -3.42671,25.53903 -10.27984,34.21264 -6.79978,8.67364 -15.6608,13.01044 -26.58306,13.01044 -6.58559,0 -12.26092,-1.28498 -17.02602,-3.85494 -4.71163,-2.62351 -8.6201,-6.61229 -11.72545,-11.9664 m 45.52876,-56.94075 c -4.44396,-6.21066 -10.5744,-9.31603 -18.39131,-9.31611 -7.81702,8e-5 -13.97422,3.10545 -18.47161,9.31611 -4.44392,6.15728 -6.66588,14.67026 -6.66584,25.53901 -4e-5,10.86883 2.22192,19.40861 6.66584,25.61933 4.49739,6.15721 10.65459,9.23581 18.47161,9.23581 7.81691,0 13.94735,-3.0786 18.39131,-9.23581 4.49735,-6.21072 6.74615,-14.7505 6.74615,-25.61933 0,-10.86875 -2.2488,-19.38173 -6.74615,-25.53901 z" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3900"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#2a6db2;fill-opacity:1;stroke:none"
|
||||
d="m 779.21669,139.06544 c -4.17622,10.70815 -8.24534,17.69524 -12.20731,20.96125 -3.96207,3.26597 -9.26261,4.89896 -15.90166,4.89899 l -11.80577,0 0,-12.36794 8.67363,0 c 4.06908,-2e-5 7.22799,-0.96375 9.47675,-2.89121 2.24867,-1.92749 4.73832,-6.47846 7.46895,-13.65293 l 2.65027,-6.74615 -36.38105,-88.50312 15.66072,0 28.10898,70.35275 28.10897,-70.35275 15.66071,0 -39.51319,98.30111" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3902"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:102.68504333px;line-height:125%;font-family:Sans;-inkscape-font-specification:Sans;letter-spacing:0px;word-spacing:0px;fill:#505050;fill-opacity:1;stroke:none"
|
||||
d="m 873.66285,5.74859 0,146.64853 -34.052,0 0,-11.48452 19.1944,0 0,-123.67949 -19.1944,0 0,-11.48452 34.052,0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,243 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.0"
|
||||
id="svg2"
|
||||
sodipodi:version="0.32"
|
||||
inkscape:version="1.4.4 (1:1.4.4+202605061436+dcaf3e7d9e)"
|
||||
sodipodi:docname="python-logo.svg"
|
||||
width="83.371017pt"
|
||||
height="84.291748pt"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<metadata
|
||||
id="metadata371">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<sodipodi:namedview
|
||||
inkscape:window-height="1028"
|
||||
inkscape:window-width="2584"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
guidetolerance="10.0"
|
||||
gridtolerance="10.0"
|
||||
objecttolerance="10.0"
|
||||
borderopacity="1.0"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff"
|
||||
id="base"
|
||||
inkscape:zoom="2.1461642"
|
||||
inkscape:cx="245.55437"
|
||||
inkscape:cy="61.039132"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:current-layer="svg2"
|
||||
width="210mm"
|
||||
height="40mm"
|
||||
units="mm"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="pt"
|
||||
inkscape:window-maximized="1" />
|
||||
<defs
|
||||
id="defs4">
|
||||
<linearGradient
|
||||
id="linearGradient2795">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:0.49803922;"
|
||||
offset="0"
|
||||
id="stop2797" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2799" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient2787">
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0.5;"
|
||||
offset="0"
|
||||
id="stop2789" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop2791" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3676">
|
||||
<stop
|
||||
style="stop-color:#b2b2b2;stop-opacity:0.5;"
|
||||
offset="0"
|
||||
id="stop3678" />
|
||||
<stop
|
||||
style="stop-color:#b3b3b3;stop-opacity:0;"
|
||||
offset="1"
|
||||
id="stop3680" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient3236">
|
||||
<stop
|
||||
style="stop-color:#f4f4f4;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop3244" />
|
||||
<stop
|
||||
style="stop-color:white;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop3240" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4671">
|
||||
<stop
|
||||
style="stop-color:#ffd43b;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4673" />
|
||||
<stop
|
||||
style="stop-color:#ffe873;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4675" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="linearGradient4689">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop4691" />
|
||||
<stop
|
||||
style="stop-color:#306998;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop4693" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717"
|
||||
id="linearGradient2987"
|
||||
xlink:href="#linearGradient4671"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)" />
|
||||
<linearGradient
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133"
|
||||
id="linearGradient2990"
|
||||
xlink:href="#linearGradient4689"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2587"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2589"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2248"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="172.94208"
|
||||
y1="77.475983"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2250"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(100.2702,99.61116)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient2255"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
|
||||
x1="224.23996"
|
||||
y1="144.75717"
|
||||
x2="-65.308502"
|
||||
y2="144.75717" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient2258"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-11.5974,-7.60954)"
|
||||
x1="172.94208"
|
||||
y1="76.176224"
|
||||
x2="26.670298"
|
||||
y2="76.313133" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient2795"
|
||||
id="radialGradient2801"
|
||||
cx="61.518883"
|
||||
cy="132.28575"
|
||||
fx="61.518883"
|
||||
fy="132.28575"
|
||||
r="29.036913"
|
||||
gradientTransform="matrix(1,0,0,0.177966,0,108.7434)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4671"
|
||||
id="linearGradient1475"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
|
||||
x1="150.96111"
|
||||
y1="192.35176"
|
||||
x2="112.03144"
|
||||
y2="137.27299" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4689"
|
||||
id="linearGradient1478"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.562541,0,0,0.567972,-14.99112,-11.702371)"
|
||||
x1="26.648937"
|
||||
y1="20.603781"
|
||||
x2="135.66525"
|
||||
y2="114.39767" />
|
||||
</defs>
|
||||
<path
|
||||
style="fill:url(#linearGradient1478);fill-opacity:1"
|
||||
d="M 54.918785,9.1927389e-4 C 50.335132,0.02221727 45.957846,0.41313697 42.106285,1.0946693 30.760069,3.0991731 28.700036,7.2947714 28.700035,15.032169 v 10.21875 h 26.8125 v 3.40625 h -26.8125 -10.0625 c -7.792459,0 -14.6157588,4.683717 -16.7499998,13.59375 -2.46181998,10.212966 -2.57101508,16.586023 0,27.25 1.9059283,7.937852 6.4575432,13.593748 14.2499998,13.59375 h 9.21875 v -12.25 c 0,-8.849902 7.657144,-16.656248 16.75,-16.65625 h 26.78125 c 7.454951,0 13.406253,-6.138164 13.40625,-13.625 v -25.53125 c 0,-7.2663386 -6.12998,-12.7247771 -13.40625,-13.9374997 C 64.281548,0.32794397 59.502438,-0.02037903 54.918785,9.1927389e-4 Z m -14.5,8.21875012611 c 2.769547,0 5.03125,2.2986456 5.03125,5.1249996 -2e-6,2.816336 -2.261703,5.09375 -5.03125,5.09375 -2.779476,-1e-6 -5.03125,-2.277415 -5.03125,-5.09375 -10e-7,-2.826353 2.251774,-5.1249996 5.03125,-5.1249996 z"
|
||||
id="path1948" />
|
||||
<path
|
||||
style="fill:url(#linearGradient1475);fill-opacity:1"
|
||||
d="m 85.637535,28.657169 v 11.90625 c 0,9.230755 -7.825895,16.999999 -16.75,17 h -26.78125 c -7.335833,0 -13.406249,6.278483 -13.40625,13.625 v 25.531247 c 0,7.266344 6.318588,11.540324 13.40625,13.625004 8.487331,2.49561 16.626237,2.94663 26.78125,0 6.750155,-1.95439 13.406253,-5.88761 13.40625,-13.625004 V 86.500919 h -26.78125 v -3.40625 h 26.78125 13.406254 c 7.792461,0 10.696251,-5.435408 13.406241,-13.59375 2.79933,-8.398886 2.68022,-16.475776 0,-27.25 -1.92578,-7.757441 -5.60387,-13.59375 -13.406241,-13.59375 z m -15.0625,64.65625 c 2.779478,3e-6 5.03125,2.277417 5.03125,5.093747 -2e-6,2.826354 -2.251775,5.125004 -5.03125,5.125004 -2.76955,0 -5.03125,-2.29865 -5.03125,-5.125004 2e-6,-2.81633 2.261697,-5.093747 5.03125,-5.093747 z"
|
||||
id="path1950" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 8.6 KiB |
@@ -0,0 +1,5 @@
|
||||
Traceback (most recent call last):
|
||||
File [35m"script.py"[0m, line [35m31[0m, in [35m<module>[0m
|
||||
assert [31misinstance[0m[1;31m(value, float)[0m, f"script.py:L2:6: CastError: Cannot cast {type(value).__name__} to float, in column 'age'"
|
||||
[31m~~~~~~~~~~[0m[1;31m^^^^^^^^^^^^^^[0m
|
||||
[1;35mAssertionError[0m: [35mscript.py:L2:6: CastError: Cannot cast int to float, in column 'age'[0m
|
||||
@@ -0,0 +1,5 @@
|
||||
Traceback (most recent call last):
|
||||
File [35m"script.py"[0m, line [35m32[0m, in [35m<module>[0m
|
||||
assert [31m__midas_p0__[0m[1;31m(value)[0m, "script.py:L2:6: ConstraintError: Value does not fit constraint 'in_range(0.0, 150.0)(_)', in column 'age'"
|
||||
[31m~~~~~~~~~~~~[0m[1;31m^^^^^^^[0m
|
||||
[1;35mAssertionError[0m: [35mscript.py:L2:6: ConstraintError: Value does not fit constraint 'in_range(0.0, 150.0)(_)', in column 'age'[0m
|
||||
@@ -0,0 +1,2 @@
|
||||
fib = [1, 1, 2]
|
||||
fib.append(3.0)
|
||||
@@ -0,0 +1,93 @@
|
||||
#import "requirements.typ": *
|
||||
#import "../meta.typ"
|
||||
#import codly: codly-init, codly
|
||||
#import "@preview/codly-languages:0.1.10": codly-languages
|
||||
#import "@preview/tiaoma:0.3.0"
|
||||
|
||||
#pdfpc.config(
|
||||
start-time: datetime(hour: 13, minute: 15, second: 0),
|
||||
duration-minutes: 20,
|
||||
last-minutes: 3
|
||||
)
|
||||
|
||||
#show raw.where(block: true): set text(size: 0.8em)
|
||||
#show: codly-init.with()
|
||||
#codly(
|
||||
languages: codly-languages
|
||||
+ (
|
||||
midas: (
|
||||
name: "Midas",
|
||||
color: rgb("#eedd47"),
|
||||
icon: box(
|
||||
image(
|
||||
"../assets/icon.svg",
|
||||
height: 130%,
|
||||
fit: "contain",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
#set raw(
|
||||
syntaxes: path("../midas.sublime-syntax")
|
||||
)
|
||||
|
||||
#show: unistra-theme.with(
|
||||
config-info(
|
||||
author: meta.authors,
|
||||
institution: meta.school,
|
||||
date: datetime(year: 2026, month: 8, day: 24).display("[day].[month].[year]"),
|
||||
title: [Midas],
|
||||
subtitle: [Hybrid Type Checking for Python],
|
||||
//title: meta.title,
|
||||
//subtitle: meta.subtitle,
|
||||
//short-title: [Midas],
|
||||
//short-subtitle: [Hybrid Type Checking for Python],
|
||||
//logo: image("figs/isc_logo.svg"),
|
||||
logo: {
|
||||
image("figs/isc_logo.svg")
|
||||
place(
|
||||
left + horizon,
|
||||
dx: 100% + 1em,
|
||||
clearance: 0pt,
|
||||
//scale(80%, tiaoma.qrcode("https://url.kb28.ch/nws0"))
|
||||
scale(80%, tiaoma.qrcode("https://git.kb28.ch/HEL/TB-Docs/releases/download/official/presentation_handout.pdf"))
|
||||
)
|
||||
},
|
||||
),
|
||||
config-common(
|
||||
enable-pdfpc: true,
|
||||
handout: sys.inputs.at("handout", default: "false") == "true",
|
||||
slide-fn: slide,
|
||||
),
|
||||
config-store(
|
||||
footer-appendix-label: "A",
|
||||
show-header: {
|
||||
place(
|
||||
top + left,
|
||||
utils.touying-progress(
|
||||
ratio => box(
|
||||
width: ratio * 100%,
|
||||
height: 6pt,
|
||||
fill: orange.C
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
),
|
||||
)
|
||||
|
||||
#title-slide(
|
||||
logos: (
|
||||
box(inset: (x: 0.8em), image("figs/hei_logo.svg", height: 2cm)),
|
||||
box(inset: (x: 0.8em), image("figs/isc_logo.svg", height: 2cm)),
|
||||
)
|
||||
)
|
||||
|
||||
#include "sections/01_introduction.typ"
|
||||
#include "sections/02_state_of_the_art.typ"
|
||||
#include "sections/03_midas.typ"
|
||||
#include "sections/04_status_and_future.typ"
|
||||
#include "sections/05_conclusion.typ"
|
||||
#include "sections/06_appendix.typ"
|
||||
@@ -0,0 +1,114 @@
|
||||
#import "@preview/touying:0.7.4": *
|
||||
#import "@preview/touying-unistra-pristine:1.4.3": *
|
||||
#import "@local/codly:1.3.1"
|
||||
|
||||
// Adapted from:
|
||||
// https://github.com/spidersouris/touying-unistra-pristine/blob/67084e00529991bfbd12152c0f074c582cba0093/src/unistra.typ#L22-L126
|
||||
#let slide(
|
||||
config: (:),
|
||||
repeat: auto,
|
||||
setting: body => body,
|
||||
composer: auto,
|
||||
..bodies,
|
||||
) = touying-slide-wrapper(self => {
|
||||
let footer(self) = {
|
||||
let cell(body) = rect(
|
||||
width: 100%,
|
||||
height: 100%,
|
||||
inset: 0mm,
|
||||
outset: 0mm,
|
||||
fill: none,
|
||||
stroke: none,
|
||||
text(size: 0.5em, fill: self.colors.black, body),
|
||||
)
|
||||
|
||||
let author = self.info.author
|
||||
let date = self.info.date
|
||||
if self.store.footer-hide.contains("author") {
|
||||
author = none
|
||||
}
|
||||
|
||||
if self.store.footer-hide.contains("date") {
|
||||
date = none
|
||||
}
|
||||
|
||||
set align(center + horizon)
|
||||
block(width: 101%, height: -25%, stroke: (top: 0.5pt + self.colors.black), {
|
||||
set text(size: 1.5em)
|
||||
|
||||
// give priority to short, since long is also used in title slide
|
||||
let title = self.info.title
|
||||
if (self.info.short-title != auto) {
|
||||
title = self.info.short-title
|
||||
}
|
||||
|
||||
let first-col-width = 15%
|
||||
let second-col-width = 75%
|
||||
|
||||
grid(
|
||||
columns: (first-col-width, second-col-width, 10%),
|
||||
rows: 0.5em,
|
||||
stroke: (x: 1pt + self.colors.black),
|
||||
cell(box(self.info.logo, height: 100%)),
|
||||
cell(box(
|
||||
width: 100%,
|
||||
text(
|
||||
title, // either title or short-title
|
||||
weight: "bold",
|
||||
)
|
||||
+ self.store.footer-first-sep
|
||||
+ if _is(author) { author }
|
||||
+ if _is(date) and _is(author) {
|
||||
self.store.footer-second-sep
|
||||
} else { "" }
|
||||
+ if _is(date) { date },
|
||||
)),
|
||||
cell(utils.call-or-display(self, context {
|
||||
let current = int(utils.slide-counter.display())
|
||||
let last = int(utils.last-slide-counter.display())
|
||||
if current > last {
|
||||
(
|
||||
text(self.store.footer-appendix-label, style: "italic")
|
||||
+ str(current)
|
||||
)
|
||||
} else {
|
||||
str(current)
|
||||
}
|
||||
}
|
||||
+ " / "
|
||||
+ utils.last-slide-number)),
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
let store-header = self.store.show-header
|
||||
let store-footer = self.store.show-footer
|
||||
|
||||
let self = utils.merge-dicts(self, config-page(
|
||||
header: if store-header == true {
|
||||
unistra-nav-bar(self)
|
||||
} else if store-header == false {
|
||||
none
|
||||
} else {
|
||||
store-header
|
||||
},
|
||||
footer: if store-footer == true {
|
||||
footer
|
||||
} else if store-footer == false {
|
||||
none
|
||||
} else {
|
||||
store-footer
|
||||
},
|
||||
// todo: change if no footer/header, etc.
|
||||
margin: (x: 3em, y: 2em),
|
||||
))
|
||||
|
||||
touying-slide(
|
||||
self: self,
|
||||
config: config,
|
||||
repeat: repeat,
|
||||
setting: setting,
|
||||
composer: composer,
|
||||
..bodies,
|
||||
)
|
||||
})
|
||||
@@ -0,0 +1,95 @@
|
||||
#import "../requirements.typ": *
|
||||
|
||||
#focus-slide(theme: "berry")[The Issue]
|
||||
= The issue
|
||||
|
||||
== A popular language
|
||||
|
||||
#align(center, image("../figs/python-logo.svg"))
|
||||
|
||||
Python is a widely used language, especially in data science:
|
||||
#item-by-item[
|
||||
|
||||
- Easy to learn
|
||||
|
||||
- Simple syntax
|
||||
|
||||
- Vast and thriving ecosystem
|
||||
]
|
||||
|
||||
== It can bite
|
||||
|
||||
Everything is fine...
|
||||
|
||||
```python
|
||||
transactions = load_transactions()
|
||||
mean_amount = np.mean(transactions)
|
||||
```
|
||||
|
||||
#speaker-note[
|
||||
Il y a comme un couac -> duck-typing
|
||||
]
|
||||
|
||||
#pause
|
||||
|
||||
Until it's not
|
||||
|
||||
```python
|
||||
def load_transactions():
|
||||
return [
|
||||
usd_transaction,
|
||||
chf_transaction
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#{
|
||||
set text(size: 0.4em)
|
||||
table(
|
||||
columns: (1fr, 2fr, 0.5fr, 3.5fr),
|
||||
table.header[*Height*][*Country*][*Age*][*Profession*],
|
||||
// range(5 * 10).map(_ => line())
|
||||
..range(4 * 28).map(
|
||||
i => line(
|
||||
start: (0%, 0%),
|
||||
end: (100%, 0%),
|
||||
stroke: (
|
||||
dash: (
|
||||
array: (6pt, 3pt, "dot", 3pt),
|
||||
phase: calc.rem(i * 13, 31) * 1pt
|
||||
),
|
||||
paint: gray
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
pause
|
||||
|
||||
place(
|
||||
center + horizon,
|
||||
dx: -2.5em,
|
||||
box(
|
||||
stroke: 1pt,
|
||||
radius: 4pt,
|
||||
width: 8em,
|
||||
height: 6em,
|
||||
clip: true,
|
||||
fill: white,
|
||||
move(
|
||||
dx: -5em,
|
||||
dy: -1em,
|
||||
table(
|
||||
columns: (6em, 6em, 6em),
|
||||
rows: 1.5em,
|
||||
[], [61], [],
|
||||
[], [18], [],
|
||||
[], [1963#place(center + horizon, ellipse(width: 2.5em, height: 2em, stroke: std.red))], [],
|
||||
[], [35], [],
|
||||
[], [42], [],
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
#import "../requirements.typ": *
|
||||
|
||||
#focus-slide(theme: "mandarine")[What's Out There?]
|
||||
= What's out there?
|
||||
|
||||
== Existing Type Checkers
|
||||
|
||||
#v(1fr)
|
||||
#grid(
|
||||
columns: (1fr, 1fr),
|
||||
column-gutter: 3em,
|
||||
align: center + horizon,
|
||||
image("../figs/mypy_logo.svg"),
|
||||
image("../figs/pyright-logo.png"),
|
||||
)
|
||||
#v(1fr)
|
||||
|
||||
== Community Packages for Pandas
|
||||
|
||||
=== Strictly Typing Pandas
|
||||
#{
|
||||
set text(size: 0.8em)
|
||||
emph(link("https://strictly-typed-pandas.readthedocs.io"))
|
||||
}
|
||||
|
||||
- Static typing of schema
|
||||
- Quite limited
|
||||
|
||||
=== Pandera
|
||||
#{
|
||||
set text(size: 0.8em)
|
||||
emph(link("https://pandera.readthedocs.io"))
|
||||
}
|
||||
|
||||
- Dynamic verification and data validation
|
||||
- Powerful but verbose
|
||||
@@ -0,0 +1,572 @@
|
||||
#import "../requirements.typ": *
|
||||
#import "@preview/curryst:0.6.0": prooftree, rule
|
||||
#import "@preview/pinit:0.2.2": pin, pinit-point-from
|
||||
#import codly: codly, codly-enable, codly-disable, local
|
||||
#import "@preview/cetz:0.5.2" as cetz: canvas, draw, tree
|
||||
#import "@preview/cetz-plot:0.1.4": smartart
|
||||
#import "@preview/conch:0.1.0"
|
||||
|
||||
#focus-slide(theme: "forest")[Making Python Better]
|
||||
= Making Python Better
|
||||
|
||||
== Strict Typing Rules
|
||||
|
||||
#let syntax(body) = {
|
||||
set text(weight: "bold", fill: rgb(100, 50, 0))
|
||||
body
|
||||
}
|
||||
|
||||
#slide(repeat: 5, self => {
|
||||
let (uncover, only, alternatives-match) = utils.methods(self)
|
||||
let typing-rule = prooftree(
|
||||
rule(
|
||||
name: smallcaps[(T-Tern)],
|
||||
uncover("3-", $Gamma tack "t"_1: "bool"$),
|
||||
uncover("4-", $Gamma tack "t"_21: "T"$),
|
||||
uncover("4-", $Gamma tack "t"_22: "T"$),
|
||||
alternatives-match((
|
||||
"1": [],
|
||||
"2-4": $"t"_21 #syntax[if] "t"_1 #syntax[else] "t"_22$,
|
||||
"5-": $Gamma tack "t"_21 #syntax[if] "t"_1 #syntax[else] "t"_22: "T"$,
|
||||
))
|
||||
)
|
||||
)
|
||||
|
||||
show raw: it => {
|
||||
show regex("pin\d+"): it => pin(int(it.text.slice(3)))
|
||||
it
|
||||
}
|
||||
|
||||
figure(
|
||||
```python
|
||||
value = pin1e1pin2 if pin3conditionpin4 else pin5e2pin6
|
||||
```
|
||||
)
|
||||
|
||||
pause
|
||||
|
||||
/*
|
||||
pinit-point-from(
|
||||
(1, 2),
|
||||
offset-dx: -20pt,
|
||||
body-dx: -0.8em,
|
||||
body-dy: -0.2em,
|
||||
$"t"_21$
|
||||
)
|
||||
|
||||
pinit-point-from(
|
||||
(5, 6),
|
||||
offset-dx: 20pt,
|
||||
body-dx: 0.2em,
|
||||
body-dy: -0.2em,
|
||||
$"t"_22$
|
||||
)
|
||||
|
||||
pinit-point-from(
|
||||
(3, 4),
|
||||
offset-dx: 0pt,
|
||||
pin-dx: 0pt,
|
||||
body-dx: -0.2em,
|
||||
body-dy: 0.2em,
|
||||
$"t"_1$
|
||||
)
|
||||
*/
|
||||
|
||||
v(2cm)
|
||||
|
||||
figure(typing-rule)
|
||||
})
|
||||
|
||||
#codly(
|
||||
highlights: (
|
||||
(
|
||||
line: 2,
|
||||
start: 9,
|
||||
tag: [#set text(size: 1.25em);```python int```],
|
||||
fill: std.yellow
|
||||
),
|
||||
)
|
||||
)
|
||||
#figure(
|
||||
```python
|
||||
value: float
|
||||
value = 2026
|
||||
```
|
||||
)
|
||||
|
||||
#pause
|
||||
|
||||
Liskov Substitution Principle $->$ Subsumption Rule
|
||||
|
||||
#figure(
|
||||
prooftree(
|
||||
rule(
|
||||
name: smallcaps[(T-Sub)],
|
||||
$Gamma tack "t": "S"$,
|
||||
$"S" <: "T"$,
|
||||
$Gamma tack "t": "T"$,
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
== Enforcing Rules
|
||||
|
||||
/*
|
||||
#set enum(
|
||||
full: true,
|
||||
numbering: (..n) => strong(
|
||||
numbering(
|
||||
if n.pos().len() == 1 {
|
||||
"1."
|
||||
} else {
|
||||
"a."
|
||||
},
|
||||
n.pos().last()
|
||||
)
|
||||
)
|
||||
)
|
||||
Steps:
|
||||
+ Parsing
|
||||
+ Type-checking
|
||||
+ + Reporting
|
||||
+ Code generation
|
||||
*/
|
||||
|
||||
#let palette1 = (
|
||||
std.purple,
|
||||
std.blue,
|
||||
std.orange,
|
||||
std.green,
|
||||
)
|
||||
#let palette2 = (
|
||||
std.red,
|
||||
std.orange,
|
||||
std.green,
|
||||
std.blue,
|
||||
)
|
||||
#let steps = (
|
||||
[Parsing],
|
||||
[Type-checking],
|
||||
[Reporting],
|
||||
[Code generation],
|
||||
)
|
||||
#let palette = palette2.map(c => c.lighten(50%))
|
||||
|
||||
#{
|
||||
slide(repeat: 4, self => context {
|
||||
let max-step-height = calc.max(..steps.map(s => measure(box(width: 5em, s)).height))
|
||||
|
||||
align(left + horizon, canvas({
|
||||
smartart.process.chevron(
|
||||
steps.map(s => box(height: max-step-height, align(center + horizon, s))).slice(0, calc.min(steps.len(), self.subslide)),
|
||||
step-style: palette,
|
||||
steps: (
|
||||
max-width: 5em,
|
||||
),
|
||||
)
|
||||
}))
|
||||
})
|
||||
}
|
||||
|
||||
#let header-process(n) = place(
|
||||
top + right,
|
||||
{
|
||||
set text(size: 0.5em)
|
||||
canvas({
|
||||
smartart.process.chevron(
|
||||
steps,
|
||||
step-style: palette.enumerate().map(((i, c)) => {
|
||||
if i == n {c}
|
||||
else {c.lighten(70%)}
|
||||
}),
|
||||
steps: (max-width: 5em),
|
||||
equal-length: true
|
||||
)
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
#header-process(0)
|
||||
#{
|
||||
show raw: set text(size: 0.7em)
|
||||
grid(
|
||||
columns: (11em, auto),
|
||||
column-gutter: 1em,
|
||||
row-gutter: 0.2em,
|
||||
align: (x, y) => if y == 0 {center} else if x == 0 and y == 2 {top + right} else {left},
|
||||
grid.header[*Source*][*Raw AST*],
|
||||
```python
|
||||
value = 3.0 + int("4")
|
||||
```,
|
||||
grid.cell(rowspan: 2, uncover("2-", ```python
|
||||
Module(
|
||||
body=[
|
||||
Assign(
|
||||
targets=[
|
||||
Name(id='value')],
|
||||
value=BinOp(
|
||||
left=Constant(value=3.0),
|
||||
op=Add(),
|
||||
right=Call(
|
||||
func=Name(id='int'),
|
||||
args=[
|
||||
Constant(value='4')],
|
||||
keywords=[])))])
|
||||
```)),
|
||||
uncover("2-", canvas({
|
||||
draw.bezier-through(
|
||||
(0, 0),
|
||||
(1.5, -2.5),
|
||||
(5, -4),
|
||||
mark: (end: ">", fill: black),
|
||||
name: "arrow"
|
||||
)
|
||||
draw.content(
|
||||
(1.5, -2.5),
|
||||
```python ast.parse(source)```,
|
||||
anchor: "north-east",
|
||||
padding: 3pt,
|
||||
)
|
||||
}))
|
||||
)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
|
||||
#header-process(0)
|
||||
#{
|
||||
show raw: set text(size: 0.7em)
|
||||
grid(
|
||||
columns: (auto, auto),
|
||||
column-gutter: 1em,
|
||||
row-gutter: 0.2em,
|
||||
align: (x, y) => if y == 0 {center} else if x == 0 and y == 2 {top + right} else {left},
|
||||
grid.header[*Raw AST*][*Custom AST*],
|
||||
```python
|
||||
Module(
|
||||
body=[
|
||||
Assign(
|
||||
targets=[
|
||||
Name(id='value')],
|
||||
value=BinOp(
|
||||
left=Constant(value=3.0),
|
||||
op=Add(),
|
||||
right=Call(
|
||||
func=Name(id='int'),
|
||||
args=[
|
||||
Constant(value='4')],
|
||||
keywords=[])))])
|
||||
```,
|
||||
local(
|
||||
inset: (x: 0.32em, y: 0.15em),
|
||||
lang-outset: (x: 0.32em, y: 0.2em),
|
||||
```AST
|
||||
AssignStmt
|
||||
├── targets
|
||||
│ └── [0] VariableExpr
|
||||
│ └── name: value
|
||||
└── value
|
||||
└── BinaryExpr
|
||||
├── left
|
||||
│ └── LiteralExpr
|
||||
│ └── value: 3.0
|
||||
├── operator: Add
|
||||
└── right
|
||||
└── CallExpr
|
||||
├── callee
|
||||
│ └── VariableExpr
|
||||
│ └── name: int
|
||||
├── arguments
|
||||
│ └── [0] LiteralExpr
|
||||
│ └── value: '4'
|
||||
└── keywords
|
||||
```
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
#header-process(1)
|
||||
|
||||
#let cetz-canvas = touying-reduce.with(cetz)
|
||||
#let typing-tree = cetz-canvas({
|
||||
draw.set-style(content: (padding: 0.5em))
|
||||
tree.tree(
|
||||
name: "tree",
|
||||
([`type_of`(```py 3.0 + int("4")```)],
|
||||
[`type_of`(```py 3.0```)],
|
||||
([`type_of`(```py int("4")```)],
|
||||
[`type_of`(```py int```)],
|
||||
[`type_of`(```py "4"```)],
|
||||
)
|
||||
)
|
||||
)
|
||||
let type(pos, typ) = {
|
||||
draw.content(
|
||||
"tree.g" + pos.map(str).join("-") + ".south",
|
||||
box(
|
||||
inset: (x: 0.4em, y: 0.2em),
|
||||
stroke: std.orange,
|
||||
fill: std.orange.lighten(90%),
|
||||
radius: 0.4em,
|
||||
{
|
||||
set text(size: 0.8em)
|
||||
raw(lang: "python", typ)
|
||||
}
|
||||
),
|
||||
padding: 0pt,
|
||||
anchor: "north"
|
||||
)
|
||||
}
|
||||
|
||||
(pause,)
|
||||
type((0, 0), "float")
|
||||
type((0, 1, 1), "str")
|
||||
(pause,)
|
||||
type((0, 1, 0), "(Any, /) -> int")
|
||||
(pause,)
|
||||
type((0, 1), "int")
|
||||
(pause,)
|
||||
draw.content(
|
||||
(
|
||||
rel: (3, 0),
|
||||
to: (
|
||||
"tree.g0.south",
|
||||
50%,
|
||||
"tree.g0-1.north",
|
||||
)
|
||||
),
|
||||
{
|
||||
set text(size: 0.8em)
|
||||
```py float.__add__(int) -> float```
|
||||
},
|
||||
anchor: "west"
|
||||
)
|
||||
(pause,)
|
||||
type((0,), "float")
|
||||
})
|
||||
|
||||
#align(center + horizon, typing-tree)
|
||||
|
||||
---
|
||||
|
||||
#let midas-outputs = (
|
||||
check: read("../figs/midas_output.txt"),
|
||||
types: read("../figs/midas_output2.txt"),
|
||||
)
|
||||
|
||||
#let midas-cmd(args, stdin, files) = {
|
||||
(
|
||||
stdout: midas-outputs.at(args.first()),
|
||||
exit-code: 0
|
||||
)
|
||||
}
|
||||
|
||||
#let frames = conch.terminal-frames(
|
||||
system: conch.system(
|
||||
plugins: (
|
||||
("midas", midas-cmd),
|
||||
),
|
||||
files: (
|
||||
"script.py": read("../figs/script.py")
|
||||
),
|
||||
hostname: "XANA",
|
||||
),
|
||||
user: "louis",
|
||||
commands: (
|
||||
"cat script.py",
|
||||
"midas check script.py",
|
||||
"midas types script.py",
|
||||
"",
|
||||
),
|
||||
mode: "key-frames",
|
||||
show-cursor: false,
|
||||
theme: "monokai",
|
||||
height: 300pt
|
||||
)
|
||||
|
||||
#slide(repeat: frames.len() - 2, self => [
|
||||
#header-process(2)
|
||||
#figure(
|
||||
align(left + top, frames.at(self.subslide))
|
||||
)
|
||||
])
|
||||
|
||||
#header-process(3)
|
||||
|
||||
#align(
|
||||
center + horizon,
|
||||
grid(
|
||||
columns: 3,
|
||||
column-gutter: 2em,
|
||||
row-gutter: 1em,
|
||||
[AST], none, none,
|
||||
text(size: 2em)[+],
|
||||
uncover("2-", text(size: 2em)[$stretch(->)^#{set text(size: 0.6em);```py ast.unparse(tree)```}$]),
|
||||
uncover("2-")[Code],
|
||||
[Typing\ Judgements],
|
||||
)
|
||||
)
|
||||
|
||||
// What's the point? What about constraints?
|
||||
|
||||
== Runtime Verification
|
||||
|
||||
#{
|
||||
show raw: set text(size: 0.7em)
|
||||
|
||||
grid(
|
||||
columns: 2,
|
||||
column-gutter: 1em,
|
||||
row-gutter: 1em,
|
||||
align: horizon,
|
||||
rotate(-90deg, reflow: true)[*Source*],
|
||||
```python
|
||||
from lib import fetch_data
|
||||
unknown = fetch_data()
|
||||
speed = cast(Meter, unknown)
|
||||
```,
|
||||
uncover("2-", rotate(-90deg, reflow: true)[*Generated*]),
|
||||
uncover("2-", ```python
|
||||
from lib import fetch_data
|
||||
unknown = fetch_data()
|
||||
__midas_a0__ = unknown
|
||||
assert isinstance(__midas_a0__, float), f'script.py:L3:9: CastError: Cannot cast {type(__midas_a0__).__name__} to float'
|
||||
speed = __midas_a0__
|
||||
del __midas_a0__
|
||||
```)
|
||||
)
|
||||
}
|
||||
|
||||
== Customization
|
||||
|
||||
#{
|
||||
show raw: set text(size: 0.8em)
|
||||
item-by-item()[
|
||||
- Domain Specific Types (e.g. units, scores, transformed data)
|
||||
```midas
|
||||
type Meter = float
|
||||
extend Meter {
|
||||
def __add__: fn(Meter, /) -> Meter
|
||||
def __truediv__: fn(float, /) -> Meter
|
||||
}
|
||||
```
|
||||
- Dependent Types (i.e. with value constraints)
|
||||
```midas
|
||||
predicate in_range(mn: float, mx: float)(v: float) = mn <= v & v <= mx
|
||||
type Age = int where in_range(0.0, 150.0)(_)
|
||||
```
|
||||
]
|
||||
}
|
||||
|
||||
== Advanced Typing
|
||||
|
||||
Defining a dataframe schema
|
||||
```midas
|
||||
alias Data = Frame[
|
||||
name: str,
|
||||
height: Meter,
|
||||
age: Age
|
||||
]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Using a dataframe schema
|
||||
```python
|
||||
import pandas as pd
|
||||
df = cast(Data, pd.read_csv("data.csv"))
|
||||
```
|
||||
|
||||
#pause
|
||||
|
||||
Generates runtime checks
|
||||
|
||||
|
||||
#let python-outputs = (
|
||||
data1: read("../figs/python_output.txt"),
|
||||
data2: read("../figs/python_output2.txt"),
|
||||
)
|
||||
|
||||
#let python-cmd(args, stdin, files, output: "") = {
|
||||
(
|
||||
stdout: output,
|
||||
exit-code: 0,
|
||||
)
|
||||
}
|
||||
|
||||
#let make-cast-error(output) = conch.terminal-block(
|
||||
system: conch.system(
|
||||
plugins: (
|
||||
("midas", (..args) => (stdout: "", exit-code: 0)),
|
||||
("python", python-cmd.with(output: output)),
|
||||
),
|
||||
hostname: "XANA",
|
||||
),
|
||||
user: "louis",
|
||||
show-cursor: false,
|
||||
theme: "monokai",
|
||||
height: 150pt,
|
||||
width: 660pt,
|
||||
```
|
||||
midas compile script.py -t types.midas
|
||||
python build/midas/script.py
|
||||
```
|
||||
)
|
||||
|
||||
#figure(
|
||||
align(
|
||||
left + top,
|
||||
make-cast-error(python-outputs.data2),
|
||||
)
|
||||
)
|
||||
|
||||
---
|
||||
|
||||
```python
|
||||
mean_height = df["height"].mean()
|
||||
```
|
||||
|
||||
#pause
|
||||
|
||||
#figure(
|
||||
align(
|
||||
left + top,
|
||||
conch.terminal-block(
|
||||
system: conch.system(
|
||||
plugins: (
|
||||
(
|
||||
"midas",
|
||||
(..args) => (
|
||||
stdout: read("../figs/midas_df_types.txt"),
|
||||
exit-code: 0
|
||||
)
|
||||
),
|
||||
),
|
||||
hostname: "XANA",
|
||||
),
|
||||
user: "louis",
|
||||
show-cursor: false,
|
||||
theme: "monokai",
|
||||
```
|
||||
midas types script.py -t types.midas
|
||||
```
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
---
|
||||
|
||||
$
|
||||
overline(x) = 1 / n sum_(i=0)^n x_i
|
||||
$
|
||||
|
||||
#pause
|
||||
|
||||
$
|
||||
"type_of"(overline(x)) &= "type_of"( ("type_of"(x) + "type_of"(x)) / "type_of"(n) )\
|
||||
pause
|
||||
&= "type_of"( ("Meter" + "Meter") / "int") pause = "Meter"
|
||||
$
|
||||
@@ -0,0 +1,67 @@
|
||||
#import "../requirements.typ": *
|
||||
#import codly: codly
|
||||
|
||||
#focus-slide(theme: "neon")[Current Status and Future]
|
||||
= Current Status and Future
|
||||
|
||||
== What Midas offers
|
||||
|
||||
#v(-0.5em)
|
||||
#item-by-item[
|
||||
|
||||
- Working *static type checking* of a good subset of Python (including dataframes)
|
||||
|
||||
- *Custom type* definition language for domain-specific usages (supports generics, method overloads, dependent types, frame schemas, named predicates and more)
|
||||
|
||||
- Toolbox *CLI* with useful debug features
|
||||
|
||||
- Generation of *runtime assertions*
|
||||
|
||||
- Stubs for *seamless integration* with other type checkers
|
||||
]
|
||||
|
||||
== What needs work
|
||||
|
||||
#{
|
||||
show raw: set text(size: 0.85em)
|
||||
item-by-item[
|
||||
- Reference types (side effects)
|
||||
```python
|
||||
def modify_column(df: pd.DataFrame):
|
||||
df["col"] = df["col"].astype(float)
|
||||
```
|
||||
- Reverse operators
|
||||
```python
|
||||
a = 1.0 + 1 # float.__add__(int)
|
||||
b = 1 + 1.0 # float.__radd__(int)
|
||||
```
|
||||
- Logical short-circuit bypass
|
||||
#codly(
|
||||
highlights: (
|
||||
(
|
||||
line: 1,
|
||||
start: 15,
|
||||
tag: box(inset: (x: 0.5em))[_Always evaluated_ ],
|
||||
fill: std.red.lighten(20%)
|
||||
),
|
||||
)
|
||||
)
|
||||
```python
|
||||
value = v1 or cast(Type, v2)
|
||||
```
|
||||
]
|
||||
}
|
||||
|
||||
== Possible extensions
|
||||
|
||||
#item-by-item[
|
||||
|
||||
- Visitor pattern $->$ easy to extend supported Python syntax
|
||||
|
||||
- Multi-file projects (```python import``` statements)
|
||||
|
||||
- Constraint solver
|
||||
$
|
||||
v in [1; 6] => v > 0
|
||||
$
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
#import "../requirements.typ": *
|
||||
|
||||
#focus-slide(theme: "smoke")[Thanks for listening !]
|
||||
= Thanks for listening !
|
||||
|
||||
== Repositories
|
||||
|
||||
#let repos = (
|
||||
([Code], path("../../poster/figs/qr_gitea.svg"), "https://git.kb28.ch/HEL/midas"),
|
||||
([Code (mirror)], path("../../poster/figs/qr_github.svg"), "https://github.com/LordBaryhobal/midas"),
|
||||
([Docs], path("../../poster/figs/qr_docs.svg"), "https://git.kb28.ch/HEL/TB-Docs"),
|
||||
)
|
||||
|
||||
#let repo(name, code, url) = {
|
||||
stack(
|
||||
dir: ttb,
|
||||
spacing: 0.2em,
|
||||
strong(text(size: 0.8em, name)),
|
||||
image(code, width: 3cm),
|
||||
{
|
||||
set text(size: 0.6em)
|
||||
link(url)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
#v(1fr)
|
||||
|
||||
#grid(
|
||||
columns: (1fr, 1fr),
|
||||
align: center + horizon,
|
||||
row-gutter: 2em,
|
||||
repo(..repos.at(0)),
|
||||
repo(..repos.at(1)),
|
||||
grid.cell(colspan: 2, repo(..repos.at(2)))
|
||||
)
|
||||
|
||||
#v(1fr)
|
||||
@@ -0,0 +1,3 @@
|
||||
#import "../requirements.typ": *
|
||||
|
||||
#show: appendix
|
||||
@@ -1,7 +1,7 @@
|
||||
#import "@preview/acrostiche:0.7.0": *
|
||||
|
||||
#let acronyms = (
|
||||
"TaPL": ([Types and Progamming Languages@tapl],),
|
||||
"TaPL": ([Types and Programming Languages@tapl],),
|
||||
"LSP": (link("https://en.wikipedia.org/wiki/Liskov_substitution_principle")[Liskov substitution principle],),
|
||||
"AST": ([Abstract Syntax Tree],),
|
||||
"LUB": ([Least Upper Bound],),
|
||||
@@ -11,6 +11,3 @@
|
||||
)
|
||||
|
||||
#init-acronyms(acronyms)
|
||||
|
||||
// Don't think this needs a long form on first use
|
||||
#mark-acr-used("CSV")
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
#import "requirements.typ": isc-hei-bthesis
|
||||
#import isc-hei-bthesis: *
|
||||
#import "@preview/codly:1.3.0": codly-init, codly
|
||||
#import "@local/codly:1.3.1": codly-init, codly // https://github.com/PhotonQuantum/codly/tree/fix/highlight-baseline
|
||||
#import "@preview/codly-languages:0.1.10": codly-languages
|
||||
#import "../meta.typ"
|
||||
#import "utils.typ": include-offset
|
||||
@@ -86,6 +86,10 @@
|
||||
outlined: false,
|
||||
)
|
||||
|
||||
// Mark all acronyms as used to have short forms in outlines
|
||||
#context for a in state("acrostiche-acronyms").final() {
|
||||
acused(a.first())
|
||||
}
|
||||
|
||||
// Table of figures/tables/listings
|
||||
#context {
|
||||
@@ -112,6 +116,10 @@
|
||||
)
|
||||
}
|
||||
|
||||
#acresetall()
|
||||
// Don't think this needs a long form on first use
|
||||
#mark-acr-used("CSV")
|
||||
|
||||
////////////////////////////
|
||||
// Let's get started folks!
|
||||
////////////////////////////
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#import "../requirements.typ": isc-hei-bthesis
|
||||
#import isc-hei-bthesis: todo
|
||||
#import "../utils.typ": quote-block
|
||||
#import "@preview/gentle-clues:1.3.1" as gc
|
||||
|
||||
= Introduction <chap:intro>
|
||||
|
||||
@@ -40,3 +41,7 @@ The system should not impede on Python's dynamic typing philosophy. It should en
|
||||
It must be flexible to allow checking various kinds of constraints (e.g. value domain, geometric shape, distribution, etc.) and allow extension to add support for more Python features and packages.
|
||||
|
||||
Finally, the system must be simple to use for average Python developers, and be able to seamlessly integrate into existing Python code.
|
||||
|
||||
#gc.info[
|
||||
This report was written using Typst. Its source files can be found at https://git.kb28.ch/HEL/TB-Docs.
|
||||
]
|
||||
@@ -103,7 +103,7 @@
|
||||
),
|
||||
rule(
|
||||
"T-Assign",
|
||||
$Gamma tack "x": "T"$,
|
||||
$"x": "T" in Gamma$,
|
||||
$Gamma tack "t": "T"$,
|
||||
$Gamma tack "x" = "t" tack.l Gamma$,
|
||||
```py x = t```,
|
||||
|
||||
@@ -9,7 +9,7 @@ Our type checker is composed of several interdependent elements shown in @fig:ar
|
||||
|
||||
#figure(
|
||||
architecture.overview,
|
||||
caption: [Implementation Architecture Overview],
|
||||
caption: [Implementation architecture overview],
|
||||
kind: image,
|
||||
supplement: [Figure],
|
||||
) <fig:architecture>
|
||||
|
||||
@@ -10,21 +10,118 @@
|
||||
|
||||
#import "@preview/isc-hei-exec-summary:0.8.1" : *
|
||||
#import "../meta.typ"
|
||||
#import "../report/figs/architecture.typ"
|
||||
#import "@local/codly:1.3.1": codly, codly-init, local
|
||||
#import "@preview/codly-languages:0.1.10": codly-languages
|
||||
|
||||
// Must be <= 365 characters long.
|
||||
#let summary = "Midas is cool!" // TODO
|
||||
#let summary = "Midas is a type system built on top of Python to provide both static type checking and runtime assertions. It includes its own type definition language, implements dependent types in the form of constraint expressions and offers extended checking of dataframe schemas and operations."
|
||||
|
||||
#assert(
|
||||
summary.len() <= 365,
|
||||
message: "Summary too long: len() > 365"
|
||||
)
|
||||
|
||||
#let content = [
|
||||
#todo[]
|
||||
#show: codly-init
|
||||
#codly(
|
||||
languages: codly-languages
|
||||
+ (
|
||||
midas: (
|
||||
name: "Midas",
|
||||
color: rgb("#eedd47"),
|
||||
icon: box(
|
||||
image(
|
||||
"../assets/icon.svg",
|
||||
height: 130%,
|
||||
fit: "contain",
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
#lorem-pars(500)
|
||||
#colbreak()
|
||||
#lorem-pars(500)
|
||||
#set raw(
|
||||
syntaxes: path("../midas.sublime-syntax")
|
||||
)
|
||||
#show raw.where(block: true): set text(size: 0.9em)
|
||||
|
||||
#let content = [
|
||||
= Objectives
|
||||
|
||||
Python is a very popular language known for its great flexibility. For beginners and many developers, its duck-typing philosophy is a great way to code quickly and without heavy syntax. However, it is extremely easy to mix things up, use the wrong variable or not realize that a value has the wrong type.
|
||||
|
||||
Additionally, in data science, most of the values handled by a program are only known at runtime, because they are loaded from a dataset or fetched from an external service.
|
||||
|
||||
Enter Midas, a new type system designed to allow developers to define custom types for their use case, check their script to avoid type errors and generate safe runtime code that will ensure data integrity. For data engineers, Midas also allows defining value constraints and will verify operations on Pandas DataFrames.
|
||||
|
||||
#codly(
|
||||
header: [types.midas]
|
||||
)
|
||||
#figure(
|
||||
```midas
|
||||
predicate not_empty(text: str) = len(text) != 0
|
||||
type Height = float where _ >= 0
|
||||
alias People = Frame[
|
||||
name: str where not_empty(_),
|
||||
height: Height
|
||||
]
|
||||
```,
|
||||
caption: [Example custom type definitions]
|
||||
)
|
||||
|
||||
= Explanation
|
||||
|
||||
Midas was developed in a modular fashion, adding features one-by-one, starting with the selection of a subset of the Python language to support and the design of a definition language. Then a parser was built to read in Midas files. After defining some formal typing rules, the first elements of the type checker were put in place to handle basic Python statements and expressions.
|
||||
|
||||
The type system was then extended to support subtyping, generics, methods and more. After implementing cast expressions, the code generator was developed and integrated in the compilation pipeline.
|
||||
|
||||
Once a strong foundation was laid out it was further strengthened with numerous other features, such as constraint types and type checking of dataframe operations. The latter allows powerful inference of some aggregation result types.
|
||||
|
||||
#codly(
|
||||
header: [script.py],
|
||||
highlights: (
|
||||
(
|
||||
line: 3,
|
||||
start: 11,
|
||||
tag: [#h(2pt)Column[Height]],
|
||||
fill: blue.lighten(60%)
|
||||
),
|
||||
(
|
||||
line: 4,
|
||||
start: 17,
|
||||
tag: [#h(2pt)Height],
|
||||
fill: blue.lighten(60%)
|
||||
),
|
||||
)
|
||||
)
|
||||
#figure(
|
||||
```python
|
||||
import pandas as pd
|
||||
people: People = cast(People, pd.read_csv(...))
|
||||
heights = people["height"]
|
||||
median_height = heights.median()
|
||||
```,
|
||||
caption: [Example type checking of dataframe operations]
|
||||
)
|
||||
|
||||
= Conclusion
|
||||
|
||||
This project provides a solid hybrid type system for Python, that helps data engineers and developers avoid costly mistakes. It is packed with many useful features such as runtime checking of cast expressions and constraint types. Its modular architecture makes it easily expandable too.
|
||||
|
||||
Some ideas for future extensions include adding a constraint solver, handling reference types and supporting multi-file projects through import statements.
|
||||
|
||||
#place(
|
||||
bottom + center,
|
||||
scope: "parent",
|
||||
float: true,
|
||||
figure(
|
||||
{
|
||||
set par(justify: false)
|
||||
architecture.overview
|
||||
},
|
||||
caption: [Implementation architecture overview]
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
#show: exec-summary.with(
|
||||
|
||||