Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • elmau/silkaj
  • Mr-Djez/silkaj
  • jbar/silkaj
  • clients/python/silkaj
  • Bernard/silkaj
  • cebash/silkaj
  • jytou/silkaj
  • c-geek/silkaj
  • vincentux/silkaj
  • jeanlucdonnadieu/silkaj
  • matograine/silkaj
  • zicmama/silkaj
  • manutopik/silkaj
  • atrax/silkaj
14 results
Select Git revision
Show changes
Showing
with 723 additions and 0 deletions
There are two kind of containers. The one built with `pip` for user purposes, and the one built with Poetry for developer purposes.
We recommand using `podman` instead of `docker` command for not having to run the command as `root`.
In case you use `docker`, you can [add your user into the `docker` group, so you can manipulate `docker` executable without `root` permissions](https://askubuntu.com/a/739861).
#### User
Pull the image:
=== "Podman"
```
podman pull registry.duniter.org/clients/python/silkaj/release/pip:latest
```
=== "Docker"
```
sudo docker pull registry.duniter.org/clients/python/silkaj/release/pip:latest
```
Run Silkaj from outside the image:
=== "Podman"
```
podman run -it registry.duniter.org/clients/python/silkaj/release/pip:latest silkaj info
```
=== "Docker"
```
sudo docker run -it registry.duniter.org/clients/python/silkaj/release/pip:latest silkaj info
```
Go into the image:
=== "Podman"
```
podman run -it registry.duniter.org/clients/python/silkaj/release/pip:latest bash
```
=== "Docker"
```
sudo docker run -it registry.duniter.org/clients/python/silkaj/release/pip:latest bash
```
Then run Silkaj:
```
silkaj info
```
The working directory is where Silkaj sources are installed in Python `site-packages`.
This is fine for doing small editions. For bigger editions, it is adviced to use a development environment with Poetry.
#### Developer
`git` is installed, so it can be used as a development environment.
Pull the image:
=== "Podman"
```
podman pull registry.duniter.org/clients/python/silkaj/release/poetry:latest
```
=== "Docker"
```
sudo docker pull registry.duniter.org/clients/python/silkaj/release/poetry:latest
```
Run Silkaj from ouside the image:
=== "Podman"
```
podman run -it registry.duniter.org/clients/python/silkaj/release/poetry:latest silkaj info
```
=== "Docker"
```
sudo docker run -it registry.duniter.org/clients/python/silkaj/release/poetry:latest silkaj info
```
Go into the image:
=== "Podman"
```
podman run -it registry.duniter.org/clients/python/silkaj/release/poetry:latest bash
```
=== "Docker"
```
sudo docker run -it registry.duniter.org/clients/python/silkaj/release/poetry:latest bash
```
Then run Silkaj:
```
silkaj info
```
The working directory contains Silkaj sources. Set up the repository to have it ready for developments:
```bash
git checkout dev
git remote set-url origin https://git@git.duniter.org/clients/python/silkaj.git
```
```bash
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
```
# Documentation contribution
![MkDocs Material icon](../images/mkdocs-material-favicon.png)
The project documentation website is based on [MkDocs framework](https://www.mkdocs.org/) and on following theme and plugins:
- [Mkdocs Material](https://squidfunk.github.io/mkdocs-material/): theme and framework
- [Mike](https://github.com/jimporter/mike): to publish multiple versions
- [MkDocs Coverage](https://github.com/pawamoy/mkdocs-coverage): to integrate coverage report iframe into MkDocs
- [MkDocs Click](https://github.com/mkdocs/mkdocs-click): generate documentation for Click command line applications
- [MkDocs GitLab plugin](https://pypi.org/project/mkdocs-gitlab-plugin/): to display links to GitLab references items: used in the changelog page
Please refer to their respective documentation.
## Set up
Install the optional `docs` group:
```
poetry install --with docs
```
## MkDocs
Run the website in development mode:
```
poetry run mkdocs deploy
```
Open [localhost:8000](http://localhost:8000/) in your web browser.
The preview will be live-updated once you change the documentation.
## Mike
Running following command will serve what’s on `pages` branch:
```
poetry run mike serve
```
This preview won’t be live-updated with your latest changes as it would be with `mkdocs serve`. This is because Mike simply serves what’s built on `pages` branch.
## Changing the content
Into `docs` folder, you can find the Markdown source files which can be edited.
`mkdocs.yml` file lists the website structure.
## Deployment workflow
Only on `main` branch, a `website` job will be triggered containing the documentation build for a specific version. It creates a commit which is added to `pages` branch with `poetry run mike deploy $version` command.
Then the commit is pushed on the git repository remote from the job with an access token.
The coverage report is integrated in the website build. The artefact is retrieved from the coverage job with `needs:` keyword.
From `pages` branch, an other pipeline is triggered, publishing the documentation website to [silkaj.duniter.org](https://silkaj.duniter.org) for all versions via GitLab Pages.
### Access token
A `git push` is performed from the job to the remote repository via the authorisation provided via an access token set in CI/CD variables.
The access token has to be renew every year, since this is the maximum lifespan we can set for an access token at its creation.
The access token has to be created on a project basis with `repository_write` checked and with Developer role.
# Contributing
## Goals
Part of the Duniter project running the Ğ1 currency, Silkaj project is aiming at creating a generic tool to manage the main account and wallets, to administrate and to monitor the currency.
## Install the development environment
We are using [Poetry](https://python-poetry.org/) as a development environment solution. Start by [installing Poetry](./install_poetry.md).
This will install a sandboxed Python environment.
Dependencies will be installed in it in order to have Silkaj running and to have pre-installed developement tools.
## Workflow
- We use branches for merge requests
- We prefer fast-forward and rebase method than having merge commits created. This in order to have a clean history.
## Branches
- `main`: development and stable branch
- maintainance branches, to maintain a stable version while developing future version with breaking changes. For instance: `release/0.12`
## Developing with DuniterPy
[![DuniterPy logo](../images/duniterpy_logo.png){: style="height:150px;width:150px"}](https://git.duniter.org/clients/python/duniterpy)
[DuniterPy](https://git.duniter.org/clients/python/duniterpy) is a Python library for Duniter v1 clients.
It implements a client with multiple APIs, the handling for document signing.
As it is coupled with Silkaj, it is oftenly needed to develop in both repositories.
### How to use DuniterPy as editable with Poetry
Clone DuniterPy locally alongside of `silkaj` repository:
```bash
silkaj> cd ..
git clone https://git.duniter.org/clients/python/duniterpy
```
Use DuniterPy as a [path dependency](https://python-poetry.org/docs/dependency-specification/#path-dependencies):
```bash
poetry add ../duniterpy
```
### Developing with modules
Silkaj is using Python modules which shape kind of a framework.
Please read their documentations on how to use them the best possible.
- [DuniterPy](https://clients.pages.duniter.org/python/duniterpy/index.html): Autogenerated documentation.
- Feel free to contribute upstream to share the code with other Python programs
- [Click](https://click.palletsprojects.com/#documentation)
- [Rich-Click](https://github.com/ewels/rich-click)
- [Pendulum](https://pendulum.eustace.io/docs/)
- [texttable](https://github.com/foutaise/texttable/#documentation)
## Pre-commit hooks
[![Pre-commit logo](../images/pre-commit_logo.svg){: style="height:150px;width:150px"}](https://pre-commit.com/)
We are using [`pre-commit`](https://pre-commit.com/) tool to perform checks on staged changes before committing.
We are using it for `black` formatting, `mypy` static typing, `gitlab-ci` linting.
We are also using `ruff` which replaces `isort` imports sorting, `pylint` code linting, `autoflake`, and `pyupgrade`
Install `pre-commit` from your distribution. In case it is an outdated version, install it with `pipx`:
```bash
sudo apt install pre-commit
pipx install pre-commit
```
To install the `git-hooks`, from within Silkaj repository, run:
```bash
pre-commit install
```
Then each time you commit changes, the hooks will perform verifications.
In case you want to commit while the hooks are failing, run the following to [skip the hooks](https://stackoverflow.com/a/7230886):
```bash
git commit -m "msg" --no-verify/-n
```
To manually run one of the tool above, run (eg for `ruff-format`):
```bash
pre-commit run --all-files ruff-format
```
To run all checks on all files:
```bash
pre-commit run -a
```
### Authorization for GitLab CI linter hook
`pre-commit run -a (gitlab-ci-linter)` is failing due to authorization required for CI lint API accesses.
When running this command, just ignore this failed hook.
In case you want to commit a `.gitlab-ci.yml` edition, this hook will prevent the commit creation.
You can skip the hooks as mentionned above.
This is fine for occasional `.gitlab-ci.yml` editions. In case you would like to edit this file more often and have it checked, ask a maintainer to provide you with `GITLAB_PRIVATE_TOKEN` environment variable that can be set into a shell configuration.
With Bash, in `$HOME/.bashrc` add the following:
```bash
export GITLAB_PRIVATE_TOKEN=""
```
With Fish, in `$HOME/.config/fish/config.fish` add the following:
```fish
set -xg GITLAB_PRIVATE_TOKEN ""
```
Check out [duniterpy#169](https://git.duniter.org/clients/python/duniterpy/-/issues/169) for more details.
## Tests
[![Pytest logo](../images/pytest_logo.svg){: style="height:150px;width:150px"}](https://pytest.org)
We are using [Pytest](https://pytest.org) as a tests framework. For more information on how Silkaj implements them check the [testing documentation](./testing.md).
Tests are stored into `unit` and `integration` folders depending on their types, then using a similar tree as the source code.
To run the tests, from within `silkaj` repository, run:
```bash
poetry run pytest
```
### How to test a single file
Specifiy the path of the test:
```bash
poetry run pytest tests/unit/test_network.py
```
## Version bump
We are using the [Semantic Versioning](https://semver.org).
To create a release, we use following script which will bump the version in different files, and will make a commit and a tag out of it.
```bash
./release.sh 0.20.0
```
Then, a `git push --tags` is necessary to publish the tag.
### How to release a pre-release on PyPI
[Append `[{a|b|rc}N]` to the version, it will be automatically detected as pre-release by PyPI](https://pythonpackaging.info/07-Package-Release.html). i.e.: `v0.20.0rc0`.
- install a pre-release from PyPI:
```sh
pip install silkaj --user --upgrade --pre
```
- install `silkaj` from PyPI test and the dependencies (i.e. DuniterPy) from PyPI (have been removed from the documentation):
```sh
pip install silkaj --user --upgrade -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple/
```
## Update copyright year
Follow [this documentation](https://github.com/Lucas-C/pre-commit-hooks#removing-old-license-and-replacing-it-with-a-new-one)
Only difference is to update the year in `license_header.txt` rather than `LICENSE.txt`.
## PyPI and PyPI test distributions
[![PyPI logo](../images/pypi_logo.svg){: style="height:150px;width:150px"}](https://pypi.org/project/silkaj)
Silkaj is distributed to PyPI, the Python Package Index, for further `pip` installation.
Silkaj can be published to [PyPI](https://pypi.org/project/silkaj) or to [PyPI test](https://test.pypi.org/project/silkaj/) for testing purposes.
Publishing to PyPI or PyPI test can be directly done from the continuous delivery or from Poetry it-self.
The CD jobs appear on a tag and have to be triggered manually.
Only the project maintainers have the rights to push tags.
### PyPI
Publishing to PyPI from Poetry:
```bash
poetry publish --build
```
### PyPI test
Publishing to PyPI test from Poetry:
```bash
poetry config repositories.pypi_test https://test.pypi.org/legacy/
poetry publish --build --repository pypi_test
```
To install this package:
```bash
pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.python.org/simple/ silkaj
```
The `--extra-index-url` is used to retrieve dependencies packages from the official PyPI not to get issues with missing or testing dependencies comming from PyPI test repositories.
## Continuous integration and delivery
![GitLab logo](../images/GitLab_icon.svg){: style="height:100px;width:100px"}
### Own built Docker images
Silkaj pipeline is running images built on top of official Python images based on latest Debian with Poetry installed on top them.
They can be found in [this repository](https://git.duniter.org/docker/python3/poetry).
### Pipeline and its jobs
- Checks:
- pre-commit hooks
- Build
- Tests on supported Python versions:
- Installation
- Pytest on Python supported versions
- Package
- PyPI stable
- PyPI test
- Docker pip
- Docker poetry
- Website/project documentation commited to be deployed via GitLab Pages
### Ğ1 monetary license update
To modify the Ğ1 monetary license files, please change them on [its repository](https://git.duniter.org/documents/g1_monetary_license), since it’s integrated in silkaj repository as a `git subtree`.
Ğ1 monetary license is included in Silkaj repository as a `git subtree`.
To update the licence files, add the license repository as a remote then pull:
```bash
git remote add g1_monetary_license https://git.duniter.org/documents/g1_monetary_license.git
git subtree pull --prefix g1_monetary_license g1_monetary_license master
```
Depending on your distribution, you might need to install `git-subtree`.
![Poetry logo](../images/poetry-logo.svg){: style="height:120px;width:120px"}
## Install Silkaj in a development environement with Poetry
### Install libsodium
=== "Debian"
```
sudo apt install libsodium23
```
=== "Fedora"
```
sudo dnf install libsodium
```
### Install Poetry
- [Installation documentation](https://python-poetry.org/docs/#installation)
```
pipx install poetry
```
### Install dependencies and the Python virtual environment
```bash
# Over HTTPS
git clone https://git.duniter.org/clients/python/silkaj.git
# Over SSH
git clone git@git.duniter.org:clients/python/silkaj.git
cd silkaj
# Installs the runtime and development dependencies
poetry install
```
### Run Silkaj
Within `silkaj` repository run Silkaj:
```bash
poetry run silkaj
```
### Poetry shell
You can access tools `pytest` from within the development environment with `poetry run` or by entering the shell:
```bash
silkaj> poetry run pytest
```
```bash
silkaj> poetry shell
(silkaj-58dUTebQ-py3.12) silkaj> pytest
```
### Make Silkaj accessible from everywhere
Add following alias to your shell configuration:
```bash
alias silkaj="cd /path/to/silkaj && poetry run silkaj"
```
# Packaging
Silkaj is packaged in official Debian repositories. Packaging details can be found in [its repository on Debian forge](https://salsa.debian.org/cryptocoin-team/silkaj).
## Dependencies
DuniterPy might be the only dependency not already into distributions.
## Manual pages
To generate manual pages: #179
- [`click-man`](https://github.com/click-contrib/click-man#debian-packages)
## Shell completion
Shell completion might be set-up as described in the [installation documentation](../install.md/#shell-completion).
## Test and coverage
### Install tests dependencies
```
poetry install
```
### Runing tests:
Simply run:
```
poetry run pytest
```
To have a coverage report:
```
poetry run pytest --cov silkaj --cov-report html --cov-report xml --cov-report term
```
See [pytest documentation](https://docs.pytest.org/en/latest/usage.html) for more information
### Writing tests
There should be three kinds of test:
- end to end test: uses the real data and the real blockchain. Obviously don't presume the data value as it can change. These test are written in `tests/integration/test_end_to_end.py`.
- integration test: mock some of the input and/or output classes and shouldn't use the actual blockchain, you should use this when mocking a class (used by your code) is too complicated.
- unit test: for functions that don't need mock or mock can me done easily (you should prefer this to integration tests). Are written in `tests/unit/test_*package*.py`
You should try to write an end to end test first, then if your coverage too bad add some unit tests. If it's still too bad, write an integration test.
A better strategy (TDD) is to write first the End to end test. When it fails, before writing the code, you should implement the unit tests. When this one fails too, you can write your code to make your test pass. It's better but takes longer and the code is tested at least twice. So the previous strategy is a better compromise
### Tips
Test an Exception is raised: https://docs.pytest.org/en/latest/assert.html#assertions-about-expected-exceptions
Test a function with several values: You can use `@pytest.mark.parametrize` as done in `tests/unit/money/test_transfer.py`
To mock a user input:
```python
from unittest.mock import patch
from silkaj.cert import certification_confirmation
# this will add a mock_input parameter that will be used whenever the code tries to get input from user
@patch('builtins.input')
def test_certification_confirmation(mock_input):
id_to_certify = {"pubkey": "pubkeyid to certify"}
main_id_to_certify = {"uid": "id to certify"}
# the input will return "yes" to the tested function (certification_confirmation)
mock_input.return_value = "yes"
# ensure the tested function returns something
assert certification_confirmation(
"certifier id",
"certifier pubkey",
id_to_certify,
main_id_to_certify)
# ensure that input is called once
mock_input.assert_called_once()
```
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000"
height="963.197"
viewBox="0 0 1000 963.197"
version="1.1"
id="svg85">
<sodipodi:namedview
id="namedview87"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
showgrid="false"
inkscape:zoom="1"
inkscape:cx="991.5"
inkscape:cy="964.5"
inkscape:window-width="1126"
inkscape:window-height="895"
inkscape:window-x="774"
inkscape:window-y="12"
inkscape:window-maximized="0"
inkscape:current-layer="svg85" />
<defs
id="defs74">
<style
id="style72">.cls-1{fill:#e24329;}.cls-2{fill:#fc6d26;}.cls-3{fill:#fca326;}</style>
</defs>
<g
id="LOGO"
transform="matrix(5.2068817,0,0,5.2068817,-489.30756,-507.76085)">
<path
class="cls-1"
d="m 282.83,170.73 -0.27,-0.69 -26.14,-68.22 a 6.81,6.81 0 0 0 -2.69,-3.24 7,7 0 0 0 -8,0.43 7,7 0 0 0 -2.32,3.52 l -17.65,54 h -71.47 l -17.65,-54 a 6.86,6.86 0 0 0 -2.32,-3.53 7,7 0 0 0 -8,-0.43 6.87,6.87 0 0 0 -2.69,3.24 L 97.44,170 l -0.26,0.69 a 48.54,48.54 0 0 0 16.1,56.1 l 0.09,0.07 0.24,0.17 39.82,29.82 19.7,14.91 12,9.06 a 8.07,8.07 0 0 0 9.76,0 l 12,-9.06 19.7,-14.91 40.06,-30 0.1,-0.08 a 48.56,48.56 0 0 0 16.08,-56.04 z"
id="path76" />
<path
class="cls-2"
d="m 282.83,170.73 -0.27,-0.69 a 88.3,88.3 0 0 0 -35.15,15.8 L 190,229.25 c 19.55,14.79 36.57,27.64 36.57,27.64 l 40.06,-30 0.1,-0.08 a 48.56,48.56 0 0 0 16.1,-56.08 z"
id="path78" />
<path
class="cls-3"
d="m 153.43,256.89 19.7,14.91 12,9.06 a 8.07,8.07 0 0 0 9.76,0 l 12,-9.06 19.7,-14.91 c 0,0 -17.04,-12.89 -36.59,-27.64 -19.55,14.75 -36.57,27.64 -36.57,27.64 z"
id="path80" />
<path
class="cls-2"
d="M 132.58,185.84 A 88.19,88.19 0 0 0 97.44,170 l -0.26,0.69 a 48.54,48.54 0 0 0 16.1,56.1 l 0.09,0.07 0.24,0.17 39.82,29.82 c 0,0 17,-12.85 36.57,-27.64 z"
id="path82" />
</g>
</svg>
docs/images/Moul.png

29 KiB

docs/images/click_logo.png

8.04 KiB

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="140px" height="140px" viewBox="0 0 140 140" style="enable-background:new 0 0 140 140;" xml:space="preserve">
<g>
<path style="fill:#F2F2F2;" d="M70,130c-33.084,0-60-26.916-60-60s26.916-60,60-60s60,26.916,60,60S103.084,130,70,130z"/>
<circle style="fill:#F5DD9E;" cx="70" cy="70" r="58.064"/>
<g>
<path style="fill:#754C24;" d="M46.774,78.71c-0.203,0-0.408-0.063-0.582-0.195c-0.427-0.322-0.512-1.236-0.19-1.664
c0.617-0.817,3.986-5.184,10.053-5.184c0.038,0,0.076,0,0.114,0c0.535,0,0.964,0.748,0.96,1.283
c-0.004,0.531-0.437,1.113-0.968,1.113c-0.029-0.002-0.068,0.076-0.103,0.076c-5.262,0-8.192,3.723-8.511,4.146
C47.357,78.538,47.067,78.71,46.774,78.71z"/>
<path style="fill:#1C0D1A;" d="M92.533,109.667H60.085c-0.274,0-0.536-0.111-0.719-0.314c-0.184-0.202-0.272-0.474-0.243-0.746
c0,0,2.69-25.619,3.671-35.172c0.395-3.84,1.954-7.494,4.306-10.131c-0.348-0.986-0.524-2.014-0.524-3.063
c0-4.64,3.878-16.083,9.732-16.083c5.854,0,9.731,11.478,9.731,16.13c0,1.098-0.189,2.194-0.553,3.209
c2.408,2.723,3.942,6.3,4.336,10.146c0.98,9.551,3.672,34.968,3.672,34.968c0.029,0.272-0.06,0.54-0.242,0.744
C93.068,109.556,92.808,109.667,92.533,109.667z"/>
<path style="fill:#1A1A1A;" d="M89.355,108.667c-2.904-2-4.645-27.846-5.345-34.66c-0.269-2.621-1.312-5.109-2.862-6.848
c0,0-2.439-2.971-4.375-2.971c0-0.97,3.871-1.935,3.871-3.869c0-2.948-2.066-10.125-4.354-10.125
c-2.288,0-4.355,7.179-4.355,10.127c0,1.936,3.871,2.904,3.871,3.871c-1.936,0-4.375,2.978-4.375,2.978
c-1.55,1.737-2.593,4.216-2.862,6.837c-0.7,6.815-2.44,32.66-5.344,34.66H89.355L89.355,108.667z"/>
<path style="fill:#E6E6E6;" d="M96.635,44.172c0-0.001,0.096-0.002,0.094-0.004c-11.23-13.304-42.711-12.603-50.188-11.147
c-0.448,0.088-0.652,0.646-0.678,0.646h-0.228v10h0.917c-0.025,0-0.053,0.271-0.053,0.363c0,0.535,0.433,1.02,0.967,1.02
c1.923,0,5.196-0.621,9.338-1.438c11.604-2.287,31.022-6.102,38.625,1.882c0.058,0.062,0.131,0.1,0.199,0.144
c0.04,0.024-0.175,0.063-0.134,0.082c0.125,0.055,0.142,0.084,0.142,0.084v0.002c0,0,0.478-0.021,0.586-0.063
c0.036-0.015,0.19-0.039,0.224-0.058c0.063-0.031,0.188-0.058,0.244-0.104c0.008-0.007,0.043-0.018,0.049-0.023
c0.008-0.008,0.035-0.01,0.043-0.018c0.043-0.039,0.069-0.09,0.102-0.134c0.038-0.052,0.086-0.099,0.113-0.156
s0.037-0.116,0.053-0.177s0.038-0.118,0.041-0.182c0.003-0.062-0.012-0.119-0.02-0.182s-0.01-0.124-0.031-0.184
c-0.02-0.061-0.057-0.11-0.09-0.166c-0.027-0.047-0.14-0.101-0.176-0.146C96.76,44.2,96.635,44.187,96.635,44.172
C96.635,44.173,96.635,44.172,96.635,44.172z"/>
<path style="fill:#CCCCCC;" d="M46.704,35.972c7.336-1.351,36.64-2.166,50.289,8.363c-0.016-0.025-0.027,0-0.043-0.027
c-0.027-0.048-0.14-0.072-0.176-0.117c-0.014-0.016-0.139-0.002-0.139-0.017c0-0.001,0-0.002,0-0.002
c0-0.001,0.096-0.002,0.094-0.004c-11.23-13.304-42.711-12.603-50.188-11.147c-0.448,0.088-0.652,0.646-0.678,0.646h-0.228v3
h0.231C45.894,35.667,46.231,36.058,46.704,35.972z"/>
<path style="fill:#603813;" d="M46.635,107.742c-0.535,0-1-0.434-1-0.968V34.192c0-0.534,0.465-0.967,1-0.967
c0.534,0,1,0.433,1,0.967v72.582C47.635,107.31,47.169,107.742,46.635,107.742z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-60 -75 210 260">
<g fill="#D70751">
<path d="M64.525 62.053c-4.125.058.78 2.125 6.165 2.954 1.488-1.161 2.838-2.336 4.04-3.479-3.354.821-6.765.838-10.205.525m22.14-5.52c2.457-3.389 4.246-7.102 4.878-10.939-.551 2.736-2.035 5.099-3.435 7.592-7.711 4.854-.726-2.883-.004-5.824-8.29 10.436-1.138 6.257-1.439 9.171m8.174-21.265c.497-7.428-1.462-5.08-2.121-2.245.766.4 1.377 5.237 2.121 2.245M48.883-66.264c2.201.395 4.757.698 4.398 1.224 2.407-.528 2.954-1.015-4.398-1.224"/>
<path d="m53.281-65.04-1.556.32 1.448-.127.108-.193"/>
<path d="M121.93 38.085c.247 6.671-1.95 9.907-3.932 15.637l-3.564 1.781c-2.919 5.666.282 3.598-1.807 8.105-4.556 4.049-13.823 12.67-16.789 13.457-2.163-.047 1.469-2.554 1.943-3.537-6.097 4.188-4.894 6.285-14.217 8.83l-.273-.607C60.29 92.569 28.344 71.129 28.765 41.875c-.246 1.857-.698 1.393-1.208 2.144-1.186-15.052 6.952-30.17 20.675-36.343 13.427-6.646 29.163-3.918 38.78 5.044C81.73 5.8 71.217-1.534 58.757-.848c-12.208.193-23.625 7.95-27.436 16.369-6.253 3.938-6.979 15.177-9.704 17.233-3.665 26.943 6.896 38.583 24.762 52.275 2.812 1.896.792 2.184 1.173 3.627-5.936-2.779-11.372-6.976-15.841-12.114 2.372 3.473 4.931 6.847 8.239 9.499-5.596-1.897-13.074-13.563-15.256-14.038 9.647 17.274 39.142 30.295 54.587 23.836-7.146.263-16.226.146-24.256-2.822-3.371-1.734-7.958-5.331-7.14-6.003 21.079 7.875 42.854 5.965 61.09-8.655 4.641-3.614 9.709-9.761 11.173-9.846-2.206 3.317.377 1.596-1.318 4.523 4.625-7.456-2.008-3.035 4.779-12.877l2.507 3.453c-.931-6.188 7.687-13.704 6.813-23.492 1.975-2.994 2.206 3.22.107 10.107 2.912-7.64.767-8.867 1.516-15.171.81 2.118 1.867 4.37 2.412 6.606-1.895-7.382 1.948-12.433 2.898-16.724-.937-.415-2.928 3.264-3.383-5.457.065-3.788 1.054-1.985 1.435-2.917-.744-.427-2.694-3.33-3.88-8.9.86-1.308 2.3 3.393 3.47 3.586-.753-4.429-2.049-7.805-2.103-11.202-3.421-7.149-1.211.953-3.985-3.069-3.641-11.357 3.021-2.637 3.47-7.796 5.52 7.995 8.667 20.387 10.11 25.519-1.103-6.258-2.883-12.32-5.058-18.185 1.677.705-2.699-12.875 2.18-3.882-5.21-19.172-22.302-37.087-38.025-45.493 1.924 1.76 4.354 3.971 3.481 4.317-7.819-4.656-6.444-5.018-7.565-6.985-6.369-2.591-6.788.208-11.007.004-12.005-6.368-14.318-5.69-25.368-9.681l.502 2.349c-7.953-2.649-9.265 1.005-17.862.009-.523-.409 2.753-1.479 5.452-1.871-7.69 1.015-7.329-1.515-14.854.279 1.855-1.301 3.815-2.162 5.793-3.269-6.271.381-14.971 3.649-12.286.677C20.144-62.46 1.976-56.053-8.218-46.494l-.321-2.142c-4.672 5.608-20.371 16.748-21.622 24.011l-1.249.291c-2.431 4.116-4.004 8.781-5.932 13.016-3.18 5.417-4.661 2.085-4.208 2.934-6.253 12.679-9.359 23.332-12.043 32.069 1.912 2.858.046 17.206.769 28.688-3.141 56.709 39.8 111.77 86.737 124.48 6.88 2.459 17.11 2.364 25.813 2.618-10.268-2.937-11.595-1.556-21.595-5.044-7.215-3.398-8.797-7.277-13.907-11.711l2.022 3.573c-10.021-3.547-5.829-4.39-13.982-6.972l2.16-2.82c-3.249-.246-8.604-5.475-10.069-8.371l-3.553.14c-4.27-5.269-6.545-9.063-6.379-12.005l-1.148 2.047c-1.301-2.235-15.709-19.759-8.234-15.679-1.389-1.271-3.235-2.067-5.237-5.703l1.522-1.739c-3.597-4.627-6.621-10.562-6.391-12.536 1.919 2.592 3.25 3.075 4.568 3.52-9.083-22.539-9.593-1.242-16.474-22.942l1.456-.116c-1.116-1.682-1.793-3.506-2.69-5.298l.633-6.313c-6.541-7.562-1.829-32.151-.887-45.637.655-5.485 5.459-11.322 9.114-20.477l-2.227-.384C-27.316-2.419-7.271-24.81 2.011-23.658c4.499-5.649-.892-.02-1.772-1.443 9.878-10.223 12.984-7.222 19.65-9.061 7.19-4.268-6.17 1.664-2.761-1.628 12.427-3.174 8.808-7.216 25.021-8.828 1.71.973-3.969 1.503-5.395 2.766 10.354-5.066 32.769-3.914 47.326 2.811 16.895 7.896 35.873 31.232 36.622 53.189l.852.229c-.431 8.729 1.336 18.822-1.727 28.094l2.1-4.385"/>
<path d="m19.5 67.715-.578 2.893c2.71 3.683 4.861 7.673 8.323 10.552-2.49-4.863-4.341-6.872-7.745-13.445m6.409-.251c-1.435-1.587-2.284-3.497-3.235-5.4.909 3.345 2.771 6.219 4.504 9.143l-1.269-3.743m113.411-24.65-.605 1.52c-1.111 7.892-3.511 15.701-7.189 22.941 4.06-7.639 6.69-15.995 7.79-24.461M49.698-68.243c2.789-1.022 6.855-.56 9.814-1.233-3.855.324-7.693.517-11.484 1.005l1.67.228m-97.917 52.067c.642 5.951-4.477 8.26 1.134 4.337 3.007-6.773-1.175-1.87-1.134-4.337m-6.593 27.538c1.292-3.967 1.526-6.349 2.02-8.645-3.571 4.566-1.643 5.539-2.02 8.645"/>
</g>
</svg>
docs/images/duniterpy_logo.png

36.1 KiB

docs/images/mkdocs-material-favicon.png

8.17 KiB

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 448.17 560"><defs><style>.cls-1{isolation:isolate;}.cls-2{fill:url(#radial-gradient);}.cls-3{fill:url(#radial-gradient-2);}.cls-4,.cls-5,.cls-6{mix-blend-mode:multiply;}.cls-4{fill:url(#linear-gradient);}.cls-5{fill:url(#linear-gradient-2);}.cls-6{fill:url(#linear-gradient-3);}.cls-7{mix-blend-mode:screen;fill:url(#radial-gradient-3);}</style><radialGradient id="radial-gradient" cx="438.3" cy="639.01" r="569.94" gradientTransform="translate(0 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6877ec"/><stop offset="0.6" stop-color="#5362cf"/><stop offset="1" stop-color="#4352b9"/></radialGradient><radialGradient id="radial-gradient-2" cx="65.64" cy="-16.21" r="746.46" gradientTransform="translate(0 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#00d5ff"/><stop offset="0.38" stop-color="#00b8eb"/><stop offset="1" stop-color="#0080c5"/></radialGradient><linearGradient id="linear-gradient" x1="74.77" y1="67.3" x2="277.23" y2="512.72" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#294ca7"/><stop offset="0.48" stop-color="#96a7d4"/><stop offset="0.84" stop-color="#e1e6f3"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="linear-gradient-2" x1="-228.74" y1="-144.29" x2="451" y2="651.89" gradientTransform="translate(0 0)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#6877ec"/><stop offset="0.29" stop-color="#97a1f2"/><stop offset="0.77" stop-color="#e2e4fb"/><stop offset="1" stop-color="#fff"/></linearGradient><linearGradient id="linear-gradient-3" x1="-151.22" y1="-285.9" x2="450.08" y2="430.63" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#8397cc"/><stop offset="0.15" stop-color="#97a8d4"/><stop offset="0.73" stop-color="#e2e6f3"/><stop offset="1" stop-color="#fff"/></linearGradient><radialGradient id="radial-gradient-3" cx="259.68" cy="-34.71" r="431.37" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fff"/><stop offset="1"/></radialGradient></defs><title>logo-origami</title><g class="cls-1"><g id="Layer_1" data-name="Layer 1"><path class="cls-2" d="M168.08,560A570.54,570.54,0,0,0,459.84,403.59L56.25,0V448.17Z" transform="translate(-56.25)"/><path class="cls-3" d="M56.25,448.17C303.77,448.17,504.42,247.52,504.42,0H56.25Z" transform="translate(-56.25)"/><path class="cls-4" d="M56.25,448.17h0L73.5,465.42c121.57-4.45,231.4-55.68,312-136.23l-12.29-12.28A446.8,446.8,0,0,1,56.25,448.17Z" transform="translate(-56.25)"/><path class="cls-5" d="M168.08,560A570.54,570.54,0,0,0,459.84,403.59L56.25,0V448.17Z" transform="translate(-56.25)"/><path class="cls-6" d="M459.84,403.59,56.25,0,423.14,437.13C435.83,426.46,448.12,415.31,459.84,403.59Z" transform="translate(-56.25)"/><path class="cls-7" d="M56.25,0,373.16,316.91q4.23-4.25,8.35-8.6Z" transform="translate(-56.25)"/></g></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" height="2000" width="2000"><defs><clipPath id="a" clipPathUnits="userSpaceOnUse"><path d="M0 1500h1500V0H0z"/></clipPath></defs><g clip-path="url(#a)" transform="matrix(1.33333 0 0 -1.33333 0 2000)"><path d="M665.147 130.852L130.853 665.147c-46.863 46.862-46.863 122.842 0 169.705l534.294 534.295c46.863 46.864 122.843 46.864 169.706 0l534.294-534.294c46.863-46.863 46.863-122.843 0-169.706L834.853 130.852c-46.863-46.862-122.843-46.862-169.706 0" fill="#fab040"/><path d="M687.774 233.226L233.225 687.775c-34.366 34.366-34.366 90.085 0 124.45l454.55 454.55c34.365 34.366 90.084 34.366 124.45 0l454.55-454.55c34.365-34.365 34.365-90.084 0-124.45l-454.55-454.55c-34.366-34.365-90.085-34.365-124.45 0z" fill="none" stroke="#040521" stroke-width="34" stroke-miterlimit="10"/><path d="M784.672 763.286c12.096 0 23.74.893 34.943 2.688 11.194 1.785 21.053 5.26 29.569 10.416 8.504 5.145 15.34 12.432 20.496 21.84 5.144 9.408 7.726 21.724 7.726 36.96 0 15.225-2.582 27.552-7.726 36.96-5.156 9.408-11.992 16.684-20.496 21.84-8.516 5.145-18.375 8.62-29.57 10.416-11.202 1.785-22.846 2.688-34.942 2.688h-81.985V763.286zm28.895 225.792c30.009 0 55.544-4.368 76.609-13.104 21.05-8.736 38.187-20.275 51.406-34.608 13.209-14.343 22.85-30.692 28.897-49.056 6.048-18.375 9.072-37.412 9.072-57.12 0-19.268-3.024-38.2-9.072-56.784-6.047-18.596-15.688-35.06-28.897-49.392-13.22-14.343-30.355-25.872-51.406-34.608-21.065-8.736-46.6-13.104-76.61-13.104h-110.88V509.27H597.184v479.808z"/></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" width="247.808" height="185.85" viewBox="0 0 232.32 174.235"><path d="m276.515 367.463 15.556 5.662 15.785-5.745-15.555-5.662zm15.624-12.783 15.555 5.662 15.786-5.745-15.556-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 354.68 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 391.608 15.555 5.662 15.786-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 391.608 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 365.608 15.555 5.662 15.786-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M276.447 371.27v18.283l15.786-5.746v-18.282z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m260.892 365.608 15.555 5.662v18.283l-15.555-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.7 350.057-.025.03a2.783 2.783 0 0 0-2.758 2.782 2.783 2.783 0 0 0 .053.531l-11.746 14.385 7.646 9.363-3.869-9.363 9.984-12.228a2.783 2.783 0 0 0 .715.095 2.783 2.783 0 0 0 .715-.093l5.315 6.507 5.373 1.955-8.672-10.62a2.783 2.783 0 0 0 .05-.532 2.783 2.783 0 0 0-2.755-2.781l-.025-.031zm2.135-7.289a2.136 2.136 0 1 0-4.271 0v3.265a2.136 2.136 0 0 0 4.271 0v-3.265zm-.98-.002v3.265a1.155 1.155 0 0 1-2.31 0v-3.265a1.154 1.154 0 1 1 2.31 0zm.98-11.211a2.136 2.136 0 1 0-4.271 0v3.265a2.136 2.136 0 0 0 4.271 0v-3.265zm-.98-.002v3.265a1.155 1.155 0 0 1-2.31 0v-3.265a1.154 1.154 0 1 1 2.31 0z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M277.22 335.545v6.498a.518.518 0 1 1-1.04 0v-6.498a.518.518 0 1 1 1.04 0zm0 11.213v6.497a.518.518 0 1 1-1.04 0v-6.497a.518.518 0 1 1 1.04 0zm0-22.463v6.498a.518.518 0 1 1-1.04 0v-6.498a.518.518 0 1 1 1.04 0z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="m276.515 397.29 15.556 5.661v18.283l-15.556-5.662z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.515 378.826 15.556 5.661 15.785-5.745-15.555-5.662z" style="fill:#f7f7f4;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m276.515 378.826 15.556 5.661v18.283l-15.556-5.661z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 391.589v18.283l15.786-5.746v-18.282z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 397.27v18.283l15.787-5.746v-18.282z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M351.866 401.728a2.617 3.737 35 0 1-3.032 4.33 2.617 3.737 35 0 1-3.032-2.123 2.617 3.737 35 0 1 3.032-4.33 2.617 3.737 35 0 1 3.032 2.123z" style="fill:#fff;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M323.318 402.952v18.282l15.785-5.745v-18.283z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M307.694 408.633v18.282l15.786-5.745v-18.283z" style="fill:#fff;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 402.971 15.555 5.662v18.282l-15.555-5.661z" style="fill:#efeeea;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 373.125v18.283l15.786-5.746V367.38z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m339.009 349 15.555 5.661 15.786-5.745-15.556-5.662z" style="fill:#ffc91d;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M354.564 354.661v18.283l15.786-5.746v-18.282zm-15.624 24.145v18.283l15.787-5.745V373.06z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 360.342v18.283l15.787-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m323.385 336.217 15.556 5.661 15.785-5.745-15.555-5.662z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M338.94 341.878v18.283l15.787-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 384.488v18.282l15.785-5.745v-18.283z" style="fill:#ffd242;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 366.024v18.282l15.785-5.745v-18.283zm-15.624 24.145v18.282l15.786-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 384.507 15.555 5.662v18.282l-15.555-5.661zm0-18.464 15.555 5.662 15.786-5.746-15.556-5.661z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M307.694 371.705v18.282l15.786-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m292.139 366.043 15.555 5.662v18.282l-15.555-5.661zm15.623-24.145 15.556 5.662 15.785-5.746-15.555-5.662z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M323.318 347.56v18.282l15.785-5.745v-18.283z" style="fill:#3775a9;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="m307.762 341.898 15.556 5.662v18.282l-15.556-5.661z" style="fill:#2f6491;fill-opacity:1;stroke:#ccc;stroke-width:.35507631;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none" transform="translate(-260.714 -252.848)"/><path d="M332.242 353.432a2.617 3.737 35 0 1-3.032 4.33 2.617 3.737 35 0 1-3.031-2.123 2.617 3.737 35 0 1 3.031-4.33 2.617 3.737 35 0 1 3.032 2.123z" style="fill:#fff;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M297.375 291.705c0-9.645-2.75-14.596-8.25-14.868a15.497 15.497 0 0 0-6.404 1.053c-1.66.594-2.776 1.181-3.364 1.775v23.022c3.519 2.208 6.643 3.234 9.368 3.073 5.765-.381 8.65-5.062 8.65-14.055zm6.785.4c0 4.9-1.149 8.968-3.46 12.202-2.576 3.66-6.146 5.546-10.71 5.649-3.441.11-6.985-.968-10.633-3.228v20.923l-5.9-2.104v-46.444c.968-1.187 2.214-2.207 3.725-3.073 3.512-2.046 7.779-3.098 12.801-3.15l.084.084c4.59-.058 8.128 1.827 10.614 5.649 2.317 3.505 3.48 7.998 3.48 13.492zm36.063 13.732c0 6.572-.659 11.123-1.976 13.654-1.323 2.53-3.84 4.552-7.56 6.056-3.014 1.188-6.275 1.833-9.774 1.943l-.974-3.719c3.557-.484 6.062-.968 7.514-1.452 2.86-.969 4.823-2.453 5.9-4.442.866-1.62 1.292-4.713 1.292-9.29v-1.536a30.317 30.317 0 0 1-12.686 2.744c-2.905 0-5.468-.91-7.676-2.744-2.479-1.995-3.718-4.526-3.718-7.592V274.9l5.9-2.021v24.72c0 2.64.852 4.673 2.557 6.1 1.704 1.427 3.912 2.111 6.617 2.06 2.705-.059 5.604-1.104 8.683-3.15v-28.84h5.9v32.067zm23.034 3.796c-.704.058-1.35.084-1.943.084-3.338 0-5.94-.794-7.799-2.389-1.853-1.594-2.782-3.796-2.782-6.604v-23.241h-4.042v-3.712h4.042v-9.858l5.894-2.098v11.956h6.63v3.712h-6.63v23.08c0 2.214.594 3.783 1.782 4.7 1.02.755 2.64 1.187 4.848 1.297v3.073zm35.727-.484h-5.9v-22.776c0-2.318-.543-4.313-1.621-5.978-1.246-1.885-2.976-2.828-5.197-2.828-2.705 0-6.088 1.427-10.149 4.28v27.302h-5.9v-54.442l5.9-1.86v24.797c3.77-2.743 7.89-4.118 12.363-4.118 3.125 0 5.655 1.052 7.592 3.15 1.943 2.098 2.912 4.713 2.912 7.837v24.636zm31.362-18.373c0-3.706-.703-6.766-2.104-9.187-1.666-2.95-4.255-4.506-7.754-4.668-6.469.375-9.697 5.01-9.697 13.893 0 4.074.672 7.476 2.028 10.207 1.73 3.48 4.325 5.197 7.785 5.139 6.495-.052 9.742-5.178 9.742-15.384zm6.463.038c0 5.275-1.35 9.665-4.042 13.17-2.963 3.925-7.056 5.894-12.279 5.894-5.177 0-9.212-1.969-12.124-5.894-2.64-3.505-3.957-7.895-3.957-13.17 0-4.958 1.426-9.128 4.28-12.524 3.015-3.602 6.979-5.41 11.879-5.41 4.9 0 8.89 1.808 11.962 5.41 2.854 3.396 4.28 7.566 4.28 12.524zm33.828 18.335h-5.9v-24.067c0-2.64-.795-4.7-2.383-6.185-1.588-1.479-3.705-2.195-6.346-2.137-2.802.052-5.468.968-7.999 2.744v29.645h-5.9v-30.375c3.396-2.472 6.52-4.086 9.374-4.842 2.692-.703 5.067-1.052 7.114-1.052 1.4 0 2.718.136 3.957.407 2.318.536 4.203 1.53 5.656 2.989 1.62 1.614 2.427 3.55 2.427 5.816v27.057z" style="fill:#646464;fill-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M482.106 267.276h1.014v-6.358h2.401v-.758h-5.817v.758h2.402v6.358m4.314 0h.866v-5.807l1.88 5.806h.964l1.96-5.786v5.787h.944v-7.116h-1.25l-2.14 6.096-1.826-6.096h-1.398v7.116" style="font-style:normal;font-weight:400;font-size:15.16445827px;line-height:125%;font-family:&quot;Bitstream Vera Sans&quot;;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="translate(-260.714 -252.848)"/><path d="M381.321 335.579h2.988v-6.183h2.68c3.632 0 6.414-1.726 6.414-5.461 0-3.916-2.73-5.204-6.415-5.204h-5.667v16.848zm2.988-8.579v-5.873h2.448c2.447 0 3.71.695 3.71 2.808 0 2.06-1.212 3.065-3.71 3.065h-2.448zm10.503 5.178c0 2.216 1.546 3.71 3.761 3.71 1.494 0 2.782-.747 3.916-1.7h.077l.232 1.39h2.421v-7.496c0-3.53-1.545-5.461-4.714-5.461-2.01 0-3.787.773-5.178 1.648l1.082 1.984c1.108-.67 2.293-1.236 3.555-1.236 1.7 0 2.267 1.133 2.293 2.473-5.178.566-7.445 1.983-7.445 4.688zm2.885-.232c0-1.262 1.134-2.164 4.56-2.602v2.834c-.928.876-1.726 1.391-2.757 1.391-1.056 0-1.803-.49-1.803-1.623zm10.316-2.679c0 4.2 2.653 6.62 6.105 6.62 1.443 0 2.963-.566 4.148-1.622l-1.237-1.88c-.695.566-1.571 1.081-2.602 1.081-1.983 0-3.374-1.674-3.374-4.199 0-2.55 1.416-4.225 3.452-4.225.798 0 1.468.335 2.138.928l1.417-1.88c-.85-.825-2.087-1.47-3.71-1.47-3.375 0-6.337 2.422-6.337 6.647zm12.749 6.312h2.91v-3.22l1.984-2.268 3.246 5.488h3.22l-4.765-7.497 4.328-5.152h-3.246l-4.689 5.822h-.077v-11.36h-2.911v18.187zm12.641-3.401c0 2.216 1.546 3.71 3.761 3.71 1.495 0 2.783-.747 3.916-1.7h.077l.232 1.39h2.422v-7.496c0-3.53-1.546-5.461-4.715-5.461-2.009 0-3.786.773-5.178 1.648l1.082 1.984c1.108-.67 2.293-1.236 3.555-1.236 1.7 0 2.267 1.133 2.293 2.473-5.178.566-7.445 1.983-7.445 4.688zm2.886-.232c0-1.262 1.133-2.164 4.56-2.602v2.834c-.928.876-1.727 1.391-2.757 1.391-1.056 0-1.803-.49-1.803-1.623zm12.763 5.487c0-.592.309-1.159.979-1.674.489.129 1.03.18 1.725.18h1.726c1.443 0 2.242.284 2.242 1.263 0 1.082-1.391 2.035-3.427 2.035-2.009 0-3.245-.67-3.245-1.804zm-2.474.438c0 2.216 2.242 3.298 5.256 3.298 4.122 0 6.75-1.958 6.75-4.457 0-2.19-1.598-3.117-4.638-3.117h-2.241c-1.546 0-2.06-.438-2.06-1.16 0-.566.231-.875.617-1.21a4.665 4.665 0 0 0 1.726.335c2.68 0 4.792-1.494 4.792-4.302 0-.876-.31-1.649-.721-2.138h2.318v-2.19h-4.534a5.7 5.7 0 0 0-1.855-.31c-2.653 0-4.997 1.624-4.997 4.535 0 1.494.798 2.705 1.648 3.349v.103c-.72.515-1.39 1.365-1.39 2.344 0 1.03.489 1.7 1.133 2.112v.103c-1.16.722-1.804 1.65-1.804 2.705zm5.41-8.166c-1.236 0-2.215-.927-2.215-2.55 0-1.597.979-2.5 2.215-2.5 1.237 0 2.19.928 2.19 2.5 0 1.623-.979 2.55-2.19 2.55zm7.597-.438c0 4.173 2.731 6.62 6.235 6.62 1.597 0 3.117-.566 4.328-1.365l-1.005-1.854c-.927.592-1.855.927-2.937.927-2.035 0-3.478-1.288-3.735-3.58h8.037c.077-.31.13-.825.13-1.392 0-3.53-1.804-6.002-5.23-6.002-2.963 0-5.823 2.524-5.823 6.646zm2.86-1.133c.258-2.113 1.546-3.22 3.04-3.22 1.726 0 2.576 1.21 2.576 3.22h-5.616zm-81.124 33.721h2.988v-16.848h-2.988v16.848zm6.988 0h2.962v-8.836c1.056-1.03 1.778-1.572 2.885-1.572 1.392 0 1.984.773 1.984 2.86v7.548h2.963v-7.935c0-3.194-1.185-5.023-3.89-5.023-1.726 0-3.014.901-4.148 2.01h-.103l-.206-1.701h-2.447v12.649zm13.667-6.312c0 4.173 2.035 6.62 5.204 6.62 1.365 0 2.653-.746 3.58-1.674h.104l.206 1.366h2.447v-18.188h-2.962v4.586l.103 2.035c-.98-.85-1.88-1.391-3.323-1.391-2.757 0-5.359 2.524-5.359 6.646zm3.066-.026c0-2.653 1.314-4.173 2.937-4.173.85 0 1.7.283 2.576 1.056v5.9c-.85.979-1.675 1.416-2.654 1.416-1.829 0-2.86-1.468-2.86-4.199zm11.424.026c0 4.173 2.73 6.62 6.234 6.62 1.597 0 3.117-.566 4.328-1.365l-1.005-1.854c-.927.592-1.855.927-2.937.927-2.035 0-3.477-1.288-3.735-3.58h8.037c.078-.31.13-.825.13-1.392 0-3.53-1.804-6.002-5.23-6.002-2.963 0-5.822 2.524-5.822 6.646zm2.86-1.133c.257-2.113 1.545-3.22 3.039-3.22 1.726 0 2.576 1.21 2.576 3.22h-5.616zm9.224 7.445h3.091l1.34-2.5c.36-.772.747-1.52 1.108-2.24h.103c.438.72.876 1.494 1.288 2.24l1.546 2.5h3.194l-4.019-6.26 3.736-6.39h-3.066l-1.21 2.397c-.31.695-.67 1.442-.98 2.138h-.103a87.248 87.248 0 0 1-1.16-2.138l-1.416-2.396h-3.194l3.76 6.054-4.018 6.595z" style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:medium;line-height:125%;font-family:&quot;Source Sans Pro&quot;;-inkscape-font-specification:&quot;Source Sans Pro Semi-Bold&quot;;letter-spacing:0;word-spacing:0;fill:#646464;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" transform="translate(-260.714 -252.848)"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="1500" height="1500" viewBox="0, 0, 1500, 1500">
<g id="pytest_logo">
<g id="graphics">
<path d="M521.576,213.75 L952.616,213.75 C964.283,213.75 973.741,223.208 973.741,234.875 L973.741,234.875 C973.741,246.542 964.283,256 952.616,256 L521.576,256 C509.909,256 500.451,246.542 500.451,234.875 L500.451,234.875 C500.451,223.208 509.909,213.75 521.576,213.75 z" fill="#696969" id="horizontal_bar"/>
<g id="top_bars">
<path d="M525.333,171 L612,171 L612,191 L525.333,191 L525.333,171 z" fill="#009FE3"/>
<path d="M638.667,171 L725.333,171 L725.333,191 L638.667,191 L638.667,171 z" fill="#C7D302"/>
<path d="M750.5,171 L837.167,171 L837.167,191 L750.5,191 L750.5,171 z" fill="#F07E16"/>
<path d="M861.861,171 L948.528,171 L948.528,191 L861.861,191 L861.861,171 z" fill="#DF2815"/>
</g>
<g id="bottom_bars">
<path d="M861.861,278 L948.528,278 L948.528,424.5 L861.861,424.5 L861.861,278 z" fill="#DF2815"/>
<path d="M750.5,278 L837.328,278 L837.328,516 L750.5,516 L750.5,278 z" fill="#F07E16"/>
<path d="M638.667,278 L725.328,278 L725.328,634.5 L638.667,634.5 L638.667,278 z" fill="#C7D302"/>
<path d="M525.333,278 L612,278 L612,712.5 L525.333,712.5 L525.333,278 z" fill="#009FE3"/>
</g>
</g>
<g id="pytest">
<path d="M252.959,1173.846 Q240.139,1173.846 229.71,1171.021 Q219.28,1168.196 210.914,1163.525 Q202.549,1158.853 196.139,1152.552 Q189.729,1146.25 184.732,1139.297 L182.124,1139.297 Q182.776,1146.685 183.428,1153.421 Q183.862,1159.07 184.297,1165.046 Q184.732,1171.021 184.732,1174.498 L184.732,1276.404 L145.186,1276.404 L145.186,930.921 L177.344,930.921 L182.993,963.079 L184.732,963.079 Q189.729,955.474 196.03,948.847 Q202.332,942.22 210.697,937.331 Q219.063,932.442 229.492,929.509 Q239.922,926.575 252.959,926.575 Q273.384,926.575 290.115,934.397 Q306.846,942.22 318.688,957.756 Q330.53,973.292 337.048,996.324 Q343.567,1019.356 343.567,1049.776 Q343.567,1080.413 337.048,1103.554 Q330.53,1126.695 318.688,1142.339 Q306.846,1157.984 290.115,1165.915 Q273.384,1173.846 252.959,1173.846 z M245.354,959.385 Q228.84,959.385 217.433,964.383 Q206.025,969.38 198.964,979.593 Q191.902,989.805 188.534,1005.015 Q185.166,1020.225 184.732,1040.867 L184.732,1049.776 Q184.732,1071.722 187.665,1088.779 Q190.598,1105.835 197.66,1117.46 Q204.722,1129.085 216.455,1135.06 Q228.189,1141.036 245.789,1141.036 Q275.122,1141.036 288.92,1117.352 Q302.717,1093.667 302.717,1049.341 Q302.717,1004.146 288.92,981.766 Q275.122,959.385 245.354,959.385 z" fill="#696969"/>
<path d="M370.293,930.921 L411.36,930.921 L458.076,1064.117 Q461.118,1072.808 464.269,1082.369 Q467.42,1091.929 470.136,1101.49 Q472.852,1111.05 474.807,1119.959 Q476.763,1128.868 477.632,1136.473 L478.936,1136.473 Q480.022,1131.041 482.412,1121.697 Q484.802,1112.354 487.736,1101.816 Q490.669,1091.277 493.82,1081.065 Q496.97,1070.853 499.36,1063.682 L542.6,930.921 L583.45,930.921 L489.148,1200.572 Q483.064,1218.172 476.002,1232.187 Q468.941,1246.202 459.597,1255.979 Q450.254,1265.757 437.651,1271.081 Q425.049,1276.404 407.666,1276.404 Q396.367,1276.404 388.11,1275.209 Q379.854,1274.014 373.987,1272.71 L373.987,1241.204 Q378.55,1242.291 385.503,1243.051 Q392.456,1243.812 400.061,1243.812 Q410.491,1243.812 418.096,1241.313 Q425.701,1238.814 431.35,1234.034 Q437,1229.253 441.019,1222.3 Q445.039,1215.347 448.298,1206.438 L460.684,1171.673 z" fill="#696969"/>
<path d="M695.568,1141.47 Q699.479,1141.47 704.368,1141.036 Q709.257,1140.601 713.82,1139.949 Q718.383,1139.297 722.186,1138.428 Q725.988,1137.559 727.944,1136.907 L727.944,1166.893 Q725.119,1168.196 720.773,1169.5 Q716.428,1170.804 711.213,1171.781 Q705.998,1172.759 700.349,1173.302 Q694.699,1173.846 689.267,1173.846 Q675.795,1173.846 664.279,1170.369 Q652.763,1166.893 644.398,1158.418 Q636.032,1149.944 631.252,1135.495 Q626.472,1121.045 626.472,1099.1 L626.472,960.689 L592.792,960.689 L592.792,943.089 L626.472,926.141 L643.42,876.165 L666.235,876.165 L666.235,930.921 L726.206,930.921 L726.206,960.689 L666.235,960.689 L666.235,1099.1 Q666.235,1120.176 673.079,1130.823 Q679.924,1141.47 695.568,1141.47 z" fill="#009FE3"/>
<path d="M868.527,1173.846 Q844.626,1173.846 824.853,1165.806 Q805.08,1157.767 790.848,1142.339 Q776.616,1126.912 768.793,1104.097 Q760.971,1081.282 760.971,1051.949 Q760.971,1022.398 768.142,999.148 Q775.312,975.899 788.349,959.711 Q801.386,943.523 819.529,935.049 Q837.673,926.575 859.619,926.575 Q881.13,926.575 898.295,934.289 Q915.461,942.002 927.412,956.017 Q939.362,970.032 945.772,989.697 Q952.182,1009.361 952.182,1033.262 L952.182,1057.815 L801.821,1057.815 Q802.907,1099.751 819.529,1119.524 Q836.152,1139.297 868.962,1139.297 Q880.043,1139.297 889.495,1138.211 Q898.947,1137.125 907.747,1135.06 Q916.547,1132.996 924.804,1129.845 Q933.061,1126.695 941.535,1122.784 L941.535,1157.984 Q932.844,1162.112 924.478,1165.154 Q916.113,1168.196 907.313,1170.152 Q898.513,1172.107 889.061,1172.977 Q879.609,1173.846 868.527,1173.846 z M858.749,959.385 Q833.979,959.385 819.529,976.333 Q805.08,993.282 802.69,1025.657 L909.594,1025.657 Q909.594,1010.882 906.661,998.605 Q903.727,986.329 897.535,977.637 Q891.342,968.946 881.782,964.166 Q872.221,959.385 858.749,959.385 z" fill="#009FE3"/>
<path d="M1155.126,1104.097 Q1155.126,1121.48 1148.825,1134.517 Q1142.524,1147.554 1130.682,1156.354 Q1118.84,1165.154 1102.109,1169.5 Q1085.378,1173.846 1064.518,1173.846 Q1040.834,1173.846 1023.886,1170.043 Q1006.938,1166.241 994.118,1158.853 L994.118,1122.784 Q1000.854,1126.26 1009.111,1129.628 Q1017.368,1132.996 1026.494,1135.604 Q1035.62,1138.211 1045.289,1139.841 Q1054.958,1141.47 1064.518,1141.47 Q1078.642,1141.47 1088.528,1139.08 Q1098.415,1136.69 1104.608,1132.236 Q1110.8,1127.781 1113.625,1121.371 Q1116.45,1114.961 1116.45,1107.139 Q1116.45,1100.403 1114.277,1094.971 Q1112.104,1089.539 1106.346,1084.216 Q1100.588,1078.892 1090.593,1073.46 Q1080.598,1068.028 1064.953,1061.292 Q1049.308,1054.556 1036.815,1048.038 Q1024.321,1041.519 1015.629,1033.479 Q1006.938,1025.44 1002.266,1014.902 Q997.595,1004.363 997.595,989.805 Q997.595,974.595 1003.57,962.753 Q1009.545,950.911 1020.41,942.872 Q1031.274,934.832 1046.484,930.704 Q1061.694,926.575 1080.38,926.575 Q1101.457,926.575 1118.948,931.138 Q1136.44,935.701 1152.084,943.089 L1138.395,975.03 Q1124.272,968.729 1109.388,964.057 Q1094.504,959.385 1079.077,959.385 Q1056.913,959.385 1046.266,966.664 Q1035.62,973.943 1035.62,987.415 Q1035.62,995.02 1038.118,1000.669 Q1040.617,1006.319 1046.701,1011.316 Q1052.785,1016.314 1062.997,1021.42 Q1073.21,1026.526 1088.42,1032.828 Q1104.064,1039.346 1116.341,1045.865 Q1128.618,1052.383 1137.309,1060.531 Q1146,1068.68 1150.563,1079.109 Q1155.126,1089.539 1155.126,1104.097 z" fill="#009FE3"/>
<path d="M1285.28,1141.47 Q1289.191,1141.47 1294.08,1141.036 Q1298.969,1140.601 1303.532,1139.949 Q1308.095,1139.297 1311.898,1138.428 Q1315.7,1137.559 1317.656,1136.907 L1317.656,1166.893 Q1314.831,1168.196 1310.485,1169.5 Q1306.14,1170.804 1300.925,1171.781 Q1295.71,1172.759 1290.06,1173.302 Q1284.411,1173.846 1278.979,1173.846 Q1265.507,1173.846 1253.991,1170.369 Q1242.475,1166.893 1234.109,1158.418 Q1225.744,1149.944 1220.964,1135.495 Q1216.183,1121.045 1216.183,1099.1 L1216.183,960.689 L1182.504,960.689 L1182.504,943.089 L1216.183,926.141 L1233.132,876.165 L1255.947,876.165 L1255.947,930.921 L1315.917,930.921 L1315.917,960.689 L1255.947,960.689 L1255.947,1099.1 Q1255.947,1120.176 1262.791,1130.823 Q1269.636,1141.47 1285.28,1141.47 z" fill="#009FE3"/>
</g>
</g>
<script xmlns=""/></svg>
docs/images/silkaj_logo.png

207 KiB

<svg xmlns="http://www.w3.org/2000/svg" width="403" height="383" viewBox="0 0 402.7 382.7"><path d="M188.3 0.6c31.8-2.6 62.6 4 85.7 12.4 47.8 17.2 82.5 48.9 105.8 90.1 12 21.3 19.7 46.5 22.3 75.6 2.8 32.5-4.3 61-14 83.5 -10 23.2-22.8 42.6-39 58.8 -32.8 32.8-74.7 56.9-134.4 61.3 -31.7 2.3-61.8-4.1-85.5-12.6 -48-17.4-82.6-48-106.1-89.8 -12-21.4-19.9-46-22.5-75.3 -2.9-31.8 4.2-61.4 13.7-83.8 10.3-24.1 22.4-42.2 39-58.8C86.1 29.1 127.4 5.6 188.3 0.6zM114.7 32.7c-10.5 5.3-20.1 10.5-28.8 17C68.6 62.7 53.1 78.6 41 96.5c-5.9 8.7-11.2 19.1-15.7 30.2 -8.6 21.4-15.3 49-12.6 78.6 5 54.6 29.9 92.2 62.9 120.3 16.2 13.8 35.1 25.4 58.3 33.5 22.3 7.9 50.8 14 80.2 11.5 55.4-4.5 94.8-27.2 125.3-58 22-22.3 40-52.8 46.4-90.9 2.2-13.1 3.8-27.9 2.5-42.9C383.5 124.5 358.3 85.8 326 58c-15.9-13.7-35.8-25.7-58.2-33.5 -21.9-7.6-50.7-13.7-80.5-11.3C158.7 15.6 134.9 22.5 114.7 32.7z"/><path d="M197.1 28.3c25.6-1.2 51.1 5.4 69.8 13.2 38.6 16.1 67.3 43.6 85.2 80.2 13.3 27.3 20.3 67 12.1 104.4 -7.2 33.1-24.2 59.6-44.2 79.7 -28 28-65.9 46.2-116.8 48.6 -26.3 1.3-50.4-5.7-69.5-13.5 -19.9-8.1-36-19.3-50.3-32.4 -14.3-13.1-26.1-28.6-35.4-47.3 -13.3-26.6-21.3-68-12.4-104.7 8.1-33.2 23.7-58.6 44.5-79.4 13.6-13.5 29.9-24.9 48.9-33.8 18.5-8.6 41.4-15.1 67.6-15.1C196.7 28.3 196.9 28.3 197.1 28.3zM180.6 45.4c-40.2 5-67.3 23-90.1 45.9 -20.9 20.9-39.7 55.5-40.7 95.3 -1.1 44.7 14.6 76.4 34.6 100.8 17.3 21.2 41.9 38.4 72 47.3 4 1.2 10.4 3.8 13.7 3.3 2.9-0.4 6.1-5 8.8-7.7 14.5-14.3 27-27.8 40.9-41.8 6-6 11.2-11.5 16.5-16.8 11-11 22.2-22.4 26.9-39.3 2.6-9.4 3.3-20.1 1.4-29.7 -3-14.8-9.1-23.1-17.3-31.3 -1.8-1.8-5.6-6.9-8.5-6.9 -2.3 0.1-5.3 4.2-7.4 6.3 -7.2 7.2-13.6 14.2-20.3 20.9 -25.6 25.6-49.3 51-74.7 76.4 -2 2-5.2 6.1-7.7 6 -3.2-0.1-6.8-6.2-9.3-9.1 -9-10.3-16.4-22.1-21.7-34.3 -7.4-16.9-12.7-38.4-11-63.7 1.1-15.8 5.4-31.4 11-44 15.3-34.7 42.4-60.1 78.3-73.1 2.9-1.1 7.1-1.2 9.1-4.4C183 44.9 182 45.2 180.6 45.4zM283.4 316.6c17.8-11.9 32.9-26.4 44.2-44.8 14.7-24 26.9-56.7 22.3-95.1 -4.3-35.3-17.4-60-36.8-82.2 -13.4-15.3-31.1-28.6-51.4-37.6 -6.6-2.9-15.4-6.9-22.5-7.4 -2.5-0.2-8.2 6.5-10.7 9.1 -9.3 9.3-18.2 18.7-26.9 27.5 -11.2 11.3-25.8 25-36 36.8 -10.4 12.1-20 29.9-20.9 51.9 -0.7 17.7 4.1 32.2 11.8 42.6 1.7 2.3 6.6 8.7 9.9 8.5 2.7-0.1 5.6-4.8 7.4-6.6 2.7-2.7 4.4-4.3 7.1-7.1 30.8-31 61-63.2 92-94.2 2-2 4.9-5.5 7.1-5.5 3.5 0.1 9.5 7.4 11.5 9.3 23.9 22.7 44.8 57.5 39.3 105.8 -2.7 23.9-12.5 43.8-24.2 59.3 -10.5 14-23.8 25.6-38.2 34.9 -2.1 1.4-5.1 2.5-4.9 4.7C270.9 324.4 277.5 320.5 283.4 316.6z"/></svg>
docs/images/silkaj_website_screenshot.png

93.8 KiB