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

Target

Select target project
No results found
Show changes
Commits on Source (284)
Showing
with 1636 additions and 191 deletions
[flake8] [flake8]
max-line-length=120 max-line-length=120
exclude=lbmpy/plot.py exclude=src/lbmpy/plot.py
lbmpy/session.py src/lbmpy/session.py
ignore = W293 W503 W291 E741 ignore = W293 W503 W291 C901 E741
src/lbmpy/_version.py export-subst
__pycache__ __pycache__
.ipynb_checkpoints .ipynb_checkpoints
.coverage .coverage*
*.pyc *.pyc
*.vti *.vti
/build /build
/html_doc
/dist /dist
/*.egg-info *.egg-info
.cache .cache
_build _build
/.idea /.idea
.cache _local_tmp
_local_tmp **/.vscode
\ No newline at end of file **/pylintrc
*.bak
*.tmp
/tests/db
doc/bibtex.json
/db
/src/lbmpy/phasefield/simplex_projection.*.so
/src/lbmpy/phasefield/simplex_projection.c
# macOS
**/.DS_Store
*.uuid
# benchmark database
/tests/benchmark/db
\ No newline at end of file
stages: stages:
- pretest
- test - test
- nightly
- docs
- deploy - deploy
# -------------------------- Templates ------------------------------------------------------------------------------------
# -------------------------- Tests ------------------------------------------------------------------------------------ # Base configuration for jobs meant to run at every commit
.every-commit:
rules:
- if: $CI_PIPELINE_SOURCE != "schedule"
# Configuration for jobs meant to run on each commit to pycodegen/pystencils/master
.every-commit-master:
rules:
- if: '$CI_PIPELINE_SOURCE != "schedule" && $CI_PROJECT_PATH == "pycodegen/lbmpy" && $CI_COMMIT_BRANCH == "master"'
# Base configuration for jobs meant to run at a schedule
.scheduled:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
# -------------------------- Pre Tests --------------------------------------------------------------------------------
# Normal test - runs on every commit all but "long run" tests # Normal test - runs on every commit all but "long run" tests
tests-and-coverage: tests-and-coverage:
stage: test stage: pretest
except: extends: .every-commit
variables: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full:cupy12.3
- $ENABLE_NIGHTLY_BUILDS
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
script: script:
# - pip install sympy --upgrade
- export NUM_CORES=$(nproc --all) - export NUM_CORES=$(nproc --all)
- mkdir -p ~/.config/matplotlib - mkdir -p ~/.config/matplotlib
- echo "backend:template" > ~/.config/matplotlib/matplotlibrc - echo "backend:template" > ~/.config/matplotlib/matplotlibrc
- mkdir public - mkdir public
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. -m "not longrun" - env
- pip list
- py.test -v -n $NUM_CORES --cov-report html --cov-report xml --cov-report term --cov=. -m "not longrun" --junitxml=report.xml
- python3 -m coverage xml
tags: tags:
- docker - docker
- cuda11 - cuda11
- AVX - AVX
coverage: /Total coverage:\s\d+.\d+\%/
artifacts: artifacts:
when: always when: always
paths: paths:
- coverage_report - coverage_report
reports:
coverage_report:
coverage_format: cobertura
path: coverage.xml
junit: report.xml
# Nightly test - runs "long run" jobs only # Normal test with longruns
test-longrun: tests-and-coverage-with-longrun:
stage: test stage: test
only: when: manual
variables: allow_failure: true
- $ENABLE_NIGHTLY_BUILDS
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
script: script:
# - pip install sympy --upgrade
- export NUM_CORES=$(nproc --all) - export NUM_CORES=$(nproc --all)
- mkdir -p ~/.config/matplotlib - mkdir -p ~/.config/matplotlib
- echo "backend:template" > ~/.config/matplotlib/matplotlibrc - echo "backend:template" > ~/.config/matplotlib/matplotlibrc
- mkdir public
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. - env
- pip list
- py.test -v -n $NUM_CORES
tags: tags:
- docker - docker
- cuda11 - cuda11
- AVX - AVX
artifacts:
paths:
- coverage_report
# Minimal tests in windows environment minimal-conda:
minimal-windows: stage: pretest
stage: test extends: .every-commit
except: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/minimal_conda
variables:
- $ENABLE_NIGHTLY_BUILDS
tags:
- win
script: script:
- source /cygdrive/c/Users/build/Miniconda3/Scripts/activate
- source activate pystencils_dev
- env
- conda env list
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- python -c "import numpy" - pip install -e .
- python setup.py quicktest - python quicktest.py
tags:
- docker
ubuntu: # Linter for code formatting
flake8-lint:
stage: pretest
extends: .every-commit
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
script:
- flake8 src/lbmpy
tags:
- docker
- cuda11
# -------------------------- Tests -------------------------------------------------------------------------------------
# pipeline with latest python version
latest-python:
stage: test stage: test
except: extends: .every-commit
variables: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/latest_python
- $ENABLE_NIGHTLY_BUILDS before_script:
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/ubuntu - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
script: script:
- env
- pip list
- export NUM_CORES=$(nproc --all)
- mkdir -p ~/.config/matplotlib - mkdir -p ~/.config/matplotlib
- echo "backend:template" > ~/.config/matplotlib/matplotlibrc - echo "backend:template" > ~/.config/matplotlib/matplotlibrc
- pip3 install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - mkdir public
- pytest-3 -v -m "not longrun" - py.test -v -n $NUM_CORES -m "not longrun" --junitxml=report.xml
tags: tags:
- docker - docker
- cuda11 - AVX
artifacts:
when: always
reports:
junit: report.xml
minimal-conda: # Minimal tests in windows environment
#minimal-windows:
# stage: test
# except:
# variables:
# - $ENABLE_NIGHTLY_BUILDS
# tags:
# - win
# script:
# - export NUM_CORES=$(nproc --all)
# - export MPLBACKEND=Agg
# - source /cygdrive/c/Users/build/Miniconda3/Scripts/activate
# - source activate pystencils
# - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
# - python -c "import numpy"
# - pip install sympy==1.9
# - py.test -v -m "not (notebook or longrun)"
minimal-sympy-master:
stage: test stage: test
except: extends: .every-commit
variables:
- $ENABLE_NIGHTLY_BUILDS
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/minimal_conda image: i10git.cs.fau.de:5005/pycodegen/pycodegen/minimal_conda
before_script:
- pip install -e .
script: script:
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- python setup.py quicktest - python -m pip install --upgrade git+https://github.com/sympy/sympy.git
- pip list
- python quicktest.py
allow_failure: true
tags: tags:
- docker - docker
- cuda
pycodegen-integration: ubuntu:
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
stage: test stage: test
when: manual extends: .every-commit
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/ubuntu
before_script:
# - apt-get -y remove python3-sympy
- ln -s /usr/include/locale.h /usr/include/xlocale.h
# - pip3 install `grep -Eo 'sympy[>=]+[0-9\.]+' setup.py | sed 's/>/=/g'`
- pip3 install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
script: script:
# run lbmpy long test pipeline
- export NUM_CORES=$(nproc --all) - export NUM_CORES=$(nproc --all)
- mkdir -p ~/.config/matplotlib - mkdir -p ~/.config/matplotlib
- echo "backend:template" > ~/.config/matplotlib/matplotlibrc - echo "backend:template" > ~/.config/matplotlib/matplotlibrc
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - env
- py.test -v -n $NUM_CORES --cov-report html --cov-report term --cov=. - pip3 list
# change path to outside of lbmpy and call pip to set the environment variable right - pytest -v -n $NUM_CORES -m "not longrun" --junitxml=report.xml
- cd .. tags:
- pip install -e lbmpy - docker
# fetch pycodegen repository with waLberla as submodule and install waLBerla to run the integration tests - cuda11
artifacts:
when: always
reports:
junit: report.xml
pycodegen-integration:
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
stage: test
when: manual
allow_failure: true
script:
- env
- pip list
- git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pycodegen.git - git clone https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pycodegen.git
- cd pycodegen - cd pycodegen
- git submodule sync --recursive - git submodule sync --recursive
- git submodule update --init --recursive - git submodule update --init --recursive
- git submodule foreach git fetch origin # compare the latest master version! - git submodule foreach git fetch origin # compare the latest master version!
- git submodule foreach git reset --hard origin/master - git submodule foreach git reset --hard origin/master
- cd lbmpy
- git remote add test $CI_REPOSITORY_URL
- git fetch test
- git reset --hard $CI_COMMIT_SHA
- cd ..
- pip install -e pystencils/
- pip install -e lbmpy/
- ./install_walberla.sh - ./install_walberla.sh
# build all integration tests # build all integration tests
- cd walberla/build/ - cd walberla/build/
- make -j $NUM_CORES CodegenJacobiCPU CodegenJacobiGPU CodegenPoisson MicroBenchmarkGpuLbm LbCodeGenerationExample - make -j $NUM_CORES MicroBenchmarkGpuLbm LbCodeGenerationExample
- cd apps/benchmarks/UniformGridGPU - cd apps/benchmarks/UniformGridGPU
- make -j $NUM_CORES - make -j $NUM_CORES
- cd ../UniformGridGenerated - cd ../UniformGridCPU
- make -j $NUM_CORES - make -j $NUM_CORES
tags: tags:
- docker - docker
- cuda11 - cuda11
- AVX - AVX
# -------------------- Linter & Documentation -------------------------------------------------------------------------- # -------------------- Scheduled Tasks --------------------------------------------------------------------------
flake8-lint: nightly-sympy:
stage: test stage: nightly
except: extends: .scheduled
variables: image: i10git.cs.fau.de:5005/pycodegen/pycodegen/latest_python
- $ENABLE_NIGHTLY_BUILDS before_script:
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full - pip install -e .
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- pip install --upgrade --pre sympy
script: script:
- flake8 lbmpy - env
- pip list
- export NUM_CORES=$(nproc --all)
- mkdir -p ~/.config/matplotlib
- echo "backend:template" > ~/.config/matplotlib/matplotlibrc
- mkdir public
- pytest -v -n $NUM_CORES -m "not longrun" --junitxml=report.xml
tags: tags:
- docker - docker
- cuda11 - AVX
- cuda
artifacts:
when: always
reports:
junit: report.xml
# -------------------- Documentation and deploy ------------------------------------------------------------------------
build-documentation: build-documentation:
stage: test stage: docs
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full needs: []
extends: .every-commit
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/documentation
before_script:
- pip install -e .
script: script:
- export PYTHONPATH=`pwd` - export PYTHONPATH=`pwd`
- pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils - pip install git+https://gitlab-ci-token:${CI_JOB_TOKEN}@i10git.cs.fau.de/pycodegen/pystencils.git@master#egg=pystencils
- mkdir html_doc - mkdir html_doc
- sphinx-build -W -b html doc html_doc - sphinx-build -W -b html doc html_doc
tags: tags:
- docker - docker
- cuda11 - cuda11
...@@ -161,7 +270,9 @@ build-documentation: ...@@ -161,7 +270,9 @@ build-documentation:
pages: pages:
image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full image: i10git.cs.fau.de:5005/pycodegen/pycodegen/full
extends: .every-commit-master
stage: deploy stage: deploy
needs: ["tests-and-coverage", "build-documentation"]
script: script:
- ls -l - ls -l
- mv coverage_report html_doc - mv coverage_report html_doc
...@@ -171,5 +282,3 @@ pages: ...@@ -171,5 +282,3 @@ pages:
- public - public
tags: tags:
- docker - docker
only:
- master@pycodegen/lbmpy
Contributors:
-------------
- Martin Bauer <martin.bauer@fau.de>
- Markus Holzer <markus.holzer@fau.de>
- Michael Kuron <mkuron@icp.uni-stuttgart.de>
- Stephan Seitz <stephan.seitz@fau.de>
- Frederik Hennig <frederik.hennig@fau.de>
- Helen Schottenhamml <helen.schottenhamml@fau.de>
- Rudolf Weeber <weeber@icp.uni-stuttgart.de>
- Christian Godenschwager <christian.godenschwager@fau.de>
- Jan Hönig <jan.hoenig@fau.de>
# Change Log
## Unreleased
### Removed
* Removing OpenCL support because it is not supported by pystencils anymore
# Contributing
lbmpy is built on the open-source python framework [pystencils](https://pypi.org/project/pystencils/). Please consider the [contribution guideline](https://i10git.cs.fau.de/pycodegen/pystencils/-/blob/master/CONTRIBUTING.md) of pystencils for contributing to lbmpy.
\ No newline at end of file
include README.md include AUTHORS.txt
include COPYING.txt include CONTRIBUTING.md
include RELEASE-VERSION include CHANGELOG.md
...@@ -16,11 +16,12 @@ It even comes with an integrated Chapman Enskog analysis based on sympy! ...@@ -16,11 +16,12 @@ It even comes with an integrated Chapman Enskog analysis based on sympy!
Common test scenarios can be set up quickly: Common test scenarios can be set up quickly:
```python ```python
from lbmpy.scenarios import create_channel from pystencils import Target
from lbmpy.session import *
ch = create_channel(domain_size=(300,100, 100), force=1e-7, method="trt", ch = create_channel(domain_size=(300, 100, 100), force=1e-7, method=Method.TRT,
equilibrium_order=2, compressible=True, equilibrium_order=2, compressible=True,
relaxation_rates=[1.97, 1.6], optimization={'target': 'gpu'}) relaxation_rates=[1.97, 1.6], optimization={'target': Target.GPU})
``` ```
To find out more, check out the interactive [tutorial notebooks online with binder](https://mybinder.org/v2/gh/mabau/lbmpy/master?filepath=doc%2Fnotebooks). To find out more, check out the interactive [tutorial notebooks online with binder](https://mybinder.org/v2/gh/mabau/lbmpy/master?filepath=doc%2Fnotebooks).
...@@ -55,3 +56,28 @@ Documentation ...@@ -55,3 +56,28 @@ Documentation
Read the docs [here](http://pycodegen.pages.i10git.cs.fau.de/lbmpy) and Read the docs [here](http://pycodegen.pages.i10git.cs.fau.de/lbmpy) and
check out the Jupyter notebooks in `doc/notebooks`. check out the Jupyter notebooks in `doc/notebooks`.
Contributing
-------
To see how to open issues, submit bug reports, create feature requests or submit your additions to lbmpy please refer to
[contribution documentation](https://i10git.cs.fau.de/pycodegen/pystencils/-/blob/master/CONTRIBUTING.md) of pystencils since lbmpy is heavily build on pystencils.
Many thanks go to the [contributors](https://i10git.cs.fau.de/pycodegen/lbmpy/-/blob/master/AUTHORS.txt) of lbmpy.
### Please cite us
If you use lbmpy in a publication, please cite the following articles:
Overview:
- F. Hennig et al, Advanced Automatic Code Generation for Multiple Relaxation-Time Lattice Boltzmann Methods. SIAM Journal on Scientific Computing, 2023. https://doi.org/10.1137/22M1531348 ([Preprint](https://arxiv.org/abs/2211.02435))
- M. Bauer et al, lbmpy: Automatic code generation for efficient parallel lattice Boltzmann methods. Journal of Computational Science, 2021. https://doi.org/10.1016/j.jocs.2020.101269 ([Preprint](https://arxiv.org/abs/2001.11806))
Multiphase:
- M. Holzer et al, Highly efficient lattice Boltzmann multiphase simulations of immiscible fluids at high-density ratios on CPUs and GPUs through code generation. The International Journal of High Performance Computing Applications, 2021. https://doi.org/10.1177/10943420211016525
### Further Reading
- F. Hennig et al, Automatic Code Generation for the Cumulant Lattice Boltzmann Method. ICMMES, 2021. [Poster Link](https://www.researchgate.net/publication/353224406_Automatic_Code_Generation_for_the_Cumulant_Lattice_Boltzmann_Method)
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
# conda env create -f conda_environment_user.yml # conda env create -f conda_environment_user.yml
# . activate pystencils # . activate pystencils
# #
# If you have CUDA installed and want to use your GPU, uncomment the last line to install pycuda # If you have CUDA or ROCm installed and want to use your GPU, uncomment the last line to install cupy
# #
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
...@@ -33,4 +33,4 @@ dependencies: ...@@ -33,4 +33,4 @@ dependencies:
- pyevtk # VTK output for serial simulations - pyevtk # VTK output for serial simulations
- blitzdb # file-based No-SQL database to store simulation results - blitzdb # file-based No-SQL database to store simulation results
- pystencils - pystencils
#- pycuda # add this if you have CUDA installed #- cupy # add this if you have CUDA or ROCm installed
...@@ -4,6 +4,11 @@ import tempfile ...@@ -4,6 +4,11 @@ import tempfile
import runpy import runpy
import sys import sys
import warnings import warnings
import platform
import nbformat
from nbconvert import PythonExporter
import sympy
# Trigger config file reading / creation once - to avoid race conditions when multiple instances are creating it # Trigger config file reading / creation once - to avoid race conditions when multiple instances are creating it
# at the same time # at the same time
from pystencils.cpu import cpujit from pystencils.cpu import cpujit
...@@ -12,11 +17,12 @@ from pystencils.cpu import cpujit ...@@ -12,11 +17,12 @@ from pystencils.cpu import cpujit
# at the same time # at the same time
try: try:
import pyximport import pyximport
pyximport.install(language_level=3) pyximport.install(language_level=3)
from lbmpy.phasefield.simplex_projection import simplex_projection_2d # NOQA
except ImportError: except ImportError:
pass pass
from lbmpy.phasefield.simplex_projection import simplex_projection_2d # NOQA
SCRIPT_FOLDER = os.path.dirname(os.path.realpath(__file__)) SCRIPT_FOLDER = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.abspath('lbmpy')) sys.path.insert(0, os.path.abspath('lbmpy'))
...@@ -37,32 +43,35 @@ def add_path_to_ignore(path): ...@@ -37,32 +43,35 @@ def add_path_to_ignore(path):
collect_ignore = [os.path.join(SCRIPT_FOLDER, "doc", "conf.py"), collect_ignore = [os.path.join(SCRIPT_FOLDER, "doc", "conf.py"),
os.path.join(SCRIPT_FOLDER, "doc", "img", "mb_discretization", "maxwell_boltzmann_stencil_plot.py")] os.path.join(SCRIPT_FOLDER, "doc", "img", "mb_discretization", "maxwell_boltzmann_stencil_plot.py")]
add_path_to_ignore('pystencils_tests/benchmark')
add_path_to_ignore('_local_tmp') add_path_to_ignore('_local_tmp')
try: try:
import pycuda import cupy
except ImportError: except ImportError:
collect_ignore += [os.path.join(SCRIPT_FOLDER, "lbmpy_tests/test_cpu_gpu_equivalence.py")] collect_ignore += [os.path.join(SCRIPT_FOLDER, "tests/test_cpu_gpu_equivalence.py")]
try: try:
import waLBerla import waLBerla
except ImportError: except ImportError:
collect_ignore += [os.path.join(SCRIPT_FOLDER, "lbmpy_tests/test_serial_scenarios.py")] collect_ignore += [os.path.join(SCRIPT_FOLDER, "tests/test_datahandling_parallel.py")]
collect_ignore += [os.path.join(SCRIPT_FOLDER, "lbmpy_tests/test_datahandling_parallel.py")]
try: try:
import blitzdb import blitzdb
except ImportError: except ImportError:
collect_ignore += [os.path.join(SCRIPT_FOLDER, "lbmpy_tests/benchmark"), collect_ignore += [os.path.join(SCRIPT_FOLDER, "tests/benchmark"),
os.path.join(SCRIPT_FOLDER, "lbmpy_tests/full_scenarios/kida_vortex_flow/scenario_kida_vortex_flow.py")] os.path.join(SCRIPT_FOLDER,
"tests/full_scenarios/kida_vortex_flow/scenario_kida_vortex_flow.py"),
os.path.join(SCRIPT_FOLDER, "tests/full_scenarios/shear_wave/scenario_shear_wave.py"),
os.path.join(SCRIPT_FOLDER, "tests/test_json_serializer.py"),
os.path.join(SCRIPT_FOLDER, "src/lbmpy/db.py")]
if platform.system().lower() == 'windows':
collect_ignore += [os.path.join(SCRIPT_FOLDER, "tests/test_quicktests.py")]
import sympy
sver = sympy.__version__.split(".") sver = sympy.__version__.split(".")
if (int(sver[0]) == 1 and int(sver[1]) < 2): if int(sver[0]) == 1 and int(sver[1]) < 2:
add_path_to_ignore('lbmpy_tests/phasefield') add_path_to_ignore('tests/phasefield')
collect_ignore += [os.path.join(SCRIPT_FOLDER, "lbmpy_tests/test_n_phase_boyer_noncoupled.ipynb")] collect_ignore += [os.path.join(SCRIPT_FOLDER, "tests/test_n_phase_boyer_noncoupled.ipynb")]
collect_ignore += [os.path.join(SCRIPT_FOLDER, 'setup.py')] collect_ignore += [os.path.join(SCRIPT_FOLDER, 'setup.py')]
...@@ -72,10 +81,6 @@ for root, sub_dirs, files in os.walk('.'): ...@@ -72,10 +81,6 @@ for root, sub_dirs, files in os.walk('.'):
collect_ignore.append(f) collect_ignore.append(f)
import nbformat
from nbconvert import PythonExporter
class IPythonMockup: class IPythonMockup:
def run_line_magic(self, *args, **kwargs): def run_line_magic(self, *args, **kwargs):
pass pass
...@@ -102,18 +107,25 @@ class IPyNbTest(pytest.Item): ...@@ -102,18 +107,25 @@ class IPyNbTest(pytest.Item):
# disable matplotlib output # disable matplotlib output
exec("import matplotlib.pyplot as p; " exec("import matplotlib.pyplot as p; "
"p.close('all'); "
"p.switch_backend('Template')", global_dict) "p.switch_backend('Template')", global_dict)
# in notebooks there is an implicit plt.show() - if this is not called a warning is shown when the next # in notebooks there is an implicit plt.show() - if this is not called a warning is shown when the next
# plot is created. This warning is suppressed here # plot is created. This warning is suppressed here
# Also animations cannot be shown, which also leads to a warning.
exec("import warnings;" exec("import warnings;"
"warnings.filterwarnings('ignore', 'Adding an axes using the same arguments as a previous.*');", "warnings.filterwarnings('ignore', 'Adding an axes using the same arguments as a previous.*');"
"warnings.filterwarnings('ignore', 'Animation was deleted without rendering anything.*');",
global_dict) global_dict)
with tempfile.NamedTemporaryFile() as f: with tempfile.NamedTemporaryFile() as f:
f.write(self.code.encode()) f.write(self.code.encode())
f.flush() f.flush()
runpy.run_path(f.name, init_globals=global_dict, run_name=self.name) runpy.run_path(f.name, init_globals=global_dict, run_name=self.name)
# Close any open figures
exec("import matplotlib.pyplot as p; "
"p.close('all')", global_dict)
class IPyNbFile(pytest.File): class IPyNbFile(pytest.File):
def collect(self): def collect(self):
...@@ -136,10 +148,19 @@ class IPyNbFile(pytest.File): ...@@ -136,10 +148,19 @@ class IPyNbFile(pytest.File):
pass pass
def pytest_collect_file(path, parent): if pytest_version >= 70000:
glob_exprs = ["*demo*.ipynb", "*tutorial*.ipynb", "test_*.ipynb"] # Since pytest 7.0, usage of `py.path.local` is deprecated and `pathlib.Path` should be used instead
if any(path.fnmatch(g) for g in glob_exprs): import pathlib
if pytest_version >= 50403:
return IPyNbFile.from_parent(fspath=path, parent=parent) def pytest_collect_file(file_path: pathlib.Path, parent):
else: glob_exprs = ["*demo*.ipynb", "*tutorial*.ipynb", "test_*.ipynb"]
return IPyNbFile(path, parent) if any(file_path.match(g) for g in glob_exprs):
return IPyNbFile.from_parent(path=file_path, parent=parent)
else:
def pytest_collect_file(path, parent):
glob_exprs = ["*demo*.ipynb", "*tutorial*.ipynb", "test_*.ipynb"]
if any(path.fnmatch(g) for g in glob_exprs):
if pytest_version >= 50403:
return IPyNbFile.from_parent(fspath=path, parent=parent)
else:
return IPyNbFile(path, parent)
...@@ -5,9 +5,10 @@ import datetime ...@@ -5,9 +5,10 @@ import datetime
import sphinx_rtd_theme import sphinx_rtd_theme
import os import os
import sys import sys
import re
import lbmpy
sys.path.insert(0, os.path.abspath('.')) sys.path.insert(0, os.path.abspath('.'))
from version_from_git import version_number_from_git
extensions = [ extensions = [
'sphinx.ext.autodoc', 'sphinx.ext.autodoc',
...@@ -25,11 +26,14 @@ templates_path = ['_templates'] ...@@ -25,11 +26,14 @@ templates_path = ['_templates']
source_suffix = '.rst' source_suffix = '.rst'
master_doc = 'index' master_doc = 'index'
copyright = '{}, Martin Bauer'.format(datetime.datetime.now().year) copyright = f'{datetime.datetime.now().year}, Martin Bauer, Markus Holzer, Frederik Hennig'
author = 'Martin Bauer' author = 'Martin Bauer, Markus Holzer, Frederik Hennig'
version = version_number_from_git() # The short X.Y version (including .devXXXX, rcX, b1 suffixes if present)
release = version_number_from_git() version = re.sub(r'(\d+\.\d+)\.\d+(.*)', r'\1\2', lbmpy.__version__)
language = None version = re.sub(r'(\.dev\d+).*?$', r'\1', version)
# The full version, including alpha/beta/rc tags.
release = lbmpy.__version__
language = 'en'
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '**.ipynb_checkpoints'] exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', '**.ipynb_checkpoints']
default_role = 'any' default_role = 'any'
pygments_style = 'sphinx' pygments_style = 'sphinx'
...@@ -54,6 +58,7 @@ intersphinx_mapping = {'python': ('https://docs.python.org/3.6', None), ...@@ -54,6 +58,7 @@ intersphinx_mapping = {'python': ('https://docs.python.org/3.6', None),
} }
autodoc_member_order = 'bysource' autodoc_member_order = 'bysource'
bibtex_bibfiles = ['sphinx/lbmpy.bib']
project = 'lbmpy' project = 'lbmpy'
html_logo = "img/logo.png" html_logo = 'img/logo.png'
File added
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="190.286" height="190.833" viewBox="0 0 190.286 190.833">
<defs>
<g>
<g id="glyph-0-0">
</g>
<g id="glyph-0-1">
<path d="M 3.5 1.71875 L 3.359375 1.71875 C 3.015625 1.71875 2.828125 1.625 2.84375 1.453125 C 2.84375 1.421875 2.859375 1.390625 2.859375 1.359375 L 4.328125 -3.828125 L 3.671875 -3.828125 L 3.546875 -3.40625 C 3.40625 -3.8125 3.21875 -3.953125 2.859375 -3.953125 C 1.671875 -3.953125 0.21875 -2.3125 0.21875 -0.9375 C 0.21875 -0.3125 0.578125 0.09375 1.140625 0.09375 C 1.78125 0.09375 2.1875 -0.234375 2.984375 -1.375 L 2.1875 1.25 C 2.078125 1.609375 1.921875 1.6875 1.34375 1.734375 L 1.34375 1.875 L 3.5 1.875 Z M 2.875 -3.765625 C 3.171875 -3.765625 3.40625 -3.515625 3.40625 -3.203125 C 3.40625 -2.46875 2.796875 -1.1875 2.1875 -0.6875 C 1.953125 -0.484375 1.71875 -0.375 1.5 -0.375 C 1.1875 -0.375 1 -0.640625 1 -1.0625 C 1 -1.734375 1.46875 -2.71875 2.046875 -3.3125 C 2.328125 -3.59375 2.625 -3.765625 2.875 -3.765625 Z M 2.875 -3.765625 "/>
</g>
<g id="glyph-1-0">
</g>
<g id="glyph-1-1">
<path d="M 3.59375 -1.109375 C 3.234375 -0.65625 3.140625 -0.578125 2.984375 -0.578125 C 2.8125 -0.578125 2.71875 -0.703125 2.65625 -1.046875 L 2.375 -2.453125 C 2.390625 -2.484375 2.40625 -2.5 2.453125 -2.5625 C 2.765625 -3.078125 2.984375 -3.296875 3.1875 -3.296875 C 3.25 -3.296875 3.3125 -3.28125 3.421875 -3.21875 C 3.546875 -3.140625 3.609375 -3.125 3.703125 -3.125 C 3.96875 -3.125 4.203125 -3.34375 4.203125 -3.59375 C 4.203125 -3.890625 3.953125 -4.140625 3.6875 -4.140625 C 3.265625 -4.140625 2.984375 -3.90625 2.265625 -2.90625 C 2.109375 -3.671875 2.03125 -3.890625 1.859375 -4.140625 L 0.375 -3.921875 L 0.375 -3.6875 C 0.5625 -3.703125 0.59375 -3.703125 0.6875 -3.703125 C 0.96875 -3.703125 1.09375 -3.546875 1.1875 -3.109375 L 1.453125 -1.71875 L 1.0625 -1.09375 C 0.875 -0.8125 0.78125 -0.71875 0.625 -0.71875 C 0.578125 -0.71875 0.53125 -0.75 0.4375 -0.796875 C 0.296875 -0.875 0.1875 -0.921875 0.078125 -0.921875 C -0.203125 -0.921875 -0.40625 -0.6875 -0.40625 -0.40625 C -0.40625 -0.09375 -0.171875 0.109375 0.15625 0.109375 C 0.609375 0.109375 0.8125 -0.0625 1.34375 -0.921875 L 1.546875 -1.28125 C 1.6875 -0.59375 1.765625 -0.375 1.953125 -0.109375 C 2.0625 0.03125 2.25 0.109375 2.421875 0.109375 C 2.859375 0.109375 3.234375 -0.1875 3.78125 -0.984375 Z M 3.59375 -1.109375 "/>
</g>
<g id="glyph-1-2">
<path d="M 2.859375 -1.265625 C 2.421875 -0.65625 2.140625 -0.453125 1.765625 -0.453125 C 1.375 -0.453125 1.109375 -0.78125 1.109375 -1.265625 C 1.109375 -1.828125 1.34375 -2.625 1.65625 -3.203125 C 1.890625 -3.625 2.15625 -3.84375 2.4375 -3.84375 C 2.53125 -3.84375 2.625 -3.78125 2.625 -3.6875 C 2.625 -3.65625 2.609375 -3.609375 2.5625 -3.53125 C 2.46875 -3.375 2.4375 -3.28125 2.4375 -3.171875 C 2.4375 -2.90625 2.65625 -2.703125 2.953125 -2.703125 C 3.28125 -2.703125 3.515625 -2.96875 3.515625 -3.34375 C 3.515625 -3.8125 3.109375 -4.140625 2.515625 -4.140625 C 1.25 -4.140625 -0.046875 -2.671875 -0.046875 -1.234375 C -0.046875 -0.4375 0.515625 0.109375 1.328125 0.109375 C 1.71875 0.109375 2.109375 -0.03125 2.40625 -0.28125 C 2.640625 -0.484375 2.796875 -0.65625 3.109375 -1.109375 Z M 2.859375 -1.265625 "/>
</g>
<g id="glyph-2-0">
</g>
<g id="glyph-2-1">
<path d="M 3.859375 -3.90625 L 0.875 -3.90625 L 0.875 -3.8125 C 1.265625 -3.78125 1.34375 -3.734375 1.34375 -3.5625 C 1.34375 -3.484375 1.3125 -3.328125 1.28125 -3.1875 L 0.53125 -0.53125 C 0.4375 -0.171875 0.390625 -0.140625 0.046875 -0.09375 L 0.046875 0 L 1.5625 0 L 1.5625 -0.09375 C 1.203125 -0.109375 1.09375 -0.171875 1.09375 -0.359375 C 1.09375 -0.40625 1.125 -0.5 1.15625 -0.625 L 1.53125 -1.96875 C 1.75 -1.953125 1.875 -1.9375 2.015625 -1.9375 C 2.25 -1.9375 2.28125 -1.9375 2.34375 -1.921875 C 2.421875 -1.859375 2.46875 -1.796875 2.46875 -1.671875 C 2.46875 -1.578125 2.453125 -1.5 2.421875 -1.3125 L 2.53125 -1.28125 L 2.984375 -2.6875 L 2.875 -2.71875 C 2.609375 -2.171875 2.578125 -2.171875 1.578125 -2.15625 L 1.96875 -3.546875 C 2.015625 -3.671875 2.09375 -3.703125 2.34375 -3.703125 C 3.34375 -3.703125 3.5625 -3.625 3.5625 -3.265625 C 3.5625 -3.21875 3.5625 -3.203125 3.546875 -3.125 C 3.546875 -3.078125 3.546875 -3.078125 3.546875 -3 L 3.671875 -2.984375 Z M 3.859375 -3.90625 "/>
</g>
<g id="glyph-2-2">
<path d="M 0.65625 -3.84375 C 1.015625 -3.84375 1.046875 -3.8125 1.046875 -3.6875 C 1.046875 -3.625 1.03125 -3.5625 1 -3.421875 C 0.984375 -3.390625 0.96875 -3.34375 0.96875 -3.3125 L 0.953125 -3.265625 L 0.140625 -0.28125 L 0.140625 -0.25 C 0.140625 -0.109375 0.59375 0.0625 0.9375 0.0625 C 1.84375 0.0625 2.828125 -0.984375 2.828125 -1.921875 C 2.828125 -2.34375 2.53125 -2.640625 2.140625 -2.640625 C 1.71875 -2.640625 1.40625 -2.390625 0.984375 -1.734375 C 1.296875 -2.875 1.328125 -3.03125 1.609375 -4.0625 L 1.578125 -4.09375 C 1.28125 -4.03125 1.0625 -4 0.65625 -3.953125 Z M 1.90625 -2.34375 C 2.15625 -2.34375 2.328125 -2.140625 2.328125 -1.828125 C 2.328125 -1.4375 2.015625 -0.796875 1.65625 -0.421875 C 1.4375 -0.203125 1.1875 -0.078125 0.921875 -0.078125 C 0.734375 -0.078125 0.65625 -0.140625 0.65625 -0.28125 C 0.65625 -0.640625 0.828125 -1.21875 1.078125 -1.65625 C 1.34375 -2.125 1.609375 -2.34375 1.90625 -2.34375 Z M 1.90625 -2.34375 "/>
</g>
<g id="glyph-2-3">
<path d="M 5.421875 -3.90625 L 4.3125 -3.90625 L 4.3125 -3.8125 C 4.640625 -3.78125 4.703125 -3.734375 4.703125 -3.578125 C 4.703125 -3.484375 4.65625 -3.328125 4.578125 -3.171875 L 3.453125 -0.96875 L 3.21875 -3.375 L 3.21875 -3.453125 C 3.21875 -3.703125 3.296875 -3.78125 3.625 -3.8125 L 3.625 -3.90625 L 2.203125 -3.90625 L 2.203125 -3.8125 C 2.546875 -3.796875 2.609375 -3.765625 2.640625 -3.46875 L 2.703125 -3.046875 L 1.671875 -0.96875 L 1.40625 -3.40625 C 1.40625 -3.421875 1.40625 -3.46875 1.40625 -3.484375 C 1.40625 -3.71875 1.46875 -3.765625 1.84375 -3.8125 L 1.84375 -3.90625 L 0.421875 -3.90625 L 0.421875 -3.8125 C 0.625 -3.78125 0.671875 -3.765625 0.734375 -3.71875 C 0.796875 -3.65625 0.828125 -3.53125 0.890625 -2.984375 L 1.265625 0.109375 L 1.375 0.109375 L 2.703125 -2.609375 L 2.734375 -2.609375 L 3.046875 0.109375 L 3.15625 0.109375 L 4.96875 -3.375 C 5.140625 -3.6875 5.1875 -3.734375 5.421875 -3.8125 Z M 5.421875 -3.90625 "/>
</g>
<g id="glyph-3-0">
</g>
<g id="glyph-3-1">
<path d="M 1.90625 -0.84375 C 1.609375 -0.4375 1.4375 -0.3125 1.171875 -0.3125 C 0.921875 -0.3125 0.734375 -0.515625 0.734375 -0.84375 C 0.734375 -1.21875 0.890625 -1.75 1.109375 -2.140625 C 1.265625 -2.421875 1.4375 -2.5625 1.625 -2.5625 C 1.6875 -2.5625 1.75 -2.53125 1.75 -2.46875 C 1.75 -2.4375 1.734375 -2.40625 1.703125 -2.359375 C 1.65625 -2.25 1.625 -2.1875 1.625 -2.125 C 1.625 -1.9375 1.78125 -1.8125 1.96875 -1.8125 C 2.1875 -1.8125 2.34375 -1.984375 2.34375 -2.21875 C 2.34375 -2.546875 2.078125 -2.765625 1.671875 -2.765625 C 0.828125 -2.765625 -0.03125 -1.78125 -0.03125 -0.828125 C -0.03125 -0.296875 0.34375 0.078125 0.890625 0.078125 C 1.15625 0.078125 1.40625 -0.015625 1.609375 -0.1875 C 1.765625 -0.328125 1.859375 -0.4375 2.078125 -0.734375 Z M 1.90625 -0.84375 "/>
</g>
<g id="glyph-3-2">
<path d="M 1.296875 -0.84375 L 1.203125 -0.71875 C 1.046875 -0.484375 0.921875 -0.359375 0.828125 -0.359375 C 0.78125 -0.359375 0.734375 -0.40625 0.734375 -0.453125 C 0.734375 -0.484375 0.765625 -0.6875 0.796875 -0.765625 L 1.328125 -2.765625 C 1.015625 -2.6875 0.59375 -2.640625 0.125 -2.59375 L 0.125 -2.4375 C 0.390625 -2.4375 0.484375 -2.390625 0.484375 -2.265625 C 0.484375 -2.21875 0.453125 -2.125 0.4375 -2.015625 L 0.09375 -0.734375 C 0.046875 -0.5625 0.015625 -0.40625 0.015625 -0.328125 C 0.015625 -0.109375 0.171875 0.046875 0.421875 0.046875 C 0.78125 0.046875 1 -0.125 1.421875 -0.765625 Z M 1.15625 -4.09375 C 0.953125 -4.09375 0.765625 -3.90625 0.765625 -3.703125 C 0.765625 -3.46875 0.9375 -3.296875 1.15625 -3.296875 C 1.390625 -3.296875 1.578125 -3.46875 1.578125 -3.6875 C 1.578125 -3.90625 1.375 -4.09375 1.15625 -4.09375 Z M 1.15625 -4.09375 "/>
</g>
<g id="glyph-4-0">
</g>
<g id="glyph-4-1">
<path d="M 1.078125 -0.703125 L 1 -0.609375 C 0.875 -0.40625 0.765625 -0.296875 0.6875 -0.296875 C 0.640625 -0.296875 0.609375 -0.34375 0.609375 -0.375 C 0.609375 -0.40625 0.640625 -0.578125 0.65625 -0.640625 L 1.109375 -2.296875 C 0.84375 -2.25 0.5 -2.1875 0.109375 -2.15625 L 0.109375 -2.03125 C 0.3125 -2.03125 0.40625 -1.984375 0.40625 -1.890625 C 0.40625 -1.84375 0.390625 -1.765625 0.359375 -1.6875 L 0.078125 -0.609375 C 0.03125 -0.46875 0.015625 -0.328125 0.015625 -0.265625 C 0.015625 -0.078125 0.15625 0.046875 0.359375 0.046875 C 0.65625 0.046875 0.84375 -0.109375 1.1875 -0.640625 Z M 0.96875 -3.421875 C 0.796875 -3.421875 0.640625 -3.265625 0.640625 -3.078125 C 0.640625 -2.890625 0.78125 -2.734375 0.96875 -2.734375 C 1.15625 -2.734375 1.3125 -2.890625 1.3125 -3.078125 C 1.3125 -3.265625 1.15625 -3.421875 0.96875 -3.421875 Z M 0.96875 -3.421875 "/>
</g>
<g id="glyph-5-0">
</g>
<g id="glyph-5-1">
<path d="M 1.65625 -3.171875 L 0 -3.171875 L 0 -2.8125 L 1.65625 -2.8125 Z M 1.65625 -3.171875 "/>
</g>
</g>
<clipPath id="clip-0">
<path clip-rule="nonzero" d="M 59 32 L 190.285156 32 L 190.285156 190.832031 L 59 190.832031 Z M 59 32 "/>
</clipPath>
</defs>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -9.962062 -0.00015625 L 159.405125 -0.00015625 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -9.962062 49.812344 L 159.405125 49.812344 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -9.962062 99.62875 L 159.405125 99.62875 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -9.962062 149.44125 L 159.405125 149.44125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M -0.001125 -9.961094 L -0.001125 159.406094 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 49.815281 -9.961094 L 49.815281 159.406094 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 99.627781 -9.961094 L 99.627781 159.406094 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 149.440281 -9.961094 L 149.440281 159.406094 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.390625%, 45.097351%, 69.802856%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 4.698094 -0.00015625 C 4.698094 2.593594 2.592625 4.695156 -0.001125 4.695156 C -2.594875 4.695156 -4.696437 2.593594 -4.696437 -0.00015625 C -4.696437 -2.593906 -2.594875 -4.695469 -0.001125 -4.695469 C 2.592625 -4.695469 4.698094 -2.593906 4.698094 -0.00015625 Z M 4.698094 -0.00015625 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.390625%, 45.097351%, 69.802856%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 4.698094 49.812344 C 4.698094 52.406094 2.592625 54.511562 -0.001125 54.511562 C -2.594875 54.511562 -4.696437 52.406094 -4.696437 49.812344 C -4.696437 47.218594 -2.594875 45.117031 -0.001125 45.117031 C 2.592625 45.117031 4.698094 47.218594 4.698094 49.812344 Z M 4.698094 49.812344 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.390625%, 45.097351%, 69.802856%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 4.698094 99.62875 C 4.698094 102.2225 2.592625 104.324062 -0.001125 104.324062 C -2.594875 104.324062 -4.696437 102.2225 -4.696437 99.62875 C -4.696437 97.035 -2.594875 94.929531 -0.001125 94.929531 C 2.592625 94.929531 4.698094 97.035 4.698094 99.62875 Z M 4.698094 99.62875 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.390625%, 45.097351%, 69.802856%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 4.698094 149.44125 C 4.698094 152.035 2.592625 154.136562 -0.001125 154.136562 C -2.594875 154.136562 -4.696437 152.035 -4.696437 149.44125 C -4.696437 146.8475 -2.594875 144.745937 -0.001125 144.745937 C 2.592625 144.745937 4.698094 146.8475 4.698094 149.44125 Z M 4.698094 149.44125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 54.510594 -0.00015625 C 54.510594 2.593594 52.409031 4.695156 49.815281 4.695156 C 47.221531 4.695156 45.116062 2.593594 45.116062 -0.00015625 C 45.116062 -2.593906 47.221531 -4.695469 49.815281 -4.695469 C 52.409031 -4.695469 54.510594 -2.593906 54.510594 -0.00015625 Z M 54.510594 -0.00015625 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 54.510594 49.812344 C 54.510594 52.406094 52.409031 54.511562 49.815281 54.511562 C 47.221531 54.511562 45.116062 52.406094 45.116062 49.812344 C 45.116062 47.218594 47.221531 45.117031 49.815281 45.117031 C 52.409031 45.117031 54.510594 47.218594 54.510594 49.812344 Z M 54.510594 49.812344 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 54.510594 99.62875 C 54.510594 102.2225 52.409031 104.324062 49.815281 104.324062 C 47.221531 104.324062 45.116062 102.2225 45.116062 99.62875 C 45.116062 97.035 47.221531 94.929531 49.815281 94.929531 C 52.409031 94.929531 54.510594 97.035 54.510594 99.62875 Z M 54.510594 99.62875 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.390625%, 45.097351%, 69.802856%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 54.510594 149.44125 C 54.510594 152.035 52.409031 154.136562 49.815281 154.136562 C 47.221531 154.136562 45.116062 152.035 45.116062 149.44125 C 45.116062 146.8475 47.221531 144.745937 49.815281 144.745937 C 52.409031 144.745937 54.510594 146.8475 54.510594 149.44125 Z M 54.510594 149.44125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.782776%, 61.959839%, 45.097351%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.323094 -0.00015625 C 104.323094 2.593594 102.221531 4.695156 99.627781 4.695156 C 97.034031 4.695156 94.932469 2.593594 94.932469 -0.00015625 C 94.932469 -2.593906 97.034031 -4.695469 99.627781 -4.695469 C 102.221531 -4.695469 104.323094 -2.593906 104.323094 -0.00015625 Z M 104.323094 -0.00015625 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.782776%, 61.959839%, 45.097351%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.323094 49.812344 C 104.323094 52.406094 102.221531 54.511562 99.627781 54.511562 C 97.034031 54.511562 94.932469 52.406094 94.932469 49.812344 C 94.932469 47.218594 97.034031 45.117031 99.627781 45.117031 C 102.221531 45.117031 104.323094 47.218594 104.323094 49.812344 Z M 104.323094 49.812344 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.323094 99.62875 C 104.323094 102.2225 102.221531 104.324062 99.627781 104.324062 C 97.034031 104.324062 94.932469 102.2225 94.932469 99.62875 C 94.932469 97.035 97.034031 94.929531 99.627781 94.929531 C 102.221531 94.929531 104.323094 97.035 104.323094 99.62875 Z M 104.323094 99.62875 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 104.323094 149.44125 C 104.323094 152.035 102.221531 154.136562 99.627781 154.136562 C 97.034031 154.136562 94.932469 152.035 94.932469 149.44125 C 94.932469 146.8475 97.034031 144.745937 99.627781 144.745937 C 102.221531 144.745937 104.323094 146.8475 104.323094 149.44125 Z M 104.323094 149.44125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.782776%, 61.959839%, 45.097351%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 154.1395 -0.00015625 C 154.1395 2.593594 152.034031 4.695156 149.440281 4.695156 C 146.846531 4.695156 144.744969 2.593594 144.744969 -0.00015625 C 144.744969 -2.593906 146.846531 -4.695469 149.440281 -4.695469 C 152.034031 -4.695469 154.1395 -2.593906 154.1395 -0.00015625 Z M 154.1395 -0.00015625 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.782776%, 61.959839%, 45.097351%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 154.1395 49.812344 C 154.1395 52.406094 152.034031 54.511562 149.440281 54.511562 C 146.846531 54.511562 144.744969 52.406094 144.744969 49.812344 C 144.744969 47.218594 146.846531 45.117031 149.440281 45.117031 C 152.034031 45.117031 154.1395 47.218594 154.1395 49.812344 Z M 154.1395 49.812344 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0.782776%, 61.959839%, 45.097351%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 154.1395 99.62875 C 154.1395 102.2225 152.034031 104.324062 149.440281 104.324062 C 146.846531 104.324062 144.744969 102.2225 144.744969 99.62875 C 144.744969 97.035 146.846531 94.929531 149.440281 94.929531 C 152.034031 94.929531 154.1395 97.035 154.1395 99.62875 Z M 154.1395 99.62875 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(87.057495%, 56.077576%, 1.959229%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 154.1395 149.44125 C 154.1395 152.035 152.034031 154.136562 149.440281 154.136562 C 146.846531 154.136562 144.744969 152.035 144.744969 149.44125 C 144.744969 146.8475 146.846531 144.745937 149.440281 144.745937 C 152.034031 144.745937 154.1395 146.8475 154.1395 149.44125 Z M 154.1395 149.44125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 88.381687 65.75375 C 88.381687 68.3475 86.280125 70.449062 83.686375 70.449062 C 81.092625 70.449062 78.991062 68.3475 78.991062 65.75375 C 78.991062 63.16 81.092625 61.058437 83.686375 61.058437 C 86.280125 61.058437 88.381687 63.16 88.381687 65.75375 Z M 88.381687 65.75375 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<g clip-path="url(#clip-0)">
<path fill="none" stroke-width="1.99255" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 149.440281 109.589687 C 95.252781 100.035 59.073094 48.363125 68.627781 -5.824375 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
</g>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 4.98325 144.460781 L 44.830906 104.609219 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 54.79575 94.644375 L 94.647312 54.796719 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 55.842625 96.589687 L 79.702 72.726406 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 74.222656 71.777344 L 75.855469 76.683594 L 76.265625 73.820312 L 79.125 73.414062 "/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 53.799656 92.652187 L 77.659031 68.792812 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 100.125 103.660156 L 98.492188 98.757812 L 98.082031 101.617188 L 95.222656 102.023438 "/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 7.026219 145.406094 L 44.830906 107.5975 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 25.40625 22.960938 L 27.039062 27.863281 L 27.449219 25.003906 L 30.308594 24.59375 "/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-dasharray="2.98883 2.98883" stroke-miterlimit="10" d="M 19.924656 65.75375 L 83.686375 65.75375 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill="none" stroke-width="0.99628" stroke-linecap="butt" stroke-linejoin="miter" stroke="rgb(0%, 0%, 0%)" stroke-opacity="1" stroke-miterlimit="10" d="M 24.905125 68.644375 L 24.905125 96.738125 " transform="matrix(1, 0, 0, -1, 20.423, 170.41)"/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 45.328125 104.65625 L 47.640625 100.03125 L 45.328125 101.765625 L 43.019531 100.03125 "/>
<path fill-rule="nonzero" fill="rgb(0%, 0%, 0%)" fill-opacity="1" d="M 45.328125 70.78125 L 43.019531 75.40625 L 45.328125 73.671875 L 47.640625 75.40625 "/>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="39.103" y="89.761"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="24.961" y="17.349"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="29.594" y="18.694"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="33.748432" y="18.694"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="76.852" y="67.163"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-1" x="81.484" y="68.507"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="127.248" y="116.953"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-2" x="131.731" y="118.298"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-1" x="110.094" y="105.968"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-2-3" x="114.577" y="107.312"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="90.172" y="85.461"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="94.954" y="86.806"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-1" x="97.733" y="87.934"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-0-1" x="75.228" y="91.006"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-1" x="80.01" y="92.351"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-5-1" x="82.639" y="93.298"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-4-1" x="82.789" y="94.344"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-1-2" x="42.409" y="37.257"/>
</g>
<g fill="rgb(0%, 0%, 0%)" fill-opacity="1">
<use xlink:href="#glyph-3-2" x="46.539" y="38.602"/>
</g>
</svg>
File added
File added
doc/img/feature_optimization_overview.png

135 KiB

<?xml version="1.0" encoding="UTF-8"?>
<svg width="793.45pt" height="286.55pt" version="1.2" viewBox="0 0 793.45 286.55" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink">
<metadata>
<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/>
</cc:Work>
</rdf:RDF>
</metadata>
<defs>
<symbol id="glyph0-1" overflow="visible"></symbol>
<symbol id="glyph1-1" overflow="visible">
<path d="m4.1406-10.219 2.3594 10.219h2.7031l2.3125-10.219v10.219h2.7031v-13.125h-4.0625l-2.3125 10.438-2.375-10.438h-4.0312v13.125h2.7031z"/>
</symbol>
<symbol id="glyph1-2" overflow="visible">
<path d="m5.5156-9.875c-2.9844 0-4.7969 1.9531-4.7969 5.1406 0 3.2031 1.8125 5.1406 4.8125 5.1406 2.9531 0 4.7969-1.9531 4.7969-5.0625 0-3.2969-1.7812-5.2188-4.8125-5.2188zm0.015625 2.0312c1.375 0 2.2812 1.2344 2.2812 3.1406 0 1.8281-0.9375 3.0781-2.2812 3.0781-1.375 0-2.2969-1.25-2.2969-3.1094s0.92188-3.1094 2.2969-3.1094z"/>
</symbol>
<symbol id="glyph1-3" overflow="visible">
<path d="m4.8125 0.40625c1.2031 0 2.0469-0.4375 2.6719-1.3906v0.98438h2.5312v-13.125h-2.5312v4.6719c-0.625-0.98438-1.4688-1.4219-2.6719-1.4219-2.3281 0-4.0938 2.2188-4.0938 5.1562 0 2.8438 1.6406 5.125 4.0938 5.125zm0.54688-8.1875c1.2812 0 2.125 1.25 2.125 3.0938 0 1.7656-0.85938 3-2.125 3-1.25 0-2.125-1.25-2.125-3.0312 0-1.7969 0.875-3.0625 2.125-3.0625z"/>
</symbol>
<symbol id="glyph1-4" overflow="visible">
<path d="m5.2188-9.875c-2.7812 0-4.5 2.0156-4.5 5.2656 0 3.1094 1.6875 5.0156 4.4531 5.0156 2.1719 0 3.9375-1.2344 4.5-3.1406h-2.4844c-0.3125 0.76562-1.0156 1.2188-1.9375 1.2188-1.6875 0-1.9531-1.2344-2.0156-2.5469h6.5156c0.03125-0.21875 0.03125-0.3125 0.03125-0.4375 0-4.2969-2.625-5.375-4.5625-5.375zm1.9219 4.1406h-3.8594c0.15625-1.4844 0.78125-2.2188 1.9062-2.2188 1.1719 0 1.8438 0.79688 1.9531 2.2188z"/>
</symbol>
<symbol id="glyph1-5" overflow="visible">
<path d="m3.6875-13.125h-2.5156v13.125h2.5156z"/>
</symbol>
<symbol id="glyph1-6" overflow="visible">
<path d="m3-2.8281h-2.4531c0.0625 2.125 1.625 3.2344 4.5781 3.2344 3.4062 0 4.25-1.9375 4.25-3.2812 0-1.2656-0.625-2.0781-1.9062-2.4531l-3.1875-0.92188c-0.70312-0.21875-0.875-0.35938-0.875-0.75 0-0.54688 0.57812-0.90625 1.4531-0.90625 1.2031 0 1.7969 0.4375 1.8125 1.3125h2.4375c-0.03125-2.0469-1.625-3.2812-4.2344-3.2812-2.4688 0-4 1.2344-4 3.2344 0 1.9062 1.5781 2.2188 2.125 2.3906l3.0156 0.9375c0.625 0.20312 0.84375 0.39062 0.84375 0.79688 0 0.59375-0.70312 0.95312-1.875 0.95312-1.5781 0-1.8281-0.59375-1.9844-1.2656z"/>
</symbol>
<symbol id="glyph1-7" overflow="visible"></symbol>
<symbol id="glyph1-8" overflow="visible">
<path d="m3.75-12.859-3.7188 13.109h1.2031l3.7188-13.109z"/>
</symbol>
<symbol id="glyph1-9" overflow="visible">
<path d="m4.1406-5.6562h5.7344v-2.25h-5.7344v-2.9688h6.5156v-2.25h-9.2188v13.125h2.7031z"/>
</symbol>
<symbol id="glyph1-10" overflow="visible">
<path d="m3.6719 0.40625c1.0781 0 2.0625-0.45312 2.9531-1.375 0 0.5 0.046875 0.6875 0.28125 0.96875h2.7344v-0.3125c-0.4375-0.40625-0.5625-0.67188-0.5625-1.1875v-5.3906c0-1.9844-1.3594-2.9844-3.9844-2.9844s-4 1.1094-4.1562 3.3594h2.4219c0.125-1.0156 0.54688-1.3281 1.7812-1.3281 0.98438 0 1.4688 0.3125 1.4688 0.96875 0 0.95312-1.1875 1-2.0156 1.1406l-1.0156 0.17188c-1.9219 0.32812-2.8594 1.3125-2.8594 3.0625s1.1875 2.9062 2.9531 2.9062zm2.9375-4.3125c0 1.4531-0.71875 2.2812-2 2.2812-0.84375 0-1.375-0.4375-1.375-1.1719 0-0.75 0.40625-1.1094 1.4531-1.3281l0.85938-0.15625c0.65625-0.125 0.76562-0.17188 1.0625-0.3125z"/>
</symbol>
<symbol id="glyph1-11" overflow="visible">
<path d="m5.5469-9.5156h-1.4062v-2.6094h-2.5156v2.6094h-1.25v1.6719h1.25v5.9688c0 1.5312 0.8125 2.2812 2.4688 2.2812 0.54688 0 1-0.046875 1.4531-0.1875v-1.7656c-0.25 0.03125-0.40625 0.046875-0.57812 0.046875-0.67188 0-0.82812-0.1875-0.82812-1.0625v-5.2812h1.4062z"/>
</symbol>
<symbol id="glyph1-12" overflow="visible">
<path d="m9.8594 0v-9.7188h-2.5156v6.0781c0 1.1562-0.8125 1.9062-2.0312 1.9062-1.0781 0-1.625-0.5625-1.625-1.7344v-6.25h-2.5156v6.7656c0 2.1406 1.1875 3.3594 3.25 3.3594 1.3125 0 2.2031-0.48438 2.9219-1.5625v1.1562z"/>
</symbol>
<symbol id="glyph1-13" overflow="visible">
<path d="m1.1719-9.7188v9.7188h2.5156v-5.1719c0-1.4688 0.73438-2.2031 2.2188-2.2031 0.26562 0 0.45312 0.015625 0.79688 0.0625v-2.5469c-0.15625-0.015625-0.23438-0.015625-0.3125-0.015625-1.1562 0-2.1562 0.75-2.7031 2.0625v-1.9062z"/>
</symbol>
<symbol id="glyph1-14" overflow="visible">
<path d="m9.3438-5.9531v5.9531h2.7031v-13.125h-2.7188v4.9219h-5.1875v-4.9219h-2.7031v13.125h2.7031v-5.9531z"/>
</symbol>
<symbol id="glyph1-15" overflow="visible">
<path d="m11.125 0 2.75-9.7188h-2.6094l-1.4688 6.7969-1.4688-6.7969h-2.5156l-1.4688 6.7969-1.5469-6.7969h-2.6094l2.7344 9.7188h2.5938l1.5469-6.8594 1.4531 6.8594z"/>
</symbol>
<symbol id="glyph1-16" overflow="visible">
<path d="m0.71875-6.4688c0 4 2.4688 6.875 6.3125 6.875 3.9531 0 6.3281-3.0156 6.3281-6.7812 0-4.1719-2.5469-6.9688-6.3438-6.9688-3.8125 0-6.2969 2.8906-6.2969 6.875zm6.3125-4.5625c2.2188 0 3.625 1.7969 3.625 4.6406 0 2.6875-1.4531 4.5-3.625 4.5s-3.6094-1.8125-3.6094-4.5781c0-2.75 1.4375-4.5625 3.6094-4.5625z"/>
</symbol>
<symbol id="glyph1-17" overflow="visible">
<path d="m6.3906-9.875c-1.2188 0-2.0938 0.51562-2.7031 1.5938v-1.4375h-2.5156v13.641h2.5156v-5.0781c0.60938 1.0781 1.4844 1.5938 2.7031 1.5938 2.3438 0 4.0625-2.2031 4.0625-5.1562 0-2.8594-1.5469-5.1562-4.0625-5.1562zm-0.57812 2.0938c1.2812 0 2.125 1.25 2.125 3.0938 0 1.7656-0.875 3.0156-2.125 3.0156-1.2656 0-2.125-1.2188-2.125-3.0469 0-1.8125 0.85938-3.0625 2.125-3.0625z"/>
</symbol>
<symbol id="glyph1-18" overflow="visible">
<path d="m3.7812-9.7188h-2.5156v9.7188h2.5156zm0-3.4062h-2.5156v2.25h2.5156z"/>
</symbol>
<symbol id="glyph1-19" overflow="visible">
<path d="m1.1719-9.7188v9.7188h2.5156v-5.8281c0-1.1875 0.65625-1.9062 1.7344-1.9062 0.84375 0 1.3594 0.48438 1.3594 1.25v6.4844h2.5312v-5.8281c0-1.1875 0.64062-1.9062 1.7188-1.9062 0.84375 0 1.375 0.48438 1.375 1.25v6.4844h2.5156v-6.875c0-1.8906-1.1562-3-3.0938-3-1.2188 0-2.0938 0.42188-2.8438 1.4375-0.46875-0.92188-1.4375-1.4375-2.6406-1.4375-1.125 0-1.8438 0.375-2.6719 1.3594v-1.2031z"/>
</symbol>
<symbol id="glyph1-20" overflow="visible">
<path d="m1.1719-9.7188v9.7188h2.5156v-5.8281c0-1.1562 0.8125-1.9062 2.0312-1.9062 1.0781 0 1.625 0.59375 1.625 1.7344v6h2.5156v-6.5156c0-2.1406-1.1875-3.3594-3.25-3.3594-1.3125 0-2.2031 0.48438-2.9219 1.5625v-1.4062z"/>
</symbol>
<symbol id="glyph2-1" overflow="visible">
<path d="m2.5 0c-0.55469 0-0.99609-0.16406-1.3281-0.5-0.32422-0.32031-0.48438-0.75781-0.48438-1.3125 0-0.5625 0.16016-1.0039 0.48438-1.3281 0.33203-0.33203 0.77344-0.5 1.3281-0.5 0.55078 0 0.99219 0.16797 1.3281 0.5 0.33203 0.32422 0.5 0.76562 0.5 1.3281 0 0.55469-0.16797 0.99219-0.5 1.3125-0.33594 0.33594-0.77734 0.5-1.3281 0.5z"/>
</symbol>
<symbol id="glyph3-1" overflow="visible">
<path d="m5.2812 0 3.5312-10.203h-1.375l-2.8281 8.6406-3-8.6406h-1.4062l3.6719 10.203z"/>
</symbol>
<symbol id="glyph3-2" overflow="visible">
<path d="m0.73438-5.1719h1.1875c0.09375-0.89062 0.625-1.2969 1.7188-1.2969 1.0469 0 1.6406 0.39062 1.6406 1.0938v0.3125c0 0.48438-0.29688 0.6875-1.2188 0.8125-2.1406 0.28125-3.6406 0.4375-3.6406 2.4062 0 1.3281 0.92188 2.1719 2.4062 2.1719 0.92188 0 1.6719-0.32812 2.4844-1.0781 0.09375 0.73438 0.45312 1.0781 1.2188 1.0781 0.23438 0 0.40625-0.03125 0.79688-0.125v-0.89062c-0.125 0.03125-0.1875 0.03125-0.26562 0.03125-0.40625 0-0.625-0.21875-0.625-0.57812v-4.3125c0-1.2969-0.95312-2-2.75-2-1.3281 0-2.875 0.39062-2.9531 2.375zm2.3438 4.4688c-0.90625 0-1.4375-0.4375-1.4375-1.1719 0-1.6094 2.4531-1.2031 3.6406-1.75v1.3125c0 0.70312-0.8125 1.6094-2.2031 1.6094z"/>
</symbol>
<symbol id="glyph3-3" overflow="visible">
<path d="m4.375-6.3125v-1.1875c-0.20312-0.03125-0.29688-0.046875-0.45312-0.046875-0.76562 0-1.3281 0.45312-2 1.5469v-1.3438h-1.0781v7.3438h1.1719v-3.8125c0-2.0469 0.9375-2.4688 2.3594-2.5z"/>
</symbol>
<symbol id="glyph3-4" overflow="visible">
<path d="m2.0938-7.3438h-1.1562v7.3438h1.1562zm0-2.8594h-1.1719v1.4688h1.1719z"/>
</symbol>
<symbol id="glyph3-5" overflow="visible">
<path d="m3.7188-7.5469c-2.0469 0-3.2969 1.4688-3.2969 3.9375s1.2344 3.9375 3.3125 3.9375c2.0625 0 3.3281-1.4688 3.3281-3.8906 0-2.5312-1.2188-3.9844-3.3438-3.9844zm0.015625 1.0781c1.3125 0 2.1094 1.0781 2.1094 2.9062 0 1.7188-0.8125 2.8125-2.1094 2.8125s-2.0938-1.0781-2.0938-2.8594c0-1.7656 0.79688-2.8594 2.0938-2.8594z"/>
</symbol>
<symbol id="glyph3-6" overflow="visible">
<path d="m6.6719 0v-7.3438h-1.1562v4.1719c0 1.4844-0.78125 2.4688-2 2.4688-0.92188 0-1.5156-0.5625-1.5156-1.4375v-5.2031h-1.1562v5.6562c0 1.2188 0.90625 2.0156 2.3281 2.0156 1.0781 0 1.7656-0.39062 2.4531-1.3438v1.0156z"/>
</symbol>
<symbol id="glyph3-7" overflow="visible">
<path d="m1.7031-2.1875h-1.2344c0.0625 1.7031 1.0156 2.5156 2.9375 2.5156 1.8438 0 3.0156-0.92188 3.0156-2.3281 0-1.0938-0.60938-1.7031-2.0625-2.0469l-1.125-0.26562c-0.95312-0.21875-1.3594-0.53125-1.3594-1.0469 0-0.67188 0.60938-1.1094 1.5625-1.1094 0.9375 0 1.4375 0.40625 1.4688 1.1719h1.2188c0-1.4375-0.95312-2.25-2.6562-2.25s-2.8125 0.89062-2.8125 2.2344c0 1.1562 0.59375 1.7031 2.3281 2.125l1.0938 0.26562c0.8125 0.1875 1.125 0.48438 1.125 1.0156 0 0.6875-0.6875 1.1562-1.7031 1.1562-1.4219 0-1.6875-0.71875-1.7969-1.4375z"/>
</symbol>
<symbol id="glyph3-8" overflow="visible"></symbol>
<symbol id="glyph3-9" overflow="visible">
<path d="m0.70312-6.4844h1.2344c0.046875-0.92188 0.28125-2.3594 2-2.3594 1.1094 0 1.9531 0.79688 1.9531 1.8594 0 0.78125-0.45312 1.4531-1.3438 1.9531l-1.2812 0.73438c-2.0781 1.1719-2.6719 2.1094-2.7969 4.2969h6.6094v-1.2188h-5.2188c0.125-0.8125 0.54688-1.375 1.7969-2.0469l1.3906-0.75c1.3906-0.76562 2.1094-1.7812 2.1094-3 0-1.7188-1.2969-2.9062-3.1875-2.9062-1.3438 0-3.1875 0.4375-3.2656 3.4375z"/>
</symbol>
<symbol id="glyph3-10" overflow="visible">
<path d="m1.125 0h3.9219c2.5781 0 4.1719-1.9375 4.1719-5.1094s-1.5781-5.0938-4.1719-5.0938h-3.9219zm1.2969-1.1406v-7.9219h2.4062c2.0156 0 3.0781 1.3594 3.0781 3.9688 0 2.5781-1.0625 3.9531-3.0781 3.9531z"/>
</symbol>
<symbol id="glyph3-11" overflow="visible">
<path d="m3.2031-10.203-3.3125 10.484h0.76562l3.3125-10.484z"/>
</symbol>
<symbol id="glyph3-12" overflow="visible">
<path d="m3.7812-8.8438c1.0938 0 1.75 0.64062 1.75 1.6875 0 1.2969-0.79688 1.5312-2.4375 1.5625v1.0469h0.15625l0.51562-0.015625c1.3594 0 2.0625 0.60938 2.0625 1.7969 0 1.25-0.78125 2-2.0625 2-1.3438 0-2-0.67188-2.0781-2.125h-1.2344c0.15625 2.1562 1.2031 3.2188 3.2656 3.2188 2.0469 0 3.3594-1.2188 3.3594-3.0938 0-1.2656-0.48438-1.9688-1.6719-2.375 0.92188-0.35938 1.3906-1.0625 1.3906-2.0625 0-1.7031-1.1406-2.7188-3.0312-2.7188-2 0-3.0625 1.0938-3.1094 3.2031h1.2344c0.03125-1.0781 0.32812-2.125 1.8906-2.125z"/>
</symbol>
<symbol id="glyph3-13" overflow="visible">
<path d="m3.6406-7.3438h-1.2031v-2.0156h-1.1562v2.0156h-1v0.95312h1v5.5469c0 0.75 0.5 1.1719 1.4062 1.1719 0.28125 0 0.5625-0.03125 0.95312-0.10938v-0.96875c-0.15625 0.03125-0.34375 0.046875-0.5625 0.046875-0.5 0-0.64062-0.14062-0.64062-0.65625v-5.0312h1.2031z"/>
</symbol>
<symbol id="glyph3-14" overflow="visible">
<path d="m7.0469-3.2812c0-2.6562-1-4.2656-3.2656-4.2656-2.0469 0-3.3594 1.5625-3.3594 3.9844 0 2.4062 1.2656 3.8906 3.3281 3.8906 1.6875 0 2.8438-0.95312 3.1406-2.5469h-1.1719c-0.32812 0.95312-0.98438 1.4688-1.9219 1.4688-1.3594 0-2.125-1.0312-2.1562-2.5312zm-5.375-0.95312c0.09375-1.3594 0.92188-2.2344 2.0938-2.2344 1.2031 0 2.0312 0.98438 2.0312 2.2344z"/>
</symbol>
<symbol id="glyph3-15" overflow="visible">
<path d="m0.84375-7.3438v7.3438h1.1719v-4.0469c0-1.5 0.78125-2.4844 1.9844-2.4844 0.92188 0 1.5156 0.5625 1.5156 1.4531v5.0781h1.1562v-5.5469c0-1.2188-0.90625-2-2.3125-2-1.0938 0-1.7969 0.42188-2.4375 1.4375v-1.2344z"/>
</symbol>
<symbol id="glyph3-16" overflow="visible">
<path d="m6.5781-4.875c-0.14062-1.75-1.2188-2.6719-2.8906-2.6719-1.9844 0-3.2656 1.5625-3.2656 4 0 2.375 1.2656 3.875 3.25 3.875 1.75 0 2.8594-1.0625 2.9844-2.8438h-1.1719c-0.1875 1.1719-0.79688 1.7656-1.7812 1.7656-1.2969 0-2.0625-1.0625-2.0625-2.7969 0-1.8281 0.75-2.9219 2.0312-2.9219 0.96875 0 1.5938 0.57812 1.7344 1.5938z"/>
</symbol>
<symbol id="glyph3-17" overflow="visible">
<path d="m2.0156-10.203h-1.1719v10.203h1.1719z"/>
</symbol>
<symbol id="glyph3-18" overflow="visible">
<path d="m6.625 0 2.8594-8.5469v8.5469h1.2344v-10.203h-1.7969l-2.9688 8.8906-3.0312-8.8906h-1.7969v10.203h1.2344v-8.5469l2.8906 8.5469z"/>
</symbol>
<symbol id="glyph3-19" overflow="visible">
<path d="m0.84375-7.3438v7.3438h1.1719v-4.6094c0-1.0625 0.76562-1.9219 1.7188-1.9219 0.875 0 1.3594 0.54688 1.3594 1.4844v5.0469h1.1719v-4.6094c0-1.0625 0.78125-1.9219 1.7344-1.9219 0.84375 0 1.3594 0.54688 1.3594 1.4844v5.0469h1.1719v-5.5c0-1.3125-0.76562-2.0469-2.125-2.0469-0.98438 0-1.5781 0.29688-2.2656 1.125-0.42188-0.78125-1.0156-1.125-1.9688-1.125-0.98438 0-1.625 0.35938-2.25 1.25v-1.0469z"/>
</symbol>
<symbol id="glyph3-20" overflow="visible">
<path d="m4.0156-4.375h-3.375v1.0156h3.375z"/>
</symbol>
<symbol id="glyph3-21" overflow="visible">
<path d="m0.84375-10.203v10.203h1.0469v-0.9375c0.5625 0.85938 1.2969 1.2656 2.3281 1.2656 1.9219 0 3.1875-1.5938 3.1875-4.0312 0-2.375-1.2031-3.8438-3.1406-3.8438-1 0-1.7188 0.375-2.2656 1.2031v-3.8594zm3.2031 3.75c1.2969 0 2.1406 1.1406 2.1406 2.8906 0 1.6562-0.875 2.7969-2.1406 2.7969-1.2344 0-2.0469-1.125-2.0469-2.8438s0.8125-2.8438 2.0469-2.8438z"/>
</symbol>
<symbol id="glyph3-22" overflow="visible">
<path d="m6.9844-10.203h-1.1562v3.7969c-0.5-0.75-1.2812-1.1406-2.2656-1.1406-1.8906 0-3.1406 1.5312-3.1406 3.8594 0 2.4844 1.2188 4.0156 3.1875 4.0156 1.0156 0 1.7031-0.39062 2.3438-1.2969v0.96875h1.0312zm-3.2188 3.75c1.2656 0 2.0625 1.125 2.0625 2.875 0 1.6875-0.8125 2.8125-2.0469 2.8125-1.2969 0-2.1406-1.1406-2.1406-2.8438s0.84375-2.8438 2.125-2.8438z"/>
</symbol>
<symbol id="glyph3-23" overflow="visible">
<path d="m5.5-5.0781v5.0781h1.1562v-5.5469c0-1.2344-0.875-2-2.2969-2-1.0469 0-1.6719 0.32812-2.3594 1.2188v-3.875h-1.1562v10.203h1.1562v-4.0469c0-1.5 0.78125-2.4844 1.9844-2.4844 0.60938 0 1.5156 0.29688 1.5156 1.4531z"/>
</symbol>
<symbol id="glyph3-24" overflow="visible">
<path d="m3.2969-10.203c-1.3906 1.8281-2.2812 4.375-2.2812 6.5781 0 2.2188 0.89062 4.7656 2.2812 6.5938h0.78125c-1.2344-2-1.9219-4.3594-1.9219-6.5938s0.6875-4.5938 1.9219-6.5781z"/>
</symbol>
<symbol id="glyph3-25" overflow="visible">
<path d="m7.3281-5.0469c1.1406-0.54688 1.6094-1.2656 1.6094-2.4219 0-1.7656-1.1094-2.7344-3.1094-2.7344h-4.7031v10.203h1.2969v-4.3906h3.3594c1.1562 0 1.6875 0.54688 1.6875 1.8125v0.90625c0 0.64062 0.09375 1.25 0.26562 1.6719h1.5938v-0.32812c-0.54688-0.35938-0.625-0.95312-0.625-1.6094 0-0.21875 0.015625-0.46875 0.015625-0.70312 0-0.92188-0.125-1.8594-1.3906-2.4062zm0.25-2.25c0 1.2031-0.625 1.75-2 1.75h-3.1562v-3.5156h3.1562c1.0781 0 2 0.3125 2 1.7656z"/>
</symbol>
<symbol id="glyph3-26" overflow="visible">
<path d="m5.0781-9.0625h3.3438v-1.1406h-8v1.1406h3.3594v9.0625h1.2969z"/>
</symbol>
<symbol id="glyph3-27" overflow="visible">
<path d="m1.2969 2.9688c1.4062-1.8281 2.2812-4.375 2.2812-6.5781 0-2.2188-0.875-4.7656-2.2812-6.5938h-0.76562c1.2344 2 1.9219 4.3438 1.9219 6.5938 0 2.2188-0.6875 4.5938-1.9219 6.5781z"/>
</symbol>
<symbol id="glyph3-28" overflow="visible">
<path d="m2.4219-4.6406h5.5625v-1.1562h-5.5625v-3.2656h5.7656v-1.1406h-7.0625v10.203h7.3125v-1.1406h-6.0156z"/>
</symbol>
<symbol id="glyph3-29" overflow="visible">
<path d="m8.125-10.203h-1.0625c-0.23438-0.015625-1.0156-0.046875-1.25-0.046875-1.0781 0-1.7188 0.625-1.7188 1.6719v1.2344h-1.7031v-1.1406c0-0.48438 0.28125-0.73438 0.8125-0.73438h0.40625v-0.95312c-0.26562-0.0625-0.42188-0.078125-0.65625-0.078125-1.0781 0-1.7188 0.625-1.7188 1.6719v1.2344h-0.98438v0.95312h0.98438v6.3906h1.1562v-6.3906h1.7031v6.3906h1.1562v-6.3906h1.7031v6.3906h1.1719v-7.3438h-2.875v-1.1406c0-0.48438 0.28125-0.73438 0.8125-0.73438h0.89062v0.48438h1.1719z"/>
</symbol>
<symbol id="glyph3-30" overflow="visible">
<path d="m4.7812-0.82812c-2.2969 0-2.875-1.3125-2.875-2.3438v-0.078125h-1.2344c0.046875 2.9062 2.2656 3.5781 4.0312 3.5781 3.1875 0 3.9844-1.875 3.9844-3.125 0-1.2656-0.78125-2.1875-2.1562-2.5625l-2.5625-0.6875c-1.2344-0.34375-1.6875-0.73438-1.6875-1.5156 0-1.0312 0.90625-1.7188 2.2812-1.7188 1.625 0 2.5312 0.73438 2.5469 2.0781h1.2344c-0.015625-2.0156-1.3906-3.1719-3.7344-3.1719-2.25 0-3.625 1.1562-3.625 3 0 1.25 0.65625 2.0312 2 2.375l2.5312 0.67188c1.2812 0.34375 1.875 0.85938 1.875 1.6562 0 0.71875-0.39062 1.8438-2.6094 1.8438z"/>
</symbol>
<symbol id="glyph3-31" overflow="visible">
<path d="m0.84375 3.0469h1.1719v-3.8125c0.60938 0.75 1.2969 1.0938 2.25 1.0938 1.8906 0 3.1406-1.5312 3.1406-3.875 0-2.4531-1.2031-4-3.1562-4-0.98438 0-1.7812 0.45312-2.3281 1.3125v-1.1094h-1.0781zm3.2188-9.5c1.2812 0 2.125 1.1406 2.125 2.8906 0 1.6562-0.85938 2.7969-2.125 2.7969-1.2344 0-2.0469-1.125-2.0469-2.8438s0.8125-2.8438 2.0469-2.8438z"/>
</symbol>
<symbol id="glyph3-32" overflow="visible">
<path d="m6.9844 3.0469v-10.391h-1.0312v0.98438c-0.54688-0.76562-1.375-1.1875-2.3438-1.1875-1.9219 0-3.1875 1.5781-3.1875 4.0156 0 2.3906 1.2031 3.8594 3.1406 3.8594 1.0156 0 1.7188-0.375 2.2656-1.1719v3.8906zm-3.2031-9.5c1.25 0 2.0469 1.125 2.0469 2.8906 0 1.6719-0.8125 2.7969-2.0469 2.7969-1.2969 0-2.1406-1.1406-2.1406-2.8438s0.84375-2.8438 2.1406-2.8438z"/>
</symbol>
<symbol id="glyph3-33" overflow="visible">
<path d="m2.4219-4.6406h4.875v-1.1562h-4.875v-3.2656h5.5469v-1.1406h-6.8438v10.203h1.2969z"/>
</symbol>
<symbol id="glyph3-34" overflow="visible">
<path d="m3.4375 0.32812c0.9375 0 1.5781-0.39062 2.2344-1.3281v0.39062c0 1.6719-0.39062 2.6875-2.0469 2.6875-0.35938 0-1.5781-0.046875-1.7812-1.2344h-1.1875c0.125 1.375 1.2031 2.2031 2.9219 2.2031 2.7969 0 3.2812-1.7031 3.2812-4.25v-6.1406h-1.2188l0.14062 1.0781c-0.59375-0.875-1.2969-1.2812-2.2344-1.2812-1.8594 0-3.125 1.625-3.125 4 0 2.4062 1.3594 3.875 3.0156 3.875zm0.23438-6.7969c1.25 0 2 1.0625 2 2.9062 0 1.75-0.76562 2.8125-1.9844 2.8125-1.2812 0-2.0469-1.0781-2.0469-2.8594 0-1.7656 0.78125-2.8594 2.0312-2.8594z"/>
</symbol>
<symbol id="glyph3-35" overflow="visible">
<path d="m6.6562-7.3438h-1.2188v-1.1406c0-0.48438 0.28125-0.73438 0.8125-0.73438h0.40625v-0.95312c-0.26562-0.0625-0.42188-0.078125-0.67188-0.078125-1.0781 0-1.7188 0.625-1.7188 1.6719v1.2344h-1.875v-1.1406c0-0.48438 0.28125-0.73438 0.8125-0.73438h0.40625v-0.95312c-0.26562-0.0625-0.42188-0.078125-0.65625-0.078125-1.0781 0-1.7188 0.625-1.7188 1.6719v1.2344h-0.98438v0.95312h0.98438v6.3906h1.1562v-6.3906h1.875v6.3906h1.1719v-6.3906h1.2188z"/>
</symbol>
<symbol id="glyph3-36" overflow="visible">
<path d="m2.5781-1.4531h-1.4531v1.4531h1.4531zm0-5.8906h-1.4531v1.4688h1.4531z"/>
</symbol>
<symbol id="glyph3-37" overflow="visible">
<path d="m2.4219-10.203h-1.2969v10.203h6.3438v-1.1406h-5.0469z"/>
</symbol>
<symbol id="glyph3-38" overflow="visible">
<path d="m5.2969-7.3438-2.0312 5.7188-1.875-5.7188h-1.25l2.4844 7.375-0.45312 1.1562c-0.20312 0.51562-0.45312 0.71875-0.9375 0.71875-0.17188 0-0.35938-0.03125-0.625-0.09375v1.0625c0.25 0.125 0.48438 0.17188 0.79688 0.17188 0.79688 0 1.4844-0.42188 1.8906-1.5l3.25-8.8906z"/>
</symbol>
<symbol id="glyph3-39" overflow="visible">
<path d="m3.9844 0 2.8125-7.3438h-1.3125l-2.0625 5.9531-1.9688-5.9531h-1.3125l2.5781 7.3438z"/>
</symbol>
<symbol id="glyph3-40" overflow="visible">
<path d="m3.9844-3.7969 2.4688-3.5469h-1.3125l-1.7656 2.6719-1.7656-2.6719h-1.3281l2.4531 3.6094-2.5938 3.7344h1.3281l1.8594-2.8125 1.8438 2.8125h1.3594z"/>
</symbol>
<symbol id="glyph3-41" overflow="visible">
<path d="m1.2188-1.4531v1.4531h0.73438v0.25c0 0.96875-0.20312 1.25-0.73438 1.2812v0.53125c0.98438 0 1.4688-0.64062 1.4688-1.8438v-1.6719z"/>
</symbol>
<symbol id="glyph3-42" overflow="visible">
<path d="m2.5781-1.4531h-1.4531v1.4531h1.4531z"/>
</symbol>
<symbol id="glyph3-43" overflow="visible">
<path d="m0.5625-4.9844c0 2.0938 0.92188 5.3125 4.6094 5.3125 2.4844 0 3.8906-1.3438 4.1875-4.0469h-1.3438c-0.29688 1.9219-1.125 2.8906-2.8281 2.8906-2.0312 0-3.3281-1.625-3.3281-4.1719 0-2.6094 1.2344-4.2188 3.2031-4.2188 1.6562 0 2.4688 0.75 2.7656 2.1719h1.3281c-0.40625-2.2344-1.6875-3.3281-3.9375-3.3281-3.7188 0-4.6562 3.2656-4.6562 5.3906z"/>
</symbol>
<symbol id="glyph3-44" overflow="visible">
<path d="m3.6406-7.3438h-1.2188v-1.1406c0-0.48438 0.28125-0.73438 0.8125-0.73438h0.40625v-0.95312c-0.26562-0.0625-0.42188-0.078125-0.65625-0.078125-1.0781 0-1.7188 0.625-1.7188 1.6719v1.2344h-0.98438v0.95312h0.98438v6.3906h1.1562v-6.3906h1.2188z"/>
</symbol>
<symbol id="glyph3-45" overflow="visible">
<path d="m2-10.203h-1.1562v10.203h1.1562v-2.8594l1.1406-1.1094 2.4688 3.9688h1.4531l-3-4.7969 2.5469-2.5469h-1.5l-3.1094 3.1094z"/>
</symbol>
<symbol id="glyph3-46" overflow="visible">
<path d="m1.8594-5.0625c0-2.5156 1.4375-4.1562 3.5938-4.1562 1.5469 0 2.6719 0.79688 2.9531 2.1094h1.3281c-0.375-2.0781-1.9375-3.2656-4.2812-3.2656-3.9062 0-4.8906 3.3281-4.8906 5.375 0 3.1406 1.9219 5.3281 4.6719 5.3281 1.3906 0 2.5-0.53125 3.4844-1.625l0.32812 1.3594h0.82812v-5.4531h-4.2656v1.1562h3.1094v0.26562c0 1.8281-1.3438 3.1406-3.2031 3.1406-2.9219 0-3.6562-2.6094-3.6562-4.2344z"/>
</symbol>
<symbol id="glyph3-47" overflow="visible">
<path d="m8.4844-7.2031c0-1.9219-1.1406-3-3.1562-3h-4.2031v10.203h1.2969v-4.3281h3.2031c1.6875 0 2.8594-1.125 2.8594-2.875zm-6.0625 1.7344v-3.5938h2.7188c1.25 0 1.9844 0.67188 1.9844 1.7969s-0.73438 1.7969-1.9844 1.7969z"/>
</symbol>
<symbol id="glyph3-48" overflow="visible">
<path d="m7.6562-10.203v7.1719c0 1.3594-1 2.2031-2.625 2.2031-1.5 0-2.6094-0.67188-2.6094-2.2031v-7.1719h-1.2969v7.1719c0 2.0625 1.4844 3.3594 3.9062 3.3594 2.3906 0 3.9219-1.3281 3.9219-3.3594v-7.1719z"/>
</symbol>
<symbol id="glyph3-49" overflow="visible">
<path d="m6.6094-3.0625 1.0469 3.0625h1.4531l-3.5781-10.203h-1.6875l-3.6406 10.203h1.3906l1.0781-3.0625zm-0.35938-1.0938h-3.25l1.6719-4.6562z"/>
</symbol>
<symbol id="glyph3-50" overflow="visible">
<path d="m10.422-4.9375c0-3.2969-1.9531-5.4375-4.9531-5.4375-2.9219 0-4.9062 2.1562-4.9062 5.3438 0 3.2031 1.9844 5.3594 4.9219 5.3594 3.0625 0 4.9375-2.3281 4.9375-5.2656zm-4.9531-4.2812c2.2188 0 3.6406 1.6719 3.6406 4.25 0 2.4688-1.4688 4.1406-3.625 4.1406-2.1719 0-3.625-1.6719-3.625-4.2031 0-2.5156 1.4531-4.1875 3.6094-4.1875z"/>
</symbol>
<symbol id="glyph3-51" overflow="visible">
<path d="m5.375-5.2344 3.4375-4.9688h-1.5469l-2.625 4-2.625-4h-1.5781l3.3906 4.9688-3.625 5.2344h1.5938l2.7969-4.25 2.7812 4.25h1.6094z"/>
</symbol>
<symbol id="glyph3-52" overflow="visible">
<path d="m6.6562-9.9219h-5.1094l-0.75 5.4062h1.1406c0.5625-0.6875 1.0469-0.9375 1.8125-0.9375 1.3281 0 2.1719 0.92188 2.1719 2.3906 0 1.4219-0.82812 2.2969-2.1719 2.2969-1.0781 0-1.7344-0.54688-2.0312-1.6719h-1.2344c0.125 0.64062 0.5 2.7656 3.2969 2.7656 2 0 3.4062-1.4688 3.4062-3.5625 0-1.9531-1.3125-3.2969-3.2188-3.2969-0.6875 0-1.25 0.17188-1.8281 0.59375l0.39062-2.7656h4.125z"/>
</symbol>
<symbol id="glyph3-53" overflow="visible">
<path d="m3.625-7.0625v7.0625h1.2344v-9.9219h-0.8125c-0.4375 1.5156-0.71875 1.7344-2.625 1.9688v0.89062z"/>
</symbol>
<symbol id="glyph3-54" overflow="visible">
<path d="m9.0938-10.203h-1.2188v8.3438l-5.3438-8.3438h-1.4062v10.203h1.2344v-8.2812l5.2656 8.2812h1.4688z"/>
</symbol>
<symbol id="glyph3-55" overflow="visible">
<path d="m2.7188-10.203h-1.3125v10.203h1.3125z"/>
</symbol>
<symbol id="glyph3-56" overflow="visible">
<path d="m7.8125 0 2.1562-7.3438h-1.3125l-1.4531 5.7188-1.4531-5.7188h-1.4219l-1.4062 5.7188-1.5-5.7188h-1.2812l2.125 7.3438h1.3125l1.4219-5.75 1.4844 5.75z"/>
</symbol>
<symbol id="glyph3-57" overflow="visible">
<path d="m8.7344-2.9062c0-1.2344-0.5625-1.9844-1.8594-2.4844 0.92188-0.4375 1.4062-1.1875 1.4062-2.2188 0-1.0469-0.59375-2.5938-3.0156-2.5938h-4.1406v10.203h4.5938c1.8125 0 3.0156-1.1562 3.0156-2.9062zm-1.75-4.5312c0 1.2188-0.8125 1.625-2.0469 1.625h-2.5156v-3.25h2.5156c1.0938 0 2.0469 0.3125 2.0469 1.625zm-1.3906 6.2969h-3.1719v-3.5156h3.1719c1.2031 0 1.8438 0.71875 1.8438 1.7656 0 0.70312-0.375 1.75-1.8438 1.75z"/>
</symbol>
<clipPath id="clip1">
<path d="m0 0h793.42v286.53h-793.42z"/>
</clipPath>
</defs>
<g clip-path="url(#clip1)">
<path d="m0 0h793.42v286.53h-793.42z" fill="#fff" fill-rule="evenodd"/>
</g>
<g>
<g>
<use x="39.713" y="273.487331" xlink:href="#glyph0-1"/>
<use x="395.291" y="273.487331" xlink:href="#glyph0-1"/>
</g>
<path transform="matrix(1 0 0 -1 0 286.55)" d="m55.617 279.36h0.027343c-8.0234 0-15.875-2.0977-22.82-6.125-6.9141-3.9961-12.672-9.75-16.668-16.668-4.0234-6.9414-6.1211-14.797-6.1211-22.816v-182.41c0-8.0234 2.0977-15.875 6.1211-22.82 3.9961-6.9141 9.7539-12.672 16.668-16.668 6.9453-4.0234 14.797-6.1211 22.82-6.1211h288.85c8.0234 0 15.875 2.0977 22.82 6.1211 6.918 3.9961 12.672 9.7539 16.668 16.668 4.0273 6.9453 6.125 14.797 6.125 22.82v182.44-0.027344c0 8.0195-2.0977 15.875-6.125 22.816-3.9961 6.918-9.75 12.672-16.668 16.668-6.9453 4.0273-14.797 6.125-22.82 6.125z" fill="#287fb8" fill-rule="evenodd" stroke="#7088aa" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="1.5023"/>
<g>
<use x="31.209" y="40.989331" xlink:href="#glyph1-1"/>
<use x="46.887" y="40.989331" xlink:href="#glyph1-2"/>
<use x="57.975" y="40.989331" xlink:href="#glyph1-3"/>
<use x="69.081" y="40.989331" xlink:href="#glyph1-4"/>
<use x="79.575" y="40.989331" xlink:href="#glyph1-5"/>
<use x="84.453" y="40.989331" xlink:href="#glyph1-6"/>
<use x="94.461" y="40.989331" xlink:href="#glyph1-7"/>
<use x="99.465" y="40.989331" xlink:href="#glyph1-8"/>
<use x="104.469" y="40.989331" xlink:href="#glyph1-7"/>
<use x="109.545" y="40.989331" xlink:href="#glyph1-9"/>
<use x="120.921" y="40.989331" xlink:href="#glyph1-4"/>
<use x="131.325" y="40.989331" xlink:href="#glyph1-10"/>
<use x="141.513" y="40.989331" xlink:href="#glyph1-11"/>
<use x="147.597" y="40.989331" xlink:href="#glyph1-12"/>
<use x="158.685" y="40.989331" xlink:href="#glyph1-13"/>
<use x="165.759" y="40.989331" xlink:href="#glyph1-4"/>
<use x="176.163" y="40.989331" xlink:href="#glyph1-6"/>
<use x="31.209" y="71.688331" xlink:href="#glyph2-1"/>
<use x="48.189" y="75.203331" xlink:href="#glyph3-1"/>
<use x="57.192929" y="75.203331" xlink:href="#glyph3-2"/>
<use x="64.880576" y="75.203331" xlink:href="#glyph3-3"/>
<use x="69.571581" y="75.203331" xlink:href="#glyph3-4"/>
<use x="72.666244" y="75.203331" xlink:href="#glyph3-5"/>
<use x="80.073831" y="75.203331" xlink:href="#glyph3-6"/>
<use x="87.663457" y="75.203331" xlink:href="#glyph3-7"/>
<use x="94.566936" y="75.203331" xlink:href="#glyph3-8"/>
<use x="98.067686" y="75.203331" xlink:href="#glyph3-9"/>
<use x="105.853354" y="75.203331" xlink:href="#glyph3-10"/>
<use x="115.739472" y="75.203331" xlink:href="#glyph3-11"/>
<use x="119.632306" y="75.203331" xlink:href="#glyph3-12"/>
<use x="127.417974" y="75.203331" xlink:href="#glyph3-10"/>
<use x="137.304092" y="75.203331" xlink:href="#glyph3-8"/>
<use x="140.804842" y="75.203331" xlink:href="#glyph3-7"/>
<use x="147.708321" y="75.203331" xlink:href="#glyph3-13"/>
<use x="151.699176" y="75.203331" xlink:href="#glyph3-14"/>
<use x="159.106763" y="75.203331" xlink:href="#glyph3-15"/>
<use x="166.696389" y="75.203331" xlink:href="#glyph3-16"/>
<use x="173.697889" y="75.203331" xlink:href="#glyph3-4"/>
<use x="176.890573" y="75.203331" xlink:href="#glyph3-17"/>
<use x="179.887215" y="75.203331" xlink:href="#glyph3-7"/>
<use x="31.209" y="89.887331" xlink:href="#glyph2-1"/>
<use x="48.189" y="93.402331" xlink:href="#glyph3-18"/>
<use x="60.077547" y="93.402331" xlink:href="#glyph3-5"/>
<use x="67.485134" y="93.402331" xlink:href="#glyph3-19"/>
<use x="78.869573" y="93.402331" xlink:href="#glyph3-14"/>
<use x="86.361178" y="93.402331" xlink:href="#glyph3-15"/>
<use x="93.866786" y="93.402331" xlink:href="#glyph3-13"/>
<use x="97.857641" y="93.402331" xlink:href="#glyph3-20"/>
<use x="102.548646" y="93.402331" xlink:href="#glyph3-21"/>
<use x="110.348317" y="93.402331" xlink:href="#glyph3-2"/>
<use x="118.035964" y="93.402331" xlink:href="#glyph3-7"/>
<use x="124.939443" y="93.402331" xlink:href="#glyph3-14"/>
<use x="132.431048" y="93.402331" xlink:href="#glyph3-22"/>
<use x="140.230719" y="93.402331" xlink:href="#glyph3-8"/>
<use x="143.633448" y="93.402331" xlink:href="#glyph3-19"/>
<use x="155.017887" y="93.402331" xlink:href="#glyph3-14"/>
<use x="162.509492" y="93.402331" xlink:href="#glyph3-13"/>
<use x="166.416329" y="93.402331" xlink:href="#glyph3-23"/>
<use x="174.005955" y="93.402331" xlink:href="#glyph3-5"/>
<use x="181.413542" y="93.402331" xlink:href="#glyph3-22"/>
<use x="189.213213" y="93.402331" xlink:href="#glyph3-7"/>
<use x="196.20071" y="93.402331" xlink:href="#glyph3-8"/>
<use x="199.70146" y="93.402331" xlink:href="#glyph3-24"/>
<use x="204.392465" y="93.402331" xlink:href="#glyph3-18"/>
<use x="216.196994" y="93.402331" xlink:href="#glyph3-25"/>
<use x="226.181133" y="93.402331" xlink:href="#glyph3-26"/>
<use x="235.073038" y="93.402331" xlink:href="#glyph3-27"/>
<use x="48.189" y="108.198331" xlink:href="#glyph2-1"/>
<use x="65.197" y="111.713331" xlink:href="#glyph3-28"/>
<use x="74.088905" y="111.713331" xlink:href="#glyph3-29"/>
<use x="83.190855" y="111.713331" xlink:href="#glyph3-16"/>
<use x="90.276373" y="111.713331" xlink:href="#glyph3-4"/>
<use x="93.371036" y="111.713331" xlink:href="#glyph3-14"/>
<use x="100.862641" y="111.713331" xlink:href="#glyph3-15"/>
<use x="108.368249" y="111.713331" xlink:href="#glyph3-13"/>
<use x="112.359104" y="111.713331" xlink:href="#glyph3-8"/>
<use x="115.859854" y="111.713331" xlink:href="#glyph3-30"/>
<use x="125.157846" y="111.713331" xlink:href="#glyph3-25"/>
<use x="135.141985" y="111.713331" xlink:href="#glyph3-26"/>
<use x="144.03389" y="111.713331" xlink:href="#glyph3-8"/>
<use x="147.436619" y="111.713331" xlink:href="#glyph3-2"/>
<use x="155.124266" y="111.713331" xlink:href="#glyph3-15"/>
<use x="162.713892" y="111.713331" xlink:href="#glyph3-22"/>
<use x="170.513563" y="111.713331" xlink:href="#glyph3-8"/>
<use x="174.014313" y="111.713331" xlink:href="#glyph3-26"/>
<use x="182.8222" y="111.713331" xlink:href="#glyph3-25"/>
<use x="192.806339" y="111.713331" xlink:href="#glyph3-26"/>
<use x="201.698244" y="111.713331" xlink:href="#glyph3-8"/>
<use x="205.198994" y="111.713331" xlink:href="#glyph3-4"/>
<use x="208.293657" y="111.713331" xlink:href="#glyph3-19"/>
<use x="219.678096" y="111.713331" xlink:href="#glyph3-31"/>
<use x="227.477767" y="111.713331" xlink:href="#glyph3-17"/>
<use x="230.474409" y="111.713331" xlink:href="#glyph3-14"/>
<use x="237.881996" y="111.713331" xlink:href="#glyph3-19"/>
<use x="249.266435" y="111.713331" xlink:href="#glyph3-14"/>
<use x="256.75804" y="111.713331" xlink:href="#glyph3-15"/>
<use x="264.263648" y="111.713331" xlink:href="#glyph3-13"/>
<use x="268.254503" y="111.713331" xlink:href="#glyph3-2"/>
<use x="275.94215" y="111.713331" xlink:href="#glyph3-13"/>
<use x="279.848987" y="111.713331" xlink:href="#glyph3-4"/>
<use x="283.041671" y="111.713331" xlink:href="#glyph3-5"/>
<use x="290.449258" y="111.713331" xlink:href="#glyph3-15"/>
<use x="297.954866" y="111.713331" xlink:href="#glyph3-7"/>
<use x="48.189" y="126.510331" xlink:href="#glyph2-1"/>
<use x="65.197" y="129.912331" xlink:href="#glyph3-18"/>
<use x="77.085547" y="129.912331" xlink:href="#glyph3-5"/>
<use x="84.577152" y="129.912331" xlink:href="#glyph3-19"/>
<use x="95.961591" y="129.912331" xlink:href="#glyph3-14"/>
<use x="103.369178" y="129.912331" xlink:href="#glyph3-15"/>
<use x="110.874786" y="129.912331" xlink:href="#glyph3-13"/>
<use x="114.865641" y="129.912331" xlink:href="#glyph3-8"/>
<use x="118.366391" y="129.912331" xlink:href="#glyph3-21"/>
<use x="126.166062" y="129.912331" xlink:href="#glyph3-2"/>
<use x="133.853709" y="129.912331" xlink:href="#glyph3-7"/>
<use x="140.757188" y="129.912331" xlink:href="#glyph3-14"/>
<use x="148.248793" y="129.912331" xlink:href="#glyph3-22"/>
<use x="156.048464" y="129.912331" xlink:href="#glyph3-8"/>
<use x="159.451193" y="129.912331" xlink:href="#glyph3-16"/>
<use x="166.536711" y="129.912331" xlink:href="#glyph3-5"/>
<use x="174.028316" y="129.912331" xlink:href="#glyph3-15"/>
<use x="181.533924" y="129.912331" xlink:href="#glyph3-7"/>
<use x="188.521421" y="129.912331" xlink:href="#glyph3-13"/>
<use x="192.512276" y="129.912331" xlink:href="#glyph3-3"/>
<use x="197.119263" y="129.912331" xlink:href="#glyph3-6"/>
<use x="204.708889" y="129.912331" xlink:href="#glyph3-16"/>
<use x="211.794407" y="129.912331" xlink:href="#glyph3-13"/>
<use x="215.701244" y="129.912331" xlink:href="#glyph3-4"/>
<use x="218.795907" y="129.912331" xlink:href="#glyph3-5"/>
<use x="226.287512" y="129.912331" xlink:href="#glyph3-15"/>
<use x="48.189" y="144.709331" xlink:href="#glyph2-1"/>
<use x="65.197" y="148.195331" xlink:href="#glyph3-1"/>
<use x="74.200929" y="148.195331" xlink:href="#glyph3-2"/>
<use x="81.888576" y="148.195331" xlink:href="#glyph3-3"/>
<use x="86.579581" y="148.195331" xlink:href="#glyph3-4"/>
<use x="89.674244" y="148.195331" xlink:href="#glyph3-5"/>
<use x="97.081831" y="148.195331" xlink:href="#glyph3-6"/>
<use x="104.671457" y="148.195331" xlink:href="#glyph3-7"/>
<use x="111.658954" y="148.195331" xlink:href="#glyph3-8"/>
<use x="115.061683" y="148.195331" xlink:href="#glyph3-14"/>
<use x="122.553288" y="148.195331" xlink:href="#glyph3-32"/>
<use x="130.352959" y="148.195331" xlink:href="#glyph3-6"/>
<use x="137.858567" y="148.195331" xlink:href="#glyph3-4"/>
<use x="141.051251" y="148.195331" xlink:href="#glyph3-17"/>
<use x="144.047893" y="148.195331" xlink:href="#glyph3-4"/>
<use x="147.142556" y="148.195331" xlink:href="#glyph3-21"/>
<use x="154.942227" y="148.195331" xlink:href="#glyph3-3"/>
<use x="159.633232" y="148.195331" xlink:href="#glyph3-4"/>
<use x="162.727895" y="148.195331" xlink:href="#glyph3-2"/>
<use x="48.189" y="162.992331" xlink:href="#glyph2-1"/>
<use x="65.197" y="166.507331" xlink:href="#glyph3-33"/>
<use x="73.584797" y="166.507331" xlink:href="#glyph3-5"/>
<use x="81.076402" y="166.507331" xlink:href="#glyph3-3"/>
<use x="85.683389" y="166.507331" xlink:href="#glyph3-16"/>
<use x="92.768907" y="166.507331" xlink:href="#glyph3-4"/>
<use x="95.961591" y="166.507331" xlink:href="#glyph3-15"/>
<use x="103.467199" y="166.507331" xlink:href="#glyph3-34"/>
<use x="111.168849" y="166.507331" xlink:href="#glyph3-8"/>
<use x="114.669599" y="166.507331" xlink:href="#glyph3-2"/>
<use x="122.273228" y="166.507331" xlink:href="#glyph3-31"/>
<use x="130.072899" y="166.507331" xlink:href="#glyph3-31"/>
<use x="137.87257" y="166.507331" xlink:href="#glyph3-3"/>
<use x="142.563575" y="166.507331" xlink:href="#glyph3-5"/>
<use x="150.05518" y="166.507331" xlink:href="#glyph3-2"/>
<use x="157.658809" y="166.507331" xlink:href="#glyph3-16"/>
<use x="164.744327" y="166.507331" xlink:href="#glyph3-23"/>
<use x="172.333953" y="166.507331" xlink:href="#glyph3-14"/>
<use x="179.74154" y="166.507331" xlink:href="#glyph3-7"/>
<use x="31.209" y="181.191331" xlink:href="#glyph2-1"/>
<use x="48.189" y="184.706331" xlink:href="#glyph3-10"/>
<use x="58.075118" y="184.706331" xlink:href="#glyph3-4"/>
<use x="61.169781" y="184.706331" xlink:href="#glyph3-35"/>
<use x="68.07326" y="184.706331" xlink:href="#glyph3-14"/>
<use x="75.564865" y="184.706331" xlink:href="#glyph3-3"/>
<use x="80.171852" y="184.706331" xlink:href="#glyph3-14"/>
<use x="87.663457" y="184.706331" xlink:href="#glyph3-15"/>
<use x="95.169065" y="184.706331" xlink:href="#glyph3-13"/>
<use x="99.15992" y="184.706331" xlink:href="#glyph3-8"/>
<use x="102.66067" y="184.706331" xlink:href="#glyph3-16"/>
<use x="109.746188" y="184.706331" xlink:href="#glyph3-5"/>
<use x="117.153775" y="184.706331" xlink:href="#glyph3-17"/>
<use x="120.150417" y="184.706331" xlink:href="#glyph3-17"/>
<use x="123.147059" y="184.706331" xlink:href="#glyph3-4"/>
<use x="126.241722" y="184.706331" xlink:href="#glyph3-7"/>
<use x="133.229219" y="184.706331" xlink:href="#glyph3-4"/>
<use x="136.323882" y="184.706331" xlink:href="#glyph3-5"/>
<use x="143.815487" y="184.706331" xlink:href="#glyph3-15"/>
<use x="151.321095" y="184.706331" xlink:href="#glyph3-8"/>
<use x="154.821845" y="184.706331" xlink:href="#glyph3-7"/>
<use x="161.809342" y="184.706331" xlink:href="#glyph3-31"/>
<use x="169.609013" y="184.706331" xlink:href="#glyph3-2"/>
<use x="177.212642" y="184.706331" xlink:href="#glyph3-16"/>
<use x="184.29816" y="184.706331" xlink:href="#glyph3-14"/>
<use x="191.705747" y="184.706331" xlink:href="#glyph3-7"/>
<use x="198.693244" y="184.706331" xlink:href="#glyph3-36"/>
<use x="202.193994" y="184.706331" xlink:href="#glyph3-8"/>
<use x="205.694744" y="184.706331" xlink:href="#glyph3-16"/>
<use x="212.780262" y="184.706331" xlink:href="#glyph3-14"/>
<use x="220.187849" y="184.706331" xlink:href="#glyph3-15"/>
<use x="227.693457" y="184.706331" xlink:href="#glyph3-13"/>
<use x="231.684312" y="184.706331" xlink:href="#glyph3-3"/>
<use x="236.375317" y="184.706331" xlink:href="#glyph3-2"/>
<use x="244.062964" y="184.706331" xlink:href="#glyph3-17"/>
<use x="247.059606" y="184.706331" xlink:href="#glyph3-11"/>
<use x="250.95244" y="184.706331" xlink:href="#glyph3-16"/>
<use x="258.037958" y="184.706331" xlink:href="#glyph3-6"/>
<use x="265.627584" y="184.706331" xlink:href="#glyph3-19"/>
<use x="277.012023" y="184.706331" xlink:href="#glyph3-6"/>
<use x="284.517631" y="184.706331" xlink:href="#glyph3-17"/>
<use x="287.514273" y="184.706331" xlink:href="#glyph3-2"/>
<use x="295.20192" y="184.706331" xlink:href="#glyph3-15"/>
<use x="302.791546" y="184.706331" xlink:href="#glyph3-13"/>
<use x="31.209" y="199.502331" xlink:href="#glyph2-1"/>
<use x="48.189" y="202.989331" xlink:href="#glyph3-28"/>
<use x="57.080905" y="202.989331" xlink:href="#glyph3-15"/>
<use x="64.670531" y="202.989331" xlink:href="#glyph3-13"/>
<use x="68.577368" y="202.989331" xlink:href="#glyph3-3"/>
<use x="73.268373" y="202.989331" xlink:href="#glyph3-5"/>
<use x="80.67596" y="202.989331" xlink:href="#glyph3-31"/>
<use x="88.475631" y="202.989331" xlink:href="#glyph3-4"/>
<use x="91.570294" y="202.989331" xlink:href="#glyph3-16"/>
<use x="98.655812" y="202.989331" xlink:href="#glyph3-8"/>
<use x="102.156562" y="202.989331" xlink:href="#glyph3-7"/>
<use x="109.144059" y="202.989331" xlink:href="#glyph3-13"/>
<use x="113.050896" y="202.989331" xlink:href="#glyph3-2"/>
<use x="120.738543" y="202.989331" xlink:href="#glyph3-21"/>
<use x="128.538214" y="202.989331" xlink:href="#glyph3-4"/>
<use x="131.632877" y="202.989331" xlink:href="#glyph3-17"/>
<use x="134.629519" y="202.989331" xlink:href="#glyph3-4"/>
<use x="137.724182" y="202.989331" xlink:href="#glyph3-7"/>
<use x="144.711679" y="202.989331" xlink:href="#glyph3-2"/>
<use x="152.399326" y="202.989331" xlink:href="#glyph3-13"/>
<use x="156.306163" y="202.989331" xlink:href="#glyph3-4"/>
<use x="159.498847" y="202.989331" xlink:href="#glyph3-5"/>
<use x="166.906434" y="202.989331" xlink:href="#glyph3-15"/>
<use x="31.209" y="217.701331" xlink:href="#glyph2-1"/>
<use x="48.189" y="221.187331" xlink:href="#glyph3-37"/>
<use x="56.072689" y="221.187331" xlink:href="#glyph3-5"/>
<use x="63.564294" y="221.187331" xlink:href="#glyph3-16"/>
<use x="70.649812" y="221.187331" xlink:href="#glyph3-2"/>
<use x="78.253441" y="221.187331" xlink:href="#glyph3-17"/>
<use x="81.250083" y="221.187331" xlink:href="#glyph3-17"/>
<use x="84.246725" y="221.187331" xlink:href="#glyph3-38"/>
<use x="90.940159" y="221.187331" xlink:href="#glyph3-8"/>
<use x="94.440909" y="221.187331" xlink:href="#glyph3-39"/>
<use x="101.428406" y="221.187331" xlink:href="#glyph3-2"/>
<use x="109.116053" y="221.187331" xlink:href="#glyph3-3"/>
<use x="113.807058" y="221.187331" xlink:href="#glyph3-38"/>
<use x="120.500492" y="221.187331" xlink:href="#glyph3-4"/>
<use x="123.595155" y="221.187331" xlink:href="#glyph3-15"/>
<use x="131.100763" y="221.187331" xlink:href="#glyph3-34"/>
<use x="138.802413" y="221.187331" xlink:href="#glyph3-8"/>
<use x="142.303163" y="221.187331" xlink:href="#glyph3-3"/>
<use x="146.994168" y="221.187331" xlink:href="#glyph3-14"/>
<use x="154.401755" y="221.187331" xlink:href="#glyph3-17"/>
<use x="157.398397" y="221.187331" xlink:href="#glyph3-2"/>
<use x="165.086044" y="221.187331" xlink:href="#glyph3-40"/>
<use x="171.779478" y="221.187331" xlink:href="#glyph3-2"/>
<use x="179.467125" y="221.187331" xlink:href="#glyph3-13"/>
<use x="183.45798" y="221.187331" xlink:href="#glyph3-4"/>
<use x="186.552643" y="221.187331" xlink:href="#glyph3-5"/>
<use x="193.96023" y="221.187331" xlink:href="#glyph3-15"/>
<use x="201.549856" y="221.187331" xlink:href="#glyph3-8"/>
<use x="205.050606" y="221.187331" xlink:href="#glyph3-3"/>
<use x="209.657593" y="221.187331" xlink:href="#glyph3-2"/>
<use x="217.34524" y="221.187331" xlink:href="#glyph3-13"/>
<use x="221.336095" y="221.187331" xlink:href="#glyph3-14"/>
<use x="228.743682" y="221.187331" xlink:href="#glyph3-7"/>
<use x="235.731179" y="221.187331" xlink:href="#glyph3-41"/>
<use x="239.722034" y="221.187331" xlink:href="#glyph3-8"/>
<use x="243.124763" y="221.187331" xlink:href="#glyph3-14"/>
<use x="250.616368" y="221.187331" xlink:href="#glyph3-42"/>
<use x="254.117118" y="221.187331" xlink:href="#glyph3-34"/>
<use x="261.720747" y="221.187331" xlink:href="#glyph3-42"/>
<use x="265.221497" y="221.187331" xlink:href="#glyph3-8"/>
<use x="268.722247" y="221.187331" xlink:href="#glyph3-13"/>
<use x="272.713102" y="221.187331" xlink:href="#glyph3-5"/>
<use x="280.120689" y="221.187331" xlink:href="#glyph3-8"/>
<use x="283.621439" y="221.187331" xlink:href="#glyph3-4"/>
<use x="286.716102" y="221.187331" xlink:href="#glyph3-15"/>
<use x="294.305728" y="221.187331" xlink:href="#glyph3-16"/>
<use x="301.307228" y="221.187331" xlink:href="#glyph3-17"/>
<use x="304.30387" y="221.187331" xlink:href="#glyph3-6"/>
<use x="311.893496" y="221.187331" xlink:href="#glyph3-22"/>
<use x="319.693167" y="221.187331" xlink:href="#glyph3-14"/>
<use x="48.189" y="239.499331" xlink:href="#glyph3-4"/>
<use x="51.283663" y="239.499331" xlink:href="#glyph3-15"/>
<use x="58.873289" y="239.499331" xlink:href="#glyph3-8"/>
<use x="62.374039" y="239.499331" xlink:href="#glyph3-13"/>
<use x="66.280876" y="239.499331" xlink:href="#glyph3-6"/>
<use x="73.870502" y="239.499331" xlink:href="#glyph3-3"/>
<use x="78.561507" y="239.499331" xlink:href="#glyph3-21"/>
<use x="86.361178" y="239.499331" xlink:href="#glyph3-6"/>
<use x="93.866786" y="239.499331" xlink:href="#glyph3-17"/>
<use x="96.863428" y="239.499331" xlink:href="#glyph3-14"/>
<use x="104.355033" y="239.499331" xlink:href="#glyph3-15"/>
<use x="111.860641" y="239.499331" xlink:href="#glyph3-16"/>
<use x="118.946159" y="239.499331" xlink:href="#glyph3-14"/>
<use x="126.437764" y="239.499331" xlink:href="#glyph3-8"/>
<use x="129.840493" y="239.499331" xlink:href="#glyph3-19"/>
<use x="141.224932" y="239.499331" xlink:href="#glyph3-5"/>
<use x="148.716537" y="239.499331" xlink:href="#glyph3-22"/>
<use x="156.516208" y="239.499331" xlink:href="#glyph3-14"/>
<use x="163.923795" y="239.499331" xlink:href="#glyph3-17"/>
<use x="166.920437" y="239.499331" xlink:href="#glyph3-7"/>
<use x="31.209" y="254.211331" xlink:href="#glyph2-1"/>
<use x="48.189" y="257.698331" xlink:href="#glyph3-43"/>
<use x="58.173139" y="257.698331" xlink:href="#glyph3-5"/>
<use x="65.580726" y="257.698331" xlink:href="#glyph3-6"/>
<use x="73.170352" y="257.698331" xlink:href="#glyph3-31"/>
<use x="80.970023" y="257.698331" xlink:href="#glyph3-17"/>
<use x="83.966665" y="257.698331" xlink:href="#glyph3-4"/>
<use x="87.061328" y="257.698331" xlink:href="#glyph3-15"/>
<use x="94.566936" y="257.698331" xlink:href="#glyph3-34"/>
<use x="102.268586" y="257.698331" xlink:href="#glyph3-8"/>
<use x="105.769336" y="257.698331" xlink:href="#glyph3-5"/>
<use x="113.176923" y="257.698331" xlink:href="#glyph3-44"/>
<use x="117.167778" y="257.698331" xlink:href="#glyph3-8"/>
<use x="120.668528" y="257.698331" xlink:href="#glyph3-19"/>
<use x="132.052967" y="257.698331" xlink:href="#glyph3-6"/>
<use x="139.642593" y="257.698331" xlink:href="#glyph3-17"/>
<use x="142.639235" y="257.698331" xlink:href="#glyph3-13"/>
<use x="146.546072" y="257.698331" xlink:href="#glyph3-4"/>
<use x="149.640735" y="257.698331" xlink:href="#glyph3-31"/>
<use x="157.440406" y="257.698331" xlink:href="#glyph3-17"/>
<use x="160.437048" y="257.698331" xlink:href="#glyph3-14"/>
<use x="167.928653" y="257.698331" xlink:href="#glyph3-8"/>
<use x="171.429403" y="257.698331" xlink:href="#glyph3-45"/>
<use x="178.626945" y="257.698331" xlink:href="#glyph3-14"/>
<use x="186.034532" y="257.698331" xlink:href="#glyph3-3"/>
<use x="190.725537" y="257.698331" xlink:href="#glyph3-15"/>
<use x="198.231145" y="257.698331" xlink:href="#glyph3-14"/>
<use x="205.72275" y="257.698331" xlink:href="#glyph3-17"/>
<use x="208.719392" y="257.698331" xlink:href="#glyph3-7"/>
<use x="215.622871" y="257.698331" xlink:href="#glyph3-8"/>
<use x="219.123621" y="257.698331" xlink:href="#glyph3-24"/>
<use x="223.814626" y="257.698331" xlink:href="#glyph3-14"/>
<use x="231.222213" y="257.698331" xlink:href="#glyph3-42"/>
<use x="234.722963" y="257.698331" xlink:href="#glyph3-34"/>
<use x="242.424613" y="257.698331" xlink:href="#glyph3-42"/>
<use x="245.925363" y="257.698331" xlink:href="#glyph3-8"/>
<use x="249.328092" y="257.698331" xlink:href="#glyph3-13"/>
<use x="253.318947" y="257.698331" xlink:href="#glyph3-23"/>
<use x="260.908573" y="257.698331" xlink:href="#glyph3-14"/>
<use x="268.31616" y="257.698331" xlink:href="#glyph3-3"/>
<use x="273.007165" y="257.698331" xlink:href="#glyph3-19"/>
<use x="284.391604" y="257.698331" xlink:href="#glyph3-2"/>
<use x="292.079251" y="257.698331" xlink:href="#glyph3-17"/>
<use x="295.075893" y="257.698331" xlink:href="#glyph3-8"/>
<use x="298.576643" y="257.698331" xlink:href="#glyph3-7"/>
<use x="305.480122" y="257.698331" xlink:href="#glyph3-4"/>
<use x="308.574785" y="257.698331" xlink:href="#glyph3-19"/>
<use x="319.959224" y="257.698331" xlink:href="#glyph3-6"/>
<use x="327.54885" y="257.698331" xlink:href="#glyph3-17"/>
<use x="330.545492" y="257.698331" xlink:href="#glyph3-2"/>
<use x="338.233139" y="257.698331" xlink:href="#glyph3-13"/>
<use x="342.139976" y="257.698331" xlink:href="#glyph3-4"/>
<use x="345.33266" y="257.698331" xlink:href="#glyph3-5"/>
<use x="352.740247" y="257.698331" xlink:href="#glyph3-15"/>
<use x="360.329873" y="257.698331" xlink:href="#glyph3-7"/>
<use x="367.233352" y="257.698331" xlink:href="#glyph3-27"/>
</g>
<path transform="matrix(1 0 0 -1 0 286.55)" d="m448.61 279.36h0.03125c-8.0234 0-15.875-2.0977-22.82-6.125-6.918-3.9961-12.672-9.75-16.668-16.668-4.0234-6.9414-6.1211-14.797-6.1211-22.816v-182.41c0-8.0234 2.0977-15.875 6.1211-22.82 3.9961-6.9141 9.75-12.672 16.668-16.668 6.9453-4.0234 14.797-6.1211 22.82-6.1211h288.85c8.0234 0 15.875 2.0977 22.82 6.1211 6.918 3.9961 12.672 9.7539 16.668 16.668 4.0273 6.9453 6.1211 14.797 6.1211 22.82v182.44-0.027344c0 8.0195-2.0938 15.875-6.1211 22.816-3.9961 6.918-9.75 12.672-16.668 16.668-6.9453 4.0273-14.797 6.125-22.82 6.125z" fill="#7088aa" fill-rule="evenodd" stroke="#287fb8" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="1.5023"/>
<g>
<use x="424.205" y="40.989331" xlink:href="#glyph1-14"/>
<use x="437.597" y="40.989331" xlink:href="#glyph1-10"/>
<use x="447.785" y="40.989331" xlink:href="#glyph1-13"/>
<use x="454.859" y="40.989331" xlink:href="#glyph1-3"/>
<use x="466.037" y="40.989331" xlink:href="#glyph1-15"/>
<use x="480.041" y="40.989331" xlink:href="#glyph1-10"/>
<use x="490.229" y="40.989331" xlink:href="#glyph1-13"/>
<use x="497.303" y="40.989331" xlink:href="#glyph1-4"/>
<use x="507.797" y="40.989331" xlink:href="#glyph1-7"/>
<use x="512.801" y="40.989331" xlink:href="#glyph1-8"/>
<use x="517.805" y="40.989331" xlink:href="#glyph1-7"/>
<use x="522.881" y="40.989331" xlink:href="#glyph1-16"/>
<use x="536.885" y="40.989331" xlink:href="#glyph1-17"/>
<use x="548.063" y="40.989331" xlink:href="#glyph1-11"/>
<use x="554.147" y="40.989331" xlink:href="#glyph1-18"/>
<use x="559.151" y="40.989331" xlink:href="#glyph1-19"/>
<use x="575.243" y="40.989331" xlink:href="#glyph1-18"/>
<use x="580.319" y="40.989331" xlink:href="#glyph1-6"/>
<use x="590.219" y="40.989331" xlink:href="#glyph1-10"/>
<use x="600.407" y="40.989331" xlink:href="#glyph1-11"/>
<use x="606.491" y="40.989331" xlink:href="#glyph1-18"/>
<use x="611.567" y="40.989331" xlink:href="#glyph1-2"/>
<use x="622.565" y="40.989331" xlink:href="#glyph1-20"/>
<use x="633.653" y="40.989331" xlink:href="#glyph1-6"/>
<use x="424.205" y="71.688331" xlink:href="#glyph2-1"/>
<use x="441.213" y="75.203331" xlink:href="#glyph3-46"/>
<use x="451.99531" y="75.203331" xlink:href="#glyph3-47"/>
<use x="461.279299" y="75.203331" xlink:href="#glyph3-48"/>
<use x="471.277441" y="75.203331" xlink:href="#glyph3-8"/>
<use x="474.778191" y="75.203331" xlink:href="#glyph3-11"/>
<use x="478.769046" y="75.203331" xlink:href="#glyph3-8"/>
<use x="482.269796" y="75.203331" xlink:href="#glyph3-43"/>
<use x="492.169917" y="75.203331" xlink:href="#glyph3-48"/>
<use x="502.252077" y="75.203331" xlink:href="#glyph3-10"/>
<use x="512.040174" y="75.203331" xlink:href="#glyph3-49"/>
<use x="521.422184" y="75.203331" xlink:href="#glyph3-8"/>
<use x="524.922934" y="75.203331" xlink:href="#glyph3-2"/>
<use x="532.610581" y="75.203331" xlink:href="#glyph3-15"/>
<use x="540.116189" y="75.203331" xlink:href="#glyph3-22"/>
<use x="547.91586" y="75.203331" xlink:href="#glyph3-8"/>
<use x="551.41661" y="75.203331" xlink:href="#glyph3-50"/>
<use x="562.408965" y="75.203331" xlink:href="#glyph3-31"/>
<use x="570.208636" y="75.203331" xlink:href="#glyph3-14"/>
<use x="577.700241" y="75.203331" xlink:href="#glyph3-15"/>
<use x="585.205849" y="75.203331" xlink:href="#glyph3-43"/>
<use x="595.189988" y="75.203331" xlink:href="#glyph3-37"/>
<use x="603.073677" y="75.203331" xlink:href="#glyph3-8"/>
<use x="606.574427" y="75.203331" xlink:href="#glyph3-7"/>
<use x="613.477906" y="75.203331" xlink:href="#glyph3-6"/>
<use x="621.067532" y="75.203331" xlink:href="#glyph3-31"/>
<use x="628.867203" y="75.203331" xlink:href="#glyph3-31"/>
<use x="636.666874" y="75.203331" xlink:href="#glyph3-5"/>
<use x="644.158479" y="75.203331" xlink:href="#glyph3-3"/>
<use x="648.765466" y="75.203331" xlink:href="#glyph3-13"/>
<use x="424.205" y="89.887331" xlink:href="#glyph2-1"/>
<use x="441.213" y="93.402331" xlink:href="#glyph3-46"/>
<use x="451.99531" y="93.402331" xlink:href="#glyph3-6"/>
<use x="459.584936" y="93.402331" xlink:href="#glyph3-4"/>
<use x="462.679599" y="93.402331" xlink:href="#glyph3-22"/>
<use x="470.47927" y="93.402331" xlink:href="#glyph3-14"/>
<use x="477.886857" y="93.402331" xlink:href="#glyph3-22"/>
<use x="485.686528" y="93.402331" xlink:href="#glyph3-8"/>
<use x="489.187278" y="93.402331" xlink:href="#glyph3-5"/>
<use x="496.678883" y="93.402331" xlink:href="#glyph3-3"/>
<use x="501.28587" y="93.402331" xlink:href="#glyph3-8"/>
<use x="504.78662" y="93.402331" xlink:href="#glyph3-19"/>
<use x="516.171059" y="93.402331" xlink:href="#glyph3-2"/>
<use x="523.858706" y="93.402331" xlink:href="#glyph3-15"/>
<use x="531.364314" y="93.402331" xlink:href="#glyph3-6"/>
<use x="538.95394" y="93.402331" xlink:href="#glyph3-2"/>
<use x="546.641587" y="93.402331" xlink:href="#glyph3-17"/>
<use x="549.638229" y="93.402331" xlink:href="#glyph3-8"/>
<use x="553.138979" y="93.402331" xlink:href="#glyph3-39"/>
<use x="560.042458" y="93.402331" xlink:href="#glyph3-14"/>
<use x="567.534063" y="93.402331" xlink:href="#glyph3-16"/>
<use x="574.535563" y="93.402331" xlink:href="#glyph3-13"/>
<use x="578.526418" y="93.402331" xlink:href="#glyph3-5"/>
<use x="586.018023" y="93.402331" xlink:href="#glyph3-3"/>
<use x="590.62501" y="93.402331" xlink:href="#glyph3-4"/>
<use x="593.817694" y="93.402331" xlink:href="#glyph3-7"/>
<use x="600.721173" y="93.402331" xlink:href="#glyph3-2"/>
<use x="608.40882" y="93.402331" xlink:href="#glyph3-13"/>
<use x="612.399675" y="93.402331" xlink:href="#glyph3-4"/>
<use x="615.494338" y="93.402331" xlink:href="#glyph3-5"/>
<use x="622.901925" y="93.402331" xlink:href="#glyph3-15"/>
<use x="441.213" y="111.713331" xlink:href="#glyph3-24"/>
<use x="445.904005" y="111.713331" xlink:href="#glyph3-49"/>
<use x="455.201997" y="111.713331" xlink:href="#glyph3-1"/>
<use x="464.289944" y="111.713331" xlink:href="#glyph3-51"/>
<use x="473.489915" y="111.713331" xlink:href="#glyph3-9"/>
<use x="481.275583" y="111.713331" xlink:href="#glyph3-41"/>
<use x="485.266438" y="111.713331" xlink:href="#glyph3-8"/>
<use x="488.669167" y="111.713331" xlink:href="#glyph3-49"/>
<use x="498.051177" y="111.713331" xlink:href="#glyph3-1"/>
<use x="507.055106" y="111.713331" xlink:href="#glyph3-51"/>
<use x="516.255077" y="111.713331" xlink:href="#glyph3-52"/>
<use x="524.040745" y="111.713331" xlink:href="#glyph3-53"/>
<use x="531.826413" y="111.713331" xlink:href="#glyph3-9"/>
<use x="539.612081" y="111.713331" xlink:href="#glyph3-41"/>
<use x="543.602936" y="111.713331" xlink:href="#glyph3-8"/>
<use x="547.103686" y="111.713331" xlink:href="#glyph3-54"/>
<use x="557.311873" y="111.713331" xlink:href="#glyph3-14"/>
<use x="564.71946" y="111.713331" xlink:href="#glyph3-5"/>
<use x="572.211065" y="111.713331" xlink:href="#glyph3-15"/>
<use x="579.716673" y="111.713331" xlink:href="#glyph3-41"/>
<use x="583.707528" y="111.713331" xlink:href="#glyph3-8"/>
<use x="587.208278" y="111.713331" xlink:href="#glyph3-30"/>
<use x="596.50627" y="111.713331" xlink:href="#glyph3-1"/>
<use x="605.510199" y="111.713331" xlink:href="#glyph3-28"/>
<use x="614.402104" y="111.713331" xlink:href="#glyph3-41"/>
<use x="618.392959" y="111.713331" xlink:href="#glyph3-8"/>
<use x="621.795688" y="111.713331" xlink:href="#glyph3-1"/>
<use x="630.799617" y="111.713331" xlink:href="#glyph3-30"/>
<use x="640.181627" y="111.713331" xlink:href="#glyph3-51"/>
<use x="649.381598" y="111.713331" xlink:href="#glyph3-27"/>
<use x="424.205" y="126.510331" xlink:href="#glyph2-1"/>
<use x="441.213" y="129.912331" xlink:href="#glyph3-55"/>
<use x="445.203855" y="129.912331" xlink:href="#glyph3-15"/>
<use x="452.709463" y="129.912331" xlink:href="#glyph3-15"/>
<use x="460.299089" y="129.912331" xlink:href="#glyph3-14"/>
<use x="467.706676" y="129.912331" xlink:href="#glyph3-3"/>
<use x="472.397681" y="129.912331" xlink:href="#glyph3-8"/>
<use x="475.898431" y="129.912331" xlink:href="#glyph3-17"/>
<use x="478.895073" y="129.912331" xlink:href="#glyph3-5"/>
<use x="486.30266" y="129.912331" xlink:href="#glyph3-5"/>
<use x="493.794265" y="129.912331" xlink:href="#glyph3-31"/>
<use x="501.593936" y="129.912331" xlink:href="#glyph3-8"/>
<use x="504.996665" y="129.912331" xlink:href="#glyph3-7"/>
<use x="511.984162" y="129.912331" xlink:href="#glyph3-31"/>
<use x="519.783833" y="129.912331" xlink:href="#glyph3-17"/>
<use x="522.780475" y="129.912331" xlink:href="#glyph3-4"/>
<use x="525.875138" y="129.912331" xlink:href="#glyph3-13"/>
<use x="529.865993" y="129.912331" xlink:href="#glyph3-13"/>
<use x="533.77283" y="129.912331" xlink:href="#glyph3-4"/>
<use x="536.965514" y="129.912331" xlink:href="#glyph3-15"/>
<use x="544.471122" y="129.912331" xlink:href="#glyph3-34"/>
<use x="552.172772" y="129.912331" xlink:href="#glyph3-8"/>
<use x="555.673522" y="129.912331" xlink:href="#glyph3-13"/>
<use x="559.580359" y="129.912331" xlink:href="#glyph3-5"/>
<use x="567.071964" y="129.912331" xlink:href="#glyph3-8"/>
<use x="570.572714" y="129.912331" xlink:href="#glyph3-4"/>
<use x="573.667377" y="129.912331" xlink:href="#glyph3-19"/>
<use x="585.051816" y="129.912331" xlink:href="#glyph3-31"/>
<use x="592.851487" y="129.912331" xlink:href="#glyph3-3"/>
<use x="597.542492" y="129.912331" xlink:href="#glyph3-5"/>
<use x="604.950079" y="129.912331" xlink:href="#glyph3-39"/>
<use x="611.937576" y="129.912331" xlink:href="#glyph3-14"/>
<use x="619.345163" y="129.912331" xlink:href="#glyph3-8"/>
<use x="622.845913" y="129.912331" xlink:href="#glyph3-31"/>
<use x="630.645584" y="129.912331" xlink:href="#glyph3-3"/>
<use x="635.336589" y="129.912331" xlink:href="#glyph3-14"/>
<use x="642.744176" y="129.912331" xlink:href="#glyph3-44"/>
<use x="646.735031" y="129.912331" xlink:href="#glyph3-14"/>
<use x="654.142618" y="129.912331" xlink:href="#glyph3-13"/>
<use x="658.133473" y="129.912331" xlink:href="#glyph3-16"/>
<use x="665.218991" y="129.912331" xlink:href="#glyph3-23"/>
<use x="672.724599" y="129.912331" xlink:href="#glyph3-4"/>
<use x="675.819262" y="129.912331" xlink:href="#glyph3-15"/>
<use x="683.408888" y="129.912331" xlink:href="#glyph3-34"/>
<use x="691.110538" y="129.912331" xlink:href="#glyph3-8"/>
<use x="694.611288" y="129.912331" xlink:href="#glyph3-22"/>
<use x="702.410959" y="129.912331" xlink:href="#glyph3-6"/>
<use x="709.916567" y="129.912331" xlink:href="#glyph3-14"/>
<use x="717.324154" y="129.912331" xlink:href="#glyph3-8"/>
<use x="441.213" y="148.195331" xlink:href="#glyph3-13"/>
<use x="445.203855" y="148.195331" xlink:href="#glyph3-5"/>
<use x="452.611442" y="148.195331" xlink:href="#glyph3-8"/>
<use x="456.112192" y="148.195331" xlink:href="#glyph3-2"/>
<use x="463.799839" y="148.195331" xlink:href="#glyph3-8"/>
<use x="467.300589" y="148.195331" xlink:href="#glyph3-17"/>
<use x="470.19921" y="148.195331" xlink:href="#glyph3-5"/>
<use x="477.690815" y="148.195331" xlink:href="#glyph3-56"/>
<use x="487.786978" y="148.195331" xlink:href="#glyph3-14"/>
<use x="495.194565" y="148.195331" xlink:href="#glyph3-3"/>
<use x="499.88557" y="148.195331" xlink:href="#glyph3-8"/>
<use x="503.38632" y="148.195331" xlink:href="#glyph3-15"/>
<use x="510.891928" y="148.195331" xlink:href="#glyph3-6"/>
<use x="518.481554" y="148.195331" xlink:href="#glyph3-19"/>
<use x="529.865993" y="148.195331" xlink:href="#glyph3-21"/>
<use x="537.665664" y="148.195331" xlink:href="#glyph3-14"/>
<use x="545.073251" y="148.195331" xlink:href="#glyph3-3"/>
<use x="549.764256" y="148.195331" xlink:href="#glyph3-8"/>
<use x="553.265006" y="148.195331" xlink:href="#glyph3-5"/>
<use x="560.672593" y="148.195331" xlink:href="#glyph3-44"/>
<use x="564.663448" y="148.195331" xlink:href="#glyph3-8"/>
<use x="568.164198" y="148.195331" xlink:href="#glyph3-17"/>
<use x="571.16084" y="148.195331" xlink:href="#glyph3-5"/>
<use x="578.568427" y="148.195331" xlink:href="#glyph3-2"/>
<use x="586.256074" y="148.195331" xlink:href="#glyph3-22"/>
<use x="594.055745" y="148.195331" xlink:href="#glyph3-11"/>
<use x="598.0466" y="148.195331" xlink:href="#glyph3-7"/>
<use x="604.950079" y="148.195331" xlink:href="#glyph3-13"/>
<use x="608.940934" y="148.195331" xlink:href="#glyph3-5"/>
<use x="616.348521" y="148.195331" xlink:href="#glyph3-3"/>
<use x="621.039526" y="148.195331" xlink:href="#glyph3-14"/>
<use x="628.447113" y="148.195331" xlink:href="#glyph3-8"/>
<use x="631.947863" y="148.195331" xlink:href="#glyph3-7"/>
<use x="638.93536" y="148.195331" xlink:href="#glyph3-13"/>
<use x="642.842197" y="148.195331" xlink:href="#glyph3-3"/>
<use x="647.533202" y="148.195331" xlink:href="#glyph3-14"/>
<use x="655.024807" y="148.195331" xlink:href="#glyph3-2"/>
<use x="662.628436" y="148.195331" xlink:href="#glyph3-19"/>
<use x="674.012875" y="148.195331" xlink:href="#glyph3-7"/>
<use x="424.205" y="162.992331" xlink:href="#glyph2-1"/>
<use x="441.213" y="166.507331" xlink:href="#glyph3-30"/>
<use x="450.59501" y="166.507331" xlink:href="#glyph3-31"/>
<use x="458.394681" y="166.507331" xlink:href="#glyph3-2"/>
<use x="465.99831" y="166.507331" xlink:href="#glyph3-3"/>
<use x="470.689315" y="166.507331" xlink:href="#glyph3-7"/>
<use x="477.676812" y="166.507331" xlink:href="#glyph3-14"/>
<use x="485.084399" y="166.507331" xlink:href="#glyph3-8"/>
<use x="488.585149" y="166.507331" xlink:href="#glyph3-24"/>
<use x="493.276154" y="166.507331" xlink:href="#glyph3-17"/>
<use x="496.272796" y="166.507331" xlink:href="#glyph3-4"/>
<use x="499.367459" y="166.507331" xlink:href="#glyph3-7"/>
<use x="506.354956" y="166.507331" xlink:href="#glyph3-13"/>
<use x="510.261793" y="166.507331" xlink:href="#glyph3-20"/>
<use x="514.952798" y="166.507331" xlink:href="#glyph3-21"/>
<use x="522.752469" y="166.507331" xlink:href="#glyph3-2"/>
<use x="530.440116" y="166.507331" xlink:href="#glyph3-7"/>
<use x="537.343595" y="166.507331" xlink:href="#glyph3-14"/>
<use x="544.8352" y="166.507331" xlink:href="#glyph3-22"/>
<use x="552.634871" y="166.507331" xlink:href="#glyph3-27"/>
<use x="557.325876" y="166.507331" xlink:href="#glyph3-8"/>
<use x="560.826626" y="166.507331" xlink:href="#glyph3-45"/>
<use x="568.024168" y="166.507331" xlink:href="#glyph3-14"/>
<use x="575.431755" y="166.507331" xlink:href="#glyph3-3"/>
<use x="580.12276" y="166.507331" xlink:href="#glyph3-15"/>
<use x="587.628368" y="166.507331" xlink:href="#glyph3-14"/>
<use x="595.119973" y="166.507331" xlink:href="#glyph3-17"/>
<use x="598.116615" y="166.507331" xlink:href="#glyph3-7"/>
<use x="605.020094" y="166.507331" xlink:href="#glyph3-8"/>
<use x="608.520844" y="166.507331" xlink:href="#glyph3-44"/>
<use x="612.511699" y="166.507331" xlink:href="#glyph3-5"/>
<use x="619.919286" y="166.507331" xlink:href="#glyph3-3"/>
<use x="624.610291" y="166.507331" xlink:href="#glyph3-8"/>
<use x="628.111041" y="166.507331" xlink:href="#glyph3-22"/>
<use x="635.910712" y="166.507331" xlink:href="#glyph3-5"/>
<use x="643.318299" y="166.507331" xlink:href="#glyph3-19"/>
<use x="654.702738" y="166.507331" xlink:href="#glyph3-2"/>
<use x="662.390385" y="166.507331" xlink:href="#glyph3-4"/>
<use x="665.485048" y="166.507331" xlink:href="#glyph3-15"/>
<use x="673.074674" y="166.507331" xlink:href="#glyph3-7"/>
<use x="441.213" y="184.706331" xlink:href="#glyph3-56"/>
<use x="451.309163" y="184.706331" xlink:href="#glyph3-4"/>
<use x="454.403826" y="184.706331" xlink:href="#glyph3-13"/>
<use x="458.394681" y="184.706331" xlink:href="#glyph3-23"/>
<use x="465.900289" y="184.706331" xlink:href="#glyph3-8"/>
<use x="469.401039" y="184.706331" xlink:href="#glyph3-19"/>
<use x="480.785478" y="184.706331" xlink:href="#glyph3-2"/>
<use x="488.473125" y="184.706331" xlink:href="#glyph3-15"/>
<use x="496.062751" y="184.706331" xlink:href="#glyph3-38"/>
<use x="502.756185" y="184.706331" xlink:href="#glyph3-8"/>
<use x="506.158914" y="184.706331" xlink:href="#glyph3-21"/>
<use x="514.042603" y="184.706331" xlink:href="#glyph3-5"/>
<use x="521.45019" y="184.706331" xlink:href="#glyph3-6"/>
<use x="529.039816" y="184.706331" xlink:href="#glyph3-15"/>
<use x="536.545424" y="184.706331" xlink:href="#glyph3-22"/>
<use x="544.345095" y="184.706331" xlink:href="#glyph3-2"/>
<use x="552.032742" y="184.706331" xlink:href="#glyph3-3"/>
<use x="556.723747" y="184.706331" xlink:href="#glyph3-38"/>
<use x="563.417181" y="184.706331" xlink:href="#glyph3-8"/>
<use x="566.917931" y="184.706331" xlink:href="#glyph3-16"/>
<use x="573.919431" y="184.706331" xlink:href="#glyph3-14"/>
<use x="581.411036" y="184.706331" xlink:href="#glyph3-17"/>
<use x="584.407678" y="184.706331" xlink:href="#glyph3-17"/>
<use x="587.40432" y="184.706331" xlink:href="#glyph3-7"/>
<use x="424.205" y="199.502331" xlink:href="#glyph2-1"/>
<use x="441.213" y="202.989331" xlink:href="#glyph3-10"/>
<use x="451.001097" y="202.989331" xlink:href="#glyph3-2"/>
<use x="458.688744" y="202.989331" xlink:href="#glyph3-13"/>
<use x="462.679599" y="202.989331" xlink:href="#glyph3-2"/>
<use x="470.367246" y="202.989331" xlink:href="#glyph3-8"/>
<use x="473.769975" y="202.989331" xlink:href="#glyph3-17"/>
<use x="476.766617" y="202.989331" xlink:href="#glyph3-2"/>
<use x="484.454264" y="202.989331" xlink:href="#glyph3-38"/>
<use x="491.147698" y="202.989331" xlink:href="#glyph3-5"/>
<use x="498.639303" y="202.989331" xlink:href="#glyph3-6"/>
<use x="506.144911" y="202.989331" xlink:href="#glyph3-13"/>
<use x="510.135766" y="202.989331" xlink:href="#glyph3-36"/>
<use x="513.636516" y="202.989331" xlink:href="#glyph3-8"/>
<use x="517.137266" y="202.989331" xlink:href="#glyph3-7"/>
<use x="524.040745" y="202.989331" xlink:href="#glyph3-4"/>
<use x="527.135408" y="202.989331" xlink:href="#glyph3-19"/>
<use x="538.519847" y="202.989331" xlink:href="#glyph3-31"/>
<use x="546.403536" y="202.989331" xlink:href="#glyph3-17"/>
<use x="549.302157" y="202.989331" xlink:href="#glyph3-14"/>
<use x="556.793762" y="202.989331" xlink:href="#glyph3-8"/>
<use x="560.294512" y="202.989331" xlink:href="#glyph3-13"/>
<use x="564.201349" y="202.989331" xlink:href="#glyph3-56"/>
<use x="574.297512" y="202.989331" xlink:href="#glyph3-5"/>
<use x="581.705099" y="202.989331" xlink:href="#glyph3-8"/>
<use x="585.205849" y="202.989331" xlink:href="#glyph3-34"/>
<use x="592.907499" y="202.989331" xlink:href="#glyph3-3"/>
<use x="597.598504" y="202.989331" xlink:href="#glyph3-4"/>
<use x="600.693167" y="202.989331" xlink:href="#glyph3-22"/>
<use x="608.492838" y="202.989331" xlink:href="#glyph3-8"/>
<use x="611.993588" y="202.989331" xlink:href="#glyph3-7"/>
<use x="618.981085" y="202.989331" xlink:href="#glyph3-13"/>
<use x="622.887922" y="202.989331" xlink:href="#glyph3-3"/>
<use x="627.578927" y="202.989331" xlink:href="#glyph3-14"/>
<use x="634.986514" y="202.989331" xlink:href="#glyph3-2"/>
<use x="642.674161" y="202.989331" xlink:href="#glyph3-19"/>
<use x="654.0586" y="202.989331" xlink:href="#glyph3-8"/>
<use x="657.55935" y="202.989331" xlink:href="#glyph3-16"/>
<use x="664.644868" y="202.989331" xlink:href="#glyph3-5"/>
<use x="672.052455" y="202.989331" xlink:href="#glyph3-17"/>
<use x="675.049097" y="202.989331" xlink:href="#glyph3-17"/>
<use x="678.045739" y="202.989331" xlink:href="#glyph3-4"/>
<use x="681.140402" y="202.989331" xlink:href="#glyph3-22"/>
<use x="688.940073" y="202.989331" xlink:href="#glyph3-14"/>
<use x="696.431678" y="202.989331" xlink:href="#glyph3-41"/>
<use x="441.213" y="221.187331" xlink:href="#glyph3-49"/>
<use x="450.59501" y="221.187331" xlink:href="#glyph3-49"/>
<use x="459.893002" y="221.187331" xlink:href="#glyph3-20"/>
<use x="464.584007" y="221.187331" xlink:href="#glyph3-31"/>
<use x="472.383678" y="221.187331" xlink:href="#glyph3-2"/>
<use x="480.071325" y="221.187331" xlink:href="#glyph3-13"/>
<use x="483.978162" y="221.187331" xlink:href="#glyph3-13"/>
<use x="487.969017" y="221.187331" xlink:href="#glyph3-14"/>
<use x="495.376604" y="221.187331" xlink:href="#glyph3-3"/>
<use x="500.067609" y="221.187331" xlink:href="#glyph3-15"/>
<use x="507.657235" y="221.187331" xlink:href="#glyph3-41"/>
<use x="511.64809" y="221.187331" xlink:href="#glyph3-8"/>
<use x="515.050819" y="221.187331" xlink:href="#glyph3-28"/>
<use x="523.942724" y="221.187331" xlink:href="#glyph3-7"/>
<use x="530.930221" y="221.187331" xlink:href="#glyph3-5"/>
<use x="538.337808" y="221.187331" xlink:href="#glyph3-26"/>
<use x="547.229713" y="221.187331" xlink:href="#glyph3-56"/>
<use x="557.325876" y="221.187331" xlink:href="#glyph3-4"/>
<use x="560.420539" y="221.187331" xlink:href="#glyph3-7"/>
<use x="567.324018" y="221.187331" xlink:href="#glyph3-13"/>
<use x="424.205" y="236.013331" xlink:href="#glyph2-1"/>
<use x="441.213" y="239.499331" xlink:href="#glyph3-46"/>
<use x="451.99531" y="239.499331" xlink:href="#glyph3-14"/>
<use x="459.402897" y="239.499331" xlink:href="#glyph3-15"/>
<use x="466.992523" y="239.499331" xlink:href="#glyph3-14"/>
<use x="474.484128" y="239.499331" xlink:href="#glyph3-3"/>
<use x="479.091115" y="239.499331" xlink:href="#glyph3-2"/>
<use x="486.778762" y="239.499331" xlink:href="#glyph3-13"/>
<use x="490.769617" y="239.499331" xlink:href="#glyph3-4"/>
<use x="493.86428" y="239.499331" xlink:href="#glyph3-5"/>
<use x="501.271867" y="239.499331" xlink:href="#glyph3-15"/>
<use x="508.861493" y="239.499331" xlink:href="#glyph3-8"/>
<use x="512.362243" y="239.499331" xlink:href="#glyph3-5"/>
<use x="519.76983" y="239.499331" xlink:href="#glyph3-44"/>
<use x="523.760685" y="239.499331" xlink:href="#glyph3-8"/>
<use x="527.163414" y="239.499331" xlink:href="#glyph3-21"/>
<use x="534.963085" y="239.499331" xlink:href="#glyph3-5"/>
<use x="542.45469" y="239.499331" xlink:href="#glyph3-6"/>
<use x="550.044316" y="239.499331" xlink:href="#glyph3-15"/>
<use x="557.549924" y="239.499331" xlink:href="#glyph3-22"/>
<use x="565.349595" y="239.499331" xlink:href="#glyph3-2"/>
<use x="573.037242" y="239.499331" xlink:href="#glyph3-3"/>
<use x="577.728247" y="239.499331" xlink:href="#glyph3-38"/>
<use x="584.421681" y="239.499331" xlink:href="#glyph3-8"/>
<use x="587.922431" y="239.499331" xlink:href="#glyph3-13"/>
<use x="591.829268" y="239.499331" xlink:href="#glyph3-3"/>
<use x="596.520273" y="239.499331" xlink:href="#glyph3-14"/>
<use x="604.011878" y="239.499331" xlink:href="#glyph3-2"/>
<use x="611.615507" y="239.499331" xlink:href="#glyph3-13"/>
<use x="615.606362" y="239.499331" xlink:href="#glyph3-19"/>
<use x="626.990801" y="239.499331" xlink:href="#glyph3-14"/>
<use x="634.398388" y="239.499331" xlink:href="#glyph3-15"/>
<use x="641.988014" y="239.499331" xlink:href="#glyph3-13"/>
<use x="441.213" y="257.698331" xlink:href="#glyph3-4"/>
<use x="444.307663" y="257.698331" xlink:href="#glyph3-15"/>
<use x="451.897289" y="257.698331" xlink:href="#glyph3-8"/>
<use x="455.398039" y="257.698331" xlink:href="#glyph3-13"/>
<use x="459.304876" y="257.698331" xlink:href="#glyph3-23"/>
<use x="466.894502" y="257.698331" xlink:href="#glyph3-14"/>
<use x="474.302089" y="257.698331" xlink:href="#glyph3-8"/>
<use x="477.802839" y="257.698331" xlink:href="#glyph3-37"/>
<use x="485.686528" y="257.698331" xlink:href="#glyph3-57"/>
<use x="495.068538" y="257.698331" xlink:href="#glyph3-18"/>
<use x="506.957085" y="257.698331" xlink:href="#glyph3-8"/>
<use x="510.457835" y="257.698331" xlink:href="#glyph3-6"/>
<use x="517.963443" y="257.698331" xlink:href="#glyph3-31"/>
<use x="525.763114" y="257.698331" xlink:href="#glyph3-22"/>
<use x="533.562785" y="257.698331" xlink:href="#glyph3-2"/>
<use x="541.250432" y="257.698331" xlink:href="#glyph3-13"/>
<use x="545.157269" y="257.698331" xlink:href="#glyph3-14"/>
<use x="552.648874" y="257.698331" xlink:href="#glyph3-8"/>
<use x="556.149624" y="257.698331" xlink:href="#glyph3-3"/>
<use x="560.840629" y="257.698331" xlink:href="#glyph3-6"/>
<use x="568.346237" y="257.698331" xlink:href="#glyph3-17"/>
<use x="571.342879" y="257.698331" xlink:href="#glyph3-14"/>
</g>
</g>
</svg>
...@@ -6,6 +6,9 @@ lbmpy ...@@ -6,6 +6,9 @@ lbmpy
:maxdepth: 2 :maxdepth: 2
sphinx/tutorials.rst sphinx/tutorials.rst
sphinx/methods.rst
sphinx/boundary_conditions.rst
sphinx/forcemodels.rst
sphinx/api.rst sphinx/api.rst
......
This source diff could not be displayed because it is too large. You can view the blob instead.