diff --git a/content/developer/apis.md b/content/developer/apis.md new file mode 100644 index 0000000000000000000000000000000000000000..671dc9fee4bf829fe112689518efbccf1ab129d5 --- /dev/null +++ b/content/developer/apis.md @@ -0,0 +1,165 @@ +--- +short-description: "Apertis platform APIs" + +authors: + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Apertis APIs +# Platform libraries used by applications + +## Traprain +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Navigation and routing libraries | [Traprain API](https://docs.apertis.org/traprain/traprain-0/) | <https://gitlab.apertis.org/appfw/traprain> | Traprain is a set of libraries allowing navigation services, such as a car GPS routing application, to share navigation and routing information to third party applications.| + +## libgrassmoor +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Media information and playback library | [libgrassmoor API](https://docs.apertis.org/libgrassmoor/grassmoor/) | <https://gitlab.apertis.org/hmi/libgrassmoor> | Libgrassmoor is a library responsible for providing media info and media playback functionalities. | + +## liblightwood +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Widget library | [liblightwood API](https://docs.apertis.org/liblightwood/lightwood/) | <https://gitlab.apertis.org/hmi/liblightwood> | LibLightwood is a widget library. It has all the basic widgets like buttons, lists, rollers, webviews, widgets, multilines and textboxes, and can be extended to add functionality to these base widgets. See the [widget catalog](widget-catalog.md#lightwood).| + +## Mildenhall +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| User interface widget library | [Mildenhall API](https://docs.apertis.org/mildenhall/MILDENHALL-widgets/) | <https://gitlab.apertis.org/hmi/mildenhall> | Mildenhall is a platform library providing the reference UI widgets, used by graphical applications. See the [widget catalog](widget-catalog.md#mildenhall).| + +## libseaton +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Persistent data management library | [libseaton API](https://docs.apertis.org/libseaton/libseaton/) | <https://gitlab.apertis.org/hmi/libseaton> | LibSeaton provides interfaces to store persistent data. | + +## libthornbury +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| UI utility library | [libthornbury API](https://docs.apertis.org/libthornbury/libthornbury/) | <https://gitlab.apertis.org/hmi/libthornbury> | LibThornbury provides helper functions for customized JSON parsing. | + + +# Platform user-services used by applications + +## Barkway +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Global popup management framework | [Barkway API](https://docs.apertis.org/barkway/barkway/) | <https://gitlab.apertis.org/appfw/barkway> | Barkway is a platform component, consisting of a user service and libraries that interface with it. | + +## Canterbury +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Application management and process control service | [Canterbury API](https://docs.apertis.org/canterbury/canterbury/) | <https://gitlab.apertis.org/appfw/canterbury> | Canterbury is a platform component, consisting of a user service and libraries that interface with it. | + +## Didcot +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Data sharing and file opening service | [Didcot API](https://docs.apertis.org/didcot/didcot/) | <https://gitlab.apertis.org/appfw/didcot> | Didcot is a platform component, consisting of a user service and libraries that interface with it. It mediates file opening by media type (content type, MIME type), URL opening by URL scheme, and other data sharing between user applications. | + +## Newport +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Download manager | [Newport API](https://docs.apertis.org/newport/newport/) | <https://gitlab.apertis.org/appfw/newport> | Newport is a platform component containing a user service, and a library for communication with the service. It manages large downloads for applications and other services. | + +## Prestwood +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Disk mounting service | [Prestwood API](https://docs.apertis.org/prestwood/prestwood/) | <https://gitlab.apertis.org/hmi/prestwood> | Prestwood is a platform component containing a user service and a library for communication with the service. It mounts removable media. | + +## Tinwell +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Media playback service | [Tinwell API](https://docs.apertis.org/tinwell/tinwell/) | <https://gitlab.apertis.org/hmi/tinwell> | Tinwell is a platform component containing a user service and a library for communication with the service. It plays media. | + +## Ribchester +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Application installer/mounting service | [Ribchester API](https://docs.apertis.org/ribchester/ribchester/) | <https://gitlab.apertis.org/appfw/ribchester> | Ribchester is a service responsible for managing the application and services mount point and preparing the partitions based on the framework. | + +## Rhosydd +| Purpose | API Documentation | Git repository | Description | +|---------|-------------------|----------------|-------------| +| Handling access to sensors and actuators | [Rhosydd API](https://docs.apertis.org/rhosydd/librhosydd-0/) | <https://gitlab.apertis.org/appfw/rhosydd> | Rhosydd is a system service for handling access to sensors and actuators from applications. It provides a vendor-specific hardware API to connect to the services which control the hardware, and a SDK API for applications to use to access it. | +| Sensor backend utilities | [Croesor API](https://docs.apertis.org/rhosydd/libcroesor-0/) | <https://gitlab.apertis.org/appfw/rhosydd> | Rhosydd is a system service for handling access to sensors and actuators from applications. It provides a vendor-specific hardware API to connect to the services which control the hardware, and a SDK API for applications to use to access it. | + +# Upstream APIs +## Enabling APIs + +These are the libraries that make up the supported API surface made available for applications from the store to use. Effort may be made to ease or remove transition issues when ABI or API breakages happen. + +### Content Rendering + +| Component | Packages | Category | +|-----------|----------|----------| +| [WebKitGTK+](https://webkitgtk.org/) | libwebkit2gtk-4.0 | Web engine | +| [Poppler](https://poppler.freedesktop.org/) | libpoppler-glib8, libpoppler28 | PDF rendering | + +### UI + +| Component | Packages | Category | +|-----------|----------|----------| +| [Cairo](http://cairographics.org/) | libcairo2 | Drawing library | +| [GTK+ 3](https://developer.gnome.org/gtk3/stable/) | libgtk-3-0 | UI toolkit | +| [Qt](https://www.qt.io/) | libQt5Gui | UI toolkit | + +### Services + +| Component | Packages | Category | +|-----------|----------|----------| +| [Canberra](http://0pointer.de/lennart/projects/libcanberra/gtkdoc/) | libcanberra0 | High-level sounds | +| [PolicyKit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html) | policykit-1 libpolkit-agent-1-0 libpolkit-backend-1-0 libpolkit-gobject-1-0 | System | +| [Folks](http://telepathy.freedesktop.org/doc/folks/c/) | libfolks-eds25, libfolks-telepathy25, libfolks25 | Contacts & calendar | +| [Grilo](http://developer.gnome.org/grilo/0.2/) | libgrilo-0.2-1 | Media indexing | +| [Tracker-extract](https://developer.gnome.org/libtracker-extract/0.16/) [Tracker-miner](https://developer.gnome.org/libtracker-miner/0.16/) [Tracker-sparql](https://developer.gnome.org/libtracker-sparql/0.16/) | libtracker-extract-0.16-0, libtracker-miner-0.16-0, libtracker-sparql-0.16-0 | Media indexing | +| [libsecret](https://developer.gnome.org/libsecret/0.16/) | libsecret-1-0 | Secrets management | +| [Telepathy](http://telepathy.freedesktop.org/doc/book/index.html) | libtelepathy-glib0 libtelepathy-farstream3 | Communication | +| [ofono](https://01.org/ofono) | onfono | oFono is a stack for mobile telephony devices on Linux | + +## OS APIs + +These are more fundamental APIs, usually used by the Enabling APIs to provide higher-level functionality. Platform upgrades may require adapting applications to new APIs and/or ABIs for these. + +### Infrastructure + +| Component | Packages | Category | +|-----------|----------|----------| +| [eglibc](http://www.gnu.org/software/libc/manual/html_node/index.html) | libc6 | OS interfaces | +| [GLib](https://developer.gnome.org/glib/stable/) | libglib2.0-0 | Basic programming framework | +| [systemd](https://www.freedesktop.org/wiki/Software/systemd/) | systemd | Service manager | +| [OSTree](http://ostree.readthedocs.io/) | libostree | Atomic software updates | + +### Rendering building blocks + +| Component | Packages | Category | +|-----------|----------|----------| +| [pixman](http://www.pixman.org/) | libpixman-1-0 | Low-level graphics | +| [Pango](https://developer.gnome.org/pango/stable/) | libpango1.0-0 | High-level font rendering | +| [Mesa](http://mesa3d.org/sourcedocs.html) | libegl1-mesa libgbm1 libgl1-mesa-dri libglapi-mesa libgles2-mesa | Low-level graphics | +| [harfbuzz](https://www.freedesktop.org/wiki/Software/HarfBuzz/) | libharfbuzz0 | Low-level font rendering | +| [freetype](https://www.freetype.org/freetype2/docs/documentation.html) | libfreetype6 | Low-level font rendering | + +### Functionality + +| Component | Packages | Category | +|-----------|----------|----------| +| [gdk-pixbuf](https://developer.gnome.org/gdk-pixbuf/2.36/) | libgdk-pixbuf2.0-0 | Image manipulation | +| [GMime](https://developer.gnome.org/gmime/stable/) | libgmime-2.6-0 | File format support | +| [GStreamer](https://gstreamer.freedesktop.org/documentation/) | libgstreamer1.0-0 gstreamer1.0-plugins-base libgstreamer-plugins-base1.0-0 gstreamer1.0-plugins-good libgstreamer-plugins-good1.0-0 | Low-level multimedia | +| [Farstream](https://www.freedesktop.org/wiki/Software/Farstream/#documentation) | libfarstream-0.2-2 | Communication | +| [libxml2](http://www.xmlsoft.org/docs.html) | libxml2 | File format support | +| [libxslt](http://xmlsoft.org/libxslt/docs.html) | libxslt1.1 | File format support | +| [SQLite](https://sqlite.org/docs.html) | libsqlite3-0 | Data storage | +| [JSON GLib](https://developer.gnome.org/json-glib/1.2/) | libjson-glib-1.0-0 | File format support | +| [Soup](https://developer.gnome.org/libsoup/stable/) | libsoup-gnome2.4-1, libsoup2.4-1 | Network protocol | +| [LLVM](http://llvm.org/docs/) | libllvm3.2 | Compiler technology | +| [Bluez](http://www.bluez.org/) | bluez | Bluetooth technology | + + +Note that Apertis deploys only license verified Gstreamer plugins. Basically, each Gstreamer plugin is developing under [https://www.gnu.org/licenses/lgpl.html LGPL], but only [http://cgit.freedesktop.org/gstreamer/gstreamer gstreamer core], [http://cgit.freedesktop.org/gstreamer/gst-plugins-base base] and [http://cgit.freedesktop.org/gstreamer/gst-plugins-good good] provide license and patent-free plugins. In case of [http://cgit.freedesktop.org/gstreamer/gst-plugins-ugly gst-plugins-ugly] and [http://cgit.freedesktop.org/gstreamer/gst-plugins-bad gst-plugins-bad], they are not immune from the license and patent issues. gst-plugins-bad usually provides a space to review API stablity as well as license problem. In addition, the plugins which have potential issues with patents, or license fee should be located in gst-plugins-ugly.For more information, please refer to http://gstreamer.freedesktop.org/licensing.html + +## How to proceed if a required package or library is not available +If your application depends on a package that is not including in Apertis, please open a task in the [Apertis Phabricator](https://phabricator.apertis.org/) requesting the addition of the new package. Be sure to include the rationale behind your request. diff --git a/content/developer/app-dev.md b/content/developer/app-dev.md new file mode 100644 index 0000000000000000000000000000000000000000..3cfd82fb707e406fc5b769da2f2c5c5b0ca291ed --- /dev/null +++ b/content/developer/app-dev.md @@ -0,0 +1,65 @@ +--- +short-description: "A step by step guide for developing your first Apertis application" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Application development + +Apertis is a next generation in-vehicle infotainment platform and SDK. It is an innovative operating system created for in-vehicle infotainment products. It is based on Linux Ubuntu. + +## Required Knowledge + +You should familiarise yourself with the [development environment in the SDK](sdk-usage.md) before continuing. + +To understand and develop Apertis applications, you need to be comfortable with the following topics, libraries and tools: + +* C Programming + +* GLib + +* GIO + +* GObject (Glib Object System) + +* Clutter + +* GStreamer + +* Automake + +The resources listed below are good references to get started on these topics: + +* [GObject Wikipedia Page](http://en.wikipedia.org/wiki/GObject) + +* [GObject tutorial](https://developer.gnome.org/gobject/stable/howto-gobject.html) + +* [GObject Reference Manual](http://library.gnome.org/devel/gobject/stable) + +* [GLib Reference Manual](https://developer.gnome.org/glib/stable/) + +* [GIO Reference Manual](https://developer.gnome.org/gio/stable/) + +* [Clutter Tutorial](https://wiki.gnome.org/Projects/Clutter/Tutorial) + +* [Clutter Project Wiki](https://wiki.gnome.org/Projects/Clutter) + +* [GNU Automake](http://www.gnu.org/software/automake/) + +* [GObject generator](https://github.com/GNOME/turbine/blob/master) + +When creating a new project with the Apertis Eclipse plugin, sample application projects are available in "/home/user/sample-applications" path which can be imported for further reference. + +Having said that, it is essential to have a basic understanding of the GObject and Apertis framework to be able to develop applications. Please use the links to gain a basic understanding of the GObject framework and read the subsequent section for an understanding of the code flow in the HelloWorld example code. + +### Next + +|-| +|  **Ready to build your first app?** Continue on to building a [Hello World app](appdev-hello-world.md). | diff --git a/content/developer/appdev-ade.md b/content/developer/appdev-ade.md new file mode 100644 index 0000000000000000000000000000000000000000..58c1112099f17514d8c69e61a8568629ad1a7622 --- /dev/null +++ b/content/developer/appdev-ade.md @@ -0,0 +1,228 @@ +--- +short-description: "How to build and debug your application with the ade tool" + +authors: + - name: Justin Kim + email: justin.kim@collabora.com + years: [2017] + +license: CC-BY-SAv4.0 +... + +# Apertis Development Environment + +Apertis Development Environment (ADE) is a tool that helps developers to +manage sysroots, cross-compile applications, deploy them to target and +then debug them. + +On the Apertis SDK, the ADE tool is provided by the `apertis-dev-tools` package. + +``` +$ sudo apt update +$ sudo apt install apertis-dev-tools +``` + +Once `apertis-dev-tools` is installed, the `ade` command line tool is available for +building and debugging applications. The command also provides general manual +pages so you can get command information by using `man ade` on the SDK. + +## Sample applications for ADE + +Since the 17.06 release, the Apertis SDK provides the code for the sample applications checked out under the `user` home folder. +Each application aims to demonstrate how to create a bundle addressing a minimal use case. + +* [helloworld-app](https://gitlab.apertis.org/sample-applications/helloworld-app) - A basic sample application which can be used as the basic skeleton for more complex application +* [helloworld-simple-agent](https://gitlab.apertis.org/sample-applications/helloworld-simple-agent) - An agent-only application which does not provide any graphical program +* [helloworld-agentapp](https://gitlab.apertis.org/sample-applications/helloworld-agentapp) - An agent application which interacts with a graphical program +* [helloworld-https-client](https://gitlab.apertis.org/sample-applications/helloworld-https-client) - A basic HTTP(S) client application +* [helloworld-persistapp](https://gitlab.apertis.org/sample-applications/helloworld-persistapp) - An application to deal with persistent data +* [helloworld-prefsapp](https://gitlab.apertis.org/sample-applications/helloworld-prefsapp) - An application to deal with preferences +* [notification-example](https://gitlab.apertis.org/sample-applications/notification-example) - An example for using Notifications API +* [hard-keys-example](https://gitlab.apertis.org/sample-applications/hard-keys-example) - An example for using hardware keys +* [cpp-library-example](https://gitlab.apertis.org/sample-applications/cpp-library-example) - An example for using external library with C++ +* [helloworld-webapp](https://gitlab.apertis.org/sample-applications/helloworld-webapp) - A basic Web Runtime application + +To demonstrate how to use `ade`, [helloworld-app](https://gitlab.apertis.org/sample-applications/helloworld-app) +is going to be used through this document. + +## Building and running an application bundle with ade + +To install and test on the SDK, `ade` provides the `--native` option. + +``` +$ ade configure --native +$ ade build --native +$ ade export +$ ade install --native +$ ade run --native +``` + +If you want to build the application in debug mode, you should use `ade configure --native --debug`. +When the build is done, `ade export` will create a bundle file. For the `helloworld-app` example, +the command will generate the `org.apertis.HelloWorldApp-0.1.0.bundle` file under the current path. + +The final step for installation is to run `ade install --native`. Then, if it is done successfully, +you can run the application by executing `ade run --native`. + + +# Debugging on a target device with ADE + +## Installation of a sysroot + +To run/debug an application bundle on a target device, the first step is to download a sysroot. +You can manage sysroots on the SDK with the `ade sysroot` command. See `man ade-sysroot` for more +details about sysroot-related options. + +`ade sysroot list` is used to check which sysroots are already installed +on the SDK. If there's no installed sysroot image, the result would be like the following +message. + +``` +$ ade sysroot list +No sysroot installed in directory /opt/sysroot/. +``` + +`ade sysroot latest` provides the version and downloadable URL of the sysroot image. + +``` +$ ade sysroot latest +* No distribution specified, defaulting to host distribution +* No release version specified, defaulting to host release version +* No architecture specified, defaulting to 'armhf' +* Checking latest version available for apertis - 17.06 (armhf) +* Retrieved latest version: apertis 17.06 - 20170530.0 (armhf) +* Download URL: https://images.apertis.org/sysroot/17.06/sysroot-apertis-17.06-armhf-development_20170530.0.tar.gz +``` + +The `ade sysroot install` command will do everything needed to install the latest sysroot version on your SDK, +from downloading to installing without any manual intervention. + +``` +$ ade sysroot install +* No distribution specified, defaulting to host distribution +* No release version specified, defaulting to host release version +* No architecture specified, defaulting to 'armhf' +* Installing version apertis 17.06 - 20170530.0 (armhf) +sysroot.tar.gz |==================================================| 100% +``` + +When the installation command has completed its job, the installed status can be checked with `ade sysroot installed`. + +``` +$ ade sysroot installed +* No distribution specified, defaulting to host distribution +* No release version specified, defaulting to host release version +* No architecture specified, defaulting to 'armhf' +* Retrieved current version: apertis 17.06 - 20170530.0 (armhf) +``` + +## Setting up for a target device + +For debugging on a target device, the target should accept remote connections via SSH and +allow a specific port for remote gdb connection. + + +### Preparing SSH key-pair on the SDK + +SSH key is required to allow connecting from SDK to the target without requesting password. +The following command will show how to generate SSH key-pair and copy the generated public +key to the target. In the example, it assumes that the address of the target device is +`192.168.0.100`. + +``` +$ export TARGET_HOST=192.168.0.100 +$ ssh-keygen +Generating public/private rsa key pair. +Enter file in which to save the key (/home/user/.ssh/id_rsa): +Created directory '/home/user/.ssh'. +Enter passphrase (empty for no passphrase): +Enter same passphrase again: +Your identification has been saved in /home/user/.ssh/id_rsa. +Your public key has been saved in /home/user/.ssh/id_rsa.pub. +The key fingerprint is: +SHA256:Yd3+gA4ZpWUczdlFKFlaNsyQfET09+UJF5LZYNAaFrI user@apertis +The key's randomart image is: ++---[RSA 2048]----+ +| o=B=^&=o| +| *++XBB+.| +| =Eo =+ .+| +| . + + o.=| +| S . o .o| +| o o | +| . . | +| | +| | ++----[SHA256]-----+ +$ ssh-copy-id user@$TARGET_HOST +``` + +### Allowing GDB Connection on a target device + +Since the network firewall is enabled on the target for security reasons, the connection to the remote GDB port +(`1234` by default) must be explicitly enabled. + +``` +$ ssh user@$TARGET_HOST "sudo sed -i '25 a -A INPUT -p tcp -m state --state NEW -m tcp --dport 1234 -j ACCEPT' /etc/sysconfig/iptables" +$ ssh user@$TARGET_HOST "sudo systemctl restart iptables" +``` + +### Using .gdbinit + +For debugging, we are going to use GDB remote connection so the target application will be started as soon as +executing `ade` debug command on the SDK. During GDB startup, the minimal information such as the location of +sysroot, and debugging symbols, should be provided by `.gdbinit`. + +``` +$ cat > ~/.gdbinit <<EOF +set sysroot /opt/sysroot/apertis/17.06/armhf +set debug-file-directory /opt/sysroot/apertis/17.06/armhf/usr/lib/debug +EOF + +``` + +### Adding debug symbols for packages needed by the application + +> Note: this section will become obsolete and will be dropped once https://phabricator.apertis.org/T3819 is fixed. + +To get proper backtraces under GDB you need debug symbols for all the libaries in the stack used by your application. +The current sysroots do not ship the debug symbols for every installed package and a manual step is needed to fetch them. + +From the SDK, the following commands will install the debug symbol packages (`libglib2.0-0-dbg`, `libclutter-1.0-dbg`, `libgtk-3-0-dbg`) +on the installed sysroot image. + +``` +$ bwrap --bind /opt/sysroot/apertis/17.06/armhf/ / \ + --proc /proc \ + --dev-bind /dev /dev \ + --setenv PATH /sbin:/usr/sbin:/usr/local/sbin:$PATH \ + fakeroot apt update + +$ bwrap --bind /opt/sysroot/apertis/17.06/armhf/ / \ + --proc /proc \ + --dev-bind /dev /dev \ + --setenv PATH /sbin:/usr/sbin:/usr/local/sbin:$PATH \ + fakeroot apt install libglib2.0-0-dbg libclutter-1.0-dbg libgtk-3-0-dbg +``` + +## Debugging on a target board + +Debugging an application on a target device is similar to running on the SDK. +For the following example steps, we assume that the desired sysroot has been already installed +on the SDK, that you are using a SSH key-pair to login to your target device, and that the address of +the device is mapped to `TARGET_HOST` environment variable. + +To build an application bundle for your target device in debug mode, the following `ade` commands will +be used. + +``` +$ ade configure --debug --device user@$TARGET_HOST +$ ade build --debug --device user@$TARGET_HOST +$ ade install --device user@$TARGET_HOST +``` + +For debugging, `ade` provides `debug` command for a target. As we mentioned above, it requires to allow +connecting to GDB remote port (default:1234). Then, the command will bring you to GDB remote prompt. + +``` +$ ade debug --device user@$TARGET_HOST +``` diff --git a/content/developer/appdev-agents.md b/content/developer/appdev-agents.md new file mode 100644 index 0000000000000000000000000000000000000000..cba75b66079b2b5762128da5e492d200a7a9108b --- /dev/null +++ b/content/developer/appdev-agents.md @@ -0,0 +1,243 @@ +--- +short-description: "A step by step guide for developing agent application for Apertis" + +authors: + - name: Justin Kim + email: justin.kim@collabora.com + years: [2016] + - name: Micah Fedke + email: micah.fedke@collabora.com + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Create an agent + +An agent is a non graphical program which runs in the background. Agents can be used for playing music or computing expensive operations like indexing large databases, for example. + +Following is a step-by-step guide for creating an agent. This guide is based on the [agent sample application](https://git.apertis.org/git/sample-applications/helloworld-agentapp.git) available in the Apertis repos. It will be handy to have the sample application code open while reading through this guide. + +Our sample application is composed of two classes which will be explained in more detail below: + - `HlwAgent`: A wrapper class that manages the process itself and the D-Bus object + - `HlwTickBoard`: A child class that implements the D-Bus interface + +Let's get started! + +## Agents are GApplications + +The [`GApplication`](https://developer.gnome.org/gio/stable/GApplication.html) is the recommended base class for agents, just as it is for graphical applications. +One of the advantages of being derived from `GApplication` is that most of the work of registering with D-Bus is handled by the class, so you need only override a few virtual functions in order to get a running agent. + +The `HlwAgent` class is the entry point for running the agent. This class is defined as: + +``` +G_DEFINE_TYPE (HlwAgent, hlw_agent, G_TYPE_APPLICATION) +``` + +Create and launch an `HlwAgent`: + +``` + app = G_APPLICATION (g_object_new (HLW_TYPE_AGENT, + "application-id", "org.apertis.HelloWorld.Agent", + "flags", G_APPLICATION_IS_SERVICE, + NULL)); + + g_application_run (app, argc, argv); +``` + +The `application_id` property of the GApplication is used to provide the D-Bus bus name. This id should be unique so it is recommend that you use `@BUDNLE_ID@.Agent`. `GApplicationFlags` should be set to `G_APPLICATION_IS_SERVICE`. See [the description](https://developer.gnome.org/gio/stable/GApplication.html#GApplicationFlags) of flags for more information. + +In the `HlwAgent` class, the `dbus_register` and `dbus_unregister` virtual functions should be overridden to catch whether the requested D-Bus name is available to use, and`activate` should be overridden as well, which is a mandatory virtual function for all applications and agents. + +``` +static void +hlw_agent_class_init (HlwAgentClass *klass) +{ + GApplicationClass *app_class = G_APPLICATION_CLASS (klass); + + ... + + app_class->activate = hlw_agent_activate; + app_class->dbus_register = hlw_agent_dbus_register; + app_class->dbus_unregister = hlw_agent_dbus_unregister; + + ... +} +``` + +To cause `HlwAgent` to run in the background and prevent termination by the ending of the main function, the reference count should be held and released properly. In a graphical application, it's clear that `g_application_hold ()` should be called when the window appears and `g_application_release ()` when the window disappears, but unlike a graphical program, it's a bit less clear when to manage reference count in an agent. Fortunately, in the `dbus_register` function, we can assume that the agent is ready to export extra objects on the bus, making it a good place to take the reference with `g_application_hold ()`, and in `dbus_unregister` we can release the reference count with `g_application_release ()`. + +``` +static gboolean +hlw_agent_dbus_register (GApplication *app, + GDBusConnection *connection, + const gchar *object_path, + GError **error) +{ + ... + + g_application_hold (app); + + ... +} + +static void +hlw_agent_dbus_unregister (GApplication *app, + GDBusConnection *connection, + const gchar *object_path) +{ + ... + + g_application_release (app); + + ... +} +``` + +Once the `activate` virtual function is overridden, we will have a runnable agent skeleton. + +## D-Bus Interface + +Using the `GApplication` class allows our agent to run as stand-alone non-graphical program, but it isn't yet able to interact with the outside world. It is recommended that D-Bus be used to communicate with other processes on the system. D-Bus code and documentation can be easily created by `gdbus-codegen`. For more details of the usages of the generator, refer to [gdbus-codegen](https://developer.gnome.org/gio/stable/gdbus-codegen.html). + +### D-Bus XML Schema + +To make our agent application D-Bus aware, let's introduce a simple XML D-Bus interface. + +Our interface will contain the following: + - method: ToggleTick + - property: CurrentTick + +By calling `ToggleTick`, an auto-incremented tick count function is enabled or disabled. Once the function is enabled, the property, `CurrentTick`, is increased by 1 every second. + +``` +<node name="/org/apertis/helloworld/agent/tickboard"> + <interface name="org.apertis.HelloWorld.Agent.TickBoard"> + <method name="ToggleTick"/> + <property name="CurrentTick" type="i" access="read"/> + </interface> +</node> +``` + +To generate the D-Bus code at make time, we introduce a simple rule to the Automake `Makefile.am`. + +``` +helloworld-agent/%.c: helloworld-agent/%.xml Makefile + $(AM_V_GEN)$(GDBUS_CODEGEN) \ + --c-namespace=HlwDBus \ + --interface-prefix=org.apertis.HelloWorld.Agent \ + --generate-c-code helloworld-agent/$* $< +``` + +Note that `--interface-prefix` should be the same as the `application-id` of the agent. + +### D-Bus function implementation + +The D-Bus skeleton is generated by `gdbus-codegen` according to the XML schema. Now we need to create actual behaviors for when the D-Bus APIs are called. In our example, the `HlwDBusTickBoardSkeleton` object and the `HlwDBusTickBoard` interface are created. Although there are various approaches to implementing this interface, being a child of the D-Bus skeleton object will help show how the generated virtual functions should be filled in. + +``` +G_DEFINE_TYPE_WITH_CODE (HlwTickBoard, hlw_tick_board, + HLW_DBUS_TYPE_TICK_BOARD_SKELETON, + G_IMPLEMENT_INTERFACE (HLW_DBUS_TYPE_TICK_BOARD, + hlw_tick_board_tick_board_iface_init)) +``` + +Next, `handle_toggle_tick` of `HlwDbusTickBoardIface` should be overridden. + +``` +static gboolean +hlw_tick_board_handle_toggle_tick (HlwDBusTickBoard *object, + GDBusMethodInvocation *invocation) +{ + ... + + hlw_dbus_tick_board_complete_toggle_tick (object, invocation); + + return TRUE; +} + +static void +hlw_tick_board_tick_board_iface_init (HlwDBusTickBoardIface *iface) +{ + iface->handle_toggle_tick = hlw_tick_board_handle_toggle_tick; +} +``` + +### Exporting the interface to D-Bus + +Once the implementation of the D-Bus interface is completed, it needs to be exported on the bus. `HlwAgent` is already registered on the bus so the `HlwTickBoard`, which is a child object of the D-Bus skeleton, can be easily exported in the `dbus_register` function. + +``` +static gboolean +hlw_agent_dbus_register (GApplication *app, + GDBusConnection *connection, + const gchar *object_path, + GError **error) +{ + gboolean ret; + + ... + + /* chain up */ + ret = G_APPLICATION_CLASS (hlw_agent_parent_class)->dbus_register ( + app, + connection, + object_path, + error); + + if (ret && + !g_dbus_interface_skeleton_export ( + G_DBUS_INTERFACE_SKELETON (self->tick_board), + connection, + "/org/apertis/HelloWorld/Agent/TickBoard", + error)) + { + g_warning ("Failed to export TickBoard D-Bus interface (reason: %s)", + (*error)->message); + } + + return ret; +} +``` + +Note that it is recommended that an application registers as above before exporting any other interfaces to D-Bus. + + +## Apparmor profile + +An agent must be granted different Apparmor permissions than those granted to standard [application bundles](https://developer.apertis.org/documentation/bundle-spec.html#apparmor-profile). Several additional rules are required to allow an agent to access the bus. + +``` +/Applications/@BUNDLE_ID@/** { + #include <abstractions/chaiwala-base> + #include <abstractions/dbus-session-strict> + + /Applications/@BUNDLE_ID@/{bin,libexec}/* pix, + /Applications/@BUNDLE_ID@/{bin,lib,libexec}/{,**} mr, + /Applications/@BUNDLE_ID@/share/{,**} r, + + owner /var/Applications/@BUNDLE_ID@/users/** rwk, + + dbus send + bus=session + path=/org/freedesktop/DBus + interface=org.freedesktop.DBus + member="RequestName" + peer=(name=org.freedesktop.DBus), + + dbus bind + bus=session + name="@BUNDLE_ID@", + + dbus bind + bus=session + name="@BUNDLE_ID@.Agent", + + dbus (send, receive) + bus=session + peer=(label=/Applications/@BUNDLE_ID@/**), + + signal receive peer=/usr/bin/canterbury, +} +``` diff --git a/content/developer/appdev-debugging.md b/content/developer/appdev-debugging.md new file mode 100644 index 0000000000000000000000000000000000000000..d271e08ab3d356ebbf55bff9bc0e73ff8fac39b5 --- /dev/null +++ b/content/developer/appdev-debugging.md @@ -0,0 +1,32 @@ +--- +short-description: "How to debug an application" +... + +# Debugging app in eclipse + +Follow these steps to debug an application in Eclipse: + +* Install your application to the simulator using **Install app to simulator**. + +* Go to `Run â–¸ Debug Configurations` (You should be in the C/C++ Perspective) + +* Double click on the C/C++ application. It will create a new debug configuration. + +* In the main tab, for C/C++ Application entry, press the **Browse** button and select `/Applications/BundleID/bin/app_bin_name` + +* In Arguments tab, set app-name to ProjectName , and set working directory to `/Applications/BundleID` using the **File System** option by disabling Use Default Checkbox. + +* In Environment tab, Select and check `LD_LIBRARY_PATH`. Suffix /Applications/BundleID as value for `LD_LIBRARY_PATH` + +* In source tab. Click on `Add â–¸ File System directory` and select `/Applications/BundleID`, then press **OK**. + +* Apply all these settings and click on the **Debug** button. + +* When asked to switch to the debug perspective, click **Yes**. The default breakpoint is on main(). So press F6 for step by step debugging + +# Viewing simulator logs in the eclipse console + +When you start the simulator from Eclipse, the logs can be seen in the Eclipse console itself. This helps in debugging and analysing the applications. + + + diff --git a/content/developer/appdev-design.md b/content/developer/appdev-design.md new file mode 100644 index 0000000000000000000000000000000000000000..919be843d55a4fc881d36973f1c329fa874620f1 --- /dev/null +++ b/content/developer/appdev-design.md @@ -0,0 +1,106 @@ +--- +short-description: "How to make your application fit in with Apertis" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Application design + +Apertis is a platform for automotive infotainment. With this in mind, it is intended to be used only with a touch screen interface by a driver or a passenger in a vehicle. The graphical user interface (GUI), or human-machine interface (HMI), will normally be made up of widgets provided by Mildenhall. Mildenhall takes the nature of Apertis into consideration so many of the widgets will be automatically sized and in some cases even placed for ease of use. There are some widgets which you will be able to place yourself. For more information, see the API reference and [widget catalog](widget-catalog.md). + +You will also need to set some non GUI/HMI properties which will affect the behaviour of your application. It is important to get these properties right as they can affect user experience and performance of the system. + +## Navigating to your application + +You can set a user readable application name and the category in which your application should appear. + +Apart from the executable name and application name, you need to also set an application name which will be shown when the user navigates through the menu. + +Do: +- Pick a unique name where possible (for example, the name of the game for games) +- Select a name which clearly indicates what your application is about + +Don't: +- Use any of the pre-installed application names (for example, Browser) + +If you do not pick a good name for your application, it may be difficult for the user to find it. This could mean that your application is more difficult to find in the app store and is used less often. + +Apart from selecting a good name for your application, you also need to assign it to an appropriate category in the menu. This will also help users navigate to your application. For example, chose "music" for a music player, "travel" for a navigational or map app or "video & TV" for a Blu-ray player app. + +The category icon will be set for your application by default once. + +## Audio behaviour + +It is normal to have a number of applications competing for the attention of the driver or passengers at any given time. To help your application have the correct behaviour, there is a number of audio types available for you to chose from. Selecting the correct audio type is important so that your application takes or gives priority correctly in relation to other applications. + +For example: +- a phone application is expected to interrupt audio from other applications unless the user has asked for no interruptions so you would choose "interrupt" audio type +- a "music" player application will continue playing music when a user is not looking at the user interface, but will be interrupted by a phone call + +Selecting the wrong type of audio behaviour can have a negative impact on the user's experience, ranging from annoyance to distracting a driver, so it is important that you select the correct type of audio profile based on what your application does. + +## Interrupt behaviour + +You can chose how your application reacts when another application is opened by the user. Applications which provide a service to the user which should be persistent should keep running in the background. On the other hand, an application which requires active interaction from the user should normally be stopped or killed so that it does not take up resources while it is unused, which would provide a better experience to your user. + +For example: +- a music or navigation application should keep running in the background while the user browses the internet in a browser +- a game can be killed or stopped while the user is not playing it + +## Internet bandwidth + +It is likely that there will be times when access to the internet will be limited. If your application requires internet access to work, you need to think about what proportion of the bandwidth it should be allocated. + +## Structure of an application bundle + +An Apertis **application bundle** is a set of resources installed as a single +unit. The app bundle can include open source / proprietary libraries, +[agents][Agent] and GUI programs. + +See the [Application Bundle Specification](bundle-spec.md) +for a more formal specification of the contents of application bundles. + +### Bundle ID + +Each Apertis application bundle is identified by a **bundle ID**, which is +a [reversed domain name][Reverse domain name notation] controlled by the +bundle author. + +For example, the owner of the domain name `example.net` controls the +reversed domain name `net.example` and might choose to name an app bundle +`net.example.ShoppingList`. + +### Entry points + +The UI programs in a bundle may have one or more entries in the launcher +menu. Applications are typically launched by tapping the menu entry, +or when a file of a particular type is opened. + +Application bundles may also contain programs that do not appear in the +menu. These are mainly used when implementing [agents][Agent], which are +started automatically by the application framework and run in the background. + +All of these ways a program could be started are referred to as +**entry points**, and each one has an **entry point ID**. + +One entry point in each bundle should usually have the bundle ID as its entry +point ID: this is referred to as the **main entry point**. +If there are additional entry points, they must have names that start with +the bundle ID, followed by a dot. + +For example, the `net.example.ShoppingList` application bundle might contain +a main entry point named `net.example.ShoppingList` and an [agent] named +`net.example.ShoppingList.CloudSync`. + +<!-- Local link definitions --> + +[Agent]: appdev-agents.md + +<!-- External link definitions --> + +[Reversed domain name notation]: https://en.wikipedia.org/wiki/Reverse_domain_name_notation diff --git a/content/developer/appdev-hello-world.md b/content/developer/appdev-hello-world.md new file mode 100644 index 0000000000000000000000000000000000000000..15b816ccf592dd53caeef52d4518cf1d4788b5a8 --- /dev/null +++ b/content/developer/appdev-hello-world.md @@ -0,0 +1,68 @@ +--- +short-description: "How to build your first application" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016, 2017] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Hello World + +The SDK comes with the Eclipse IDE installed, which the application developers can use to import, build and test any sample application. The imported sample application acts as a reference and further additions and modifications can be made to it. + +Here is a diagram outlining the project configuration process: + + + +These are steps to be followed to import a sample application into the workspace: + +* Open the Eclipse IDE by double clicking on this icon on the desktop of your SDK: + +  + +* In Eclipse IDE select **Menu**→**File**→**Import**. You will see a dialog like the one below: + +  + +* Select **General**→**Existing Projects into Workspace**. Click **Next**. Select one of the subfolders of the `/home/user/sample-applications` directory. See the dialog below for details. + +  + +* Click on **Finish**, the sample application will be imported and configuration will start automatically as shown below (check the debugs in console). + +  + +* To build the project, right click on the project and select **Build Project**. + +  + +* The project should build without any errors: + +  + +### Install via Eclipse + +* After successful build of the project, right click on the project and select **Install (Native)** option. The selected project will be installed on the simulator. + +  + +### Uninstalling code examples via Eclipse + +To uninstall the code examples via Eclipse follow the below steps: + + * Right click on the project which you want to uninstall and select Uninstall (Native). +  + +--- + +### Next + +|-| +|  **Want to find out more about the technologies available to applications in the Apertis environment?** Read about [Apertis technologies](sdk-techs.md). | +|  **Need a quick reference for the Apertis platform APIs?** View the [Apertis API reference pages](apis.md) | +|  **Ready to use the Apertis Development Environment?** Continue on to building and debugging with [the ADE tool](appdev-ade.md) | diff --git a/content/developer/appdev-structure.md b/content/developer/appdev-structure.md new file mode 100644 index 0000000000000000000000000000000000000000..7a6588b976d450f4e43aa7039e39e94a13da04a0 --- /dev/null +++ b/content/developer/appdev-structure.md @@ -0,0 +1,339 @@ +|-| +| *This documentation is written against version [16.12](https://wiki.apertis.org/16.12) of Apertis; [Other versions](https://wiki.apertis.org/AppdevDocReleases)* | + +# Structure of an Apertis Application + +The application generated by the wizard is a set of resources installed as a single unit. It is referred to as a **bundle**. The app bundle can include open source / proprietary libraries, agents and GUI programs. The UI programs may have one or more entries in the launcher. Applications get launched by tapping the menu entry. + +The structure of applications created using the [Eclipse wizard](appdev-hello-world.md) will always follow the MVC (Model-View-Controller) pattern, which makes them easier to maintain. + +The following diagram gives an overview of MVC and the responsibilities of each component in the context of the UI framework: + + + +The main advantage of using MVC for the UI framework is that it enables loose coupling and therefore enhances reusability of each its components. + +## Basic Work Flow in MVC + +Assuming a view with 2 widgets (roller and button), the following sequence is executed on any user interaction: + +* User actions like touch, press, release, slide etc are initiated on the widgets. + +* These widgets will pass on these user actions to the **Controller**'s event engine. The Controller updates the model which holds all data pertaining to a widget. + +* When any data in the widget's **Model** is changed, a notification will be issued by the Model to update the **View**. + +Additionally, + +* In case a new view needs to be rendered, the controller will trigger this action and the view shall be updated. + +* The view can also directly interact with the model, by requesting data for example. + +Below is the structure of the wizard-generated HelloWorld program: + + + +The main folders are: + +* src – sources. Explained in more detail below + +* resources – This folder has 2 subfolders: data and views. + + * data – this holds the images needed for the views and widgets + + * views – holds the view definition as a json file, as well as the widget properties in another json file. + +* config, m4, SDKConfig, scripts – are used either by build or eclipse tools and need not be disturbed. + +Picture below shows the structure of the application's **src** folder for the HelloWorld application. + + + +The file `HelloWorld_app` is the application's main GObject. It has the following functions: + +* This object registers to canterbury service for new app states. + +* It creates and initializes the model, view and controller classes. In the process of initialization, the view and widgets are created and registration to default events like the views' drawer events is done. + +* All the application logic needs to be contained in the model, view and controller files. The application GObject needs no changes as it is just the initiator and can stay as generated. + +# Model + +The `model` GObjects provide the **Model** part of the MVC architecture in the application. It is a placeholder for all data required by the applications – both structured and lists. This datapool is initialised at application startup. + +It also uses PDI (Persistent Data Interface) to store *persistent* elements and restore the last-mode-data during the Application start-up. + + + +In the Helloworld application, `HelloWorld_model.c` is the GObject where the app can store the collection of data arranged in a structured way. It may be containing the backend data, parsed data etc, whichever an application needs for future reference. When the HelloWorld app is created, the model is empty. That is so that the app developer can decide what to store in the application model. + +An application can use any format (simple structure, List of objects, file etc) to store the data it is interested in. However we make this recommendation: + +Apertis provides the Clutter library for UI. The Clutter model integrates easily with widgets and notification mechanisms. It also provides a list model. Hence it is recommended to use the Clutter model for Model implementations. It provides interfaces to access (read/write) datapool (DataModel) elements and to register for notifications. + +ClutterModel is a data structure in which data is arranged in rows and columns. When data gets added/removed/changed, signals will be emitted from the ClutterModel. Interested modules can connect to it to perform any sort of operations. In MVC, whenever the data changes the View may have to be updated, hence widgets will explicitly connect to the `row-added` signal and widgets can refresh themselves on model changes. + +Below is a code snippet showing an application's model storing the metadata of songs that it has indexed. This data is then passed on to widgets to display on the screen: + + + + + +> The Model GObject can be an implementation of GListModel — An interface describing a dynamic list of objects. This will localise the clutter dependency to *view* in the app and can be replaced with any other UI library if desired. The sample apps will be updated to GListModel in future. + +# View + +The **View** in the MVC design pattern is the output representation of the data, which is presented to the users. Every application has one or many views. Each view has a set of widgets through which the user interacts with the application. + +In the Apertis framework, the views and widgets are created and initialised by JSON files. The view definition describes widgets that belong in a given view. Each view is defined in a separate JSON file. All widgets will have a default configuration file associated with them, describing their properties. Application developers can choose the required properties for the widget in a particular view and can change the default values. + +## Global widgets + +Widgets which appear in more than one screen and widgets which are in the app scope and not in the view scope are called global widgets. E.g : Views drawer (needed to switch between views). + +They are identified by the same, unique name across views. Only one instance of such global widgets will be created in the app. Due to it being a singleton, the state is maintained across views. + +The structure of the views folder in the sample project is shown below: + + + +The view folder will have GObjects for all the views and a window GObject. + +The sample project has 3 views – ThumbView, ListView and DetailView and a window class. + +The window GObject is the main view object and has these functions: + +* Controlling and initializing the views + +* Interacting with the controller + +* Handling signals from global widgets + +## Widgets + +Widgets provide a wide range of functionalities to cater to the needs of different views belonging to different applications. For example, a button widget can support only the press and release events in one view, but in another view it may also support long press events. These functionalities are portrayed as properties of the widget. The properties of a widget are present in the JSON file. + +## JSON files + +The view and widget JSON files are stored in the resources folder. On expanding the resources folder you can see a folder for each view and their JSON files directly under the resources folder. + + + +The view folders (ListView, ThumbView, etc...) will hold the JSON files of widgets used in the respective views. + + + +The generic form of the json file for a view is as follows: + +``` +{ + +"viewId":"ViewName", + +"widgets":{ + +"WidgetName": ["WidgetGType", "file_name", pos_x, pos_y, layer] + +} +``` + +* `ViewName` is used to identify the view and associate widgets to the mentioned view. + +* `file_name` corresponds to the property json file which the widget demands. It should have a `.json` extension which will be appended by default. + +* `layer` can have a positive value starting from 0 which indicates the layer to which the widget has to be added with 0 being the bottom most layer. + +* `WidgetGType` specifies the GType of the widget. `WidgetName` is the name given to uniquely identify the widget and applications can use the same name for further reference. It is the application developer's responsibility to give a unique `WidgetName` to the widget without overlapping with any other widget, in which case it would be treated as a global widget. + +* A sample json file for a view, named `DetailedView.json` is shown below: + + + +Now, if we explore the JSON files inside a particular view, we can find one such file per widget in the folder. + +Here is an example for a ViewsDrawer widget: + + + +This file indicates that the properties X and Y of the widget can be modified by the app. + +## Creation of views + +The Apertis SDK provides support to automatically create views and widgets. The approach followed is similar to what Clutter does with Clutter script. The SDK library which does this is view manager. + +View manager is the special parser library, which parses view and widget property json files to creates view and initializes widgets with models. It also provides the necessary framework for the UI theme, skinning capabilities and transitions during view switches, and reduces repetitive code and complexity. + +The View manager needs to be initialized by the application, this is done in the Window GObject. It registers for the global preferences to get the current theme, skin and language information. Based on the app name, it locates the view definition files from the resource folder location provided by the application. Then it parses the view's json file and their respective widgets' json files and starts creating widgets for each view. It feeds the current theme and language information to the widgets. The widgets use the theme information to load appropriate CSS files. + +In case of multiple views, views' json files have to be created for each such view. All the widgets' json files should be grouped under a directory having the same name as that of the view. If a widget needs to be present in one or more views (global widgets), they can be added in multiple json files sharing the same name. However only one instance of that widget will be created. + +View Manager initialization is done in the window GObject: + +``` +ThornburyViewManagerAppData pViewData; + +pViewData = g_new0(ThornburyViewManagerAppData,1); + +/* Application Object which is added to the stage */ + +pViewData->app = CLUTTER_ACTOR(pHelloWorldWin); + +/* Specify the default view */ + +pViewData->default_view = "ListView"; + +/* Resource directory Path */ + +pViewData->viewspath = "/Applications/HelloWorld/share/"; + +/* Application Run-time name */ + +pViewData->app_name = g_strdup(pAppName); + +pViewData->stage = CLUTTER_STAGE(pHelloWorldWindow->pglobStage); + +pViewData->pAppBackFunc = NULL; + +pViewData->pScreenShotPath = NULL; + +/* create the view manager instance. */ + +pViewManager = thornbury_view_manager_new(pViewData); +``` + +## Model creation + +Widgets can be assigned data that needs to be displayed using ThornburyModel. This model has been derived from the Clutter model library and supports all the features provided by the Clutter Model. In addition to it, specific signals and functionalities are added to satisfy Apertis-specific requirements. + +ThornburyModel (like ClutterModel) is a generic list model. Data is fed in rows and columns to the model. The model is then assigned to the widget. The widget is aware of the model and paints accordingly. Models' implementations should be adapted to their views' requirements . See the API reference for more on that. + +> The application model can be implemented using any format like a file or a structure. However models assigned to widgets have to inherit from Thornbury model. + +Below is a code snippet showing the creation of a model for a views drawer widget. Views drawer is a widget that shows the views available in the app as a button so that when a view button is clicked the application can transition to that view. It needs view name, view icon, tooltip for that view and also a flag to specify if it should be enabled. Each view is added as a row to this model, then it gets assigned to the widget. + +The Model then provides necessary signals to the widget to handle the change in data. Some basic signals include `row-added`, `row-removed`, `row-changed` and `sort-changed`, etc... Widgets register to these signals to update the view correspondingly. + +``` +GHashTable pWindowModelHash; + +ThornburyModel *model = NULL; + +model = (ThornburyModel *) thornbury_list_model_new (DRAWER_COLUMN_LAST, + G_TYPE_STRING, NULL, + G_TYPE_STRING, NULL, + G_TYPE_STRING, NULL, + G_TYPE_BOOLEAN, NULL, + -1); + +g_hash_table_insert(pWindowModelHash, GLOBAL_VIEWS_DRAWER ,model); + +thornbury_set_widgets_models(pViewManagerPtr, pWindowModelHash); +``` + +View manager links the model to the mentioned widgets by calling `thornbury_set_widgets_models`. + +## Associating a model to a widget + +View Manager creates the GObject of respective widgetTypes given in the views' json files. + +Data has to be provided by the user through the Model, which contains data in a format recognized by the widget. + +## Signal creation + +Widgets will provide signals to indicate the occurrence of any event in the view. Views can register to those events and then decide if they can be handled in the view itself, or if they should be forwarded to the controller. + + + +## Setting a property on a widget + +We can update or modify the properties of the widget at runtime. For example, if we want to close the views drawers before switching to other views, then we set the `close` property of the views drawer widget to `TRUE` in a view switch callback we registered. + + + +## View Switch + +Views can be switched when the user clicks on something on the screen / faceplate or due to system's reaction. + +In general the view switching state machine is part of the controller. However the views have to support controller in view switching. By default, if the events from a widget can not be handled within a particular view, they should be handed over to the controller. In order to do this , the view class has to create a signal and emit it. The controller catches this signal and decides to make the switch. + + + +The switching of views happens in controller, refer to [Performing View Switch](#performing-view-switch). + +## Adding a new widget + +To add a new widget to an existing view the below steps needs to be followed: + +* Make an entry in the view JSON file. Open it and add the widget in this format: + + ``` + "WidgetNameInTheView": ["WidgetGObjectName", "WidgetPropertyJSONFileName", X_pos, Y_pos, Layernum] + ``` + + Here's an example code snippet: + +  + +* The widgets' JSON files can be seen at this path: `/usr/share/mildenhall/` + +* The widget name should be unique across views + +* Layer number can be comprised between 0 and 999. + +* Copy the widget's json file to the correct views folder. Restart the application. + +* Now, the widget will be added and initialized by view manager. The view manager uses the view definition file to parse the view information and starts the widget creation process. + +* The application can set the model and connect to signals of the widget using view manager. + +> Widgets will not paint themselves till a model is assigned to them. Model creation has to be done in the view's GObject. + +# Controller + +Controller is the decision maker and the glue between the model and the view. It updates the view when the model changes. It also listens to the view's signals and updates the model when the user manipulates the view. + +It has three major responsibilities: + +* Performing view switching + +* Registering to the SDK services / app agents using dbus interfaces (if needed) + +The picture below shows the controller Gobject structure in the sample project (HelloWorld) + + + +The controller class holds the reference to all the views' GObjects and connects to signals exposed by views' GObjects. For example, if the user pressed ListView from views-drawer in the UI, the button-press event will be relayed to the controller by the view's GObject, which switches the current view to ListView. + +## Performing view switch + +Switching between views can happen with or without animation. View manager provides APIs for both cases. + +A trigger to switch the view should come from the UI using some widget or from the system itself. + +This code snippet shows how to switch views using the view drawer widget. + +##  + +## Connecting with the backend + +Controller glues the app with the backend service. It acts like a client to the SDK service or the application service by connecting to the dbus. Once it is registered, it can use the interfaces of the service to interact with it. + +An example is the controller GObject of media player registering to the SDK audio service. When user presses **pause** in the app, the controller can emit a signal or call a dbus method in audio service interface to pause the streaming. + +This code snippet shows the app registering to the application service (also called agent). + + + +After registering to backend services, controller can use the fi's or connect to signals exposed by the service. + +For example, controller can call pause / play fi exposed by service to pause / play the media files. + + + + + +## Updating model with information from backend + +Controller updates the application model with the data (when there is a change in data or view). Here the controller updates the info widget with the respective artist / album meta detail which is played currently: + + diff --git a/content/developer/apps-core.md b/content/developer/apps-core.md new file mode 100644 index 0000000000000000000000000000000000000000..047d39666b732f65ae99cef07ff7101cfb138a90 --- /dev/null +++ b/content/developer/apps-core.md @@ -0,0 +1,20 @@ +--- +short-description: "Generic system applications" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Core applications + +These are apps that are bundled together with the system and get updated +when system gets updated: + + - rhayader – Browser + + - frampton – Audio player + + - eye – video player diff --git a/content/developer/bundle-spec.md b/content/developer/bundle-spec.md new file mode 100644 index 0000000000000000000000000000000000000000..106ce9bd593352e8756d61d7844e5f66407db5d5 --- /dev/null +++ b/content/developer/bundle-spec.md @@ -0,0 +1,1235 @@ +--- +short-description: "Apertis application bundle spec" + +authors: + - name: Simon McVittie + email: smcv@collabora.com + years: [2016, 2017] + +license: CC-BY-SAv4.0 +... + +# Apertis Application Bundle Specification, version 1.2.0 + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL +NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and +"OPTIONAL" in this document are to be interpreted as described in +[RFC 2119](https://tools.ietf.org/html/rfc2119). + +This specification uses [semantic versioning]. After version 1.0.0 is +finalized, the major version number (first component) will be incremented +if a change makes previously-valid application bundles cease to work or +be valid, for example changing "MAY" to "MUST" or "MUST NOT". The minor +version number (second component) will be incremented if a change makes +previously-invalid application bundles valid, for example changing "MUST" +or "MUST NOT" to "MAY". The micro version number (third component) will +be incremented for editorial changes that do not affect the validity of +an application bundle. + +## Introduction + +This document aims to provide a stable filesystem layout for Apertis +[store application bundles] that can remain valid across multiple versions. + +To keep older application bundles installable on newer Apertis releases, +we anticipate that incompatible changes (incrementing the major version) +are to be made very infrequently. If necessary, Apertis framework components +might be made to support multiple major versions of this specification. + +A secondary goal of this specification is to provide a basis for the +structure of [built-in application bundles]. Authors of built-in application +bundles do not necessarily need to limit themselves to the baseline set +by this specification, since a built-in application bundle will only +be upgraded or rolled back at the same time as a corresponding upgrade +or rollback for the Apertis platform. However, by following the +requirements and recommendations in this specification, a built-in +application bundle author can minimize the changes necessary between +Apertis platform releases. Please see +[](Appendix: built-in application bundles) for differences between +the required structure of store bundles and the required structure of +built-in application bundles. + +App-bundles contain some or all of the following files: + +* `bin/*` ([][Executables]) +* `etc/apparmor.d/Applications.`*bundle-ID* ([][AppArmor profile]) +* `lib/*` ([][Libraries]) +* `libexec/*` ([][Executables]) +* `share/applications/`*entry-point*`.desktop` ([][Entry points]) +* `share/glib-2.0/schemas/`*schema-ID*`.gschema.xml` ([][GSettings schemas]) +* `share/glib-2.0/schemas/gschemas.compiled` ([][GSettings schemas]) +* `share/icons/hicolor/64x64/apps/`*bundle-ID*`.png` ([][Icon for the bundle]) +* `share/icons/hicolor/64x64/apps/`*entry-point*`.png` ([][Icons for entry points]) +* `share/icons/`*theme*`/` ([][Icons for use by the bundle]) +* `share/locale/*/LC_MESSAGES/*.mo` ([][Localized strings]) +* `share/metainfo/`*bundle-ID*`.appdata.xml` ([][Bundle metadata]) +* `share/metainfo/`*bundle-ID*`.metainfo.xml` ([][Bundle metadata]) +* `share/themes/`*theme*`/*` ([][Theme data for use by the bundle]) +* `share/*` ([][Generic resource data]) + +all of which will be installed relative to `/Applications/`*bundle-ID*. + +To reduce its length, this specification does not generally provide rationale +for its requirements. Please see the [Apertis concept designs] for design +rationale, in particular the [Applications concept design], +[Application Layout concept design] and [Application Entry Points concept +design]. + +## Bundle ID + +Each Apertis application bundle has a *bundle ID*, which MUST consist +of two or more components separated by dots (U+002E FULL STOP). Each +component MUST start with an ASCII letter (`A-Z`, `a-z`) or underscore +`_`, and contain only ASCII letters, underscores and ASCII decimal digits +(`0-9`). Bundle IDs MUST NOT contain non-ASCII characters, for example +accented letters such as `ä`. + +> Note that these are the same as the requirements for a +> [D-Bus interface name], which are stricter than the requirements for a +> D-Bus bus name or a [GApplication application ID]: every bundle ID +> is a valid bus name and a valid GApplication application ID, but not +> every bus name or application ID is a valid bundle ID. + +### Reversed domain name + +The author of an application MUST choose a bundle ID that starts with a +[reversed domain name][Reverse domain name notation] controlled by that +author, with any hyphen/minus signs `-` replaced by underscores `_`, and +`_` prepended to any component that starts with a digit. + +For example, the owner of the domain name `collabora.com` controls the +reversed domain name `com.collabora` and might choose to name an app bundle +`com.collabora.ShoppingList`. + +Domain names with hyphen/minus signs, or with components starting with +a digit, require special treatment to avoid syntactically invalid bundle IDs. +If the owner of `7-zip.org` wishes to base bundle IDs on that domain name, +they MUST use a bundle ID starting with `org._7_zip`; for example, they might +choose to name an app bundle `org._7_zip.Archiver`. + +## Top-level directory + +Each application bundle is made available on the user's system as a +subdirectory of `/Applications` whose name is the same as the bundle ID. +App bundles MUST NOT include any file outside that directory. + +For example, the app bundle `com.example.ShoppingList` would use a +top level directory `/Applications/com.example.ShoppingList/`. + +For brevity, this document will refer to this directory as `${prefix}`. + +## Bundle metadata + +Each app-bundle MUST install exactly one file in the +`${prefix}/share/metainfo/` directory. The contents of that file +are interpreted according to the [AppStream upstream XML] specification. + +This table provides a summary of the relevant tags. All other tags are either +not recommended for any type of bundle, or not allowed. + +| Tag | Status | +|-------------------------------|-------------------------------| +| `id` | required, must be bundle ID | +| `name` | required | +| `summary` | recommended | +| `description` | recommended | +| `developer_name` | recommended | +| `metadata_license` | required, should be `CC0-1.0` | +| `project_license` | optional | +| `url` | optional | +| `releases` | required | +| `releases` → `release` | required, exactly one | +| `provides` | optional | +| `provides` → `dbus` | optional | +| `provides` → *any other* | not allowed | +| `custom` → `value` | optional | + +If the app-bundle has [][Entry points], the file MUST be named +either `${bundle_id}.appdata.xml` or `${bundle_id}.metainfo.xml`, replacing +`${bundle_id}` with the [][Bundle ID]. In this case the `component` tag MUST +have its `type` attribute set to `desktop`. + +If the app-bundle does not have [][Entry points], the file MUST be named +`${bundle_id}.metainfo.xml`, again replacing `${bundle_id}` with the +[][Bundle ID]. In this case the `component` tag MUST NOT have a `type` +attribute. + +The `id` tag MUST contain exactly the Apertis [][Bundle ID]. + +The `name` tag MUST contain a human-readable name for the app-bundle, +for example `Shopping List`. + +The `summary`, `description` and `developer_name` tags SHOULD be present, +with the contents described by the [AppStream upstream XML] specification. + +The `metadata_license` tag MUST be present, and MUST contain the +identifier of a permissive license under which the metadata can be +redistributed. This license SHOULD be the [Creative Commons Zero license], +`CC0-1.0`, allowing unlimited redistribution of the metadata with or +without modifications (for example in the user interface of an app-store). + +The `metadata_license` does not imply anything about the terms under which +the app-bundle itself can be distributed: app-bundles themselves MAY be +distributed under any license of their copyright holder's choice, +including proprietary licenses. The bundle metadata MAY represent that +license in the `project_license` tag, as described in the +[AppStream upstream XML] specification. + +The `url` tag MAY be present, with the types and contents described by +the [AppStream upstream XML] specification. + +The `releases` tag MUST be present, and MUST contain exactly one +`release` tag. The `release` tag MUST have a `version` attribute. +Its value MUST start with a digit and contain only digits and +U+002E FULL STOP characters. +Note that this is a more strict requirement than in the AppStream upstream +XML specification, which allows additional `release` tags describing +older releases. + +> Future directions: +> +> This is a very strict versioning syntax, matching what Ribchester accepts +> in Apertis 16.09. We should consider expanding this in a future minor +> version of this specification to be able to accept dpkg-style versions +> like `1.2.3~beta1+bugfix2`. This will require a formal specification +> for how these version numbers are to be compared, possibly deferring +> to [Debian Policy][Debian versions]. +> +> The [Applications concept design] calls for the version number to be +> split into an *application version* and a *store version*, analogous +> to the roles of the *upstream version* and *Debian revision* in Debian. +> +> **Open question**: is the store version encoded in the `release` tag, +> or is it stored in a `custom` tag or separately? + +The `provides` tag MAY be present. It MAY contain a `dbus` tag, with its +`type` attribute set to `user`, for each well-known name provided by an +entry point in this application bundle. It MUST NOT contain any of the +other child tags that can be provided. + +The `mimetypes` tag MUST NOT be present. In Apertis, content-type support +is handled by [][Entry points]. + +The `project_group` tag MUST NOT be present. + +Tags that are not specified in the AppStream upstream XML specification +MUST NOT be present, with the exception of `custom` (see +[][Extended bundle metadata], below). + +Tags not specified in this document, in particular `screenshots`, `suggests`, +`translation` and `update_contact`, SHOULD NOT be present. + +### Extended bundle metadata + +The bundle metadata MAY include one `custom` tag at the next level +of hierarchy below `component`. This tag MAY contain `value` child tags, +each with a `key` attribute and XML character data (text) content. It MUST +NOT contain other child tags or text. + +Later versions of this specification will define keys starting with +`X-Apertis-`. Keys with that prefix that are not defined in this document +MUST NOT be present. The current version of this document does not define +any such keys. + +Other vendors MAY define keys starting with `X-` followed by a name +distinctive to the vendor. + +Other keys SHOULD NOT be present. + +For example, if a future version of this specification defined +a key `X-Apertis-ExampleColour`, and a vendor Wayne Industries defined +a key `X-Wayne-BatmobileCompatible`, this might result in bundle +metadata like this: + + <?xml version="1.0" encoding="UTF-8"?> + <component type="desktop"> + <id>net.example.Extended</id> + <custom> + <value key="X-Apertis-ExampleColour">#00cc00</value> + <value key="X-WayneIndustries-BatmobileCompatible">true</value> + </custom> + … additional metadata here … + </component> + +> It is anticipated that this mechanism will be used for +> Apertis-specific or automotive-specific extensions that are considered +> insufficiently general to be included in the AppStream standard. + +## AppArmor profile + +Apertis uses [AppArmor] to provide [security between application bundles]. +Each app-bundle MUST install exactly one AppArmor profile file at +`${prefix}/etc/apparmor.d/Applications.${bundle_id}`, replacing +`${bundle_id}` with the [][Bundle ID]. + +This file MUST define exactly one AppArmor profile. Its name MUST be +exactly `/Applications/${bundle_id}/**`, again replacing `${bundle_id}` +with the bundle ID. It MUST NOT have any +[local profiles][AppArmor local profiles] (also known as child profiles +or subprofiles), and in particular MUST NOT have any [hats][AppArmor hats] +(which are a special case of local profiles). + +This file SHOULD contain the following rules, replacing `@BUNDLE_ID@` with the +[][Bundle ID] throughout: + +``` +/Applications/@BUNDLE_ID@/** { + #include <abstractions/chaiwala-base> + #include <abstractions/dbus-session-strict> + #include <abstractions/fonts> + + /Applications/@BUNDLE_ID@/{bin,libexec}/* pix, + /Applications/@BUNDLE_ID@/{bin,lib,libexec}/{,**} mr, + /Applications/@BUNDLE_ID@/share/{,**} r, + + owner /var/Applications/@BUNDLE_ID@/users/** rwk, + + owner link + subset /var/Applications/@BUNDLE_ID@/users/** + -> /var/Applications/@BUNDLE_ID@/users/**, + + dbus send + bus=session + path=/org/freedesktop/DBus + interface=org.freedesktop.DBus + member={RequestName,ReleaseName} + peer=(name=org.freedesktop.DBus), + dbus bind bus=session name="@BUNDLE_ID@", + dbus bind bus=session name="@BUNDLE_ID@.*", + dbus (send, receive) bus=session peer=(label=/Applications/@BUNDLE_ID@/**), + dbus receive bus=session peer=(label=/usr/bin/canterbury), + + signal receive peer=/usr/bin/canterbury, +} +``` + +The profile MAY add additional permissions. The app-store curator is expected +to check additional permissions carefully. + +> Future direction: [the profile should be generated from simpler +metadata](https://phabricator.apertis.org/T311) in a future minor version of +this specification. +> +> Future direction: if we recommend particular interpreters — for example +> `/bin/sh` for wrappers that set environment variables, a JavaScript +> or Python interpreter for interpreted app code, or a webapp runtime +> for HTML5 apps — then the generic profile recommendation should allow +> those interpreters to be used. + +## Entry points + +Each app-bundle MAY install `.desktop` files in the +`${prefix}/share/applications/` directory. The contents of that file +are interpreted according to the [Desktop Entry Specification]. + +App bundles are not required to install any entry points at all, but +many features can only be provided by an app bundle that has entry points: +[][Graphical programs] in the main menu MUST have an entry point, +and [][Content type and uri scheme handlers] MUST have a +[][Main entry point]. + +The name of each desktop entry file, excluding the `.desktop` extension, is +called the [][Entry point ID]. + +This table provides a summary of the allowed, recommended and optional +fields. All other fields are either not recommended for any type of entry +point, or not allowed. A table cell containing a literal value indicates that +the field is required and must have exactly that value. + +| Field | [][Main entry point] | Other graphical programs | Agents | +|--------------------------------|-----------------------|--------------------------|--------------------| +| `Categories` | required | required | not recommended | +| `Exec` | required | required | required | +| `GenericName` | optional | optional | optional | +| `Icon` | required | required | not recommended | +| `Interfaces` | optional | optional | optional | +| `MimeType` | optional | not allowed | not allowed | +| `Name` | recommended | recommended | recommended | +| `NoDisplay` | optional | optional | `true` | +| `OnlyShowIn` | `Apertis;` | `Apertis;` | `Apertis;` | +| `Path` | optional | optional | optional | +| `Type` | `Application` | `Application` | `Application` | +| `X-Apertis-CategoryIcon` | required | required | not recommended | +| `X-Apertis-CategoryLabel` | required | required | not recommended | +| `X-Apertis-Type` | `application` | `application` | `agent-service` | +| `X-GNOME-FullName` | optional | optional | optional | +| `DBusActivatable` | `true` recommended | `true` recommended | `true` recommended | +| `X-Apertis-ServiceExec` | recommended | optional | not allowed | +| `X-Apertis-ParentEntry` | not recommended | optional | not allowed | + +### General fields for all entry points + +`Type` MUST be set to `Application`. + +`OnlyShowIn` MUST be set to `Apertis;`. + +`Exec` MUST be present. The first word in `Exec` MUST be the absolute path +to an executable in either `${prefix}/bin` or `${prefix}/libexec`. + +Subsequent words in `Exec` MUST NOT use the `%` placeholders such as `%F`. + +> The Canterbury application manager does not support those placeholders. + +Subsequent words in `Exec` MUST NOT be exactly `app-name`, `play-mode` +or `url`, and SHOULD NOT be exactly `menu-entry`. + +> These words cause unexpected special behaviour in Apertis 16.06. After +> this special behaviour has been removed, future minor versions of this +> specification should remove this limitation. + +`Name` SHOULD be specified. Its value MAY be a "brand name" such as `Firefox`, +a generic name such as `Web browser`, or a combination of the two such as +`Firefox web browser`. + +`GenericName` SHOULD be specified if its value would differ from `Name`. +If present, its value MUST be a generic (unbranded) name such as `Web browser`, +for use in user interfaces whose designer wishes to standardize on generic +names. + +`X-GNOME-FullName` SHOULD be specified if its value would differ from `Name`. +If present, its value SHOULD be a full name incorporating both the brand name +and the generic name, for example `Firefox web browser`, suitable for use in +situations where it is necessary to disambiguate between entry points with +the same `GenericName` (for example if both Firefox and Chrome have +`GenericName=Web browser`). + +Translated versions of these names, +such as `Name[fr]`, MAY be present using the [localestring] mechanism +defined in the Desktop Entry Specification. + +`Path` MAY be set, with its usual meaning (it sets the current working +directory for the program). If `Path` is not set, programs in the +app-bundle will inherit the working directory of the parent process, +and MUST NOT assume that it will take any particular value. + +`Interfaces` MAY be set, for [interface discovery]. + +`DBusActivatable` MAY be present and set to `true`, as described in +[][D-Bus activation]. + +`X-Apertis-ServiceExec` MAY be set, as described in [][D-Bus activation]. + +`X-Apertis-ParentEntry` MAY be set, as described in [][Multiple views]. + +The following keys MUST NOT be present: + +* `Encoding` (the encoding MUST be UTF-8, which is the default) +* `Hidden` (this misleadingly named key is used to mark entry points as + deleted, which is not useful in this context) +* `NotShowIn` +* `StartupNotify` +* `StartupWMClass` +* `Terminal` +* `URL` +* `Version` (version 1.0 of the Desktop Entry specification is assumed) + +The following keys SHOULD NOT be present, and application bundles SHOULD NOT +rely on their normal functionality (if any): + +* `Actions` +* `Comment` +* `Environment` +* `Keywords` +* `TryExec` +* `X-Apertis-AudioChannelName` +* `X-Apertis-AudioResourceOwner` +* `X-Apertis-AudioRole` +* `X-Apertis-BackgroundState` +* `X-Apertis-BandwidthPriority` +* `X-Apertis-DataExchangeRules` (obsolete) +* `X-Apertis-ManifestUrl` (obsolete) +* `X-Apertis-SettingsIcon` (set an `Icon` instead) +* `X-Apertis-SettingsName` (set the `name` in the [][Bundle metadata] + instead) +* `X-Apertis-SettingsPath` (use the mechanism described in + [][GSettings schemas] instead) +* `X-Apertis-SplashScreen` +* `X-Apertis-WindowName` (obsolete) + +> Future directions: +> +> `X-Apertis-AudioRole`, `X-Apertis-BackgroundState` and +> `X-Apertis-BandwidthPriority` are under +> consideration for a future minor version of this specification, but are not +> currently considered to be stable. + +### Entry point ID + +Each entry point MUST have an *entry point ID*, which is a string with the +same syntax requirements as a [][Bundle ID]. The name of the `.desktop` file +MUST be the entry point ID followed by `.desktop`. + +Like the [][Bundle ID], all entry point IDs in an app-bundle MUST start with a +[][Reversed domain name] controlled by the author. It is RECOMMENDED that all +entry point IDs in an app-bundle either match its bundle ID exactly, or +start with the bundle ID followed by a dot. + +A single executable program MAY be represented by more than one entry point. + +If a program will request a D-Bus well-known bus name to provide +interfaces to graphical programs in the same bundle, the well-known bus +name MUST be the same as one of its entry point IDs. + +### Main entry point + +Each app-bundle that has any entry points SHOULD have an entry point +whose [][Entry point ID] is exactly the [][Bundle ID]. This entry point +is referred to as the *main entry point*, and MUST be a +[graphical program][Graphical programs]. + +Certain metadata fields of the main entry point, including its `Categories`, +`Icon` and `MimeType`, are copied into the cache of bundle metadata during +installation and hence made available to platform applications. + +### Content type and URI scheme handlers + +The [][Main entry point] MAY be registered as the [content type handler] for +media types such as `audio/mpeg`, by setting `MimeType` to a list of +[content types][IETF media types], each followed by a semicolon `;`. +Non-main entry points MUST NOT be content type handlers. For example, +a media player with support for the MP3 and RealAudio formats might use +`MimeType=audio/mpeg;audio/vnd.rn-realaudio;` in its entry point. + +The [][Main entry point] MAY be registered as the handler for +[URI schemes][IETF URI schemes] such as `tel` or `http`, by +including an entry in `MimeType` for the pseudo-content-type +`x-scheme-handler/`*scheme*, for example `x-scheme-handler/http` for a +web browser. Non-main entry points MUST NOT be URI scheme handlers. + +If the entry point implements [][D-Bus activation], sending the +[`org.freedesktop.Application.Open` method call][DBusActivatable] to the +object path corresponding to its entry point ID MUST result in it attempting +to open the URI or URIs passed as parameters. + +### Graphical programs + +Each graphical program (user interface, HMI) that will be directly launched +by the user MUST have an entry point. Each graphical program that will +be associated with content types or URIs MUST have an entry point. + +A graphical program MAY have more than one entry point, to appear in menus +more than once (for example, +[the Frampton media player uses this][Frampton multiple entry points] +to appear three times under the names Artists, Albums and Songs). + +Graphical programs MUST set `X-Apertis-Type` to `application`. + +> This is required by Apertis 16.09, but might be phased out in a +> later minor version of this specification. + +If a graphical program is intended to be shown in the menus, `NoDisplay` +MUST NOT be specified. Otherwise, it MUST be specified and set to `true` +(for example, the Frampton media player uses this to allow its *main entry +point* to be associated with media file types while hiding it from the +menus). + +`Categories` MUST be set to a list of appropriate menu categories from the +freedesktop.org [Desktop Menu Specification][Desktop Menu categories], +each followed by a semicolon `;`. There MUST be at least one Main Category. + +`X-Apertis-CategoryLabel` MUST be set to the human-readable English name +of a single category, which MUST be in title-case with no special +formatting (for example, `Video & TV` is correct, while `V I D E O   &   T V` +is not). + +> This is required by Apertis 16.09, but should be phased out in favour +> of having launchers parse Categories in a later minor version of this +> specification. + +`X-Apertis-CategoryIcon` MUST be set to the name of the icon to be used +for the category in launchers, with no `/` characters or +file-type extension, for example `icon_music_AC`. The icon MUST be +chosen from among those provided by the platform's launcher (the allowed +values are therefore platform-specific). + +> This is required by Apertis 16.09, but should be phased out in favour +> of having launchers parse Categories in a later minor version of this +> specification. + +`Icon` MUST be set to the name of either the [][Icon for the bundle] or one +of the [][Icons for entry points], as a bare icon name (without any `/` +characters, and without a file-type extension such as `.png` or `.svg`). In +particular, this implies that its string value MUST match either the +[][Bundle ID], or the [][Entry point ID] of an entry point. + +### Multiple views + +Some application designs have a group of entry points that are all +implemented by invoking the same executable with different parameters, +all implemented in the same process. For example, a music player might +have separate entry points to view the music library grouped by artist or +album, or as a single flat list of songs. + +In applications that work like this, one of these views MUST be +nominated to be the *parent entry point*, with the others as *child entry +points*. The parent will usually be the [][Main entry point], although this +is not required. The main entry point SHOULD NOT be a child entry point. + +A parent entry point MUST NOT have the `X-Apertis-ParentEntry` field. +It MUST set `DBusActivatable` to `true`, and implement +[D-Bus activation] for its own entry point ID and the entry point IDs +of all associated child entry points. It SHOULD set +`X-Apertis-ServiceExec`. + +Child entry points MUST set the `X-Apertis-ParentEntry` field +to the [][Entry point ID] of the parent entry point, and MUST set +`DBusActivatable` to `true`. They MUST NOT set `X-Apertis-ServiceExec`. + +Agents and other non-graphical programs MUST NOT be parent or child +entry points. + +### D-Bus activation + +Programs in an app-bundle MAY declare that they implement *D-Bus activation* +by setting `DBusActivation` to `true` in each entry point that starts the +same program. + +Graphical program entry points that set `DBusActivation` to `true` +and do not have an `X-Apertis-ParentEntry` field SHOULD also have an +`X-Apertis-ServiceExec` field. The `X-Apertis-ServiceExec` field has the +same syntax as the standard `Exec` field. + +Agents MUST NOT have an `X-Apertis-ServiceExec` field, since their `Exec` +field has essentially the same meaning. + +We define the *service activation command line* to be the +`X-Apertis-ServiceExec` field if present, or the `Exec` field otherwise. + +The service activation command line MUST be a command-line that will start +the program without opening any graphical windows, such that it will be +ready to receive D-Bus requests. If a program uses the [GApplication] +API (which is recommended), then the service activation command line for +graphical programs will typically be the absolute path of the executable +followed by a space and the `--gapplication-service` argument, for example +`X-Apertis-ServiceExec=/Applications/com.example.ShoppingList/bin/main --gapplication-service`, +while the service activation command line for agents and other non-graphical +programs (with the [`G_APPLICATION_IS_SERVICE` flag][G_APPLICATION_IS_SERVICE]) +will typically just be the path to the executable. + +When the service activation command line for a graphical program is +launched, the resulting process MUST export a D-Bus object path that +is derived from the entry point ID by prepending `/` and replacing +each `.` with `/`, then request a well-known name equal to the entry +point ID. The interfaces of that object path MUST include at least the +[`org.freedesktop.Application` interface][DBusActivatable], and MAY include +additional standard or non-standard interfaces such as the +[`org.gtk.Application` interface][org.gtk.Application] +used by GLib's [GApplication] objects. When launched in this way, the +process MUST NOT behave as though any of its entry points were activated +until it receives an appropriate D-Bus method call; in particular, it +MUST NOT open any windows until it is told to do so. + +When the service activation command line for an agent or non-graphical +program is launched, the resulting process MAY export a D-Bus object +path implementing `org.freedesktop.Application` as above, but is not +required to do so. If it does, the `Activate` and `Open` methods are +not required to be implemented, since they are unlikely to be useful +for non-graphical programs. + +If an entry point has an `X-Apertis-ParentEntry` field (a +[child entry point][Multiple views]), when the parent entry point +named in that field is started by its service activation command line, +the resulting process MUST also export D-Bus object paths and request +well-known names corresponding to the entry point IDs of each of its +child entry points. + +For graphical programs, sending the +[`org.freedesktop.Application.Activate` D-Bus method call][DBusActivatable] +to one of the object paths described above MUST +result in the program displaying whatever window is appropriate for the +corresponding entry point. If the graphical program implements +[content-type handling][Content type and uri scheme handlers], +then the same is true for the +[`org.freedesktop.Application.Open` method][DBusActivatable]. +This requirement is not applicable to agents and other non-graphical +programs. + +The process MAY export additional object paths and interfaces. It +SHOULD NOT request additional well-known names. + +When the `Exec` command of a D-Bus-activatable graphical entry point +is launched, the resulting process MUST arrange for a program to be +run (directly or indirectly) that will request the well-known name +corresponding to that entry point ID, export the corresponding +D-Bus object path, and behave as though that object path had +received an `Activate` or `Open` method call, modified according to the +command-line arguments if appropriate: in other words, it has behaviour +similar to the `Exec` command of a non-D-Bus-activatable graphical +program. If the program uses the [GApplication] API, this will +normally be achieved by setting `Exec` to the absolute path of the +executable, with no arguments, for example +`Exec=/Applications/com.example.ShoppingList/bin/main`. This requirement +is not applicable to agents and other non-graphical programs. + +See the [specification of the Application interface][DBusActivatable] +for more details about its methods. + +### Agents + +Each agent (background service) MUST have an entry point. + +Agents MUST set `X-Apertis-Type` to `agent-service`. + +> This is required by Apertis 16.09, but might be phased out in a +> later minor version of this specification. + +Agents MUST set `NoDisplay` to `true`. + +Agents SHOULD set `DBusActivatable` to `true`, and implement +[][D-Bus activation] as described above. + +## Paths for other file types + +### Executables + +Any executable programs in the app-bundle MUST be installed in either +the `${prefix}/bin` or `${prefix}/libexec` directory, or a descendant +directory in `${prefix}/libexec`. For example, these +paths are valid: + +``` +${prefix}/bin/my-executable +${prefix}/libexec/my-helper-executable +${prefix}/libexec/other-helper/other-helper-executable +``` + +> Suitable directories are conveniently available as `${bindir}`, +> `${libexecdir}` and ${pkglibexecdir}` when using Automake. + +### Libraries + +An Apertis application bundle MAY contain private libraries for use by +that application bundle, for example shared libraries written in +C or C++, or Python modules. + +If present, architecture-dependent library files MUST be located in the +`${prefix}/lib` directory or a descendant of that directory. +Architecture-independent library files such as "pure Python" modules +MUST be located in either the `${prefix}/lib` or `${prefix}/share` directory, +or a descendant of one of those directories. + +For example, the app bundle `com.example.ShoppingList` might contain +library files `/Applications/com.example.ShoppingList/lib/libwebapi.so.0` or +`/Applications/com.example.ShoppingList/lib/python3/webapi/__init__.py`. + +Native executables SHOULD be linked with a `DT_RPATH` pointing to the +location of their required libraries. For example, the ShoppingList +app bundle described above might be linked using +`gcc -Wl,-rpath=/Applications/com.example.ShoppingList/lib`. + +> If the app bundle is built using GNU automake and libtool, this will +> typically be done automatically. + +Programs in app-bundles MUST NOT assume that any special environment variables +to locate libraries, such as `LD_LIBRARY_PATH`, `GI_TYPELIB_PATH` or +`PYTHONPATH`, will be set by the application framework. For example, if the +ShoppingList app bundle described above needs to be able to load +`/Applications/com.example.ShoppingList/lib/python3/webapi/__init__.py` +via the Python statement `import webapi`, it cannot assume that +`/Applications/com.example.ShoppingList/lib/python3` is already in `sys.path`. +Its main executable might prepend that directory to `sys.path`, or its +main executable might be a shell script that sets `PYTHONPATH` and then runs +the underlying Python code with `exec`. + +> A possible change in future minor versions of this specification would be to +> set a specified list of environment variables used by a specified set of +> recommended libraries, such as `LD_LIBRARY_PATH` for libc and +> `GI_TYPELIB_PATH` for GObject-Introspection. Python is not among our +> recommended frameworks, so we would probably still not include `PYTHONPATH`. + +For each native ELF library, the app-bundle MUST contain a file whose name +exactly matches the [SONAME][] (ELF `DT_SONAME`) of the library, in a directory +that will be searched by all executables that use that library (for example +via `DT_RPATH` or `LD_LIBRARY_PATH`). This file MUST either be a regular file +(the library itself), or a symbolic link to the library's "real name". + +Building and installing shared libraries using GNU libtool is RECOMMENDED: +libraries built like this will typically have a correct symbolic link from the +`SONAME` to the "real name" without further action from the developer. + +For example, if the ShoppingList app-bundle has executables linked to +a private library whose `SONAME` is `libwebapi.so.0`, it might include +a regular file with exactly that name; or it might include a regular file named +`libwebapi.so.0.1.2`, and a symbolic link `libwebapi.so.0 → libwebapi.so.0.1.2`. + +### Icon for the bundle + +The app-bundle MAY have an icon to represent the bundle as a whole, in a +generic user interface icon theme. The generic user interface icon theme +is represented by the reserved theme name `hicolor`, as required by the +freedesktop.org [Icon Theme Specification]. + +If the app-bundle has this icon, it MUST be in [Portable Network Graphics] +format, 64×64 pixels in size, and MUST be located at + +``` +${prefix}/share/icons/hicolor/64x64/apps/${name}.png +``` + +where `${name}` is set to the [][Bundle ID]. + +> **Open question**: I'm arbitrarily choosing 64x64 because that's what the +> AppStream specification uses, but do we have a different preferred size in +> Apertis? + +To minimize display artefacts caused by resizing, the app-bundle MAY make +this icon available in some or all of the additional sizes used in the +freedesktop.org [reference implementation][hicolor icon theme] +of the `hicolor` fallback theme +(8, 16, 22, 24, 32, 36, 42, 48, 64, 72, 96, 128, 192, 256 or 512 pixels). +These MUST be installed to the corresponding path with `64x64` replaced by +the appropriate size. + +The app-bundle MAY have variations of this icon that fit better in +specific user interface themes. If present, these MUST be installed +to the corresponding path with `hicolor` replaced by the name of the +intended theme. For example, if a theme named `net.example.Metallic` +is popular, an app-bundle might include a version of its own icon that has +been designed to coordinate well with the Metallic theme, at + +``` +${prefix}/share/icons/net.example.Metallic/64x64/apps/${name}.png +``` + +### Icons for entry points + +Any entry point MAY have an icon to represent it. If present, it MUST +be named in the same way as the icon for the bundle as a whole, except +that `${name}` is set to the [][Entry point ID] instead of the bundle ID. + +Note that this means the [][Main entry point] of the app-bundle will +always use the same icon as the bundle itself. + +### Icons for use by the bundle + +The app-bundle MAY contain other icons. They SHOULD be arranged according +to the freedesktop.org [Icon Theme Specification]. + +For example, if the app-bundle is an email client, it might include a +`mail-mark-important` icon for use by a "Mark as Important" button. If it +has a generic version for use by unrecognised themes, and that generic +version is 24 pixels in size, that version might be installed in: + +``` +${prefix}/share/icons/hicolor/24x24/actions/mail-mark-important.png +``` + +If the app-bundle also has a version for use by a popular theme named +`net.example.Metallic`, it might install that as: + +``` +${prefix}/share/icons/net.example.Metallic/24x24/actions/mail-mark-important.png +``` + +The app-bundle MAY assume that it will be launched with the +[`XDG_DATA_DIRS` environment variable][Base Directory Specification] +set to a value that includes `${prefix}/share`, so +that common icon theme implementations such as [GtkIconTheme] will +automatically use icons from the `${prefix}`. + +### Theme data for use by the bundle + +The app-bundle MAY install theme data into subdirectories of +`${prefix}/share/themes` whose names correspond to theme names. + +The app-bundle MAY assume that it will be launched with the +[`XDG_DATA_DIRS` environment variable][Base Directory Specification] +set to a value that includes `${prefix}/share`, so +that common theme implementations such as [GtkCssProvider] will +automatically use theme data from the `${prefix}`. + +### GSettings schemas + +[GSettings schemas][GSettings] are used for [preferences]. + +The app-bundle MAY install one or more [GSettings schemas][GSettings] into +`${prefix}/share/glib-2.0/schemas/`. The filenames used MUST be the +schema ID followed by `.gschema.xml`, optionally accompanied by enum +definitions in a file named by the schema ID followed by `.enums.xml`. +Each schema ID SHOULD either match the [][Bundle ID] exactly, or +start with the bundle ID followed by a dot. + +If the app-bundle installs any schemas, then it MUST also install a compiled +binary form of those schemas, in +`${prefix}/share/glib-2.0/schemas/schemas.compiled`. The +`glib-compile-schemas` tool can be used to compile this binary form. + +The app-bundle MAY install a schema whose schema ID matches the [][Bundle ID] +exactly. If it does, then that schema's child schemas MUST all +start with the bundle ID followed by a dot, and that schema and its child +schemas will be made available in the system settings user interface. + +If the app-bundle author does not intend for it to appear in the system +settings user interface, then the app-bundle MUST NOT use its bundle ID +as a schema ID. It MAY use an alternative schema ID such as +`${bundle_id}.Internal`, resulting in a schema file named +`${bundle_id}.Internal.gschema.xml`. + +The app-bundle MAY assume that it will be launched with the +[`XDG_DATA_DIRS` environment variable][Base Directory Specification] +set to a value that includes `${prefix}/share`, so +that GSettings will automatically use these schemas. + +### Localized strings + +Some file formats, such as `.desktop` files and AppStream XML, put +[localized strings][Internationalization concept design] +in a single file, typically built from an international English +version and a set of translations at build-time. For the following file +formats, the app-bundle MUST include all of its supported translations +(for example a translated `Name`) in a single file: + +* [][Entry points] +* [][Bundle metadata] + +Otherwise, application bundles that contain localized strings SHOULD use +[GNU gettext] +`.mo` files. These SHOULD be stored in the `${prefix}/share/locale` hierarchy, +with a subdirectory named for the *locale* in which the language is used, +and a `LC_MESSAGES` subdirectory inside that containing one or more `.mo` +files. The name of the `.mo` files (the *text domain*) SHOULD either be +exactly the [][Bundle ID], or the bundle ID followed by a dot and +one or more additional components. Using a single text domain whose name +is exactly the bundle ID is RECOMMENDED. + +For example, if the app bundle `com.example.ShoppingList` is localized into +generic international French, French as spoken in Canada, and +Uzbek written in Cyrillic, it might contain: + +* `/Applications/com.example.ShoppingList/share/locale/fr/LC_MESSAGES/com.example.ShoppingList.mo` +* `/Applications/com.example.ShoppingList/share/locale/fr_CA/LC_MESSAGES/com.example.ShoppingList.mo` +* `/Applications/com.example.ShoppingList/share/locale/uz@cyrillic/LC_MESSAGES/com.example.ShoppingList.mo` + +The other `LC_` directories used by gettext MAY exist alongside `LC_MESSAGES`. + +If using `gettext`, programs in the app bundle would typically have to make +API calls similar to these to activate these localized strings: + +``` +setlocale (LC_ALL, ""); +bindtextdomain (GETTEXT_PACKAGE, DATADIR "/locale"); +bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); +textdomain (GETTEXT_PACKAGE); +``` + +where `DATADIR` would be defined to `\"${datadir}\"` by the build system +(expanded to `/Applications/com.example.ShoppingList/share` at build time), +and `GETTEXT_PACKAGE` would be defined to `com.example.ShoppingList` in +this example. + +In general, use of gettext is not mandatory, and neither is this specific +layout. +Application bundles MAY store localized strings in any format of their +choice, in any subdirectory of `${prefix}/lib` or `${prefix}/share`. +If this is done, the application bundle author is responsible for arranging +for those localized strings to be loaded. + +There is one special case where use of gettext and this specific layout +*is* mandatory. If an app bundle contains [][GSettings schemas], and those +schemas support localized contents by using the `gettext-domain` attribute, +then the `gettext-domain` that is declared MUST be either the [][Bundle ID], +or the bundle ID followed by a dot and one or more additional name +components. Again, using exactly the bundle ID for the gettext domain +is RECOMMENDED. + +> One possible direction for a future minor version would be to allow +> GSettings schemas to include inline translations, similar to `.desktop` +> files. This would require GLib modifications: at the moment this is +> specifically not allowed by GLib. + +### Generic resource data + +Non-executable resource files such as graphics and sounds MUST be located +in either the `${prefix}/lib` or `${prefix}/share` directory, or a descendant +of one of those directories. + +CPU-architecture-dependent resource files MUST be located in the `${prefix}/lib` +directory or a descendant of that directory. CPU-architecture-independent +resource files SHOULD be located in the `${prefix}/share` directory or +a descendant of that directory. + +The app-bundle MAY assume that it will be launched with the +[`XDG_DATA_DIRS` environment variable][Base Directory Specification] +set to a value that includes `${prefix}/share`, so +that any library that uses that variable (for example via +`g_get_system_data_dirs()`) will automatically load resource files from +the appropriate subdirectory of `${prefix}/share`. + +The app-bundle MUST NOT assume that the application framework will set +environment variables that make it load resource files from `${prefix}/lib`. + +## Example + +For example, suppose the owner of `example.net` produces an application +named Shopping List, with a graphical program to display shopping lists, +and a background agent to pop up reminders when the vehicle is driven +near a supermarket. Suppose the agent provides a D-Bus API to the +graphical program. + +Suppose this application also opens the `application/vnd.example.shoppinglist` +content type, and handles `myproduct:` URIs. + +Suppose the bundle ID is `net.example.ShoppingList`, so the bundle's files +will be available at `/Applications/net.example.ShoppingList`. +The minimal metadata required for this bundle might resemble what is shown +in this section; all paths are given relative to +`/Applications/net.example.ShoppingList`, which we will refer to as +`${prefix}`. + +[Application bundle metadata][Bundle metadata], to be installed as +`${prefix}/share/metainfo/net.example.ShoppingList.appdata.xml`: + + <?xml version="1.0" encoding="UTF-8"?> + <component type="desktop"> + <id>net.example.ShoppingList</id> + <metadata_license>CC0-1.0</metadata_license> + <name>Shopping List</name> + <summary>Keep track of your groceries</summary> + <description> + <p>Never run out of cornflakes again with this easy-to-use shopping + list manager, featuring:</p> + <ul> + <li>Special offer notifications</li> + <li>Driving directions to the nearest supermarket</li> + <li>Cloud synchronization</li> + </ul> + <developer_name>Example Software Inc.</developer_name> + <url type="homepage">https://example.net/shopping-list/</url> + <release version="1.0" date="2016-08-23" /> + </component> + +The [settings schema][GSettings schemas] would be installed to +`${prefix}/share/glib-2.0/schemas/net.example.ShoppingList.gschema.xml`, +optionally accompanied by +`${prefix}/share/glib-2.0/schemas/net.example.ShoppingList.enums.xml`. +Those files would be compiled into +`${prefix}/share/glib-2.0/schemas/gschemas.compiled`, for example by using a +command like +`glib-compile-schemas --strict ${DESTDIR}${prefix}/share/glib-2.0/schemas` +while building the bundle. + +[][Localized strings] used in the app itself, or in its GSettings schema, would +be installed as +`${prefix}/share/locale/${locale}/LC_MESSAGES/com.example.ShoppingList.mo`, +where `${locale}` represents a locale such as `fr_CA` or `de`. + +[][Main entry point] for the user interface, to be installed as +`${prefix}/share/applications/net.example.ShoppingList.desktop`: + + [Desktop Entry] + Categories=Utility; + Exec=/Applications/net.example.ShoppingList/bin/gui + GenericName=Shopping List + Icon=net.example.ShoppingList + MimeType=application/vnd.example.shoppinglist;x-scheme-handler/myproduct; + Name=Shopping List + OnlyShowIn=Apertis; + Type=Application + X-Apertis-Type=application + X-GNOME-FullName=Example Shopping List + DBusActivatable=true + X-Apertis-ServiceExec=/Applications/net.example.ShoppingList/bin/gui --gapplication-service + +The user interface's [icon][Icon for the bundle] would be installed as +`${prefix}/share/icons/hicolor/64x64/apps/net.example.ShoppingList.png`. + +[Entry point][Entry points] for the agent, to be installed as +`${prefix}/share/applications/net.example.ShoppingList.Agent.desktop`: + + [Desktop Entry] + Exec=/Applications/net.example.ShoppingList/bin/agent + NoDisplay=true + OnlyShowIn=Apertis; + Type=Application + X-Apertis-Type=agent-service + X-GNOME-FullName=Example Shopping List + DBusActivatable=true + +[][AppArmor profile], to be installed as +`${prefix}/etc/apparmor.d/Applications.net.example.ShoppingList`: + + /Applications/net.example.ShoppingList/** { + #include <abstractions/chaiwala-base> + #include <abstractions/dbus-session-strict> + + /Applications/net.example.ShoppingList/{bin,libexec}/* pix, + /Applications/net.example.ShoppingList/{bin,lib,libexec}/{,**} mr, + /Applications/net.example.ShoppingList/share/{,**} r, + + owner /var/Applications/net.example.ShoppingList/users/** rwk, + + dbus send + bus=session + path=/org/freedesktop/DBus + interface=org.freedesktop.DBus + member={RequestName,ReleaseName} + peer=(name=org.freedesktop.DBus), + dbus bind bus=session name="net.example.ShoppingList", + dbus bind bus=session name="net.example.ShoppingList.*", + dbus (send, receive) bus=session + peer=(label=/Applications/net.example.ShoppingList/**), + dbus receive bus=session peer=(label=/usr/bin/canterbury), + + signal receive peer=/usr/bin/canterbury, + } + +## Future directions + +Future versions of this specification could include layout and contents +specifications for particular categories of [system extensions], in +particular user-installable UI themes and language packs. + +## Appendix: built-in application bundles + +Built-in application bundles are maintained as part of the platform, and so +are outside the scope of this specification. However, their structure is +similar. + +As a general principle, built-in application bundles that closely resemble +a store application bundle, other than the structural differences listed +here, will be as portable between platform versions as a similar store +application bundle would be. Built-in application bundles that diverge more +from that model will be more tightly-coupled to the platform for which +they were designed, and so are more likely to need alterations for newer +platform versions. + +### Structural differences + +In general, [built-in application bundles] MUST have a structure analogous to +store application bundles, replacing `/Applications` with `/usr/Applications` +in all path prefixes. In particular, the `${prefix}` for a built-in application +bundle is `/usr/Applications/` followed by the bundle ID. + +As an exception to the usual use of the `${prefix}`, built-in application +bundles MUST install their [AppArmor profiles][AppArmor profile] directly to +`/etc/apparmor.d`, in a file named +`/etc/apparmor.d/usr.Applications.${bundle_id}` where `${bundle_id}` is to +be replaced by the [][Bundle ID]. +They MUST NOT contain `/usr/Applications/*/etc/apparmor.d`. + +For the following categories of files, if an equivalent store application +bundle would include files in that category, built-in application bundles +MUST install the real files into `${prefix}/share`. Additionally, the `.deb` +file for the built-in application bundle must include symbolic +links `/usr/share/*` pointing to the corresponding regular files in +`${prefix}/share/*`: + +* [][Entry points] +* [][GSettings schemas] +* [][Icon for the bundle] +* [][Icons for entry points] +* [][Bundle metadata] + +For example, the `.deb` file for a built-in application bundle +`org.apertis.Eye` might include a symbolic link +`/usr/share/applications/org.apertis.Eye.desktop` pointing to the main +entry point's real file +`/usr/Applications/org.apertis.Eye/share/applications/org.apertis.Eye.desktop`, +and similar symbolic links for GSettings schemas, icons and the bundle +metadata. + +For the following categories of files, if an equivalent store application +bundle would include files in that category, built-in application bundles +MUST install the files into `${prefix}`, but MUST NOT include symbolic +links to them in `/usr/*`: + +* [][Executables] +* [][Libraries] +* [][Icons for use by the bundle] +* [][Localized strings] +* [][Theme data for use by the bundle] +* [][Generic resource data] + +### Permissions and policy differences + +Recommendations and requirements that refer to the app-store curator +do not apply to built-in application bundles. The platform vendor +has total control over both the [platform layer] and the built-in +application bundles that are packaged with it; they are responsible +for ensuring that those components fit together correctly and meet +their functional and security requirements. For example, a platform +vendor can provide any [][AppArmor profile] for a built-in application +bundle, and it is up to the platform vendor to ensure that the profile +is consistent with their security policy. + +### Graphical programs + +Built-in application bundles do not necessarily need to provide their own +user interfaces if they rely on an underlying service, for example one that +is running in the [automotive domain], to display a user interface. Where this +specification calls for a particular entry point to be a graphical program, +that requirement or recommendation does not apply to built-in application +bundles. A built-in application bundle could provide similar functionality +by communicating with other processes, either locally or in the automotive +domain, and arranging for those other processes to display graphics instead. + +However, if this is done, then the built-in application bundle is +necessarily somewhat tightly coupled to the component to which it +delegates its user interface. + +### Command line arguments + +Built-in app-bundles SHOULD NOT use the `play-mode`, `app-name` or `url` +tokens in their `Exec` arguments. This is a weaker prohibition than for +store app-bundles, which MUST NOT use those tokens. This exception is +made for backwards compatibility. Please note that the special case +made for these tokens in and before Apertis 17.03 is deprecated, and their +effect will change in future releases. + +Agents and other non-graphical programs in built-in app-bundles SHOULD NOT +have an `X-Apertis-ServiceExec` field. This is a weaker prohibition +than for non-graphical programs in store app-bundles, which MUST NOT have +that field: it allows those agents and non-graphical programs to make use +of the special tokens like `play-mode` when run on Apertis 17.03, without +including them in the service command-line. This exception is made for +backwards compatibility, and is considered deprecated. + +<!-- External links --> + +[Apertis concept designs]: https://designs.apertis.org/ +[Application bundles]: https://designs.apertis.org/design/applications.html#bundle +[Applications concept design]: https://designs.apertis.org/applications.html +[Application Entry Points concept design]: https://designs.apertis.org/application-entry-points.html +[Application Layout concept design]: https://designs.apertis.org/application-layout.html +[Automotive domain]: https://designs.apertis.org/inter-domain-communication.html#automotive-domain +[Base Directory specification]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html +[Built-in application bundles]: https://designs.apertis.org/applications.html#software-categories +[Content hand-over]: https://wiki.apertis.org/Content_hand-over +[Content type handler]: https://wiki.apertis.org/Content_hand-over +[Interface discovery]: https://wiki.apertis.org/Interface_discovery +[Internationalization concept design]: https://designs.apertis.org/internationalization.html +[Platform layer]: https://designs.apertis.org/applications.html#software-categories +[Preferences]: https://designs.apertis.org/preferences-and-persistence.html#preferences-approach +[Security between application bundles]: https://designs.apertis.org/security.html#security-between-applications +[Store application bundles]: https://designs.apertis.org/applications.html#software-categories +[System extensions]: https://designs.apertis.org/applications.html#system-extensions + +[AppArmor]: https://gitlab.com/apparmor/apparmor/wikis/About +[AppArmor local profiles]: https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#local-profiles-and-hats +[AppArmor hats]: https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#local-profiles-and-hats +[AppStream upstream XML]: https://www.freedesktop.org/software/appstream/docs/chap-Metadata.html +[Creative Commons Zero license]: https://creativecommons.org/publicdomain/zero/1.0/ +[D-Bus interface name]: https://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names +[DBusActivatable]: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#dbus +[Debian versions]: https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version +[Desktop Entry Specification]: http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html +[Desktop Menu categories]: http://standards.freedesktop.org/menu-spec/latest/apa.html +[Frampton multiple entry points]: https://gitlab.apertis.org/appfw/frampton/tree/v0.6.1/scripts +[GApplication]: https://developer.gnome.org/gio/stable/GApplication.html +[GApplication application ID]: https://developer.gnome.org/gio/stable/GApplication.html#g-application-id-is-valid +[GNU gettext]: https://www.gnu.org/software/gettext/manual/index.html +[GSettings]: https://developer.gnome.org/gio/stable/GSettings.html +[GtkIconTheme]: https://developer.gnome.org/gtk3/stable/GtkIconTheme.html +[GtkCssProvider]: https://developer.gnome.org/gtk3/stable/GtkCssProvider.html +[G_APPLICATION_IS_SERVICE]: https://developer.gnome.org/gio/stable/GApplication.html#G-APPLICATION-IS-SERVICE:CAPS +[hicolor icon theme]: https://www.freedesktop.org/software/icon-theme/releases/ +[Icon Theme Specification]: https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html +[IETF Media Types]: https://www.iana.org/assignments/media-types/media-types.xhtml +[IETF URI schemes]: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml +[localestring]: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#localized-keys +[Portable Network Graphics]: https://tools.ietf.org/html/rfc2083 +[DBusActivatable]: https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#dbus +[org.gtk.Application]: https://wiki.gnome.org/Projects/GLib/GApplication/DBusAPI +[Reverse domain name notation]: https://en.wikipedia.org/wiki/Reverse_domain_name_notation +[Semantic versioning]: http://semver.org/ +[SONAME]: http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html diff --git a/content/developer/connectivity.md b/content/developer/connectivity.md new file mode 100644 index 0000000000000000000000000000000000000000..e7c553fcf02524dbe24cf7c3a7260b355419e7e3 --- /dev/null +++ b/content/developer/connectivity.md @@ -0,0 +1,40 @@ +--- +short-description: "Wi-Fi, Bluetooth ..." + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Connectivity + +### Provides: + +- Cellular and Wi-Fi Connection + + - Connman manages internet connections (Automatically connects to + last used network). + +- Bluetooth + + - Based on Bluez and profiles (PBAP, A2DP, PAN) + + - Discovering / bonding / getting contacts from cell phone + +### Enabling components: + +- libfolks-eds: library that aggregates contacts from multiple sources + with Evolution-data-server as backend + (https://wiki.gnome.org/Projects/Folks) + +### SDK services + +- Beckfoot: Beckfoot is performs connection management and handles + system connectivity services like network handling, wifi management, + management of Bluetooth devices etc. + +- Corbridge: It daemon for managing bluetooth functionalities like + pairing, unpairing, A2DP connect/disconnect. And also contact Sync + via bluetooth also implemented in this service. diff --git a/content/developer/cross-build-toolchain.md b/content/developer/cross-build-toolchain.md new file mode 100644 index 0000000000000000000000000000000000000000..6d083c962308accda3d1541646e9d007f7877f07 --- /dev/null +++ b/content/developer/cross-build-toolchain.md @@ -0,0 +1,86 @@ +--- +short-description: "Toolchain: how to use it" + +authors: + - name: Frédéric Dalleau + email: frederic.dalleau@collabora.com + years: [2019] + +license: CC-BY-SAv4.0 +... + +# Apertis Toolchain + +The Apertis Toolchain provides a build environment to build Apertis for a +foreign architecture from an operating system that is not Apertis. + +The toolchain is intended for cross-compilation, targeting architecture that +don't match the CPU architecture of the build host (for instance, building ARM64 +binaries from a Intel-based host). Currently Apertis provides toolchain for two +architectures : + * 32 bits ARM (armhf) + * 64 bits ARM (AArch64) + +It is meant to be used by teams that want to keep their development tools such +as editor. + +The toolchain only provides a compiler and minimal libraries to build code. +The main supported language is C, but C++ is also supported. +The toolchain provides a debugger with multiarch support for debugging foreign +binaries. +To build binaries using other libraries, either those libraries have to be built +with the toolchain, or the developer can use a sysroot containing the libraries. + +Sysroots are filesystem trees specifically meant for cross-compilation and +remote debugging targeting a specific release image. + +See [Sysroots and devroots](sysroots-and-devroots.md) for more information. + +# Usage of the toolchain + +The toolchain for AArch64 and armhf can be downloaded on the Apertis release +site: https://images.apertis.org/release. It is not built daily although daily +builds might be available. + +To extract the toolchain for AArch64 use the following commands: + +``` +$ wget https://images.apertis.org/release/v2019pre/v2019pre.0/toolchain/apertis-aarch64-linux-gnu-toolchain.tar.xz +$ xz -d apertis-aarch64-linux-gnu-toolchain.tar.xz +$ tar xf apertis-aarch64-linux-gnu-toolchain.tar +$ cd apertis-aarch64-linux-gnu-toolchain/ +``` + +Download and extract a sysroot. Ignore errors related to mknod. Be careful +about the extraction of the sysroot. There is no directory prepended to the +extraction path of the sysroot archive. It can become problematic if extracted +in the HOME directory. Make sure to create a work directory and change to it +before extraction. +``` +$ wget https://images.apertis.org/release/v2019pre/v2019pre.0/arm64/sysroot/sysroot-apertis-v2019pre-arm64-v2019pre.0.tar.gz +mkdir ~/sysroot/ +tar xf sysroot-apertis-v2019pre-arm64-v2019pre.0.tar.gz -C ~/sysroot/ --exclude=./dev +``` + +Retrieve the project to build: +``` +git clone git@gitlab.apertis.org:tests/bluez-phone-tester.git +``` + +From there, the steps are project dependent. Not all projects support cross +compilation setup. It can usually be encompassed using environment variables. +``` +$ ./autogen.sh +$ CC=~/apertis-aarch64-linux-gnu-toolchain/usr/bin/aarch64-linux-gnu-gcc-8 PKG_CONFIG_SYSROOT_DIR=~/sysroot PKG_CONFIG_PATH=~/sysroot/usr/lib/aarch64-linux-gnu/pkgconfig/ ./configure --host aarch64-linux-gnu +$ make CFLAGS="-I ~/sysroot/usr/include" LDFLAGS="-L~/sysroot/usr/lib/aarch64-linux-gnu -L~/apertis-aarch64-linux-gnu-toolchain/usr/lib/../.. -L~/sysroot/usr/aarch64-linux-gnu/lib/ --sysroot=~/sysroot" +$ file bluez-phone-tester +bluez-phone-tester: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=ca3fb7801ab26632208a6def82ac1dcf5cb40d10, not stripped +``` + +This project did not require specific dependencies, everything needed was in the +sysroot. The sysroot are meant to be self sufficient for building the Apertis +projects. If a new dependency is needed in the sysroot, the recipe should be +modified. It is explicitly discouraged to install dependencies using different +means because there should not be absolute symbolic links in the sysroot since +they would not be pointing to the sysroot root folder. This has the potential to +damage the system. diff --git a/content/developer/deployment-management.md b/content/developer/deployment-management.md new file mode 100644 index 0000000000000000000000000000000000000000..4270f4cd01c77b28109d1d25e9d18c2687ecbc33 --- /dev/null +++ b/content/developer/deployment-management.md @@ -0,0 +1,267 @@ +--- +short-description: "Deployment management: How to install and use hawkBit for Apertis" + +authors: + - name: Frédéric Danis + email: frederic.danis@collabora.com + years: [2019] + +license: CC-BY-SAv4.0 +... +# Deployment management + +## Design + +The **hawkBit update server** defines a hierarchy of software that starts with a distribution, which can have (sub-)modules and these may have multiple artifacts. +The hawkBit Data Model concept can be found [here](https://www.eclipse.org/hawkbit/concepts/datamodel/). + +For Apertis, we want device agent to be as simple as possible. So it should only need to check the hawkBitserver for an update, download and install it. + +The **build server** (Jenkins), when _ostree static delta_ file has been created, is responsible to create a _distribution_ containing a single _module_ for each build and for each Apertis release, type and architecture. + +The _ostree static delta_ file is uploaded to the _module_ as its single artifact. + +_Distribution_ and _module_ version are based on the _image_ version. + +To be more concrete, when the image pipeline is building the `armhf` minimal image it also builds a matching _full static OSTree bundle_ named, for instance, `apertis_ostree_v2020pre-minimal-armhf-uboot_20191011.0.delta`. + +This bundle is uploaded to hawkBit under the `apertis_v2020pre-minimal-armhf-uboot` module with version `20191011.0`. This _module_ is linked to a _distribution_ sharing the same _name_ and _version_. + +## HawkBit backend installation + +The `hawkBit update server` can be installed using docker-compose (cf. [HawkBit Getting Started](https://www.eclipse.org/hawkbit/gettingstarted/)). + +It needs a **docker-compose.yml** and an **application.properties** file to configure the hawkBit server. + +**docker-compose.yml** file (based on [docker-compose.yml](https://github.com/eclipse/hawkbit/blob/master/hawkbit-runtime/docker/docker-compose.yml)): +``` +# +# Copyright (c) 2018 Bosch Software Innovations GmbH and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# +version: '3' + +services: + + # --------------------- + # MySQL service + # --------------------- + mysql: + image: "mysql:5.7" + environment: + MYSQL_DATABASE: "hawkbit" + MYSQL_USER: "root" + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + restart: always + ports: + - "3306:3306" + labels: + NAME: "mysql" + + # --------------------- + # HawkBit service + # --------------------- + hawkbit: + image: "hawkbit/hawkbit-update-server:latest-mysql" + environment: + - 'SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/hawkbit' + - 'SPRING_DATASOURCE_USERNAME=root' + restart: always + ports: + - "8080:8080" + volumes: + - ./application.properties:/opt/hawkbit/application.properties + labels: + NAME: "hawkbit" +``` + +**application.properties** file: +``` +# +# Copyright (c) 2015 Bosch Software Innovations GmbH and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v1.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-v10.html +# + +# User Security +spring.security.user.name=admin +spring.security.user.password={noop}admin +spring.main.allow-bean-definition-overriding=true + +# DDI authentication configuration +hawkbit.server.ddi.security.authentication.anonymous.enabled=false +hawkbit.server.ddi.security.authentication.targettoken.enabled=true +hawkbit.server.ddi.security.authentication.gatewaytoken.enabled=true + +# Optional events +hawkbit.server.repository.publish-target-poll-event=false + +## Configuration for DMF/RabbitMQ integration +#spring.rabbitmq.username=guest +#spring.rabbitmq.password=guest +#spring.rabbitmq.virtual-host=/ +#spring.rabbitmq.host=localhost +#spring.rabbitmq.port=5672 + +# Define own users instead of default "admin" user: +hawkbit.server.im.users[0].username=apertis +hawkbit.server.im.users[0].password={noop}Apertis! +hawkbit.server.im.users[0].firstname=Apertis +hawkbit.server.im.users[0].lastname=HawkBit +hawkbit.server.im.users[0].permissions=ALL + +# Enable CORS and specify the allowed origins: +#hawkbit.server.security.cors.enabled=true +#hawkbit.server.security.cors.allowedOrigins=http://localhost +``` + +Copy them to a directory and run: +``` +$ docker-compose up -d +``` + +You can then connect to the hawkBit Management UI at server address and port 8080, with username `apertis` and password `Apertis!`. + +## Trigger a deployment from Apertis hawkBit update server + +### Deployment setup + +This should be done automatically during image build, but can also be done manually. + +#### Manually updating static delta to update server + +##### Using the UI + +###### Create a _Software Module_ in Upload page +This allows to group multiple artifacts. + +Click on **+** in _Software Module_ panel and provide `Type`, `Name`, and `Version`. + +Multiple artifacts can be attached to the _Software Module_ using the `upload File` button. + +###### Create a _Distribution_ in Distributions page +The distribution is a collection of _software module_(s). + +1st create the _Distribution_ (**+** sign in Distributions panel), which will require `Name` and `Version` info, then drag-and-drop required _Software Module_(s) on top of the newly created _Distribution_. + +##### Using the API +1st we need to define some variables which will be used: `name`, `description`, `version` and the `delta_file` to upload, e.g.: +``` +$ name="apertis_test-minimal-armhf-uboot" +$ description="Apertis test minimal for armhf uboot" +$ version="v1.0" +$ delta_file="apertis_ostree_minimal-armhf-uboot.delta" +``` + +###### Create a _Software Module_ +``` +$ curl --user admin:admin 'http://localhost:8080/rest/v1/softwaremodules' -i -X POST -H 'Content-Type: application/json;charset=UTF-8' -d '[ {"vendor" : "Apertis","name" : "$name","description" : "$description", "type" : "os", "version" : "$version" } ]' +[{"createdBy":"admin","createdAt":1568627145649,"lastModifiedBy":"admin","lastModifiedAt":1568627145649,"name":"apertis_test-minimal-armhf-uboot","description":"Apertis test minimal for armhf uboot","version":"v1.0","type":"os","vendor":"Apertis","deleted":false,"_links":{"self":{"href":"http://localhost:8080/rest/v1/softwaremodules/1"}},"id":1}] +``` + +###### Upload an _artifact_ to a _Software Module_ +This will use the `href` link returned during the _Software Module_ creation. +``` +$ curl --user admin:admin 'http://localhost:8080/rest/v1/softwaremodules/1/artifacts' -i -X POST -H 'Content-Type: multipart/form-data' -F 'file=@$delta_file' +{"createdBy":"admin","createdAt":1568627195280,"lastModifiedBy":"admin","lastModifiedAt":1568627195280,"hashes":{"sha1":"d3b582709d7574e92e16671c5f097fda7795f832","md5":"c368c561a9279f60f7a1b04eabf63d58"},"providedFilename":"apertis_ostree_minimal-armhf-uboot.delta","size":21,"_links":{"self":{"href":"http://localhost:8080/rest/v1/softwaremodules/1/artifacts/1"},"download":{"href":"http://localhost:8080/rest/v1/softwaremodules/1/artifacts/1/download"}},"id":1} +``` + +###### Create a _Distribution_ +the will use the module `id` returned during the _Software Module_ creation. +``` +$ curl --user admin:admin 'http://localhost:8080/rest/v1/distributionsets/' -i -X POST -H 'Content-Type: application/json;charset=UTF-8' -d '[ {"requiredMigrationStep" : false,"name" : "$name","description" : "$description", "type" : "os", "version" : "$version", "modules" : [ {"id" : 1} ] } ]' +[{"createdBy":"admin","createdAt":1568627754940,"lastModifiedBy":"admin","lastModifiedAt":1568627754940,"name":"apertis_test-minimal-armhf-uboot","description":"Apertis test minimal for armhf uboot","version":"v1.0","modules":[{"createdBy":"admin","createdAt":1568627145649,"lastModifiedBy":"admin","lastModifiedAt":1568627195295,"name":"apertis_test-minimal-armhf-uboot","description":"Apertis test minimal for armhf uboot","version":"v1.0","type":"os","vendor":"Apertis","deleted":false,"_links":{"self":{"href":"http://localhost:8080/rest/v1/softwaremodules/1"}},"id":1}],"requiredMigrationStep":false,"type":"os","complete":true,"deleted":false,"_links":{"self":{"href":"http://localhost:8080/rest/v1/distributionsets/1"}},"id":1}] +``` + +#### Deployment to target(s) + +There is 2 ways two start the distribution deployment: manually for a specific target, or to multiple targets using a filter. + +##### Manually deploy to one target + +From the **Deployment** page, simply drag-n-drop the _distribution_ on top of the desired _target_. + +##### Rollout deployment to multiple targets + +This needs to create a filter in **Target Filters** page by clicking on **+** sign, and providing a `Name`, the `filter string` (e.g. `attribute.isoCode==DE`), the `Action type` and the `Start type`. +- `Action type` is related to how the target should manage the update: + - forced: immediately + - soft: based on user approval or device update time plan + - time forced: soft then forced after a specific time + - download only: device is supposed to only download the update and not install it +- `Start type` is related to the rollout: + - manual: starts on user action + - auto: starts immediately after rollout is created + - scheduled: start as soon as rollout is ready and the set time has passed + +:exclamation: Do not forget to save the filter. + +Then, we are now able to create the deployment in **Rollout** page by clicking on **+** sign, giving it a `Name` and selecting the _Distribution_, _Filter_ and the number of group to use. + +## Target device + +### Target authentication + +Target devices are identified in hawkBit by there `Controller Id` and `Target Token`. +Any `Controller Id` can be chosen, but should be unique. + + +A `Target token` is generated automatically for each new device added using the UI. + +A device can be added manually in the hawkBit management UI, or multiple devices can be added by uploading a csv file containing: +``` +Controller_Id_1,targetName1 +Controller_Id_2,targetName2 +… +``` + +A device can also be added using the [Management API](https://www.eclipse.org/hawkbit/apis/management_api/), allowing to set the `Target Token`: +``` +$ curl --user 'admin:admin' 'http://localhost:8080/rest/v1/targets' -i -X POST -H 'Content-Type: application/json;charset=UTF-8' -d '[ {"securityToken" : "2345678DGGDGFTDzztgf","address" : "https://192.168.0.1","controllerId" : "Controller_Id_1","name" : "Controller 1","description" : "Test controller 1"} ]' -v +``` + +### apertis-hawkbit-agent + +The [apertis-hawkbit-agent](https://gitlab.apertis.org/appfw/apertis-hawkbit-agent) is a component in the OSTree-based images to poll +hawkBit update server, and in case of an update is available to download it +and trigger `apertis-update-manager` to apply it. + +#### Installation + +Add `apertis-hawkbit-agent` package using `apt` action to debos image. + +#### Configuration + +The `server URL`, `Controller ID` and `Target Token` are mandatory and are located in `/etc/apertis-hawbit-agent.ini` on the device, they should be uncommented and set to their respective values. + +`Controller Id` and `Target Token` can be retrieved from _Target details_ in Hawkbit HMI deployment page. + +The final configuration file should look like: +``` +[server] +base-uri=http://<IP_address_or_URL_to_HawkBit_server>:8080 +controller-id=<ControllerID> +key-token=<DeviceToken> +``` + +The `apertis-hawkbit-agent` should be enabled by running: +``` +$ sudo systemctl enable apertis-hawkbit-agent +``` + +After reboot, the device should be able to connect to hawkBit update server and retrieve updates. + +## Possible improvements + +* stabilizing the hawkBit instance +* optimize resource consumption by moving away from full static bundles +* use hawkBit _tags_ for the _distributions_, setting _type_ and _architecture_. This will allow to easily find the right distribution to send to a specific target or set of targets. +* improve _Apertis hawkBit agent_ interaction with _Apertis Update Manager_ by calling the `RegisterSystemUpgradeHandler` DBus method, and calling `ApplySystemUpgrade` when all artifacts has been applied, which may happen with partial upgrades. +* Send _successful_ feedback from _Apertis hawkBit agent_ to _hawkBit update server_ only after reboot of the upgraded system went well. diff --git a/content/developer/faq.md b/content/developer/faq.md new file mode 100644 index 0000000000000000000000000000000000000000..037e6f0bf114f09f31307bbf22a8d2cc04448bb3 --- /dev/null +++ b/content/developer/faq.md @@ -0,0 +1,42 @@ +--- +short-description: "Frequently Asked Questions" + +authors: + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# FAQ + +#### Q: What is Apertis? +A: Apertis is a [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) ([Free](http://en.wikipedia.org/wiki/Free_software) and [open source](http://en.wikipedia.org/wiki/Open-source_software)) GNU/Linux-based platform for infotainment in automotive vehicles. It is a distribution derived from Debian/Ubuntu and geared towards the creation of product-specific images for ARM and Intel x86 systems. + + Apertis comes with a range of built-in features, which can be expanded upon with custom applications that are available through an App Store. + + It is not intended to support mission-critical features in vehicles (such as steering, brakes, engine control, ''etc''.), rather provide the information (for example, web navigation, weather information, geolocation, contacts, ''etc''.) and entertainment (for example, radio, music, videos, ''etc''.) features, in an app-centric fashion. It is updated regularly to keep track of features and security fixes. + + The [Apertis wiki](https://wiki.apertis.org/) is the primary source of information about Apertis. + +#### Q: Where can I get help with developing applications for Apertis? +A: The App Developer Portal you are reading right now is the primary source of documentation for Apertis application development. You can also join the [mailing list for the Apertis project](https://wiki.apertis.org/Community) and ask your question there. Your question may also have already been asked and/or answered in an [Apertis Phabricator](https://phabricator.apertis.org/search/query/advanced/) task. + +#### Q: Will my application work on all Apertis devices? +A: Apertis is a building block for product specific images targeting different devices with very different features: Apertis provides standard interfaces to help application writers to target many vendors and devices with little effort. + +#### Q: Can I write an Apertis application using Web technologies? +A: The Apertis Web runtime will be shipped as a technology preview in the upcoming Apertis 16.12 release. + +#### Q: How do I file a bug? +A: Apertis bugs can be filed in the [Apertis Phabricator](https://phabricator.apertis.org/maniphest/task/edit/form/8/). + +#### Q: How can I request to have a package added to Apertis? +A: Open a new task in the [Apertis Phabricator](https://phabricator.apertis.org/maniphest/task/edit/form/3/). + +#### Q: How do I request an API enhancement? +A: Open a new task in the [Apertis Phabricator](https://phabricator.apertis.org/maniphest/task/edit/form/3/). + +#### Q: How do I distribute my application for Apertis? +A: Distributing Apps for Apertis is covered in the [Distributing](app-distribution.md) section of this guide. diff --git a/content/developer/framework-app.md b/content/developer/framework-app.md new file mode 100644 index 0000000000000000000000000000000000000000..28231d73f051045e2748df028696f7e89befcce3 --- /dev/null +++ b/content/developer/framework-app.md @@ -0,0 +1,61 @@ +--- +short-description: "The application framework" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Application framework + +### Provides: + +- Launching a new Application (Launch-mgr) + +- Explicit or implicit information (Combination of Action, URI, and + MIME) can be used to determine an app to launch + +- Application life cycle management (activity-mgr) + +- Managing application launch history (LUM) + +- Audio management and audio priority handling(audio-manager) + +- Sharing mechanism + +- Application preferences (prefernce-mgr) + +- IPC communication (D-Bus) + +- View switching and in app back handling (View-Manager) + +### SDK services: + +- Canterbury: This is the core process in the system which deals with + launch and kill of applications to be run on the system, including + management of applications life cycle, creation and maintenance of + application stack, etc. It also interacts on a regular basis with + few other services for resource management of applications’. + Interaction with audio service (for audio handling and management), + data exchange service (to facilitate inter application data + exchange) are 2 examples. + +- Didcot: This service enables data sharing between applications + depending on mime type of the data to be shared. + +- Newport: It handles all downloads running in the system (from + browser, email, other devices etc). + +- Barkway: This service caters to the global UI layer like popup + available in the system. + +- Chalgrove: It is the backend data service to manage per user or even + system settings. It interacts with canterbury to store some app + related settings. + +- libseaton: it provides interfaces to store persistent data. It is a + shared library using SQLite as the backend database. + +- Libclapton: LibClapton is a library which is used for logging. diff --git a/content/developer/framework-ui.md b/content/developer/framework-ui.md new file mode 100644 index 0000000000000000000000000000000000000000..3fb597549305298bb4fdbeff2da673702b772be7 --- /dev/null +++ b/content/developer/framework-ui.md @@ -0,0 +1,41 @@ +--- +short-description: "The UI framework" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# UI framework + +### Provides: + +- In apertis, Clutter library is provided for UI creation. + +- Clutter is an open source software library for creating fast, + compelling, portable, and dynamic graphical user interfaces. + +- Use Open GLES for rendering. + +- Comes with rich animation f/w with vast gesture support. + +- Provides layout management for easy lay-outing of widgets. + +### SDK services: + +- Libthornbury: libthornbury is a bunch of user Interface utility + libraries. Thornbury provides the helper function for customized + json parsing which is used in view manager, texture creation for + static .png files or download from the web + sychronously/asynchronously using libsoup to create the texture + using GdkPixbuf,View manager is intended to create/manage the views + in an app using Clutter, ItemFactory is used to instantiate any + given widget type which implements MxItemfactory. Model to give the + MVC approach to the app inspired by ClutterModel + +- Liblightwood: liblightwood is library for widgets.It can also be + extended to a different set of requirements. Liblightwood has all + basic widgets like button,list,roller,webview widgets,multiline + textbox.etc diff --git a/content/developer/index.md b/content/developer/index.md new file mode 100644 index 0000000000000000000000000000000000000000..8f10c49a563c2154f31bffbc920190ff10643f0b --- /dev/null +++ b/content/developer/index.md @@ -0,0 +1,105 @@ +--- +short-description: "Apertis application developer portal" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Apertis application developer guide + +Welcome to the Apertis application developer guide! + +The [FOSS](https://en.wikipedia.org/wiki/Free_and_open-source_software) ([Free](http://en.wikipedia.org/wiki/Free_software) and [open source](http://en.wikipedia.org/wiki/Open-source_software)) GNU/Linux-based Apertis platform provides a set of APIs and services that allow you to create automotive information and entertainment apps. These APIs and services are made available in the Apertis SDK. + +The SDK is a linux virtual machine running a standard desktop environment on top of the Apertis distribution. It contains Apertis development libraries, developer tools, documentation, debugging libraries and the Apertis simulator. The SDK VM image can be run on Windows, Mac OS, or different Linux distributions using the virtualization software [VirtualBox](vm-setup.md). + +### Next + +|-| +|  **Questions?** Read the [FAQ](faq.md). | +|  **Ready to start development?** [Install the SDK](install.md). | +|  **Want to create or update Apertis apps?** Find out [What's new in the latest version of Apertis](#whats-new-in-this-version) or use the [API quick links](#apertis-api-quick-links) below. | +|  **Ready to distribute your app?** Continue on to [Distribution](app-distribution.md). | + + +## Support + +If you encounter any problems using the SDK and need help, please send us an email at <sdk-support@apertis.org>. + +## Apertis API Quick Links +### Platform libraries +[Traprain](apis.md#traprain): navigation and routing libraries +[libclapton](apis.md#libclapton): system information and logging library +[libgrassmoor](apis.md#libgrassmoor): media information and playback library +[liblightwood](apis.md#liblightwood): widget library +[Mildenhall](apis.md#mildenhall): user interface widget library +[libseaton](apis.md#libseaton): persistent data management library +[libthornbury](apis.md#libthornbury): UI utility library + +### Platform user-services +[Barkway](apis.md#barkway): global popup management framework +[Canterbury](apis.md#canterbury): application management and process control service +[Didcot](apis.md#didcot): data sharing and file opening service +[Newport](apis.md#newport): download manager +[Prestwood](apis.md#prestwood): disk mounting service +[Tinwell](apis.md#tinwell): media playback service +[Ribchester](apis.md#ribchester): Application installer and mounting service +[Rhosydd](apis.md#rhosydd): service for handling access to sensors and actuators + +## Upstream APIs +### Enabling APIs + +#### Content Rendering +[WebKitGTK+ Clutter](https://gitlab.apertis.org/hmi/webkit-gtk-clutter/): Web engine +[Poppler](https://poppler.freedesktop.org/): PDF rendering +[ClutterGst 3](http://developer.gnome.org/clutter-gst/unstable/): High-level multimedia + +#### UI +[Cairo](http://cairographics.org/documentation/): Drawing library +[Clutter](https://developer.gnome.org/clutter/stable/): High-level graphics +[Mx 2.0](https://github.com/clutter-project/mx): UI toolkit + +#### Services +[Canberra](http://0pointer.de/lennart/projects/libcanberra/gtkdoc/): High-level sounds +[PolicyKit](https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html): System +[Folks](http://telepathy.freedesktop.org/doc/folks/c/): Contacts & calendar +[Grilo](http://developer.gnome.org/grilo/0.2/): Media indexing +[Tracker-extract](https://developer.gnome.org/libtracker-extract/0.16/), [Tracker-miner](https://developer.gnome.org/libtracker-miner/0.16/), [Tracker-sparql](https://developer.gnome.org/libtracker-sparql/0.16/): Media indexing +[libsecret](https://developer.gnome.org/libsecret/0.16/): Secrets management +[Telepathy](http://telepathy.freedesktop.org/doc/book/index.html): Communication +[ofono](https://01.org/ofono): Communication +[Bluez](http://www.bluez.org/): Bluetooth service + +### OS APIs +#### Infrastructure +[eglibc](http://www.gnu.org/software/libc/manual/html_node/index.html): Base +[GLib](https://developer.gnome.org/glib/stable/): Base + +#### Rendering building blocks +[pixman](http://www.pixman.org/): Low-level graphics +[Pango](https://developer.gnome.org/pango/stable/): High-level font rendering +[Cogl](https://www.cogl3d.org/cogl-reference/): Low-level graphics +[Mesa](http://mesa3d.org/sourcedocs.html): Low-level graphics +[harfbuzz](https://www.freedesktop.org/wiki/Software/HarfBuzz/): Low-level font rendering +[freetype](https://www.freetype.org/freetype2/docs/documentation.html): Low-level font rendering + +#### Functionality +[GTK+ 3](https://developer.gnome.org/gtk3/stable/): UI toolkit +[gdk-pixbuf](https://developer.gnome.org/gdk-pixbuf/2.36/): Image manipulation +[GMime](https://developer.gnome.org/gmime/stable/): File format support +[GStreamer](https://gstreamer.freedesktop.org/documentation/): Low-level multimedia +[Farstream](https://www.freedesktop.org/wiki/Software/Farstream/#documentation): Communication +[libxml2](http://www.xmlsoft.org/docs.html): File format support +[libxslt](http://xmlsoft.org/libxslt/docs.html): File format support +[SQLite](https://sqlite.org/docs.html): Data storage +[JSON GLib](https://developer.gnome.org/json-glib/1.2/): File format support +[Soup](https://developer.gnome.org/libsoup/stable/): Network protocol +[LLVM](http://llvm.org/docs/): Compiler technology + +--- diff --git a/content/developer/infrastructure-ui.md b/content/developer/infrastructure-ui.md new file mode 100644 index 0000000000000000000000000000000000000000..880e0a4c3e2d9044dc53dfb5cdc55ac9c4f03512 --- /dev/null +++ b/content/developer/infrastructure-ui.md @@ -0,0 +1,21 @@ +--- +short-description: "Generic system utilities" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Infrastructure UI + +Some apps need to be available as part of the system even if there are +no apps. Below is the list of such apps: + + - launcher – app laucher. Every app installed in the system will be + listed here. + + - settings – Collection of system and app settings (if any) + + - statusbar – Status information shown at the top oft he screen diff --git a/content/developer/install.md b/content/developer/install.md new file mode 100644 index 0000000000000000000000000000000000000000..091d99d3b74cb1957515bd9147a0597f56f8bf06 --- /dev/null +++ b/content/developer/install.md @@ -0,0 +1,49 @@ +--- +short-description: "Step-by-step guide for installing our SDK" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Installing the SDK + +The SDK is a linux virtual machine running a standard desktop environment on top of the Apertis distribution. It contains Apertis development libraries, developer tools, documentation, debugging libraries and the Apertis simulator. The SDK VM image can be run on Windows, Mac OS, or different Linux distributions using the virtualization software VirtualBox. Once you have verified that your system meets the [system requirements](#system-requirements) below, you'll need to [download an SDK VM image](#download-an-sdk-vm-image), and then [set up VirtualBox](vm-setup.md). + +## System requirements + +You will need a PC with the following configuration to install and run the SDK: + +### Hardware + +* Dual core CPU at 2GHz or higher + +* 8 GB RAM or more + +* 12 GB or more free space on the hard disk + +* If your PC supports Virtualization Technology, make sure that it is enabled (if problems are seen in booting the SDK image, check if Virtualization Technology is enabled in BIOS settings) + +### Software + +* Windows/Linux/Mac OS + +* Current installation of Oracle *VirtualBox*, version 5.0.12 or above (installed in next step) + +## Download an SDK VM image +Apertis has a release lifecycle which is roughly three months long. Each release consists of a round of development, testing and bug fixing, followed by a stable release. Apertis also has a daily set of images which can be used for the latest testing. Application developers should develop against the latest stable release image unless there is a good reason not to. The latest stable release of Apertis is listed [on the wiki](https://wiki.apertis.org/ReleaseNotes). + +* Stable release images are availble at [https://images.apertis.org/release/](https://images.apertis.org/release/) +* Daily build images are available at [https://images.apertis.org/daily/](https://images.apertis.org/daily/) + +Download the gzipped VDI image of the latest stable release to your development PC. + +### Next + +|-| +|  **Ready to install the downloaded SDK?** [Continue on to setting up the virtual machine](vm-setup.md) | diff --git a/content/developer/internet.md b/content/developer/internet.md new file mode 100644 index 0000000000000000000000000000000000000000..6f02fa9854a3955b797a73de2b25172ecce17501 --- /dev/null +++ b/content/developer/internet.md @@ -0,0 +1,32 @@ +--- +short-description: "Various internet utilities provided by the SDK" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Internet services + +### Provides: + +- http clients + +- Connected services (PIM) + +### Enabling components: + +- libcurl - the multiprotocol file transfer library + (http://libcurl.org/) + +- libsoup - HTTP client/server library for GNOME + (https://wiki.gnome.org/action/show/Projects/libsoup) + +- libecal (Evolution Data Sever) + (https://developer.gnome.org/libecal/stable/) + +- libfolks-eds: contacts from multiple sources with + Evolution-data-server as backend + (https://wiki.gnome.org/Projects/Folks) diff --git a/content/developer/licensing.md b/content/developer/licensing.md new file mode 100644 index 0000000000000000000000000000000000000000..f1b7a7ff8ba0ec87a84c8dd7fa1ff8fd7080cad1 --- /dev/null +++ b/content/developer/licensing.md @@ -0,0 +1,39 @@ +--- +short-description: "A summary of licensing implications" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Choose a license for your application + +You can chose any license that you wish for your application. If you use any of the Apertis libraries, you will still be able to keep your application closed source or open source. + +Apertis is a Free software platform. If you wish to follow the licensing model of Apertis, you can find further information in the [platform licensing](https://wiki.apertis.org/Licensing) guide. + +It is good practice to include information about copyright and the license at the top of each code file. This is often referred to as the header. + +For example, a copyright notice can look like this: +``` + /* + * Copyright © 2015, 2016 Anita Developer <a.developer@example.com> + */ +``` + +If you use a Free software license, you will need to follow the guidelines provided by that license. We recommend that you also include the [SPDX license identifier](https://spdx.org/licenses/). For example, the license header for MPL 2.0 would look like this: +``` + /* + * Copyright © 2015, 2016 Anita Developer <a.developer@example.com> + * + * SPDX-License-Identifier: MPL-2.0 + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +``` + +The license you choose will not affect your ability to [distribute the application](app-distribution.md) through the Apertis app store. diff --git a/content/developer/multimedia.md b/content/developer/multimedia.md new file mode 100644 index 0000000000000000000000000000000000000000..ae73b8080567e82ac6c48384e787d2cd464ee721 --- /dev/null +++ b/content/developer/multimedia.md @@ -0,0 +1,51 @@ +--- +short-description: "Multimedia interfaces provided by the SDK" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Multimedia + +### Provides: + +- Playback of audio and video contents (local and streaming) + +- Capturing images and recording audio and video + +- Scanning & Playback of radio + +- Complete audio management + +- Extracting and displaying media content information + +- Integration of External apps like VLC. + +### Enabling components: + +- GStreamer: Audio, Video, Recording, Streaming, Etc + +- Audio Manager: Audio Policy Management + +- PulseAudio: Software mixing multiple audio streams + +- Multiple-Format Codec: Various support of codec + +- Media Content Service: Content management for media files + +### SDK services: + +- libgrassmoor : Libgrassmoor is a library responsible for providing + media info and media playback functionalities + +- Tinwell: Is our Audio service. It focuses on complete audio handling + for the system and provides facilities to play, buffer, record audio + streams. It interacts with Canterbury to manage system audio + effectively when multiple audio sources are active. + +- Prestwood: This service manages media and handles any activity + related to the filesystem (mounted), UPnP devices etc and indicates + when they are ready for other services to communicate with them. diff --git a/content/developer/navigation.md b/content/developer/navigation.md new file mode 100644 index 0000000000000000000000000000000000000000..21f3bd81dcc2345bc34708cb473880cbf492c9eb --- /dev/null +++ b/content/developer/navigation.md @@ -0,0 +1,30 @@ +--- +short-description: "Navigation services (maps, guidance, ...)" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Navigation + +### Provides: + +- Location based services + +- Map + +- Route guidance + +### Enabling components: + +- Geoclue – Deliver location info from various positioning sources + (http://freedesktop.org/wiki/Software/GeoClue/) + +- Libchamplain – Map rendering + (https://wiki.gnome.org/Projects/libchamplain) + +- Younavigation – route drawing on map drawn by libchamplain + (http://www.yournavigation.org/) diff --git a/content/developer/platform-guide.md b/content/developer/platform-guide.md new file mode 100644 index 0000000000000000000000000000000000000000..a1b6e2584b5c94bce7749ba9f8cbf7e0c5c2cfaf --- /dev/null +++ b/content/developer/platform-guide.md @@ -0,0 +1,438 @@ +--- +short-description: "Introductory guide to the Apertis platform" + +authors: + - name: Emanuele Aina + email: emanuele.aina@collabora.com + years: [2017] + - name: Sjoerd Simons + email: sjoerd.simons@collabora.co.uk + years: [2017] + +license: CC-BY-SAv4.0 +... + +# Apertis platform guide + +Apertis is a versatile open source infrastructure tailored to the automotive +needs and fit for a wide variety of electronic devices. Security and +modularity are two of its primary strengths. Apertis provides a feature-rich +framework for add-on software and resilient upgrade capabilities. +Beyond an operating system, it offers new APIs, tools and cloud services. + +Apertis is not just a Ubuntu/Debian-derived Linux distribution: +it comprises code hosting, code review tools, package build and image +generation services, and an automated testing infrastructure with the aim of +providing a clean, reliable environment to let developers go from sources to +deployable system images in the most dependable way, ready to be hosted +on the cloud and made available for OTA updates. It aims to be the +integration point for different product lines with different goals and +different schedules, but all sharing the same common core. + +The set of packages shipped in Apertis provides a baseline that can be picked +and chosen to quickly create deployable images for different products. + +The goal of Apertis is to maximize the sharing across products, with the aim to +improve time to market and reduce the efforts on long-term maintenance, in +particular to enable quick and consistent response times for security issues +in internet-enabled products. + +While the typical embedded workflow only supports one product line at a time, +Apertis focuses on a collaborative development where multiple, independent teams +participate with different goals and schedules, providing the tools to maximize +the commonalities that can be shared across the lines of development, +yet providing the ability to differentiate and experiment without +impacting the shared core. + +## Collaborative development + +Apertis is designed for a collaborative development model with the aim of +sharing efforts across between multiple independent participants: +it offers tools to maximize the shared commonalities to reduce costs and +increase development speed, in contrast to approaches where all participants +are working towards a single joint goal moving forward on a discrete path. +While other workflows only focus on one team at a time, Apertis' strength is +its ability to support many independent teams concurrently. + +The development infrastructure of Apertis runs as a service to provide shared +access to all those independent product teams: +* by connecting the software packages and the infrastructure through a + well-defined interface their mutual independence is guaranteed, which means + that in no case including an updated package requires changes to the + infrastructure and, vice-versa, infrastructural changes do not require + existing packages to be updated, reducing the maintenance burden over the + long term +* common infrastructure is provided such that developers do not need to + go through the long and subtly error-prone process of setting up the + build environment +* tests get run on every supported hardware device and variant automatically, + saving teams the burden of setting up their own test lab +* what is tested is what ends up deployed on production devices +* security patches in the core can be picked up by all products immediately + with no effort. + +On top of the shared core, each user has access to private areas for +components that are not meant to be shared with other teams, both for +experimentation and for product development. + +To contribute to the shared core Apertis follows the OSS best practices +with [a maintainer/contributor workflow](https://wiki.apertis.org/Guidelines/HowToWorkWithPatches) +centered on code review and [continuous integration](https://wiki.apertis.org/Guidelines/Git-based_packaging_workflow). + +## Security driven + +The Apertis approach is driven by the need to increase safety and security +by deploying updated software in the hands of users in a timely and +efficient way. + +Urgent patches like those fixing exploitable CVEs are merged timely in the shared +core and are immediately available for downstream products. +A quarterly release cycle provides a way for product teams to get access to +a stable stream of less urgent updates. + +The optional OSTree-based update mechanism provide an efficient and safe update +facility for the base platform, such that updates can be deployed often +with minimal costs. + +Updates to application bundles can be deployed without re-deploying the whole +platform, decoupling the release and update cycle of the base software from +the one of each application. + +The package-centric solution and shared infrastructure offered by Apertis +defines clear boundaries between modules. Those boundaries enable all the +involved teams to maximize commonalities across products and limit the +branching only in the areas where it is required: this reduces the +rebasing/resync efforts and makes the frequent updates needed to ensure the +safety of deployed products more economically sustainable in the long term. +The ability to distinguish between hardware-independent ospacks and the +hardware-specific recipes and the separation between platform +applications and application bundles defines additional modularity boundaries +that allow fixes to be deployed quickly without impacting the product stability. + +To be able to deliver recurrent updates efficiently a close relation to all the +upstream projects, from the Linux kernel to Debian and Ubuntu. +Aligning with Ubuntu LTS enables Apertis to directly benefit from its long term +quality management and steady flow of fixes. +Importing more up-to-date packages from Debian where relevant builds on top of +push for quality, compatibility and maturity shared by Debian and by its many +derived distributions. +By closely tracking its upstreams, Apertis benefits from their well-defined +CVE processes to identify urgent issues that affect packages hosted in the +repositories and quickly act on those. + +## Package-centric approach + +With Apertis developer teams can focus on their differentiating components and +rely on the shared core and shared operations for everything else. +The key enabler for that is the package-centric approach, which is +at the center of all activities, tools and processes. +Development, customization and variant handling rely on packages, and +deployable images are the result of combining binary packages belonging to a +specific set in a post-process step. + +This enables to share infrastructure resources like compilation across all +users, since changes gets processed once and resulting binaries gets shared +with all. These resources are immediately available to every team, since +they are provided as a service they do not simply reside on +a dedicated developer machine. This ensures reproducibility, traceability and +consistency during the whole product life cycle. + +## From sources to deployment + +Apertis is built on top of Ubuntu/Debian `deb` packages for their high quality +and modularity. All the source packages are stored in the [Open Build Service +(OBS) instance](https://build.collabora.com) provided by Collabora where the +Apertis OBS projects are hosted: each release is currently composed of a set of +stacked projects: + +* `target`: packages intended for use in product images +* `development`: additional packages needed to build `target` and development tools +* `hmi`: packages for the current reference HMI on top of `target` +* `sdk`: packages to build the SDK virtual machine recommended for development + +In case of common interests new packages can easily be introduce in the relevant +OBS projects. It's also possible to create additional projects in OBS for e.g. +product specific software packages or product specific modifications that build +on top of the common baselines but aren't suitable for more general inclusion. + +OBS takes care of automatically building the package sources for all the +configured architectures (`x86_64`, `armv7l`, `aarch64`) and publishes the +results as signed APT repositories. Each package is built in a closed, +well-defined environment where OBS automatically installs all the build tools +and resolves dependencies from a clean state using the packages it has built +already: if any dependency is missing the build fails and the developer is +notified. + +Most of the package sources get automatically updated from the latest Ubuntu +LTS release or have been manually picked from later Ubuntu/Debian releases when +more up-to-date versions have been deemed beneficial (one example of that is +the `systemd` package). This allows Apertis to share bugfixes and security +fixes with the efforts done by the wider Ubuntu and Debian communities. + +Packages specific to Apertis have their sources stored in [git +repositories hosted on the Apertis infrastructure](https://git.apertis.org). +The git infrastructure to manage the repositories is very basic at the moment, +however deploying a Apertis [GitLab](https://gitlab.com/) instances is planned +to allow apertis users and contributors to more easily share and host code. + +For packages hosted on the Apertis git infrastructure the [Apertis Jenkins instance](https://Jenkins.apertis.org/) +is configured to [automatically fetch tagged commits](https://wiki.apertis.org/Guidelines/HowToReleasePackages#Release_process) +and push them to OBS after initial smoketesting to get a continuous and +hands-off update flow. + +After OBS has finished building a package, the results get published in a +Debian package repository. The open-source packages from Apertis can be found +in the public [Apertis Debian repositories](https://repositories.apertis.org/apertis/). + +The packages in these repositories can then be used to build images suitable +for deployment onto a variety of targets, e.g. hardware boards (reference +or product specific), virtual machines (e.g. for development), container images etc etc. + +The overall strategy for building these deployments is to separate it in +various stages starting with early common stages (e.g. a common rootfs) and +then further specializing in hardware or deployment specific additions (e.g. +kernel and bootloader for a specific board). + +Each stage is represented by a [Debos](https://github.com/go-debos/debos) +recipes, and in particular the main stages in the [current image building +pipeline](https://gitlab.apertis.org/infrastructure/apertis-image-recipes) are: + +* `ospack`: prepares the set of user space binary packages that are not specific to a particular SoC/platform or deployment method, producing tarballs +* deployment method: applies the transformations needed to make updates available through OSTree or with the [`ade sysroot`](https://developer.apertis.org/appdev-ade.html) tool +* platform: contains the hardware-specific packages for a particular SoC/platform, like bootloader, kernel, codecs, GL stack, etc., producing the images meant to be booted on devices + +The reason for this split is that it allows the creation of just one SoC, +platform or even board specific recipe which can be combined with a +selection of ospacks. Typically Apertis has a `target` ospack with only the +software meant to go into the final product and a `development` ospack which +in addition contains extra developer tooling. + +For instance the `target` and `development` ospacks for `armhf` could be +combined with the i.MX6 Sabrelite and Raspberry Pi 2 recipes to generate four +possible combinations of flashable images. + +Generating images does not involve rebuilding all the packages from source and +can thus be done quite quickly and flexibly. + +The whole pipeline is controlled through YAML +files, configuring partitions, bootloaders, which packages gets installed, +which overlays is to be applied, and arbitrary customization shell scripts to +be run over the rootfs in a QEMU-based virtualized environment. + +This process is usually automatically run by Jenkins jobs, but during +development can be run on developers machines as well, fetching packages from +the same OBS binary repositories. + +Once images are generated, other Jenkins jobs will schedule a batch of tests on +the [LAVA instance hosted by Collabora](https://lava.collabora.co.uk) which +will take care of deploying the freshly generated images on actual target +devices running in the Collabora device farm, and of controlling them over +serial connections to run the defined testcases and gather the results. + + + +## The workflow + +The keypoints in the workflow for Apertis components are thus: + +* the [VirtualBox-based Apertis SDK](https://wiki.apertis.org/VirtualBox) is + used for development +* sources are stored on the [git code hosting service](https://git.apertis.org) + with [Debian-compatible](https://www.debian.org/doc/debian-policy/) + packaging instructions +* [Phabricator](https://phabricator.apertis.org) is used for project management + and code review +* every patch submitted on Phabricator is automatically built and the unit + tests shipped by the package are executed to provide quick feedback to + the developer +* [Jenkins](https://jenkins.apertis.org) pushes tagged commits to OBS +* [OBS](https://build.collabora.co.uk) builds source packages and + generates binary packages in controlled environments +* every night Jenkins jobs generate ospacks from the repositories + built by OBS +* the generated ospacks are combined with other recipes by Jenkins jobs to + produce deployable images +* on success, Jenkins jobs trigger on-device tests on + [LAVA](https://lava.collabora.co.uk) to check the produced images +* other Jenkins jobs check if packages included in the images are tagged with + task identifiers and closes them in Phabricator + +### Software components packaging (deb) + +For all the software components meant to be included in the images Apertis uses +the [`deb` packaging format](https://wiki.debian.org/Packaging) used by Debian +and Ubuntu. + +To package a component from scratch, Debian provides [a short guide to get +started](https://wiki.debian.org/Packaging/Intro). + +The VirtualBox-based [Apertis SDK virtual machine images](https://wiki.apertis.org/VirtualBox) ship with all the needed tools +installed, providing a reliable, self-contained environment ready to be used. + +Once the component has been packaged, its sources can be uploaded to OBS in a +user-specific project, such that the developer is free to experiment and +iterate until the component is ready to be submitted to the appropriate OBS +project. + +### Open Build Service (OBS) + +Open Build Service is the backbone of the package building infrastructure in +Apertis. It stores source packages and builds them in controlled environments +for all the configured CPU architectures. + +The source packages are grouped in projects that can be stacked such that each +stacked project will automatically share the packages in the underlying +projects with all the other projects stacked on top of them. + +This provides a lot of flexibility to handle different groups working on +different products with different schedules while still sharing a common core. + +OBS also enables developers to easily [branch and customize existing packages](https://wiki.apertis.org/Building_a_Debian_package) and build them in +isolated, user-specific sandboxes. Developers are free to experiment and when +the updates are ready they can be merged back into the original project or +moved to a new stacked project. + +### Code hosting and review process + +Apertis heavily [relies on Phabricator](https://phabricator.apertis.org) +for [the development of Apertis-specific components](https://wiki.apertis.org/Guidelines/Contribution_process#Contribution_process_2). + +Those have their [source code hosted on Apertis servers](https://git.apertis.org/) +which is automatically submitted to OBS when release tags are pushed. + +Each patch is supposed to be [reviewed on Phabricator](https://wiki.apertis.org/Guidelines/Contribution_process#Contribution_process_2) +before it can land in the git repository and thus on OBS. + +In the near future Apertis plans to use a dedicated GitLab instance to let +developers self-manage their git repositories. + +### Jenkins automation + +All the automated tasks in Apertis are orchestrated +by the [Apertis Jenkins instance](https://jenkins.apertis.org/): + +* build-testing patches attached to Phabricator +* submitting tagged commits to OBS +* running the pipeline to generate ospacks and deployable images +* triggering tests on the devices attached to LAVA +* autoclosing Phabricator tasks when marked packages are included in a succesful image build + +### Image creation + +Ospacks and how they should be processed to generate images are +defined through YAML files. + +This is an example configuration for an ARMv7 image, `image-armhf.yaml`: + +{{ ../examples/image-armhf.yaml }} + +And this is the `ospack-armhf.yaml` configuration for the ARMv7 ospack: + +{{ ../examples/ospack-armhf.yaml }} + +Collections of images are built every night such that developers can always +dowload the latest image to deploy it to a target device and start using it +immediately. + +Images are then published on the [deployable image hosting website](https://images.apertis.org) + +### Automated testing with LAVA + +To ensure the continued quality of the generated images, a set of automated +on-device tests is run for every image so issues can be found early if they arise +and handled in a timely fashion by developers. + +## Key technologies + +Apertis makes heavy use of some technologies for its purposes: + +* Ubuntu/Debian packages +* Systemd for application lifecycle tracking +* AppArmor for policy enforcement +* OSTree/Flatpak for safe and efficient deployments +* DBus for privilege separation +* Wayland for graphics +* GStreamer for multimedia playback + +### OTA update strategies + +Apertis currently uses Btrfs snapshot for OTA updates but is now moving towards +a full system update strategy based on OSTree which has some benefits over the +Btrfs-based solution: + +* works in containers +* works on flash-specific filesystems like UBIfs +* smaller downloads + +### Application framework + +Apertis ships an application framework +that provides flexibility and modularity post-deployment: + +* deploying applications can be done independently from full system updates +* network access, inter-process communications and file access policies are enforced through AppArmor +* failed application deployments are safely rolled back +* works both on targets, virtual machines and containers +* Flatpak-based application bundle file format +* the `ade` command-line tool simplifies the generation of application bundles + +### Domain separation + +Apertis is designed to work in setups where tasks are split over different +domains, which can be connected SoCs, virtual machines or containers, for +instance on setups where a privileged domain has no direct Internet access but +relies on a separated, more constrained domain to access network services and +validate any communication. + +## Comparing to Yocto + +[Yocto][yocto] is a project that provides templates, tools and methods to +create custom Linux-based systems for embedded products. + +In itself, Yocto is not a distribution: it's a tool to generate +custom distributions. +This means that there's little sharing across products using Yocto: +for instance any testing done on the official [Poky][yocto-poky] reference +distribution will produce only very limited benefits (if any) to other +distributions generated using Yocto, like the one provided by +commercial suppliers. +In general, Yocto provides customizability at the expense of very high costs, +specially in the medium/long term. + +To generate a distribution Yocto uses a tree of recipes that get executed on +each developer machine and build every component from scratch. +To minimize the impact of the differences on each developer machine, Yocto +builds all the development tools from scratch. To do so it requires a delicate +boostrap step where developers must pay attention to not introduce unwanted +dependencies on their host setup which may subtly affect the result of the +build. By relying on a centralized infrastructure offered as a service to +developers, Apertis provides a isolated, reproducible environment that +does not require any bootstrap step and developers can start building their +packages immediately without waiting for the full toolchain to be compiled +from scratch. + +The infrastructure to build software components and to assemble the results in +a deployable image is usually quite tied together: porting recipes from one +tree to another is usually non-trivial. +Apertis avoids this issue with a workflow that relies on using +[debian-compliant source packages][debian-source] and on the +[best-practices enforced by Debian][debian-policy] and its derivatives. +As an example, a great deal of effort is put into enforcing ABI compatibility to +avoid breaks, ensuring that each module is interchangeable and flexible +over the whole life-cycle of the product. In Yocto those issues aren't +managed and a full rebuild from scratch is usually required to overcome them, +thus saving some work up front by trading it off for a much higher effort in +the long term. + +While yocto uses a non-deterministic target sysroot as its build environment, +the Apertis infrastructure ensures reproducibility by using ephemeral +environments that only have the minimal set of dependencies installed: once +their packages build, developers can then be sure to have explicitly captured +all the required dependencies, while with Yocto subtle differences in the +sysroot may cause failures or subtle differences from one developer machine +to another. + +[yocto]: https://www.yoctoproject.org/ +[yocto-poky]: https://www.yoctoproject.org/tools-resources/projects/poky +[debian-source]: https://wiki.debian.org/Packaging/SourcePackage +[debian-policy]: http://www.debian.org/doc/debian-policy/index.html diff --git a/content/developer/programming-guide-api-stability.md b/content/developer/programming-guide-api-stability.md new file mode 100644 index 0000000000000000000000000000000000000000..67e106b662c997873f978e11d978558eee18f81c --- /dev/null +++ b/content/developer/programming-guide-api-stability.md @@ -0,0 +1,43 @@ +--- +short-description: "Choose which version of Apertis to develop against and how to work with the APIs" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Apertis API stability + +A stable version of Apertis is currently released once per quarter. This version is then supported for three months until the next stable version is released. + +When you write your app, you will use some libraries which are provided by Apertis. For example, you will use Mildenhall for your user interface. As some of these libraries are being actively developed, you should always target the latest stable version of Apertis. This will ensure that your app will keep working for longer and you will be able to use the latest features provided by Apertis. + +## API and ABI + +At a high level, an API – Application Programming Interface – is the boundary between two components when developing against them. It is closely related to an ABI – Application Binary Interface – which is the boundary at runtime. It defines the possible ways in which other components can interact with a component. More concretely, this normally means the C headers of a library form its API, and compiled library symbols its ABI. The difference between an API and ABI is given by compilation of the code: there are certain things in a C header, such as #defines, which can cause a library's API to change without changing its ABI. But these differences are mostly academic, and for all practical purposes, API and ABI can be treated interchangeably. + +Examples of API-incompatible changes to a C function would be to add a new parameter, change the function's return type, or remove a parameter. + +However, many other parts of a project can form an API. If a daemon exposes itself on D-Bus, the interfaces exported there form an API. Similarly, if a C API is exposed in higher level languages by use of GIR, the GIR file forms another API — if it changes, any higher level code using it must also change. + +Other examples of more unusual APIs are configuration file locations and formats, and GSettings schemas. Any changes to these could require code using your library to change. + +## Stability +API stability refers to some level of guarantee from a project that its API will only change in defined ways in the future, or will not change at all. Generally, an API is considered 'stable' if it commits to backwards-compatibility (defined below); but APIs could also commit to being unstable or even forwards-compatible. The purpose of API stability guarantees is to allow people to use your project from their own code without worrying about constantly updating their code to keep up with API changes. Typical API stability guarantees mean that code which is compiled against one version of a library will run without problems against all future versions of that library with the same minor version number — or similarly that code which runs against a daemon will continue to run against all future versions of that daemon with the same minor version number. + +It is possible to apply different levels of API stability to components within a project. For example, the core functions in a library could be stable, and hence their API left unchanged in future; while the newer, less core functions could be left unstable and allowed to change wildly until the right design is found, at which point they could be marked as stable. + +Several types of stability commonly considered: +- Unstable: the API could change or be removed in future +- Backwards-compatible: only changes which permit code compiled against the unmodified API to continue running against the modified API are allowed (for example, functions cannot be removed) +- Forwards-compatible: only changes which permit code compiled against the modified API to run against the unmodified API are allowed (for example, functions cannot be added) +- Totally stable: no changes are allowed to the API, only to the implementation +- Typically, projects commit to backwards-compatibility when they say an API is 'stable'. Very few projects commit to total stability because it would prevent almost all further development of the project. + +In some rare cases, old APIs may become deprecated when they are no longer needed or do not fit with the current Apertis design. In those cases, they will be marked as deprecated at least one release before they are removed. diff --git a/content/developer/programming-guide-apparmor.md b/content/developer/programming-guide-apparmor.md new file mode 100644 index 0000000000000000000000000000000000000000..77428c67793cf801f2c2e478d42417234e673c8c --- /dev/null +++ b/content/developer/programming-guide-apparmor.md @@ -0,0 +1,51 @@ +--- +short-description: "Use AppArmor add a security layer which enforces access control" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Security and access control + +AppArmor is a security layer which enforces access control on the filesystem resources applications can access, and the permissions they can access them with. It comprises a kernel module and user space profiles for each application, which define the resources an application expects to access. For more information, see the [AppArmor home page](http://wiki.apparmor.net/index.php/Main_Page). Apertis uses AppArmor for all applications and services. + +## Summary + +* [Write AppArmor profiles](#profiles) to be as constrained as possible. +* [Validate the profiles](#validation) manually before release, and during testing. + +## Profiles + +For application development, the only work which needs to be done for AppArmor integration is to write and install a profile for the application. See the [AppArmor website](http://wiki.apparmor.net/index.php/Profiles) for information on writing profiles. Profiles should be as constrained as possible, following the [principle of least privilege](http://en.wikipedia.org/wiki/Principle_of_least_privilege). + +To install a profile, use the following `Makefile.am` snippet: +``` +aaprofiledir = $(sysconfdir)/apparmor.d +aaprofile_DATA = usr.bin.application-name +EXTRA_DIST = $(aaprofile_DATA) +``` + +## Validation + +AppArmor profiles can be validated in two ways: manually, and at runtime. Manual verification should be performed before each release, manually inspecting the profile against the list of changes made to the application since the last release, and checking that each entry is still relevant and correct, and that no new entries are needed. + +Runtime verification is automatic: AppArmor will deny access to files which violate the profile, emitting a message in the audit logs (`audit.log`), for example: +``` +Feb 23 18:54:07 my-host kernel: [ 24.610703] type=1400 audit(1393181647.872:15): apparmor="DENIED" operation="open" parent=1 profile="/usr/sbin/ntpd" name="/etc/ldap/ldap.conf" pid=1526 comm="ntpd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0 +``` + +Such messages should be investigated, and may result in changes to the application (to prevent it making such accesses) or to the profile (to allow them). + +Manual and runtime verification are complementary: manual verification ensures the profile is as small as possible; runtime verification ensures the profile is as big as it needs to be. + +## External links + +* [AppArmor home page](http://wiki.apparmor.net/index.php/Main_Page) +* [AppArmor profile wiki page](http://wiki.apparmor.net/index.php/Profiles) diff --git a/content/developer/programming-guide-coding-conventions.md b/content/developer/programming-guide-coding-conventions.md new file mode 100644 index 0000000000000000000000000000000000000000..3e2697f6635fef7743786df6685047c7645565e1 --- /dev/null +++ b/content/developer/programming-guide-coding-conventions.md @@ -0,0 +1,275 @@ +--- +short-description: "Follow standard coding conventions to make best use of available resources and build your app to be more maintainable" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Coding conventions + +This guide covers some points which will help you keep to the code style that Apertis expects. + +Coding conventions is a nebulous topic, covering code formatting and whitespace, function and variable naming, namespacing, use of common GLib coding patterns, and other things. Since C is quite flexible, this document mostly consists of a series of patterns (which it’s recommended code follows) and anti-patterns (which it’s recommended code does ''not'' follow). Any approaches to coding which are not covered by a pattern or anti-pattern are completely valid. + +Guidelines which are specific to GLib are included on this page; guidelines specific to other APIs are covered on their respective pages. + +## Summary + +* [Use the GLib coding style](#code-formatting), with vim modelines. +* [Consistently namespace files](#namespacing), functions and types. +* [Always design code to be modular](#modularity), encapsulated and loosely coupled. + * Especially by keeping object member variables inside the object’s private structure. +* Code defensively by [adding pre- and post-conditions assertions](#pre--and post-condition-assertions) to all public functions. +* Report all user errors (and no programmer errors) [using GError](#gerror-usage). +* Use [appropriate container types](#glist) for sets of items. +* [Document all constant values](#magic-values) used in the code. +* Use standard GLib patterns for defining [asynchronous methods](#asynchronous-methods). +* Do not call any blocking, [synchronous functions](#asynchronous-methods). +* Do not run blocking operations in separate threads; [use asynchronous calls instead](#asynchronous-methods). +* [Prefer enumerated types over booleans](#enumerated-types-and-booleans) whenever there is the potential for ambiguity between true and false. +* Ensure [GObject properties](#gobject-properties) have no side-effects. +* [Treat resources as heap-allocated memory](#resource-leaks) and do not leak them. + +## Code formatting + +Using a consistent code formatting style eases maintenance of code, by meaning contributors only have to learn one coding style for all modules, rather than one per module. + +The coding style in use is the popular [GLib coding style](https://developer.gnome.org/programming-guidelines/unstable/c-coding-style.html.en), which is a slightly modified version of the [GNU coding style](http://www.gnu.org/prep/standards/standards.html#Writing-C). + +Each C and H file should have a vim-style modeline, which lets the programmer’s editor know how code in the file should be formatted. This helps keep the coding style consistent as the files evolve. The following modeline should be put as the very first line of the file, immediately before the [copyright comment](licensing.md): +``` +/* vim:set et sw=2 cin cino=t0,f0,(0,{s,>2s,n-s,^-s,e2s: */ +``` + +For more information about the copyright comment, see [Licensing](licensing.md). + +### Reformatting code + +If a file or module does not conform to the code formatting style and needs to be reindented, the following command will do most of the work — but it can go wrong, and the file ''must'' be checked manually afterwards: + $ indent -gnu -hnl -nbbo -bbb -sob -bad -nut /path/to/file + +To apply this to all C and H files in a module: + $ git ls-files '*.[ch]' | \ + $ xargs indent -gnu -hnl -nbbo -bbb -sob -bad -nut + +Alternatively, if you have a recent enough version of Clang (>3.5): + $ git ls-files '*.[ch]' | \ + $ xargs clang-format -i -style=file + +Using a `.clang-format` file (added to git) in the same directory, containing: +``` + # See https://wiki.apertis.org/Guidelines/Coding_conventions#Code_formatting + BasedOnStyle: GNU + AlwaysBreakAfterDefinitionReturnType: All + BreakBeforeBinaryOperators: None + BinPackParameters: false + SpaceAfterCStyleCast: true + # Our column limit is actually 80, but setting that results in clang-format + # making a lot of dubious hanging-indent choices; disable it and assume the + # developer will line wrap appropriately. clang-format will still check + # existing hanging indents. + ColumnLimit: 0 +``` + +## Memory management + +See [Memory management](programming-guide-memory-management.md) for some patterns on handling memory management; particularly [Single-path cleanup](programming-guide-memory-management.md#single-path-cleanup). + +## Namespacing + +Consistent and complete namespacing of symbols (functions and types) and files is important for two key reasons: +1. Establishing a convention which means developers have to learn fewer symbol names to use the library — they can guess them reliably instead. +1. Ensuring symbols from two projects do not conflict if included in the same file. + +The second point is important — imagine what would happen if every project exported a function called `create_object()`. The headers defining them could not be included in the same file, and even if that were overcome, the programmer would not know which project each function comes from. Namespacing eliminates these problems by using a unique, consistent prefix for every symbol and filename in a project, grouping symbols into their projects and separating them from others. + +The conventions below should be used for namespacing all symbols. They are the [same as used in other GLib-based projects](https://developer.gnome.org/gobject/stable/gtype-conventions.html), so should be familiar to a lot of developers: +* Functions should use `lower_case_with_underscores`. +* Structures, types and objects should use `CamelCaseWithoutUnderscores`. +* Macros and #defines should use `UPPER_CASE_WITH_UNDERSCORES`. +* All symbols should be prefixed with a short (2–4 characters) version of the namespace. +* All methods of an object should also be prefixed with the object name. + +Additionally, public headers should be included from a subdirectory, effectively namespacing the header files. For example, instead of `#include <abc.h>`, a project should allow its users to use `#include <namespace/ns-abc.h>` + +For example, for a project called ‘Walbottle’, the short namespace ‘Wbl’ would be chosen. If it has a ‘schema’ object and a ‘writer’ object, it would install headers: +* `$PREFIX/include/walbottle-$API_MAJOR/walbottle/wbl-schema.h` +* `$PREFIX/include/walbottle-$API_MAJOR/walbottle/wbl-writer.h` + +(The use of `$API_MAJOR` above is for parallel installability.) + +For the schema object, the following symbols would be exported (amongst others), following GObject conventions: +* `WblSchema` structure +* `WblSchemaClass` structure +* `WBL_TYPE_SCHEMA` macro +* `WBL_IS_SCHEMA` macro +* `wbl_schema_get_type` function +* `wbl_schema_new` function +* `wbl_schema_load_from_data` function + +## Modularity + +[Modularity](http://en.wikipedia.org/wiki/Modular_programming), [encapsulation](http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29) and [loose coupling](http://en.wikipedia.org/wiki/Loose_coupling) are core computer science concepts which are necessary for development of maintainable systems. Tightly coupled systems require large amounts of effort to change, due to each change affecting a multitude of other, seemingly unrelated pieces of code. Even for smaller projects, good modularity is highly recommended, as these systems may grow to be larger, and refactoring for modularity takes a lot of effort. + +Assuming the general concepts of modularity, encapsulation and loose coupling are well known, here are some guidelines for implementing them which are specific to GLib and GObject APIs: +1. The private structure for a GObject should not be in any header files (whether private or public). It should be in the C file defining the object, as should all code which implements that structure and mutates it. +1. libtool convenience libraries should be used freely to allow internal code to be used by multiple public libraries or binaries. However, libtool convenience libraries must not be installed on the system. Use `noinst_LTLIBRARIES` in `Makefile.am` to declare a convenience library; not `lib_LTLIBRARIES`. +1. Restrict the symbols exported by public libraries by using `my_library_LDFLAGS = -export-symbols my-library.symbols`, where `my-library.symbols` is a text file listing the names of the functions to export, one per line. This prevents internal or private functions from being exported, which would break encapsulation. See [Exposing and Hiding Symbols](https://autotools.io/libtool/symbols.html). +1. Do not put any members (e.g. storage for object state or properties) in a public GObject structure — they should all be encapsulated in a private structure declared using [G_DEFINE_TYPE_WITH_PRIVATE](https://developer.gnome.org/gobject/stable/gobject-Type-Information.html#G-DEFINE-TYPE-WITH-PRIVATE:CAPS). +1. Do not use static variables inside files or functions to preserve function state between calls to it. Instead, store the state in an object (e.g. the object the function is a method of) as a private member variable (in the object’s private structure). Using static variables means the state is shared between all instances of the object, which is almost always undesirable, and leads to confusing behaviour. + +## Pre- and post-condition assertions + +An important part of secure coding is ensuring that incorrect data does not propagate far through code — the further some malicious input can propagate, the more code it sees, and the greater potential there is for an exploit to be possible. + +A standard way of preventing the propagation of invalid data is to check all inputs to, and outputs from, all publicly visible functions in a library or module. There are two levels of checking: +* Assertions: Check for programmer errors and abort the program on failure. +* Validation: Check for invalid input and return an error gracefully on failure. + +Validation is a complex topic, and is handled using [GErrors](#gerror-usage). The remainder of this section discusses pre- and post-condition assertions, which are purely for catching programmer errors. A programmer error is where a function is called in a way which is documented as disallowed. For example, if `NULL` is passed to a parameter which is documented as requiring a non-`NULL` value to be passed; or if a negative value is passed to a function which requires a positive value. Programmer errors can happen on output too — for example, returning `NULL` when it is not documented to, or not setting a GError output when it fails. + +Adding pre- and post-condition assertions to code is as much about ensuring the behaviour of each function is correctly and completely documented as it is about adding the assertions themselves. All assertions should be documented, preferably by using the relevant [gobject-introspection annotations](https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations), such as `(nullable)`. + +Pre- and post-condition assertions are implemented using [`g_return_if_fail()`](https://developer.gnome.org/glib/stable/glib-Warnings-and-Assertions.html#g-return-if-fail) and [`g_return_val_if_fail()`](https://developer.gnome.org/glib/stable/glib-Warnings-and-Assertions.html#g-return-val-if-fail). + +The pre-conditions should check each parameter at the start of the function, before any other code is executed (even retrieving the private data structure from a GObject, for example, since the GObject pointer could be `NULL`). The post-conditions should check the return value and any output parameters at the end of the function — this requires a single return statement and use of `goto` to merge other control paths into it. See [Single-path cleanup](programming-guide-memory-management.md#single-path cleanup) for an example. + +A fuller example is given in this [writeup of post-conditions](https://tecnocode.co.uk/2010/12/19/postconditions-in-c/). + +## GError usage + +[`GError`](https://developer.gnome.org/glib/stable/glib-Error-Reporting.html ) is the standard error reporting mechanism for GLib-using code, and can be thought of as a C implementation of an [exception](http://en.wikipedia.org/wiki/Exception_handling). + +Any kind of runtime failure (anything which is not a [programmer error](#pre--and post-condition-assertions) must be handled by including a `GError**` parameter in the function, and setting a useful and relevant GError describing the failure, before returning from the function. Programmer errors must not be handled using GError: use assertions, pre-conditions or post-conditions instead. + +GError should be used in preference to a simple return code, as it can convey more information, and is also supported by all GLib tools. For example, introspecting an API with [introspection](https://wiki.gnome.org/Projects/GObjectIntrospection GObject) will automatically detect all GError parameters so that they can be converted to exceptions in other languages. + +Any function call which can take a `GError**`, ''should'' take such a parameter, and the returned GError should be handled appropriately. There are very few situations where ignoring a potential error by passing `NULL` to a `GError**` parameter is acceptable. + +The GLib API documentation contains a [full tutorial for using GError](https://developer.gnome.org/glib/stable/glib-Error-Reporting.html#glib-Error-Reporting.description). + +## GList + +GLib provides several container types for sets of data: [`GList`](https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html), [`GSList`](https://developer.gnome.org/glib/stable/glib-Singly-Linked-Lists.html), [`GPtrArray`](https://developer.gnome.org/glib/stable/glib-Pointer-Arrays.html) and [`GArray`](https://developer.gnome.org/glib/stable/glib-Arrays.html). + +It has been common practice in the past to use GList in all situations where a sequence or set of data needs to be stored. This is inadvisable — in most situations, a GPtrArray should be used instead. It has lower memory overhead (a third to a half of an equivalent list), better cache locality, and the same or lower algorithmic complexity for all common operations. The only typical situation where a GList may be more appropriate is when dealing with ordered data, which requires expensive insertions at arbitrary indexes in the array. + +[Article on linked list performance](http://www.codeproject.com/Articles/340797/Number-crunching-Why-you-should-never-ever-EVER-us) + +If linked lists are used, be careful to keep the complexity of operations on them low, using standard CS complexity analysis. Any operation which uses [`g_list_nth()`](https://developer.gnome.org/glib/2.30/glib-Doubly-Linked-Lists.html#g-list-nth) or [`g_list_nth_data()`](https://developer.gnome.org/glib/2.30/glib-Doubly-Linked-Lists.html#g-list-nth-data) is almost certainly wrong. For example, iteration over a GList should be implemented using the linking pointers, rather than a incrementing index: +``` +GList *some_list, *l; + +for (l = some_list; l != NULL; l = l->next) + { + gpointer element_data = l->data; + + /* Do something with @element_data. */ + } +``` + +Using an incrementing index instead results in an exponential decrease in performance (O(2×N^2) rather than O(N)): +``` +GList *some_list; +guint i; + +/* This code is inefficient and should not be used in production. */ +for (i = 0; i < g_list_length (some_list); i++) + { + gpointer element_data = g_list_nth_data (some_list, i); + + /* Do something with @element_data. */ + } +``` + +The performance penalty comes from `g_list_length()` and `g_list_nth_data()` which both traverse the list (O(N)) to perform their operations. + +Implementing the above with a GPtrArray has the same complexity as the first (correct) GList implementation, but better cache locality and lower memory consumption, so will perform better for large numbers of elements: +``` +GPtrArray *some_array; +guint i; + +for (i = 0; i < some_array->len; i++) + { + gpointer element_data = some_array->pdata[i]; + + /* Do something with @element_data. */ + } +``` + +## Magic values + +Do not use constant values in code without documenting them. These values can be known as ‘magic’ values, because it is not clear how they were chosen, what they depend on, or when they need to be updated. + +Magic values should be: +* defined as macros using `#define`, rather than being copied to every usage site; +* all defined in an easy-to-find-location, such as the top of the source code file; and +* documented, including information about how they were chosen, and what that choice depended on. + +One situation where magic values are used incorrectly is to circumvent the type system. For example, a magic string value which indicates a special state for a string variable. Magic values should not be used for this, as the software state could then be corrupted if user input includes that string (for example). Instead, a separate variable should be used to track the special state. Use the type system to do this work for you — magic values should never be used as a basic dynamic typing system. + +## Asynchronous methods + +Long-running blocking operations should not be run such that they block the UI in a graphical application. This happens when one iteration of the UI’s main loop takes significantly longer than the frame refresh rate, so the UI is not refreshed when the user expects it to be. Interactivity reduces and animations stutter. In extreme cases, the UI can freeze entirely until a blocking operation completes. This should be avoided at all costs. + +Similarly, in non-graphical applications that respond to network requests or D-Bus inter-process communication, blocking the main loop prevents the next request from being handled. + +There are two possible approaches for preventing the main loop being blocked: +. Running blocking operations asynchronously in the main thread, using polled I/O. +. Running blocking operations in separate threads, with the main loop in the main thread. + +The second approach typically leads to complex locking and synchronisation between threads, and introduces many bugs. The recommended approach in GLib applications is to use asynchronous operations, implemented using [`GTask`](https://developer.gnome.org/gio/stable/GTask.html) and [`GAsyncResult`](https://developer.gnome.org/gio/stable/GAsyncResult.html). Asynchronous operations must be implemented everywhere for this approach to work: any use of a blocking, synchronous operation will effectively make all calling functions blocking and synchronous too. + +The documentation for [`GTask`](https://developer.gnome.org/gio/stable/GTask.html) and [`GAsyncResult`](https://developer.gnome.org/gio/stable/GAsyncResult.html) includes examples and tutorials for implementing and using GLib-style asynchronous functions. + +Key principles for using them: +- Never call synchronous methods: always use the `*_async()` and `*_finish()` variant methods. +- Never use threads for blocking operations if an asynchronous alternative exists. +- Always wait for an asynchronous operation to complete (i.e. for its `GAsyncReadyCallback` to be invoked) before starting operations which depend on it. +-- Never use a timeout (`g_timeout_add()`) to wait until an asynchronous operation ‘should’ complete. The time taken by an operation is unpredictable, and can be affected by other applications, kernel scheduling decisions, and various other system processes which cannot be predicted. + +## Enumerated types and booleans + +In many cases, enumerated types should be used instead of booleans: +- Booleans are not self-documenting in the same way as enums are. When reading code it can be easy to misunderstand the sense of the boolean and get things the wrong way round. +- They are not extensible. If a new state is added to a property in future, the boolean would have to be replaced — if an enum is used, a new value simply has to be added to it. + +This is documented well in the article [Use Enums Not Booleans](http://c2.com/cgi/wiki?UseEnumsNotBooleans). + +## GObject properties + +[Properties on GObjects](https://developer.gnome.org/gobject/stable/gobject-properties.html) are a key feature of GLib-based object orientation. Properties should be used to expose state variables of the object. A guiding principle for the design of properties is that (in pseudo-code): +``` +var temp = my_object.some_property +my_object.some_property = "new value" +my_object.some_property = temp +``` +should leave `my_object` in exactly the same state as it was originally. Specifically, properties should ''not'' act as parameterless methods, triggering state transitions or other side-effects. + +## Resource leaks + +As well as [memory leaks](programming-guide-memory-management.md), it is possible to leak resources such as GLib timeouts, open file descriptors or connected GObject signal handlers. Any such resources should be treated using the same principles as allocated memory. + +For example, the source ID returned by [`g_timeout_add()`](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add) must always be stored and removed (using [`g_source_remove()`](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-source-remove)) when the owning object is finalised. This is because it is very rare that we can guarantee the object will live longer than the timeout period — and if the object is finalised, the timeout left uncancelled, and then the timeout triggers, the program will typically crash due to accessing the object’s memory after it’s been freed. + +Similarly for signal connections, the signal handler ID returned by [`g_signal_connect()`](https://developer.gnome.org/gobject/stable/gobject-Signals.html#g-signal-connect) should always be saved and explicitly disconnected ([`g_signal_handler_disconnect()`](https://developer.gnome.org/gobject/stable/gobject-Signals.html#g-signal-handler-disconnect)) unless the object being connected is guaranteed to live longer than the object being connected to (the one which emits the signal): + +Other resources which can be leaked, plus the functions acquiring and releasing them (this list is non-exhaustive): +* File descriptors (FDs): [`g_open()`](https://developer.gnome.org/glib/stable/glib-File-Utilities.html#g-open), [`g_close()`](https://developer.gnome.org/glib/stable/glib-File-Utilities.html#g-close) +* Threads: [`g_thread_new()`](https://developer.gnome.org/glib/stable/glib-Threads.html#g-thread-new), [`g_thread_join()`](https://developer.gnome.org/glib/stable/glib-Threads.html#g-thread-join) +* Subprocesses: [`g_spawn_async()`](https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-async), [`g_spawn_close_pid()`](https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-close-pid) +* D-Bus name watches: [`g_bus_watch_name()`](https://developer.gnome.org/gio/stable/gio-Watching-Bus-Names.html#g-bus-watch-name), [`g_bus_unwatch_name()`](https://developer.gnome.org/gio/stable/gio-Watching-Bus-Names.html#g-bus-unwatch-name) +* D-Bus name ownership: [`g_bus_own_name()`](https://developer.gnome.org/gio/stable/gio-Owning-Bus-Names.html#g-bus-own-name), [`g_bus_unown_name()`](https://developer.gnome.org/gio/stable/gio-Owning-Bus-Names.html#g-bus-unown-name) + +## External links + +* [Pre- and post-condition assertions article](https://tecnocode.co.uk/2010/12/19/postconditions-in-c/) +* [Exposing and hiding library symbols article](https://autotools.io/libtool/symbols.html) +* [GError tutorial](https://developer.gnome.org/glib/stable/glib-Error-Reporting.html#glib-Error-Reporting.description) diff --git a/content/developer/programming-guide-filesystem.md b/content/developer/programming-guide-filesystem.md new file mode 100644 index 0000000000000000000000000000000000000000..de4144bec4a4854ad8b4e9b7f389ea2bc30e8493 --- /dev/null +++ b/content/developer/programming-guide-filesystem.md @@ -0,0 +1,52 @@ +--- +short-description: "Working with files" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Filesystem access + +There are a few anti-patterns to consider when accessing the filesystem. This article assumes knowledge of the standard [`GFile`](https://developer.gnome.org/gio/stable/GFile.html), [`GInputStream`](https://developer.gnome.org/gio/stable/GInputStream.html) and [`GOutputStream`](https://developer.gnome.org/gio/stable/GOutputStream.html) APIs. + +## Summary + +* [Always use asynchronous I/O](#asynchronous-I/O) for file access. +* Always use [appropriate functions to construct file names and paths](#file-path-construction). +* [Validate file paths](#path-validation-and-sandboxing) to ensure expected results before using them. +* [Use AppArmor profiles](#path-validation-and-sandboxing) to enforce constraints on file access. + +## Asynchronous I/O + +All I/O should be performed asynchronously. That is, without blocking the [GLib main context](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html). This can be achieved by always using the `*_async()` and `*_finish()` variants of each I/O function. For example, [`g_input_stream_read_async()`](https://developer.gnome.org/gio/stable/GInputStream.html#g-input-stream-read-async) rather than [`g_input_stream_read()`](https://developer.gnome.org/gio/stable/GInputStream.html#g-input-stream-read). + +Synchronous I/O blocks the main loop, which means that other events, such as user input, incoming networking packets, timeouts and idle callbacks, are not handled until the blocking function returns. + +Note that the alternative – running synchronous I/O in a separate thread – is highly discouraged. + +## File path construction + +File names and paths are not normal strings: on some systems, they can use a character encoding other than UTF-8, while normal strings in GLib are guaranteed to always use UTF-8. For this reason, special functions should be used to build and handle file names and paths. (Modern Linux systems almost universally use UTF-8 for filename encoding, so this is not an issue in practice, but the file path functions should still be used.) + +For example, file paths should be built using [`g_build_filename()`](https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-build-filename) rather than [`g_strconcat()`](https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strconcat). Doing so makes it clearer what the code is meant to do, and also eliminates duplicate directory separators, so the returned path is canonical (though not necessarily absolute). + +As another example, paths should be disassembled using [`g_path_get_basename()`](https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-path-get-basename) and [`g_path_get_dirname()`](https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-path-get-dirname) rather than [`g_strrstr()`](https://developer.gnome.org/glib/stable/glib-String-Utility-Functions.html#g-strrstr) and other manual searching functions. + +## Path validation and sandboxing + +If a filename or path comes from external input, such as a web page or user input, it should be validated to ensure that putting it into a file path will not produce an arbitrary path. For example if a filename is constructed from the constant string `~/` plus some user input, if the user inputs `../../etc/passwd`, they can (potentially) gain access to sensitive account information, depending on which user the program is running as, and what it does with data loaded from the constructed path. + +This can be avoided by validating constructed paths before using them, using [`g_file_resolve_relative_path()`](https://developer.gnome.org/gio/stable/GFile.html#g-file-resolve-relative-path) to convert any relative paths to absolute ones, and then validating that the path is beneath a given root sandboxing directory appropriate for the operation. For example, if code downloads a file, it could validate that all paths are beneath `~/Downloads`, using [`g_file_has_parent()`](https://developer.gnome.org/gio/stable/GFile.html#g-file-has-parent). + +As a second line of defence, all projects which access the filesystem should provide an AppArmor profile which limits the directories they can read from and write to. See the [AppArmor guidelines](programming-guide-apparmor.md) for more information. + +## External links + +* [GFile documentation](https://developer.gnome.org/gio/stable/GFile.html) diff --git a/content/developer/programming-guide-gsettings.md b/content/developer/programming-guide-gsettings.md new file mode 100644 index 0000000000000000000000000000000000000000..3d59a4540258afb49afa8aebeb6c1bcacb27d152 --- /dev/null +++ b/content/developer/programming-guide-gsettings.md @@ -0,0 +1,92 @@ +--- +short-description: "Learn to store your app settings correctly" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# GSettings + +[GSettings](https://developer.gnome.org/gio/stable/GSettings.html) is a GLib API for storing persistent application settings (but not large amounts of data or user documents). It is the successor to GConf, and is similar in use to the Windows Registry. GSettings is used by Apertis for application preferences and configuration data. Its main advantages over databases or configuration files are its support for structured data (using GVariant), and its fast reads. It has good integration with GObject, with powerful features such as binding to object properties with [`g_settings_bind()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-bind). + +Due to its tight integration with other GLib utilities, it should be used in preference to (e.g.) [SQLite](programming-guide-sqlite.md) for configuration data (but not for user data or documents, or high volumes of data). + +## Summary + +* [Compile and install](#schema-installation) all schemas using the `GLIB_GSETTINGS` autoconf macro. +* Ensure schemas are [named consistently](#schema-design). +* Ensure schemas are [fully translatable](#schema-design). +* [Use relocatable schemas](#relocatable-schemas) where appropriate for instantiating the same schema at multiple paths. +* Do not use [schema overrides](#schema-overrides) in upstream code. + +## Schema design + +GSettings uses compiled schemas, which describe the available settings and their types. A single schema should contain a group of related settings, such as the settings for a single application. Every setting used by an application must be in a schema, and that schema must be compiled and installed. This can be done using the `@GSETTINGS_RULES@` automake macro [provided by GLib](https://developer.gnome.org/gio/stable/GSettings.html#GSettings.description). + +Each schema has a unique identifier, the *schema ID*. The name of the file +describing the schema must be the schema ID followed by `.gschema.xml`. + +Schemas in +[application bundles](appdev-design.md#structure-of-an-application-bundle) +must follow a specific naming convention. If there is a schema that should +be displayed in a system-wide preferences user interface, then its schema +ID must be the same as the [bundle ID](appdev-design.md#bundle-id). +If there are schemas that should not be displayed in a system-wide +preferences user interface, then their schema IDs must start with the +bundle ID followed by a dot. Application authors can use either or both +of these arrangements, depending on how they intend for those preferences +to appear. + +For example, if an application bundle named `com.example.MyApp` installs +a schema with ID `com.example.MyApp` in a file named +`com.example.MyApp.gschema.xml`, the preferences in that schema can be +displayed in a system-wide preferences user interface. If the same application +bundle installs a schema with ID `com.example.MyApp.Advanced` in a file +named `com.example.MyApp.Advanced.gschema.xml`, the preferences in that +second schema will not be displayed in a system-wide preferences user +interface, but can still be used internally by the application. + +All schemas should be translatable, which allows for configuration key default values to differ for different locales. This can be useful for settings which are known to be different in different countries. For example, a setting specifying which is the first day of the week. Schemas are automatically marked as translatable if intltool 0.50.1 is in use, and the schema is listed in `po/POTFILES.in` as: +``` +[type: gettext/gsettings]data/org.foo.MyApp.gschema.xml +``` + +## Schema installation + +All schemas should be installed on the system. This is automatically handled by the `@GSETTINGS_RULES@` automake macro, simply by listing the schema file in `gsettings_SCHEMAS` in `Makefile.am`: +``` +gsettings_SCHEMAS = org.foo.MyApp.gschema.xml +EXTRA_DIST = $(gsettings_SCHEMAS) +@GSETTINGS_RULES@ +``` + +Note that the `GLIB_GSETTINGS` macro must have been used in `configure.ac` for this to work. + +By installing schemas, there is no need to check for schema or key availability at run time, as all keys have default values provided by the schema. Calls to [`g_settings_list_schemas()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-list-schemas) and [`g_settings_list_keys()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-list-keys) are almost always unnecessary except when using [Relocatable schemas](#relocatable-schemas). Instead, schema keys should be retrieved on the assumption that they exist, simply by calling (e.g.) [`g_settings_get_string()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-get-string) without any checks. + +## Relocatable schemas + +GSettings has a feature called ‘relocatable schemas’ which is designed specifically for situations where an unknown set of applications need to use a common schema template — where one schema is used multiple times at different GSettings paths. Each path has an instance of the schema and all its keys, and represents the configuration for a single app. + +In such specific situations, a single relocatable schema should be used rather than copying the schema for each application. [`g_settings_list_relocatable_schemas()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-list-relocatable-schemas) should be used with [`g_settings_new_with_path()`](https://developer.gnome.org/gio/stable/GSettings.html#g-settings-new-with-path) to instantiate the schema for each path. + +See the [GSettings documentation](https://developer.gnome.org/gio/stable/GSettings.html#GSettings.description) for more information. + +## Schema overrides + +GSettings override files are designed for vendors to be able to override upstream-provided GSettings schema defaults, allowing for customisation of their distributions of software. If used, they should be added by the vendors using custom patches, and should not be added upstream in Apertis. + +## Debugging + +The GSettings database for the current environment can be explored and modified using the `gsettings` command line tool. See `gsettings --help` for more information. Note that the tool needs to be run in the same environment as the application in order to see the same GSettings database. + +## External links + +* [GSettings documentation](https://developer.gnome.org/gio/stable/GSettings.html) diff --git a/content/developer/programming-guide-index.md b/content/developer/programming-guide-index.md new file mode 100644 index 0000000000000000000000000000000000000000..dedb99e0330800efdd2e17bc833ae9f241824c3e --- /dev/null +++ b/content/developer/programming-guide-index.md @@ -0,0 +1,12 @@ +--- +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Programming guidelines + +This guide contains several guidelines and suggestions for programmers developing applications for the Apertis platform. This is intended for programmers to know about the processes, conventions and philosophies behind Apertis and the stack of libraries supporting it. By knowing “the way things are done†in the Apertis ecosystem, it is hoped that programmers will find use of Apertis APIs and development of new applications easier and more natural, and will produce applications which will remain relevant and maintainable over a long period of time. diff --git a/content/developer/programming-guide-internationalization.md b/content/developer/programming-guide-internationalization.md new file mode 100644 index 0000000000000000000000000000000000000000..02f83b29296a825650243db80fb0b0f92f14ce4b --- /dev/null +++ b/content/developer/programming-guide-internationalization.md @@ -0,0 +1,115 @@ +--- +short-description: "Develop your app to be easily translatable and localisable." + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Internationalization + +Internationalization (commonly abbreviated ‘i18n’) is a topic which covers many areas: more than just translating UI strings, it involves changing settings and defaults to match the customs and conventions of the locale a program is being run in. For example, days of the week, human name formats, currencies, etc. + +## Summary + +* Design projects to be [internationalized from the beginning](#basics). +* [Use gettext](#basics) (**not** intltool) for string translation. +* Remember that [all strings are in UTF-8](#unicode), and may contain multi-byte characters. +* Programs cannot reasonably implement [changing locales at runtime](#changing-locale). + +## Basics + +Documenting the whole process of preparing a project for internationalisation is beyond the scope of this document, but some good guides exist: +* [GNOME developer translation guidelines](https://wiki.gnome.org/TranslationProject/DevGuidelines) +* [gtkmm translation guidelines](https://developer.gnome.org/gtkmm-tutorial/stable/chapter-internationalization.html.en) (aimed at C++ programmers, but widely applicable to C programmers) +* [GLib internationalization API reference](https://developer.gnome.org/glib/stable/glib-I18N.html) + +It is important to prepare a project for internationalization early in its lifetime, otherwise non-internationalizable programming practices creep in, and are hard to eliminate. For example, [splitting strings into multiple translation units](https://wiki.gnome.org/TranslationProject/DevGuidelines/Never%20split%20sentences). + +To add internationalization support to a project, follow the [instructions here](https://wiki.gnome.org/TranslationProject/DevGuidelines/Localize%20using%20gettext%20and%20intltool), which can be summarised as adding the following to `configure.ac`: +``` +AM_GNU_GETTEXT_VERSION([0.19]) +AM_GNU_GETTEXT([external]) + +GETTEXT_PACKAGE=AC_PACKAGE_TARNAME +AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], [Define to the Gettext package name]) +AC_SUBST(GETTEXT_PACKAGE) +``` + +Note that intltool is outdated, and we only need to use gettext. + +Add `po/Makefile.in` to `AC_CONFIG_FILES` and `po` to `SUBDIRS` in `Makefile.am`. Then create an empty `po/POTFILES.in` file (which will be modified when files are marked for translation), an empty `po/LINGUAS` file (which will be modified when extra translation languages are added), and create `po/Makevars` containing: +``` +DOMAIN = $(PACKAGE)-$(VERSION) +COPYRIGHT_HOLDER = +MSGID_BUGS_ADDRESS = +EXTRA_LOCALE_CATEGORIES = +PO_DEPENDS_ON_POT = no + +XGETTEXT_OPTIONS = \ + --from-code=UTF-8 \ + --keyword=_ --flag=_:1:pass-c-format \ + --keyword=N_ --flag=N_:1:pass-c-format \ + --flag=g_log:3:c-format --flag=g_logv:3:c-format \ + --flag=g_error:1:c-format --flag=g_message:1:c-format \ + --flag=g_critical:1:c-format --flag=g_warning:1:c-format \ + --flag=g_print:1:c-format \ + --flag=g_printerr:1:c-format \ + --flag=g_strdup_printf:1:c-format --flag=g_strdup_vprintf:1:c-format \ + --flag=g_printf_string_upper_bound:1:c-format \ + --flag=g_snprintf:3:c-format --flag=g_vsnprintf:3:c-format \ + --flag=g_string_sprintf:2:c-format \ + --flag=g_string_sprintfa:2:c-format \ + --flag=g_scanner_error:2:c-format \ + --flag=g_scanner_warn:2:c-format + +subdir = po +top_builddir = .. +``` + +These should be committed to git. + +No other translation infrastructure files should be committed to git, especially not the following. +* `po/ChangeLog` +* `po/Makefile.in.in` +* `po/POTFILES` +* `po/stamp-it` +* `po/*.mo` + +## Unicode + +All strings in GLib, unless otherwise specified, are in [Unicode](http://en.wikipedia.org/wiki/Unicode), encoded as [UTF-8](http://en.wikipedia.org/wiki/UTF-8). They must be handled as such, which means all string manipulation must be done in terms of Unicode characters, rather than bytes. In many cases, string manipulation functions do not need to differentiate between the two; manual array indexing is a situation where you should be careful. + +GLib provides a [set of UTF-8-safe versions of standard C string manipulation functions](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html), which should always be used instead of the standard C ones. + +### Sorting strings + +When displaying sorted strings in the UI, care needs to be taken to ensure the strings are sorted using Unicode algorithms, rather than plain ASCII algorithms. This means using [`g_utf8_collate()`](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-collate) rather than [`strcmp()`](http://linux.die.net/man/3/strcmp) to establish an order between two strings. + +Furthermore, if section headings need to be used for splitting a list into alphabetical sections, they need to be generated using the [current locale’s alphabet](http://en.wikipedia.org/wiki/List_of_writing_systems), rather than just the A–Z [English alphabet](http://en.wikipedia.org/wiki/English_alphabet). One approach to doing this would be to extract the first character of each item’s name (using [`g_utf8_get_char_validated()`](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-utf8-get-char-validated)) then using it as a section heading if it’s considered alphabetic for the current locale (using [`g_unichar_isalpha()`](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html#g-unichar-isalpha)). + +## Changing locale + +Changing locale at runtime is not safe, as it requires calling [`setenv()`](http://pubs.opengroup.org/onlinepubs/009695399/functions/setenv.html), which is explicitly not thread safe. It also theoretically involves more than just changing UI strings — it involves changing date formats, number formats, and the output of any code which is predicated on those. The impacts of changing locale can be far-reaching and subtle. + +To change the locale of an application, the application has to be restarted. + +## Language identifiers + +When referring to languages (e.g. in configuration files or preferences), always use the [language codes](http://en.wikipedia.org/wiki/ISO_639), as used by gettext. + +## External links + +* [FAQ on Unicode and UTF-8](http://www.cl.cam.ac.uk/~mgk25/unicode.html) +* [Comprehensive introduction to Unicode](http://www.joelonsoftware.com/articles/Unicode.html) +* [Technical principles of Unicode](http://unicode.org/standard/principles.html) +* [GNOME developer translation guidelines](https://wiki.gnome.org/TranslationProject/DevGuidelines) +* [gtkmm translation guidelines](https://developer.gnome.org/gtkmm-tutorial/stable/chapter-internationalization.html.en) (aimed at C++ programmers, but widely applicable to C programmers) +* [GLib internationalization API reference](https://developer.gnome.org/glib/stable/glib-I18N.html) +* [GLib Unicode API reference](https://developer.gnome.org/glib/stable/glib-Unicode-Manipulation.html) diff --git a/content/developer/programming-guide-introspection.md b/content/developer/programming-guide-introspection.md new file mode 100644 index 0000000000000000000000000000000000000000..903cbb395368766048027e8a80a6fa9448381f96 --- /dev/null +++ b/content/developer/programming-guide-introspection.md @@ -0,0 +1,45 @@ +--- +short-description: "APIs for languages other than C." + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Introspection + +Apertis libraries are written in C and therefore all public APIs are available for app developers to use in C. Additionally, APIs should also have introspection enabled and therefore be available for languages other than C, such as JavaScript and Python. + +[GObject introspection](https://wiki.gnome.org/Projects/GObjectIntrospection) (abbreviated ‘GIR’) is the system which Apertis uses to extracts APIs from C code and produces binary type libraries which can be used by non-C language bindings, and other tools, to [introspect](http://en.wikipedia.org/wiki/Type_introspection) or [wrap](http://en.wikipedia.org/wiki/Language_binding) the original C libraries. + +Introspection cannot be enabled for programs, since they expose no APIs. However, it is still recommended to [add introspection annotations to documentation comments](#Introspection-annotations) in program code, as they clarify the documentation. + +## Introspection annotations + +Each comment should have appropriate [GObject introspection annotations](https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations). Introspection annotations add information (functions, function parameters, function return values, structures, GObject properties, GObject signals) which is otherwise not present in a clear and consistent way. + +In comments, annotations should be preferred over human-readable equivalents. For example, when documenting a function parameter which may be `NULL`, use the `(nullable)` annotation rather than some text: +``` +/** + * my_function: + * @parameter: (nullable): some parameter which affects something + * + * Body of the function documentation. + */ +``` + +Instead of: +``` +/** + * my_bad_function: + * @parameter: some parameter which affects something, or %NULL to ignore + * + * Bad body of the function documentation. + */ +``` diff --git a/content/developer/programming-guide-logging.md b/content/developer/programming-guide-logging.md new file mode 100644 index 0000000000000000000000000000000000000000..2c89cd4d7275387015770abff4dd1c814aa4dc74 --- /dev/null +++ b/content/developer/programming-guide-logging.md @@ -0,0 +1,107 @@ +--- +short-description: "Log debug and other output from your app" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Logging + +Logging debug and informational output from libraries and programs is an open problem, and there are various methods for converting multiple streams of log output into the customary stdout and stderr streams. Below are some suggestions for how to implement logging. However, the most important thing is to ensure that logging is consistent, so that log data can be accessed and searched with a minimum of effort, since that’s what it’s used for. Using different logging mechanisms and formats in different projects is not the right approach. + +## Summary + +* Use the [GLib logging framework](#glib-logging-framework) instead of logging directly to stderr and stdout. +* If systemd can be a dependency of the project, consider [logging directly to the journal](#journald-integration). +* [Do not implement log rotation](#log-rotation) and deletion; leave that to system services. + +## GLib logging framework + +GLib provides [a logging framework](https://developer.gnome.org/glib/stable/glib-Message-Logging.html) based around the [`g_log()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-log) function, with convenience wrappers [`g_debug()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-debug), [`g_message()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-message), [`g_warning()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-warning) and [`g_error()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-error). The GLib logging framework has a few useful features: +* Programmatic redirection of log messages using [`g_log_set_handler()`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#g-log-set-handler). +* Multiple logging domains, which can be processed separately. +* Multiple log levels, which can be processed separately. For example, this allows debug messages to be turned on and off at runtime. +* Support for automatically aborting a program on ‘fatal’ messages. + +These should be used in preference to functions like `printf()`, [`g_print()`](https://developer.gnome.org/glib/stable/glib-Warnings-and-Assertions.html#g-print) and [`g_printerr()`](https://developer.gnome.org/glib/stable/glib-Warnings-and-Assertions.html#g-printerr), due to their enhanced flexibility. The logging functions allow log processing to be done in code, rather than by external shell scripting, which simplifies everything. + +A key reason to use the logging framework is that it is used in GLib and other related libraries already; by using it, all log messages are then going through the same system and can be processed similarly. + +To use the GLib logging framework, define [`G_LOG_DOMAIN`](https://developer.gnome.org/glib/stable/glib-Message-Logging.html#G-LOG-DOMAIN:CAPS) for each library so they’re all unique. Call `g_debug("Message")` to log a debug message. + +If the default GLib log handlers are not sufficient, for example if log messages need to be in a custom format or [journald integration](#journald-integration) is needed, set up a log handler with the following code. Note that ''consistency of logging should be considered very important'', so if one module uses a custom log handler, all other modules should use the same one, linked in from a common utility library. + +The following code should not be copied and pasted—it is an example for reference only. +``` +static const gchar * +log_level_to_string (GLogLevelFlags level) +{ + switch (level) + { + case G_LOG_LEVEL_ERROR: return "ERROR"; + case G_LOG_LEVEL_CRITICAL: return "CRITICAL"; + case G_LOG_LEVEL_WARNING: return "WARNING"; + case G_LOG_LEVEL_MESSAGE: return "MESSAGE"; + case G_LOG_LEVEL_INFO: return "INFO"; + case G_LOG_LEVEL_DEBUG: return "DEBUG"; + default: return "UNKNOWN"; + } +} + +static void +log_handler_cb (const gchar *log_domain, + GLogLevelFlags log_level, + const gchar *message, + gpointer user_data) +{ + const gchar *log_level_str; + + /* Ignore debug messages if disabled. */ + if (!debug_enabled && (log_level & G_LOG_LEVEL_DEBUG)) + { + return; + } + + log_level_str = log_level_to_string (log_level & G_LOG_LEVEL_MASK); + + /* Use g_printerr() for warnings and g_print() otherwise. */ + if (flags <= G_LOG_LEVEL_WARNING) + { + g_printerr ("%s: %s: %s\n", log_domain, log_level_str, message); + } + else + { + g_print ("%s: %s: %s\n", log_domain, log_level_str, message); + } +} + +g_log_set_handler ("log-domain", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, log_handler_cb, NULL); +``` + +### Exceptions + +* Do not use `g_message()` in normal code to print output. Printing output should be done at the top level of an application, using `g_print()`, and should be quite rare; i.e. only done in command line applications. +* Do not use `g_warning()` in library code. Use [`GError`](programming-guide-coding-conventions.md#gerror-usage) instead. +* Similarly, do not set up log handlers in library code. Log messages should propagate through library code and be handled in a log handler at the top level of an application. + +## journald integration + +Compared to conventional syslog-style logs, journald supports storage of structured logging data, which can make post-hoc analysis of logs much easier. If it’s possible to add `systemd-journal` as a dependency to a project, the project’s log handling function could be extended to use [`sd_journal_print()` and `sd_journal_send()`](http://0pointer.de/public/systemd-man/sd_journal_send.html) instead of `g_print()` and `g_printerr()`. + +For more information, see this [article on logging to the journal](http://0pointer.de/blog/projects/journal-submit.html). + +## Log rotation + +Log file rotation is one feature which is out of scope of the GLib logging system. It should be handled by the normal system logging mechanisms. On the Apertis platform, systemd-journald automatically carries out log rotation. + +## External links + +* [GLib logging API reference](https://developer.gnome.org/glib/stable/glib-Message-Logging.html) +* [Article on logging to journald](http://0pointer.de/blog/projects/journal-submit.html) diff --git a/content/developer/programming-guide-memory-management.md b/content/developer/programming-guide-memory-management.md new file mode 100644 index 0000000000000000000000000000000000000000..c5638fcc9190a0efdcd606079accc38d4ce6aff4 --- /dev/null +++ b/content/developer/programming-guide-memory-management.md @@ -0,0 +1,295 @@ +--- +short-description: "How to manage memory allocation in your app" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Memory management + +Apertis is predominantly written in C, so dynamically allocated memory has to be managed manually. Through use of GLib convenience APIs, memory management can be trivial, but programmers always need to keep memory in mind when writing code. + +It is assumed that users of Apertis are familiar with the idea of heap allocation of memory using `malloc()` and `free()`, and know of the GLib equivalents, `g_malloc()` and `g_free()`. + +## Summary + +There are three situations to avoid, in order of descending importance: +- Using memory after freeing it (use-after-free). +- Using memory before allocating it. +- Not freeing memory after allocating it (leaking). + +Key principles, in no particular order: +* Determine and document whether each variable is owned or unowned. They must never change from one to the other at runtime. +* Determine and document the ownership transfers at function boundaries. +* Ensure that each assignment, function call and function return respects the relevant ownership transfers. +* Use reference counting rather than explicit finalisation where possible. +* Use GLib convenience functions like [`g_clear_object()`](#g_clear_object()) where possible. +* Do not split memory management across code paths. +* Use the single-path cleanup pattern for large or complex functions. +* Leaks should be checked for using Valgrind. + +## Principles of memory management + +The normal approach to memory management is for the programmer to keep track of which variables point to allocated memory, and to manually free them when they are no longer needed. This is correct, but can be clarified by introducing the concept of ''ownership'', which is the piece of code (such as a function, struct or object) which is responsible for freeing a piece of allocated memory (an ''allocation''). Each allocation has exactly one owner; this owner may change as the program runs, by ''transferring'' ownership to another piece of code. Each variable is ''owned'' or ''unowned'', according to whether the scope containing it is always its owner. Each function parameter and return type either transfers ownership of the values passed to it, or it doesn’t. By statically calculating which variables are owned, memory management becomes a simple task of unconditionally freeing the owned variables before they leave their scope, and ''not'' freeing the unowned variables. + +There is an important restriction here: variables must **never** change from owned to unowned (or vice-versa) at runtime. This restriction is key to simplifying memory management. + +For example, given the functions: +``` +gchar *generate_string (const gchar *template); +void print_string (const gchar *str); +``` +the following code has been annotated to note where the ownership transfers happen: +``` +gchar *my_str = NULL; /* owned */ +const gchar *template; /* unowned */ +GValue value = G_VALUE_INIT; /* owned */ +g_value_init (&value, G_TYPE_STRING); + +/* Transfers ownership of a string from the function to the variable. */ +template = "XXXXXX"; +my_str = generate_string (template); + +/* No ownership transfer. */ +print_string (my_str); + +/* Transfer ownership. We no longer have to free @my_str. */ +g_value_take_string (&value, my_str); + +/* We still have ownership of @value, so free it before it goes out of scope. */ +g_value_unset (&value); +``` + +There are a few points here: Firstly, the ‘owned’ comments by the variable declarations denote that those variables are owned by the local scope, and hence need to be freed before they go out of scope. The alternative is ‘unowned’, which means the local scope does ''not'' have ownership, and ''must not'' free the variables before going out of scope. Similarly, ownership ''must not'' be transferred to them on assignment. + +Secondly, the variable type modifiers reflect the ownership status of each variable: because `my_str` is owned by the local scope, it has type `gchar`, whereas `template` is `const` to denote it is unowned. Similarly, the `template` parameter of `generate_string()` and the `str` parameter of `print_string()` are `const` because no ownership is transferred when those functions are called. As ownership ''is'' transferred for the string parameter of `g_value_take_string()`, we can expect its type to be `gchar`. + +(Note that this is not the case for `GObject`s and subclasses, which can never be `const`. It is only the case for strings and simple `struct`s.) + +Given this ownership and transfer infrastructure, the correct approach to memory allocation can be mechanically determined for each situation. In each case, the `copy()` function must be appropriate to the data type, e.g. `g_strdup()` for strings, or `g_object_ref()` for GObjects. + +### Assignments + +| Assigning from/to | Owned destination | Unowned destination | +|-------------------|-------------------|---------------------| +| Owned source | Copy or move the source to the destination. `owned_dest = copy (owned_src)` or `owned_dest = owned_src; owned_src = NULL`. | Pure assignment, assuming the unowned variable is not used after the owned one is freed. `unowned_dest = owned_src`. | +| Unowned source | Copy the source to the destination. `owned_dest = copy (unowned_src)`. | Pure assignment. `unowned_dest = unowned_src`. | + +### Function calls + +| Call from/to | Transfer full parameter | Transfer none parameter | +|--------------|-------------------------|-------------------------| +| Owned source | Copy or move the source for the parameter. `function_call (copy (owned_src))` or `function_call (owned_src); owned_src = NULL`. | Pure parameter passing. `function_call (owned_src)`. | +| Unowned source | Copy the source for the parameter. `function_call (copy (unowned_src))`. | Pure parameter passing. `function_call (unowned_src)`. | + +### Function returns + +| Return from/to | Transfer full return | Transfer none return | +|----------------|----------------------|----------------------| +| Owned source | Pure variable return. `return owned_src`. | Invalid. The source needs to be freed, so the return value would use freed memory — a use-after-free error. | +| Unowned source | Copy the source for the return. `return copy (unowned_src)`. | Pure variable passing. `return unowned_src`. | + +## Documentation + +Documenting the ownership transfer for each function parameter and return, and the ownership for each variable, is important. While they may be clear when writing the code, they are not clear a few months later; and may never be clear to users of an API. They should always be documented. + +The best way to document ownership transfer is to use the [`(transfer)`](https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations#Memory_and_lifecycle_management) annotation introduced by [gobject-introspection](https://wiki.gnome.org/Projects/GObjectIntrospection). Include this in the API documentation comment for each function parameter and return type. If a function is not public API, write a documentation comment for it anyway and include the `(transfer)` annotations. By doing so, the gobject-introspection tools can also read the annotations and use them to correctly introspect the API. + +Further [documentation on introspection is available](programming-guide-introspection.md). + +For example: +``` +/** + * g_value_take_string: + * @value: (transfer none): an initialised #GValue + * @str: (transfer full): string to set it to + * + * Function documentation goes here. + */ + +/** + * generate_string: + * @template: (transfer none): a template to follow when generating the string + * + * Function documentation goes here. + * + * Returns: (transfer full): a newly generated string + */ +``` + +Ownership for variables can be documented using inline comments. These are non-standard, and not read by any tools, but can form a convention if used consistently. +``` +GObject *some_owned_object = NULL; /* owned */ +GObject *some_unowned_object; /* unowned */ +``` + +The documentation for [container types](#container-types) is similarly only a convention; it includes the type of the contained elements too: +``` +GPtrArray/*<owned gchar*>*/ *some_unowned_string_array; /* unowned */ +GPtrArray/*<owned gchar*>*/ *some_owned_string_array = NULL; /* owned */ +GPtrArray/*<unowned GObject*>*/ *some_owned_object_array = NULL; /* owned */ +``` + +Note also that owned variables should always be initialised so that freeing them is more convenient. + +Also note that some types, e.g. basic C types like strings, can have the `const` modifier added if they are unowned, to take advantage of compiler warnings resulting from assigning those variables to owned variables (which must ''not'' use the `const` modifier). If so, the `/* unowned */` comment may be omitted. + +## Reference counting + +As well as conventional `malloc()`/`free()`-style types, GLib has various reference counted types — [`GObject`](https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html) being a prime example. + +The concepts of ownership and transfer apply just as well to reference counted types as they do to allocated types. A scope ''owns'' a reference counted type if it holds a strong reference to the instance (e.g. by calling [`g_object_ref()`](https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-ref)). An instance can be ‘copied’ by calling `g_object_ref()` again. Ownership can be freed with [`g_object_unref()`](https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-unref) — even though this may not actually finalise the instance, it frees the current scope’s ownership of that instance. + +See `g_clear_object()` for a convenient way of handling GObject references. + +There are other reference counted types in GLib, such as [`GHashTable`](https://developer.gnome.org/glib/stable/glib-Hash-Tables.html) (using [`g_hash_table_ref()`](https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-ref) and [`g_hash_table_unref()`](https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-unref)), or [`GVariant`](https://developer.gnome.org/glib/stable/glib-GVariant.html) ([`g_variant_ref()`](https://developer.gnome.org/glib/stable/glib-GVariant.html#g-variant-ref), [`g_variant_unref()`](https://developer.gnome.org/glib/stable/glib-GVariant.html#g-variant-unref)). Some types, like `GHashTable`, support both reference counting and explicit finalisation. Reference counting should always be used in preference, because it allows instances to be easily shared between multiple scopes (each holding their own reference) without having to allocate multiple copies of the instance. This saves memory. + +## Convenience functions + +GLib provides various convenience functions for memory management, especially for GObjects. Three will be covered here, but others exist — check the GLib API documentation for more. They typically follow similar naming schemas to these three (using ‘_full’ suffixes, or the verb ‘clear’ in the function name). + +### `g_clear_object()` + +[`g_clear_object()`](https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-clear-object) is a version of [`g_object_unref()`](https://developer.gnome.org/gobject/stable/gobject-The-Base-Object-Type.html#g-object-unref) which unrefs a GObject and then clears the pointer to it to `NULL`. + +This makes it easier to implement code that guarantees a GObject pointer is always either `NULL`, or has ownership of a GObject (but which never points to a GObject it no longer owns). + +By initialising all owned GObject pointers to `NULL`, freeing them at the end of the scope is as simple as calling `g_clear_object()` without any checks, as discussed in single-path cleanup: +``` +void +my_function (void) +{ + GObject *some_object = NULL; /* owned */ + + if (rand ()) + { + some_object = create_new_object (); + /* do something with the object */ + } + + g_clear_object (&some_object); +} +``` + +### `g_list_free_full()` + +[`g_list_free_full()`](https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-free-full) frees all the elements in a linked list, ''and all their data''. It is much more convenient than iterating through the list to free all the elements’ data, then calling [`g_list_free()`](https://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-free) to free the `GList` elements themselves. + +### `g_hash_table_new_full()` + +[`g_hash_table_new_full()`](https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new-full) is a newer version of [`g_hash_table_new()`](https://developer.gnome.org/glib/stable/glib-Hash-Tables.html#g-hash-table-new) which allows setting functions to destroy each key and value in the hash table when they are removed. These functions are then automatically called for all keys and values when the hash table is destroyed, or when an entry is removed using `g_hash_table_remove()`. + +Essentially, it simplifies memory management of keys and values to the question of whether they are present in the hash table. See container types for a discussion on ownership of elements within container types. + +A similar function exists for `GPtrArray`: [`g_ptr_array_new_with_free_func()`](https://developer.gnome.org/glib/stable/glib-Pointer-Arrays.html#g-ptr-array-new-with-free-func). + +## Container types + +When using container types, such as `GPtrArray` or `GList`, an additional level of ownership is introduced: as well as the ownership of the container instance, each element in the container is either owned or unowned too. By nesting containers, multiple levels of ownership must be tracked. Ownership of owned elements belongs to the container; ownership of the container belongs to the scope it’s in (which may be another container). + +A key principle for simplifying this is to ensure that all elements in a container have the same ownership: they are either all owned, or all unowned. This happens automatically if the normal convenience functions are used for types like `GPtrArray` and `GHashTable`. + +If elements in a container are ''owned'', adding them to the container is essentially an ownership transfer. For example, for an array of strings, if the elements are owned, the definition of `g_ptr_array_add()` is effectively: +``` +/** + * g_ptr_array_add: + * @array: a #GPtrArray + * @str: (transfer full): string to add + */ +void +g_ptr_array_add (GPtrArray *array, + gchar *str); +``` + +So, for example, constant (unowned) strings must be added to the array using `g_ptr_array_add (array, g_strdup ("constant string"))`. + +Whereas if the elements are unowned, the definition is effectively: +``` +/** + * g_ptr_array_add: + * @array: a #GPtrArray + * @str: (transfer none): string to add + */ +void +g_ptr_array_add (GPtrArray *array, + const gchar *str); +``` +and constant strings can be added without copying them: `g_ptr_array_add (array, "constant string")`. + +See the [documentation](#Documentation) section for examples of comments to add to variable definitions to annotate them with the element type and ownership. + +## Single-path cleanup + +A useful design pattern for more complex functions is to have a single control path which cleans up (frees) allocations and returns to the caller. This vastly simplifies tracking of allocations, as it’s no longer necessary to mentally work out which allocations have been freed on each code path — all code paths end at the same point, so perform all the frees then. The benefits of this approach rapidly become greater for larger functions with more owned local variables; it may not make sense to apply the pattern to smaller functions. + +This approach has two requirements: +- The function returns from a single point, and uses `goto` to reach that point from other paths. +- All owned variables are set to `NULL` when initialised or when ownership is transferred away from them. + +The example below is for a small function (for brevity), but should illustrate the principles for application of the pattern to larger functions: +``` +GObject * +some_function (GError **error) +{ + gchar *some_str = NULL; /* owned */ + GObject *temp_object = NULL; /* owned */ + const gchar *temp_str; + GObject *my_object = NULL; /* owned */ + GError *child_error = NULL; /* owned */ + + temp_object = generate_object (); + temp_str = "example string"; + + if (rand ()) + { + some_str = g_strconcat (temp_str, temp_str, NULL); + } + else + { + some_operation_which_might_fail (&child_error); + + if (child_error != NULL) + { + goto done; + } + + my_object = generate_wrapped_object (temp_object); + } + +done: + /* Here, @some_str is either NULL or a string to be freed, so can be passed to g_free() unconditionally. + * Similarly, @temp_object is either NULL or an object to be unreffed, so can be passed to g_clear_object() unconditionally. */ + g_free (some_str); + g_clear_object (&temp_object); + + /* The pattern can also be used to ensure that the function always returns either an error or a return value (but never both). */ + if (child_error != NULL) + { + g_propagate_error (error, child_error); + g_clear_object (&my_object); + } + + return my_object; +} +``` + +## Verification + +Memory leaks can be checked for in two ways: static analysis, and runtime leak checking. + +Static analysis with tools like [Coverity](https://scan.coverity.com/) or [Tartan](http://people.collabora.com/~pwith/tartan/) can catch some leaks, but require knowledge of the ownership transfer of every function called in the code. Domain-specific static analysers like Tartan (which knows about GLib memory allocation and transfer) can perform better here, but Tartan is quite a young project and still misses things (a low true positive rate). It is recommended that code be put through a static analyser, but the primary tool for detecting leaks should be runtime leak checking. + +Runtime leak checking is done using [Valgrind](http://valgrind.org/), using its [memcheck](http://valgrind.org/docs/manual/mc-manual.html) tool. Any leak it detects as ‘definitely losing memory’ should be fixed. Many of the leaks which ‘potentially’ lose memory are not real leaks, and should be added to the suppression file. + +See the [tooling guide](programming-guide-tooling.md) for more information on using Valgrind. + +## External links + +* [An article on ownership transfer](https://tecnocode.co.uk/2013/09/03/const-gchar-vs-gchar-and-other-memory-management-stories/) diff --git a/content/developer/programming-guide-processes.md b/content/developer/programming-guide-processes.md new file mode 100644 index 0000000000000000000000000000000000000000..d06389c596449d936dd91e38d4e015f49be1ed54 --- /dev/null +++ b/content/developer/programming-guide-processes.md @@ -0,0 +1,62 @@ +--- +short-description: "Manage your processes and subprocesses" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Processes + +There are various things which affect an entire application process. They are not all related, so are covered in separate subsections; some apply to all applications, others to specific functionality. + +## Summary + +* Use libraries instead of [subprocesses](#subprocesses) where possible. +* Use closed-loop subprocess management to keep track of when [subprocesses](#subprocesses) exit. +* Do ''not'' use `sigaction()`: [use `g_unix_signal_add()`](#unix-signals) instead. +* Do ''not'' use `sleep()`: [use `g_timeout_add_seconds()`](#sleeping) instead. +* Do ''not'' use `system()`: [use libraries or single subprocesses](#shell-commands) instead. +* [Use `GApplication` and `GOptionContext`](#command-line-parsing) to do command line parsing. + +## Subprocesses + +Launching subprocesses is sometimes necessary to perform specific tasks, though where possible it is generally better to link against and use an appropriate library to perform the same task, as it eliminates a lot of potential failure points, simplifies passing data around (as passing data to subprocesses involves pipes, and is complex), and generally allows for greater interaction between the parent process and the task. + +Subprocesses should not be used to implement functionality which could be implemented by D-Bus service daemons. + +When using subprocesses, closed-loop management should be used, by monitoring the child process’ PID after sending it kill signals, and waiting until the child process terminates before proceeding with further processing. The alternative, open-loop management, sends signals and never checks to see if the child responded to them, which is more fragile. + +To do this, use [`g_spawn_async()`](https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html) to spawn child processes, and [`g_child_watch_add()`](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html) to set up a callback to be invoked when the child exits. + +## UNIX signals + +The standard UNIX function for setting up signal handlers, [`sigaction()`](http://man7.org/linux/man-pages/man2/sigaction.2.html), ''must not'' be used in GLib programs, as its callback must be re-entrancy safe, and no GLib code is re-entrancy safe. Instead, [`g_unix_signal_add()`](https://developer.gnome.org/glib/stable/glib-UNIX-specific-utilities-and-integration.html#g-unix-signal-add) should be used, which doesn’t require its callback to be re-entrancy safe. + +## Sleeping + +The [`sleep()`](http://pubs.opengroup.org/onlinepubs/009695399/functions/sleep.html) function ''must not'' be used in GLib code, as it blocks the current thread. Instead, [`g_timeout_add_seconds()`](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add-seconds) or [`g_timeout_add()`](https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add) should be used to schedule a callback to be invoked after a period of time; in the mean time, events can continue being processed by the main context. + +## Shell commands + +The [`system()`](http://linux.die.net/man/3/system) function ''must not'' be used. It is extremely prone to [shell injection vulnerabilities](http://en.wikipedia.org/wiki/Code_injection#Shell_injection), and any functionality which can be implemented using it can be implemented using libraries directly or, if that is not possible, spawning individual [subprocesses](#subprocesses). + +For example, instead of calling `system (g_strdup_printf ("mv %s %s", file_path1, file_path2))`, use [`g_file_move()`](https://developer.gnome.org/gio/stable/GFile.html#g-file-move). In this situation, using `system()` exposes a shell injection vulnerability, and will not work with paths containing spaces in any case. + +## Command line parsing + +Command line parsing should be implemented using [`GApplication`](https://developer.gnome.org/gio/stable/GApplication.html) and [`GOptionContext`](https://developer.gnome.org/glib/stable/glib-Commandline-option-parser.html), rather than being implemented manually or using another library (such as [popt](http://directory.fsf.org/wiki/Popt)). + +By using `GOptionContext`, command line parsing follows the standard format used by most Linux applications. It gives automatic support for `--help` output, and short and long option parsing. + +An example of using `GApplication` together with `GOptionContext` is [here](https://git.gnome.org/browse/glib/tree/gio/tests/gapplication-example-cmdline3.c). + +## External links + +* [On shell injection vulnerabilities](http://en.wikipedia.org/wiki/Code_injection#Shell_injection Article) diff --git a/content/developer/programming-guide-pstore.md b/content/developer/programming-guide-pstore.md new file mode 100644 index 0000000000000000000000000000000000000000..ec12ff06924c26abdee2f78401f6dbd0b362610b --- /dev/null +++ b/content/developer/programming-guide-pstore.md @@ -0,0 +1,225 @@ +--- +short-description: "Persistent storage: How to use PStore" + +authors: + - name: Frédéric Danis + email: frederic.danis@collabora.com + years: [2019] + +license: CC-BY-SAv4.0 +... + +# PStore + +## Design + +Linux PStore and Ramoops modules allow to use memory to pass data from the dying breath of a crashing kernel to its successor. This can be read from Linux after restart, or for hardware using U-Boot directly from the U-Boot command line. + +### PStore +[PStore](https://www.kernel.org/doc/Documentation/ABI/testing/pstore) is a generic interface to platform dependent persistent storage. + +Platforms that provide a mechanism to preserve some data across system reboots can register with this driver to provide a generic interface to show records captured in the dying moments. In the case of a panic the last part of the console log is captured, but other interesting data can also be saved. + +Captured records can be found under `/sys/fs/pstore` directory. +Different users of this interface will result in different filename prefixes. + +Once the information in a file has been read, removing the file will signal to the underlying persistent storage device that it can reclaim the space for later re-use. +``` +$ rm /sys/fs/pstore/dmesg-ramoops-0 +``` + +The expectation is that all files in `/sys/fs/pstore/` will be saved elsewhere and erased from persistent store soon after boot to free up space ready for the next catastrophe. + +Pstore only supports one backend at a time. If multiple backends are available, the preferred backend may be set by passing the `pstore.backend=` argument to the kernel at boot time. + +### Ramoops +Currently, only [Ramoops](https://www.kernel.org/doc/html/latest/admin-guide/ramoops.html) PStore backend is supported as it is platform independant. + +Ramoops is an oops/panic logger that writes its logs to RAM before the system crashes. It works by logging oopses and panics in a circular buffer. Ramoops needs a system with persistent RAM so that the content of that area can survive after a restart. + +Ramoops uses a predefined memory area to store the dump. The start and size and type of the memory area are set using three variables: + +- `mem_address` for the start +- `mem_size` for the size. The memory size will be rounded down to a power of two. +- `mem_type` to specifiy if the memory type (default is `pgprot_writecombine`). + +Typically the default value of `mem_type=0` should be used as that sets the pstore mapping to `pgprot_writecombine`. Setting `mem_type=1` attempts to use `pgprot_noncached`, which only works on some platforms. This is because pstore depends on atomic operations. At least on ARM, `pgprot_noncached` causes the memory to be mapped strongly ordered, and atomic operations on strongly ordered memory are implementation defined, and won’t work on many ARMs such as omaps. + +The memory area is divided into `record_size` chunks (also rounded down to power of two) and each oops/panic writes a `record_size` chunk of information. + +Dumping both oopses and panics can be done by setting 1 in the `dump_oops` variable while setting 0 in that variable dumps only the panics. + +The module uses a counter to record multiple dumps but the counter gets reset on restart (i.e. new dumps after the restart will overwrite old ones). + +Ramoops also supports software ECC protection of persistent memory regions. This might be useful when a hardware reset was used to bring the machine back to life (i.e. a watchdog triggered). In such cases, RAM may be somewhat corrupt, but usually it is restorable. + +## Set-up + +### Kernel set-up + +The following entries should be added to kernel config file (e.g. debian/config/armhf/config) to build _pstore_ support with _ramoops_ backend: +``` +CONFIG_PSTORE=y +# CONFIG_PSTORE_DEFLATE_COMPRESS is not set +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_RAM=y +``` + +_ramoops_ backend supports the following parameters: + +| name | description | Default | +| -- | -- | -- | +| record_size | size of each dump done on oops/panic | 4K | +| console_size | size of kernel console log | 4K | +| ftrace_size | size of ftrace log | 4K | +| pmsg_size | size of user space message log | 4K | +| mem_address | start of reserved RAM used to store oops/panic logs | | +| mem_size | size of reserved RAM used to store oops/panic logs | | +| mem_type | set to 1 to try to use unbuffered memory | 0 | +| dump_oops | set to 1 to dump oopses, 0 to only dump panics | 1 | +| ecc | if non-zero, the option enables ECC support and specifies ECC buffer size in bytes (1 is a special value, means 16 bytes ECC) | 0 | + +**/!\** Mind not to set the `mem_address` value in the range dedicated to the boot loader, in order to avoid overwriting the logs during reboot. + +**/!\** ``mem_size`` should be a power of 2 and larger than the sum of all records sizes. Records sizes should be a power of 2. + +The dump space for oops/panic records is defined as the rest of ``mem_size`` minus ``console``, ``ftrace`` and ``pmsg`` areas. This area is divided into ``record_size`` chunks and each oops/panic writes a ``record_size`` chunk of +information. + +For example, to reserve 64K starting at 0x30000000, with 6 oops/panic dumps and 1 console log of 8K, plus 1 ftrace and 1 pmsg logs of 4K, the following kernel parameters need to be added, e.g. to /etc/kernel/cmdline and run `sudo u-boot-update`: +``` +ramoops.mem_address=0x30000000 ramoops.mem_size=0x100000 ramoops.record_size=0x2000 ramoops.console_size=0x2000 memmap=0x100000$0x30000000 +``` + +### U-Boot set-up + +The following entry should be added to U-Boot config file to build _pstore_ command support: +``` +CONFIG_CMD_PSTORE=y +``` + +The default configuration can be set in U-Boot configuration file, or at run-time using "pstore set" command. + +Configuration parameters are: + +| Name | Default | +| -- | -- | +| CMD_PSTORE_ADDR | 0x0 | +| CMD_PSTORE_SIZE | 0x0 | +| CMD_PSTORE_RECORD_SIZE | 0x1000 | +| CMD_PSTORE_CONSOLE_SIZE | 0x1000 | +| CMD_PSTORE_FTRACE_SIZE | 0x1000 | +| CMD_PSTORE_PMSG_SIZE | 0x1000 | +| CMD_PSTORE_ECC_SIZE | 0 | + +**/!\** Parameters should be the same as the ones used by kernel. Records sizes should be a power of 2. + +For example, to be able to display or save dumps generated by kernel parameters set in previous chapter, PStore module should be: +``` +CMD_PSTORE_ADDR=0x30000000 +CMD_PSTORE_SIZE=0x100000 +CMD_PSTORE_RECORD_SIZE=0x2000 +CMD_PSTORE_CONSOLE_SIZE=0x2000 +CMD_PSTORE_FTRACE_SIZE=0x1000 +CMD_PSTORE_PMSG_SIZE=0x1000 +CMD_PSTORE_ECC_SIZE=0 +``` + +## Usage + +### Generate kernel crash + +For test purpose, you can generate a kernel crash by setting reboot timeout to 10 seconds and trigger a panic: +``` +$ sudo sh -c "echo 1 > /proc/sys/kernel/sysrq" +$ sudo sh -c "echo 10 > /proc/sys/kernel/panic" +$ sudo sh -c "echo c > /proc/sysrq-trigger" +``` + +### Retrieve logs in Linux + +After reboot, logs ca be found at /sys/fs/pstore: +``` +$ sudo ls -l /sys/fs/pstore +total 0 +-r--r--r-- 1 root root 8180 2019-11-15 11:58 console-ramoops-0 +-r--r--r-- 1 root root 8136 2019-11-15 11:51 dmesg-ramoops-0 +-r--r--r-- 1 root root 7856 2019-11-15 11:51 dmesg-ramoops-1 +``` + +### Retrieve logs in U-Boot + +In U-Boot, logs can be displayed or saved using _pstore_ command. +``` +=> help pstore +pstore - Manage Linux Persistent Storage + +Usage: +pstore set <addr> <len> [record-size] [console-size] [ftrace-size] [pmsg_size] [ecc-size] +- Set pstore reserved memory info, starting at 'addr' for 'len' bytes. + Default length for records is 4K. + 'record-size' is the size of one panic or oops record ('dump' type). + 'console-size' is the size of the kernel logs record. + 'ftrace-size' is the size of the ftrace record(s), this can be a single + record or divided in parts based on number of CPUs. + 'pmsg-size' is the size of the user space logs record. + 'ecc-size' enables/disables ECC support and specifies ECC buffer size in + bytes (0 disables it, 1 is a special value, means 16 bytes ECC). +pstore display [record-type] [nb] +- Display existing records in pstore reserved memory. A 'record-type' can + be given to only display records of this kind. 'record-type' can be one + of 'dump', 'console', 'ftrace' or 'user'. For 'dump' and 'ftrace' types, + a 'nb' can be given to only display one record. +pstore save <interface> <dev[:part]> <directory-path> +- Save existing records in pstore reserved memory under 'directory path' + to partition 'part' on device type 'interface' instance 'dev'. + Filenames are automatically generated, depending on record type, like + in /sys/fs/pstore under Linux. + The 'directory-path' should already exist. +``` + +First of all, unless PStore parameters as been set during U-Boot configuration and match kernel _ramoops_ parameters, it needs to be set using ```pstore set```, e.g.: +``` +=> pstore set 0x30000000 0x100000 0x2000 0x2000 +``` + +Then all available dumps can be displayed using: +``` +=> pstore display +**** Dump +Oops#1 Part1 +<6>[ 17.315503] imx-media: subdev ipu2_ic_prpvf bound +<6>[ 17.324302] ipu2_csi0: Registered ipu2_csi0 capture as /dev/video6 +… +<0>[ 105.641914] Code: e5834000 f57ff04e ebed244d e3a03000 (e5c34000) +<4>[ 105.651526] ---[ end trace 2ebf2b6dc03e53a0 ]--- +**** Dump +Panic#2 Part1 +<4>[ 105.332293] CPU: 3 PID: 460 Comm: ash Tainted: G C 4.19.0-6-armmp #1 Debian 4.19.67-2co5 +<4>[ 105.341796] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree) +… +<4>[ 106.205233] [<c03845f8>] (cpu_startup_entry) from [<c031296c>] (secondary_start_kernel+0x160/0x188) +<4>[ 106.217624] [<c031296c>] (secondary_start_kernel) from [<10302c6c>] (0x10302c6c) +**** Console +er m25p80 snd spi_nor soundcore +[ 105.284255] pwm_imx imx_media_common(C) v4l2_fwnode imx_ldb dw_hdmi_imx etnaviv dw_hdmi imxdrm gpu_sched drm_kms_helper imx_ipu_v3 panel_simple cec drm fb_sys_fops evdev imx6q_cpufreq pwm_bl ip_tables x_tables autofs4 btrfs xor zstd_decompress zstd_compress xxhash zlib_deflate raid6_pq libcrc32c crc32c_generic cls_cgroup ahci_imx libahci_platform libahci ci_hdrc_imx ci_hdrc ulpi libata ehci_hcd udc_core scsi_mod sdhci_esdhc_imx sdhci_pltfm sdhci usbcore i2c_imx usbmisc_imx phy_mxs_usb anatop_regulator spi_imx dwc3_haps clk_pwm micrel +[ 105.332293] CPU: 3 PID: 460 Comm: ash Tainted: G C 4.19.0-6-armmp #1 Debian 4.19.67-2co5 +… +[ 106.217624] [<c031296c>] (secondary_start_kernel) from [<10302c6c>] (0x10302c6c) +[ 106.230722] Rebooting in 10 seconds.. +``` +Or saved to an existing directory in an Ext2 or Ext4 partition using `pstore save`, e.g. on root directory of 1st partition of the 2nd MMC: +``` +=> pstore save mmc 1:1 / +File System is consistent +CACHE: Misaligned operation at range [4f867098, 4f869098] +update journal finished +8136 bytes written in 749 ms (9.8 KiB/s) +File System is consistent +CACHE: Misaligned operation at range [4f867098, 4f869098] +update journal finished +7856 bytes written in 724 ms (9.8 KiB/s) +File System is consistent +update journal finished +8180 bytes written in 719 ms (10.7 KiB/s) +``` diff --git a/content/developer/programming-guide-sqlite.md b/content/developer/programming-guide-sqlite.md new file mode 100644 index 0000000000000000000000000000000000000000..af73901473954cc00947ca6384ccdee877a460c1 --- /dev/null +++ b/content/developer/programming-guide-sqlite.md @@ -0,0 +1,78 @@ +--- +short-description: "Use SQLite for single user or low throughput databases" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Using databases + +SQLite is a lightweight database library suitable for single user or low throughput databases. It is used for storing some user data in Apertis. + +## Summary + +* [Use SQLite for appropriate use cases](#when-to-use-sqlite): not configuration data (use [GSettings](programming-guide-gsettings.md)). +* Consider your [vacuuming policy](#when-to-use-sqlite) before committing to using SQLite. +* [Avoid SQL injection vulnerabilities](#sql-injection) by using prepared statements. + +## When to use SQLite + +Even though it is lightweight for a database, SQLite is a fairly heavyweight solution to some problems. It should ''not'' be used for configuration data: [GSettings](programming-guide-gsettings.md) should be used for that. Similarly, it is not suitable for more fully featured database systems which require support for concurrent access or advanced SQL support. It fills the middle space, and is best suited to situations where structured user data needs to be stored and fast indexing is required on various columns in the data, as that is hard to implement manually. + +Before deciding to use SQLite, you must consider a vacuuming policy for the database, and whether your use case will interact well with SQLite’s vacuuming system. Vacuuming is effectively SQLite’s term for defragmenting the database — if a database is not vacuumed appropriately, performance will degrade and the database size will increase indefinitely. Read [this article](http://blogs.gnome.org/jnelson/2015/01/06/sqlite-vacuum-and-auto_vacuum/) on vacuuming for more information; please consider it before choosing to use SQLite. + +## Using SQLite + +Providing an SQLite tutorial is beyond the scope of this document, but [a quickstart guide is available](https://www.sqlite.org/quickstart.html). An [introduction to the API](https://www.sqlite.org/cintro.html) is available too, as well as the [full API reference](https://www.sqlite.org/c3ref/intro.html). + +## SQL injection + +When using SQLite, queries ***must*** be constructed using SQLite’s [prepared statement](https://www.sqlite.org/c3ref/stmt.html) and [value binding](https://www.sqlite.org/c3ref/bind_blob.html) API, rather than by constructing SQL strings then passing them to SQLite to parse. Constructing strings makes [SQL injection](http://en.wikipedia.org/wiki/SQL_injection) vulnerabilities very likely, which can give attackers access to arbitrary user data from the database. + +Here is an example of using the prepared statement API: +```int result; +const gchar *sql; +sqlite3_stmt *stmt = NULL; + +/* Build the query. To prevent SQL injection, this string must be constant, and not constructed dynamically. */ +sql = "DELETE FROM table_name WHERE id = ?1;"; +result = sqlite3_prepare_v2 (db_handle, sql, -1, &stmt, NULL); + +if (result != SQLITE_OK) + { + abort (); + } + +/* Bind parameters to it. */ +if (sqlite3_bind_text (stmt, 1, id_string, -1, NULL) != SQLITE_OK) + { + sqlite3_finalize (stmt); + abort (); + } + +/* Run it. */ +while ((result = sqlite3_step (stmt)) == SQLITE_BUSY); + +sqlite3_finalize (stmt); + +if (retval != SQLITE_DONE) + { + abort (); + } +``` + +## External links + +* [SQLite home page](http://sqlite.org/) +* [Article on vacuuming SQLite databases](http://blogs.gnome.org/jnelson/2015/01/06/sqlite-vacuum-and-auto_vacuum/) +* [SQLite quickstart](https://www.sqlite.org/quickstart.html) +* [SQLite C API introduction](https://www.sqlite.org/cintro.html) +* [SQLite C API reference](https://www.sqlite.org/c3ref/intro.html) + diff --git a/content/developer/programming-guide-tooling.md b/content/developer/programming-guide-tooling.md new file mode 100644 index 0000000000000000000000000000000000000000..efc06a371dbc532c30941f67efbf23b5696e9879 --- /dev/null +++ b/content/developer/programming-guide-tooling.md @@ -0,0 +1,236 @@ +--- +short-description: "Learn about available development tools and how you can use them to write a better app" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Tooling + +Development tools are much more than just a text editor and a compiler. Correct use of the right tools can drastically ease debugging and tracking down of complex problems with memory allocation and system calls, amongst other things. Some of the most commonly used tools are described below; other tools exist for more specialised use cases, and should be used when appropriate. + +## Summary + +* Compile frequently with a [second compiler](#gcc-and-clang). +* [Enable a large selection of compiler warnings](#gcc-and-clang) and make them fatal. +* [Use GDB](#gdb) to debug and step through code. +* [Use Valgrind](#valgrind) to analyse memory usage, memory errors, cache and CPU performance and threading errors. +* [Use gcov and lcov](#gcov-and-lcov) to analyse unit test coverage. +* [Submit to Coverity](#coverity) as a cronjob and eliminate static analysis errors as they appear. +* [Use Clang static analyser](#clang-static-analyser) and Tartan regularly to eliminate statically analysable errors locally. + +## GCC and Clang + +GCC is the standard C compiler for Linux. An alternative exists in the form of Clang, with comparable functionality. Choose one (probably GCC) to use as a main compiler, but occasionally use the other to compile the code, as the two detect slightly different sets of errors and warnings in code. Clang also comes with a static analyser tool which can be used to detect errors in code without compiling or running it; see [Clang static analyser](#clang-static-analyser). + +Both compilers should be used with as many warning flags enabled as possible. Although compiler warnings do occasionally provide false positives, most warnings legitimately point to problems in the code, and hence should be fixed rather than ignored. A development policy of enabling all warning flags and also specifying the `-Werror` flag (which makes all warnings fatal to compilation) promotes fixing warnings as soon as they are introduced. This helps code quality. The alternative of ignoring warnings leads to long debugging sessions to track down bugs caused by issues which would have been flagged up by the warnings. Similarly, ignoring warnings until the end of the development cycle, then spending a block of time enabling and fixing them all wastes time. + +Both GCC and Clang support a wide range of compiler flags, only some of which are related to modern, multi-purpose code (e.g. others are outdated, or architecture-specific). Finding a reasonable set of flags to enable can be tricky, and hence the [`AX_COMPILER_FLAGS`](http://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html) macro exists. + +`AX_COMPILER_FLAGS` enables a consistent set of compiler warnings, and also tests that the compiler supports each flag before enabling it. This accounts for differences in the set of flags supported by GCC and Clang. To use it, add `AX_COMPILER_FLAGS` to `configure.ac`. If you are using in-tree copies of autoconf-archive macros, copy [`ax_compiler_flags.m4`](http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_compiler_flags.m4) to the `m4/` directory of your project. Note that it depends on the following autoconf-archive macros which cannot be copied in-tree due to being GPL-licenced. They must remain in autoconf-archive, with that as a built time dependency of the project: +* `ax_append_compile_flags.m4` +* `ax_append_flag.m4` +* `ax_check_compile_flag.m4` +* `ax_require_defined.m4` + +`AX_COMPILER_FLAGS` supports disabling `-Werror` for release builds, so that releases may always be built against newer compilers which have introduced more warnings. Set its third parameter to ‘yes’ for release builds (and only release builds) to enable this functionality. Development and CI builds should always have `-Werror` enabled. + +An easy way of determining whether this is a release version of a project is to use `AX_IS_RELEASE([micro-version])`. If this macro is used before `AX_COMPILER_FLAGS`, the third parameter to `AX_COMPILER_FLAGS` should not be passed — it will be picked up automatically from `AX_IS_RELEASE`. + +## GDB + +GDB is the standard debugger for C on Linux. Its most common uses are for debugging crashes, and for stepping through code as it executes. A full tutorial for using GDB is given [here](https://sourceware.org/gdb/current/onlinedocs/gdb/). + +To run GDB on a program from within the source tree, use: + libtool exec gdb --args ./program-name --some --arguments --here + +This is necessary due to libtool wrapping each compiled binary in the source tree in a shell script which sets up some libtool variables. It is not necessary for debugging installed executables. + +GDB has many advanced features which can be combined to essentially create small debugging scripts, triggered by different breakpoints in code. Sometimes this is a useful approach (e.g. for [reference count debugging](https://tecnocode.co.uk/2010/07/12/reference-count-debugging-with-gdb/)), but sometimes simply using `g_debug()` to output a debug message is simpler. + +## Valgrind + +Valgrind is a suite of tools for instrumenting and profiling programs. Its most famous tool is [memcheck](#memcheck), but it has several other powerful and useful tools too. They are covered separately in the sections below. + +A useful way of running Valgrind is to run a program’s unit test suite under Valgrind, setting Valgrind to return a status code indicating the number of errors it encountered. When run as part of `make check`, this will cause the checks to succeed if Valgrind finds no problems, and fail otherwise. However, running `make check` under Valgrind is not trivial to do on the command line. A macro, [`AX_VALGRIND_CHECK`](http://www.gnu.org/software/autoconf-archive/ax_valgrind_check.html) can be used which adds a new `make check-valgrind` target to automate this. To use it, copy [`ax_valgrind_check.m4`](http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_valgrind_check.m4) to the `m4/` directory of a project, add `AX_VALGRIND_CHECK` to `configure.ac` and add `@VALGRIND_CHECK_RULES` to the top-level `Makefile.am`. + +When `make check-valgrind` is run, it will save its results in `test-suite-*.log`, one log file per tool. + +Valgrind has a way to suppress false positives, by using [suppression files](http://valgrind.org/docs/manual/manual-core.html#manual-core.suppress). These list patterns which may match error stack traces. If a stack trace from an error matches part of a suppression entry, it is not reported. For various reasons, GLib currently causes a number of false positives in [memcheck](#memcheck) and [helgrind and drd](#helgrind-and-drd) which must be suppressed by default for Valgrind to be useful. For this reason, every project should use a standard GLib suppression file as well as a project specific one. + +Suppression files are supported by the `AX_VALGRIND_CHECK` macro: +``` +@VALGRIND_CHECK_RULES@ +VALGRIND_SUPPRESSIONS_FILES = my-project.supp glib.supp +EXTRA_DIST = $(VALGRIND_SUPPRESSIONS_FILES) +``` + +### memcheck + +memcheck is a memory usage and allocation analyser. It detects problems with memory accesses and modifications of the heap (allocations and frees). It is a highly robust and mature tool, and its output can be entirely trusted. If it says there is ‘definitely’ a memory leak, there is definitely a memory leak which should be fixed. If it says there is ‘potentially’ a memory leak, there may be a leak to be fixed, or it may be memory allocated at initialisation time and used throughout the life of the program without needing to be freed. + +A full tutorial on using memcheck is [here](http://valgrind.org/docs/manual/mc-manual.html). + +### cachegrind and KCacheGrind + +cachegrind is a cache performance profiler which can also measure instruction execution, and hence is very useful for profiling general performance of a program. [KCacheGrind](http://kcachegrind.sourceforge.net/html/Home.html) is a useful UI for it which allows visualisation and exploration of the profiling data, and the two tools should rarely be used separately. + +cachegrind works by simulating the processor's memory hierarchy, so there are situations where it is [not perfectly accurate](http://valgrind.org/docs/manual/cg-manual.html#cg-manual.annopts.accuracy). However, its results are always representative enough to be very useful in debugging performance hotspots. + +A full tutorial on using cachegrind is [here](http://valgrind.org/docs/manual/cg-manual.html). + +### helgrind and drd + +helgrind and drd are threading error detectors, checking for race conditions in memory accesses, and abuses of the [POSIX pthreads API](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/pthread.h.html). They are similar tools, but are implemented using different techniques, so both should be used. + +The kinds of errors detected by helgrind and drd are: data accessed from multiple threads without consistent locking, changes in lock acquisition order, freeing a mutex while it is locked, locking a locked mutex, unlocking an unlocked mutex, and several other errors. Each error, when detected, is printed to the console in a little report, with a separate report giving the allocation or spawning details of the mutexes or threads involved so that their definitions can be found. + +helgrind and drd can produce more false positives than memcheck or cachegrind, so their output should be studied a little more carefully. However, threading problems are notoriously elusive even to experienced programmers, so helgrind and drd errors should not be dismissed lightly. + +Full tutorials on using helgrind and drd are [here](http://valgrind.org/docs/manual/hg-manual.html) and [here](http://valgrind.org/docs/manual/drd-manual.html). + +### sgcheck + +sgcheck is an array bounds checker, which detects accesses to arrays which have overstepped the length of the array. However, it is a very young tool, still marked as experimental, and hence may produce more false positives than other tools. + +As it is experimental, sgcheck must be run by passing `--tool=exp-sgcheck` to Valgrind, rather than `--tool=sgcheck`. + +A full tutorial on using sgcheck is [here](http://valgrind.org/docs/manual/sg-manual.html). + +## gcov and lcov + +[gcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html) is a profiling tool built into GCC, which instruments code by adding extra instructions at compile time. When the program is run, this code generates `.gcda` and `.gcno` profiling output files. These files can be analysed by the `lcov` tool, which generates visual reports of code coverage at runtime, highlighting lines of code in the project which are run more than others. + +A critical use for this code coverage data collection is when running the unit tests: if the amount of code covered (e.g. which particular lines were run) by the unit tests is known, it can be used to guide further expansion of the unit tests. By regularly checking the code coverage attained by the unit tests, and expanding them towards 100%, you can be sure that the entire project is being tested. Often it is the case that a unit test exercises most of the code, but not a particular control flow path, which then harbours residual bugs. + +lcov supports [branch coverage measurement](http://en.wikipedia.org/wiki/Code_coverage#Basic_coverage_criteria), so is not suitable for demonstrating coverage of safety critical code. It is perfectly suitable for non-safety critical code. + +As code coverage has to be enabled at both compile time and run time, a macro is provided to make things simpler. The [`AX_CODE_COVERAGE`](http://www.gnu.org/software/autoconf-archive/ax_code_coverage.html) macro adds a `make check-code-coverage` target to the build system, which runs the unit tests with code coverage enabled, and generates a report using `lcov`. + +To add `AX_CODE_COVERAGE` support to a project, add `AX_CODE_COVERAGE` to `configure.ac`. The macro itself cannot be copied to the `m4/` directory due to being GPL-licenced. Instead, the project must have a build time dependency on autoconf-archive (version 2014-10-15 or later). + +Documentation on using gcov and lcov is [here](http://ltp.sourceforge.net/coverage/lcov.php). + +## Coverity + +[Coverity](http://scan.coverity.com/) is one of the most popular and biggest commercial static analyser tools available. However, it is available to use free for Open Source projects, and any project is encouraged to [sign up](https://scan.coverity.com/users/sign_up). [Analysis is performed](https://scan.coverity.com/faq#how-get-project-included-in-scan) by running some analysis tools locally, then uploading the source code and results as a tarball to Coverity’s site. The results are then visible online to members of the project, as annotations on the project’s source code (similarly to how lcov presents its results). + +As Coverity cannot be run entirely locally, it cannot be integrated properly into the build system. However, scripts do exist to automatically scan a project and upload the tarball to Coverity regularly. The recommended approach is to run these scripts regularly on a server (i.e. as a cronjob), using a clean checkout of the project’s git repository. Coverity automatically e-mails project members about new static analysis problems it finds, so the same approch as for [compiler warnings](#gcc-and-clang) can be taken: eliminate all the static analysis warnings, then eliminate new ones as they are detected. + +Coverity is good, but it is not perfect, and it does produce a number of false positives. These should be marked as ignored in the online interface. + +## Clang static analyser + +One tool which can be used to perform static analysis locally is the [Clang static analyser](http://clang-analyzer.llvm.org/), which is a tool co-developed with the [Clang compiler](#gcc-and-clang). It detects a variety of problems in C code which compilers cannot, and which would otherwise only be detectable at run time (i.e. using unit tests). + +Clang produces some false positives, and there is no easy way to ignore them. The recommended thing to do is to [file a bug report against the static analyser](http://clang-analyzer.llvm.org/faq.html#suppress_issue), so that the false positive can be fixed in future. + +A full tutorial on using Clang is [here](http://clang-analyzer.llvm.org/scan-build.html). + +### Tartan + +However, for all the power of the Clang static analyser, it cannot detect problems with specific libraries, such as GLib. This is a problem if (as recommended) a project uses GLib exclusively, and rarely uses POSIX APIs (which Clang does understand). There is a plugin available for the Clang static analyser, called [Tartan](http://people.collabora.com/~pwith/tartan/), which extends it to support checks against some of the common GLib APIs. + +Tartan is still young software, and will produce false positives and may crash when run on some code. However, it can find legitimate bugs quite quickly, and is worth running over a code base frequently to detect new errors in the use of GLib in the code. Please [report any problems with Tartan](http://people.collabora.com/~pwith/tartan/#troubleshooting). + +A full tutorial on enabling Tartan for use with the Clang static analyser is [here](http://people.collabora.com/~pwith/tartan/#usage-standalone). If set up correctly, the output from Tartan will be mixed together with the normal static analyser output. + +## Development containers using `devroot-enter` + +Developers who need to build packages for foreign architectures like ARM can use the Apertis devroots and the `devroot-enter` tool to emulate native compilation from the Apertis SDK using containers and QEMU. Devroot is file system hierarchy based on a build of the Apertis system. Devroot contains the same binaries as the target image, but with additional tools pre-installed, such as native compilers, debuggers and other development tools. + +By default, the Apertis SDK ships with a pre-installed `armhf` devroot, but different devroots can be downloaded and used. + +To enable this workflow, Apertis SDK provides `devroot-enter`, a wrapper for `systemd-nspawn` which sets up a namespace container in a devroot of user's choice. Using `devroot-enter` has an advantage over `chroot` of fully virtualising the file system hierarchy, as well as the process tree, the various IPC subsystems and the host and domain name. On the other hand, compared to full virtualisation using QEMU or VirtualBox, development containers do not provide any support for graphics, so they are better suitable for system-level development. + +The `devroot-enter` script accepts the following arguments: + + devroot-enter DEVROOT [OPTIONS...] [COMMAND [ARGS...]] + + * `DEVROOT` is a mandatory root directory of the devroot. This directory will be used as file system root for the container. + * `OPTIONS` can be any options `systemd-nspawn` normally accepts. Use this to configure the container to your taste. + * `COMMAND` is a command with optional arguments to run in the container; if none is specified, the default shell is run. + +`devroot-enter` will mount a temporary directory in the container’s `/tmp` shadowing any existing content in that directory. + +Since the binary architecture inside the devroot is different, `devroot-enter` unsets the `LD_PRELOAD` environment variable to prevent warnings from being displayed. + +Apertis SDK images ship a current devroot under `/opt/devroot`. For a container to be useful, we recommend you to bind mount your working directory with all necessary files into the container instead of copying files over: + + devroot-enter /opt/devroot --bind=/home/user/project + +For more information on options you can use, see the manual page for `systemd-nspawn` with the `man systemd-nspawn` command. + +Here’s an example session showing how to build `dlt-daemon` package using the devroot. It assumes the unpacked source tree is present in the user’s home directory, e.g. as the result of running `apt source dlt-daemon`. + + $ devroot-enter /opt/devroot/ --bind=/home/user/dlt-daemon-2.13.0 + Spawning container devroot on /opt/devroot. + Press ^] three times within 1s to kill container. + host's /etc/localtime is not a symlink, not updating container timezone. + user@devroot:/tmp$ cd /home/user/dlt-daemon-2.13.0 + user@devroot:~/dlt-daemon-2.13.0$ dpkg-buildpackage -b + dpkg-buildpackage: source package dlt-daemon + dpkg-buildpackage: source version 2.13.0-0co7 + dpkg-buildpackage: source distribution 17.12 + dpkg-buildpackage: source changed by Andrew Lee (æŽå¥ç§‹) <andrew.lee@collabora.co.uk> + dpkg-buildpackage: host architecture armhf + dpkg-source --before-build dlt-daemon-2.13.0 + fakeroot debian/rules clean + dh clean --buildsystem cmake --builddirectory=build + dh_testdir -O--buildsystem=cmake -O--builddirectory=build + dh_auto_clean -O--buildsystem=cmake -O--builddirectory=build + dh_clean -O--buildsystem=cmake -O--builddirectory=build + debian/rules build + dh build --buildsystem cmake --builddirectory=build + dh_testdir -O--buildsystem=cmake -O--builddirectory=build + dh_update_autotools_config -O--buildsystem=cmake -O--builddirectory=build + debian/rules override_dh_auto_configure + make[1]: Entering directory '/home/user/dlt-daemon-2.13.0' + dh_auto_configure -- -DWITH_SYSTEMD=ON -DWITH_SYSTEMD_JOURNAL=ON + cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_SYSCONFDIR=/etc -DCMAKE_INSTALL_LOCALSTATEDIR=/var -DWITH_SYSTEMD=ON -DWITH_SYSTEMD_JOURNAL=ON + -- The C compiler identification is GNU 5.4.0 + -- The CXX compiler identification is GNU 5.4.0 + -- Check for working C compiler: /usr/bin/arm-linux-gnueabihf-gcc + … + +### Installing devroots + +Sometimes, it may be necessary to install a devroot for an architecture or a version of Apertis different than that coming pre-installed with the SDK image. Since devroots are ospacks specially built each time during the build process, installing them can be done separately as described below. Apertis currently only builds armhf devroots, but this may change in future. + + wget https://images.apertis.org/daily/<release>/<timestamp>/<arch>/devroot/ospack_<release>-<arch>-devroot_<timestamp>.tar.gz + sudo mkdir -p /opt/directory-to-unpack-into + sudo tar -xvf ospack_<release>-<arch>-devroot_<timestamp>.tar.gz -C /opt/directory-to-unpack-into + +where: + `<release>` is the release version, e.g. `19.03` + `<timestamp>` is the version of the image, e.g. `20181206.0` + `<arch>` is the architecture, e.g. `armhf` + `/opt/directory-to-unpack-into` is the directory into which the devroot will be installed + +Similarly, for the release images, replace the `/daily/<release>/<timestamp>/` bit with `/release/<release>/<version>/`, e.g. `/release/18.12/18.12.0/`. + +## External links + +* [GCC](https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/) +* [Clang](http://clang.llvm.org/docs/UsersManual.html) +* [GDB](https://sourceware.org/gdb/current/onlinedocs/gdb/) +* [Valgrind](http://valgrind.org/docs/manual/) +** [memcheck](http://valgrind.org/docs/manual/mc-manual.html) +** [cachegrind](http://valgrind.org/docs/manual/cg-manual.html) +** [helgrind](http://valgrind.org/docs/manual/hg-manual.html) +** [drd](http://valgrind.org/docs/manual/drd-manual.html) +** [sgcheck](http://valgrind.org/docs/manual/sg-manual.html) +* [KCacheGrind](http://kcachegrind.sourceforge.net/html/Home.html) +* [gcov/lcov](https://gcc.gnu.org/onlinedocs/gcc/Gcov.html) +* [Coverity](https://scan.coverity.com/) +* [Clang SA](http://clang-analyzer.llvm.org/) +* [Tartan](http://people.collabora.com/~pwith/tartan/) +* [systemd-nspawn](https://www.freedesktop.org/software/systemd/man/systemd-nspawn.html) + diff --git a/content/developer/programming-guide-tracker.md b/content/developer/programming-guide-tracker.md new file mode 100644 index 0000000000000000000000000000000000000000..5d97c03987ccb9ff059264edb5436b6c9f7f925f --- /dev/null +++ b/content/developer/programming-guide-tracker.md @@ -0,0 +1,42 @@ +--- +short-description: "Use Tracker to index file metadata and search storage devices" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Indexing and searching + +[Tracker](https://wiki.gnome.org/Projects/Tracker) is a desktop search engine, metadata indexing and storage service. It is the recommended way to search for user files and access metadata about them. A [full introduction to Tracker is here](https://wiki.gnome.org/Projects/Tracker/WhatIsTracker). + +## Summary + +* [Avoid SPARQL injection vulnerabilities](#sparql-injection) by using prepared statements. + +## Using Tracker + +Tracker is effectively a metadata store which applications can query using the [SPARQL query language](http://en.wikipedia.org/wiki/SPARQL). SPARQL is similar to SQL, so all the same considerations about [SQL injection](#sparql-injection) apply when using it. + +Describing how to use Tracker is beyond the scope of this document, however it has good documentation in its [getting started guide](https://wiki.gnome.org/Projects/Tracker/Documentation/GettingStarted) and [API documentation](https://wiki.gnome.org/Projects/Tracker/Documentation). + +## SPARQL injection + +When using Tracker, queries '''must''' be constructed using its prepared statements, otherwise arbitrary SPARQL could be provided by the user which would affect the query, potentially resulting in unauthorised user data disclosure. This would be an [SQL injection vulnerability](http://en.wikipedia.org/wiki/SQL_injection). + +To build a SPARQL query, use [`TrackerSparqlBuilder`](https://developer.gnome.org/libtracker-sparql/stable/TrackerSparqlBuilder.html), which prevents SPARQL injection vulnerabilities as long as its ‘raw’ APIs aren’t used. If its raw APIs are used, be very careful to escape all external input to the query using [`tracker_sparql_escape_string()`](https://developer.gnome.org/libtracker-sparql/stable/libtracker-sparql-Utilities.html#tracker-sparql-escape-string) before including it in the query. + +## External links + +* [Tracker home page](https://wiki.gnome.org/Projects/Tracker) +* [Introduction to Tracker](https://wiki.gnome.org/Projects/Tracker/WhatIsTracker) +* [SPARQL query language](http://en.wikipedia.org/wiki/SPARQL) +* [Tracker getting started guide](https://wiki.gnome.org/Projects/Tracker/Documentation/GettingStarted) +* [Tracker API documentation](https://wiki.gnome.org/Projects/Tracker/Documentation) + diff --git a/content/developer/programming-guide-unit-testing.md b/content/developer/programming-guide-unit-testing.md new file mode 100644 index 0000000000000000000000000000000000000000..1db5cdb3eca4ca80e90075c595abac4badc2200b --- /dev/null +++ b/content/developer/programming-guide-unit-testing.md @@ -0,0 +1,140 @@ +--- +short-description: "Test your app to ensure quality" + +authors: + - name: Ekaterina Gerasimova + email: kat@collabora.co.uk + years: [2016] + - name: Philip Withnall + email: philip@tecnocode.co.uk + years: [2015] + +license: CC-BY-SAv4.0 +... + +# Unit testing + +Unit testing should be the primary method of testing the bulk of code written, because a unit test can be written once and run many times — manual tests have to be planned once and then manually run each time. + +Development of unit tests starts with the architecture and API design of the code to be tested: code should be designed to be easily testable, or will potentially be very difficult to test. + +## Summary + +* [Write unit tests](#writing-unit-tests) to be as small as possible, but no smaller. +* Use code coverage tools to [write tests](#writing-unit-tests) to get high code coverage. +* Use [installed tests](#installed-tests) to test integration. +* Run all unit tests under Valgrind to [check for leaks](#leak-checking) and other problems. +* Use appropriate tools to [automatically generate unit tests](#test-generation) where possible. +* [Design code to be testable](#writing-testable-code) from the beginning. + +## Writing unit tests + +Unit tests should be written in conjunction with looking at [code coverage information gained from running the tests](programming-guide-tooling.md#gcov-and-lcov). This typically means writing an initial set of unit tests, running them to get coverage data, then reworking and expanding them to increase the code coverage levels. Coverage should be increased first by ensuring all functions are covered (at least in part), and then by ensuring all lines of code are covered. By covering functions first, API problems which will prevent effective testing can be found quickly. These typically manifest as internal functions which cannot easily be called from unit tests. Overall, coverage levels of over 90% should be aimed for; don’t just test cases covered by project requirements, test everything. + +Like git commits, each unit test should be ‘as small as possible, but no smaller’, testing a single specific API or behaviour. Each test case must be able to be run individually, without depending on state from other test cases. This is important to allow debugging of a single failing test, without having to step through all the other test code as well. It also means that a single test failure can easily be traced back to a specific API, rather than a generic ‘unit tests failed somewhere’ message. + +GLib has support for unit testing with its [GTest framework](https://developer.gnome.org/glib/stable/glib-Testing.html), allowing tests to be arranged in groups and hierarchies. This means that groups of related tests can be run together for enhanced debugging too, by running the test binary with the `-p` argument: +``` +./test-suite-name -p /path/to/test/group +``` + +## Installed tests + +All unit tests should be installed system-wide, following the [installed-tests standard](https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests). + +By installing the unit tests, continuous integration (CI) is made easier, since tests for one project can be re-run after changes to other projects in the CI environment, thus testing the interfaces between modules. That is useful for a highly-coupled set of projects like Apertis. + +To add support for installed-tests, add the following to `configure.ac`: +``` +# Installed tests + +AC_ARG_ENABLE([modular_tests], + AS_HELP_STRING([--disable-modular-tests], + [Disable build of test programs (default: no)]),, + [enable_modular_tests=yes]) +AC_ARG_ENABLE([installed_tests], + AS_HELP_STRING([--enable-installed-tests], + [Install test programs (default: no)]),, + [enable_installed_tests=no]) +AM_CONDITIONAL([BUILD_MODULAR_TESTS], + [test "$enable_modular_tests" = "yes" || + test "$enable_installed_tests" = "yes"]) +AM_CONDITIONAL([BUILDOPT_INSTALL_TESTS],[test "$enable_installed_tests" = "yes"]) +``` + +Then in `tests/Makefile.am`: +``` +insttestdir = $(libexecdir)/installed-tests/[project] + +all_test_programs = \ + test-program1 \ + test-program2 \ + test-program3 \ + $(NULL) +if BUILD_MODULAR_TESTS +TESTS = $(all_test_programs) +noinst_PROGRAMS = $(TESTS) +endif + +if BUILDOPT_INSTALL_TESTS +insttest_PROGRAMS = $(all_test_programs) + +testmetadir = $(datadir)/installed-tests/[project] +testmeta_DATA = $(all_test_programs:=.test) + +testdatadir = $(insttestdir) +testdata_DATA = $(test_files) + +testdata_SCRIPTS = $(test_script_files) +endif + +EXTRA_DIST = $(test_files) + +%.test: % Makefile + $(AM_V_GEN) (echo '[Test]' > $@.tmp; \ + echo 'Type=session' >> $@.tmp; \ + echo 'Exec=$(insttestdir)/$<' >> $@.tmp; \ + mv $@.tmp $@) +``` + +## Leak checking + +Once unit tests with high code coverage have been written, they can be run under various dynamic analysis tools, such as [Valgrind](programming-guide-tooling.md#valgrind) to check for leaks, threading errors, allocation problems, etc. across the entire code base. The higher the code coverage of the unit tests, the more confidence the Valgrind results can be treated with. See the [Tooling](programming-guide-tooling.md) page for more information, including build system integration instructions. + +Critically, this means that unit tests should not leak memory or other resources themselves, and similarly should not have any threading problems. Any such problems would effectively be false positives in the analysis of the actual project code. (False positives which need to be fixed by fixing the unit tests.) + +## Test generation + +Certain types of code are quite repetitive, and require a lot of unit tests to gain good coverage; but are appropriate for [test data generation](http://en.wikipedia.org/wiki/Test_data_generation), where a tool is used to automatically generate test vectors for the code. This can drastically reduce the time needed for writing unit tests, for code in these specific domains. + +### JSON + +One example of a domain amenable to test data generation is parsing, where the data to be parsed is required to follow a strict schema — this is the case for XML and JSON documents. For JSON, a tool such as [Walbottle](http://people.collabora.com/~pwith/walbottle/) can be used to generate test vectors for all types of valid and invalid input according to the schema. + +Every type of JSON document should have a [JSON Schema](http://json-schema.org/) defined for it, which can then be passed to Walbottle to generate test vectors: +``` +json-schema-generate --valid-only schema.json +json-schema-generate --invalid-only schema.json +``` + +These test vectors can then be passed to the code under test in its unit tests. The JSON instances generated by `--valid-only` should be accepted; those from `--invalid-only` should be rejected. + +## Writing testable code + +Code should be written with testability in mind from the design stage, as it affects API design and architecture in fundamental ways. A few key principles: +* Do not use global state. Singleton objects are usually a bad idea as they can’t be instantiated separately or controlled in the unit tests. +* Separate out use of external state, such as databases, networking, or the file system. The unit tests can then replace the accesses to external state with mocked objects. A common approach to this is to use dependency injection to pass a file system wrapper object to the code under test. For example, a class should not load a global database (from a fixed location in the file system) because the unit tests would then potentially overwrite the running system’s copy of the database, and could never be executed in parallel. They should be passed an object which provides an interface to the database: in a production system, this would be a thin wrapper around the database API; for testing, it would be a mock object which checks the requests given to it and returns hard-coded responses for various tests. +* Expose utility functions where they might be generally useful. +* Split projects up into collections of small, private libraries which are then linked together with a minimal amount of glue code into the overall executable. Each can be tested separately. + +The topic of software testability is covered in the following articles: +* [Design for testability](http://msdn.microsoft.com/en-us/magazine/dd263069.aspx) +* [Software testability](http://en.wikipedia.org/wiki/Software_testability) +* [Dependency injection](http://en.wikipedia.org/wiki/Dependency_injection) +* [Software design for testing](http://c2.com/cgi/wiki?SoftwareDesignForTesting) + +## External links + +* [GLib test framework](https://developer.gnome.org/glib/stable/glib-Testing.html) +* [Walbottle](http://people.collabora.com/~pwith/walbottle/) +* [installed-tests documentation](https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests) diff --git a/content/developer/sdk-techs.md b/content/developer/sdk-techs.md new file mode 100644 index 0000000000000000000000000000000000000000..23a7c6caa6913b52e4ee7b538e7cb419cee17dea --- /dev/null +++ b/content/developer/sdk-techs.md @@ -0,0 +1,48 @@ +--- +short-description: "Presentation of our software stack" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Technologies + +Apertis follows an app-centric architecture. This means that the +development is more vertical and not layered as in automotive domain. +This reduces dependency and leads to less time to market. + +SDK is designed to make app development fast and easy while maintaining +backward compatibility. The system gets upgraded periodically; however +the applications should not be affected. This is achieved by writing +apps against SDK APIs. The SDK APIs are ensured to maintained backward +compatibility. + +The SDK will not only expose native system services integrated into the +OS, but also complete high level features which are of interest for +multiple Applications, Due to it’s nature, we classify the APIs into +Enabling APIs and SDK APIs. + +## Enabling APIs + +These are APIs from libraries/services that are typically taken from +Open Source (for example, Telepathy, Tracker). Apps which use these APIs +directly need to maintain the stability on their own due to API or ABI +breakages. Effort may be made to ease or remove transition issues when +ABI or API breakages happen. + +Trying to encapsulate these into SDK APIs will be a continuous process +within apertis. + +## SDK APIs + +They realize high level features of the SDK behind the scene (e.g. an +adressbook service which can be used by Apps to store and retrieve +contact data in a joint place). They are dedicated APIs, provided with +good documentation and sample code, easy to use and with backward +compatibility guaranteed exposed with the intention to be used by the +Apps. + +> The SDK services are developed as dbus services or libraries. For the APIs please refer the API reference or DevHelp on desktop. diff --git a/content/developer/sdk-usage.md b/content/developer/sdk-usage.md new file mode 100644 index 0000000000000000000000000000000000000000..68c6c71842f777c28e334074778546ccea74dc6b --- /dev/null +++ b/content/developer/sdk-usage.md @@ -0,0 +1,122 @@ +--- +short-description: "Collection of guides for using the SDK" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + - name: Peter Senna Tschudin + email: peter.senna@collabora.co.uk + years: [2019] + +license: CC-BY-SAv4.0 +... + +# Using the SDK + +## Overview of SDK features +Take a moment to familiarize yourself with some of the more commonly used tools in the SDK. These include the file browser, Eclipse, DevHelp and the simulator. All of these tools have shortcut links placed on the desktop. + +## File browser + +This icon opens the file manager so you can access the local folders and use the shared folder for exchanging documents between your host system and the virtual machine. You should be able to find your shared folder under **Places** on the left hand side of the file manager window. + +## Eclipse IDE + +Eclipse is the IDE used for application development in the SDK. Eclipse includes a custom Apertis plugin for updating the sysroot from within Eclipse. + +## Apertis API documentation + +DevHelp is the standard browser for offline API documentation across many Open Source projects. The DevHelp installation in the SDK provides a local, offline version of the all the documentation found in the Application Developer Portal, including the Apertis API references. + +--- + +# Persistent workspace + +The use of persistent workspace is optional. Check if you need persistent workspace before following these steps. + +The SDK is distributed as VirtualBox images, and there is one VirtualBox image for each version of the SDK. The SDK includes a tool named psdk to help developers to migrate their data when upgrading to a newer version of the SDK. The basic idea is to use a second and persistent disk to store: + - /home + - /opt + - /etc/cntlm.conf + - Other configuration files selected by the developer + +See the [design](https://designs.apertis.org/private/latest/maintaining-workspace-across-sdk-updates.html) notes for background information and [README](https://gitlab.apertis.org/apertis/psdk/blob/master/README.md) for the complete documentation of psdk. + +> **WARNING**: It is recommended to make a backup copy of your SDK before continuing. + +> **WARNING**: Configure the persistent disk on the **new** SDK before adding or changing files on the **new** SDK. Changes made to /home/user, /opt, and to /etc/cntlm.conf before configuring the persistent disk will be overwritten by the persistent disk. See the [README](https://gitlab.apertis.org/apertis/psdk/tree/apertis/v2020dev0#where-are-the-old-files-and-folders) for more details. + +## Upgrading to a new SDK using a persistent disk + +This involves two different SDK virtual machines: the *old* SDK and the *new* SDK. The suggested use is to first initialize the persistent disk on the *old* SDK, and then use the persistent disk on the *new* SDK. + +## VirtualBox: Adding the persistent disk to the *old* SDK + +Start by adding a second disk to the *old* SDK on VirtualBox. This disk should be big enough to host the contents of /home and /opt: we recommend using more than 40GiB and no less than 20GiB. We suggest using dynamically allocated VDI images so that the unused space does not consume disk space on the host. + +Open the *Settings* window of the *old* SDK, click on the *Storage* tab, select *Controller SATA*, and click on the icon *Adds hard disk*: + + +Choose *Create new disk*: + + +Choose *VDI (VirtualBox Disk Image)* and click *Next*: + + +Choose *Dynamically allocated* and click *Next*: + + +Choose a folder to store the disk, a file name, and the size of the disk. Then click on *create*: + + +## Preparing the persistent disk on the *old* SDK + +psdk is installed by default on *base SDK* and on *SDK* images since Apertis v2019pre. The psdk package is also available on Apertis package repositories. If you want to install psdk on an older SDK, you can try installing the [Debian package](https://repositories.apertis.org/apertis/pool/sdk/p/psdk/) directly or install from the [source code](https://gitlab.apertis.org/apertis/psdk). At the time of writing psdk required the following packages to be installed: python3, zenity + +After adding the second disk, start the *old* SDK and click on the psdk icon: Applications -> System -> *Persistent Disk Setup*. + + +psdk will open in interactive mode, and will guide you trough the processes of initializing the new disk and configuring the SDK to use it. Do not worry if the Linux device node(/dev/vdb) is different for you. + + +psdk will show progress while initializing the disk. + + +After psdk is done, it will ask you to reboot the SDK. Click OK, wait for the reboot to complete. + + +After the reboot completes **turn off** the *old* SDK. + +## VirtualBox: Adding the persistent disk to the *new* SDK + +Open the *Settings* window of the *new* SDK, click on the *Storage* tab, select *Controller SATA*, and click on the icon *Adds hard disk*: + + +Click on *Choose existing disk*: + + +The persistent disk will be under the category *Attached*. Select the persistent disk, and click on *Choose*: + + +## Using the persistent disk on the *new* SDK + +The final step is to call psdk from the *new* SDK. Start the *new* SDK and click on the psdk icon: Applications -> System -> *Persistent Disk Setup*. + + +psdk will open in interactive mode, and will guide you trough the processes of configuring the *new* SDK to use the persistent disk. Do not worry if the Linux device node(/dev/vdb) is different for you. + + +This will be much faster than initializing the disk. After psdk is done, it will ask you to reboot the SDK. Click OK, and wait for the reboot to complete. + + +--- + +Congratulations! You now have everything you need to start developing applications for Apertis. + +### Next + +|-| +|  **Start developing your app in the SDK.** [Continue on to application development](app-dev.md) | diff --git a/content/developer/sysroots-and-devroots.md b/content/developer/sysroots-and-devroots.md new file mode 100644 index 0000000000000000000000000000000000000000..3b351c500707ba3d07bdbed1487582e6ad655a6a --- /dev/null +++ b/content/developer/sysroots-and-devroots.md @@ -0,0 +1,150 @@ +--- +short-description: "Sysroot and devroot: what are they and when to use them" + +authors: + - name: Emanuele Aina + email: emanuele.aina@collabora.com + years: [2019] + +license: CC-BY-SAv4.0 +... + +# Sysroot and devroots + +Sysroots and devroots are two development rootfs meant to provide an +environment to build software for Apertis, targetting foreign architecture that +don't match the CPU architecture of the build host (for instance, building +ARM64 binaries from a Intel-based host). + +They are meant to address different use cases with different tradeoffs. + +## Sysroot + +Sysroots are filesystem trees specifically meant for cross-compilation and +remote debugging targeting a specific release image. + +They are meant to be read-only and target a specific release image, shipping +all the development headers and debug symbols for the libraries in the +release image. + +Sysroots can be used to cross-compile for Apertis from a third-party +environment using an [appropriate cross-toolchain](cross-build-toolchain.md). +They are most suited for +early development phases where developers focus on quick iterations and rely +on fast incremental builds of their components. + +Cross-compilation using sysroot requires support from the project build system, +which then needs to be set up to appropriately point to the sysroot and to the +cross compiler. Not all build systems support cross compilation and some may +require patching to make it work properly. + +The Apertis SDK ships the `ade` tool to simplify sysroots management and the +configuration of projects based on the +[GNU Autotools](https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html) +to use them, focusing in particular on application development. See the +[Apertis Development Environment](appdev-ade.md) guide for informations on how +to use ade. + +Sysroots can be used without `ade` by manually dowloading the `sysroot` tarball +from the release artifact repository and then unpack it locally with `tar`, see +the instructions in the [cross-toolchain documentation](cross-build-toolchain.md) +for a full walk-through on using them on non-Apertis hosts. + +Since unpacked sysroots are self-contained folders, multiple sysroots can +coexist on a single system to target multiple architectures and releases: for +instance, a single system could host the `armhf` and `arm64` sysroots for +`v2019pre` and the `arm64` one for `v2020dev0` at the same time. +Using the [portable cross-build toolchain](cross-build-toolchain.md) matching +the target release is recommended. + +Sysroots are available from the Apertis release artifact repository +as `sysroot*.tar.gz` tarballs under the `$release/$architecture/sysroot/` folder, +for instance +[`sysroot-apertis-v2019pre-arm64-v2019pre.0.tar.gz`](https://images.apertis.org/release/v2019pre/v2019pre.0/arm64/sysroot/sysroot-apertis-v2019pre-arm64-v2019pre.0.tar.gz) +under +[`v2019pre.0/arm64`](https://images.apertis.org/release/v2019pre/v2019pre.0/arm64/sysroot/). + +## Devroot + +Devroots are filesystem trees meant to offer a foreign architecture build +environment via containers and binary emulation via the QEMU user mode. + +Using emulation means that, for instance, all the binaries on the ARM64 devroot +are ARM64 binaries and QEMU translates them at runtime to execute them on a +Intel-based host. + +This means that builds under a devroot appear to the build system as native +builds and no special support or configuration is needed, unlike for actual +cross builds using sysroots. + +Devroots ship a minimal set of packages and offer the ability to install all +the packages in the Apertis archive using the `apt` tool just like on the +Apertis SDK itself. + +Due to the nature of foreign architecture emulation they impose a considerable +overhead on build times compared to sysroot, but they avoid all the intricacies +that cross-building involves and offer the ability to reliably build deb packages +targeting foreign architectures. + +The Apertis SDK ships the `devroot-enter` tool to set up the container environment +needed to work in a unpacked devroot, see the +["Programming guidelines" section](programming-guide-tooling.md#development-containers-using-devrootenter) +for informations on how to use devroot-enter. + +Since devroots are self-contained folders like sysroots, multiple devroots may +be installed at the same time on a single host to target multiple releases and +architectures. + +Devroots are available from the Apertis release artifact repository +as the `ospack*.tar.gz` tarballs under the `$release/$architecture/devroot/` folder, +for instance +[`ospack_v2019pre-arm64-devroot_v2019pre.0.tar.gz`](https://images.apertis.org/release/v2019pre/v2019pre.0/arm64/devroot/ospack_v2019pre-arm64-devroot_v2019pre.0.tar.gz) +under +[`v2019pre.0/arm64`](https://images.apertis.org/release/v2019pre/v2019pre.0/arm64/devroot/). + +As of `v2019pre`, the Apertis SDK images come with the `armhf` devroot pre-installed. + +# A comparison + +Sysroot: +* Benefits + * Fast + * No special requirements on the system + * Supports remote debugging by providing symbols matching a specific target images +* Drawbacks + * Only works with build systems explicitly supporting cross-building + * Cannot be customized + +Devroot: +* Benefits + * Builds appears as native builds to build systems, avoiding cross-compilation issues + * Can be fully customized, adding, removing and updating packages +* Drawbacks + * Requires a container to be set up on the host (`systemd-nspawn` is recommended) + * Binary emulation imposes a significant performance overhead + * Supporting remote debugging requires additional care to ensure that symbols + match the software running on the target image + +# When to use them + +* For application and agent development building app-bundles: use the sysroot + * This is the main use-case for using the sysroot and the `ade` tool is meant + to simplifly this workflow. +* For platform development building deb packages: use the devroot + * Support for cross-building deb packages is spotty, using the devroot + with `devroot-enter` provides the most reliable solution in this case and + enables developers to install extra dependencies not shipped on Apertis + images by default. +* To cross-build for Apertis from a third-party SDK: use the sysroot + * If the build system already supports cross-building, using the sysroot does + not pose additional requirements on the third-party SDK, while the devroot + requires emulation and a container setup. +* To build projects not supporting cross-compilation: use the devroot + * The devroot is meant to emulate native compilation, side-stepping any + cross-compilation issue. + * On a third-party SDK it is still possible to use the devroot using the + [`devroot-enter` script](https://gitlab.apertis.org/apertis/apertis-dev-tools/blob/apertis/v2019pre/tools/devroot-enter) + as long as the following tools are available and set up: + * `qemu-arm-static`/`qemu-aarch64-static` (from the `qemu-user-static` package) for foreign binary emulation + * a `binfmt_misc` setup for transparent usage of `qemu-user-static` (provided by the `binfmt-support` package on Debian-based systems) + * `systemd-nspawn` (from the `systemd-container` package) for setting up the containerized environment diff --git a/content/developer/telephony-ip.md b/content/developer/telephony-ip.md new file mode 100644 index 0000000000000000000000000000000000000000..e61854d86acc7d7eb19f93d4bf5af8a03350d231 --- /dev/null +++ b/content/developer/telephony-ip.md @@ -0,0 +1,29 @@ +--- +short-description: "Online communication services" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# VoIP, IM and groupware + +### Provides: + +- IP telephony + +- Chat, *etc*. + +### Enabling components: + +- Telepathy-GLib + (http://telepathy.freedesktop.org/doc/telepathy-glib/) + +- Telepathy Developer's Manual + (http://telepathy.freedesktop.org/doc/book/index.html) + +- libGData (https://developer.gnome.org/gdata/unstable/) + +- SyncEvolution D-Bus (http://api.syncevolution.org/) diff --git a/content/developer/telephony.md b/content/developer/telephony.md new file mode 100644 index 0000000000000000000000000000000000000000..281c1c9eb02ea3253ad624d0163954dc872235f9 --- /dev/null +++ b/content/developer/telephony.md @@ -0,0 +1,20 @@ +--- +short-description: "Telephony services" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + +license: CC-BY-SAv4.0 +... + +# Telephony + +### Provides: + +- Call handling + +### Enabling components: + +- ofono - includes consistent, minimal, and easy to use complete APIs + for telephony (https://01.org/ofono) diff --git a/content/developer/vm-config.md b/content/developer/vm-config.md new file mode 100644 index 0000000000000000000000000000000000000000..a5a93cec56f762488dcb372d2653b3e65bff002b --- /dev/null +++ b/content/developer/vm-config.md @@ -0,0 +1,48 @@ +--- +short-description: 'Basic customization of the SDK virtual machine' + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Configuring the virtual machine + +## Change the keyboard layout + +Once the SDK is installed, you might need to modify your keyboard layout for the Ubuntu operating system. The default keyboard layout is **US**. To change it, please follow these steps: + +* In the Ubuntu system, go to `Applications Menu â–¸ Settings` and choose **Keyboard**. + +* In the dialog box, select the tab **Layout**, uncheck **Use system defaults** and click **Edit** under Keyboard layout. Select your required keyboard layout from the list, click **OK** and close the window. You do not need to select a Keyboard model. + +  + +## Adjusting virtual machine window size + +Once the guest additions are installed, the window size can be changed. Select the option **Adjust Window Size**. Then resize the window to make it appear as a normal working size. + + + +## Put the virtual machine in Fullscreen mode + +You can switch the display of the SDK to fullscreen mode by selecting **View** in the VirtualBox menu and choosing **Switch to Fullscreen**. + + + +You can still access the most important options of VirtualBox in the menu that appears at the bottom of the screen when you get close to it with your cursor. + +### Tips for managing the virtual machine + +|-| +| **If you need help restarting or uninstalling the virtual machine,** [read about how to manage the virtual machine](vm-management.md) | + +### Next + +|-| +|  **Let's get started using the SDK.** [Continue on to using the SDK](sdk-usage.md) | diff --git a/content/developer/vm-management.md b/content/developer/vm-management.md new file mode 100644 index 0000000000000000000000000000000000000000..a5d431e2b08b2f4638dc0705878fd61d731fec89 --- /dev/null +++ b/content/developer/vm-management.md @@ -0,0 +1,46 @@ +--- +short-description: "Basic VirtualBox tips for developers not familiar with that technology" + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Managing the virtual machine + +## Shutting down / restarting the virtual machine + +If you want to shut the virtual machine down, you can use the icon in the top right corner of the screen. If you want to restart it, go to **Applications Menu** and click **Log Out**: + + + +In the dialog box, you can choose if you want to log out, restart the virtual machine, or shut it down. + + + +## Uninstall the virtual machine + +To uninstall the virtual machine, open VirtualBox and right click the machine you want to remove. Chose **Remove** from the menu. + + + +In the following dialog you can decide if you want to remove the virtual machine from VirtualBox or if you want to delete the files containing the virtual machine from your hard drive as well. This will remove the hard drive of the virtual machine and all files saved there. Please make sure to make backups of the files you still need before deleting all files. **Remove only** will just delete the virtual machine from VirtualBox but leave the files containing the virtual machine intact. + +## Audio settings + +In order to make sure that the audio player output is heard from the simulator make sure that the below settings are done: + +- Unmute Audio in host machine. + +- Go to `Applications menu â–¸ Multimedia â–¸ Pulse Audio Volume Control` + +- Select **Output Devices** tab. + +- Make sure that the Audio speaker is **Unmuted**. + +With these settings, Audio player output should be heard over speakers. diff --git a/content/developer/vm-netboot-server.md b/content/developer/vm-netboot-server.md new file mode 100644 index 0000000000000000000000000000000000000000..5d1e7a4feecaf877f582319a4466546b0236f0df --- /dev/null +++ b/content/developer/vm-netboot-server.md @@ -0,0 +1,182 @@ +--- +short-description: 'Use the SDK virtual machine for network management and boot' + +authors: + - name: Denis Pynkin + email: denis.pynkin@collabora.com + years: [2019] + +license: CC-BY-SAv4.0 +... + +# Setup SDK VM as network management server + +## Background + +Sometimes it is needed to have own testing environment for the target board. +For example if developer is working in restricted network and want to change some automatic network settings or need to have playground with network bootable system. + +For the board network setup, boot and IPAM management we need to provide services below: + +* DHCP -- IP addresses management +* DNS -- name server +* NTP -- time settings +* TFTP -- boot over the network support (for netboot only) +* NFS -- network file system (for netboot only) + + +## Preconditions + +* There is already installed SDK VM as described in [installation guide](install.md). + +* It is expected what the USB Network Adapter is used as additional network interface dedicated for the development board. + +* To avoid any influence from the host and isolate the network connection between the host and development board please attach the USB Network Adapter as USB device -- this allows Apertis SDK to manage the dedicated network: + + + +* The USB Network Adapter is attached as USB device into SDK VM and connected to development board: + + +* Check the network interfaces after the SDK VM boot: + +``` +# connmanctl services +*AO Wired ethernet_525400233200_cable +*AR Wired ethernet_5254000b00b5_cable +``` +Let's assume what USB Network Adapter is shown as service `ethernet_5254000b00b5_cable` and `ens4` interface on SDK VM. + +In this document we use dedicated network `192.168.42.0/24` for connection between the SDK VM and development board. + +## Assign static address for the USB Network Adapter + +Assign address `192.168.42.1` for the `ens4` interface on SDK VM: + +``` +sudo connmanctl config ethernet_5254000b00b5_cable --ipv4 manual 192.168.42.1 255.255.255.0 +``` + + +## Firewall and network forwarding setup + +Check the interface name which is dedicated for devices management with command `ip addr show` -- you will see the correct interface name with address `192.168.42.1` (`ens4` in example). + +* Add rules allowing to access to DNS, DHCP and NTP services on VM: + +``` +sudo iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited +sudo iptables -A INPUT -p udp --dport 67 -i ens4 -j ACCEPT +sudo iptables -A INPUT -p udp --dport 53 -i ens4 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 53 -i ens4 -j ACCEPT +sudo iptables -A INPUT -p udp --dport 123 -i ens4 -j ACCEPT +sudo iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited +``` + +* Allow access to outer network for development board: + +``` +sudo iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited +sudo iptables -A FORWARD -i ens4 -j ACCEPT +sudo iptables -A FORWARD -o ens4 -j ACCEPT +sudo iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited +sudo iptables -t nat -A POSTROUTING --src 192.168.42.0/24 -j MASQUERADE +``` + +* Save iptables configuration with command: + +``` +sudo iptables-save | sudo tee /etc/iptables/rules.v4 +``` + +* Allow forwarding + +``` +sysctl -w net.ipv4.ip_forward=1 +``` +And add the same into the system's configuration to enable forwarding automatically after reboot: + +``` +echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/enable-forward.conf +``` + +## Install additional packages + +Here we use [dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html) lightweight server to provide DNS, DHCP and TFTP services. +Also we need to provide a correct time with [NTP](http://www.ntp.org/documentation.html) server for development boards without backup battery allowing to use HTTPS/TLS connections and OTA upgrades. + +If the proxy server is needed to access to outer network then need to add it into the APT configuration file `/etc/apt/apt.conf.d/90proxy`: +``` +Acquire::http::Proxy "http://10.168.128.45:3128"; +Acquire::https::Proxy "http://10.168.128.45:3128"; +``` + +Install additional packages on the SDK VM: +``` +sudo apt-get update +sudo apt-get install -y dnsmasq ntp +``` +## Configure DNS and DHCP + +By default `dnsmasq` works as caching DNS service allowing the name resolution for managed devices +Add minimal configuration file `/etc/dnsmasq.d/10-dhcp.conf` for address management: + +``` +listen-address=192.168.42.1 +bind-interfaces +dhcp-range=192.168.42.10,192.168.42.200,10m +dhcp-option=option:ntp-server,192.168.42.1 +``` + +The last option forces to use SDK VM for time synchronization. + +## Configure NTP service + +Minimal working configuration file `/etc/ntp.conf` for the system without access to external time sources. Omit the drift file since for VM it doesn't help. + +``` +# By default, exchange time with everybody, but don't allow configuration. +restrict -4 default kod notrap nomodify nopeer noquery limited +restrict -6 default kod notrap nomodify nopeer noquery limited + +# Local users may interrogate the ntp server more closely. +restrict 127.0.0.1 +restrict -6 ::1 + +# Use ourselves as single source +server 127.127.1.0 prefer iburst +# Allow divices to use our time server +restrict 192.168.42.0 mask 255.255.255.0 nomodify notrap +``` + +## Start DHCP/DNS/NTP services + +Enable and restart services with new configuration: + +``` +sudo systemctl enable dnsmasq ntp +sudo systemctl restart dnsmasq ntp +``` + +## Netboot configuration (TBD) + +TFTP and NFS services are needed in addition to allow development boards to boot over the network. + +## Hints + +* The ethernet USB dongle stops working on the SDK when the target board reboots + + As a workaround, connect both the SDK USB dongle and the target to an ethernet + **L2** hub/switch to keep the carrier signal stable on the SDK side even when + the target board reboots. + +* I want to attach several boards in the same time + + Use a **L2** hub/switch to connect the SDK and the target boards. + +* I have only a L3 switch/router + + If you are using a **L3** router between the SDK and target instead of a **L2** switch/hub, + make sure it can act as a **L2** switch by disabling services which may affect connectivity + like the DHCP server on the router. It's also worth disabling any other service which is not + needed for this use, like wireless access. diff --git a/content/developer/vm-setup.md b/content/developer/vm-setup.md new file mode 100644 index 0000000000000000000000000000000000000000..80584079a710cdb88bd8919df434e132ac2038af --- /dev/null +++ b/content/developer/vm-setup.md @@ -0,0 +1,139 @@ +--- +short-description: 'Get the SDK virtual machine up and running' + +authors: + - name: Robert Bosch Car Multimedia GmbH + years: [2015, 2016] + - name: Micah Fedke + email: micah.fedke@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Setting up the virtual machine + +## Installing VirtualBox + +Oracle VM VirtualBox is used to run the SDK. If you have not yet installed the current version of this software, please follow these steps: + +* Download the most recent version of the VirtualBox installation file [here](https://www.virtualbox.org/wiki/Downloads). For Apertis, we recommend version 5.0.12 or above. + +* Run the `Setup.exe`. + +* Follow the installation steps to finish installing VirtualBox. + +> For instructions on uninstalling VirtualBox, you can take a look at the [user manual](https://www.virtualbox.org/manual/ch02.html) and choose your host system OS from the table of contents. + +## Create a virtual machine with the SDK image + +* Extract the gzipped VDI image file you [downloaded in the previous step](install.md#download-an-sdk-vm-image) to a local folder on your PC. The image for the virtual machine is a single file. + +* Start the VirtualBox application (Oracle VM VirtualBox in the Start +menu). + +  + +* Go to `Machine â–¸ New` or click the **New** Icon. This launches the **Create New Virtual Machine** screen. If you would like additional information about creating a new virtual machine you can find it in the [VirtualBox manual](https://www.virtualbox.org/manual/ch01.html#gui-createvm) + +* Enter a name and select **Type: Linux**, **Version: Ubuntu (64 bit)** from the menu. + +  + +* Select the RAM size. Change the values manually according to your requirements. Assign at least 50% RAM for the virtual machine if your total RAM is more than 2 GB. + +  + + > Not enough RAM might cause problems while you use the SDK (the simulator might be too slow, Eclipse might crash). + +* Select **Use an existing virtual hard drive file** and browse to the location of your unzipped file. + +  + +* Click **Create** to create the virtual machine. + +* If using an apertis AMD image select **Enable EFI** - by selecting your virtual machine and clicking **Settings**. Select **System-> Motherboard**. If *not* using AMD image this setting is not needed + +  + +  + +* If you want to start your virtual machine from the desktop without having to open the VirtualBox every time, you can create a desktop icon. Right-click the entry of your virtual machine on the left and choose **Create Shortcut on Desktop** from the menu. + +  + +## Start the virtual machine for the first time + +Use your just created desktop shortcut, or click **Start** in VirtualBox to start the virtual machine. The boot-up-process might take a few seconds. + +On starting the virtual machine, VirtualBox might display some popup windows informing you about mouse, keyboard and color settings which might be different on the VM. Please read through the messages and click **OK** for all of them. If you check the **Do not show this message again** checkbox, you can permanently disable these popup messages for this virtual machine. + +Find more information on the mouse and keyboard settings [here](https://www.virtualbox.org/manual/ch01.html#keyb_mouse_normal). + +## Configure the Network Proxy + +If you need to configure a network proxy to establish an internet connection, you can make the necessary configuration by clicking **ApplicationsSettingsNetwork proxy** and following the instructions given in the terminal window. + + + +The dialog will ask you for the following information: + + - Proxy Address (Proxy server name : port num) + + - Workstation Name + + - Proxy User + + - NT Domain + + - Proxy Password + +## Installing VirtualBox Guest Additions: + +It is necessary to install guest additions corresponding to the virtual box version installed. Make sure to backup important data, since updating the Guest Additions might overwrite some of your data. + +Start the SDK and go to `Devices â–¸ Insert Guest Additions CD Image…` on the VirtualBox menu bar. A virtual device will appear in the file +orer. + + + + + +The CD image should be shown on the desktop. Now, follow the below instructions: + +``` +Open the guest additions folder by double clicking on the CD icon +Open a terminal by rightlick->open terminal in the guest additions folder +Run the command - sudo ./VBoxLinuxAdditions.run +``` + + + +Once the Guest Additions are installed successfully (the process might take a few minutes), restart the virtual machine, see [here](vm-management.md) if you need help with that. + +## Setting up shared folders + +Go to **Settings** and click **Shared Folders** and select **Add Shared Folders** (use the icon on the left hand side). Browse to the path you created your share folder in (e.g. `C:\SHARE`). Click **OK** and close the Settings window. The VirtualBox VM Settings can only be edited when the VM is closed. So please close all VMs if any should be running, before setting up a shared folder. + + + + + +Once you start the virtual machine, go to **ApplicationsTerminal Emulator** and run this command in the terminal: + +``` +sudo mount –t vboxsf HOST_DIR_NAME GUEST_DIR_NAME +``` + +E.g: + +``` +sudo mount –t vboxsf SHARE /mnt +``` + +This command will mount the share folder to the current `/mnt`. + +### Next + +|-| +|  **Ensure that the virtual machine is properly configured.** [Continue on to configuring the virtual machine](vm-config.md) | diff --git a/content/developer/widget-catalog.md b/content/developer/widget-catalog.md new file mode 100644 index 0000000000000000000000000000000000000000..e0fa6e580dfabea98739d7217ea7ff569417bef0 --- /dev/null +++ b/content/developer/widget-catalog.md @@ -0,0 +1,424 @@ +--- +short-description: "Widget catalog" + +authors: + - name: Gustavo Noronha Silva + email: gustavo.noronha@collabora.co.uk + years: [2016] + +license: CC-BY-SAv4.0 +... + +# Widget catalog + +The Apertis UI framework provides several UI components that can be leveraged +to build UIs for apps. Here is an overview of available widgets. + +# Lightwood + +The main component responsible for providing the UI building blocks is +**Lightwood**. Lightwood provides API interfaces and base implementation for +various widgets that can be reused to build UI components for variants +such as **Mildenhall**. + +Lightwood uses Clutter as its base, so widgets are Clutter actors and the +Clutter APIs can be used with them. + +## Interfaces + +### Expandable <!-- lightwood-roller-liblightwood-expandable.html --> + +An interface to be implemented by widgets that provide two modes of +operation, namely expanded and not expanded. It is mainly used inside +Lightwood for the `FixedRoller`, which supports expanding items when +they are selected. + +## Abstract widgets + +These are base classes which can be leveraged by variants for their concrete +implementations. They cannot be instantiated directly, only through a +subclass. Some concrete subclasses are provided by Lightwood, some are left +completely to the variants to define. + +### Container <!-- lightwood-roller-liblightwood-container.html --> + +A simple container widget. Doesn't do anything itself, only used as a bin to +contain other widgets. This can be thought of as the base for other widgets. + +### Button <!-- lightwood-button-liblightwood-button.html --> + +A button supporting several gestures. Presses and releases are joined by long +presses and also swipes. There is also support for variants to configure +tooltips. Those are not provided on the base widget. + +### PopupBase <!-- lightwood-popup-liblightwood-popupbase.html --> + +A base class for variants to use when implementing their popups. Contains +a property to indicate an audio file to be played when the popup appears. + +### ProgressBase <!-- lightwood-progressbar-liblightwood-progressbase.html --> + +Provides a media playback state bar. Visualization for media duration, +current time, buffering, as well as action buttons for play/pause and seeking. + +### MapBase <!-- lightwood-map-liblightwood-mapbase.html --> + +Provides a way of showing and interacting with maps. It is able to render +maps from OpenStreetMap and supports zooming and markers. + +### Roller <!-- lightwood-roller-liblightwood-roller.html --> + +A list of items resembling an infinite cylinder. It can be rotated, supports +kinetic behaviour and visual effects such as motion blur. Two concrete classes +are provided, with two different modes of operation: `FixedRoller` and +`VariableRoller`. + +## Widgets + +### MultilineEntry <!-- lightwood-textbox-liblightwood-multiline.html --> + +Text entry with several lines. Displays and allows editing text with several +lines. Supports programmatic editing of the text, basic formatting of the +displayed text, as well as scrolling the lines of text. + +### TextBox <!-- lightwood-textbox-liblightwood-textbox.html --> + +Higher level text entry widget. Supports basic formatting of displayed text, +password entry, with entered characters converted to an asterisk. Although +it lacks the programmatic text editing capabilities of `MultilineEntry`, it +does allow editing several lines of text if its `multiline` property is turned +on. + +### VariableRoller <!-- lightwood-roller-liblightwood-varroller.html --> + +A specialization of the Roller which supports items with variable size. +By allowing each item to have a different size, more visual flexibility is +possible. Images of different sizes can be shown more naturally, for instance. +However, this makes the roller less efficient and can degrade performance +when there are many items. + +### FixedRoller <!-- lightwood-roller-liblightwood-fixedroller.html --> + +The roller can efficiently host many more items when their sizes are fixed, +since it doesn't need to ask all of its children about their sizes for layout. +This leads to some rigidity in the flow of the items, though. Images with +different aspect ratios will not look as natural, for instance. For that, +consider using VariableRoller. + +## Expander <!-- lightwood-roller-liblightwood-expander.html --> + +A container that can be clicked, tapped or dragged to show or hide its child. + +### Flipper <!-- lightwood-flipper-liblightwood-flipper.html --> + +An animated container for two actors. It places the actors on each other's +back and can switch between showing one or the other by performing a flip +animation — rotating both actors on their axes so that the one that had its +front toward the screen puts its back towards the screen and vice versa. + +The way the rotation is done and the animation properties such as duration +and easing can be customized. + +## Data + +### Model <!-- lightwood-roller-liblightwood-model.html --> + +A subclass of `ThornburyModel` that notifies when it is waiting for data. +In use cases where the model fetches data asynchronously from the disk +or from remote sources, it may happen that a request for more data does +not have an immediate response, the view needs to be notified. This is +an abstract class, so it cannot be instantiated directly. A concrete subclass +is necessary. + +## Effects + +### CylinderDeformEffect <!-- lightwood-roller-liblightwood-cylinderdeform.html --> + +A ClutterEffect that can be applied to any ClutterActor. When applied to a +widget, the rendered content will be deformed so that it looks like a +cylinder. It is used on the `Roller` give it its cylindrical look. + +### BlurEffect <!-- lightwood-roller-liblightwood-blureffect.html --> + +A ClutterEffect that can be applied to any ClutterActor. When applied to a +widget, the rendered content will be blurred. It is used on the `Roller` +to provide a motion blur effect when scrolling fast. + +### DeformPageTurn <!-- lightwood-roller-liblightwood-deformturn.html --> + +A ClutterEffect that can be applied to any ClutterActor. When applied to a +widget, the rendered content will be deformed like a page that is being +turned. + +### GlowShader <!-- lightwood-roller-liblightwood-glowshader.html --> + +A ClutterEffect that can be applied to any ClutterActor. When applied to a +widget, the rendered content will have a glow around it. The `Roller` uses +this to highlight selected items, for instance. + +# Mildenhall + +The **Lightwood** library is a base upon which variants are built. The +reference variant implementation is **Mildenhall**. + +## Widgets + +### BottomBar <!-- MILDENHALL-widgets-BottomBar.html --> + +A horizontal bar with 3 buttons and a text label. + +### ButtonDrawer <!-- MildenhallButtonDrawer.html --> + +A button which is also a drawer. It is built on `LightwoodButton`, and +thus supports all its features. The button can optionally have multiple +states other than normal and pressed, and swiping right and left can +change those states. + +### RadioButton <!-- MildenhallRadioButton.html --> + +A button which can be marked to select among exclusive alternatives. Several +radio buttons are placed on a single group and selecting one of them deselects +the others. It is built on `LightwoodButton`. + +### ToggleButton <!-- MildenhallToggleButton.html --> + +A button which has two states. Clicking or tapping switches between those +states. + +<!-- There is also a MildenhallButtonSpeller, which is used for the + virtual keyboard keys --> + +### DrawerBase + +A button which opens a drop-down or pull-up menu with more buttons. Beside +the buttons a tooltip is shown for a time describing it. + +<!-- There are 3 subclasses to this: Context, Navi, Views. They are just + for setting different hardcoded positions to the actor. --> + +### LbsBottomBar <!-- MILDENHALL-widgets-LbsBottomBar.html --> + +A horizontal bar with 3 labels arranged such that one is to the left, +one at the center, one to the right. + +### LoadingBar <!-- MildenhallLoadingBar.html --> + +A progress bar that can be used to show the status of tasks. + +### MapWidget <!-- MapWidget.html --> + +Shows a map and allows interaction with it. Zooming and markers are supported. + +### MetaInfoFooter <!-- MILDENHALL-widgets-MetaInfoFooter.html --> + +A horizontal bar providing an icon, a label and optional 5-star rating. It +can also display a decorative top bar. + +### MetaInfoHeader <!-- MILDENHALL-widgets-MetaInfoHeader.html --> + +A horizontal bar providing an icon, and a label. It can also display a +decorative bottom bar. + +### Overlay <!-- MildenhallOverlay.html --> + +An overlay that can place an image on top of something else. + +### MediaOverlay <!-- MildenhallMediaOverlay.html --> + +An overlay that can be placed on top of video. It includes a play/pause button +and text. + +### ProgressBar <!-- MildenhallProgressBar.html --> + +A media playback state widget, built on `LightwoodProgressBase`. +Visualization for media duration, current time, buffering, as well as action +buttons for play/pause and seeking. + +### RatingBottomBar <!-- MildenhallRatingBottomBar.html --> + +A horizontal bar with a 5-start rating or text label at the top-left and +2 text labels, one at the bottom left, one to the right. + +### RollerContainer <!-- MILDENHALL-widgets-RollerContainer.html --> + +The generic implementaton for the `LightwoodRoller`. It is actually not +a subclass, but rather a container that can host either a `FixedRoller` or +a `VariableRoller`. + +### CabinetRoller <!-- MildenhallCabinetRoller.html --> + +Allows navigation of hierarchical content, such as folders. It shows up to +two `Rollers` side by side. Selecting an item will show the contents of that +item on the right-side roller. + +### InfoRoller <!-- MildenhallInfoRoller.html --> + +A mix of a drawer and either a `FixedRoller` or `VariableRoller` from +Lightwood. The drawer can be opened to show the roller. + +### PullupRoller <!-- MildenhallPullupRoller.html --> + +A widget that mixes a drawer, a `MetaInfoFooter` from Mildehall and either +a `FixedRoller` or a `VariableRoller` from Lightwood. The drawer can +be opened to show the roller. It differs from `InfoRoller` in that it uses +a `MetaInfoFooter` to provide the base of the drawer. + +### scroller <!-- MILDENHALL-widgets-mildenhall-scroller.html --> + +A viewport that allows scrolling over content that overflows its size. +Supports finger scrolling with kinetic behaviour. + +### SelectionPopup <!-- MildenhallSelectionPopup.html --> + +A popup dialog that provides the user with a message and several buttons +that can be used to choose how to respond to the message. + +### Speller <!-- MildenhallSpeller.html --> + +A virtual keyboard. It works by using its own text entry widgets rather than +by sending key events immediately to the application. There are signals to +be notified when the user has pressed a key and when text is committed. + +<!-- I don't think I understand the purpose of SpellerKeypad. How is it + different from the reguar Speller? --> + +### TextBox <!-- MildenhallTextBoxEntry.html --> + +A text entry widget implementing `LightwoodTextBox`. Supports basic +formatting of displayed text, password entry, with entered characters converted +to an asterisk. Allow editing several lines of text if its `multiline` property +is turned on. + +### WebViewWidget <!-- MildenhallWebViewWidget.html --> + +A widget providing a web engine. It can be used to render local and remote web +pages. + +<!-- MildenhallWebViewWidgetAlertHandler, MildenhallWebViewRenderTheme, + and MildenhallWebViewSoupAuthDialog are variant-specific UI for the + browser engine and would not be used in general. --> + +### WidgetContainer <!-- MildenhallWidgetContainer.html --> + +A container that can be used to lay out other widgets. It supports animating +widgets when moving them inside its viewport. + +### PopupInfo <!-- PopupInfo.html --> + +Implementation of `LightwoodPopupBase`. It is able to show text and 3 buttons. + +## Roller item widgets + +The `Roller` widgets can be populated by several types of items. These +are some of the items provided by Mildenhall. The developer decides which +type of item to use and the `Roller` will create them as needed based +on the model. + +<!-- there is a CabinetItem, which I am seeing as an implementation detail + of the cabinet roller --> + +### DetailRoller <!-- MILDENHALL-widgets-DetailRoller.html --> + +A `Roller` item for showing several icons and several labels of text. + +<!-- DiskUsageItem is a roller item that provides an horizontal bar showing + percentage, along with icon and text. --> + +### IconLabelIconItem <!-- IconLabelIconItem.html --> + +A `Roller` item to display a label and two icons, one at each side of the +label. It also supports showing progress information using a +`MildenhallLoadingBar`. + +### IconLabelRadioButtonItem <!-- IconLabelRadioButtonItem.html --> + +A `Roller` item to display an icon, a label and a radio button. + +### IconTextVariable <!-- IconTextVariableItem.html --> + +A `Roller` item for showing an image, a label and optionally a 5-star +rating. + +### ListItem <!-- ListItem.html --> + +A `Roller` item with an icon and four labels. + +### LbsListRollerItem <!-- LbsListRollerItem.html --> + +A `Roller` item with 3 labels placed such that one is at the top, two at +the left and right sides of the bottom, with an icon in the middle. + +### MessageRollerItem <!-- MILDENHALL-widgets-MessageRollerItem.html --> + +A widget capable of showing an email message, fit for using on `Roller` +widgets. + +<!-- RollerItemBT and RollerItemConnectivity seem to be specific to Bluetooth + and Internet connection settings --> + +### SampleDetailItem <!-- SampleDetailItem.html --> + +A `Roller` item showing a short text and a long text. + +<!-- SampleItem looks too specific, there is an app-type property even --> + +### SampleThumbnailItem <!-- SampleThumbnailItem.html --> + +Shows images as `Roller` items. + +### SampleVariableItem <!-- SampleVariableItem.html --> + +Item showing icon and label with variable height, for use with +`VariableRoller`. + +### SBrowserDetail <!-- MildenhallSBrowserDetail.html --> + +Shows a video or audio inside a `Roller`. + +<!-- I'm considering SelectionPopupItem an implementation detail of + SelectionPopup --> + +### SingleItem <!-- SingleItem.html --> + +`Roller` item with 3 text labels and optional footer + +### SortRoller <!-- MILDENHALL-widgets-SortRoller.html --> + +A `Roller` item with data that can be sorted by its parent either +alphabetically or numerically. + +## Speller entry widgets + +The virtual keyboard provided by Mildenhall supports several types of entries +where text can be typed. The entry type can be specified as a property of the +`Speller` object. + +### SpellerDefaultEntry <!-- MildenhallSpellerDefaultEntry.html --> + +The default entry type used by the `Speller`. It provides autocomplete +and history features. + +### SpellerFourToggleEntry <!-- MildenhallSpellerFourToggleEntry.html --> + +An entry that includes a text entry and four `MildenhallToggleButton` +instances. + +### SpellerMultiLineEntry <!-- MildenhallSpellerMultiLineEntry.html --> + +Text entry where several lines of text can be edited at once. + +### SpellerMultipleEntry <!-- MildenhallSpellerMultipleEntry.html --> + +Several entries that can be edited on the same virtual keyboard. + +## ThumbnailItem <!-- MILDENHALL-widgets-ThumbnailItem.html --> + +Item for the `Roller` hosting a `MediaOverlay` widget. + +## VideoListRollerItem <!-- MILDENHALL-widgets-VideoListRollerItem.html --> + +Item with 3 text labels and an icon for the `Roller`. + +### VideoThumbRoller <!-- MILDENHALL-widgets-VideoThumbRoller.html --> + +Item to show an image and optionally a video player on a `Roller`. diff --git a/static/examples/image-armhf.yaml b/static/examples/image-armhf.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1a1eb063207f9274188c5df54b41ce7858f19932 --- /dev/null +++ b/static/examples/image-armhf.yaml @@ -0,0 +1,43 @@ +architecture: armhf +actions: + - action: unpack + file: ospack-armhf.tar.gz + compression: gz + + - action: apt + description: Install hardware support packages + recommends: false + packages: + - linux-image-4.9.0-0.bpo.2-armmp-unsigned + - u-boot-common + + - action: image-partition + imagename: "apertis-armhf.img" + imagesize: 4G + partitiontype: gpt + mountpoints: + - mountpoint: / + partition: root + flags: [ boot ] + partitions: + - name: root + fs: ext4 + start: 0% + end: 100% + + - action: filesystem-deploy + description: Deploy the filesystem onto the image + + - action: run + chroot: true + command: update-u-boot + + - action: run + description: Create bmap file + postprocess: true + command: bmaptool create apertis-armhf.img > apertis-armhf.img.bmap + + - action: run + description: Compress image file + postprocess: true + command: gzip -f apertis-armhf.img diff --git a/static/examples/ospack-armhf.yaml b/static/examples/ospack-armhf.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cc41a521c9af854198dc9a63568e9b046692542d --- /dev/null +++ b/static/examples/ospack-armhf.yaml @@ -0,0 +1,39 @@ +architecture: armhf + +actions: + - action: debootstrap + suite: "17.06" + keyring-package: apertis-archive-keyring + components: + - target + mirror: https://repositories.apertis.org/apertis + variant: minbase + + - action: apt + description: Install basic packages + packages: [ procps, sudo, openssh-server, adduser ] + + - action: run + description: Setup user account + chroot: true + script: setup-user.sh + + - action: run + description: Configure the hostname + chroot: true + command: echo apertis > /etc/hostname + + - action: overlay + description: Overlay systemd-networkd configuration + source: networkd + + - action: run + description: Configure network services + chroot: true + script: setup-networking.sh + + - action: pack + compression: gz + file: ospack-armhf.tar.gz + + diff --git a/static/media/VirtualBox-add-disk-1.png b/static/media/VirtualBox-add-disk-1.png new file mode 100644 index 0000000000000000000000000000000000000000..427efac1cc679deeec860aa7aeb39ab8c5e39290 Binary files /dev/null and b/static/media/VirtualBox-add-disk-1.png differ diff --git a/static/media/VirtualBox-add-disk-2.png b/static/media/VirtualBox-add-disk-2.png new file mode 100644 index 0000000000000000000000000000000000000000..5eef99996bf932792150b7e63d43267c5759d676 Binary files /dev/null and b/static/media/VirtualBox-add-disk-2.png differ diff --git a/static/media/VirtualBox-add-disk-2a.png b/static/media/VirtualBox-add-disk-2a.png new file mode 100644 index 0000000000000000000000000000000000000000..ce16e4e5b857f78da50811bbd33dee568ab4fbb4 Binary files /dev/null and b/static/media/VirtualBox-add-disk-2a.png differ diff --git a/static/media/VirtualBox-add-disk-3.png b/static/media/VirtualBox-add-disk-3.png new file mode 100644 index 0000000000000000000000000000000000000000..8b92de4551fa4064a650977dad7eeeda6a58fce5 Binary files /dev/null and b/static/media/VirtualBox-add-disk-3.png differ diff --git a/static/media/VirtualBox-add-disk-3a.png b/static/media/VirtualBox-add-disk-3a.png new file mode 100644 index 0000000000000000000000000000000000000000..845fc322dc7fea0199b015e81a5b83501230b86b Binary files /dev/null and b/static/media/VirtualBox-add-disk-3a.png differ diff --git a/static/media/VirtualBox-add-disk-4.png b/static/media/VirtualBox-add-disk-4.png new file mode 100644 index 0000000000000000000000000000000000000000..945b1424eff619c52bd9d69114cb1f88a998a535 Binary files /dev/null and b/static/media/VirtualBox-add-disk-4.png differ diff --git a/static/media/VirtualBox-add-disk-5.png b/static/media/VirtualBox-add-disk-5.png new file mode 100644 index 0000000000000000000000000000000000000000..2da46aa56c5fe78efb5d78b124d2a5c4efe1c467 Binary files /dev/null and b/static/media/VirtualBox-add-disk-5.png differ diff --git a/static/media/apertis-functional-view.svg b/static/media/apertis-functional-view.svg new file mode 100644 index 0000000000000000000000000000000000000000..9340ceb178ff5c063e6bcbdedb318244a299dc59 --- /dev/null +++ b/static/media/apertis-functional-view.svg @@ -0,0 +1,1503 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:sketch="http://www.bohemiancoding.com/sketch/ns" + xmlns:osb="http://www.openswatchbook.org/uri/2009/osb" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + style="fill:none;stroke:none;stroke-linecap:square;stroke-miterlimit:10" + height="540" + width="960" + inkscape:version="1.0 (4035a4fb49, 2020-05-01)" + sodipodi:docname="apertis-functional-view.svg" + id="svg393" + stroke-miterlimit="10" + viewBox="0 0 960 540" + version="1.1"> + <metadata + id="metadata399"> + <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 + id="defs397"> + <linearGradient + osb:paint="solid" + id="linearGradient1372"> + <stop + id="stop1370" + offset="0" + style="stop-color:#30bc3a;stop-opacity:1;" /> + </linearGradient> + <clipPath + id="clipPath56" + clipPathUnits="userSpaceOnUse"> + <path + inkscape:connector-curvature="0" + id="path54" + d="M 0,0 H 449.2356 V 176.12346 H 0 Z" /> + </clipPath> + <path + inkscape:connector-curvature="0" + id="path-1" + d="M 0,1173.3333 H 2000 V 0 H 0 v 1173.3333 z" /> + </defs> + <sodipodi:namedview + inkscape:document-rotation="0" + inkscape:object-paths="true" + inkscape:guide-bbox="true" + showguides="true" + inkscape:current-layer="g391" + inkscape:window-maximized="1" + inkscape:window-y="0" + inkscape:window-x="0" + inkscape:cy="266.47019" + inkscape:cx="525.41081" + inkscape:zoom="0.86031325" + showgrid="false" + id="namedview395" + inkscape:window-height="1009" + inkscape:window-width="1920" + inkscape:pageshadow="2" + inkscape:pageopacity="0" + guidetolerance="10" + gridtolerance="10" + objecttolerance="10" + borderopacity="1" + bordercolor="#666666" + pagecolor="#ffffff"> + <sodipodi:guide + inkscape:locked="false" + id="guide4776" + orientation="0,1" + position="0.14003639,0.60397641" /> + </sodipodi:namedview> + <clipPath + id="g249fea5886_0_69.0"> + <path + style="clip-rule:nonzero" + inkscape:connector-curvature="0" + id="path2" + d="M 0,0 H 960 V 540 H 0 Z" /> + </clipPath> + <g + id="g391" + clip-path="url(#g249fea5886_0_69.0)"> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path7" + d="M 701.0971,207.11023 684.5617,196.55905" /> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;fill:#30bc3a;fill-opacity:1;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path9" + d="M 701.0971,207.11023 671.21309,189.05815" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path11" + d="M 704.7218,111.37795 688.18634,100.82677" /> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;fill:#30bc3a;fill-opacity:1;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path13" + d="m 704.7218,111.37795 -36.67245,14.51732" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path15" + d="M 847.8399,55.07349 H 952.56433 V 94.979004 H 847.8399 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path17" + d="M 847.8399,55.07349 H 952.56433 V 94.979004 H 847.8399 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path19" + d="m 858.1368,63.65437 h 5.03125 v 0.875004 h -4 v 2.75 h 3.76562 v 0.875 h -3.76562 v 2.78125 h 4 v 0.890625 h -5.03125 z m 7.58411,1.953129 1.875,5.140625 1.875,-5.140625 h 1.17187 l -2.48437,6.21875 h -1.125 l -2.46875,-6.21875 z m 10.46966,2.1875 q 0,-0.84375 -0.35937,-1.203125 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.01562,-0.109375 1.15625,0 1.79688,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.046875 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.546875 -0.60938,-0.5625 -0.60938,-1.390625 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.234375 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.546875 0.54687,-1.40625 z m 3.62,-6.265629 h 1.03125 v 8.859379 h -1.03125 z m 7.95056,7.625004 q -0.625,1.34375 -2.0625,1.34375 -1.04688,0 -1.70313,-0.578125 -0.64062,-0.578125 -0.64062,-1.8125 v -3.953125 h 1.03125 v 3.875 q 0,1.578125 1.45312,1.578125 0.84375,0 1.375,-0.640625 0.53125,-0.65625 0.54688,-1.671875 v -3.140625 h 1.03125 v 6.234375 h -1.03125 z m 7.70184,-2.796875 q 0,-0.84375 -0.35937,-1.203125 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.01562,-0.109375 1.15625,0 1.79688,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.046875 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.546875 -0.60938,-0.5625 -0.60938,-1.390625 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.234375 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.546875 0.54687,-1.40625 z m 6.87,2.40625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.203125 -0.92187,-0.859375 -0.15625,-0.328125 -0.15625,-0.78125 v -3.828125 h -1 v -0.78125 h 1 v -1.718754 h 1.01562 v 1.718754 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.953125 0.89063,0.953125 0.48437,0 1.07812,-0.234375 z m 1.82385,-6.046875 h 1.03125 v 6.234375 h -1.03125 z m 0.51562,-1.453125 q -0.3125,0 -0.5,-0.171879 -0.17187,-0.171875 -0.17187,-0.46875 0,-0.296875 0.17187,-0.46875 0.1875,-0.171875 0.5,-0.171875 0.3125,0 0.5,0.171875 0.1875,0.171875 0.1875,0.46875 0,0.296875 -0.1875,0.46875 -0.1875,0.171879 -0.5,0.171879 z m 5.6413,1.3125 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.421875 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.578125 0.79687,-2.421875 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.265625 q 0,-1.109375 -0.46875,-1.734375 -0.46875,-0.640625 -1.375,-0.640625 -0.89063,0 -1.375,0.640625 -0.48438,0.625 -0.48438,1.734375 0,1.109375 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.640625 0.5,-1.75 z m 4.16778,-1.90625 q 0.60938,-1.359375 2.09375,-1.359375 1.10938,0 1.71875,0.734375 0.625,0.734375 0.625,1.984375 v 3.65625 h -1.01562 v -3.65625 q 0,-0.890625 -0.42188,-1.34375 -0.42187,-0.453125 -1.20312,-0.453125 -0.78125,0 -1.26563,0.640625 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path21" + d="m 859.18365,82.52937 q 0.625,-1.078125 1.8125,-1.078125 1.20312,0 1.98437,0.890625 0.79688,0.890625 0.79688,2.359375 0,1.46875 -0.8125,2.375 -0.79688,0.890625 -1.95313,0.890625 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.921875 l -0.23437,1.09375 H 858.1524 V 78.96687 h 1.03125 z m 1.75,-0.15625 q -0.73438,0 -1.23438,0.46875 -0.5,0.46875 -0.51562,1.3125 v 1.015625 q 0,0.859375 0.5,1.375 0.51562,0.515625 1.25,0.515625 0.73437,0 1.26562,-0.640625 0.53125,-0.640625 0.53125,-1.703125 0,-1.078125 -0.53125,-1.703125 -0.51562,-0.640625 -1.26562,-0.640625 z m 7.23669,-0.921875 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.421875 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.578125 0.79687,-2.421875 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.265625 q 0,-1.109375 -0.46875,-1.734375 -0.46875,-0.640625 -1.375,-0.640625 -0.89063,0 -1.375,0.640625 -0.48438,0.625 -0.48438,1.734375 0,1.109375 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.640625 0.5,-1.75 z m 7.02716,-0.921875 q 0,-0.84375 -0.35938,-1.203125 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.01563,-0.109375 1.15625,0 1.79687,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.046875 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.546875 -0.60937,-0.5625 -0.60937,-1.390625 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.234375 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.546875 0.54688,-1.40625 z m 6.15124,-2.75 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 V 81.59187 h 1.03125 v 1.203125 q 0.46875,-1.296875 1.65625,-1.296875 0.375,0 0.70312,0.109375 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 6.60926,0.04687 v -3.5625 h 1.01562 v 8.859375 h -0.82812 l -0.125,-1.046875 q -0.29688,0.59375 -0.79688,0.890625 -0.5,0.296875 -1.07812,0.296875 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.890625 2,-0.890625 1.20312,0 1.8125,1.078125 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.640625 -0.51563,0.625 -0.51563,1.703125 0,1.0625 0.51563,1.703125 0.53125,0.640625 1.25,0.640625 0.73437,0 1.25,-0.484375 0.51562,-0.484375 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 5.29187,0.765625 q 0,-0.765625 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.296875 -0.34375,0.28125 -0.34375,0.609375 0,0.328125 0.26562,0.5625 0.26563,0.21875 0.82813,0.390625 l 1.25,0.421875 q 0.79687,0.234375 1.21875,0.625 0.42187,0.375 0.42187,1.046875 0,0.671875 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.546875 -0.6875,-0.5625 -0.71875,-1.421875 h 0.98437 q 0.0312,0.578125 0.46875,0.875 0.45313,0.296875 1.125,0.296875 0.6875,0 1.125,-0.28125 0.4375,-0.296875 0.4375,-0.6875 0,-0.40625 -0.26562,-0.609375 -0.25,-0.203125 -0.82813,-0.359375 l -1.21875,-0.40625 q -1.625,-0.484375 -1.625,-1.6875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path23" + d="M 18.220472,1.3608924 H 141.43307 V 60.447505 H 18.220472 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path25" + d="m 45.978928,28.886696 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.515625,0.390625 -0.546875,0.390625 -0.546875,0.953125 0,0.546875 0.34375,0.859375 0.359375,0.3125 1.109375,0.578125 l 2.671875,1.046875 q 1.375,0.53125 2.109375,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.265625,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.046875,0 -3.328125,-1 -1.421875,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.578125,1.921875 0.484375,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.671875,-0.390625 0.671875,-1.046875 0,-0.65625 -0.359375,-1 -0.359375,-0.359375 -1.171875,-0.671875 l -2.453125,-0.96875 q -1.421875,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.296875,-0.9375 2.078125,0 3.203125,0.96875 1.140625,0.953125 1.3125,2.671875 z m 10.152695,-3.640625 q 1.234375,0 2.25,0.40625 1.03125,0.40625 1.78125,1.203125 1.546875,1.671875 1.546875,4.796875 0,3.125 -1.546875,4.84375 -1.484375,1.59375 -4.046875,1.59375 -2.546875,0 -4.03125,-1.640625 -1.5625,-1.6875 -1.5625,-4.796875 0,-3.15625 1.5625,-4.828125 1.453125,-1.578125 4.046875,-1.578125 z m 3.265625,6.4375 q 0,-2.125 -0.890625,-3.265625 -0.875,-1.15625 -2.375,-1.15625 -1.5,0 -2.390625,1.15625 -0.890625,1.140625 -0.890625,3.265625 0,2.109375 0.890625,3.25 0.890625,1.125 2.390625,1.125 1.5,0 2.375,-1.125 0.890625,-1.140625 0.890625,-3.25 z m 6.789093,-6.1875 v 7.671875 q 0,1.515625 0.765625,2.1875 0.78125,0.65625 2,0.65625 1.21875,0 1.984375,-0.65625 0.765625,-0.671875 0.765625,-2.1875 v -7.671875 h 2.25 v 7.671875 q 0,2.359375 -1.3125,3.640625 -1.3125,1.28125 -3.6875,1.28125 -2.375,0 -3.6875,-1.28125 -1.3125,-1.28125 -1.3125,-3.640625 v -7.671875 z m 19.982193,3.78125 q 0,1.3125 -0.75,2.25 -0.734375,0.921875 -2.109375,1.28125 l 3.296875,5.015625 h -2.921875 l -2.71875,-4.8125 h -1.703125 v 4.8125 h -2.25 V 25.496071 h 4.5625 q 2.1875,0 3.40625,1.046875 1.1875,1 1.1875,2.734375 z m -4.796875,2.234375 q 1.234375,0 1.859375,-0.546875 0.625,-0.5625 0.625,-1.484375 0,-0.921875 -0.578125,-1.484375 -0.5625,-0.5625 -1.703125,-0.5625 h -2.3125 v 4.078125 z m 12.077133,-6.265625 q 1.140625,0 1.96875,0.28125 0.84375,0.265625 1.453125,0.765625 1.203125,0.96875 1.5625,2.71875 l -2.390625,0.4375 q -0.3125,-0.96875 -0.953125,-1.5625 -0.625,-0.609375 -1.578125,-0.609375 -1.296875,0 -2.09375,1.078125 -0.84375,1.1875 -0.84375,3.265625 0,2.078125 0.75,3.25 0.765625,1.171875 2.078125,1.171875 1.3125,0 1.96875,-0.640625 0.671875,-0.640625 0.671875,-1.640625 h 2.40625 q 0,2.0625 -1.328125,3.203125 -1.3125,1.125 -3.609375,1.125 -2.453125,0 -3.890625,-1.703125 -1.46875,-1.75 -1.46875,-4.75 0,-3.046875 1.5,-4.75 1.453125,-1.640625 3.796875,-1.640625 z m 7.390568,0.25 h 7.9375 v 1.9375 h -5.70313 v 3.25 h 5.34375 v 1.9375 h -5.34375 v 3.25 h 5.70313 v 1.953125 h -7.9375 z m 17.43257,3.390625 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.51563,0.390625 -0.54687,0.390625 -0.54687,0.953125 0,0.546875 0.34375,0.859375 0.35937,0.3125 1.10937,0.578125 l 2.67188,1.046875 q 1.375,0.53125 2.10937,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.26562,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04688,0 -3.32813,-1 -1.42187,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.57813,1.921875 0.48437,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67187,-0.390625 0.67187,-1.046875 0,-0.65625 -0.35937,-1 -0.35938,-0.359375 -1.17188,-0.671875 l -2.45312,-0.96875 q -1.42188,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.29687,-0.9375 2.07813,0 3.20313,0.96875 1.14062,0.953125 1.3125,2.671875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path27" + d="M 461.47992,1.3608924 H 584.6925 V 60.447505 H 461.47992 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path29" + d="m 483.18307,25.49607 h 4.98437 q 2.04688,0 3.17188,0.96875 1.0625,0.890625 1.0625,2.296875 0,1.046875 -0.57813,1.796875 -0.57812,0.734375 -1.625,1.03125 1.04688,0.21875 1.71875,0.953125 0.6875,0.71875 0.6875,1.859375 0,2.28125 -2.25,3.125 -0.85937,0.296875 -2.17187,0.296875 h -5 z m 4.9375,10.375 q 1.09375,0 1.57812,-0.4375 0.48438,-0.4375 0.48438,-1.15625 0,-0.734375 -0.51563,-1.171875 -0.5,-0.453125 -1.54687,-0.453125 h -2.6875 v 3.21875 z m -2.6875,-5.171875 h 2.64062 q 1,0 1.51563,-0.4375 0.51562,-0.4375 0.51562,-1.1875 0,-0.75 -0.51562,-1.1875 -0.5,-0.453125 -1.5,-0.453125 h -2.65625 z m 9.83926,-5.203125 h 2.25 v 12.328125 h -2.25 z m 8.09339,0 5.42187,8.734375 V 25.49607 h 2.25 v 12.328125 h -2.28125 l -5.60937,-9.046875 v 9.046875 h -2.23438 V 25.49607 Z m 13.7984,0 h 2.8125 l 4.04687,12.328125 h -2.375 l -0.84375,-2.65625 h -4.57812 l -0.875,2.65625 h -2.375 z m -0.375,7.984375 h 3.45312 l -1.70312,-5.3125 z m 18.36633,-4.203125 q 0,1.3125 -0.75,2.25 -0.73437,0.921875 -2.10937,1.28125 l 3.29687,5.015625 h -2.92187 l -2.71875,-4.8125 h -1.70313 v 4.8125 h -2.25 V 25.49607 h 4.5625 q 2.1875,0 3.40625,1.046875 1.1875,1 1.1875,2.734375 z m -4.79687,2.234375 q 1.23437,0 1.85937,-0.546875 0.625,-0.5625 0.625,-1.484375 0,-0.921875 -0.57812,-1.484375 -0.5625,-0.5625 -1.70313,-0.5625 h -2.3125 v 4.078125 z m 7.65527,-6.015625 h 2.25 v 12.328125 h -2.25 z m 5.65588,0 h 7.9375 v 1.9375 h -5.70312 v 3.25 h 5.34375 v 1.9375 h -5.34375 v 3.25 h 5.70312 v 1.953125 h -7.9375 z m 17.43256,3.390625 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.51562,0.390625 -0.54688,0.390625 -0.54688,0.953125 0,0.546875 0.34375,0.859375 0.35938,0.3125 1.10938,0.578125 l 2.67187,1.046875 q 1.375,0.53125 2.10938,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.26563,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04687,0 -3.32812,-1 -1.42188,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.57812,1.921875 0.48438,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67188,-0.390625 0.67188,-1.046875 0,-0.65625 -0.35938,-1 -0.35937,-0.359375 -1.17187,-0.671875 l -2.45313,-0.96875 q -1.42187,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.29688,-0.9375 2.07812,0 3.20312,0.96875 1.14063,0.953125 1.3125,2.671875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path31" + d="M 651.3648,1.3608924 H 850.64043 V 60.447505 H 651.3648 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path33" + d="m 696.74347,25.49607 h 2.25 v 12.328125 h -2.25 z m 8.89026,0 3.375,7.328125 3.375,-7.328125 h 3.10937 v 12.328125 h -2.26562 V 28.46482 l -3.5,8.015625 h -1.45313 l -3.60937,-8.296875 v 9.640625 h -2.25 V 25.49607 Z m 15.9306,0 h 2.8125 l 4.04688,12.328125 h -2.375 l -0.84375,-2.65625 h -4.57813 l -0.875,2.65625 h -2.375 z m -0.375,7.984375 h 3.45313 l -1.70313,-5.3125 z m 16.77259,2.390625 q -0.79688,2.21875 -3.0625,2.21875 -2.3125,0 -3.8125,-1.75 -1.5625,-1.796875 -1.5625,-4.609375 0,-2.96875 1.67187,-4.75 1.625,-1.734375 4.15625,-1.734375 1.73438,0 2.90625,0.75 1.17188,0.75 1.82813,2.359375 l -2.29688,0.53125 q -1,-1.609375 -2.54687,-1.609375 -1.40625,0 -2.32813,1.203125 -0.96875,1.21875 -0.96875,3.25 0,1.90625 0.875,3.109375 0.84375,1.171875 2.26563,1.171875 1.21875,0 2,-0.765625 0.79687,-0.796875 0.79687,-2.1875 v -0.07813 l -2.76562,-0.0625 v -1.4375 h 4.92187 v 6.34375 h -1.82812 z m 5.05212,-10.375 h 7.9375 v 1.9375 h -5.70313 v 3.25 h 5.34375 v 1.9375 h -5.34375 v 3.25 h 5.70313 v 1.953125 h -7.9375 z m 17.43256,3.390625 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.51563,0.390625 -0.54687,0.390625 -0.54687,0.953125 0,0.546875 0.34375,0.859375 0.35937,0.3125 1.10937,0.578125 l 2.67188,1.046875 q 1.375,0.53125 2.10937,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.26562,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04688,0 -3.32813,-1 -1.42187,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.57813,1.921875 0.48437,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67187,-0.390625 0.67187,-1.046875 0,-0.65625 -0.35937,-1 -0.35938,-0.359375 -1.17188,-0.671875 l -2.45312,-0.96875 q -1.42188,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.29687,-0.9375 2.07813,0 3.20313,0.96875 1.14062,0.953125 1.3125,2.671875 z m 9.54333,-5.21875 h 2.29688 l -4.90625,15.6875 h -2.28125 z m 13.83704,5.609375 q 0,1.3125 -0.75,2.25 -0.73438,0.921875 -2.10938,1.28125 l 3.29688,5.015625 h -2.92188 l -2.71875,-4.8125 h -1.70312 v 4.8125 h -2.25 V 25.49607 h 4.5625 q 2.1875,0 3.40625,1.046875 1.1875,1 1.1875,2.734375 z m -4.79688,2.234375 q 1.23438,0 1.85938,-0.546875 0.625,-0.5625 0.625,-1.484375 0,-0.921875 -0.57813,-1.484375 -0.5625,-0.5625 -1.70312,-0.5625 h -2.3125 v 4.078125 z m 7.65521,-6.015625 h 7.76563 v 1.9375 h -5.51563 v 3.25 h 5.04688 v 1.921875 h -5.04688 v 5.21875 h -2.25 z m 16.6894,3.390625 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.51563,0.390625 -0.54687,0.390625 -0.54687,0.953125 0,0.546875 0.34375,0.859375 0.35937,0.3125 1.10937,0.578125 l 2.67188,1.046875 q 1.375,0.53125 2.10937,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.26562,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04688,0 -3.32813,-1 -1.42187,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.57813,1.921875 0.48437,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67187,-0.390625 0.67187,-1.046875 0,-0.65625 -0.35937,-1 -0.35938,-0.359375 -1.17188,-0.671875 l -2.45312,-0.96875 q -1.42188,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.29687,-0.9375 2.07813,0 3.20313,0.96875 1.14062,0.953125 1.3125,2.671875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path35" + d="M 838.5958,1.3608924 H 961.80839 V 60.447505 H 838.5958 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path37" + d="m 860.8068,25.49607 h 9.89062 v 1.9375 h -3.82812 v 10.390625 h -2.23438 V 27.43357 h -3.82812 z m 14.42517,0 h 2.8125 l 4.04688,12.328125 h -2.375 l -0.84375,-2.65625 h -4.57813 l -0.875,2.65625 h -2.375 z m -0.375,7.984375 h 3.45313 l -1.70313,-5.3125 z m 18.36627,-4.203125 q 0,1.3125 -0.75,2.25 -0.73437,0.921875 -2.10937,1.28125 l 3.29687,5.015625 h -2.92187 l -2.71875,-4.8125 h -1.70313 v 4.8125 h -2.25 V 25.49607 h 4.5625 q 2.1875,0 3.40625,1.046875 1.1875,1 1.1875,2.734375 z m -4.79687,2.234375 q 1.23437,0 1.85937,-0.546875 0.625,-0.5625 0.625,-1.484375 0,-0.921875 -0.57812,-1.484375 -0.5625,-0.5625 -1.70313,-0.5625 h -2.3125 v 4.078125 z m 15.21777,4.359375 q -0.79687,2.21875 -3.0625,2.21875 -2.3125,0 -3.8125,-1.75 -1.5625,-1.796875 -1.5625,-4.609375 0,-2.96875 1.67188,-4.75 1.625,-1.734375 4.15625,-1.734375 1.73437,0 2.90625,0.75 1.17187,0.75 1.82812,2.359375 l -2.29687,0.53125 q -1,-1.609375 -2.54688,-1.609375 -1.40625,0 -2.32812,1.203125 -0.96875,1.21875 -0.96875,3.25 0,1.90625 0.875,3.109375 0.84375,1.171875 2.26562,1.171875 1.21875,0 2,-0.765625 0.79688,-0.796875 0.79688,-2.1875 v -0.07813 l -2.76563,-0.0625 v -1.4375 h 4.92188 v 6.34375 h -1.82813 z m 5.05219,-10.375 h 7.9375 v 1.9375 h -5.70313 v 3.25 h 5.34375 v 1.9375 h -5.34375 v 3.25 h 5.70313 v 1.953125 h -7.9375 z m 9.29193,0 h 9.89062 v 1.9375 h -3.82812 v 10.390625 h -2.23438 V 27.43357 h -3.82812 z m 18.06573,3.390625 q -0.3125,-1.609375 -2.28125,-1.609375 -0.96875,0 -1.51562,0.390625 -0.54688,0.390625 -0.54688,0.953125 0,0.546875 0.34375,0.859375 0.35938,0.3125 1.10938,0.578125 l 2.67187,1.046875 q 1.375,0.53125 2.10938,1.34375 0.75,0.796875 0.75,2.015625 0,1.671875 -1.26563,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04687,0 -3.32812,-1 -1.42188,-1.109375 -1.5,-3.125 h 2.21875 q 0,1.515625 1.57812,1.921875 0.48438,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67188,-0.390625 0.67188,-1.046875 0,-0.65625 -0.35938,-1 -0.35937,-0.359375 -1.17187,-0.671875 l -2.45313,-0.96875 q -1.42187,-0.546875 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.421875 1.21875,-0.9375 3.29688,-0.9375 2.07812,0 3.20312,0.96875 1.14063,0.953125 1.3125,2.671875 z" /> + <path + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path39" + d="m 8,476.51968 h 451.9685 v 59.08664 H 8 Z" /> + <path + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path41" + d="m 8,476.51968 h 451.9685 v 59.08664 H 8 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path45" + d="m 21.140625,509.00717 q 1.3125,0 2.109375,0.65625 0.8125,0.65625 1.109375,1.70312 L 23.25,511.58529 q -0.25,-0.76562 -0.8125,-1.20312 -0.546875,-0.45313 -1.296875,-0.45313 -1.015625,0 -1.703125,0.85938 -0.671875,0.84375 -0.671875,2.37503 0,1.53125 0.609375,2.45313 0.609375,0.92187 1.765625,0.92187 0.984375,0 1.546875,-0.51562 0.5625,-0.51563 0.5625,-1.35938 h 1.109375 q 0,1.29688 -0.875,2.04688 -0.875,0.75 -2.40625,0.75 -1.53125,0 -2.484375,-1.17188 -0.9375,-1.17187 -0.9375,-3.125 0,-1.96878 0.96875,-3.06253 0.984375,-1.09375 2.515625,-1.09375 z m 7.482605,7.62503 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92188 -0.828125,1.4375 -0.6875,0.51563 -1.703125,0.51563 -1.25,0 -2.03125,-0.89063 -0.765625,-0.89062 -0.765625,-2.375 0,-1.48437 0.78125,-2.35941 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.953125,1.01562 0.640625,1.01566 0.4375,2.46879 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.765625,-4.70316 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54691 -0.453125,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71879 z m 4.942078,0.37504 q 0.609375,-1.35941 2.09375,-1.35941 1.109375,0 1.71875,0.73438 0.625,0.7344 0.625,1.9844 v 3.65625 h -1.015625 v -3.65625 q 0,-0.89062 -0.421875,-1.34375 -0.421875,-0.45316 -1.203125,-0.45316 -0.78125,0 -1.265625,0.64066 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21878 h 0.890625 z m 10.30246,4.82812 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20312 -0.921875,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82816 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.81253 q 0,0.95313 0.890625,0.95313 0.484375,0 1.078125,-0.23438 z m 4.292602,-5.15628 q -1.46875,0 -1.515625,2.31253 v 3.03125 h -1.03125 v -6.2344 h 1.03125 v 1.20315 q 0.46875,-1.2969 1.65625,-1.2969 0.375,0 0.703125,0.10937 l -0.04687,1.00003 Q 49.33225,511.97592 48.926,511.97592 Z m 6.390503,1.31253 q 0,-0.84375 -0.359375,-1.20312 -0.34375,-0.37504 -1.015625,-0.37504 -0.65625,0 -1.078125,0.28125 -0.40625,0.26566 -0.40625,0.82816 h -1.125 q 0,-1.42191 1.53125,-1.76566 0.46875,-0.10937 1.015625,-0.10937 1.15625,0 1.796875,0.59375 0.65625,0.57816 0.65625,1.78128 v 4 h -0.875 l -0.109375,-1.04687 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.54688 -0.609375,-0.5625 -0.609375,-1.39062 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.23438 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.54687 0.546875,-1.40625 z m 3.61998,-6.26565 h 1.03125 v 8.8594 h -1.03125 z m 10.747696,4.82815 q 0,-0.84375 -0.359375,-1.20312 -0.34375,-0.37504 -1.015625,-0.37504 -0.65625,0 -1.078125,0.28125 -0.40625,0.26566 -0.40625,0.82816 h -1.125 q 0,-1.42191 1.53125,-1.76566 0.46875,-0.10937 1.015625,-0.10937 1.15625,0 1.796875,0.59375 0.65625,0.57816 0.65625,1.78128 v 4 h -0.875 l -0.109375,-1.04687 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.54688 -0.609375,-0.5625 -0.609375,-1.39062 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.23438 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.54687 0.546875,-1.40625 z m 7.83873,1.35938 q -0.625,1.34375 -2.0625,1.34375 -1.046875,0 -1.703125,-0.57813 -0.640625,-0.57812 -0.640625,-1.8125 v -3.95315 h 1.03125 v 3.87503 q 0,1.57812 1.453125,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.546875,-1.67188 v -3.14065 h 1.03125 v 6.2344 h -1.03125 z m 7.108063,1.04687 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20312 -0.921875,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82816 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.81253 q 0,0.95313 0.890625,0.95313 0.484375,0 1.078125,-0.23438 z m 3.995727,-6.18753 q 1.296875,0 2.09375,0.84375 0.8125,0.84378 0.8125,2.42191 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57813 0.796875,-2.42191 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26566 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64065 -1.375,-0.64065 -0.890625,0 -1.375,0.64065 -0.484375,0.625 -0.484375,1.73438 0,1.10937 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.167755,-1.90625 q 0.609375,-1.35941 2.09375,-1.35941 0.8125,0 1.359375,0.40625 0.546875,0.39063 0.78125,1.09378 0.59375,-1.50003 2.171871,-1.50003 1.125,0 1.73438,0.73438 0.60937,0.7344 0.60937,1.9844 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45316 -1.21875,-0.45316 -0.781246,0 -1.218746,0.65629 -0.4375,0.64062 -0.4375,1.78125 v 3.01562 h -1.015625 v -3.65625 q 0,-0.89062 -0.421875,-1.34375 -0.421875,-0.45316 -1.203125,-0.45316 -0.78125,0 -1.265625,0.64066 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21878 h 0.890625 z m 15.321126,0.98437 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.37504 -1.01562,-0.37504 -0.65625,0 -1.07813,0.28125 -0.40625,0.26566 -0.40625,0.82816 h -1.125 q 0,-1.42191 1.53125,-1.76566 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57816 0.65625,1.78128 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 6.86998,2.40625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82816 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.81253 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 1.82385,-6.0469 h 1.03125 v 6.2344 h -1.03125 z m 0.51562,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17187,-0.17188 -0.17187,-0.46875 0,-0.29688 0.17187,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 5.64134,1.3125 q 1.29688,0 2.09375,0.84375 0.8125,0.84378 0.8125,2.42191 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57813 0.79687,-2.42191 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26566 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64065 -1.375,-0.64065 -0.89063,0 -1.375,0.64065 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16775,-1.90625 q 0.60938,-1.35941 2.09375,-1.35941 1.10938,0 1.71875,0.73438 0.625,0.7344 0.625,1.9844 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45316 -1.20312,-0.45316 -0.78125,0 -1.26563,0.64066 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21878 h 0.89063 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path47" + d="m 415.9895,479.4034 h 39.37009 v 54.62595 H 415.9895 Z" /> + <path + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path56" + d="m 503.3491,475.67453 h 451.96848 v 59.08664 H 503.3491 Z" /> + <path + style="fill-rule:evenodd;stroke:#a64d79;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path58" + d="m 503.3491,475.67453 h 451.96848 v 59.08664 H 503.3491 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path62" + d="m 516.4897,508.16205 q 1.3125,0 2.10937,0.65625 0.8125,0.65625 1.10938,1.70313 l -1.10938,0.21875 q -0.25,-0.76563 -0.8125,-1.20313 -0.54687,-0.45312 -1.29687,-0.45312 -1.01563,0 -1.70313,0.85937 -0.67187,0.84375 -0.67187,2.375 0,1.53125 0.60937,2.45313 0.60938,0.92187 1.76563,0.92187 0.98437,0 1.54687,-0.51562 0.5625,-0.51563 0.5625,-1.35938 h 1.10938 q 0,1.29688 -0.875,2.04688 -0.875,0.75 -2.40625,0.75 -1.53125,0 -2.48438,-1.17188 -0.9375,-1.17187 -0.9375,-3.125 0,-1.96875 0.96875,-3.0625 0.98438,-1.09375 2.51563,-1.09375 z m 5.34198,0.14063 h 1.03125 v 8.17187 h -1.03125 z m 9.91962,0.1875 q -0.42188,-0.17188 -0.67188,-0.17188 -0.45312,0 -0.71875,0.23438 -0.26562,0.21875 -0.26562,0.76562 v 0.9375 h 1.29687 v 0.70313 h -1.29687 v 5.51562 h -1.01563 v -5.51562 h -1.01562 v -0.70313 h 1.01562 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.51563,-0.4375 1.17188,-0.4375 0.67187,0 1.1875,0.17187 z m 3.79028,1.60937 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57813 0.79687,-2.42188 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89063,0 -1.375,0.64062 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 5.71459,-2.23438 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70312,0.10937 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 8.96888,5.15625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 3.90197,-0.5 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.62958,0.70312 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76562,-0.46875 1.125,0 1.75,0.46875 0.64063,0.46875 0.67188,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64063,0 -0.98438,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26563,0.5625 0.26562,0.21875 0.82812,0.39063 l 1.25,0.42187 q 0.79688,0.23438 1.21875,0.625 0.42188,0.375 0.42188,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92188,0.53125 -1.23437,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98438 q 0.0312,0.57812 0.46875,0.875 0.45312,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26563,-0.60937 -0.25,-0.20313 -0.82812,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 10.58868,4.5 q -1.125,0.53125 -2.04687,0.21875 -0.65625,-0.20312 -0.92188,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01563 v 1.71875 h 1.95312 v 0.78125 h -1.95312 v 3.8125 q 0,0.95313 0.89062,0.95313 0.48438,0 1.07813,-0.23438 z m 1.82385,-6.04687 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 4.39136,2.67188 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 H 581.123 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 7.31805,4.82812 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path64" + d="m 860.69293,495.78085 h 90 v 34.99997 h -90 z" /> + <path + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path73" + d="M 329.83597,56.632545 H 440.57611 V 443.18372 H 329.83597 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path75" + d="M 329.83597,56.632545 H 440.57611 V 443.18372 H 329.83597 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path77" + d="m 344.30472,70.398796 q 1.04687,0 1.90625,0.34375 0.85937,0.34375 1.48437,1.015625 1.3125,1.40625 1.3125,4.03125 0,2.640625 -1.3125,4.078125 -1.25,1.34375 -3.40625,1.34375 -2.14062,0 -3.39062,-1.375 -1.3125,-1.421875 -1.3125,-4.046875 0,-2.65625 1.3125,-4.0625 1.23437,-1.328125 3.40625,-1.328125 z m 2.75,5.421875 q 0,-1.78125 -0.75,-2.75 -0.73438,-0.96875 -2,-0.96875 -1.26563,0 -2.01563,0.96875 -0.75,0.96875 -0.75,2.75 0,1.78125 0.75,2.734375 0.75,0.953125 2.01563,0.953125 1.26562,0 2,-0.953125 0.75,-0.953125 0.75,-2.734375 z m 5.92801,-1.546875 q 0.73437,-1.265625 2.23437,-1.265625 1.4375,0 2.46875,1.09375 1.09375,1.140625 1.09375,3 0,1.875 -1.10937,3.03125 -1.03125,1.078125 -2.45313,1.078125 -1.42187,0 -2.07812,-0.84375 v 4.421875 h -1.89063 V 73.211296 h 1.5625 z m 1.90625,5.234375 q 0.32812,0 0.6875,-0.140625 0.35937,-0.15625 0.65625,-0.453125 0.64062,-0.671875 0.64062,-1.796875 0,-1.140625 -0.5625,-1.765625 -0.54687,-0.640625 -1.34375,-0.640625 -0.78125,0 -1.29687,0.453125 -0.5,0.453125 -0.53125,1.296875 v 1.390625 q 0,0.75 0.53125,1.21875 0.5,0.4375 1.21875,0.4375 z m 11.54129,-5.359375 q 0.40625,0.5 0.60937,1.1875 0.20313,0.671875 0.20313,1.234375 0,0.546875 -0.0781,1 h -5.01562 q 0.0312,0.9375 0.45312,1.53125 0.4375,0.59375 1.32813,0.59375 1.15625,0 1.39062,-1.015625 h 1.90625 q -0.20312,1.15625 -1.07812,1.828125 -0.90625,0.703125 -2.21875,0.703125 -1.54688,0 -2.57813,-1.109375 -1.07812,-1.171875 -1.07812,-3 0,-1.875 1.07812,-3 1.01563,-1.09375 2.57813,-1.09375 1.60937,0 2.5,1.140625 z m -2.48438,0.359375 q -0.8125,0 -1.26562,0.53125 -0.4375,0.515625 -0.51563,1.328125 h 3.3125 q 0,-1.265625 -0.79687,-1.6875 -0.3125,-0.171875 -0.73438,-0.171875 z m 7.40189,0.04687 q 0.76562,-1.546875 2.46875,-1.546875 1.4375,0 2.15625,0.953125 0.73437,0.9375 0.73437,2.484375 v 4.546875 h -1.89062 v -4.546875 q 0,-0.859375 -0.42188,-1.296875 -0.40625,-0.4375 -1.15625,-0.4375 -0.75,0 -1.29687,0.671875 -0.53125,0.671875 -0.5625,2.015625 v 3.59375 h -1.89063 v -7.78125 h 1.65625 z m 12.15665,-3.953125 h 4.20312 q 1.71875,0 2.67188,0.828125 0.89062,0.75 0.89062,1.9375 0,0.875 -0.5,1.5 -0.48437,0.625 -1.35937,0.875 0.875,0.171875 1.45312,0.796875 0.57813,0.609375 0.57813,1.578125 0,1.921875 -1.90625,2.625 -0.71875,0.25 -1.8125,0.25 h -4.21875 z m 4.15625,8.75 q 0.92187,0 1.32812,-0.375 0.40625,-0.375 0.40625,-0.96875 0,-0.609375 -0.42187,-0.984375 -0.42188,-0.390625 -1.3125,-0.390625 h -2.26563 v 2.71875 z m -2.26563,-4.359375 h 2.21875 q 0.85938,0 1.28125,-0.359375 0.4375,-0.375 0.4375,-1 0,-0.640625 -0.42187,-1.015625 -0.42188,-0.375 -1.28125,-0.375 h -2.23438 z m 13.64926,4.59375 q -0.73437,1.546875 -2.375,1.546875 -2.0625,0 -2.71875,-1.609375 -0.23437,-0.5625 -0.23437,-1.359375 v -4.96875 h 1.89062 v 4.765625 q 0,0.78125 0.35938,1.15625 0.375,0.375 0.90625,0.375 0.54687,0 0.90625,-0.15625 0.375,-0.15625 0.64062,-0.453125 0.59375,-0.6875 0.625,-1.84375 v -3.84375 h 1.89063 v 7.796875 h -1.89063 z m 5.01639,-6.390625 h 1.89063 v 7.796875 h -1.89063 z m -0.21875,-2.484375 q 0,-0.515625 0.29688,-0.8125 0.3125,-0.296875 0.875,-0.296875 0.54687,0 0.85937,0.296875 0.3125,0.296875 0.3125,0.8125 0,0.5 -0.3125,0.796875 -0.3125,0.296875 -0.85937,0.296875 -0.5625,0 -0.875,-0.296875 -0.29688,-0.296875 -0.29688,-0.796875 z m 5.31052,-0.6875 h 1.89062 v 10.96875 h -1.89062 z m 9.94214,9.765625 q -0.71875,1.421875 -2.20313,1.421875 -1.5,0 -2.5,-1.125 -1.04687,-1.1875 -1.04687,-3.015625 0,-1.828125 1,-2.953125 0.96875,-1.109375 2.42187,-1.109375 1.46875,0 2.20313,1.171875 v -4.15625 h 1.90625 v 10.96875 h -1.5625 z m -1.96875,-5.078125 q -0.79688,0 -1.34375,0.65625 -0.53125,0.640625 -0.53125,1.734375 0,1.078125 0.54687,1.75 0.54688,0.65625 1.375,0.65625 0.6875,0 1.23438,-0.546875 0.5625,-0.5625 0.5625,-1.40625 v -1.015625 q -0.0312,-0.828125 -0.5625,-1.359375 -0.48438,-0.46875 -1.28125,-0.46875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path79" + d="m 345.77347,92.47692 q -0.25,-1.359375 -1.90625,-1.359375 -0.82813,0 -1.28125,0.328125 -0.45313,0.328125 -0.45313,0.796875 0,0.453125 0.29688,0.71875 0.29687,0.265625 0.92187,0.484375 l 2.25,0.890625 q 1.15625,0.4375 1.78125,1.125 0.625,0.671875 0.625,1.703125 0,1.40625 -1.0625,2.234375 -1.04687,0.812505 -3,0.812505 -1.73437,0 -2.8125,-0.843755 -1.1875,-0.921875 -1.25,-2.625 h 1.85938 q 0,1.28125 1.32812,1.625 0.40625,0.109375 1.0625,0.109375 0.65625,0 1.21875,-0.328125 0.5625,-0.328125 0.5625,-0.875 0,-0.5625 -0.3125,-0.859375 -0.29687,-0.296875 -0.98437,-0.546875 l -2.0625,-0.8125 q -1.20313,-0.46875 -1.84375,-1.09375 -0.64063,-0.625 -0.64063,-1.734375 0,-1.296875 1,-2.046875 1.03125,-0.78125 2.78125,-0.78125 1.75,0 2.70313,0.8125 0.95312,0.8125 1.09375,2.265625 z m 10.17676,0.671875 q 0.40625,0.5 0.60937,1.1875 0.20313,0.671875 0.20313,1.234375 0,0.546875 -0.0781,1 h -5.01562 q 0.0312,0.9375 0.45312,1.53125 0.4375,0.59375 1.32813,0.59375 1.15625,0 1.39062,-1.015625 h 1.90625 q -0.20312,1.15625 -1.07812,1.828125 -0.90625,0.70313 -2.21875,0.70313 -1.54688,0 -2.57813,-1.10938 -1.07812,-1.171875 -1.07812,-3 0,-1.875 1.07812,-3 1.01563,-1.09375 2.57813,-1.09375 1.60937,0 2.5,1.140625 z m -2.48438,0.359375 q -0.8125,0 -1.26562,0.53125 -0.4375,0.515625 -0.51563,1.328125 h 3.3125 q 0,-1.265625 -0.79687,-1.6875 -0.3125,-0.171875 -0.73438,-0.171875 z m 7.43314,0.25 q 0.70312,-1.6875 2.10937,-1.6875 0.28125,0 0.6875,0.109375 l -0.0312,1.890625 q -0.4375,-0.09375 -0.875,-0.09375 -1.89062,0 -1.89062,2.609375 v 3.40625 h -1.89063 V 92.19567 h 1.89063 z m 5.65604,-1.546875 1.76562,5.90625 1.79688,-5.90625 h 2.17187 l -2.89062,7.78125 h -2.125 l -2.90625,-7.78125 z m 7.56964,-0.01563 h 1.89062 v 7.796875 h -1.89062 z m -0.21875,-2.484375 q 0,-0.515625 0.29687,-0.8125 0.3125,-0.296875 0.875,-0.296875 0.54688,0 0.85938,0.296875 0.3125,0.296875 0.3125,0.8125 0,0.5 -0.3125,0.796875 -0.3125,0.296875 -0.85938,0.296875 -0.5625,0 -0.875,-0.296875 -0.29687,-0.296875 -0.29687,-0.796875 z m 8.27926,2.296875 q 0.73438,0 1.3125,0.25 0.59375,0.25 0.98438,0.640625 0.79687,0.78125 0.95312,1.9375 l -1.90625,0.04687 q -0.14062,-0.5 -0.48437,-0.828125 -0.34375,-0.34375 -0.79688,-0.34375 -0.4375,0 -0.76562,0.140625 -0.3125,0.125 -0.54688,0.40625 -0.54687,0.671875 -0.54687,1.859375 0,1.1875 0.51562,1.796875 0.51563,0.59375 1.23438,0.59375 0.73437,0 1.0625,-0.34375 0.32812,-0.34375 0.32812,-0.9375 h 1.90625 q 0,1.28125 -0.85937,2.125 -0.85938,0.85938 -2.40625,0.85938 -1.54688,0 -2.57813,-1.10938 -1.10937,-1.203125 -1.10937,-3 0,-1.890625 1.10937,-3.015625 1.03125,-1.078125 2.59375,-1.078125 z m 10.93314,1.140625 q 0.40625,0.5 0.60937,1.1875 0.20313,0.671875 0.20313,1.234375 0,0.546875 -0.0781,1 h -5.01562 q 0.0312,0.9375 0.45312,1.53125 0.4375,0.59375 1.32813,0.59375 1.15625,0 1.39062,-1.015625 h 1.90625 q -0.20312,1.15625 -1.07812,1.828125 -0.90625,0.703135 -2.21875,0.703135 -1.54688,0 -2.57813,-1.109385 -1.07812,-1.171875 -1.07812,-3 0,-1.875 1.07812,-3 1.01563,-1.09375 2.57813,-1.09375 1.60937,0 2.5,1.140625 z m -2.48438,0.359375 q -0.8125,0 -1.26562,0.53125 -0.4375,0.515625 -0.51563,1.328125 h 3.3125 q 0,-1.265625 -0.79687,-1.6875 -0.3125,-0.171875 -0.73438,-0.171875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path81" + d="m 343.3516,120.88317 q -3.34375,-2.98437 -3.34375,-6.98437 0,-4.03125 3.34375,-6.96875 l 1.35938,0.98437 q -1.375,1.45313 -2.0625,2.90625 -0.6875,1.4375 -0.6875,3.07813 0,1.65625 0.6875,3.09375 0.6875,1.42187 2.0625,2.85937 z m 7.35312,-12.48437 q 1.04687,0 1.90625,0.34375 0.85937,0.34375 1.48437,1.01562 1.3125,1.40625 1.3125,4.03125 0,2.64063 -1.3125,4.07813 -1.25,1.34375 -3.40625,1.34375 -2.14062,0 -3.39062,-1.375 -1.3125,-1.42188 -1.3125,-4.04688 0,-2.65625 1.3125,-4.0625 1.23437,-1.32812 3.40625,-1.32812 z m 2.75,5.42187 q 0,-1.78125 -0.75,-2.75 -0.73438,-0.96875 -2,-0.96875 -1.26563,0 -2.01563,0.96875 -0.75,0.96875 -0.75,2.75 0,1.78125 0.75,2.73438 0.75,0.95312 2.01563,0.95312 1.26562,0 2,-0.95312 0.75,-0.95313 0.75,-2.73438 z m 4.19366,-5.21875 h 4.20313 q 1.71875,0 2.67187,0.82813 0.89063,0.75 0.89063,1.9375 0,0.875 -0.5,1.5 -0.48438,0.625 -1.35938,0.875 0.875,0.17187 1.45313,0.79687 0.57812,0.60938 0.57812,1.57813 0,1.92187 -1.90625,2.625 -0.71875,0.25 -1.8125,0.25 h -4.21875 z m 4.15625,8.75 q 0.92188,0 1.32813,-0.375 0.40625,-0.375 0.40625,-0.96875 0,-0.60937 -0.42188,-0.98437 -0.42187,-0.39063 -1.3125,-0.39063 h -2.26562 v 2.71875 z m -2.26562,-4.35937 h 2.21875 q 0.85937,0 1.28125,-0.35938 0.4375,-0.375 0.4375,-1 0,-0.64062 -0.42188,-1.01562 -0.42187,-0.375 -1.28125,-0.375 h -2.23437 z m 13.93051,-1.51563 q -0.25,-1.35937 -1.90625,-1.35937 -0.82813,0 -1.28125,0.32812 -0.45313,0.32813 -0.45313,0.79688 0,0.45312 0.29688,0.71875 0.29687,0.26562 0.92187,0.48437 l 2.25,0.89063 q 1.15625,0.4375 1.78125,1.125 0.625,0.67187 0.625,1.70312 0,1.40625 -1.0625,2.23438 -1.04687,0.8125 -3,0.8125 -1.73437,0 -2.8125,-0.84375 -1.1875,-0.92188 -1.25,-2.625 h 1.85938 q 0,1.28125 1.32812,1.625 0.40625,0.10937 1.0625,0.10937 0.65625,0 1.21875,-0.32812 0.5625,-0.32813 0.5625,-0.875 0,-0.5625 -0.3125,-0.85938 -0.29687,-0.29687 -0.98437,-0.54687 l -2.0625,-0.8125 q -1.20313,-0.46875 -1.84375,-1.09375 -0.64063,-0.625 -0.64063,-1.73438 0,-1.29687 1,-2.04687 1.03125,-0.78125 2.78125,-0.78125 1.75,0 2.70313,0.8125 0.95312,0.8125 1.09375,2.26562 z m 5.16116,-4.54687 q 3.34375,2.96875 3.34375,6.96875 0,3.96875 -3.34375,6.98437 l -1.375,-1.03125 q 1.39063,-1.4375 2.07813,-2.85937 0.6875,-1.4375 0.6875,-3.09375 0,-1.64063 -0.70313,-3.07813 -0.6875,-1.45312 -2.0625,-2.90625 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path83" + d="m 342.9766,143.12006 q 1.3125,0 2.10938,0.65625 0.8125,0.65625 1.10937,1.70312 l -1.10937,0.21875 q -0.25,-0.76562 -0.8125,-1.20312 -0.54688,-0.45313 -1.29688,-0.45313 -1.01562,0 -1.70312,0.85938 -0.67188,0.84375 -0.67188,2.375 0,1.53125 0.60938,2.45312 0.60937,0.92188 1.76562,0.92188 0.98438,0 1.54688,-0.51563 0.5625,-0.51562 0.5625,-1.35937 h 1.10937 q 0,1.29687 -0.875,2.04687 -0.875,0.75 -2.40625,0.75 -1.53125,0 -2.48437,-1.17187 -0.9375,-1.17188 -0.9375,-3.125 0,-1.96875 0.96875,-3.0625 0.98437,-1.09375 2.51562,-1.09375 z m 7.4826,7.625 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 4.94208,0.375 q 0.60937,-1.35937 2.09375,-1.35937 1.10937,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 10.30246,4.82813 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 4.2926,-5.15625 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70312,0.10938 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 6.3905,1.3125 q 0,-0.84375 -0.35937,-1.20313 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01562,-0.10937 1.15625,0 1.79688,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04688 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54687 -0.60938,-0.5625 -0.60938,-1.39063 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23437 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54688 0.54687,-1.40625 z m 3.61997,-6.26563 h 1.03125 v 8.85938 h -1.03125 z m 3.79437,2.625 h 1.03125 v 6.23438 h -1.03125 z m 0.51563,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 2.78195,6.85937 3.65625,-4.54687 h -3.65625 v -0.84375 h 4.8125 v 0.84375 l -3.60938,4.54687 h 3.60938 v 0.82813 h -4.8125 z m 9.09646,0.14063 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 8.0202,0.0937 v -3.5625 h 1.01563 v 8.85938 h -0.82813 l -0.125,-1.04688 q -0.29687,0.59375 -0.79687,0.89063 -0.5,0.29687 -1.07813,0.29687 -1.1875,0 -1.98437,-0.90625 -0.79688,-0.90625 -0.79688,-2.375 0,-1.46875 0.78125,-2.34375 0.79688,-0.89062 2,-0.89062 1.20313,0 1.8125,1.07812 z m -1.76562,-0.15625 q -0.75,0 -1.26563,0.64063 -0.51562,0.625 -0.51562,1.70312 0,1.0625 0.51562,1.70313 0.53125,0.64062 1.25,0.64062 0.73438,0 1.25,-0.48437 0.51563,-0.48438 0.53125,-1.3125 v -1.01563 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26562,-0.5 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path85" + d="m 341.17972,162.37006 q 0.625,-1.3125 2.0625,-1.3125 1.10937,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.21875,-0.45313 -0.79688,0 -1.28125,0.67188 -0.46875,0.65625 -0.46875,1.84375 v 2.9375 h -1.03125 v -8.85938 h 1.03125 z m 10.86264,1.03125 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 4.60437,-2.42188 q 0.60937,-1.35937 2.09375,-1.35937 1.10937,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 11.11496,-0.28125 v -3.5625 h 1.01562 v 8.85938 h -0.82812 l -0.125,-1.04688 q -0.29688,0.59375 -0.79688,0.89063 -0.5,0.29687 -1.07812,0.29687 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89062 2,-0.89062 1.20312,0 1.8125,1.07812 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64063 -0.51563,0.625 -0.51563,1.70312 0,1.0625 0.51563,1.70313 0.53125,0.64062 1.25,0.64062 0.73437,0 1.25,-0.48437 0.51562,-0.48438 0.53125,-1.3125 v -1.01563 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 5.62,-3.40625 h 1.03125 v 8.85938 h -1.03125 z m 3.79434,2.625 h 1.03125 v 6.23438 h -1.03125 z m 0.51563,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 4.39135,2.67187 q 0.60938,-1.35937 2.09375,-1.35937 1.10938,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89063 -0.42188,-1.34375 -0.42187,-0.45313 -1.20312,-0.45313 -0.78125,0 -1.26563,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 7.31809,4.82813 q -0.78125,-0.39063 -0.78125,-1.17188 0,-0.39062 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42187 -0.70313,-0.625 -0.70313,-1.64063 0,-1.01562 0.71875,-1.64062 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42188 1.21875,-0.42188 l -0.0937,1.01563 q -1.14062,0 -1.1875,0.95312 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64063 -1.8125,0.64063 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51562 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35938 0.51563,1.03125 0,0.98438 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57812 -0.875,-0.5625 -0.875,-1.42188 0,-0.54687 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48437 z m -0.20313,1.35937 q 0,0.48438 0.53125,0.84375 0.54688,0.35938 1.64063,0.35938 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10938 0,-0.29687 -0.21875,-0.51562 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29687 -0.34375,0.79687 z m 3.82813,-5.28125 q 0,-0.67187 -0.40625,-1.09375 -0.40625,-0.42187 -1.10938,-0.42187 -0.70312,0 -1.10937,0.42187 -0.40625,0.42188 -0.40625,1.09375 0,0.67188 0.40625,1.10938 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10938 z m 9.0462,-2.26562 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57812 0.79687,-2.42187 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89063,0 -1.375,0.64063 -0.48438,0.625 -0.48438,1.73437 0,1.10938 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64062 0.5,-1.75 z m 6.199,-4.875 q -0.42187,-0.17187 -0.67187,-0.17187 -0.45313,0 -0.71875,0.23437 -0.26563,0.21875 -0.26563,0.76563 v 0.9375 h 1.29688 v 0.70312 h -1.29688 v 5.51563 h -1.01562 v -5.51563 h -1.01563 v -0.70312 h 1.01563 v -0.9375 q 0,-0.9375 0.5,-1.35938 0.51562,-0.4375 1.17187,-0.4375 0.67188,0 1.1875,0.17188 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path87" + d="m 339.82034,178.74506 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.76562,-0.46875 1.125,0 1.75,0.46875 0.64063,0.46875 0.67188,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64063,0 -0.98438,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32812 0.26563,0.5625 0.26562,0.21875 0.82812,0.39062 l 1.25,0.42188 q 0.79688,0.23437 1.21875,0.625 0.42188,0.375 0.42188,1.04687 0,0.67188 -0.6875,1.21875 -0.6875,0.53125 -1.92188,0.53125 -1.23437,0 -1.9375,-0.54687 -0.6875,-0.5625 -0.71875,-1.42188 h 0.98438 q 0.0312,0.57813 0.46875,0.875 0.45312,0.29688 1.125,0.29688 0.6875,0 1.125,-0.28125 0.4375,-0.29688 0.4375,-0.6875 0,-0.40625 -0.26563,-0.60938 -0.25,-0.20312 -0.82812,-0.35937 l -1.21875,-0.40625 q -1.625,-0.48438 -1.625,-1.6875 z m 9.57306,-1.6875 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57812 0.79688,-2.42187 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89062,0 -1.375,0.64063 -0.48437,0.625 -0.48437,1.73437 0,1.10938 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64062 0.5,-1.75 z m 6.19901,-4.875 q -0.42188,-0.17187 -0.67188,-0.17187 -0.45312,0 -0.71875,0.23437 -0.26562,0.21875 -0.26562,0.76563 v 0.9375 h 1.29687 v 0.70312 h -1.29687 v 5.51563 h -1.01563 v -5.51563 h -1.01562 v -0.70312 h 1.01562 v -0.9375 q 0,-0.9375 0.5,-1.35938 0.51563,-0.4375 1.17188,-0.4375 0.67187,0 1.1875,0.17188 z m 4.80591,7.79688 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 1.74572,-6.03125 1.51563,4.95312 1.48437,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01562 h 1.01563 l -2.03125,6.21875 h -1 l -1.4375,-4.35938 -1.40625,4.35938 h -0.98438 l -2.0625,-6.21875 z m 13.52225,2.1875 q 0,-0.84375 -0.35937,-1.20313 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01562,-0.10937 1.15625,0 1.79688,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04688 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54687 -0.60938,-0.5625 -0.60938,-1.39063 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23437 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54688 0.54687,-1.40625 z m 6.15122,-2.75 q -1.46875,0 -1.51563,2.3125 v 3.03125 H 381.13 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70313,0.10938 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 4.68737,4.65625 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path89" + d="m 342.21097,193.05756 q 1.10937,0 1.75,0.57812 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54687 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60938 -0.51563,1.6875 0,1.07813 0.5,1.73438 0.5,0.64062 1.25,0.64062 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98437 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60937 -1.8125,0.60937 -1.1875,0 -2.01562,-0.89062 -0.8125,-0.90625 -0.8125,-2.39063 0,-1.48437 0.8125,-2.35937 0.8125,-0.875 1.90625,-0.875 z m 7.03583,0 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57812 0.79688,-2.42187 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89062,0 -1.375,0.64063 -0.48437,0.625 -0.48437,1.73437 0,1.10938 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64062 0.5,-1.75 z m 4.16776,-1.90625 q 0.60937,-1.35937 2.09375,-1.35937 0.8125,0 1.35937,0.40625 0.54688,0.39062 0.78125,1.09375 0.59375,-1.5 2.17188,-1.5 1.125,0 1.73437,0.73437 0.60938,0.73438 0.60938,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.21875,-0.45313 -0.78125,0 -1.21875,0.65625 -0.4375,0.64063 -0.4375,1.78125 v 3.01563 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 12.4461,-0.25 q 0.60938,-1.10937 1.8125,-1.10937 1.21875,0 2.03125,0.90625 0.8125,0.89062 0.8125,2.35937 0,1.46875 -0.82812,2.35938 -0.8125,0.89062 -2.01563,0.89062 -1.1875,0 -1.75,-0.89062 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.76563,4.5 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70312 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64063 -1.28125,-0.64063 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 5.24499,-5.46875 h 1.03125 v 6.23438 h -1.03125 z m 0.51563,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 3.40698,-1.17188 h 1.03125 v 8.85938 h -1.03125 z m 7.57559,4.82813 q 0,-0.84375 -0.35937,-1.20313 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01562,-0.10937 1.15625,0 1.79688,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04688 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54687 -0.60938,-0.5625 -0.60938,-1.39063 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23437 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54688 0.54687,-1.40625 z m 6.87,2.40625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 1.82385,-6.04688 h 1.03125 v 6.23438 h -1.03125 z m 0.51563,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 5.64132,1.3125 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57812 0.79687,-2.42187 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89063,0 -1.375,0.64063 -0.48438,0.625 -0.48438,1.73437 0,1.10938 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64062 0.5,-1.75 z m 4.16775,-1.90625 q 0.60938,-1.35937 2.09375,-1.35937 1.10938,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89063 -0.42188,-1.34375 -0.42187,-0.45313 -1.20312,-0.45313 -0.78125,0 -1.26563,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path91" + d="m 345.21097,230.0263 q -0.54688,1.54687 -2.125,1.54687 -1.57813,0 -2.59375,-1.14062 -1,-1.14063 -1,-3.07813 0,-1.9375 1.09375,-3.07812 1.10937,-1.15625 2.75,-1.15625 0.95312,0 1.67187,0.39062 0.73438,0.39063 1.25,1.25 l -0.98437,0.34375 q -0.84375,-1.0625 -1.98438,-1.0625 -1.125,0 -1.92187,0.9375 -0.78125,0.92188 -0.78125,2.39063 0,1.46875 0.67187,2.375 0.6875,0.89062 1.82813,0.89062 0.9375,0 1.5,-0.625 0.57812,-0.625 0.57812,-1.84375 v -0.0156 l -2.04687,-0.0781 v -0.6875 h 3.04687 v 4.04688 h -0.82812 z m 6.06534,-3.9375 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70313,0.10938 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 6.3905,1.3125 q 0,-0.84375 -0.35937,-1.20313 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01562,-0.10937 1.15625,0 1.79688,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04688 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54687 -0.60938,-0.5625 -0.60938,-1.39063 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23437 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54688 0.54687,-1.40625 z m 4.60437,-2.42188 q 0.60938,-1.35937 2.09375,-1.35937 1.10938,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89063 -0.42188,-1.34375 -0.42187,-0.45313 -1.20312,-0.45313 -0.78125,0 -1.26563,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 11.27121,3.78125 q -0.625,1.34375 -2.0625,1.34375 -1.04687,0 -1.70312,-0.57812 -0.64063,-0.57813 -0.64063,-1.8125 v -3.95313 h 1.03125 v 3.875 q 0,1.57813 1.45313,1.57813 0.84375,0 1.375,-0.64063 0.53125,-0.65625 0.54687,-1.67187 v -3.14063 h 1.03125 v 6.23438 h -1.03125 z m 3.85806,-7.625 h 1.03125 v 8.85938 h -1.03125 z m 7.5756,4.82813 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 6.15124,-2.75 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70312,0.10938 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path93" + d="m 341.9766,239.26068 h 1.25 l 2.75,8.17187 h -1.0625 l -0.70312,-2.07812 h -3.25 l -0.70313,2.07812 h -1.07812 z m -0.75,5.28125 h 2.71875 l -1.35937,-4.03125 z m 8.64801,-3.48438 q 1.10938,0 1.75,0.57813 0.65625,0.5625 0.85938,1.40625 l -1.04688,0.0937 q -0.17187,-0.54688 -0.54687,-0.84375 -0.375,-0.3125 -0.82813,-0.3125 -0.82812,0 -1.34375,0.625 -0.51562,0.60937 -0.51562,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10937,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70312,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01563,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 6.86395,0 q 1.10938,0 1.75,0.57813 0.65625,0.5625 0.85938,1.40625 l -1.04688,0.0937 q -0.17187,-0.54688 -0.54687,-0.84375 -0.375,-0.3125 -0.82813,-0.3125 -0.82812,0 -1.34375,0.625 -0.51562,0.60937 -0.51562,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10937,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70312,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01563,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 6.94208,5.6875 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.62957,0.70312 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 7.01059,0 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 13.3389,-3.625 q 1.3125,0 2.10938,0.65625 0.8125,0.65625 1.10937,1.70313 l -1.10937,0.21875 q -0.25,-0.76563 -0.8125,-1.20313 -0.54688,-0.45312 -1.29688,-0.45312 -1.01562,0 -1.70312,0.85937 -0.67188,0.84375 -0.67188,2.375 0,1.53125 0.60938,2.45313 0.60937,0.92187 1.76562,0.92187 0.98438,0 1.54688,-0.51562 0.5625,-0.51563 0.5625,-1.35938 h 1.10937 q 0,1.29688 -0.875,2.04688 -0.875,0.75 -2.40625,0.75 -1.53125,0 -2.48437,-1.17188 -0.9375,-1.17187 -0.9375,-3.125 0,-1.96875 0.96875,-3.0625 0.98437,-1.09375 2.51562,-1.09375 z m 7.57636,1.9375 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16776,-1.90625 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 10.30246,4.82812 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 4.2926,-5.15625 q -1.46875,0 -1.51563,2.3125 v 3.03125 H 414.077 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70313,0.10937 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 4.78113,-1.03125 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 3.18338,-5.75 h 1.03125 v 8.85937 h -1.03125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path95" + d="m 341.17972,271.26068 v 3.59375 h 4.01562 v -3.59375 h 1.03125 v 8.17187 h -1.03125 v -3.6875 h -4.01562 v 3.6875 h -1.03125 v -8.17187 z m 7.94772,1.9375 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 3.67261,7.5 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 4.67099,-0.95313 q 0.625,-1.3125 2.0625,-1.3125 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.21875,-0.45312 -0.79688,0 -1.28125,0.67187 -0.46875,0.65625 -0.46875,1.84375 v 2.9375 h -1.03125 v -8.85937 h 1.03125 z m 6.20639,0.84375 h 3.53125 v 0.875 h -3.53125 z m 6.43277,-1.04687 q 0.60937,-1.10938 1.8125,-1.10938 1.21875,0 2.03125,0.90625 0.8125,0.89063 0.8125,2.35938 0,1.46875 -0.82813,2.35937 -0.8125,0.89063 -2.01562,0.89063 -1.1875,0 -1.75,-0.89063 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.76562,4.5 q 0.73438,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.51562,-0.64062 -1.28125,-0.64062 -0.75,0 -1.23437,0.46875 -0.48438,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48437,1.28125 0.5,0.46875 1.21875,0.46875 z m 7.32312,0.0781 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 6.48895,0.0469 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70313,0.10937 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 5.56238,-2.64062 q -0.42188,-0.17188 -0.67188,-0.17188 -0.45312,0 -0.71875,0.23438 -0.26562,0.21875 -0.26562,0.76562 v 0.9375 h 1.29687 v 0.70313 h -1.29687 v 5.51562 h -1.01563 v -5.51562 h -1.01562 v -0.70313 h 1.01562 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.51563,-0.4375 1.17188,-0.4375 0.67187,0 1.1875,0.17187 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path97" + d="m 342.21097,289.05756 q 1.10937,0 1.75,0.57813 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54688 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60937 -0.51563,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 7.03583,0 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16776,-1.90625 q 0.60937,-1.35938 2.09375,-1.35938 0.8125,0 1.35937,0.40625 0.54688,0.39063 0.78125,1.09375 0.59375,-1.5 2.17188,-1.5 1.125,0 1.73437,0.73438 0.60938,0.73437 0.60938,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.21875,-0.45312 -0.78125,0 -1.21875,0.65625 -0.4375,0.64062 -0.4375,1.78125 v 3.01562 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 12.4461,-0.25 q 0.60938,-1.10938 1.8125,-1.10938 1.21875,0 2.03125,0.90625 0.8125,0.89063 0.8125,2.35938 0,1.46875 -0.82812,2.35937 -0.8125,0.89063 -2.01563,0.89063 -1.1875,0 -1.75,-0.89063 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.76563,4.5 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64062 -1.28125,-0.64062 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 5.24499,-5.46875 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 3.40698,-1.17187 h 1.03125 v 8.85937 h -1.03125 z m 7.57559,4.82812 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 6.87,2.40625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 1.82385,-6.04687 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 5.64132,1.3125 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57813 0.79687,-2.42188 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89063,0 -1.375,0.64062 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16775,-1.90625 q 0.60938,-1.35938 2.09375,-1.35938 1.10938,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.20312,-0.45312 -0.78125,0 -1.26563,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path99" + d="m 342.38284,305.05756 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.15213,-2.15625 q 0.60938,-1.10938 1.8125,-1.10938 1.21875,0 2.03125,0.90625 0.8125,0.89063 0.8125,2.35938 0,1.46875 -0.82812,2.35937 -0.8125,0.89063 -2.01563,0.89063 -1.1875,0 -1.75,-0.89063 v 3.81247 h -1.03125 v -9.28122 h 0.84375 z m 1.76563,4.5 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64062 -1.28125,-0.64062 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 8.43249,0.57812 q -1.125,0.53125 -2.04687,0.21875 -0.65625,-0.20312 -0.92188,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01563 v 1.71875 h 1.95312 v 0.78125 h -1.95312 v 3.8125 q 0,0.95313 0.89062,0.95313 0.48438,0 1.07813,-0.23438 z m 1.82386,-6.04687 h 1.03125 v 6.23437 h -1.03125 z m 0.51562,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17187,-0.17188 -0.17187,-0.46875 0,-0.29688 0.17187,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 5.64133,1.3125 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16776,-1.90625 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path101" + d="m 341.61722,335.26065 2.75,5.53125 2.73437,-5.53125 h 1.45313 v 8.17187 h -1.03125 v -6.71875 l -2.8125,5.6875 h -0.6875 l -2.84375,-5.78125 v 6.8125 h -1.03125 v -8.17187 z m 13.67722,4.14062 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 4.60434,-2.42187 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 10.89621,0.98437 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 3.88562,2.40625 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 5.78036,3.42187 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.62957,0.70312 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path103" + d="m 339.82034,354.74503 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.76562,-0.46875 1.125,0 1.75,0.46875 0.64063,0.46875 0.67188,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64063,0 -0.98438,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32812 0.26563,0.5625 0.26562,0.21875 0.82812,0.39062 l 1.25,0.42188 q 0.79688,0.23437 1.21875,0.625 0.42188,0.375 0.42188,1.04687 0,0.67188 -0.6875,1.21875 -0.6875,0.53125 -1.92188,0.53125 -1.23437,0 -1.9375,-0.54687 -0.6875,-0.5625 -0.71875,-1.42188 h 0.98438 q 0.0312,0.57813 0.46875,0.875 0.45312,0.29688 1.125,0.29688 0.6875,0 1.125,-0.28125 0.4375,-0.29688 0.4375,-0.6875 0,-0.40625 -0.26563,-0.60938 -0.25,-0.20312 -0.82812,-0.35937 l -1.21875,-0.40625 q -1.625,-0.48438 -1.625,-1.6875 z m 9.57306,-1.6875 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57812 0.79688,-2.42187 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89062,0 -1.375,0.64063 -0.48437,0.625 -0.48437,1.73437 0,1.10938 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64062 0.5,-1.75 z m 6.19901,-4.875 q -0.42188,-0.17187 -0.67188,-0.17187 -0.45312,0 -0.71875,0.23437 -0.26562,0.21875 -0.26562,0.76563 v 0.9375 h 1.29687 v 0.70312 h -1.29687 v 5.51563 h -1.01563 v -5.51563 h -1.01562 v -0.70312 h 1.01562 v -0.9375 q 0,-0.9375 0.5,-1.35938 0.51563,-0.4375 1.17188,-0.4375 0.67187,0 1.1875,0.17188 z m 4.80591,7.79688 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 1.74572,-6.03125 1.51563,4.95312 1.48437,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01562 h 1.01563 l -2.03125,6.21875 h -1 l -1.4375,-4.35938 -1.40625,4.35938 h -0.98438 l -2.0625,-6.21875 z m 13.52225,2.1875 q 0,-0.84375 -0.35937,-1.20313 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01562,-0.10937 1.15625,0 1.79688,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04688 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54687 -0.60938,-0.5625 -0.60938,-1.39063 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23437 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54688 0.54687,-1.40625 z m 6.15122,-2.75 q -1.46875,0 -1.51563,2.3125 v 3.03125 H 381.13 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70313,0.10938 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 4.68737,4.65625 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path105" + d="m 344.21097,370.13565 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 7.76062,4.76562 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 4.92645,0.125 q 0.60938,-1.10938 1.8125,-1.10938 1.21875,0 2.03125,0.90625 0.8125,0.89063 0.8125,2.35938 0,1.46875 -0.82812,2.35937 -0.8125,0.89063 -2.01563,0.89063 -1.1875,0 -1.75,-0.89063 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.76563,4.5 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64062 -1.28125,-0.64062 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 7.32312,0.0781 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 4.94208,0.375 q 0.60938,-1.35938 2.09375,-1.35938 1.10938,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.20312,-0.45312 -0.78125,0 -1.26563,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 11.11496,-0.28125 v -3.5625 h 1.01563 v 8.85937 h -0.82813 l -0.125,-1.04687 q -0.29687,0.59375 -0.79687,0.89062 -0.5,0.29688 -1.07813,0.29688 -1.1875,0 -1.98437,-0.90625 -0.79688,-0.90625 -0.79688,-2.375 0,-1.46875 0.78125,-2.34375 0.79688,-0.89063 2,-0.89063 1.20313,0 1.8125,1.07813 z m -1.76562,-0.15625 q -0.75,0 -1.26563,0.64062 -0.51562,0.625 -0.51562,1.70313 0,1.0625 0.51562,1.70312 0.53125,0.64063 1.25,0.64063 0.73438,0 1.25,-0.48438 0.51563,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26562,-0.5 z m 7.76062,4.76562 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 4.94208,0.375 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 9.11496,-1.35938 q 1.10937,0 1.75,0.57813 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54688 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60937 -0.51563,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 4.86395,0.14063 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 5.54757,7 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.62958,0.70312 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76562,-0.46875 1.125,0 1.75,0.46875 0.64063,0.46875 0.67188,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64063,0 -0.98438,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26563,0.5625 0.26562,0.21875 0.82812,0.39063 l 1.25,0.42187 q 0.79688,0.23438 1.21875,0.625 0.42188,0.375 0.42188,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92188,0.53125 -1.23437,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98438 q 0.0312,0.57812 0.46875,0.875 0.45312,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26563,-0.60937 -0.25,-0.20313 -0.82812,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path107" + d="m 382.20078,392.90213 h 53.62732 v 46.2756 h -53.62732 z" /> + <g + id="g114" + transform="matrix(0.43247822,0,0,0.43248215,382.20079,392.90214)"> + <clipPath + id="g249fea5886_0_69.3"> + <path + style="clip-rule:evenodd" + inkscape:connector-curvature="0" + id="path109" + d="M 0,0 H 124 V 107 H 0 Z" /> + </clipPath> + <image + style="fill:#000000" + id="image112" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHwAAABrCAYAAAC1zeadAAAHf0lEQVR42u3da2xTZRgH8ImDD4Ao+AExKgaDCQkhfgBjRIFETQyEKCaEhBhhG3JxbF64bd1gLe3WrV3X++k57Xrvtm7rJgnGC8QhKALDyxYDgkhQImACorBBQIbzectOs47Ty9narufd8+EfPkCTcn49z/uc23Ny+vv7czCpj8UberFM57rA2R352fS9ECfFsfnbp1Qxgf3vlhv780r1/Rxnv8Kx7CwEpzB19c07i1W2fwk0HwC/BeCHIQ8iOD3l+yUo3xcHQw8B74eUIzgd5ftLvnwnAL8DmY/g0i3fFcXK6PKdAJzkFGQigkuvfF9KBB0DnIRB8MyX4onD+EwulO+OeOU7SXCS1xE8Q9E5gnXbaxw9NpvteTGfY3xtM8VAJwCvRvA0x+wJLS3R1v9FEIp2M32czdYpl8vHIThlYXzt05UW/7GCMkMEIQxONjzHrUNwilLrCBoKFda+oQgRcJa9zDDMVASXfvlevkNTfzUWwiBwspebEVy65XuG0uw/XiAzxEWIAmfZPgfDzENwqZVve9AC5ftuMghDwPtZlj2E4KNxUsPTskDsZ6y+ttk7NI6/xSAMBR8o7asRPGOluO0ZudF7Ag6brsPx8RIxnzW5W1eJRRAEZ9mPETz9Z7xyNVyTb1OF+T+ycWBP7YE97SRkfKbB7Sy7B8HTGKO7dc3Wanvv4I0TBr+38UsRnBJwsuZC+T6ZL7t/4/DgkJtQ2p9GcAmDD5RvP1++hTIInHTOexE8duRyeU5eiV50MlO+Xa15W9TR5TsR+EDn/CaCC2ctAS/Vi04myvfPyW6c+8BZ9rzP55uE4BIAJ03ZxjjlO0nwhA0cgutz8mWGnJb9+wRTpGIyA17rCJrEbhwhcFjLDQgeH7ygzJjzw5luwWzT1iM4giM4VeCD/13G1nAER3AER3AER3AER3AER3AEH3LiRedpDkfFBkbnTBuCj7FTqwiO4Aie4uvha7dpwtnzVUfON92d4XwNOdQlHPL3CE7BDRDf/9od89Tq0CA4BeDfne0KoycTBMdbnBAcwREcwREcwREcwREcwREcwREcwREcwREcwREcwREcwREcwREcwQXAje7WhfD/0Kos/sP82M4Ugf8CWY7gowjO2F2fwXeuVVr8RwD3itgnX0WC8/kWsgTB0wz+ntxy12D3n66yeM+TyVEbdqUGdxjgfPZl6m0JYxI8k0kSnE8bZA6Cjx3w8ChQiBsyE8GjpjaGFpNh92JGikgEnM9tiAkyfcyBmz2hV8gobGiojpJueWMa19wsAufTC6mEPEIjeK/N7vrDGG6ofKSh6tkgIdw0gfO5CikZ6VuRsgqcxqQQnM8lSCFkAoKPDXA+5yDvQMaNKrjN3z4BOue3dpt9XQieVnA+JyArMgJO3v9FDou0XJNLYfL+tLXa3iP2vV4InrJ0Ql5NGTjgTgbc1WTcNZltTiYhrytD3CwC59MBeUEUOHmJKpmkqOEaGwH31BY1d2NdmQEBpQHOZw9kblLgAHwTsSQPHu7oE4KTdRn3ZmrAbycEh3V6JUJRA04yKS641t5Uj1BUgT8RFxyOn39EKKrA58UFF/sOMEzWgy+OCy71ixUIfl9WxAS3eEOLEIk68PyY4DpHUINI1IFvjQleaQ0cQiTqwCtjgst0zj8RiTpwW0zwzQprHyJRBx4UBLf62p5FICrB9wmC650t2xGISvDjguBqW8NeBKIS/Kwg+E69+xwCUQl+VRD8g0r2FgJRCX538I2O/DXwafkyvAZOKTjJ1Chw8rpnxKEafFYUuIZrCiAO1eDzo8AVJu8JxKEa/LUocHI/OeJQDb4qAg4NWy4+PEA9+MYIuNkTWoYw1IPLIuC1jqAZYagH10bAyUP2CEM9uDMCTkZUIQz14O0RcDLCCmHSFzY7wA8M7tInQ+O2tK6+WUWumJEhOeRW5UKFFX8I0t/DuyHFkEeTelyY8bXPII8Ik2kOVUygY5fec448JrxhlwlvZc5e8GsQFrIgpQMBLN7QHIOzZZOGa3KpLP4jZTrXhQ8r2Vv4zPiogR8cGAEyMdMjP3JhiVgIS0RJDdvYojD5ukq1zstFSuZOvgzBU5yLEDVk9qgP9REK/BAeMrpbl+kcwSo10/BJhdFzanuN4x+aG8c0gN8ZeNh/OSQ3a6Y4DWOJeNzganlba28yV1oDB8gdOFvUXO/6nSac03YvpyE7II9l5Zy2VMbkCc3VO1sKoV/wKM3+o9AvXCR36BRIYHDBCMFvQDyQl7N+9GYmAkcP4+EoYhH0C7JqW2OrwuTtJieSinZnT78wTPBjkPWQKZIZrjvagX7hYegX3oAfRXUV0/BphcFzeluN49qmisz2CyLAr0D0QoN4EHykS4S79UnoF9ZAv8CorIGD5XXu3z9SczfS0S8kACc3GH4OWTncUZoIPvJ+4Tm9s7kYDil9SrOvU6ZzXnpfZbs93H4hBvhvkArIU9S884S2kJGisEwsgX6hHPqFNjJ5kozy3gz9QpLg5M8gud0I8gB1bzUaS4EfwlQyX1bnCGrVTMMX0C+cgX7hOukXAPz4wPnsadnwXf8H3gu6jQBVTEYAAAAASUVORK5CYII=" + preserveAspectRatio="none" + y="0" + x="0" + height="107" + width="124" + clip-path="url(#g249fea5886_0_69.3)" /> + </g> + <path + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path116" + d="M 589.61945,56.632545 H 676.1706 V 251.75064 h -86.55115 z" /> + <path + sodipodi:nodetypes="ccc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path389" + d="m 630.895,251.75066 v 77.79527 h 125.76379" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path118" + d="M 589.61945,56.632545 H 676.1706 V 251.75064 h -86.55115 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path120" + d="m 600.1038,70.60192 h 1.89062 v 10.390625 h -1.89062 z m 11.78589,4.09375 q 0.75,-1.6875 2.64062,-1.6875 1.39063,0 2.15625,0.9375 0.73438,0.90625 0.73438,2.5 v 4.546875 h -1.90625 V 76.44567 q 0,-0.859375 -0.42188,-1.296875 -0.40625,-0.4375 -1.15625,-0.4375 -0.75,0 -1.23437,0.65625 -0.48438,0.65625 -0.51563,1.984375 v 3.640625 h -1.89062 V 76.44567 q 0,-0.859375 -0.42188,-1.296875 -0.40625,-0.4375 -1.15625,-0.4375 -0.75,0 -1.29687,0.671875 -0.53125,0.671875 -0.5625,2.015625 v 3.59375 h -1.89063 v -7.78125 h 1.65625 l 0.20313,1.34375 q 0.76562,-1.546875 2.46875,-1.546875 0.96875,0 1.60937,0.453125 0.65625,0.4375 0.98438,1.234375 z m 10.82464,1.75 q 0.92188,0 2.14063,0.3125 v -0.78125 q 0,-0.8125 -0.32813,-1.203125 -0.32812,-0.390625 -1.07812,-0.390625 -0.73438,0 -1.14063,0.296875 -0.39062,0.296875 -0.39062,0.84375 h -2.0625 q 0,-1.328125 0.9375,-1.921875 0.9375,-0.59375 2.60937,-0.59375 2.40625,0 3.10938,1.6875 0.23437,0.5625 0.23437,1.359375 v 4.9375 h -1.64062 l -0.15625,-1.046875 q -0.75,1.265625 -2.29688,1.265625 -1.5,0 -2.34375,-0.734375 -0.76562,-0.703125 -0.76562,-1.78125 0,-1.078125 0.84375,-1.65625 0.85937,-0.59375 2.32812,-0.59375 z m 2.14063,1.5 q -0.9375,-0.25 -1.75,-0.25 -1.54688,0 -1.54688,1.03125 0,0.421875 0.34375,0.734375 0.35938,0.3125 1.14063,0.3125 0.78125,0 1.28125,-0.515625 0.5,-0.515625 0.53125,-1.3125 z m 5.31274,-0.140625 q -0.9375,-0.796875 -0.9375,-2 0,-1.265625 0.98438,-2.046875 0.96875,-0.75 2.20312,-0.75 1.23438,0 2.07813,0.46875 0.0937,-0.921875 0.78125,-1.46875 0.67187,-0.5625 1.57812,-0.5625 l -0.0937,1.796875 q -1.375,0 -1.42187,0.921875 0.59375,0.734375 0.59375,1.5 0,0.765625 -0.28125,1.296875 -0.26563,0.515625 -0.73438,0.859375 -0.95312,0.765625 -2.32812,0.765625 -0.78125,0 -1.42188,-0.234375 -0.64062,0.1875 -0.64062,0.765625 0,0.71875 1.21875,0.71875 h 2.60937 q 2.64063,0 2.64063,1.859375 0,0.625 -0.3125,1.21875 -0.29688,0.609375 -0.89063,1.0625 -1.3125,1.03125 -3.29687,1.03125 -1.92188,0 -3.125,-0.78125 -1.125,-0.75 -1.125,-1.84375 0,-0.71875 0.4375,-1.140625 0.45312,-0.421875 1.17187,-0.53125 -0.95312,-0.578125 -0.95312,-1.4375 0,-0.546875 0.34375,-0.921875 0.35937,-0.390625 0.92187,-0.546875 z m 1.4375,3.359375 q -1.5,0.0625 -1.5,1.140625 0,0.546875 0.625,0.875 0.64063,0.328125 1.5,0.328125 0.875,0 1.35938,-0.15625 0.48437,-0.140625 0.82812,-0.375 0.71875,-0.484375 0.71875,-1.15625 0,-0.28125 -0.20312,-0.46875 -0.20313,-0.1875 -0.57813,-0.1875 z m 2.45313,-5.375 q 0,-0.65625 -0.35938,-1.0625 -0.35937,-0.40625 -1.09375,-0.40625 -0.73437,0 -1.125,0.40625 -0.375,0.40625 -0.375,1.0625 0,0.640625 0.375,1.0625 0.39063,0.40625 1.125,0.40625 0.73438,0 1.09375,-0.40625 0.35938,-0.421875 0.35938,-1.0625 z m 10.17139,-1.640625 q 0.40625,0.5 0.60937,1.1875 0.20313,0.671875 0.20313,1.234375 0,0.546875 -0.0781,1 h -5.01562 q 0.0312,0.9375 0.45312,1.53125 0.4375,0.59375 1.32813,0.59375 1.15625,0 1.39062,-1.015625 h 1.90625 q -0.20312,1.15625 -1.07812,1.828125 -0.90625,0.703125 -2.21875,0.703125 -1.54688,0 -2.57813,-1.109375 -1.07812,-1.171875 -1.07812,-3 0,-1.875 1.07812,-3 1.01563,-1.09375 2.57813,-1.09375 1.60937,0 2.5,1.140625 z m -2.48438,0.359375 q -0.8125,0 -1.26562,0.53125 -0.4375,0.515625 -0.51563,1.328125 h 3.3125 q 0,-1.265625 -0.79687,-1.6875 -0.3125,-0.171875 -0.73438,-0.171875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path122" + d="m 603.8382,89.398796 q 0.95313,0 1.65625,0.234375 0.70313,0.234375 1.21875,0.640625 1.01563,0.828125 1.3125,2.296875 l -2.01562,0.359375 q -0.25,-0.8125 -0.79688,-1.3125 -0.53125,-0.5 -1.32812,-0.5 -1.09375,0 -1.76563,0.90625 -0.71875,1 -0.71875,2.75 0,1.75 0.64063,2.734375 0.64062,0.984375 1.73437,0.984375 1.10938,0 1.67188,-0.53125 0.5625,-0.546875 0.5625,-1.390625 h 2.03125 q 0,1.734375 -1.10938,2.6875 -1.10937,0.953129 -3.04687,0.953129 -2.0625,0 -3.28125,-1.437504 -1.23438,-1.46875 -1.23438,-4 0,-2.5625 1.26563,-4 1.21875,-1.375 3.20312,-1.375 z m 8.30023,4.359375 q 0.70313,-1.6875 2.10938,-1.6875 0.28125,0 0.6875,0.109375 l -0.0312,1.890625 q -0.4375,-0.09375 -0.875,-0.09375 -1.89063,0 -1.89063,2.609375 v 3.40625 h -1.89062 v -7.796875 h 1.89062 z m 10.18732,-0.609375 q 0.40625,0.5 0.60937,1.1875 0.20313,0.671875 0.20313,1.234375 0,0.546875 -0.0781,1 h -5.01562 q 0.0312,0.9375 0.45312,1.53125 0.4375,0.59375 1.32813,0.59375 1.15625,0 1.39062,-1.015625 h 1.90625 q -0.20312,1.15625 -1.07812,1.828125 -0.90625,0.703129 -2.21875,0.703129 -1.54688,0 -2.57813,-1.109379 -1.07812,-1.171875 -1.07812,-3 0,-1.875 1.07812,-3 1.01563,-1.09375 2.57813,-1.09375 1.60937,0 2.5,1.140625 z m -2.48438,0.359375 q -0.8125,0 -1.26562,0.53125 -0.4375,0.515625 -0.51563,1.328125 h 3.3125 q 0,-1.265625 -0.79687,-1.6875 -0.3125,-0.171875 -0.73438,-0.171875 z m 8.10498,1.9375 q 0.92188,0 2.14063,0.3125 v -0.78125 q 0,-0.8125 -0.32813,-1.203125 -0.32812,-0.390625 -1.07812,-0.390625 -0.73438,0 -1.14063,0.296875 -0.39062,0.296875 -0.39062,0.84375 h -2.0625 q 0,-1.328125 0.9375,-1.921875 0.9375,-0.59375 2.60937,-0.59375 2.40625,0 3.10938,1.6875 0.23437,0.5625 0.23437,1.359375 v 4.9375 h -1.64062 l -0.15625,-1.046875 q -0.75,1.265629 -2.29688,1.265629 -1.5,0 -2.34375,-0.734379 -0.76562,-0.703125 -0.76562,-1.78125 0,-1.078125 0.84375,-1.65625 0.85937,-0.59375 2.32812,-0.59375 z m 2.14063,1.5 q -0.9375,-0.25 -1.75,-0.25 -1.54688,0 -1.54688,1.03125 0,0.421875 0.34375,0.734375 0.35938,0.3125 1.14063,0.3125 0.78125,0 1.28125,-0.515625 0.5,-0.515625 0.53125,-1.3125 z m 9.03155,2.859375 q -1.0625,0.406254 -1.67187,0.406254 -0.60938,0 -1.0625,-0.14063 -0.45313,-0.140624 -0.79688,-0.437499 -0.75,-0.65625 -0.75,-1.796875 v -4.359375 h -1.07812 v -1.265625 h 1.07812 v -2.046875 h 1.89063 v 2.046875 h 2.10937 v 1.265625 h -2.10937 v 4.296875 q 0,0.953125 0.92187,0.953125 0.45313,0 1.1875,-0.25 z m 4.99189,-7.796875 q 0.78125,0 1.46875,0.25 0.6875,0.25 1.1875,0.765625 1.09375,1.109375 1.09375,3.09375 0,1.953125 -1.09375,3.078125 -1,1.015629 -2.65625,1.015629 -1.67188,0 -2.6875,-1.015629 -1.10938,-1.109375 -1.10938,-3.078125 0,-2 1.10938,-3.09375 1,-1.015625 2.6875,-1.015625 z m 1.875,4.09375 q 0,-1.234375 -0.48438,-1.84375 -0.48437,-0.625 -1.34375,-0.625 -0.84375,0 -1.39062,0.625 -0.54688,0.609375 -0.54688,1.84375 0,1.234375 0.48438,1.859375 0.48437,0.609375 1.34375,0.609375 0.84375,0 1.39062,-0.609375 0.54688,-0.625 0.54688,-1.859375 z m 6.00909,-2.34375 q 0.70313,-1.6875 2.10938,-1.6875 0.28125,0 0.6875,0.109375 l -0.0312,1.890625 q -0.4375,-0.09375 -0.875,-0.09375 -1.89063,0 -1.89063,2.609375 v 3.40625 h -1.89062 v -7.796875 h 1.89062 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path124" + d="m 601.7601,124.26067 h 1.25 l 2.75,8.17188 h -1.0625 l -0.70313,-2.07812 h -3.25 l -0.70312,2.07812 h -1.07813 z m -0.75,5.28126 h 2.71875 l -1.35938,-4.03126 z m 7.55426,-2.37501 q 0.60938,-1.10937 1.8125,-1.10937 1.21875,0 2.03125,0.90625 0.8125,0.89062 0.8125,2.35938 0,1.46875 -0.82812,2.35937 -0.8125,0.89063 -2.01563,0.89063 -1.1875,0 -1.75,-0.89063 v 3.8125 h -1.03125 v -9.28126 h 0.84375 z m 1.76563,4.50001 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64063 -1.28125,-0.64063 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28126 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 7.32312,0.0781 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95313,1.01562 0.64062,1.01563 0.4375,2.46876 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70313 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54688 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71876 z m 6.48895,0.0469 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70312,0.10938 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 5.79676,5.15625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 1.82385,-6.04688 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 3.07886,3 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path126" + d="m 602.1663,142.05756 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57812 0.79688,-2.42187 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89062,0 -1.375,0.64063 -0.48437,0.625 -0.48437,1.73437 0,1.10938 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64062 0.5,-1.75 z m 4.1521,-2.15625 q 0.60938,-1.10937 1.8125,-1.10937 1.21875,0 2.03125,0.90625 0.8125,0.89062 0.8125,2.35937 0,1.46875 -0.82812,2.35938 -0.8125,0.89062 -2.01563,0.89062 -1.1875,0 -1.75,-0.89062 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.76563,4.5 q 0.73437,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70312 0,-1.09375 -0.53125,-1.71875 -0.51563,-0.64063 -1.28125,-0.64063 -0.75,0 -1.23438,0.46875 -0.48437,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.48438,1.28125 0.5,0.46875 1.21875,0.46875 z m 8.43249,0.57813 q -1.125,0.53125 -2.04687,0.21875 -0.65625,-0.20313 -0.92188,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01563 v 1.71875 h 1.95312 v 0.78125 h -1.95312 v 3.8125 q 0,0.95312 0.89062,0.95312 0.48438,0 1.07813,-0.23437 z m 1.82386,-6.04688 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 4.39136,2.67187 q 0.60937,-1.35937 2.09375,-1.35937 0.8125,0 1.35937,0.40625 0.54688,0.39062 0.78125,1.09375 0.59375,-1.5 2.17188,-1.5 1.125,0 1.73437,0.73437 0.60938,0.73438 0.60938,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.21875,-0.45313 -0.78125,0 -1.21875,0.65625 -0.4375,0.64063 -0.4375,1.78125 v 3.01563 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 11.53986,-1.21875 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 2.78198,6.85937 3.65625,-4.54687 h -3.65625 v -0.84375 h 4.8125 v 0.84375 l -3.60937,4.54687 h 3.60937 v 0.82813 h -4.8125 z m 9.09644,0.14063 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92187 -0.82813,1.4375 -0.6875,0.51562 -1.70312,0.51562 -1.25,0 -2.03125,-0.89062 -0.76563,-0.89063 -0.76563,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95313,1.01562 0.64062,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76562,-4.70313 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54688 -0.45312,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 8.02021,0.0937 v -3.5625 h 1.01562 v 8.85938 h -0.82812 l -0.125,-1.04688 q -0.29688,0.59375 -0.79688,0.89063 -0.5,0.29687 -1.07812,0.29687 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89062 2,-0.89062 1.20312,0 1.8125,1.07812 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64063 -0.51563,0.625 -0.51563,1.70312 0,1.0625 0.51563,1.70313 0.53125,0.64062 1.25,0.64062 0.73437,0 1.25,-0.48437 0.51562,-0.48438 0.53125,-1.3125 v -1.01563 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path128" + d="m 599.9788,172.26068 2.1875,3.75 2.25,-3.75 h 1.20312 l -2.9375,4.8125 v 3.35937 h -1.03125 v -3.35937 l -2.90625,-4.8125 z m 9.09833,0 h 1.25 l 2.75,8.17187 h -1.0625 l -0.70313,-2.07812 h -3.25 l -0.70312,2.07812 h -1.07813 z m -0.75,5.28125 h 2.71875 l -1.35938,-4.03125 z m 8.05426,-5.28125 2.75,5.53125 2.73437,-5.53125 h 1.45313 v 8.17187 h -1.03125 v -6.71875 l -2.8125,5.6875 h -0.6875 l -2.84375,-5.78125 v 6.8125 h -1.03125 v -8.17187 z m 10.86474,7.28125 h 3.64063 v 0.89062 h -4.67188 v -8.17187 h 1.03125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path130" + d="m 600.9632,191.13568 q 0.625,-1.07813 1.8125,-1.07813 1.20313,0 1.98438,0.89063 0.79687,0.89062 0.79687,2.35937 0,1.46875 -0.8125,2.375 -0.79687,0.89063 -1.95312,0.89063 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.92188 l -0.23438,1.09375 h -0.71875 v -8.85937 h 1.03125 z m 1.75,-0.15625 q -0.73437,0 -1.23437,0.46875 -0.5,0.46875 -0.51563,1.3125 v 1.01562 q 0,0.85938 0.5,1.375 0.51563,0.51563 1.25,0.51563 0.73438,0 1.26563,-0.64063 0.53125,-0.64062 0.53125,-1.70312 0,-1.07813 -0.53125,-1.70313 -0.51563,-0.64062 -1.26563,-0.64062 z m 8.84607,1.42187 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 3.29187,-2.09375 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76562,-0.46875 1.125,0 1.75,0.46875 0.64063,0.46875 0.67188,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64063,0 -0.98438,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26563,0.5625 0.26562,0.21875 0.82812,0.39063 l 1.25,0.42187 q 0.79688,0.23438 1.21875,0.625 0.42188,0.375 0.42188,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92188,0.53125 -1.23437,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98438 q 0.0312,0.57812 0.46875,0.875 0.45312,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26563,-0.60937 -0.25,-0.20313 -0.82812,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 9.47931,4 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 8.02021,0.0937 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path132" + d="m 847.8399,111.90813 h 104.72443 v 39.90551 H 847.8399 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path134" + d="m 847.8399,111.90813 h 104.72443 v 39.90551 H 847.8399 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path136" + d="m 860.7618,120.48901 q 1.35937,0 2.0625,0.6875 0.70312,0.67187 0.70312,1.82812 0,1.15625 -0.70312,1.82813 -0.70313,0.67187 -2.0625,0.67187 h -1.60938 v 3.15625 h -1.03125 v -8.17187 z m 0,4.125 q 0.84375,0 1.28125,-0.42188 0.4375,-0.4375 0.4375,-1.17187 0,-0.75 -0.4375,-1.20313 -0.4375,-0.45312 -1.28125,-0.45312 h -1.60938 v 3.25 z m 7.3056,-1.29688 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70312,0.10938 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.12501 z m 4.78113,-1.03125 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57812 0.79687,-2.42187 0.79688,-0.84375 2.09375,-0.84376 z m 1.85938,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89063,0 -1.375,0.64062 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 3.94903,-4.57813 q -0.3125,0 -0.48437,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.17187,-0.17188 0.48437,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m -1.65625,9.98438 q 1.15625,0 1.15625,-1.42188 v -7.10937 h 1.01563 v 7.10937 q 0,1.78125 -1.15625,2.1875 -0.375,0.14063 -0.8125,0.14063 -0.8125,0 -1.75,-0.48438 l 0.0625,-0.90625 q 0.8125,0.48438 1.48437,0.48438 z m 7.21625,-2.98437 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92187 -0.82813,1.43749 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89062 -0.76563,-0.89063 -0.76563,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95313,1.01562 0.64062,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76562,-4.70313 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54688 -0.45312,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 6.02021,-0.98437 q 1.10937,0 1.75,0.57812 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54687 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60938 -0.51563,1.6875 0,1.07813 0.5,1.73438 0.5,0.64062 1.25,0.64062 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98437 h 1.0625 q 0,1 -0.70313,1.62499 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89062 -0.8125,-0.90625 -0.8125,-2.39063 0,-1.48437 0.8125,-2.35937 0.8125,-0.875 1.90625,-0.875 z m 8.05145,6.18749 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path138" + d="m 859.18365,139.36401 q 0.625,-1.07813 1.8125,-1.07813 1.20312,0 1.98437,0.89063 0.79688,0.89062 0.79688,2.35937 0,1.46875 -0.8125,2.375 -0.79688,0.89063 -1.95313,0.89063 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.92188 l -0.23437,1.09375 h -0.71875 v -8.85937 h 1.03125 z m 1.75,-0.15625 q -0.73438,0 -1.23438,0.46875 -0.5,0.46875 -0.51562,1.3125 v 1.01562 q 0,0.85938 0.5,1.375 0.51562,0.51563 1.25,0.51563 0.73437,0 1.26562,-0.64063 0.53125,-0.64062 0.53125,-1.70312 0,-1.07813 -0.53125,-1.70313 -0.51562,-0.64062 -1.26562,-0.64062 z m 7.23669,-0.92188 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57813 0.79687,-2.42188 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89063,0 -1.375,0.64062 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 7.02716,-0.92188 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 6.15124,-2.75 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70312,0.10937 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 6.60926,0.0469 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 5.29187,0.76562 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path140" + d="M 847.8399,172.91339 H 952.56433 V 232 H 847.8399 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path142" + d="M 847.8399,172.91339 H 952.56433 V 232 H 847.8399 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path144" + d="m 858.1524,183.08482 2.34375,6.875 2.34375,-6.875 h 1.07812 l -2.89062,8.17187 h -1.0625 l -2.89063,-8.17187 z m 7.56622,1.9375 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 5.93817,2.34375 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70313,0.10937 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 5.79675,5.15625 q -1.125,0.53125 -2.04687,0.21875 -0.65625,-0.20312 -0.92188,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01563 v 1.71875 h 1.95312 v 0.78125 h -1.95312 v 3.8125 q 0,0.95313 0.89062,0.95313 0.48438,0 1.07813,-0.23438 z m 5.9801,-1.04687 q -0.625,1.34375 -2.0625,1.34375 -1.04687,0 -1.70312,-0.57813 -0.64063,-0.57812 -0.64063,-1.8125 v -3.95312 h 1.03125 v 3.875 q 0,1.57812 1.45313,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.54687,-1.67188 v -3.14062 h 1.03125 v 6.23437 h -1.03125 z m 7.70185,-2.79688 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 3.61999,-6.26562 h 1.03125 v 8.85937 h -1.03125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path146" + d="m 859.62115,199.08482 2.75,5.53125 2.73437,-5.53125 h 1.45313 v 8.17187 h -1.03125 v -6.71875 l -2.8125,5.6875 h -0.6875 l -2.84375,-5.78125 v 6.8125 h -1.03125 v -8.17187 z m 13.67718,4.14062 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 5.6825,-3.78125 q 1.10937,0 1.75,0.57813 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54688 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60937 -0.51563,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 5.8327,1.3125 q 0.625,-1.3125 2.0625,-1.3125 1.10938,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.21875,-0.45312 -0.79687,0 -1.28125,0.67187 -0.46875,0.65625 -0.46875,1.84375 v 2.9375 h -1.03125 v -8.85937 h 1.03125 z m 7.08142,-1.17187 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 4.39136,2.67188 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 9.19305,4.32812 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.62958,0.70312 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path148" + d="m 861.1055,214.3192 q -2.25,2.28125 -2.25,4.95312 0,2.65625 2.25,4.9375 l -0.75,0.51563 q -1.26563,-1.15625 -1.92188,-2.5625 -0.64062,-1.40625 -0.64062,-2.90625 0,-1.5 0.64062,-2.89063 0.65625,-1.40625 1.92188,-2.57812 z m 1.79169,0.76562 2.34375,6.875 2.34375,-6.875 h 1.07812 l -2.89062,8.17188 h -1.0625 l -2.89063,-8.17188 z m 7.56616,1.9375 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 5.93824,2.34375 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70313,0.10938 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 5.79675,5.15625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 5.9801,-1.04688 q -0.625,1.34375 -2.0625,1.34375 -1.04687,0 -1.70312,-0.57812 -0.64063,-0.57813 -0.64063,-1.8125 v -3.95313 h 1.03125 v 3.875 q 0,1.57813 1.45313,1.57813 0.84375,0 1.375,-0.64063 0.53125,-0.65625 0.54687,-1.67187 v -3.14063 h 1.03125 v 6.23438 h -1.03125 z m 7.70185,-2.79687 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 3.61993,-6.26563 h 1.03125 v 8.85938 h -1.03125 z m 3.73187,0.6875 h 3.0625 q 1.28125,0 1.96875,0.60938 0.70313,0.60937 0.70313,1.53125 0,0.70312 -0.39063,1.21875 -0.375,0.51562 -1.15625,0.70312 0.76563,0.125 1.21875,0.67188 0.46875,0.53125 0.46875,1.20312 0,1.5 -1.46875,2.04688 -0.54687,0.1875 -1.34375,0.1875 h -3.0625 z m 3.04688,7.28125 q 0.9375,0 1.32812,-0.375 0.40625,-0.39062 0.40625,-1.01562 0,-0.625 -0.4375,-0.98438 -0.4375,-0.375 -1.29687,-0.375 h -2.01563 v 2.75 z m -2.01563,-3.64062 h 2 q 0.75,0 1.20313,-0.35938 0.45312,-0.375 0.45312,-1.01562 0,-0.65625 -0.4375,-1.01563 -0.4375,-0.375 -1.21875,-0.375 h -2 z m 9.49323,-1.84375 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57812 0.79688,-2.42187 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89062,0 -1.375,0.64063 -0.48437,0.625 -0.48437,1.73437 0,1.10938 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64062 0.5,-1.75 z m 8.18335,3.10938 h -1.25 l -1.78125,-2.35938 -1.6875,2.35938 h -1.25 l 2.34375,-3.10938 -2.34375,-3.125 h 1.25 l 1.76563,2.34375 1.70312,-2.34375 h 1.25 l -2.375,3.125 z m 0.87085,0.95312 q 2.25,-2.28125 2.25,-4.9375 0,-2.67187 -2.25,-4.95312 l 0.75,-0.53125 q 1.26563,1.17187 1.90625,2.57812 0.65625,1.39063 0.65625,2.89063 0,1.5 -0.65625,2.90625 -0.64062,1.40625 -1.90625,2.5625 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path150" + d="m 466.01443,56.632545 h 98.14175 V 184.97901 h -98.14175 z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path152" + d="m 466.01443,56.632545 h 98.14175 V 184.97901 h -98.14175 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path154" + d="m 478.95193,69.168274 q 1.92187,0 3.10937,1.140625 1.1875,1.140625 1.1875,3.078125 0,1.9375 -1.1875,3.078125 -1.1875,1.140625 -3.10937,1.140625 h -2.73438 v -8.4375 z m -1.1875,7.046875 h 1.1875 q 1.20312,0 1.9375,-0.8125 0.70312,-0.78125 0.70312,-2.015625 0,-1.25 -0.70312,-2.03125 -0.73438,-0.796875 -1.9375,-0.796875 h -1.1875 z m 12.00244,-4.171875 q 0.32813,0.421875 0.48438,0.96875 0.17187,0.53125 0.17187,1 0,0.453125 -0.0469,0.8125 h -4.09375 q 0.0312,0.765625 0.375,1.25 0.35937,0.484375 1.07812,0.484375 0.95313,0 1.125,-0.84375 h 1.54688 q -0.15625,0.953125 -0.875,1.5 -0.73438,0.578125 -1.79688,0.578125 -1.25,0 -2.09375,-0.921875 -0.875,-0.9375 -0.875,-2.421875 0,-1.53125 0.875,-2.453125 0.82813,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.921875 z m -2.01562,0.296875 q -0.65625,0 -1.03125,0.421875 -0.35938,0.421875 -0.42188,1.09375 h 2.70313 q 0,-1.03125 -0.65625,-1.390625 -0.25,-0.125 -0.59375,-0.125 z m 9.98574,-0.3125 q 0.79688,0.90625 0.79688,2.390625 0,1.484375 -0.84375,2.453125 -0.8125,0.921875 -2.03125,0.921875 -0.59375,0 -1.07813,-0.3125 -0.48437,-0.3125 -0.76562,-0.96875 l -0.39063,1.09375 h -1 v -8.921875 h 1.54688 v 3.390625 q 0.59375,-0.953125 1.78125,-0.953125 1.1875,0 1.98437,0.90625 z m -3.76562,2.03125 v 0.828125 q 0.0156,0.671875 0.46875,1.09375 0.4375,0.421875 1.04687,0.421875 0.625,0 1.0625,-0.53125 0.4375,-0.546875 0.4375,-1.4375 0,-0.890625 -0.4375,-1.40625 -0.42187,-0.53125 -1.07812,-0.53125 -0.65625,0 -1.07813,0.4375 -0.42187,0.421875 -0.42187,1.125 z m 6.77719,-2.78125 h 1.53125 v 6.328125 h -1.53125 z m -0.1875,-2.03125 q 0,-0.421875 0.25,-0.65625 0.25,-0.234375 0.70312,-0.234375 0.4375,0 0.6875,0.234375 0.26563,0.234375 0.26563,0.65625 0,0.421875 -0.26563,0.65625 -0.25,0.234375 -0.6875,0.234375 -0.45312,0 -0.70312,-0.234375 -0.25,-0.234375 -0.25,-0.65625 z m 6.49661,4.671875 q 0.76563,0 1.75,0.25 v -0.625 q 0,-0.671875 -0.26562,-0.984375 -0.26563,-0.328125 -0.875,-0.328125 -0.60938,0 -0.9375,0.25 -0.3125,0.234375 -0.3125,0.671875 h -1.67188 q 0,-1.078125 0.75,-1.546875 0.76563,-0.484375 2.125,-0.484375 1.95313,0 2.53125,1.359375 0.1875,0.46875 0.1875,1.109375 v 4.015625 h -1.34375 l -0.10937,-0.84375 q -0.60938,1.03125 -1.875,1.03125 -1.21875,0 -1.89063,-0.609375 -0.625,-0.5625 -0.625,-1.4375 0,-0.890625 0.6875,-1.359375 0.6875,-0.46875 1.875,-0.46875 z m 1.75,1.21875 q -0.76562,-0.203125 -1.4375,-0.203125 -1.23437,0 -1.23437,0.828125 0,0.34375 0.28125,0.609375 0.28125,0.25 0.90625,0.25 0.64062,0 1.04687,-0.421875 0.40625,-0.421875 0.4375,-1.0625 z m 5.47113,-2.75 q 0.625,-1.265625 2,-1.265625 1.17188,0 1.76563,0.765625 0.59375,0.765625 0.59375,2.03125 v 3.6875 h -1.54688 v -3.6875 q 0,-0.703125 -0.34375,-1.0625 -0.32812,-0.359375 -0.9375,-0.359375 -0.60937,0 -1.04687,0.546875 -0.4375,0.546875 -0.45313,1.640625 v 2.921875 h -1.54687 v -6.3125 h 1.34375 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path156" + d="m 479.15506,85.168274 q 1.4375,0 2.23437,0.703125 0.79688,0.6875 0.79688,1.984375 0,1.296875 -0.79688,2 -0.79687,0.6875 -2.23437,0.6875 h -1.42188 v 3.0625 h -1.54687 v -8.4375 z m 0,4.03125 q 0.71875,0 1.07812,-0.375 0.375,-0.375 0.375,-0.96875 0,-0.59375 -0.375,-0.96875 -0.35937,-0.390625 -1.07812,-0.390625 h -1.42188 v 2.703125 z m 6.88425,0.71875 q 0.76562,0 1.75,0.25 v -0.625 q 0,-0.671875 -0.26563,-0.984375 -0.26562,-0.328125 -0.875,-0.328125 -0.60937,0 -0.9375,0.25 -0.3125,0.234375 -0.3125,0.671875 h -1.67187 q 0,-1.078125 0.75,-1.546875 0.76562,-0.484375 2.125,-0.484375 1.95312,0 2.53125,1.359375 0.1875,0.46875 0.1875,1.109375 v 4.015625 h -1.34375 l -0.10938,-0.84375 q -0.60937,1.03125 -1.875,1.03125 -1.21875,0 -1.89062,-0.609375 -0.625,-0.5625 -0.625,-1.4375 0,-0.890625 0.6875,-1.359375 0.6875,-0.46875 1.875,-0.46875 z m 1.75,1.21875 q -0.76563,-0.203125 -1.4375,-0.203125 -1.23438,0 -1.23438,0.828125 0,0.34375 0.28125,0.609375 0.28125,0.25 0.90625,0.25 0.64063,0 1.04688,-0.421875 0.40625,-0.421875 0.4375,-1.0625 z m 6.36172,-4.015625 q 0.60938,0 1.07813,0.203125 0.46875,0.203125 0.79687,0.515625 0.65625,0.625 0.76563,1.578125 l -1.54688,0.04687 q -0.0937,-0.421875 -0.375,-0.6875 -0.28125,-0.28125 -0.65625,-0.28125 -0.35937,0 -0.625,0.109375 -0.25,0.109375 -0.45312,0.34375 -0.4375,0.546875 -0.4375,1.515625 0,0.953125 0.40625,1.453125 0.42187,0.484375 1.01562,0.484375 0.59375,0 0.85938,-0.28125 0.26562,-0.28125 0.26562,-0.765625 h 1.54688 q 0,1.046875 -0.6875,1.734375 -0.70313,0.703125 -1.96875,0.703125 -1.23438,0 -2.07813,-0.921875 -0.90625,-0.96875 -0.90625,-2.421875 0,-1.53125 0.90625,-2.453125 0.84375,-0.875 2.09375,-0.875 z m 6.892,3.40625 -0.6875,0.578125 v 2.5 h -1.54687 v -8.921875 h 1.54687 v 4.828125 l 2.48438,-2.21875 h 2.07812 l -2.78125,2.328125 2.9375,3.984375 h -1.85937 z m 7.50739,-0.609375 q 0.76562,0 1.75,0.25 v -0.625 q 0,-0.671875 -0.26563,-0.984375 -0.26562,-0.328125 -0.875,-0.328125 -0.60937,0 -0.9375,0.25 -0.3125,0.234375 -0.3125,0.671875 h -1.67187 q 0,-1.078125 0.75,-1.546875 0.76562,-0.484375 2.125,-0.484375 1.95312,0 2.53125,1.359375 0.1875,0.46875 0.1875,1.109375 v 4.015625 h -1.34375 l -0.10938,-0.84375 q -0.60937,1.03125 -1.875,1.03125 -1.21875,0 -1.89062,-0.609375 -0.625,-0.5625 -0.625,-1.4375 0,-0.890625 0.6875,-1.359375 0.6875,-0.46875 1.875,-0.46875 z m 1.75,1.21875 q -0.76563,-0.203125 -1.4375,-0.203125 -1.23438,0 -1.23438,0.828125 0,0.34375 0.28125,0.609375 0.28125,0.25 0.90625,0.25 0.64063,0 1.04688,-0.421875 0.40625,-0.421875 0.4375,-1.0625 z m 4.50238,-0.125 q -0.76563,-0.640625 -0.76563,-1.625 0,-1.015625 0.8125,-1.65625 0.78125,-0.609375 1.78125,-0.609375 1.01563,0 1.6875,0.375 0.0781,-0.734375 0.64063,-1.203125 0.54687,-0.453125 1.28125,-0.453125 l -0.0781,1.46875 q -1.10937,0 -1.15625,0.75 0.48438,0.59375 0.48438,1.21875 0,0.625 -0.21875,1.046875 -0.21875,0.421875 -0.60938,0.703125 -0.76562,0.625 -1.89062,0.625 -0.64063,0 -1.15625,-0.1875 -0.51563,0.15625 -0.51563,0.625 0,0.578125 0.98438,0.578125 h 2.10937 q 2.17188,0 2.17188,1.515625 0,0.5 -0.26563,0.984375 -0.25,0.484375 -0.73437,0.875 -1.0625,0.828125 -2.67188,0.828125 -1.5625,0 -2.53125,-0.640625 -0.92187,-0.609375 -0.92187,-1.5 0,-0.578125 0.35937,-0.921875 0.35938,-0.34375 0.95313,-0.4375 -0.76563,-0.46875 -0.76563,-1.15625 0,-0.453125 0.28125,-0.75 0.28125,-0.3125 0.73438,-0.453125 z m 1.17187,2.734375 q -1.21875,0.04687 -1.21875,0.921875 0,0.453125 0.51563,0.71875 0.51562,0.265625 1.21875,0.265625 0.70312,0 1.09375,-0.125 0.39062,-0.109375 0.67187,-0.3125 0.57813,-0.390625 0.57813,-0.9375 0,-0.234375 -0.17188,-0.390625 -0.15625,-0.140625 -0.46875,-0.140625 z m 1.98438,-4.375 q 0,-0.53125 -0.29688,-0.859375 -0.28125,-0.328125 -0.875,-0.328125 -0.59375,0 -0.90625,0.328125 -0.3125,0.328125 -0.3125,0.859375 0,0.53125 0.3125,0.875 0.3125,0.328125 0.90625,0.328125 0.59375,0 0.875,-0.328125 0.29688,-0.34375 0.29688,-0.875 z m 8.46002,-1.328125 q 0.32812,0.421875 0.48437,0.96875 0.17188,0.53125 0.17188,1 0,0.453125 -0.0469,0.8125 h -4.09375 q 0.0312,0.765625 0.375,1.25 0.35938,0.484375 1.07813,0.484375 0.95312,0 1.125,-0.84375 h 1.54687 q -0.15625,0.953125 -0.875,1.5 -0.73437,0.578125 -1.79687,0.578125 -1.25,0 -2.09375,-0.921875 -0.875,-0.9375 -0.875,-2.421875 0,-1.53125 0.875,-2.453125 0.82812,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.921875 z m -2.01563,0.296875 q -0.65625,0 -1.03125,0.421875 -0.35937,0.421875 -0.42187,1.09375 h 2.70312 q 0,-1.03125 -0.65625,-1.390625 -0.25,-0.125 -0.59375,-0.125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path158" + d="m 477.76443,104.54327 q 0.5625,-1.375 1.70312,-1.375 0.23438,0 0.5625,0.0937 l -0.0312,1.53125 q -0.35937,-0.0781 -0.70312,-0.0781 -1.53125,0 -1.53125,2.125 v 2.76562 h -1.54688 v -6.32812 h 1.54688 z m 8.40387,-0.5 q 0.32812,0.42188 0.48437,0.96875 0.17188,0.53125 0.17188,1 0,0.45313 -0.0469,0.8125 h -4.09375 q 0.0312,0.76563 0.375,1.25 0.35938,0.48438 1.07813,0.48438 0.95312,0 1.125,-0.84375 h 1.54687 q -0.15625,0.95312 -0.875,1.5 -0.73437,0.57812 -1.79687,0.57812 -1.25,0 -2.09375,-0.92187 -0.875,-0.9375 -0.875,-2.42188 0,-1.53125 0.875,-2.45312 0.82812,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.92187 z m -2.01563,0.29688 q -0.65625,0 -1.03125,0.42187 -0.35937,0.42188 -0.42187,1.09375 h 2.70312 q 0,-1.03125 -0.65625,-1.39062 -0.25,-0.125 -0.59375,-0.125 z m 6.0795,-0.1875 q 0.60938,-1.03125 1.82813,-1.03125 1.17187,0 2,0.875 0.875,0.9375 0.875,2.45312 0,1.51563 -0.89063,2.45313 -0.82812,0.89062 -1.98437,0.89062 -1.15625,0 -1.6875,-0.6875 v 3.57813 h -1.54688 v -9.39063 h 1.26563 z m 1.54688,4.25 q 0.28125,0 0.5625,-0.10938 0.29687,-0.125 0.53125,-0.375 0.51562,-0.54687 0.51562,-1.45312 0,-0.92188 -0.45312,-1.4375 -0.4375,-0.53125 -1.07813,-0.53125 -0.64062,0 -1.0625,0.375 -0.40625,0.35937 -0.42187,1.0625 v 1.125 q 0,0.60937 0.42187,0.98437 0.40625,0.35938 0.98438,0.35938 z m 7.66138,-5.28125 q 0.64062,0 1.20312,0.20312 0.5625,0.20313 0.95313,0.60938 0.90625,0.90625 0.90625,2.53125 0,1.57812 -0.90625,2.48437 -0.79688,0.84375 -2.15625,0.84375 -1.34375,0 -2.17188,-0.84375 -0.90625,-0.89062 -0.90625,-2.48437 0,-1.625 0.90625,-2.53125 0.8125,-0.8125 2.17188,-0.8125 z m 1.53125,3.32812 q 0,-1 -0.39063,-1.5 -0.39062,-0.5 -1.09375,-0.5 -0.6875,0 -1.14062,0.5 -0.4375,0.5 -0.4375,1.5 0,1 0.39062,1.5 0.40625,0.5 1.09375,0.5 0.6875,0 1.125,-0.5 0.45313,-0.5 0.45313,-1.5 z m 4.38745,1.23438 q 0.0312,0.89062 1.3125,0.89062 0.5,0 0.8125,-0.20312 0.32812,-0.21875 0.32812,-0.5 0,-0.29688 -0.20312,-0.45313 -0.1875,-0.15625 -0.60938,-0.28125 l -1.375,-0.5 q -1.53125,-0.53125 -1.53125,-1.73437 0,-0.8125 0.71875,-1.29688 0.71875,-0.48437 1.9375,-0.48437 1.21875,0 1.875,0.53125 0.65625,0.53125 0.67188,1.34375 h -1.4375 q -0.0312,-0.3125 -0.3125,-0.5 -0.26563,-0.1875 -0.76563,-0.1875 -0.5,0 -0.78125,0.20312 -0.28125,0.20313 -0.28125,0.46875 0,0.45313 0.76563,0.67188 l 1.5,0.5625 q 0.73437,0.25 1.125,0.64062 0.40625,0.375 0.40625,0.98438 0,0.78125 -0.75,1.34375 -0.76563,0.60937 -2.03125,0.60937 -1.25,0 -2.01563,-0.54687 -0.76565,-0.5625 -0.78128,-1.5625 z m 6.30511,-4.40625 h 1.53125 v 6.32812 h -1.53125 z m -0.1875,-2.03125 q 0,-0.42188 0.25,-0.65625 0.25,-0.23438 0.70313,-0.23438 0.4375,0 0.6875,0.23438 0.26562,0.23437 0.26562,0.65625 0,0.42187 -0.26562,0.65625 -0.25,0.23437 -0.6875,0.23437 -0.45313,0 -0.70313,-0.23437 -0.25,-0.23438 -0.25,-0.65625 z m 7.98102,8.20312 q -0.85938,0.34375 -1.35938,0.34375 -0.48437,0 -0.85937,-0.125 -0.35938,-0.10937 -0.65625,-0.34375 -0.59375,-0.53125 -0.59375,-1.46875 v -3.54687 h -0.875 v -1.01563 h 0.875 v -1.67187 h 1.53125 v 1.67187 h 1.71875 v 1.01563 h -1.71875 v 3.48437 q 0,0.78125 0.75,0.78125 0.375,0 0.96875,-0.20312 z m 4.18646,-6.32812 q 0.64063,0 1.20313,0.20312 0.5625,0.20313 0.95312,0.60938 0.90625,0.90625 0.90625,2.53125 0,1.57812 -0.90625,2.48437 -0.79687,0.84375 -2.15625,0.84375 -1.34375,0 -2.17187,-0.84375 -0.90625,-0.89062 -0.90625,-2.48437 0,-1.625 0.90625,-2.53125 0.8125,-0.8125 2.17187,-0.8125 z m 1.53125,3.32812 q 0,-1 -0.39062,-1.5 -0.39063,-0.5 -1.09375,-0.5 -0.6875,0 -1.14063,0.5 -0.4375,0.5 -0.4375,1.5 0,1 0.39063,1.5 0.40625,0.5 1.09375,0.5 0.6875,0 1.125,-0.5 0.45312,-0.5 0.45312,-1.5 z m 5.07489,-1.90625 q 0.5625,-1.375 1.70313,-1.375 0.23437,0 0.5625,0.0937 l -0.0312,1.53125 q -0.35938,-0.0781 -0.70313,-0.0781 -1.53125,0 -1.53125,2.125 v 2.76562 h -1.54687 v -6.32812 h 1.54687 z m 4.13825,-1.26562 h 1.53125 v 6.32812 h -1.53125 z m -0.1875,-2.03125 q 0,-0.42188 0.25,-0.65625 0.25,-0.23438 0.70312,-0.23438 0.4375,0 0.6875,0.23438 0.26563,0.23437 0.26563,0.65625 0,0.42187 -0.26563,0.65625 -0.25,0.23437 -0.6875,0.23437 -0.45312,0 -0.70312,-0.23437 -0.25,-0.23438 -0.25,-0.65625 z m 8.82476,2.79687 q 0.32813,0.42188 0.48438,0.96875 0.17187,0.53125 0.17187,1 0,0.45313 -0.0469,0.8125 h -4.09375 q 0.0312,0.76563 0.375,1.25 0.35937,0.48438 1.07812,0.48438 0.95313,0 1.125,-0.84375 h 1.54688 q -0.15625,0.95312 -0.875,1.5 -0.73438,0.57812 -1.79688,0.57812 -1.25,0 -2.09375,-0.92187 -0.875,-0.9375 -0.875,-2.42188 0,-1.53125 0.875,-2.45312 0.82813,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.92187 z m -2.01562,0.29688 q -0.65625,0 -1.03125,0.42187 -0.35938,0.42188 -0.42188,1.09375 h 2.70313 q 0,-1.03125 -0.65625,-1.39062 -0.25,-0.125 -0.59375,-0.125 z m 5.53259,3.34375 q 0.0312,0.89062 1.3125,0.89062 0.5,0 0.8125,-0.20312 0.32813,-0.21875 0.32813,-0.5 0,-0.29688 -0.20313,-0.45313 -0.1875,-0.15625 -0.60937,-0.28125 l -1.375,-0.5 q -1.53125,-0.53125 -1.53125,-1.73437 0,-0.8125 0.71875,-1.29688 0.71875,-0.48437 1.9375,-0.48437 1.21875,0 1.875,0.53125 0.65625,0.53125 0.67187,1.34375 h -1.4375 q -0.0312,-0.3125 -0.3125,-0.5 -0.26562,-0.1875 -0.76562,-0.1875 -0.5,0 -0.78125,0.20312 -0.28125,0.20313 -0.28125,0.46875 0,0.45313 0.76562,0.67188 l 1.5,0.5625 q 0.73438,0.25 1.125,0.64062 0.40625,0.375 0.40625,0.98438 0,0.78125 -0.75,1.34375 -0.76562,0.60937 -2.03125,0.60937 -1.25,0 -2.01562,-0.54687 -0.76563,-0.5625 -0.78125,-1.5625 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path160" + d="m 479.84256,132.66829 q -2.25,2.29688 -2.5,4.95313 -0.23438,2.67187 1.5625,4.9375 l -0.71875,0.51562 q -1.04688,-1.15625 -1.5,-2.5625 -0.45313,-1.40625 -0.3125,-2.90625 0.14062,-1.5 0.85937,-2.89062 0.71875,-1.40625 1.98438,-2.57813 z m 1.38998,0.76563 h 4.46875 l -0.0937,0.875 h -3.54687 l -0.26563,2.71875 h 3.3125 l -0.0781,0.89062 h -3.3125 l -0.32813,3.6875 h -0.92187 z m 9.08774,-0.14063 q 1.4375,0 2.1875,1.0625 0.79688,1.09375 0.60938,3.17188 -0.20313,2.07812 -1.21875,3.1875 -0.96875,1.03125 -2.39063,1.03125 -1.4375,0 -2.15625,-1.04688 -0.79687,-1.125 -0.60937,-3.17187 0.17187,-2.0625 1.20312,-3.20313 0.95313,-1.03125 2.375,-1.03125 z m 1.82813,4.25 q 0.15625,-1.625 -0.375,-2.46875 -0.51563,-0.85937 -1.54688,-0.85937 -1.03125,0 -1.70312,0.85937 -0.67188,0.84375 -0.82813,2.46875 -0.15625,1.60938 0.35938,2.4375 0.53125,0.82813 1.54687,0.82813 1.03125,0 1.70313,-0.82813 0.6875,-0.82812 0.84375,-2.4375 z m 5.54046,-4.25 q 1.14063,0 1.70313,0.57813 0.57812,0.57812 0.59375,1.54687 h -0.90625 q -0.0312,-0.57812 -0.40625,-0.89062 -0.375,-0.3125 -1.09375,-0.3125 -0.71875,0 -1.15625,0.35937 -0.42188,0.35938 -0.46875,0.85938 -0.0469,0.5 0.17187,0.76562 0.23438,0.26563 0.76563,0.45313 l 1.46875,0.57812 q 0.76562,0.3125 1.17187,0.82813 0.40625,0.51562 0.32813,1.375 -0.0781,1 -0.85938,1.65625 -0.79687,0.65625 -2.09375,0.65625 -1.15625,0 -1.84375,-0.65625 -0.71875,-0.70313 -0.64062,-1.9375 h 0.89062 q -0.0781,0.8125 0.4375,1.25 0.45313,0.40625 1.23438,0.40625 0.79687,0 1.29687,-0.39063 0.51563,-0.40625 0.5625,-0.9375 0.0625,-0.54687 -0.20312,-0.84375 -0.25,-0.3125 -0.79688,-0.53125 l -1.23437,-0.53125 q -0.89063,-0.34375 -1.3125,-0.79687 -0.42188,-0.46875 -0.34375,-1.32813 0.17187,-1.51562 1.64062,-2 0.48438,-0.15625 1.09375,-0.15625 z m 7.25046,0 q 1.14063,0 1.70313,0.57813 0.57812,0.57812 0.59375,1.54687 h -0.90625 q -0.0312,-0.57812 -0.40625,-0.89062 -0.375,-0.3125 -1.09375,-0.3125 -0.71875,0 -1.15622,0.35937 -0.42188,0.35938 -0.46875,0.85938 -0.0469,0.5 0.17187,0.76562 0.23438,0.26563 0.7656,0.45313 l 1.46875,0.57812 q 0.76562,0.3125 1.17187,0.82813 0.40625,0.51562 0.32813,1.375 -0.0781,1 -0.85938,1.65625 -0.79687,0.65625 -2.09375,0.65625 -1.15622,0 -1.84372,-0.65625 -0.71875,-0.70313 -0.64062,-1.9375 h 0.89062 q -0.0781,0.8125 0.4375,1.25 0.45313,0.40625 1.23435,0.40625 0.79687,0 1.29687,-0.39063 0.51563,-0.40625 0.5625,-0.9375 0.0625,-0.54687 -0.20312,-0.84375 -0.25,-0.3125 -0.79688,-0.53125 l -1.23434,-0.53125 q -0.89063,-0.34375 -1.3125,-0.79687 -0.42188,-0.46875 -0.34375,-1.32813 0.17187,-1.51562 1.64062,-2 0.48435,-0.15625 1.09372,-0.15625 z m 9.86835,1.92188 -0.25,2.76562 h 2.40625 l -0.0781,0.875 h -2.42187 l -0.25,2.75 h -0.92188 l 0.25,-2.75 h -2.40625 l 0.0781,-0.875 h 2.42187 l 0.25,-2.76562 z m 9.32593,-1.78125 q 1.23437,0 1.79687,0.6875 0.57813,0.67187 0.46875,1.82812 -0.10937,1.15625 -0.8125,1.82813 -0.70312,0.67187 -1.92187,0.67187 h -1.45313 l -0.29687,3.15625 h -0.92188 l 0.76563,-8.17187 z m -0.39063,4.125 q 0.76563,0 1.1875,-0.42188 0.4375,-0.4375 0.5,-1.17187 0.0781,-0.75 -0.28125,-1.20313 -0.34375,-0.45312 -1.09375,-0.45312 h -1.46875 l -0.29687,3.25 z m 7.11945,-4.26563 q 1.14062,0 1.70312,0.57813 0.57813,0.57812 0.59375,1.54687 h -0.90625 q -0.0312,-0.57812 -0.40625,-0.89062 -0.375,-0.3125 -1.09375,-0.3125 -0.71875,0 -1.15625,0.35937 -0.42187,0.35938 -0.46875,0.85938 -0.0469,0.5 0.17188,0.76562 0.23437,0.26563 0.76562,0.45313 l 1.46875,0.57812 q 0.76563,0.3125 1.17188,0.82813 0.40625,0.51562 0.32812,1.375 -0.0781,1 -0.85937,1.65625 -0.79688,0.65625 -2.09375,0.65625 -1.15625,0 -1.84375,-0.65625 -0.71875,-0.70313 -0.64063,-1.9375 h 0.89063 q -0.0781,0.8125 0.4375,1.25 0.45312,0.40625 1.23437,0.40625 0.79688,0 1.29688,-0.39063 0.51562,-0.40625 0.5625,-0.9375 0.0625,-0.54687 -0.20313,-0.84375 -0.25,-0.3125 -0.79687,-0.53125 l -1.23438,-0.53125 q -0.89062,-0.34375 -1.3125,-0.79687 -0.42187,-0.46875 -0.34375,-1.32813 0.17188,-1.51562 1.64063,-2 0.48437,-0.15625 1.09375,-0.15625 z m 6.98486,0.14063 q 1.65625,0 2.5625,1.10937 0.89063,1.125 0.71875,2.96875 -0.1875,1.85938 -1.28125,2.96875 -1.10937,1.125 -2.78125,1.125 h -2.15625 l 0.76563,-8.17187 z m -1.9375,7.28125 h 1.25 q 1.20313,0 2.03125,-0.92188 0.8125,-0.875 0.9375,-2.28125 0.14063,-1.40625 -0.5,-2.28125 -0.67187,-0.89062 -1.875,-0.89062 h -1.25 z m 12.75116,-5.5 -0.25,2.76562 h 2.40625 l -0.0781,0.875 h -2.42188 l -0.25,2.75 h -0.92187 l 0.25,-2.75 h -2.40625 l 0.0781,-0.875 h 2.42188 l 0.25,-2.76562 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path162" + d="m 479.3113,149.43391 q 1.23438,0 1.79688,0.6875 0.57812,0.67187 0.46875,1.82812 -0.10938,1.15625 -0.8125,1.82813 -0.70313,0.67187 -1.92188,0.67187 h -1.45312 l -0.29688,3.15625 h -0.92187 l 0.76562,-8.17187 z m -0.39062,4.125 q 0.76562,0 1.1875,-0.42188 0.4375,-0.4375 0.5,-1.17187 0.0781,-0.75 -0.28125,-1.20313 -0.34375,-0.45312 -1.09375,-0.45312 h -1.46875 l -0.29688,3.25 z m 7.41635,-1.17188 q -0.375,-0.125 -0.70313,-0.125 -0.75,0 -1.125,0.6875 -0.375,0.67188 -0.48437,1.84375 h -0.29688 q 0.14063,-1.40625 0.5,-2.23437 l -0.46875,5.04687 h -0.92187 l 0.57812,-6.23437 h 0.92188 l -0.10938,1.1875 q 0.5625,-1.28125 1.60938,-1.28125 0.34375,0 0.64062,0.10937 z m 3.85278,-1.15625 q 0.5625,0 1.01562,0.21875 0.46875,0.20313 0.78125,0.625 0.65625,0.875 0.5,2.42188 -0.15625,1.5625 -0.96875,2.4375 -0.78125,0.8125 -1.95312,0.8125 -1.17188,0 -1.79688,-0.8125 -0.65625,-0.875 -0.5,-2.4375 0.15625,-1.5625 0.96875,-2.42188 0.76563,-0.84375 1.95313,-0.84375 z m -0.0625,0.89063 q -0.82813,0 -1.32813,0.64062 -0.48437,0.625 -0.59375,1.73438 -0.0937,1.10937 0.25,1.75 0.34375,0.625 1.15625,0.625 0.82813,0 1.32813,-0.625 0.51562,-0.64063 0.60937,-1.75 0.10938,-1.10938 -0.25,-1.73438 -0.35937,-0.64062 -1.17187,-0.64062 z m 5.24719,-2.20313 q -0.28125,0 -0.42187,-0.17187 -0.14063,-0.17188 -0.125,-0.46875 0.0312,-0.29688 0.20312,-0.46875 0.1875,-0.17188 0.46875,-0.17188 0.28125,0 0.42188,0.17188 0.15625,0.17187 0.125,0.46875 -0.0156,0.29687 -0.20313,0.46875 -0.17187,0.17187 -0.46875,0.17187 z m -3.71875,9.5 q 0.6875,0.48438 1.23438,0.48438 0.54687,0 0.84375,-0.34375 0.29687,-0.34375 0.375,-1.07813 l 0.67187,-7.10937 h 0.92188 l -0.67188,7.10937 q -0.125,1.25 -0.67187,1.78125 -0.53125,0.54688 -1.3125,0.54688 -0.73438,0 -1.51563,-0.48438 z m 8.22498,-2.5 q 1.14062,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92188 -0.89063,1.4375 -0.65625,0.51563 -1.5625,0.51563 -1.125,0 -1.73437,-0.875 -0.64063,-0.90625 -0.48438,-2.35938 0.15625,-1.51562 0.9375,-2.39062 0.78125,-0.89063 1.89063,-0.89063 1.23437,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42188 h -3.84375 q -0.125,1.53125 0.73437,2.03125 0.26563,0.17187 0.67188,0.17187 z m 1.125,-4.70312 q -0.26563,-0.15625 -0.64063,-0.15625 -0.375,0 -0.6875,0.15625 -0.29687,0.14062 -0.53125,0.40625 -0.45312,0.51562 -0.57812,1.3125 h 2.98437 q 0.14063,-1.29688 -0.54687,-1.71875 z m 5.56152,-0.98438 q 0.5,0 0.85938,0.17188 0.35937,0.15625 0.625,0.4375 0.5,0.54687 0.57812,1.375 l -0.9375,0.0937 q -0.0937,-0.54688 -0.40625,-0.84375 -0.29687,-0.3125 -0.70312,-0.3125 -0.40625,0 -0.71875,0.15625 -0.29688,0.14062 -0.54688,0.4375 -0.5625,0.64062 -0.65625,1.73437 -0.0937,1.07813 0.29688,1.71875 0.40625,0.64063 1.0625,0.64063 0.67187,0 1.03125,-0.34375 0.375,-0.34375 0.42187,-0.98438 h 0.95313 q -0.0781,0.96875 -0.76563,1.59375 -0.67187,0.64063 -1.70312,0.64063 -1.04688,0 -1.6875,-0.875 -0.6875,-0.92188 -0.54688,-2.39063 0.15625,-1.48437 1,-2.40625 0.79688,-0.84375 1.84375,-0.84375 z m 6.45215,6.1875 q -0.6875,0.32813 -1.3125,0.32813 -0.60938,0 -1.03125,-0.42188 -0.42188,-0.4375 -0.32813,-1.32812 l 0.35938,-3.82813 h -0.92188 l 0.0937,-0.78125 h 0.89063 l 0.17187,-1.71875 h 0.92188 l -0.17188,1.71875 h 1.75 l -0.0781,0.78125 h -1.75 l -0.35938,3.8125 q -0.0625,0.48438 0.125,0.71875 0.1875,0.23438 0.59375,0.23438 0.40625,0 0.98438,-0.23438 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path164" + d="m 476.38943,168.91829 q 0.0781,-0.76562 0.70312,-1.21875 0.64063,-0.46875 1.64063,-0.46875 1.01562,0 1.53125,0.46875 0.51562,0.46875 0.48437,1.1875 h -0.90625 q -0.0312,-0.84375 -1.21875,-0.84375 -0.57812,0 -0.90625,0.29688 -0.32812,0.28125 -0.35937,0.60937 -0.0312,0.32813 0.17187,0.5625 0.21875,0.21875 0.71875,0.39063 l 1.07813,0.42187 q 0.70312,0.23438 1.04687,0.625 0.34375,0.375 0.28125,1 -0.0781,0.73438 -0.73437,1.23438 -0.70313,0.5625 -1.79688,0.5625 -1.09375,0 -1.67187,-0.54688 -0.57813,-0.5625 -0.51563,-1.42187 h 0.875 q -0.0156,0.57812 0.35938,0.875 0.375,0.29687 0.98437,0.29687 0.625,0 1.03125,-0.28125 0.40625,-0.29687 0.4375,-0.6875 0.0469,-0.40625 -0.17187,-0.60937 -0.20313,-0.20313 -0.71875,-0.35938 l -1.04688,-0.40625 q -1.42187,-0.46875 -1.29687,-1.6875 z m 7.46045,-0.57812 q 0.6875,-1.10938 1.82812,-1.10938 1.01563,0 1.64063,0.85938 0.67187,0.92187 0.53125,2.39062 -0.14063,1.48438 -1,2.39063 -0.78125,0.875 -1.85938,0.875 -1.0625,0 -1.5,-0.89063 l -0.35937,3.8125 h -0.92188 l 0.875,-9.28125 h 0.75 z m -0.1875,2.75 q -0.0781,0.79687 0.32812,1.29687 0.39063,0.45313 1,0.45313 0.70313,0 1.21875,-0.59375 0.5625,-0.64063 0.67188,-1.75 0.125,-1.10938 -0.29688,-1.71875 -0.42187,-0.625 -1.125,-0.625 -0.64062,0 -1.10937,0.46875 -0.51563,0.5 -0.59375,1.375 v 0 l -0.10938,1.09375 z m 8.1149,1.82812 q 1.14062,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92188 -0.89063,1.4375 -0.65625,0.51563 -1.5625,0.51563 -1.125,0 -1.73437,-0.875 -0.64063,-0.90625 -0.48438,-2.35938 0.15625,-1.51562 0.9375,-2.39062 0.78125,-0.89063 1.89063,-0.89063 1.23437,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42188 h -3.84375 q -0.125,1.53125 0.73437,2.03125 0.26563,0.17187 0.67188,0.17187 z m 1.125,-4.70312 q -0.26563,-0.15625 -0.64063,-0.15625 -0.375,0 -0.6875,0.15625 -0.29687,0.14062 -0.53125,0.40625 -0.45312,0.51562 -0.57812,1.3125 h 2.98437 q 0.14063,-1.29688 -0.54687,-1.71875 z m 5.56152,-0.98438 q 0.5,0 0.85938,0.17188 0.35937,0.15625 0.625,0.4375 0.5,0.54687 0.57812,1.375 l -0.9375,0.0937 q -0.0937,-0.54688 -0.40625,-0.84375 -0.29687,-0.3125 -0.70312,-0.3125 -0.40625,0 -0.71875,0.15625 -0.29688,0.14062 -0.54688,0.4375 -0.5625,0.64062 -0.65625,1.73437 -0.0937,1.07813 0.29688,1.71875 0.40625,0.64063 1.0625,0.64063 0.67187,0 1.03125,-0.34375 0.375,-0.34375 0.42187,-0.98438 h 0.95313 q -0.0781,0.96875 -0.76563,1.59375 -0.67187,0.64063 -1.70312,0.64063 -1.04688,0 -1.6875,-0.875 -0.6875,-0.92188 -0.54688,-2.39063 0.15625,-1.48437 1,-2.40625 0.79688,-0.84375 1.84375,-0.84375 z m 4.13965,0.14063 h 0.9375 l -0.59375,6.23437 h -0.92188 z m 0.59375,-1.45313 q -0.28125,0 -0.42188,-0.17187 -0.125,-0.17188 -0.10937,-0.46875 0.0312,-0.29688 0.20312,-0.46875 0.17188,-0.17188 0.45313,-0.17188 0.29687,0 0.4375,0.17188 0.15625,0.17187 0.125,0.46875 -0.0312,0.29687 -0.21875,0.46875 -0.17188,0.17187 -0.46875,0.17187 z m 2.33527,1.46875 h 0.90625 l 0.0937,-0.9375 q 0.0937,-0.9375 0.59375,-1.35937 0.5,-0.4375 1.07812,-0.4375 0.59375,0 1.0625,0.17187 l -0.25,0.79688 q -0.35937,-0.17188 -0.59375,-0.17188 -0.21875,0 -0.375,0.0469 -0.14062,0.0469 -0.26562,0.15625 -0.26563,0.25 -0.32813,0.79687 l -0.0937,0.9375 h 1.15625 l -0.0625,0.70313 h -1.15625 l -0.51562,5.51562 h -0.90625 l 0.5,-5.51562 h -0.90625 z m 4.77459,-0.0156 h 0.9375 l -0.59375,6.23437 h -0.92187 z m 0.59375,-1.45313 q -0.28125,0 -0.42187,-0.17187 -0.125,-0.17188 -0.10938,-0.46875 0.0312,-0.29688 0.20313,-0.46875 0.17187,-0.17188 0.45312,-0.17188 0.29688,0 0.4375,0.17188 0.15625,0.17187 0.125,0.46875 -0.0312,0.29687 -0.21875,0.46875 -0.17187,0.17187 -0.46875,0.17187 z m 5.02277,1.3125 q 0.5,0 0.85937,0.17188 0.35938,0.15625 0.625,0.4375 0.5,0.54687 0.57813,1.375 l -0.9375,0.0937 q -0.0937,-0.54688 -0.40625,-0.84375 -0.29688,-0.3125 -0.70313,-0.3125 -0.40625,0 -0.71875,0.15625 -0.29687,0.14062 -0.54687,0.4375 -0.5625,0.64062 -0.65625,1.73437 -0.0937,1.07813 0.29687,1.71875 0.40625,0.64063 1.0625,0.64063 0.67188,0 1.03125,-0.34375 0.375,-0.34375 0.42188,-0.98438 h 0.95312 q -0.0781,0.96875 -0.76562,1.59375 -0.67188,0.64063 -1.70313,0.64063 -1.04687,0 -1.6875,-0.875 -0.6875,-0.92188 -0.54687,-2.39063 0.15625,-1.48437 1,-2.40625 0.79687,-0.84375 1.84375,-0.84375 z m 4.21777,-3.09375 q 2.09375,2.35938 1.78125,5.48438 -0.14062,1.48437 -0.85937,2.89062 -0.70313,1.40625 -1.95313,2.5625 l -0.625,-0.51562 q 2.23438,-2.29688 2.5,-4.9375 0.23438,-2.6875 -1.5625,-4.95313 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path166" + d="m 731.5486,359.14316 h 181.82672 v 30.80313 H 731.5486 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path168" + d="m 731.5486,359.14316 h 181.82672 v 30.80313 H 731.5486 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path170" + d="m 744.47046,371.17285 q 1.35937,0 2.0625,0.6875 0.70312,0.67187 0.70312,1.82812 0,1.15625 -0.70312,1.82813 -0.70313,0.67187 -2.0625,0.67187 h -1.60938 v 3.15625 h -1.03125 v -8.17187 z m 0,4.125 q 0.84375,0 1.28125,-0.42188 0.4375,-0.4375 0.4375,-1.17187 0,-0.75 -0.4375,-1.20313 -0.4375,-0.45312 -1.28125,-0.45312 h -1.60938 v 3.25 z m 8.6181,0.0156 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 5.6825,-3.78125 q 1.10937,0 1.75,0.57813 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54688 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60937 -0.51563,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 6.66083,3.09375 -0.82813,0.67188 v 2.60937 h -1.03125 v -8.85937 h 1.03125 v 5.15625 l 3,-2.51563 h 1.42188 l -2.85938,2.32813 3.01563,3.89062 h -1.26563 z m 9.5014,-0.75 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 3.88562,2.40625 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 5.78033,3.42187 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.1452,1.17187 h 3.53125 v 0.875 h -3.53125 z m 6.49524,-1.07812 q 0.625,-1.07813 1.8125,-1.07813 1.20313,0 1.98438,0.89063 0.79687,0.89062 0.79687,2.35937 0,1.46875 -0.8125,2.375 -0.79687,0.89063 -1.95312,0.89063 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.92188 l -0.23438,1.09375 h -0.71875 v -8.85937 h 1.03125 z m 1.75,-0.15625 q -0.73437,0 -1.23437,0.46875 -0.5,0.46875 -0.51563,1.3125 v 1.01562 q 0,0.85938 0.5,1.375 0.51563,0.51563 1.25,0.51563 0.73438,0 1.26563,-0.64063 0.53125,-0.64062 0.53125,-1.70312 0,-1.07813 -0.53125,-1.70313 -0.51563,-0.64062 -1.26563,-0.64062 z m 8.84613,1.42187 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 3.29187,-2.09375 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 9.47931,4 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 8.02021,0.0937 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 12.85456,0.15625 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 9.83875,4.21875 q -0.625,1.34375 -2.0625,1.34375 -1.04688,0 -1.70313,-0.57813 -0.64062,-0.57812 -0.64062,-1.8125 v -3.95312 h 1.03125 v 3.875 q 0,1.57812 1.45312,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.54688,-1.67188 v -3.14062 h 1.03125 v 6.23437 h -1.03125 z m 6.38934,-4.10938 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70313,0.10937 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 2.60925,-0.89062 h 1.03125 v 6.23437 h -1.03125 z m 0.51563,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17188,-0.17188 -0.17188,-0.46875 0,-0.29688 0.17188,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 4.39135,2.67188 q 0.60938,-1.35938 2.09375,-1.35938 1.10938,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.20312,-0.45312 -0.78125,0 -1.26563,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 7.31806,4.82812 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 10.87433,-1.1875 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 7.76062,4.76562 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 4.03583,-0.82813 1.875,5.14063 1.875,-5.14063 h 1.17187 l -2.48437,6.21875 h -1.125 l -2.46875,-6.21875 z m 6.45404,6.32813 q -0.32813,0 -0.54688,-0.20313 -0.20312,-0.21875 -0.20312,-0.51562 0,-0.3125 0.20312,-0.53125 0.21875,-0.21875 0.54688,-0.21875 0.34375,0 0.5625,0.21875 0.21875,0.21875 0.21875,0.53125 0,0.29687 -0.21875,0.51562 -0.21875,0.20313 -0.5625,0.20313 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path172" + d="m 756.65094,314.15222 h 156.72437 v 30.80316 H 756.65094 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path174" + d="m 756.65094,314.15222 h 156.72437 v 30.80316 H 756.65094 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path176" + d="m 768.16656,326.18192 4.04687,6.5625 v -6.5625 h 1.03125 v 8.17187 h -1.14062 l -4.125,-6.65625 v 6.65625 h -1.04688 v -8.17187 z m 10.0672,7.48437 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 3.94208,-0.82813 1.51563,4.95313 1.48437,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01563 h 1.01563 l -2.03125,6.21875 h -1 l -1.4375,-4.35937 -1.40625,4.35937 h -0.98438 l -2.0625,-6.21875 z m 12.91309,-0.0156 h 1.03125 v 6.23437 h -1.03125 z m 0.51562,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17187,-0.17188 -0.17187,-0.46875 0,-0.29688 0.17187,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 4.39136,2.67188 q 0.60938,-1.35938 2.09375,-1.35938 0.8125,0 1.35938,0.40625 0.54687,0.39063 0.78125,1.09375 0.59375,-1.5 2.17187,-1.5 1.125,0 1.73438,0.73438 0.60937,0.73437 0.60937,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.21875,-0.45312 -0.78125,0 -1.21875,0.65625 -0.4375,0.64062 -0.4375,1.78125 v 3.01562 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.20312,-0.45312 -0.78125,0 -1.26563,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 15.32111,0.98437 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 3.88562,2.40625 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42188 -0.70313,-0.625 -0.70313,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14062,0 -1.1875,0.95313 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51563 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35937 0.51563,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48438 z m -0.20313,1.35938 q 0,0.48437 0.53125,0.84375 0.54688,0.35937 1.64063,0.35937 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82813,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10938,-0.42188 -0.70312,0 -1.10937,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 5.78033,3.42187 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 9.81732,-4.10938 h 1.04687 l -3.28125,10.45313 h -1.03125 z m 11.92981,3.67188 q 0,1 -0.54688,1.625 -0.53125,0.625 -1.57812,0.8125 l 2.34375,3.39062 h -1.32813 l -2.125,-3.34375 h -1.42187 v 3.34375 h -1.03125 v -8.17187 h 2.84375 q 1.375,0 2.10937,0.67187 0.73438,0.65625 0.73438,1.67188 z m -2.92188,1.76562 q 0.92188,0 1.39063,-0.4375 0.48437,-0.45312 0.48437,-1.1875 0,-0.73437 -0.46875,-1.17187 -0.45312,-0.4375 -1.32812,-0.4375 h -1.8125 v 3.23437 z m 5.40448,-4.10937 h 4.96875 v 0.875 h -3.9375 v 2.71875 h 3.65625 v 0.89062 h -3.65625 v 3.6875 h -1.03125 z m 11.34327,1.98437 q -0.21875,-1.20312 -1.76563,-1.20312 -0.8125,0 -1.26562,0.35937 -0.4375,0.35938 -0.4375,0.85938 0,0.5 0.26562,0.76562 0.28125,0.26563 0.89063,0.45313 l 1.70312,0.57812 q 0.875,0.3125 1.39063,0.82813 0.51562,0.51562 0.51562,1.46875 0,0.9375 -0.8125,1.57812 -0.79687,0.64063 -2.15625,0.64063 -1.34375,0 -2.21875,-0.67188 -0.85937,-0.6875 -0.89062,-1.92187 h 1 q 0,0.79687 0.5625,1.23437 0.57812,0.42188 1.46875,0.42188 0.89062,0 1.40625,-0.39063 0.51562,-0.40625 0.51562,-0.9375 0,-0.54687 -0.3125,-0.84375 -0.3125,-0.3125 -0.9375,-0.53125 l -1.45312,-0.53125 q -1.01563,-0.34375 -1.53125,-0.79687 -0.51563,-0.46875 -0.51563,-1.375 0,-0.90625 0.71875,-1.5 0.73438,-0.60938 2.04688,-0.60938 1.3125,0 2,0.57813 0.70312,0.57812 0.8125,1.54687 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path178" + d="M 151.65355,99.45145 H 329.22833" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path184" + d="M 263.65353,183.90552 H 328.8189" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path190" + d="m 701.0971,55.07349 h 99.81103 v 88.7559 H 701.0971 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path192" + d="m 701.0971,55.07349 h 99.81103 v 88.7559 H 701.0971 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path194" + d="m 715.73773,66.14207 q -0.20312,-1.109375 -1.5625,-1.109375 -0.65625,0 -1.03125,0.265625 -0.375,0.265625 -0.375,0.65625 0,0.375 0.23438,0.59375 0.25,0.203125 0.76562,0.390625 l 1.82813,0.703125 q 0.9375,0.375 1.4375,0.921875 0.51562,0.546875 0.51562,1.390625 0,1.140625 -0.85937,1.8125 -0.85938,0.671875 -2.45313,0.671875 -1.39062,0 -2.26562,-0.6875 -0.98438,-0.765625 -1.03125,-2.140625 h 1.51562 q 0,1.046875 1.07813,1.3125 0.32812,0.09375 0.85937,0.09375 0.54688,0 1,-0.265625 0.45313,-0.265625 0.45313,-0.71875 0,-0.453125 -0.25,-0.6875 -0.25,-0.234375 -0.8125,-0.453125 l -1.67188,-0.65625 q -0.96875,-0.375 -1.5,-0.875 -0.51562,-0.515625 -0.51562,-1.421875 0,-1.046875 0.8125,-1.65625 0.84375,-0.640625 2.26562,-0.640625 1.42188,0 2.1875,0.65625 0.78125,0.65625 0.89063,1.84375 z m 4.84705,-0.203125 1.53125,4.546875 1.32812,-4.546875 h 1.54688 l -2.40625,7.453125 q -0.39063,1.140625 -0.9375,1.625 -0.53125,0.5 -1.35938,0.5 -0.84375,0 -1.6875,-0.421875 v -1.34375 q 0.67188,0.421875 1.35938,0.421875 0.45312,0 0.75,-0.359375 0.29687,-0.359375 0.48437,-0.953125 l 0.1875,-0.609375 -2.53125,-6.3125 z m 6.79547,4.390625 q 0.0312,0.890625 1.3125,0.890625 0.5,0 0.8125,-0.203125 0.32812,-0.21875 0.32812,-0.5 0,-0.296875 -0.20312,-0.453125 -0.1875,-0.15625 -0.60938,-0.28125 l -1.375,-0.5 q -1.53125,-0.53125 -1.53125,-1.734375 0,-0.8125 0.71875,-1.296875 0.71875,-0.484375 1.9375,-0.484375 1.21875,0 1.875,0.53125 0.65625,0.53125 0.67188,1.34375 h -1.4375 q -0.0312,-0.3125 -0.3125,-0.5 -0.26563,-0.1875 -0.76563,-0.1875 -0.5,0 -0.78125,0.203125 -0.28125,0.203125 -0.28125,0.46875 0,0.453125 0.76563,0.671875 l 1.5,0.5625 q 0.73437,0.25 1.125,0.640625 0.40625,0.375 0.40625,0.984375 0,0.78125 -0.75,1.34375 -0.76563,0.609375 -2.03125,0.609375 -1.25,0 -2.01563,-0.546875 -0.76562,-0.5625 -0.78125,-1.5625 z m 9.72705,1.765625 q -0.85938,0.34375 -1.35938,0.34375 -0.48437,0 -0.85937,-0.125 -0.35938,-0.109375 -0.65625,-0.34375 -0.59375,-0.53125 -0.59375,-1.46875 V 66.95457 h -0.875 v -1.015625 h 0.875 V 64.26707 h 1.53125 v 1.671875 h 1.71875 v 1.015625 h -1.71875 v 3.484375 q 0,0.78125 0.75,0.78125 0.375,0 0.96875,-0.203125 z m 6.10834,-5.40625 q 0.32812,0.421875 0.48437,0.96875 0.17188,0.53125 0.17188,1 0,0.453125 -0.0469,0.8125 h -4.09375 q 0.0312,0.765625 0.375,1.25 0.35938,0.484375 1.07813,0.484375 0.95312,0 1.125,-0.84375 h 1.54687 q -0.15625,0.953125 -0.875,1.5 -0.73437,0.578125 -1.79687,0.578125 -1.25,0 -2.09375,-0.921875 -0.875,-0.9375 -0.875,-2.421875 0,-1.53125 0.875,-2.453125 0.82812,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.921875 z m -2.01563,0.296875 q -0.65625,0 -1.03125,0.421875 -0.35937,0.421875 -0.42187,1.09375 h 2.70312 q 0,-1.03125 -0.65625,-1.390625 -0.25,-0.125 -0.59375,-0.125 z m 10.29822,0.140625 q 0.60937,-1.359375 2.14062,-1.359375 1.125,0 1.75,0.765625 0.60938,0.734375 0.60938,2.03125 v 3.6875 h -1.54688 v -3.6875 q 0,-0.703125 -0.34375,-1.0625 -0.34375,-0.359375 -0.95312,-0.359375 -0.60938,0 -1,0.53125 -0.39063,0.53125 -0.40625,1.609375 v 2.96875 h -1.54688 v -3.6875 q 0,-0.703125 -0.34375,-1.0625 -0.32812,-0.359375 -0.9375,-0.359375 -0.60937,0 -1.04687,0.546875 -0.4375,0.546875 -0.45313,1.640625 v 2.921875 h -1.54687 v -6.3125 h 1.34375 l 0.17187,1.09375 q 0.625,-1.265625 2,-1.265625 0.79688,0 1.3125,0.359375 0.53125,0.359375 0.79688,1 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path196" + d="m 711.44086,81.92332 h 1.53125 v 6.328125 h -1.53125 z m -0.1875,-2.03125 q 0,-0.421875 0.25,-0.65625 0.25,-0.234375 0.70313,-0.234375 0.4375,0 0.6875,0.234375 0.26562,0.234375 0.26562,0.65625 0,0.421875 -0.26562,0.65625 -0.25,0.234375 -0.6875,0.234375 -0.45313,0 -0.70313,-0.234375 -0.25,-0.234375 -0.25,-0.65625 z m 10.04352,3.234375 q 0.60937,-1.359375 2.14062,-1.359375 1.125,0 1.75,0.765625 0.60938,0.734375 0.60938,2.03125 v 3.6875 H 724.25 v -3.6875 q 0,-0.703125 -0.34375,-1.0625 -0.34375,-0.359375 -0.95312,-0.359375 -0.60938,0 -1,0.53125 -0.39063,0.53125 -0.40625,1.609375 v 2.96875 H 720 v -3.6875 q 0,-0.703125 -0.34375,-1.0625 -0.32812,-0.359375 -0.9375,-0.359375 -0.60937,0 -1.04687,0.546875 -0.4375,0.546875 -0.45313,1.640625 v 2.921875 h -1.54687 v -6.3125 h 1.34375 l 0.17187,1.09375 q 0.625,-1.265625 2,-1.265625 0.79688,0 1.3125,0.359375 0.53125,0.359375 0.79688,1 z m 9.10144,1.4375 q 0.76562,0 1.75,0.25 v -0.625 q 0,-0.671875 -0.26563,-0.984375 -0.26562,-0.328125 -0.875,-0.328125 -0.60937,0 -0.9375,0.25 -0.3125,0.234375 -0.3125,0.671875 h -1.67187 q 0,-1.078125 0.75,-1.546875 0.76562,-0.484375 2.125,-0.484375 1.95312,0 2.53125,1.359375 0.1875,0.46875 0.1875,1.109375 v 4.015625 h -1.34375 l -0.10938,-0.84375 q -0.60937,1.03125 -1.875,1.03125 -1.21875,0 -1.89062,-0.609375 -0.625,-0.5625 -0.625,-1.4375 0,-0.890625 0.6875,-1.359375 0.6875,-0.46875 1.875,-0.46875 z m 1.75,1.21875 q -0.76563,-0.203125 -1.4375,-0.203125 -1.23438,0 -1.23438,0.828125 0,0.34375 0.28125,0.609375 0.28125,0.25 0.90625,0.25 0.64063,0 1.04688,-0.421875 0.40625,-0.421875 0.4375,-1.0625 z m 4.50238,-0.125 q -0.76563,-0.640625 -0.76563,-1.625 0,-1.015625 0.8125,-1.65625 0.78125,-0.609375 1.78125,-0.609375 1.01563,0 1.6875,0.375 0.0781,-0.734375 0.64063,-1.203125 0.54687,-0.453125 1.28125,-0.453125 l -0.0781,1.46875 q -1.10937,0 -1.15625,0.75 0.48438,0.59375 0.48438,1.21875 0,0.625 -0.21875,1.046875 -0.21875,0.421875 -0.60938,0.703125 -0.76562,0.625 -1.89062,0.625 -0.64063,0 -1.15625,-0.1875 -0.51563,0.15625 -0.51563,0.625 0,0.578125 0.98438,0.578125 h 2.10937 q 2.17188,0 2.17188,1.515625 0,0.5 -0.26563,0.984375 -0.25,0.484375 -0.73437,0.875 -1.0625,0.828125 -2.67188,0.828125 -1.5625,0 -2.53125,-0.640625 -0.92187,-0.609375 -0.92187,-1.5 0,-0.578125 0.35937,-0.921875 0.35938,-0.34375 0.95313,-0.4375 -0.76563,-0.46875 -0.76563,-1.15625 0,-0.453125 0.28125,-0.75 0.28125,-0.3125 0.73438,-0.453125 z m 1.17187,2.734375 q -1.21875,0.04687 -1.21875,0.921875 0,0.453125 0.51563,0.71875 0.51562,0.265625 1.21875,0.265625 0.70312,0 1.09375,-0.125 0.39062,-0.109375 0.67187,-0.3125 0.57813,-0.390625 0.57813,-0.9375 0,-0.234375 -0.17188,-0.390625 -0.15625,-0.140625 -0.46875,-0.140625 z m 1.98438,-4.375 q 0,-0.53125 -0.29688,-0.859375 -0.28125,-0.328125 -0.875,-0.328125 -0.59375,0 -0.90625,0.328125 -0.3125,0.328125 -0.3125,0.859375 0,0.53125 0.3125,0.875 0.3125,0.328125 0.90625,0.328125 0.59375,0 0.875,-0.328125 0.29688,-0.34375 0.29688,-0.875 z m 8.46002,-1.328125 q 0.32813,0.421875 0.48438,0.96875 0.17187,0.53125 0.17187,1 0,0.453125 -0.0469,0.8125 h -4.09375 q 0.0312,0.765625 0.375,1.25 0.35937,0.484375 1.07812,0.484375 0.95313,0 1.125,-0.84375 h 1.54688 q -0.15625,0.953125 -0.875,1.5 -0.73438,0.578125 -1.79688,0.578125 -1.25,0 -2.09375,-0.921875 -0.875,-0.9375 -0.875,-2.421875 0,-1.53125 0.875,-2.453125 0.82813,-0.875 2.09375,-0.875 1.3125,0 2.03125,0.921875 z m -2.01562,0.296875 q -0.65625,0 -1.03125,0.421875 -0.35938,0.421875 -0.42188,1.09375 h 2.70313 q 0,-1.03125 -0.65625,-1.390625 -0.25,-0.125 -0.59375,-0.125 z m 5.53265,3.34375 q 0.0312,0.890625 1.3125,0.890625 0.5,0 0.8125,-0.203125 0.32812,-0.21875 0.32812,-0.5 0,-0.296875 -0.20312,-0.453125 -0.1875,-0.15625 -0.60938,-0.28125 l -1.375,-0.5 q -1.53125,-0.53125 -1.53125,-1.734375 0,-0.8125 0.71875,-1.296875 0.71875,-0.484375 1.9375,-0.484375 1.21875,0 1.875,0.53125 0.65625,0.53125 0.67188,1.34375 h -1.4375 q -0.0312,-0.3125 -0.3125,-0.5 -0.26563,-0.1875 -0.76563,-0.1875 -0.5,0 -0.78125,0.203125 -0.28125,0.203125 -0.28125,0.46875 0,0.453125 0.76563,0.671875 l 1.5,0.5625 q 0.73437,0.25 1.125,0.640625 0.40625,0.375 0.40625,0.984375 0,0.78125 -0.75,1.34375 -0.76563,0.609375 -2.03125,0.609375 -1.25,0 -2.01563,-0.546875 -0.76562,-0.5625 -0.78125,-1.5625 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path198" + d="m 714.92523,95.31394 q -2.25,2.296875 -2.5,4.95313 -0.23437,2.67187 1.5625,4.9375 l -0.71875,0.51562 q -1.04687,-1.15625 -1.5,-2.5625 -0.45312,-1.40625 -0.3125,-2.90625 0.14063,-1.5 0.85938,-2.890625 0.71875,-1.40625 1.98437,-2.578125 z m 1.39001,0.765625 1.45313,6.890625 2.76562,-6.890625 h 0.98438 l -3.39063,8.171875 h -0.95312 l -1.82813,-8.171875 z m 8.08545,0 1.9375,5.531255 3,-5.531255 h 1.29688 l -0.78125,8.171875 h -0.92188 l 0.625,-6.703125 -3.0625,5.671875 h -0.60937 l -2.01563,-5.796875 -0.64062,6.828125 h -0.92188 l 0.76563,-8.171875 z m 8.26307,3.484375 q 0.0781,-0.765625 0.70312,-1.21875 0.64063,-0.46875 1.64063,-0.46875 1.01562,0 1.53125,0.46875 0.51562,0.46875 0.48437,1.1875 h -0.90625 q -0.0312,-0.84375 -1.21875,-0.84375 -0.57812,0 -0.90625,0.296875 -0.32812,0.28125 -0.35937,0.609375 -0.0312,0.328125 0.17187,0.5625 0.21875,0.21875 0.71875,0.39063 l 1.07813,0.42187 q 0.70312,0.23438 1.04687,0.625 0.34375,0.375 0.28125,1 -0.0781,0.73438 -0.73437,1.23438 -0.70313,0.5625 -1.79688,0.5625 -1.09375,0 -1.67187,-0.54688 -0.57813,-0.5625 -0.51563,-1.42187 h 0.875 q -0.0156,0.57812 0.35938,0.875 0.375,0.29687 0.98437,0.29687 0.625,0 1.03125,-0.28125 0.40625,-0.29687 0.4375,-0.6875 0.0469,-0.40625 -0.17187,-0.60937 -0.20313,-0.20313 -0.71875,-0.35938 l -1.04688,-0.40625 q -1.42187,-0.46875 -1.29687,-1.6875 z m 6.14794,4.75 q -0.25,-0.0312 -0.42187,-0.1875 -0.17188,-0.17187 -0.15625,-0.45312 0.0312,-0.29688 0.23437,-0.48438 0.21875,-0.20312 0.54688,-0.20312 0.32812,0 0.51562,0.29687 0.20313,0.29688 0.15625,0.73438 -0.0469,0.4375 -0.35937,0.89062 -0.29688,0.46875 -0.84375,0.76563 l -0.64063,-0.375 q 0.79688,-0.42188 0.96875,-0.98438 z m 8.52747,-8.375 q 1.14063,0 1.70313,0.578125 0.57812,0.578125 0.59375,1.546875 h -0.90625 q -0.0312,-0.578125 -0.40625,-0.890625 -0.375,-0.3125 -1.09375,-0.3125 -0.71875,0 -1.15625,0.359375 -0.42188,0.359375 -0.46875,0.859375 -0.0469,0.5 0.17187,0.765625 0.23438,0.265625 0.76563,0.453125 l 1.46875,0.578125 q 0.76562,0.3125 1.17187,0.82813 0.40625,0.51562 0.32813,1.375 -0.0781,1 -0.85938,1.65625 -0.79687,0.65625 -2.09375,0.65625 -1.15625,0 -1.84375,-0.65625 -0.71875,-0.70313 -0.64062,-1.9375 h 0.89062 q -0.0781,0.8125 0.4375,1.25 0.45313,0.40625 1.23438,0.40625 0.79687,0 1.29687,-0.39063 0.51563,-0.40625 0.5625,-0.9375 0.0625,-0.54687 -0.20312,-0.84375 -0.25,-0.3125 -0.79688,-0.53125 l -1.23437,-0.53125 q -0.89063,-0.34375 -1.3125,-0.796875 -0.42188,-0.46875 -0.34375,-1.328125 0.17187,-1.515625 1.64062,-2 0.48438,-0.15625 1.09375,-0.15625 z m 6.98486,0.140625 q 1.65625,0 2.5625,1.109375 0.89063,1.125 0.71875,2.96875 -0.1875,1.85938 -1.28125,2.96875 -1.10937,1.125 -2.78125,1.125 h -2.15625 l 0.76563,-8.171875 z m -1.9375,7.281255 h 1.25 q 1.20313,0 2.03125,-0.92188 0.8125,-0.875 0.9375,-2.28125 0.14063,-1.40625 -0.5,-2.28125 -0.67187,-0.890625 -1.875,-0.890625 h -1.25 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path200" + d="m 713.94086,113.87644 q 0.5,0 0.85938,0.17188 0.35937,0.15625 0.625,0.4375 0.5,0.54687 0.57812,1.375 l -0.9375,0.0937 q -0.0937,-0.54688 -0.40625,-0.84375 -0.29687,-0.3125 -0.70312,-0.3125 -0.40625,0 -0.71875,0.15625 -0.29688,0.14062 -0.54688,0.4375 -0.5625,0.64062 -0.65625,1.73437 -0.0937,1.07813 0.29688,1.71875 0.40625,0.64063 1.0625,0.64063 0.67187,0 1.03125,-0.34375 0.375,-0.34375 0.42187,-0.98438 h 0.95313 q -0.0781,0.96875 -0.76563,1.59375 -0.67187,0.64063 -1.70312,0.64063 -1.04688,0 -1.6875,-0.875 -0.6875,-0.92188 -0.54688,-2.39063 0.15625,-1.48437 1,-2.40625 0.79688,-0.84375 1.84375,-0.84375 z m 7.34277,2.34375 q 0.0781,-0.84375 -0.20312,-1.20312 -0.28125,-0.375 -0.875,-0.375 -0.59375,0 -1,0.26562 -0.39063,0.26563 -0.4375,0.84375 h -1.03125 q 0.10937,-1.01562 0.79687,-1.4375 0.6875,-0.4375 1.6875,-0.4375 1.57813,0 1.90625,1.3125 0.125,0.4375 0.0625,1.0625 l -0.375,4 h -0.78125 v -1.04687 q -0.625,1.1875 -1.98437,1.1875 -0.82813,0 -1.34375,-0.5 -0.46875,-0.46875 -0.46875,-1.07813 0,-0.60937 0.1875,-0.98437 0.20312,-0.39063 0.5,-0.64063 0.65625,-0.51562 1.57812,-0.51562 0.92188,0 1.70313,0.34375 z m -0.14062,1.4375 q -0.8125,-0.25 -1.45313,-0.25 -0.64062,0 -1.04687,0.29688 -0.40625,0.28125 -0.40625,0.95312 0,0.40625 0.23437,0.67188 0.23438,0.26562 0.85938,0.26562 0.65625,0 1.17187,-0.46875 0.57813,-0.53125 0.625,-1.34375 z m 6.51422,-2.625 q -0.375,-0.125 -0.70313,-0.125 -0.75,0 -1.125,0.6875 -0.375,0.67188 -0.48437,1.84375 h -0.29688 q 0.14063,-1.40625 0.5,-2.23437 l -0.46875,5.04687 h -0.92187 l 0.57812,-6.23437 h 0.92188 l -0.10938,1.1875 q 0.5625,-1.28125 1.60938,-1.28125 0.34375,0 0.64062,0.10937 z m 4.88403,4.17188 q -0.67187,1.1875 -1.8125,1.1875 -0.96875,0 -1.57812,-0.76563 -0.625,-0.79687 -0.625,-2.04687 0,-1.39063 0.6875,-2.45313 0.8125,-1.25 2.01562,-1.25 1.20313,0 1.65625,1.07813 l 0.34375,-3.5625 h 0.92188 l -0.82813,8.85937 h -0.76562 z m -1.28125,-4.40625 q -0.39062,0 -0.75,0.26562 -0.35937,0.26563 -0.59375,0.65625 -0.4375,0.78125 -0.4375,1.75 0,0.96875 0.40625,1.5 0.42188,0.51563 1.03125,0.51563 0.60938,0 1.09375,-0.48438 0.53125,-0.53125 0.625,-1.42187 l 0.0937,-0.92188 q 0.0781,-0.90625 -0.34375,-1.40625 -0.375,-0.45312 -1.125,-0.45312 z m 4.80243,0.76562 q 0.0781,-0.76562 0.70313,-1.21875 0.64062,-0.46875 1.64062,-0.46875 1.01563,0 1.53125,0.46875 0.51563,0.46875 0.48438,1.1875 h -0.90625 q -0.0312,-0.84375 -1.21875,-0.84375 -0.57813,0 -0.90625,0.29688 -0.32813,0.28125 -0.35938,0.60937 -0.0312,0.32813 0.17188,0.5625 0.21875,0.21875 0.71875,0.39063 l 1.07812,0.42187 q 0.70313,0.23438 1.04688,0.625 0.34375,0.375 0.28125,1 -0.0781,0.73438 -0.73438,1.23438 -0.70312,0.5625 -1.79687,0.5625 -1.09375,0 -1.67188,-0.54688 -0.57812,-0.5625 -0.51562,-1.42187 h 0.875 q -0.0156,0.57812 0.35937,0.875 0.375,0.29687 0.98438,0.29687 0.625,0 1.03125,-0.28125 0.40625,-0.29687 0.4375,-0.6875 0.0469,-0.40625 -0.17188,-0.60937 -0.20312,-0.20313 -0.71875,-0.35938 l -1.04687,-0.40625 q -1.42188,-0.46875 -1.29688,-1.6875 z m 6.14789,4.75 q -0.25,-0.0312 -0.42188,-0.1875 -0.17187,-0.17187 -0.15625,-0.45312 0.0312,-0.29688 0.23438,-0.48438 0.21875,-0.20312 0.54687,-0.20312 0.32813,0 0.51563,0.29687 0.20312,0.29688 0.15625,0.73438 -0.0469,0.4375 -0.35938,0.89062 -0.29687,0.46875 -0.84375,0.76563 l -0.64062,-0.375 q 0.79687,-0.42188 0.96875,-0.98438 z m 7.48059,-0.75 q 1.14063,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92188 -0.89062,1.4375 -0.65625,0.51563 -1.5625,0.51563 -1.125,0 -1.73438,-0.875 -0.64062,-0.90625 -0.48437,-2.35938 0.15625,-1.51562 0.9375,-2.39062 0.78125,-0.89063 1.89062,-0.89063 1.23438,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42188 h -3.84375 q -0.125,1.53125 0.73438,2.03125 0.26562,0.17187 0.67187,0.17187 z m 1.125,-4.70312 q -0.26562,-0.15625 -0.64062,-0.15625 -0.375,0 -0.6875,0.15625 -0.29688,0.14062 -0.53125,0.40625 -0.45313,0.51562 -0.57813,1.3125 h 2.98438 q 0.14062,-1.29688 -0.54688,-1.71875 z m 4.99902,-2.78125 1.9375,5.53125 3,-5.53125 h 1.29688 l -0.78125,8.17187 h -0.92188 l 0.625,-6.70312 -3.0625,5.67187 h -0.60937 l -2.01563,-5.79687 -0.64062,6.82812 h -0.92188 l 0.76563,-8.17187 z m 10.16938,0 1.9375,5.53125 3,-5.53125 h 1.29687 l -0.78125,8.17187 h -0.92187 l 0.625,-6.70312 -3.0625,5.67187 h -0.60938 l -2.01562,-5.79687 -0.64063,6.82812 h -0.92187 l 0.76562,-8.17187 z m 11.48181,-0.14063 q 1.28125,0 1.9375,0.65625 0.65625,0.65625 0.84375,1.70313 l -1.03125,0.21875 q -0.15625,-0.76563 -0.625,-1.20313 -0.45313,-0.45312 -1.10938,-0.45312 -0.90625,0 -1.59375,0.8125 -0.70312,0.89062 -0.85937,2.4375 -0.20313,2.375 0.92187,3.10937 0.375,0.25 0.90625,0.25 0.89063,0 1.4375,-0.51562 0.5625,-0.51563 0.64063,-1.35938 h 0.98437 q -0.125,1.29688 -0.98437,2.0625 -0.84375,0.73438 -2.17188,0.73438 -1.4375,0 -2.1875,-1.1875 -0.70312,-1.14063 -0.53125,-3.09375 0.1875,-1.98438 1.20313,-3.10938 0.95312,-1.0625 2.21875,-1.0625 z m 3.98212,8.375 q -0.25,-0.0312 -0.42188,-0.1875 -0.17187,-0.17187 -0.15625,-0.45312 0.0312,-0.29688 0.23438,-0.48438 0.21875,-0.20312 0.54687,-0.20312 0.32813,0 0.51563,0.29687 0.20312,0.29688 0.15625,0.73438 -0.0469,0.4375 -0.35938,0.89062 -0.29687,0.46875 -0.84375,0.76563 l -0.64062,-0.375 q 0.79687,-0.42188 0.96875,-0.98438 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path202" + d="m 711.1596,136.36081 q -0.29688,0 -0.48438,-0.20313 -0.17187,-0.21875 -0.15625,-0.51562 0.0312,-0.3125 0.23438,-0.53125 0.21875,-0.21875 0.51562,-0.21875 0.3125,0 0.48438,0.21875 0.1875,0.21875 0.15625,0.53125 -0.0312,0.29687 -0.25,0.51562 -0.20313,0.20313 -0.5,0.20313 z m 2.14581,0 q -0.29687,0 -0.48437,-0.20313 -0.17188,-0.21875 -0.15625,-0.51562 0.0312,-0.3125 0.23437,-0.53125 0.21875,-0.21875 0.51563,-0.21875 0.3125,0 0.48437,0.21875 0.1875,0.21875 0.15625,0.53125 -0.0312,0.29687 -0.25,0.51562 -0.20312,0.20313 -0.5,0.20313 z m 2.14582,0 q -0.29688,0 -0.48438,-0.20313 -0.17187,-0.21875 -0.15625,-0.51562 0.0312,-0.3125 0.23438,-0.53125 0.21875,-0.21875 0.51562,-0.21875 0.3125,0 0.48438,0.21875 0.1875,0.21875 0.15625,0.53125 -0.0312,0.29687 -0.25,0.51562 -0.20313,0.20313 -0.5,0.20313 z m 2.14581,0 q -0.29688,0 -0.48438,-0.20313 -0.17187,-0.21875 -0.15625,-0.51562 0.0312,-0.3125 0.23438,-0.53125 0.21875,-0.21875 0.51562,-0.21875 0.3125,0 0.48438,0.21875 0.1875,0.21875 0.15625,0.53125 -0.0312,0.29687 -0.25,0.51562 -0.20313,0.20313 -0.5,0.20313 z m 2.97394,-9.57812 q 2.09375,2.35937 1.78125,5.48437 -0.14063,1.48438 -0.85938,2.89063 -0.70312,1.40625 -1.95312,2.5625 l -0.625,-0.51563 q 2.23437,-2.29687 2.5,-4.9375 0.23437,-2.6875 -1.5625,-4.95312 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path204" + d="m 701.0971,162.73228 h 99.81103 v 88.7559 H 701.0971 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path206" + d="m 701.0971,162.73228 h 99.81103 v 88.7559 H 701.0971 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path208" + d="m 717.56586,182.06648 q 0,0.89063 -0.5,1.53125 -0.5,0.64063 -1.45312,0.875 l 2.26562,3.4375 h -2.01562 l -1.85938,-3.28125 h -1.15625 v 3.28125 h -1.54687 v -8.4375 h 3.125 q 1.5,0 2.32812,0.71875 0.8125,0.6875 0.8125,1.875 z m -3.28125,1.53125 q 0.84375,0 1.26563,-0.375 0.4375,-0.39062 0.4375,-1.01562 0,-0.64063 -0.39063,-1.01563 -0.39062,-0.39062 -1.17187,-0.39062 h -1.57813 v 2.79687 z m 5.59894,-4.125 h 5.32812 v 1.32813 h -3.78125 v 2.21875 h 3.45313 v 1.3125 h -3.45313 v 3.57812 h -1.54687 z m 11.7279,2.32813 q -0.20312,-1.10938 -1.5625,-1.10938 -0.65625,0 -1.03125,0.26563 -0.375,0.26562 -0.375,0.65625 0,0.375 0.23438,0.59375 0.25,0.20312 0.76562,0.39062 l 1.82813,0.70313 q 0.9375,0.375 1.4375,0.92187 0.51562,0.54688 0.51562,1.39063 0,1.14062 -0.85937,1.8125 -0.85938,0.67187 -2.45313,0.67187 -1.39062,0 -2.26562,-0.6875 -0.98438,-0.76562 -1.03125,-2.14062 h 1.51562 q 0,1.04687 1.07813,1.3125 0.32812,0.0937 0.85937,0.0937 0.54688,0 1,-0.26563 0.45313,-0.26562 0.45313,-0.71875 0,-0.45312 -0.25,-0.6875 -0.25,-0.23437 -0.8125,-0.45312 l -1.67188,-0.65625 q -0.96875,-0.375 -1.5,-0.875 -0.51562,-0.51563 -0.51562,-1.42188 0,-1.04687 0.8125,-1.65625 0.84375,-0.64062 2.26562,-0.64062 1.42188,0 2.1875,0.65625 0.78125,0.65625 0.89063,1.84375 z m 9.92224,-0.375 q 0.64063,0 1.20313,0.20312 0.5625,0.20313 0.95312,0.60938 0.90625,0.90625 0.90625,2.53125 0,1.57812 -0.90625,2.48437 -0.79687,0.84375 -2.15625,0.84375 -1.34375,0 -2.17187,-0.84375 -0.90625,-0.89062 -0.90625,-2.48437 0,-1.625 0.90625,-2.53125 0.8125,-0.8125 2.17187,-0.8125 z m 1.53125,3.32812 q 0,-1 -0.39062,-1.5 -0.39063,-0.5 -1.09375,-0.5 -0.6875,0 -1.14063,0.5 -0.4375,0.5 -0.4375,1.5 0,1 0.39063,1.5 0.40625,0.5 1.09375,0.5 0.6875,0 1.125,-0.5 0.45312,-0.5 0.45312,-1.5 z m 5.04364,-2.0625 q 0.625,-1.26562 2,-1.26562 1.17188,0 1.76563,0.76562 0.59375,0.76563 0.59375,2.03125 v 3.6875 h -1.54688 v -3.6875 q 0,-0.70312 -0.34375,-1.0625 -0.32812,-0.35937 -0.9375,-0.35937 -0.60937,0 -1.04687,0.54687 -0.4375,0.54688 -0.45313,1.64063 v 2.92187 h -1.54687 v -6.3125 h 1.34375 z m 6.78778,-3.70312 h 1.54688 v 8.92187 h -1.54688 z m 4.83301,2.60937 1.53125,4.54688 1.32813,-4.54688 h 1.54687 l -2.40625,7.45313 q -0.39062,1.14062 -0.9375,1.625 -0.53125,0.5 -1.35937,0.5 -0.84375,0 -1.6875,-0.42188 v -1.34375 q 0.67187,0.42188 1.35937,0.42188 0.45313,0 0.75,-0.35938 0.29688,-0.35937 0.48438,-0.95312 l 0.1875,-0.60938 -2.53125,-6.3125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path210" + d="m 714.36273,194.97273 q -2.25,2.28125 -2.25,4.95313 0,2.65625 2.25,4.9375 l -0.75,0.51562 q -1.26562,-1.15625 -1.92187,-2.5625 -0.64063,-1.40625 -0.64063,-2.90625 0,-1.5 0.64063,-2.89062 0.65625,-1.40625 1.92187,-2.57813 z m 4.32294,3.59375 q -1.46875,0 -1.51563,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70313,0.10937 l -0.0469,1 q -0.39062,-0.125 -0.79687,-0.125 z m 4.68738,4.65625 q 1.29687,0 1.46875,-1.125 h 1.0625 q -0.14063,0.92188 -0.82813,1.4375 -0.6875,0.51563 -1.70312,0.51563 -1.25,0 -2.03125,-0.89063 -0.76563,-0.89062 -0.76563,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95313,1.01563 0.64062,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76562,-4.70312 q -0.3125,-0.15625 -0.73437,-0.15625 -0.79688,0 -1.26563,0.54687 -0.45312,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 7.80145,1.35937 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 7.6825,-2.70312 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 4.37,7.26562 q 0.64062,0.48438 1.34375,0.48438 0.51562,0 0.89062,-0.51563 0.28125,-0.375 0.5,-1.14062 l 0.1875,-0.64063 -2.5625,-6.21875 h 1.15625 l 1.875,4.95313 1.46875,-4.95313 h 1.04688 l -2.32813,7.45313 q -0.29687,0.95312 -0.79687,1.45312 -0.48438,0.51563 -1.23438,0.51563 -0.73437,0 -1.54687,-0.45313 z m 13.88849,-9.79687 q -0.42188,-0.17188 -0.67188,-0.17188 -0.45312,0 -0.71875,0.23438 -0.26562,0.21875 -0.26562,0.76562 v 0.9375 h 1.29687 v 0.70313 h -1.29687 v 5.51562 h -1.01563 v -5.51562 h -1.01562 v -0.70313 h 1.01562 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.51563,-0.4375 1.17188,-0.4375 0.67187,0 1.1875,0.17187 z m 3.79028,1.60937 q 1.29687,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79688,0.84375 -2.09375,0.84375 -1.29688,0 -2.09375,-0.84375 -0.79688,-0.84375 -0.79688,-2.40625 0,-1.57813 0.79688,-2.42188 0.79687,-0.84375 2.09375,-0.84375 z m 1.85937,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89062,0 -1.375,0.64062 -0.48437,0.625 -0.48437,1.73438 0,1.10937 0.45312,1.75 0.45313,0.625 1.35938,0.625 0.90625,0 1.39062,-0.625 0.5,-0.64063 0.5,-1.75 z m 5.7146,-2.23438 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.70312,0.10937 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path212" + d="m 713.4721,213.53523 q 1.10937,0 1.75,0.57813 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54688 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60937 -0.51563,1.6875 0,1.07812 0.5,1.73437 0.5,0.64063 1.25,0.64063 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98438 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60938 -1.8125,0.60938 -1.1875,0 -2.01562,-0.89063 -0.8125,-0.90625 -0.8125,-2.39062 0,-1.48438 0.8125,-2.35938 0.8125,-0.875 1.90625,-0.875 z m 9.0202,5.14063 q -0.625,1.34375 -2.0625,1.34375 -1.04687,0 -1.70312,-0.57813 -0.64063,-0.57812 -0.64063,-1.8125 v -3.95312 h 1.03125 v 3.875 q 0,1.57812 1.45313,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.54687,-1.67188 v -3.14062 h 1.03125 v 6.23437 h -1.03125 z m 3.52997,-3.45313 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 10.58869,4.5 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 3.99572,-6.1875 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57813 0.79687,-2.42188 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.89063,0 -1.375,0.64062 -0.48438,0.625 -0.48438,1.73438 0,1.10937 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64063 0.5,-1.75 z m 4.16772,-1.90625 q 0.60938,-1.35938 2.09375,-1.35938 0.8125,0 1.35938,0.40625 0.54687,0.39063 0.78125,1.09375 0.59375,-1.5 2.17187,-1.5 1.125,0 1.73438,0.73438 0.60937,0.73437 0.60937,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.21875,-0.45312 -0.78125,0 -1.21875,0.65625 -0.4375,0.64062 -0.4375,1.78125 v 3.01562 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.20312,-0.45312 -0.78125,0 -1.26563,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path214" + d="m 714.42523,227.92586 q -0.42187,-0.17188 -0.67187,-0.17188 -0.45313,0 -0.71875,0.23438 -0.26563,0.21875 -0.26563,0.76562 v 0.9375 h 1.29688 v 0.70313 h -1.29688 v 5.51562 h -1.01562 v -5.51562 h -1.01563 v -0.70313 h 1.01563 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.51562,-0.4375 1.17187,-0.4375 0.67188,0 1.1875,0.17187 z m 1.55591,-0.875 h 1.03125 v 8.85937 h -1.03125 z m 7.57562,4.82812 q 0,-0.84375 -0.35937,-1.20312 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01562,-0.10938 1.15625,0 1.79688,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.04687 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.54688 -0.60938,-0.5625 -0.60938,-1.39062 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.23438 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.54687 0.54687,-1.40625 z m 3.29187,-2.09375 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.76563,-0.46875 1.125,0 1.75,0.46875 0.64062,0.46875 0.67187,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.64062,0 -0.98437,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.26562,0.5625 0.26563,0.21875 0.82813,0.39063 l 1.25,0.42187 q 0.79687,0.23438 1.21875,0.625 0.42187,0.375 0.42187,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.92187,0.53125 -1.23438,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.98437 q 0.0312,0.57812 0.46875,0.875 0.45313,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.26562,-0.60937 -0.25,-0.20313 -0.82813,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 8.36993,-0.375 q 0.625,-1.3125 2.0625,-1.3125 1.10938,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89062 -0.42188,-1.34375 -0.42187,-0.45312 -1.21875,-0.45312 -0.79687,0 -1.28125,0.67187 -0.46875,0.65625 -0.46875,1.84375 v 2.9375 h -1.03125 v -8.85937 h 1.03125 z m 7.08143,-1.17187 h 1.03125 v 6.23437 h -1.03125 z m 0.51562,-1.45313 q -0.3125,0 -0.5,-0.17187 -0.17187,-0.17188 -0.17187,-0.46875 0,-0.29688 0.17187,-0.46875 0.1875,-0.17188 0.5,-0.17188 0.3125,0 0.5,0.17188 0.1875,0.17187 0.1875,0.46875 0,0.29687 -0.1875,0.46875 -0.1875,0.17187 -0.5,0.17187 z m 4.3913,2.67188 q 0.60937,-1.35938 2.09375,-1.35938 1.10937,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89062 -0.42187,-1.34375 -0.42188,-0.45312 -1.20313,-0.45312 -0.78125,0 -1.26562,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 7.31811,4.82812 q -0.78125,-0.39062 -0.78125,-1.17187 0,-0.39063 0.29688,-0.6875 0.3125,-0.3125 0.76562,-0.42188 -0.70312,-0.625 -0.70312,-1.64062 0,-1.01563 0.71875,-1.64063 0.71875,-0.625 1.70312,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54688,-1.09375 0.46875,-0.42187 1.21875,-0.42187 l -0.0937,1.01562 q -1.14063,0 -1.1875,0.95313 0.45312,0.5625 0.45312,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64062 -1.8125,0.64062 -0.73437,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20312,0.1875 -0.20312,0.51563 0,0.6875 1.14062,0.6875 h 2.42188 q 0.875,0 1.375,0.375 0.51562,0.35937 0.51562,1.03125 0,0.98437 -1,1.71875 -1,0.75 -2.51562,0.75 -1.51563,0 -2.39063,-0.57813 -0.875,-0.5625 -0.875,-1.42187 0,-0.54688 0.32813,-0.90625 0.34375,-0.34375 0.89062,-0.48438 z m -0.20312,1.35938 q 0,0.48437 0.53125,0.84375 0.54687,0.35937 1.64062,0.35937 1.10938,0 1.84375,-0.46875 0.73438,-0.46875 0.73438,-1.10937 0,-0.29688 -0.21875,-0.51563 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67188,0.0312 -1.03125,0.3125 -0.34375,0.29688 -0.34375,0.79688 z m 3.82812,-5.28125 q 0,-0.67188 -0.40625,-1.09375 -0.40625,-0.42188 -1.10937,-0.42188 -0.70313,0 -1.10938,0.42188 -0.40625,0.42187 -0.40625,1.09375 0,0.67187 0.40625,1.10937 0.40625,0.4375 1.10938,0.4375 0.70312,0 1.10937,-0.4375 0.40625,-0.4375 0.40625,-1.10937 z m 2.68659,5.0625 q 2.25,-2.28125 2.25,-4.9375 0,-2.67188 -2.25,-4.95313 l 0.75,-0.53125 q 1.26562,1.17188 1.90625,2.57813 0.65625,1.39062 0.65625,2.89062 0,1.5 -0.65625,2.90625 -0.64063,1.40625 -1.90625,2.5625 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path216" + d="m 440.5761,136.69292 39.37009,0.7874" /> + <path + style="fill-rule:evenodd;stroke:#434343;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path218" + d="m 440.5761,136.69292 15.37488,0.3075" /> + <path + style="fill:#434343;fill-rule:evenodd;stroke:#434343;stroke-width:2.67153;stroke-linecap:butt" + inkscape:connector-curvature="0" + id="path220" + d="m 451.50684,142.13129 10.25459,-4.96417 -10.10637,-5.54147 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path222" + d="M 800.90814,99.45145 847.83728,75.010502" /> + <path + style="fill-rule:evenodd;stroke:#a64d79;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path224" + d="M 800.90814,99.45145 831.87262,83.32497" /> + <path + style="fill:#a64d79;fill-rule:evenodd;stroke:#a64d79;stroke-width:3;stroke-linecap:butt" + inkscape:connector-curvature="0" + id="path226" + d="m 834.1615,87.71985 9.78601,-10.683525 -14.36377,1.893761 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path228" + d="m 800.90814,99.45145 46.92914,32.40944" /> + <path + style="fill-rule:evenodd;stroke:#a64d79;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path230" + d="M 800.90814,99.45145 833.026,121.63218" /> + <path + style="fill:#a64d79;fill-rule:evenodd;stroke:#a64d79;stroke-width:3;stroke-linecap:butt" + inkscape:connector-curvature="0" + id="path232" + d="m 830.21014,125.70955 14.01837,3.65912 -8.38666,-11.81387 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path234" + d="m 8,372.53806 h 140.34645 v 72.72443 H 8 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path236" + d="m 8,372.53806 h 140.34645 v 72.72443 H 8 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path238" + d="m 20.921875,389.52838 q 1.359375,0 2.0625,0.6875 0.703125,0.67188 0.703125,1.82813 0,1.15625 -0.703125,1.82812 -0.703125,0.67188 -2.0625,0.67188 H 19.3125 v 3.15625 h -1.03125 v -8.17188 z m 0,4.125 q 0.84375,0 1.28125,-0.42187 0.4375,-0.4375 0.4375,-1.17188 0,-0.75 -0.4375,-1.20312 -0.4375,-0.45313 -1.28125,-0.45313 H 19.3125 v 3.25 z m 9.133759,-2.14062 q -0.21875,-1.20313 -1.765625,-1.20313 -0.8125,0 -1.265625,0.35938 -0.4375,0.35937 -0.4375,0.85937 0,0.5 0.265625,0.76563 0.28125,0.26562 0.890625,0.45312 l 1.703125,0.57813 q 0.875,0.3125 1.390625,0.82812 0.515625,0.51563 0.515625,1.46875 0,0.9375 -0.8125,1.57813 -0.796875,0.64062 -2.15625,0.64062 -1.34375,0 -2.21875,-0.67187 -0.859375,-0.6875 -0.890625,-1.92188 h 1 q 0,0.79688 0.5625,1.23438 0.578125,0.42187 1.46875,0.42187 0.890625,0 1.40625,-0.39062 0.515625,-0.40625 0.515625,-0.9375 0,-0.54688 -0.3125,-0.84375 -0.3125,-0.3125 -0.9375,-0.53125 l -1.453125,-0.53125 q -1.015625,-0.34375 -1.53125,-0.79688 -0.515625,-0.46875 -0.515625,-1.375 0,-0.90625 0.71875,-1.5 0.734375,-0.60937 2.046875,-0.60937 1.3125,0 2,0.57812 0.703125,0.57813 0.8125,1.54688 z m 6.094742,-1.98438 q 1.84375,0 2.953125,1.10938 1.125,1.10937 1.125,2.98437 0,1.85938 -1.125,2.96875 -1.109375,1.10938 -2.953125,1.10938 h -2.40625 v -8.17188 z m -1.375,7.28125 h 1.375 q 1.359375,0 2.171875,-0.90625 0.8125,-0.90625 0.8125,-2.29687 0,-1.39063 -0.8125,-2.28125 -0.8125,-0.89063 -2.171875,-0.89063 h -1.375 z m 11.044449,-5.32812 1.875,5.14062 1.875,-5.14062 H 50.7417 l -2.484375,6.21875 h -1.125 l -2.46875,-6.21875 z m 8.766525,5.53125 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92187 -0.828125,1.4375 -0.6875,0.51562 -1.703125,0.51562 -1.25,0 -2.03125,-0.89062 -0.765625,-0.89063 -0.765625,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.953125,1.01562 0.640625,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.765625,-4.70313 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54688 -0.453125,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 4.942078,0.375 q 0.609375,-1.35937 2.09375,-1.35937 1.109375,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.015625 v -3.65625 q 0,-0.89063 -0.421875,-1.34375 -0.421875,-0.45313 -1.203125,-0.45313 -0.78125,0 -1.265625,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 11.11496,-0.28125 v -3.5625 h 1.015625 v 8.85938 h -0.828125 l -0.125,-1.04688 q -0.296875,0.59375 -0.796875,0.89063 -0.5,0.29687 -1.078125,0.29687 -1.1875,0 -1.984375,-0.90625 -0.796875,-0.90625 -0.796875,-2.375 0,-1.46875 0.78125,-2.34375 0.796875,-0.89062 2,-0.89062 1.203125,0 1.8125,1.07812 z m -1.765625,-0.15625 q -0.75,0 -1.265625,0.64063 -0.515625,0.625 -0.515625,1.70312 0,1.0625 0.515625,1.70313 0.53125,0.64062 1.25,0.64062 0.734375,0 1.25,-0.48437 0.515625,-0.48438 0.53125,-1.3125 v -1.01563 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.265625,-0.5 z m 7.85437,-0.92187 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57812 0.796875,-2.42187 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.890625,0 -1.375,0.64063 -0.484375,0.625 -0.484375,1.73437 0,1.10938 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64062 0.5,-1.75 z m 5.71463,-2.23437 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.703125,0.10938 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path240" + d="m 17.984375,409.01276 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.265625,0.5625 0.265625,0.21875 0.828125,0.39063 l 1.25,0.42187 q 0.796875,0.23438 1.21875,0.625 0.421875,0.375 0.421875,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.984375 q 0.03125,0.57812 0.46875,0.875 0.453125,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.265625,-0.60937 -0.25,-0.20313 -0.828125,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 9.573074,-1.6875 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57813 0.796875,-2.42188 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.890625,0 -1.375,0.64062 -0.484375,0.625 -0.484375,1.73438 0,1.10937 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64063 0.5,-1.75 z m 6.199005,-4.875 q -0.421875,-0.17188 -0.671875,-0.17188 -0.453125,0 -0.71875,0.23438 -0.265625,0.21875 -0.265625,0.76562 v 0.9375 h 1.296875 v 0.70313 h -1.296875 v 5.51562 h -1.015625 v -5.51562 h -1.015625 v -0.70313 h 1.015625 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.515625,-0.4375 1.171875,-0.4375 0.671875,0 1.1875,0.17187 z m 4.805908,7.79687 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20312 -0.921875,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.95313 0.890625,0.95313 0.484375,0 1.078125,-0.23438 z m 1.745727,-6.03125 1.515625,4.95313 1.484375,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01563 h 1.015625 l -2.03125,6.21875 h -1 l -1.4375,-4.35937 -1.40625,4.35937 h -0.984375 l -2.0625,-6.21875 z m 13.522233,2.1875 q 0,-0.84375 -0.359375,-1.20312 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.015625,-0.10938 1.15625,0 1.796875,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.109375,-1.04687 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.54688 -0.609375,-0.5625 -0.609375,-1.39062 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.23438 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.54687 0.546875,-1.40625 z m 6.15123,-2.75 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.703125,0.10937 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 4.687378,4.65625 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92188 -0.828125,1.4375 -0.6875,0.51563 -1.703125,0.51563 -1.25,0 -2.03125,-0.89063 -0.765625,-0.89062 -0.765625,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.953125,1.01563 0.640625,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.765625,-4.70312 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54687 -0.453125,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path242" + d="m 21.828125,420.76276 q -2.25,2.29688 -2.5,4.95313 -0.234375,2.67187 1.5625,4.9375 l -0.71875,0.51562 q -1.046875,-1.15625 -1.5,-2.5625 -0.453125,-1.40625 -0.3125,-2.90625 0.140625,-1.5 0.859375,-2.89062 0.71875,-1.40625 1.984375,-2.57813 z m 2.030609,3.65625 q 0.65625,-1.09375 1.8125,-1.09375 0.90625,0 1.515625,0.76563 0.640625,0.76562 0.640625,2.01562 0,1.39063 -0.703125,2.46875 -0.34375,0.54688 -0.875,0.90625 -0.53125,0.35938 -1.171875,0.35938 -1.296875,0 -1.6875,-1.23438 l -0.3125,1.09375 h -0.625 l 0.828125,-8.85937 h 0.921875 z m -0.25,2.625 q -0.07813,0.85938 0.359375,1.40625 0.390625,0.48438 0.953125,0.48438 0.5625,0 0.90625,-0.26563 0.359375,-0.26562 0.59375,-0.6875 0.453125,-0.79687 0.453125,-1.76562 0,-0.96875 -0.421875,-1.46875 -0.40625,-0.5 -1.046875,-0.5 -0.625,0 -1.125,0.48437 -0.515625,0.54688 -0.59375,1.45313 z m 6.479324,-3.57812 h 0.9375 l -0.59375,6.23437 h -0.921875 z m 0.59375,-1.45313 q -0.28125,0 -0.421875,-0.17187 -0.125,-0.17188 -0.109375,-0.46875 0.03125,-0.29688 0.203125,-0.46875 0.171875,-0.17188 0.453125,-0.17188 0.296875,0 0.4375,0.17188 0.15625,0.17187 0.125,0.46875 -0.03125,0.29687 -0.21875,0.46875 -0.171875,0.17187 -0.46875,0.17187 z m 3.710251,2.6875 q 0.703125,-1.375 2.015625,-1.375 1,0 1.484375,0.73438 0.5,0.73437 0.359375,1.98437 l -0.328125,3.65625 h -0.921875 l 0.34375,-3.65625 q 0.09375,-0.89062 -0.25,-1.34375 -0.328125,-0.45312 -1.046875,-0.45312 -0.71875,0 -1.21875,0.67187 -0.5,0.65625 -0.609375,1.84375 l -0.265625,2.9375 h -0.921875 l 0.578125,-6.21875 h 0.796875 z m 9.721527,0.96875 q 0.07813,-0.84375 -0.203125,-1.20312 -0.28125,-0.375 -0.875,-0.375 -0.59375,0 -1,0.26562 -0.390625,0.26563 -0.4375,0.84375 h -1.03125 q 0.109375,-1.01562 0.796875,-1.4375 0.6875,-0.4375 1.6875,-0.4375 1.578125,0 1.90625,1.3125 0.125,0.4375 0.0625,1.0625 l -0.375,4 h -0.78125 v -1.04687 q -0.625,1.1875 -1.984375,1.1875 -0.828125,0 -1.34375,-0.5 -0.46875,-0.46875 -0.46875,-1.07813 0,-0.60937 0.1875,-0.98437 0.203125,-0.39063 0.5,-0.64063 0.65625,-0.51562 1.578125,-0.51562 0.921875,0 1.703125,0.34375 z m -0.140625,1.4375 q -0.8125,-0.25 -1.453125,-0.25 -0.640625,0 -1.046875,0.29688 -0.40625,0.28125 -0.40625,0.95312 0,0.40625 0.234375,0.67188 0.234375,0.26562 0.859375,0.26562 0.65625,0 1.171875,-0.46875 0.578125,-0.53125 0.625,-1.34375 z m 6.514221,-2.625 q -0.375,-0.125 -0.703125,-0.125 -0.75,0 -1.125,0.6875 -0.375,0.67188 -0.484375,1.84375 h -0.296875 q 0.140625,-1.40625 0.5,-2.23437 l -0.46875,5.04687 h -0.921875 l 0.578125,-6.23437 h 0.921875 l -0.109375,1.1875 q 0.5625,-1.28125 1.609375,-1.28125 0.34375,0 0.640625,0.10937 z m -0.209717,7.03125 q 0.53125,0.48438 1.15625,0.48438 0.84375,0 1.390625,-1.65625 l 0.234375,-0.64063 -1.703125,-6.21875 h 1.03125 l 1.21875,4.9375 1.796875,-4.9375 h 0.9375 l -2.796875,7.45313 q -0.359375,0.95312 -0.859375,1.45312 -0.484375,0.51563 -1.15625,0.51563 -0.671875,0 -1.328125,-0.45313 z m 12.725739,-8.1875 q 0.5625,0 1.015625,0.21875 0.46875,0.20313 0.78125,0.625 0.65625,0.875 0.5,2.42188 -0.15625,1.5625 -0.96875,2.4375 -0.78125,0.8125 -1.953125,0.8125 -1.171875,0 -1.796875,-0.8125 -0.65625,-0.875 -0.5,-2.4375 0.15625,-1.5625 0.96875,-2.42188 0.765625,-0.84375 1.953125,-0.84375 z m -0.0625,0.89063 q -0.828125,0 -1.328125,0.64062 -0.484375,0.625 -0.59375,1.73438 -0.09375,1.10937 0.25,1.75 0.34375,0.625 1.15625,0.625 0.828125,0 1.328125,-0.625 0.515625,-0.64063 0.609375,-1.75 0.109375,-1.10938 -0.25,-1.73438 -0.359375,-0.64062 -1.171875,-0.64062 z m 5.184708,0.48437 q 0.703125,-1.375 2.015625,-1.375 1,0 1.484375,0.73438 0.5,0.73437 0.359375,1.98437 l -0.328125,3.65625 h -0.921875 l 0.34375,-3.65625 q 0.09375,-0.89062 -0.25,-1.34375 -0.328125,-0.45312 -1.046875,-0.45312 -0.71875,0 -1.21875,0.67187 -0.5,0.65625 -0.609375,1.84375 l -0.265625,2.9375 h -0.921875 l 0.578125,-6.21875 h 0.796875 z m 6.721527,-3.85937 h 0.921875 l -0.828125,8.85937 h -0.921875 z m 1.233673,10.67187 q 0.53125,0.48438 1.15625,0.48438 0.84375,0 1.390625,-1.65625 l 0.234375,-0.64063 -1.703125,-6.21875 h 1.03125 l 1.21875,4.9375 1.796875,-4.9375 h 0.9375 l -2.796875,7.45313 q -0.359375,0.95312 -0.859375,1.45312 -0.484375,0.51563 -1.15625,0.51563 -0.671875,0 -1.328125,-0.45313 z m 7.811035,-11.28125 q 2.09375,2.35938 1.78125,5.48438 -0.140625,1.48437 -0.859375,2.89062 -0.703125,1.40625 -1.953125,2.5625 l -0.625,-0.51562 q 2.234375,-2.29688 2.5,-4.9375 0.234375,-2.6875 -1.5625,-4.95313 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path244" + d="M 149.11993,408.90067 H 329.21441" /> + <path + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill:#30bc3a;fill-opacity:1" + inkscape:connector-curvature="0" + id="path246" + d="M 149.11993,408.90067 H 311.21441" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + id="path248" + d="m 311.21442,413.85587 13.61429,-4.9552 -13.61429,-4.9552 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path250" + d="m 148.35432,408.42166 h 93.6378 v 60.81891 h -93.6378 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path252" + d="m 160.01057,420.7398 h 1.0625 l 2.3125,6.92187 h -0.89063 l -0.59375,-1.76562 h -2.75 l -0.59375,1.76562 h -0.92187 z m -0.625,4.48437 h 2.29687 l -1.15625,-3.42187 z m 8.78366,1.39063 q -0.54687,1.14062 -1.75,1.14062 -0.89062,0 -1.4375,-0.48437 -0.54687,-0.5 -0.54687,-1.53125 v -3.34375 h 0.875 v 3.28125 q 0,1.32812 1.23437,1.32812 0.70313,0 1.14063,-0.54687 0.45312,-0.5625 0.48437,-1.42188 v -2.64062 h 0.875 v 5.26562 h -0.875 z m 5.62962,0.89062 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79687,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85937 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 3.14742,-5.23437 q 1.10937,0 1.78125,0.71875 0.67187,0.71875 0.67187,2.04687 0,1.3125 -0.67187,2.03125 -0.67188,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67188,-0.71875 -0.67188,-2.03125 0,-1.32812 0.67188,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57812,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39062,-0.53125 -1.15625,-0.53125 -0.76562,0 -1.17187,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39062,1.46875 0.39063,0.53125 1.14063,0.53125 0.76562,0 1.1875,-0.53125 0.42187,-0.53125 0.42187,-1.46875 z m 3.19338,-1.625 q 0.51562,-1.14062 1.76562,-1.14062 0.6875,0 1.14063,0.34375 0.46875,0.32812 0.67187,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45313,0.625 0.51562,0.60937 0.51562,1.67187 v 3.09375 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.34375,-0.39063 -1.01562,-0.39063 -0.67188,0 -1.04688,0.5625 -0.35937,0.54688 -0.35937,1.51563 v 2.54687 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.35938,-0.39063 -1.01563,-0.39063 -0.65625,0 -1.07812,0.54688 -0.40625,0.53125 -0.42188,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 12.36995,0.84375 q 0,-0.71875 -0.29688,-1.01562 -0.29687,-0.3125 -0.85937,-0.3125 -0.5625,0 -0.90625,0.21875 -0.34375,0.21875 -0.34375,0.70312 h -0.96875 q 0,-1.20312 1.29687,-1.48437 0.40625,-0.0937 0.85938,-0.0937 0.98437,0 1.53125,0.5 0.54687,0.48437 0.54687,1.5 v 3.39062 h -0.73437 l -0.0937,-0.875 q -0.48438,1 -1.75,1 -0.84375,0 -1.35938,-0.46875 -0.51562,-0.48437 -0.51562,-1.1875 0,-0.70312 0.5625,-1.09375 0.57812,-0.40625 1.42187,-0.40625 0.84375,0 1.60938,0.29688 z m 0,1.21875 q -0.76563,-0.21875 -1.35938,-0.21875 -0.57812,0 -0.95312,0.21875 -0.35938,0.20313 -0.35938,0.64063 0,1 1.125,1 0.64063,0 1.09375,-0.45313 0.45313,-0.46875 0.45313,-1.1875 z m 5.46756,2.03125 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 1.31929,-5.10937 h 0.85937 v 5.26562 h -0.85937 z m 0.42187,-1.23438 q -0.26562,0 -0.42187,-0.14062 -0.14063,-0.15625 -0.14063,-0.40625 0,-0.25 0.14063,-0.39063 0.15625,-0.15625 0.42187,-0.15625 0.26563,0 0.42188,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42188,0.14062 z m 4.45188,1.10938 q 0.9375,0 1.48437,0.48437 0.54688,0.46875 0.71875,1.1875 l -0.875,0.0781 q -0.15625,-0.46875 -0.46875,-0.71875 -0.3125,-0.26563 -0.70312,-0.26563 -0.70313,0 -1.14063,0.53125 -0.4375,0.53125 -0.4375,1.4375 0,0.90625 0.42188,1.45313 0.42187,0.54687 1.04687,0.54687 0.64063,0 0.95313,-0.28125 0.32812,-0.29687 0.32812,-0.82812 h 0.89063 q 0,0.84375 -0.59375,1.375 -0.59375,0.51562 -1.53125,0.51562 -1,0 -1.70313,-0.75 -0.70312,-0.76562 -0.70312,-2.03125 0,-1.26562 0.6875,-2 0.70312,-0.73437 1.625,-0.73437 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path254" + d="m 158.5262,435.39606 h 0.85937 v 5.26562 h -0.85937 z m 0.42187,-1.23438 q -0.26562,0 -0.42187,-0.14062 -0.14063,-0.15625 -0.14063,-0.40625 0,-0.25 0.14063,-0.39063 0.15625,-0.15625 0.42187,-0.15625 0.26563,0 0.42188,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42188,0.14062 z m 3.54563,2.25 q 0.51562,-1.14062 1.76562,-1.14062 0.6875,0 1.14063,0.34375 0.46875,0.32812 0.67187,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45313,0.625 0.51562,0.60937 0.51562,1.67187 v 3.09375 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.34375,-0.39063 -1.01562,-0.39063 -0.67188,0 -1.04688,0.5625 -0.35937,0.54688 -0.35937,1.51563 v 2.54687 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.35938,-0.39063 -1.01563,-0.39063 -0.65625,0 -1.07812,0.54688 -0.40625,0.53125 -0.42188,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 9.93245,-0.20312 q 0.51562,-0.9375 1.54687,-0.9375 1.03125,0 1.71875,0.76562 0.6875,0.75 0.6875,2 0,1.23438 -0.70312,2 -0.6875,0.75 -1.70313,0.75 -1,0 -1.48437,-0.76562 v 3.21875 h -0.875 v -7.84375 h 0.71875 z m 1.5,3.79687 q 0.625,0 1.09375,-0.51562 0.46875,-0.53125 0.46875,-1.45313 0,-0.92187 -0.45313,-1.45312 -0.4375,-0.54688 -1.07812,-0.54688 -0.64063,0 -1.04688,0.40625 -0.40625,0.40625 -0.42187,1.07813 v 1 q 0,0.70312 0.40625,1.09375 0.42187,0.39062 1.03125,0.39062 z m 5.908,-4.73437 q 1.10938,0 1.78125,0.71875 0.67188,0.71875 0.67188,2.04687 0,1.3125 -0.67188,2.03125 -0.67187,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67187,-0.71875 -0.67187,-2.03125 0,-1.32812 0.67187,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57813,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39063,-0.53125 -1.15625,-0.53125 -0.76563,0 -1.17188,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39063,1.46875 0.39062,0.53125 1.14062,0.53125 0.76563,0 1.1875,-0.53125 0.42188,-0.53125 0.42188,-1.46875 z m 4.49025,-1.89062 q -1.23438,0 -1.28125,1.95312 v 2.5625 h -0.875 v -5.26562 h 0.875 v 1.01562 q 0.39062,-1.10937 1.39062,-1.10937 0.32813,0 0.60938,0.0937 l -0.0469,0.85937 q -0.32812,-0.10937 -0.67187,-0.10937 z m 4.66945,4.35937 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path256" + d="m 8,165.07407 h 143.65355 v 72.72441 H 8 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path258" + d="m 8,165.07407 h 143.65355 v 72.72441 H 8 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path260" + d="m 18.3125,182.06439 h 4.96875 v 0.875 h -3.9375 v 2.71875 H 23 v 0.89062 h -3.65625 v 3.6875 H 18.3125 Z m 9.515167,2.82812 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.703125,0.10937 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 4.687378,4.65625 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92188 -0.828125,1.4375 -0.6875,0.51563 -1.703125,0.51563 -1.25,0 -2.03125,-0.89063 -0.765625,-0.89062 -0.765625,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.953125,1.01563 0.640625,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.765625,-4.70312 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54687 -0.453125,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 6.082703,-0.98438 q 1.328125,0 1.921875,1.17188 l 0.21875,-1.01563 h 0.703125 v 7.26563 q 0,0.64062 0.140625,0.85937 0.15625,0.21875 0.34375,0.3125 0.1875,0.0937 0.46875,0.1875 l -0.34375,0.79688 q -0.890625,-0.23438 -1.265625,-0.75 -0.359375,-0.5 -0.359375,-1.46875 v -1.96875 q -0.53125,1.125 -1.75,1.125 -1.21875,0 -2.046875,-0.89063 -0.8125,-0.89062 -0.8125,-2.35937 0,-1.46875 0.8125,-2.35938 0.8125,-0.90625 1.96875,-0.90625 z m 0.07813,0.92188 q -0.75,0 -1.28125,0.64062 -0.515625,0.625 -0.515625,1.71875 0,1.07813 0.546875,1.70313 0.5625,0.625 1.3125,0.625 1.0625,0 1.515625,-0.95313 0.15625,-0.29687 0.171875,-0.71875 v -1.17187 q 0,-0.85938 -0.5,-1.34375 -0.484375,-0.5 -1.25,-0.5 z m 9.812546,4.21875 q -0.625,1.34375 -2.0625,1.34375 -1.046875,0 -1.703125,-0.57813 -0.640625,-0.57812 -0.640625,-1.8125 v -3.95312 h 1.03125 v 3.875 q 0,1.57812 1.453125,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.546875,-1.67188 v -3.14062 h 1.03125 v 6.23437 h -1.03125 z m 5.998687,0.54687 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92188 -0.828125,1.4375 -0.6875,0.51563 -1.703125,0.51563 -1.25,0 -2.03125,-0.89063 -0.765625,-0.89062 -0.765625,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.953125,1.01563 0.640625,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.765625,-4.70312 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54687 -0.453125,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 4.942078,0.375 q 0.609375,-1.35938 2.09375,-1.35938 1.109375,0 1.71875,0.73438 0.625,0.73437 0.625,1.98437 v 3.65625 h -1.015625 v -3.65625 q 0,-0.89062 -0.421875,-1.34375 -0.421875,-0.45312 -1.203125,-0.45312 -0.78125,0 -1.265625,0.64062 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 10.30246,4.82812 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20312 -0.921875,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.95313 0.890625,0.95313 0.484375,0 1.078125,-0.23438 z m 1.761352,-8.67187 h 1.03125 v 8.85937 h -1.03125 z m 2.481858,10.67187 q 0.640625,0.48438 1.34375,0.48438 0.515625,0 0.890625,-0.51563 0.28125,-0.375 0.5,-1.14062 l 0.1875,-0.64063 -2.5625,-6.21875 h 1.15625 l 1.875,4.95313 1.46875,-4.95313 h 1.046875 l -2.328125,7.45313 q -0.296875,0.95312 -0.796875,1.45312 -0.484375,0.51563 -1.234375,0.51563 -0.734375,0 -1.546875,-0.45313 z m 15.091629,-3.04687 q -0.625,1.34375 -2.0625,1.34375 -1.046875,0 -1.703125,-0.57813 -0.640625,-0.57812 -0.640625,-1.8125 v -3.95312 h 1.03125 v 3.875 q 0,1.57812 1.453125,1.57812 0.84375,0 1.375,-0.64062 0.53125,-0.65625 0.546875,-1.67188 v -3.14062 h 1.03125 v 6.23437 h -1.03125 z m 4.826812,-4.03125 q 0.609375,-1.10938 1.8125,-1.10938 1.21875,0 2.03125,0.90625 0.81251,0.89063 0.81251,2.35938 0,1.46875 -0.828135,2.35937 -0.8125,0.89063 -2.015625,0.89063 -1.1875,0 -1.75,-0.89063 v 3.8125 H 94.4558 v -9.28125 h 0.84375 z m 1.765625,4.5 q 0.734375,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70313 0,-1.09375 -0.53125,-1.71875 -0.515625,-0.64062 -1.28125,-0.64062 -0.75,0 -1.234375,0.46875 -0.484375,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.484375,1.28125 0.5,0.46875 1.21875,0.46875 z m 9.245005,-4.53125 v -3.5625 h 1.01562 v 8.85937 h -0.82812 l -0.125,-1.04687 q -0.29688,0.59375 -0.79688,0.89062 -0.5,0.29688 -1.07812,0.29688 -1.1875,0 -1.98438,-0.90625 -0.79687,-0.90625 -0.79687,-2.375 0,-1.46875 0.78125,-2.34375 0.79687,-0.89063 2,-0.89063 1.20312,0 1.8125,1.07813 z m -1.76563,-0.15625 q -0.75,0 -1.26562,0.64062 -0.51563,0.625 -0.51563,1.70313 0,1.0625 0.51563,1.70312 0.53125,0.64063 1.25,0.64063 0.73437,0 1.25,-0.48438 0.51562,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26563,-0.5 z m 9.46375,1.42187 q 0,-0.84375 -0.35938,-1.20312 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.01563,-0.10938 1.15625,0 1.79687,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04687 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54688 -0.60937,-0.5625 -0.60937,-1.39062 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23438 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54687 0.54688,-1.40625 z m 6.86998,2.40625 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20312 -0.92187,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95313 0.89063,0.95313 0.48437,0 1.07812,-0.23438 z m 3.90197,-0.5 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.03125,-0.89063 -0.76562,-0.89062 -0.76562,-2.375 0,-1.48437 0.78125,-2.35937 0.78125,-0.89063 2.09375,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.45313,0.53125 -0.53125,1.32813 h 3.3125 q 0,-1.29688 -0.78125,-1.71875 z m 8.02019,0.0937 v -3.5625 h 1.01563 v 8.85937 h -0.82813 l -0.125,-1.04687 q -0.29687,0.59375 -0.79687,0.89062 -0.5,0.29688 -1.07813,0.29688 -1.1875,0 -1.98437,-0.90625 -0.79688,-0.90625 -0.79688,-2.375 0,-1.46875 0.78125,-2.34375 0.79688,-0.89063 2,-0.89063 1.20313,0 1.8125,1.07813 z m -1.76562,-0.15625 q -0.75,0 -1.26563,0.64062 -0.51562,0.625 -0.51562,1.70313 0,1.0625 0.51562,1.70312 0.53125,0.64063 1.25,0.64063 0.73438,0 1.25,-0.48438 0.51563,-0.48437 0.53125,-1.3125 v -1.01562 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26562,-0.5 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path262" + d="m 18.3125,198.06439 h 4.96875 v 0.875 h -3.9375 v 2.71875 H 23 v 0.89062 h -3.65625 v 3.6875 H 18.3125 Z m 9.874542,-0.14063 q 1.578125,0 2.5625,1.07813 0.984375,1.07812 0.984375,3.15625 0,2.07812 -0.984375,3.15625 -0.96875,1.0625 -2.5625,1.0625 -1.609375,0 -2.578125,-1.07813 -0.96875,-1.09375 -0.96875,-3.14062 0,-2.07813 0.96875,-3.15625 0.96875,-1.07813 2.578125,-1.07813 z m 0,0.92188 q -1.140625,0 -1.8125,0.85937 -0.65625,0.84375 -0.65625,2.46875 0,1.60938 0.65625,2.4375 0.671875,0.82813 1.8125,0.82813 1.140625,0 1.8125,-0.82813 0.671875,-0.82812 0.671875,-2.4375 0,-1.625 -0.671875,-2.46875 -0.671875,-0.85937 -1.8125,-0.85937 z m 10.07869,1.20312 q -0.21875,-1.20312 -1.765625,-1.20312 -0.8125,0 -1.265625,0.35937 -0.4375,0.35938 -0.4375,0.85938 0,0.5 0.265625,0.76562 0.28125,0.26563 0.890625,0.45313 l 1.703125,0.57812 q 0.875,0.3125 1.390625,0.82813 0.515625,0.51562 0.515625,1.46875 0,0.9375 -0.8125,1.57812 -0.796875,0.64063 -2.15625,0.64063 -1.34375,0 -2.21875,-0.67188 -0.859375,-0.6875 -0.890625,-1.92187 h 1 q 0,0.79687 0.5625,1.23437 0.578125,0.42188 1.46875,0.42188 0.890625,0 1.40625,-0.39063 0.515625,-0.40625 0.515625,-0.9375 0,-0.54687 -0.3125,-0.84375 -0.3125,-0.3125 -0.9375,-0.53125 l -1.453125,-0.53125 q -1.015625,-0.34375 -1.53125,-0.79687 -0.515625,-0.46875 -0.515625,-1.375 0,-0.90625 0.71875,-1.5 0.734375,-0.60938 2.046875,-0.60938 1.3125,0 2,0.57813 0.703125,0.57812 0.8125,1.54687 z m 8.063492,0 q -0.21875,-1.20312 -1.765625,-1.20312 -0.8125,0 -1.265625,0.35937 -0.4375,0.35938 -0.4375,0.85938 0,0.5 0.265625,0.76562 0.28125,0.26563 0.890625,0.45313 l 1.703125,0.57812 q 0.875,0.3125 1.390625,0.82813 0.515625,0.51562 0.515625,1.46875 0,0.9375 -0.8125,1.57812 -0.796875,0.64063 -2.15625,0.64063 -1.34375,0 -2.21875,-0.67188 -0.859375,-0.6875 -0.890625,-1.92187 h 1 q 0,0.79687 0.5625,1.23437 0.578125,0.42188 1.46875,0.42188 0.890625,0 1.40625,-0.39063 0.515625,-0.40625 0.515625,-0.9375 0,-0.54687 -0.3125,-0.84375 -0.3125,-0.3125 -0.9375,-0.53125 l -1.453125,-0.53125 q -1.015625,-0.34375 -1.53125,-0.79687 -0.515625,-0.46875 -0.515625,-1.375 0,-0.90625 0.71875,-1.5 0.734375,-0.60938 2.046875,-0.60938 1.3125,0 2,0.57813 0.703125,0.57812 0.8125,1.54687 z m 6.54808,1.5 q 0,-0.76562 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.29688 -0.34375,0.28125 -0.34375,0.60937 0,0.32813 0.265625,0.5625 0.265625,0.21875 0.828125,0.39063 l 1.25,0.42187 q 0.796875,0.23438 1.21875,0.625 0.421875,0.375 0.421875,1.04688 0,0.67187 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.54688 -0.6875,-0.5625 -0.71875,-1.42187 h 0.984375 q 0.03125,0.57812 0.46875,0.875 0.453125,0.29687 1.125,0.29687 0.6875,0 1.125,-0.28125 0.4375,-0.29687 0.4375,-0.6875 0,-0.40625 -0.265625,-0.60937 -0.25,-0.20313 -0.828125,-0.35938 l -1.21875,-0.40625 q -1.625,-0.48437 -1.625,-1.6875 z m 9.573074,-1.6875 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42188 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57813 0.796875,-2.42188 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26563 q 0,-1.10938 -0.46875,-1.73438 -0.46875,-0.64062 -1.375,-0.64062 -0.890625,0 -1.375,0.64062 -0.484375,0.625 -0.484375,1.73438 0,1.10937 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64063 0.5,-1.75 z m 6.199005,-4.875 q -0.421875,-0.17188 -0.671875,-0.17188 -0.453125,0 -0.71875,0.23438 -0.265625,0.21875 -0.265625,0.76562 v 0.9375 h 1.296875 v 0.70313 h -1.296875 v 5.51562 h -1.015625 v -5.51562 h -1.015625 v -0.70313 h 1.015625 v -0.9375 q 0,-0.9375 0.5,-1.35937 0.515625,-0.4375 1.171875,-0.4375 0.671875,0 1.1875,0.17187 z m 4.805908,7.79687 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20312 -0.921875,-0.85937 -0.15625,-0.32813 -0.15625,-0.78125 v -3.82813 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.95313 0.890625,0.95313 0.484375,0 1.078125,-0.23438 z m 1.745728,-6.03125 1.515625,4.95313 1.484375,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01563 h 1.015625 l -2.03125,6.21875 h -1 l -1.4375,-4.35937 -1.40625,4.35937 h -0.984375 l -2.0625,-6.21875 z m 13.522232,2.1875 q 0,-0.84375 -0.359375,-1.20312 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.26562 -0.40625,0.82812 h -1.125 q 0,-1.42187 1.53125,-1.76562 0.46875,-0.10938 1.015625,-0.10938 1.15625,0 1.796875,0.59375 0.65625,0.57813 0.65625,1.78125 v 4 h -0.875 l -0.109375,-1.04687 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.54688 -0.609375,-0.5625 -0.609375,-1.39062 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.23438 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.54687 0.546875,-1.40625 z m 6.15123,-2.75 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23437 h 1.03125 v 1.20312 q 0.46875,-1.29687 1.65625,-1.29687 0.375,0 0.703125,0.10937 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 4.687374,4.65625 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92188 -0.82812,1.4375 -0.6875,0.51563 -1.70313,0.51563 -1.25,0 -2.031246,-0.89063 -0.765625,-0.89062 -0.765625,-2.375 0,-1.48437 0.78125,-2.35937 0.781251,-0.89063 2.093751,-0.89063 1.3125,0 1.95312,1.01563 0.64063,1.01562 0.4375,2.46875 h -4.249996 q 0,0.96875 0.468746,1.59375 0.46875,0.60937 1.3125,0.60937 z m 0.76563,-4.70312 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54687 -0.453126,0.53125 -0.531251,1.32813 h 3.312501 q 0,-1.29688 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path266" + d="m 263.65353,201.24861 h 93.63782 v 60.81889 h -93.63782 z" /> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path272" + d="m 8,268.55627 h 143.65355 v 72.7244 H 8 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path274" + d="m 8,268.55627 h 143.65355 v 72.7244 H 8 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path276" + d="m 21.140625,285.40598 q 1.3125,0 2.109375,0.65625 0.8125,0.65625 1.109375,1.70312 L 23.25,287.9841 q -0.25,-0.76562 -0.8125,-1.20312 -0.546875,-0.45313 -1.296875,-0.45313 -1.015625,0 -1.703125,0.85938 -0.671875,0.84375 -0.671875,2.375 0,1.53125 0.609375,2.45312 0.609375,0.92188 1.765625,0.92188 0.984375,0 1.546875,-0.51563 0.5625,-0.51562 0.5625,-1.35937 h 1.109375 q 0,1.29687 -0.875,2.04687 -0.875,0.75 -2.40625,0.75 -1.53125,0 -2.484375,-1.17187 -0.9375,-1.17188 -0.9375,-3.125 0,-1.96875 0.96875,-3.0625 0.984375,-1.09375 2.515625,-1.09375 z m 9.56073,7.07812 q -0.625,1.34375 -2.0625,1.34375 -1.046875,0 -1.703125,-0.57812 -0.640625,-0.57813 -0.640625,-1.8125 v -3.95313 h 1.03125 v 3.875 q 0,1.57813 1.453125,1.57813 0.84375,0 1.375,-0.64063 0.53125,-0.65625 0.546875,-1.67187 v -3.14063 h 1.03125 v 6.23438 h -1.03125 z m 3.529938,-3.45312 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32812 0.265625,0.5625 0.265625,0.21875 0.828125,0.39062 l 1.25,0.42188 q 0.796875,0.23437 1.21875,0.625 0.421875,0.375 0.421875,1.04687 0,0.67188 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.54687 -0.6875,-0.5625 -0.71875,-1.42188 h 0.984375 q 0.03125,0.57813 0.46875,0.875 0.453125,0.29688 1.125,0.29688 0.6875,0 1.125,-0.28125 0.4375,-0.29688 0.4375,-0.6875 0,-0.40625 -0.265625,-0.60938 -0.25,-0.20312 -0.828125,-0.35937 l -1.21875,-0.40625 q -1.625,-0.48438 -1.625,-1.6875 z m 10.588699,4.5 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20313 -0.921875,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.95312 0.890625,0.95312 0.484375,0 1.078125,-0.23437 z m 3.995727,-6.1875 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57812 0.796875,-2.42187 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.890625,0 -1.375,0.64063 -0.484375,0.625 -0.484375,1.73437 0,1.10938 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64062 0.5,-1.75 z m 4.167755,-1.90625 q 0.609375,-1.35937 2.09375,-1.35937 0.8125,0 1.359375,0.40625 0.546875,0.39062 0.78125,1.09375 0.59375,-1.5 2.171875,-1.5 1.125,0 1.734375,0.73437 0.609375,0.73438 0.609375,1.98438 v 3.65625 h -1.015625 v -3.65625 q 0,-0.89063 -0.421875,-1.34375 -0.421875,-0.45313 -1.21875,-0.45313 -0.78125,0 -1.21875,0.65625 -0.4375,0.64063 -0.4375,1.78125 v 3.01563 h -1.015625 v -3.65625 q 0,-0.89063 -0.421875,-1.34375 -0.421875,-0.45313 -1.203125,-0.45313 -0.78125,0 -1.265625,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 13.617996,4.32813 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92187 -0.828125,1.4375 -0.6875,0.51562 -1.703125,0.51562 -1.25,0 -2.03125,-0.89062 -0.765625,-0.89063 -0.765625,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.953125,1.01562 0.640625,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.765625,-4.70313 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54688 -0.453125,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 6.488953,0.0469 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.703125,0.10938 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 5.390716,0.65625 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32812 0.265625,0.5625 0.265625,0.21875 0.828125,0.39062 l 1.25,0.42188 q 0.796875,0.23437 1.21875,0.625 0.421875,0.375 0.421875,1.04687 0,0.67188 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.54687 -0.6875,-0.5625 -0.71875,-1.42188 h 0.984375 q 0.03125,0.57813 0.46875,0.875 0.453125,0.29688 1.125,0.29688 0.6875,0 1.125,-0.28125 0.4375,-0.29688 0.4375,-0.6875 0,-0.40625 -0.265625,-0.60938 -0.25,-0.20312 -0.828125,-0.35937 l -1.21875,-0.40625 q -1.625,-0.48438 -1.625,-1.6875 z m 8.307449,-0.57813 q 0.609375,-1.10937 1.8125,-1.10937 1.21875,0 2.03125,0.90625 0.8125,0.89062 0.8125,2.35937 0,1.46875 -0.828125,2.35938 -0.8125,0.89062 -2.015625,0.89062 -1.1875,0 -1.75,-0.89062 v 3.8125 h -1.03125 v -9.28125 h 0.84375 z m 1.765625,4.5 q 0.734375,0 1.28125,-0.625 0.5625,-0.625 0.5625,-1.70312 0,-1.09375 -0.53125,-1.71875 -0.515625,-0.64063 -1.28125,-0.64063 -0.75,0 -1.234375,0.46875 -0.484375,0.46875 -0.5,1.28125 v 1.1875 q 0,0.8125 0.484375,1.28125 0.5,0.46875 1.21875,0.46875 z m 7.32312,0.0781 q 1.296875,0 1.46875,-1.125 h 1.062497 q -0.14062,0.92187 -0.82812,1.4375 -0.687502,0.51562 -1.703127,0.51562 -1.25,0 -2.03125,-0.89062 -0.765625,-0.89063 -0.765625,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.953122,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.249997 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.765625,-4.70313 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54688 -0.453125,0.53125 -0.53125,1.32812 h 3.312502 q 0,-1.29687 -0.781252,-1.71875 z m 6.020202,-0.98437 q 1.10938,0 1.75,0.57812 0.65625,0.5625 0.85938,1.40625 l -1.04688,0.0937 q -0.17187,-0.54687 -0.54687,-0.84375 -0.375,-0.3125 -0.82813,-0.3125 -0.82812,0 -1.34375,0.625 -0.51562,0.60938 -0.51562,1.6875 0,1.07813 0.5,1.73438 0.5,0.64062 1.25,0.64062 0.75,0 1.10937,-0.34375 0.375,-0.34375 0.375,-0.98437 h 1.0625 q 0,1 -0.70312,1.625 -0.6875,0.60937 -1.8125,0.60937 -1.1875,0 -2.01563,-0.89062 -0.8125,-0.90625 -0.8125,-2.39063 0,-1.48437 0.8125,-2.35937 0.8125,-0.875 1.90625,-0.875 z m 4.86395,0.14062 h 1.03125 v 6.23438 h -1.03125 z m 0.51563,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 6.42259,-0.29688 q -0.42187,-0.17187 -0.67187,-0.17187 -0.45313,0 -0.71875,0.23437 -0.26563,0.21875 -0.26563,0.76563 v 0.9375 h 1.29688 v 0.70312 h -1.29688 v 5.51563 h -1.01562 v -5.51563 h -1.01563 v -0.70312 h 1.01563 v -0.9375 q 0,-0.9375 0.5,-1.35938 0.51562,-0.4375 1.17187,-0.4375 0.67188,0 1.1875,0.17188 z m 1.61841,1.75 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 5.46947,1.3125 q 1.10938,0 1.75,0.57812 0.65625,0.5625 0.85938,1.40625 l -1.04688,0.0937 q -0.17187,-0.54687 -0.54687,-0.84375 -0.375,-0.3125 -0.82813,-0.3125 -0.82812,0 -1.34375,0.625 -0.51562,0.60938 -0.51562,1.6875 0,1.07813 0.5,1.73438 0.5,0.64062 1.25,0.64062 0.75,0 1.10937,-0.34375 0.375,-0.34375 0.375,-0.98437 h 1.0625 q 0,1 -0.70312,1.625 -0.6875,0.60937 -1.8125,0.60937 -1.1875,0 -2.01563,-0.89062 -0.8125,-0.90625 -0.8125,-2.39063 0,-1.48437 0.8125,-2.35937 0.8125,-0.875 1.90625,-0.875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path278" + d="m 17.984375,305.03098 q 0,-0.76563 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.29687 -0.34375,0.28125 -0.34375,0.60938 0,0.32812 0.265625,0.5625 0.265625,0.21875 0.828125,0.39062 l 1.25,0.42188 q 0.796875,0.23437 1.21875,0.625 0.421875,0.375 0.421875,1.04687 0,0.67188 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.54687 -0.6875,-0.5625 -0.71875,-1.42188 h 0.984375 q 0.03125,0.57813 0.46875,0.875 0.453125,0.29688 1.125,0.29688 0.6875,0 1.125,-0.28125 0.4375,-0.29688 0.4375,-0.6875 0,-0.40625 -0.265625,-0.60938 -0.25,-0.20312 -0.828125,-0.35937 l -1.21875,-0.40625 q -1.625,-0.48438 -1.625,-1.6875 z m 9.573074,-1.6875 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.57812 0.796875,-2.42187 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.890625,0 -1.375,0.64063 -0.484375,0.625 -0.484375,1.73437 0,1.10938 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.64062 0.5,-1.75 z m 6.199005,-4.875 q -0.421875,-0.17187 -0.671875,-0.17187 -0.453125,0 -0.71875,0.23437 -0.265625,0.21875 -0.265625,0.76563 v 0.9375 h 1.296875 v 0.70312 h -1.296875 v 5.51563 h -1.015625 v -5.51563 h -1.015625 v -0.70312 h 1.015625 v -0.9375 q 0,-0.9375 0.5,-1.35938 0.515625,-0.4375 1.171875,-0.4375 0.671875,0 1.1875,0.17188 z m 4.805908,7.79688 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.20313 -0.921875,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.95312 0.890625,0.95312 0.484375,0 1.078125,-0.23437 z m 1.745727,-6.03125 1.515625,4.95312 1.484375,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.01562 h 1.015625 l -2.03125,6.21875 h -1 l -1.4375,-4.35938 -1.40625,4.35938 h -0.984375 l -2.0625,-6.21875 z m 13.522233,2.1875 q 0,-0.84375 -0.359375,-1.20313 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.015625,-0.10937 1.15625,0 1.796875,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.109375,-1.04688 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.54687 -0.609375,-0.5625 -0.609375,-1.39063 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.23437 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.54688 0.546875,-1.40625 z m 6.15123,-2.75 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.703125,0.10938 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 4.687378,4.65625 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.92187 -0.828125,1.4375 -0.6875,0.51562 -1.703125,0.51562 -1.25,0 -2.03125,-0.89062 -0.765625,-0.89063 -0.765625,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.953125,1.01562 0.640625,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.765625,-4.70313 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.54688 -0.453125,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path282" + d="m 263.65353,304.9185 h 65.35434" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path288" + d="m 263.65353,305.2308 h 93.63782 v 60.81891 h -93.63782 z" /> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;font-variation-settings:normal;opacity:1;vector-effect:none;fill:#30bc3a;fill-opacity:1;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path186" + d="M 285.65353,141.62459 H 310.8189" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + id="path188" + d="m 310.8189,146.57977 13.61429,-4.95519 -13.61429,-4.95519 z" /> + <g + transform="matrix(0.75,0,0,0.75,83.652511,-1.264247)" + id="g1147"> + <path + d="m 275.30978,213.56673 h 1.0625 l 2.3125,6.92187 h -0.89063 l -0.59375,-1.76562 h -2.75 l -0.59375,1.76562 h -0.92187 z m -0.625,4.48437 h 2.29687 l -1.15625,-3.42187 z m 8.78366,1.39063 q -0.54687,1.14062 -1.75,1.14062 -0.89062,0 -1.4375,-0.48437 -0.54687,-0.5 -0.54687,-1.53125 v -3.34375 h 0.875 v 3.28125 q 0,1.32812 1.23437,1.32812 0.70313,0 1.14063,-0.54687 0.45312,-0.5625 0.48437,-1.42188 v -2.64062 h 0.875 v 5.26562 h -0.875 z m 5.62964,0.89062 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 3.1474,-5.23437 q 1.10937,0 1.78125,0.71875 0.67187,0.71875 0.67187,2.04687 0,1.3125 -0.67187,2.03125 -0.67188,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67188,-0.71875 -0.67188,-2.03125 0,-1.32812 0.67188,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57812,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39062,-0.53125 -1.15625,-0.53125 -0.76562,0 -1.17187,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39062,1.46875 0.39063,0.53125 1.14063,0.53125 0.76562,0 1.1875,-0.53125 0.42187,-0.53125 0.42187,-1.46875 z m 3.19339,-1.625 q 0.51563,-1.14062 1.76563,-1.14062 0.6875,0 1.14062,0.34375 0.46875,0.32812 0.67188,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45312,0.625 0.51563,0.60937 0.51563,1.67187 v 3.09375 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.34375,-0.39063 -1.01563,-0.39063 -0.67187,0 -1.04687,0.5625 -0.35938,0.54688 -0.35938,1.51563 v 2.54687 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.35937,-0.39063 -1.01562,-0.39063 -0.65625,0 -1.07813,0.54688 -0.40625,0.53125 -0.42187,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 12.36994,0.84375 q 0,-0.71875 -0.29688,-1.01562 -0.29687,-0.3125 -0.85937,-0.3125 -0.5625,0 -0.90625,0.21875 -0.34375,0.21875 -0.34375,0.70312 h -0.96875 q 0,-1.20312 1.29687,-1.48437 0.40625,-0.0937 0.85938,-0.0937 0.98437,0 1.53125,0.5 0.54687,0.48437 0.54687,1.5 v 3.39062 h -0.73437 l -0.0937,-0.875 q -0.48438,1 -1.75,1 -0.84375,0 -1.35938,-0.46875 -0.51562,-0.48437 -0.51562,-1.1875 0,-0.70312 0.5625,-1.09375 0.57812,-0.40625 1.42187,-0.40625 0.84375,0 1.60938,0.29688 z m 0,1.21875 q -0.76563,-0.21875 -1.35938,-0.21875 -0.57812,0 -0.95312,0.21875 -0.35938,0.20313 -0.35938,0.64063 0,1 1.125,1 0.64063,0 1.09375,-0.45313 0.45313,-0.46875 0.45313,-1.1875 z m 5.46756,2.03125 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 1.3193,-5.10937 h 0.85938 v 5.26562 h -0.85938 z m 0.42188,-1.23438 q -0.26563,0 -0.42188,-0.14062 -0.14062,-0.15625 -0.14062,-0.40625 0,-0.25 0.14062,-0.39063 0.15625,-0.15625 0.42188,-0.15625 0.26562,0 0.42187,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42187,0.14062 z m 4.45187,1.10938 q 0.9375,0 1.48438,0.48437 0.54687,0.46875 0.71875,1.1875 l -0.875,0.0781 q -0.15625,-0.46875 -0.46875,-0.71875 -0.3125,-0.26563 -0.70313,-0.26563 -0.70312,0 -1.14062,0.53125 -0.4375,0.53125 -0.4375,1.4375 0,0.90625 0.42187,1.45313 0.42188,0.54687 1.04688,0.54687 0.64062,0 0.95312,-0.28125 0.32813,-0.29687 0.32813,-0.82812 h 0.89062 q 0,0.84375 -0.59375,1.375 -0.59375,0.51562 -1.53125,0.51562 -1,0 -1.70312,-0.75 -0.70313,-0.76562 -0.70313,-2.03125 0,-1.26562 0.6875,-2 0.70313,-0.73437 1.625,-0.73437 z" + id="path268" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + <path + d="m 273.8254,228.22298 h 0.85937 v 5.26562 h -0.85937 z m 0.42187,-1.23438 q -0.26562,0 -0.42187,-0.14062 -0.14063,-0.15625 -0.14063,-0.40625 0,-0.25 0.14063,-0.39063 0.15625,-0.15625 0.42187,-0.15625 0.26563,0 0.42188,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42188,0.14062 z m 3.54563,2.25 q 0.51562,-1.14062 1.76562,-1.14062 0.6875,0 1.14063,0.34375 0.46875,0.32812 0.67187,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45313,0.625 0.51562,0.60937 0.51562,1.67187 v 3.09375 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.34375,-0.39063 -1.01562,-0.39063 -0.67188,0 -1.04688,0.5625 -0.35937,0.54688 -0.35937,1.51563 v 2.54687 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.35938,-0.39063 -1.01563,-0.39063 -0.65625,0 -1.07812,0.54688 -0.40625,0.53125 -0.42188,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 9.93246,-0.20312 q 0.51563,-0.9375 1.54688,-0.9375 1.03125,0 1.71875,0.76562 0.6875,0.75 0.6875,2 0,1.23438 -0.70313,2 -0.6875,0.75 -1.70312,0.75 -1,0 -1.48438,-0.76562 v 3.21875 h -0.875 v -7.84375 h 0.71875 z m 1.5,3.79687 q 0.625,0 1.09375,-0.51562 0.46875,-0.53125 0.46875,-1.45313 0,-0.92187 -0.45312,-1.45312 -0.4375,-0.54688 -1.07813,-0.54688 -0.64062,0 -1.04687,0.40625 -0.40625,0.40625 -0.42188,1.07813 v 1 q 0,0.70312 0.40625,1.09375 0.42188,0.39062 1.03125,0.39062 z m 5.90799,-4.73437 q 1.10938,0 1.78125,0.71875 0.67188,0.71875 0.67188,2.04687 0,1.3125 -0.67188,2.03125 -0.67187,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67187,-0.71875 -0.67187,-2.03125 0,-1.32812 0.67187,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57813,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39063,-0.53125 -1.15625,-0.53125 -0.76563,0 -1.17188,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39063,1.46875 0.39062,0.53125 1.14062,0.53125 0.76563,0 1.1875,-0.53125 0.42188,-0.53125 0.42188,-1.46875 z m 4.49026,-1.89062 q -1.23437,0 -1.28125,1.95312 v 2.5625 h -0.875 v -5.26562 h 0.875 v 1.01562 q 0.39063,-1.10937 1.39063,-1.10937 0.32812,0 0.60937,0.0937 l -0.0469,0.85937 q -0.32813,-0.10937 -0.67188,-0.10937 z m 4.66944,4.35937 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z" + id="path270" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + </g> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;font-variation-settings:normal;opacity:1;vector-effect:none;fill:#30bc3a;fill-opacity:1;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path284" + d="m 285.65353,262.63753 h 25.35434" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path286" + d="m 311.00787,267.59273 13.61429,-4.9552 -13.61429,-4.95517 z" /> + <g + transform="matrix(0.75,0,0,0.75,83.652511,38.731301)" + id="g1151"> + <path + d="m 275.30978,317.54892 h 1.0625 l 2.3125,6.92187 h -0.89063 l -0.59375,-1.76562 h -2.75 l -0.59375,1.76562 h -0.92187 z m -0.625,4.48437 h 2.29687 l -1.15625,-3.42187 z m 8.78366,1.39063 q -0.54687,1.14062 -1.75,1.14062 -0.89062,0 -1.4375,-0.48437 -0.54687,-0.5 -0.54687,-1.53125 v -3.34375 h 0.875 v 3.28125 q 0,1.32812 1.23437,1.32812 0.70313,0 1.14063,-0.54687 0.45312,-0.5625 0.48437,-1.42188 v -2.64062 h 0.875 v 5.26562 h -0.875 z m 5.62964,0.89062 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 3.1474,-5.23437 q 1.10937,0 1.78125,0.71875 0.67187,0.71875 0.67187,2.04687 0,1.3125 -0.67187,2.03125 -0.67188,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67188,-0.71875 -0.67188,-2.03125 0,-1.32812 0.67188,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57812,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39062,-0.53125 -1.15625,-0.53125 -0.76562,0 -1.17187,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39062,1.46875 0.39063,0.53125 1.14063,0.53125 0.76562,0 1.1875,-0.53125 0.42187,-0.53125 0.42187,-1.46875 z m 3.19339,-1.625 q 0.51563,-1.14062 1.76563,-1.14062 0.6875,0 1.14062,0.34375 0.46875,0.32812 0.67188,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45312,0.625 0.51563,0.60937 0.51563,1.67187 v 3.09375 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.34375,-0.39063 -1.01563,-0.39063 -0.67187,0 -1.04687,0.5625 -0.35938,0.54688 -0.35938,1.51563 v 2.54687 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.35937,-0.39063 -1.01562,-0.39063 -0.65625,0 -1.07813,0.54688 -0.40625,0.53125 -0.42187,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 12.36994,0.84375 q 0,-0.71875 -0.29688,-1.01562 -0.29687,-0.3125 -0.85937,-0.3125 -0.5625,0 -0.90625,0.21875 -0.34375,0.21875 -0.34375,0.70312 h -0.96875 q 0,-1.20312 1.29687,-1.48437 0.40625,-0.0937 0.85938,-0.0937 0.98437,0 1.53125,0.5 0.54687,0.48437 0.54687,1.5 v 3.39062 h -0.73437 l -0.0937,-0.875 q -0.48438,1 -1.75,1 -0.84375,0 -1.35938,-0.46875 -0.51562,-0.48437 -0.51562,-1.1875 0,-0.70312 0.5625,-1.09375 0.57812,-0.40625 1.42187,-0.40625 0.84375,0 1.60938,0.29688 z m 0,1.21875 q -0.76563,-0.21875 -1.35938,-0.21875 -0.57812,0 -0.95312,0.21875 -0.35938,0.20313 -0.35938,0.64063 0,1 1.125,1 0.64063,0 1.09375,-0.45313 0.45313,-0.46875 0.45313,-1.1875 z m 5.46756,2.03125 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 1.3193,-5.10937 h 0.85938 v 5.26562 h -0.85938 z m 0.42188,-1.23438 q -0.26563,0 -0.42188,-0.14062 -0.14062,-0.15625 -0.14062,-0.40625 0,-0.25 0.14062,-0.39063 0.15625,-0.15625 0.42188,-0.15625 0.26562,0 0.42187,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42187,0.14062 z m 4.45187,1.10938 q 0.9375,0 1.48438,0.48437 0.54687,0.46875 0.71875,1.1875 l -0.875,0.0781 q -0.15625,-0.46875 -0.46875,-0.71875 -0.3125,-0.26563 -0.70313,-0.26563 -0.70312,0 -1.14062,0.53125 -0.4375,0.53125 -0.4375,1.4375 0,0.90625 0.42187,1.45313 0.42188,0.54687 1.04688,0.54687 0.64062,0 0.95312,-0.28125 0.32813,-0.29687 0.32813,-0.82812 h 0.89062 q 0,0.84375 -0.59375,1.375 -0.59375,0.51562 -1.53125,0.51562 -1,0 -1.70312,-0.75 -0.70313,-0.76562 -0.70313,-2.03125 0,-1.26562 0.6875,-2 0.70313,-0.73437 1.625,-0.73437 z" + id="path290" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + <path + d="m 273.8254,332.20517 h 0.85937 v 5.26562 h -0.85937 z m 0.42187,-1.23438 q -0.26562,0 -0.42187,-0.14062 -0.14063,-0.15625 -0.14063,-0.40625 0,-0.25 0.14063,-0.39063 0.15625,-0.15625 0.42187,-0.15625 0.26563,0 0.42188,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42188,0.14062 z m 3.54563,2.25 q 0.51562,-1.14062 1.76562,-1.14062 0.6875,0 1.14063,0.34375 0.46875,0.32812 0.67187,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45313,0.625 0.51562,0.60937 0.51562,1.67187 v 3.09375 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.34375,-0.39063 -1.01562,-0.39063 -0.67188,0 -1.04688,0.5625 -0.35937,0.54688 -0.35937,1.51563 v 2.54687 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.35938,-0.39063 -1.01563,-0.39063 -0.65625,0 -1.07812,0.54688 -0.40625,0.53125 -0.42188,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 9.93246,-0.20312 q 0.51563,-0.9375 1.54688,-0.9375 1.03125,0 1.71875,0.76562 0.6875,0.75 0.6875,2 0,1.23438 -0.70313,2 -0.6875,0.75 -1.70312,0.75 -1,0 -1.48438,-0.76562 v 3.21875 h -0.875 v -7.84375 h 0.71875 z m 1.5,3.79687 q 0.625,0 1.09375,-0.51562 0.46875,-0.53125 0.46875,-1.45313 0,-0.92187 -0.45312,-1.45312 -0.4375,-0.54688 -1.07813,-0.54688 -0.64062,0 -1.04687,0.40625 -0.40625,0.40625 -0.42188,1.07813 v 1 q 0,0.70312 0.40625,1.09375 0.42188,0.39062 1.03125,0.39062 z m 5.90799,-4.73437 q 1.10938,0 1.78125,0.71875 0.67188,0.71875 0.67188,2.04687 0,1.3125 -0.67188,2.03125 -0.67187,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67187,-0.71875 -0.67187,-2.03125 0,-1.32812 0.67187,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57813,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39063,-0.53125 -1.15625,-0.53125 -0.76563,0 -1.17188,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39063,1.46875 0.39062,0.53125 1.14062,0.53125 0.76563,0 1.1875,-0.53125 0.42188,-0.53125 0.42188,-1.46875 z m 4.49026,-1.89062 q -1.23437,0 -1.28125,1.95312 v 2.5625 h -0.875 v -5.26562 h 0.875 v 1.01562 q 0.39063,-1.10937 1.39063,-1.10937 0.32812,0 0.60937,0.0937 l -0.0469,0.85937 q -0.32813,-0.10937 -0.67188,-0.10937 z m 4.66944,4.35937 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z" + id="path292" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + </g> + <path + style="fill:#eeeeee;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path294" + d="M 8,63.089237 H 151.65355 V 135.81365 H 8 Z" /> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path296" + d="M 8,63.089237 H 151.65355 V 135.81365 H 8 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path298" + d="m 20.703125,72.07957 q 1.84375,0 2.953125,1.109375 1.125,1.109375 1.125,2.984375 0,1.859375 -1.125,2.96875 -1.109375,1.109375 -2.953125,1.109375 h -2.40625 V 72.07957 Z m -1.375,7.28125 h 1.375 q 1.359375,0 2.171875,-0.90625 0.8125,-0.90625 0.8125,-2.296875 0,-1.390625 -0.8125,-2.28125 -0.8125,-0.890625 -2.171875,-0.890625 h -1.375 z m 9.93486,0.203125 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.921875 -0.828125,1.4375 -0.6875,0.515625 -1.703125,0.515625 -1.25,0 -2.03125,-0.890625 -0.765625,-0.890625 -0.765625,-2.375 0,-1.484375 0.78125,-2.359375 0.78125,-0.890625 2.09375,-0.890625 1.3125,0 1.953125,1.015625 0.640625,1.015625 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.609375 1.3125,0.609375 z M 30.02861,74.86082 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.546875 -0.453125,0.53125 -0.53125,1.328125 h 3.3125 q 0,-1.296875 -0.78125,-1.71875 z m 4.988953,0.09375 q 0.625,-1.078125 1.8125,-1.078125 1.203125,0 1.984375,0.890625 0.796875,0.890625 0.796875,2.359375 0,1.46875 -0.8125,2.375 -0.796875,0.890625 -1.953125,0.890625 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.921875 l -0.234375,1.09375 h -0.71875 V 71.39207 h 1.03125 z m 1.75,-0.15625 q -0.734375,0 -1.234375,0.46875 -0.5,0.46875 -0.515625,1.3125 v 1.015625 q 0,0.859375 0.5,1.375 0.515625,0.515625 1.25,0.515625 0.734375,0 1.265625,-0.640625 0.53125,-0.640625 0.53125,-1.703125 0,-1.078125 -0.53125,-1.703125 -0.515625,-0.640625 -1.265625,-0.640625 z m 5.06485,-0.78125 h 1.03125 v 6.234375 h -1.03125 z m 0.515625,-1.453125 q -0.3125,0 -0.5,-0.171875 -0.171875,-0.171875 -0.171875,-0.46875 0,-0.296875 0.171875,-0.46875 0.1875,-0.171875 0.5,-0.171875 0.3125,0 0.5,0.171875 0.1875,0.171875 0.1875,0.46875 0,0.296875 -0.1875,0.46875 -0.1875,0.171875 -0.5,0.171875 z m 7.250717,3.65625 q 0,-0.84375 -0.359375,-1.203125 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.015625,-0.109375 1.15625,0 1.796875,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 L 49.630005,79.20457 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.546875 -0.609375,-0.5625 -0.609375,-1.390625 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.234375 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.546875 0.546875,-1.40625 z M 54.20311,75.23582 q 0.609375,-1.359375 2.09375,-1.359375 1.109375,0 1.71875,0.734375 0.625,0.734375 0.625,1.984375 v 3.65625 h -1.015625 v -3.65625 q 0,-0.890625 -0.421875,-1.34375 -0.421875,-0.453125 -1.203125,-0.453125 -0.78125,0 -1.265625,0.640625 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 11.208923,0 q 0.609375,-1.359375 2.09375,-1.359375 0.8125,0 1.359375,0.40625 0.546875,0.390625 0.78125,1.09375 0.59375,-1.5 2.171875,-1.5 1.125,0 1.734375,0.734375 0.609375,0.734375 0.609375,1.984375 v 3.65625 h -1.015625 v -3.65625 q 0,-0.890625 -0.421875,-1.34375 -0.421875,-0.453125 -1.21875,-0.453125 -0.78125,0 -1.21875,0.65625 -0.4375,0.640625 -0.4375,1.78125 v 3.015625 h -1.015625 v -3.65625 q 0,-0.890625 -0.421875,-1.34375 -0.421875,-0.453125 -1.203125,-0.453125 -0.78125,0 -1.265625,0.640625 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 15.321121,0.984375 q 0,-0.84375 -0.359375,-1.203125 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.015625,-0.109375 1.15625,0 1.796875,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 L 80.764404,79.20457 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.546875 -0.609375,-0.5625 -0.609375,-1.390625 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.234375 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.546875 0.546875,-1.40625 z m 3.68248,-3.640625 h 1.03125 v 6.234375 h -1.03125 z m 0.515625,-1.453125 q -0.3125,0 -0.5,-0.171875 -0.171875,-0.171875 -0.171875,-0.46875 0,-0.296875 0.171875,-0.46875 0.1875,-0.171875 0.5,-0.171875 0.3125,0 0.5,0.171875 0.1875,0.171875 0.1875,0.46875 0,0.296875 -0.1875,0.46875 -0.1875,0.171875 -0.5,0.171875 z m 4.391342,2.671875 q 0.609375,-1.359375 2.09375,-1.359375 1.109375,0 1.71875,0.734375 0.625,0.734375 0.625,1.984375 v 3.65625 h -1.015625 v -3.65625 q 0,-0.890625 -0.421875,-1.34375 -0.421875,-0.453125 -1.203125,-0.453125 -0.78125,0 -1.265625,0.640625 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.890625 z m 10.30246,4.828125 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.203125 -0.921875,-0.859375 -0.15625,-0.328125 -0.15625,-0.78125 v -3.828125 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.953125 0.890625,0.953125 0.484375,0 1.078125,-0.234375 z m 5.605099,-3.84375 q 0,-0.84375 -0.35937,-1.203125 -0.34375,-0.375 -1.01563,-0.375 -0.65625,0 -1.07812,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.01562,-0.109375 1.15625,0 1.79688,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 l -0.10938,-1.046875 q -0.57812,1.1875 -2.0625,1.1875 -1,0 -1.60937,-0.546875 -0.60938,-0.5625 -0.60938,-1.390625 0,-0.84375 0.67188,-1.3125 0.67187,-0.46875 1.67187,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92187,-0.25 -1.60937,-0.25 -0.6875,0 -1.125,0.25 -0.42188,0.234375 -0.42188,0.78125 0,1.15625 1.32813,1.15625 0.75,0 1.28125,-0.53125 0.54687,-0.546875 0.54687,-1.40625 z m 3.68248,-3.640625 h 1.03125 v 6.234375 h -1.03125 z m 0.51563,-1.453125 q -0.3125,0 -0.5,-0.171875 -0.17188,-0.171875 -0.17188,-0.46875 0,-0.296875 0.17188,-0.46875 0.1875,-0.171875 0.5,-0.171875 0.3125,0 0.5,0.171875 0.1875,0.171875 0.1875,0.46875 0,0.296875 -0.1875,0.46875 -0.1875,0.171875 -0.5,0.171875 z m 4.39134,2.671875 q 0.60937,-1.359375 2.09375,-1.359375 1.10937,0 1.71875,0.734375 0.625,0.734375 0.625,1.984375 v 3.65625 h -1.01563 v -3.65625 q 0,-0.890625 -0.42187,-1.34375 -0.42188,-0.453125 -1.20313,-0.453125 -0.78125,0 -1.26562,0.640625 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 9.19308,4.328125 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.921875 -0.82812,1.4375 -0.6875,0.515625 -1.70313,0.515625 -1.25,0 -2.03125,-0.890625 -0.76562,-0.890625 -0.76562,-2.375 0,-1.484375 0.78125,-2.359375 0.78125,-0.890625 2.09375,-0.890625 1.3125,0 1.95312,1.015625 0.64063,1.015625 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.609375 1.3125,0.609375 z m 0.76563,-4.703125 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.546875 -0.45313,0.53125 -0.53125,1.328125 h 3.3125 q 0,-1.296875 -0.78125,-1.71875 z m 8.0202,0.09375 v -3.5625 h 1.01563 v 8.859375 h -0.82813 l -0.125,-1.046875 q -0.29687,0.59375 -0.79687,0.890625 -0.5,0.296875 -1.07813,0.296875 -1.1875,0 -1.98437,-0.90625 -0.79688,-0.90625 -0.79688,-2.375 0,-1.46875 0.78125,-2.34375 0.79688,-0.890625 2,-0.890625 1.20313,0 1.8125,1.078125 z m -1.76562,-0.15625 q -0.75,0 -1.26563,0.640625 -0.51562,0.625 -0.51562,1.703125 0,1.0625 0.51562,1.703125 0.53125,0.640625 1.25,0.640625 0.73438,0 1.25,-0.484375 0.51563,-0.484375 0.53125,-1.3125 V 76.67332 q 0,-0.875 -0.5,-1.375 -0.5,-0.5 -1.26562,-0.5 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path300" + d="m 17.984375,91.56394 q 0,-0.765625 0.65625,-1.21875 0.65625,-0.46875 1.765625,-0.46875 1.125,0 1.75,0.46875 0.640625,0.46875 0.671875,1.1875 h -1 q -0.125,-0.84375 -1.4375,-0.84375 -0.640625,0 -0.984375,0.296875 -0.34375,0.28125 -0.34375,0.609375 0,0.328125 0.265625,0.5625 0.265625,0.21875 0.828125,0.390625 l 1.25,0.421875 q 0.796875,0.234375 1.21875,0.625 0.421875,0.375 0.421875,1.046875 0,0.671875 -0.6875,1.21875 -0.6875,0.53125 -1.921875,0.53125 -1.234375,0 -1.9375,-0.546875 -0.6875,-0.5625 -0.71875,-1.421875 h 0.984375 q 0.03125,0.578125 0.46875,0.875 0.453125,0.296875 1.125,0.296875 0.6875,0 1.125,-0.28125 0.4375,-0.296875 0.4375,-0.6875 0,-0.40625 -0.265625,-0.609375 -0.25,-0.203125 -0.828125,-0.359375 l -1.21875,-0.40625 q -1.625,-0.484375 -1.625,-1.6875 z m 9.573074,-1.6875 q 1.296875,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.421875 0,1.5625 -0.8125,2.40625 -0.796875,0.84375 -2.09375,0.84375 -1.296875,0 -2.09375,-0.84375 -0.796875,-0.84375 -0.796875,-2.40625 0,-1.578125 0.796875,-2.421875 0.796875,-0.84375 2.09375,-0.84375 z m 1.859375,3.265625 q 0,-1.109375 -0.46875,-1.734375 -0.46875,-0.640625 -1.375,-0.640625 -0.890625,0 -1.375,0.640625 -0.484375,0.625 -0.484375,1.734375 0,1.109375 0.453125,1.75 0.453125,0.625 1.359375,0.625 0.90625,0 1.390625,-0.625 0.5,-0.640625 0.5,-1.75 z m 6.199005,-4.875 q -0.421875,-0.171875 -0.671875,-0.171875 -0.453125,0 -0.71875,0.234375 -0.265625,0.21875 -0.265625,0.765625 v 0.9375 h 1.296875 v 0.703125 H 33.959579 V 96.25144 H 32.943954 V 90.735815 H 31.928329 V 90.03269 h 1.015625 v -0.9375 q 0,-0.9375 0.5,-1.359375 0.515625,-0.4375 1.171875,-0.4375 0.671875,0 1.1875,0.171875 z m 4.805908,7.796875 q -1.125,0.53125 -2.046875,0.21875 -0.65625,-0.203125 -0.921875,-0.859375 -0.15625,-0.328125 -0.15625,-0.78125 V 90.81394 h -1 v -0.78125 h 1 v -1.71875 h 1.015625 v 1.71875 h 1.953125 v 0.78125 h -1.953125 v 3.8125 q 0,0.953125 0.890625,0.953125 0.484375,0 1.078125,-0.234375 z m 1.745727,-6.03125 1.515625,4.953125 1.484375,-4.65625 h 0.84375 l 1.46875,4.71875 1.53125,-5.015625 h 1.015625 l -2.03125,6.21875 h -1 l -1.4375,-4.359375 -1.40625,4.359375 h -0.984375 l -2.0625,-6.21875 z m 13.522233,2.1875 q 0,-0.84375 -0.359375,-1.203125 -0.34375,-0.375 -1.015625,-0.375 -0.65625,0 -1.078125,0.28125 -0.40625,0.265625 -0.40625,0.828125 h -1.125 q 0,-1.421875 1.53125,-1.765625 0.46875,-0.109375 1.015625,-0.109375 1.15625,0 1.796875,0.59375 0.65625,0.578125 0.65625,1.78125 v 4 h -0.875 l -0.109375,-1.046875 q -0.578125,1.1875 -2.0625,1.1875 -1,0 -1.609375,-0.546875 -0.609375,-0.5625 -0.609375,-1.390625 0,-0.84375 0.671875,-1.3125 0.671875,-0.46875 1.671875,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.921875,-0.25 -1.609375,-0.25 -0.6875,0 -1.125,0.25 -0.421875,0.234375 -0.421875,0.78125 0,1.15625 1.328125,1.15625 0.75,0 1.28125,-0.53125 0.546875,-0.546875 0.546875,-1.40625 z m 6.15123,-2.75 q -1.46875,0 -1.515625,2.3125 v 3.03125 h -1.03125 v -6.234375 h 1.03125 v 1.203125 q 0.46875,-1.296875 1.65625,-1.296875 0.375,0 0.703125,0.109375 l -0.04687,1 q -0.390625,-0.125 -0.796875,-0.125 z m 4.687378,4.65625 q 1.296875,0 1.46875,-1.125 h 1.0625 q -0.140625,0.921875 -0.828125,1.4375 -0.6875,0.515625 -1.703125,0.515625 -1.25,0 -2.03125,-0.890625 -0.765625,-0.890625 -0.765625,-2.375 0,-1.484375 0.78125,-2.359375 0.78125,-0.890625 2.09375,-0.890625 1.3125,0 1.953125,1.015625 0.640625,1.015625 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.609375 1.3125,0.609375 z m 0.765625,-4.703125 q -0.3125,-0.15625 -0.734375,-0.15625 -0.796875,0 -1.265625,0.546875 -0.453125,0.53125 -0.53125,1.328125 h 3.3125 q 0,-1.296875 -0.78125,-1.71875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path302" + d="m 21.828125,103.31394 q -2.25,2.29688 -2.5,4.95313 -0.234375,2.67187 1.5625,4.9375 l -0.71875,0.51562 q -1.046875,-1.15625 -1.5,-2.5625 -0.453125,-1.40625 -0.3125,-2.90625 0.140625,-1.5 0.859375,-2.89062 0.71875,-1.40625 1.984375,-2.57813 z m 3.546234,0.76563 q 1.65625,0 2.5625,1.10937 0.890625,1.125 0.71875,2.96875 -0.1875,1.85938 -1.28125,2.96875 -1.109375,1.125 -2.78125,1.125 h -2.15625 l 0.765625,-8.17187 z m -1.9375,7.28125 h 1.25 q 1.203125,0 2.03125,-0.92188 0.8125,-0.875 0.9375,-2.28125 0.140625,-1.40625 -0.5,-2.28125 -0.671875,-0.89062 -1.875,-0.89062 h -1.25 z m 9.086456,0.20312 q 1.140625,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92188 -0.890625,1.4375 -0.65625,0.51563 -1.5625,0.51563 -1.125,0 -1.734375,-0.875 -0.640625,-0.90625 -0.484375,-2.35938 0.15625,-1.51562 0.9375,-2.39062 0.78125,-0.89063 1.890625,-0.89063 1.234375,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42188 h -3.84375 q -0.125,1.53125 0.734375,2.03125 0.265625,0.17187 0.671875,0.17187 z m 1.125,-4.70312 q -0.265625,-0.15625 -0.640625,-0.15625 -0.375,0 -0.6875,0.15625 -0.296875,0.14062 -0.53125,0.40625 -0.453125,0.51562 -0.578125,1.3125 h 2.984375 q 0.140625,-1.29688 -0.546875,-1.71875 z m 4.311523,0.10937 q 0.65625,-1.09375 1.8125,-1.09375 0.90625,0 1.515625,0.76563 0.640625,0.76562 0.640625,2.01562 0,1.39063 -0.703125,2.46875 -0.34375,0.54688 -0.875,0.90625 -0.53125,0.35938 -1.171875,0.35938 -1.296875,0 -1.6875,-1.23438 l -0.3125,1.09375 h -0.625 l 0.828125,-8.85937 h 0.921875 z m -0.25,2.625 q -0.07813,0.85938 0.359375,1.40625 0.390625,0.48438 0.953125,0.48438 0.5625,0 0.90625,-0.26563 0.359375,-0.26562 0.59375,-0.6875 0.453125,-0.79687 0.453125,-1.76562 0,-0.96875 -0.421875,-1.46875 -0.40625,-0.5 -1.046875,-0.5 -0.625,0 -1.125,0.48437 -0.515625,0.54688 -0.59375,1.45313 z m 6.479325,-3.57812 h 0.9375 l -0.59375,6.23437 h -0.921875 z m 0.59375,-1.45313 q -0.28125,0 -0.421875,-0.17187 -0.125,-0.17188 -0.109375,-0.46875 0.03125,-0.29688 0.203125,-0.46875 0.171875,-0.17188 0.453125,-0.17188 0.296875,0 0.4375,0.17188 0.15625,0.17187 0.125,0.46875 -0.03125,0.29687 -0.21875,0.46875 -0.171875,0.17187 -0.46875,0.17187 z m 6.194626,3.65625 q 0.07813,-0.84375 -0.203125,-1.20312 -0.28125,-0.375 -0.875,-0.375 -0.59375,0 -1,0.26562 -0.390625,0.26563 -0.4375,0.84375 h -1.03125 q 0.109375,-1.01562 0.796875,-1.4375 0.6875,-0.4375 1.6875,-0.4375 1.578125,0 1.90625,1.3125 0.125,0.4375 0.0625,1.0625 l -0.375,4 h -0.78125 v -1.04687 q -0.625,1.1875 -1.984375,1.1875 -0.828125,0 -1.34375,-0.5 -0.46875,-0.46875 -0.46875,-1.07813 0,-0.60937 0.1875,-0.98437 0.203125,-0.39063 0.5,-0.64063 0.65625,-0.51562 1.578125,-0.51562 0.921875,0 1.703125,0.34375 z m -0.140625,1.4375 q -0.8125,-0.25 -1.453125,-0.25 -0.640625,0 -1.046875,0.29688 -0.40625,0.28125 -0.40625,0.95312 0,0.40625 0.234375,0.67188 0.234375,0.26562 0.859375,0.26562 0.65625,0 1.171875,-0.46875 0.578125,-0.53125 0.625,-1.34375 z m 4.373596,-2.40625 q 0.703125,-1.375 2.015625,-1.375 1,0 1.484375,0.73438 0.5,0.73437 0.359375,1.98437 l -0.328125,3.65625 h -0.921875 l 0.34375,-3.65625 q 0.09375,-0.89062 -0.25,-1.34375 -0.328125,-0.45312 -1.046875,-0.45312 -0.71875,0 -1.21875,0.67187 -0.5,0.65625 -0.609375,1.84375 l -0.265625,2.9375 h -0.921875 l 0.578125,-6.21875 h 0.796875 z m 8.933105,0.3125 q 0.07813,-0.76562 0.703125,-1.21875 0.640625,-0.46875 1.640625,-0.46875 1.015625,0 1.53125,0.46875 0.515625,0.46875 0.484375,1.1875 h -0.90625 q -0.03125,-0.84375 -1.21875,-0.84375 -0.578125,0 -0.90625,0.29688 -0.328125,0.28125 -0.359375,0.60937 -0.03125,0.32813 0.171875,0.5625 0.21875,0.21875 0.71875,0.39063 l 1.078125,0.42187 q 0.703125,0.23438 1.046875,0.625 0.34375,0.375 0.28125,1 -0.07813,0.73438 -0.734375,1.23438 -0.703125,0.5625 -1.796875,0.5625 -1.09375,0 -1.671875,-0.54688 -0.578125,-0.5625 -0.515625,-1.42187 h 0.875 q -0.01563,0.57812 0.359375,0.875 0.375,0.29687 0.984375,0.29687 0.625,0 1.03125,-0.28125 0.40625,-0.29687 0.4375,-0.6875 0.04687,-0.40625 -0.171875,-0.60937 -0.203125,-0.20313 -0.71875,-0.35938 l -1.046875,-0.40625 q -1.421875,-0.46875 -1.296875,-1.6875 z m 8.882309,-1.6875 q 0.5625,0 1.015625,0.21875 0.46875,0.20313 0.78125,0.625 0.65625,0.875 0.5,2.42188 -0.15625,1.5625 -0.96875,2.4375 -0.78125,0.8125 -1.953125,0.8125 -1.171875,0 -1.796875,-0.8125 -0.65625,-0.875 -0.5,-2.4375 0.15625,-1.5625 0.96875,-2.42188 0.765625,-0.84375 1.953125,-0.84375 z m -0.0625,0.89063 q -0.828125,0 -1.328125,0.64062 -0.484375,0.625 -0.59375,1.73438 -0.09375,1.10937 0.25,1.75 0.34375,0.625 1.15625,0.625 0.828125,0 1.328125,-0.625 0.515625,-0.64063 0.609375,-1.75 0.109375,-1.10938 -0.25,-1.73438 -0.359375,-0.64062 -1.171875,-0.64062 z m 7.856582,4.25 q -0.6875,1.34375 -1.984375,1.34375 -0.953125,0 -1.46875,-0.57813 -0.515625,-0.57812 -0.421875,-1.8125 l 0.375,-3.95312 h 0.921875 l -0.359375,3.875 q -0.15625,1.57812 1.171875,1.57812 0.78125,0 1.328125,-0.67187 0.515625,-0.67188 0.625,-1.75 l 0.28125,-3.03125 h 0.921875 l -0.578125,6.23437 h -0.921875 z m 6.732544,-3.98438 q -0.375,-0.125 -0.703125,-0.125 -0.75,0 -1.125,0.6875 -0.375,0.67188 -0.484375,1.84375 h -0.296875 q 0.140625,-1.40625 0.5,-2.23437 l -0.46875,5.04687 H 84.05255 l 0.578125,-6.23437 h 0.921875 l -0.109375,1.1875 q 0.5625,-1.28125 1.609375,-1.28125 0.34375,0 0.640625,0.10937 z m 3.743409,-1.15625 q 0.5,0 0.859375,0.17188 0.359375,0.15625 0.625,0.4375 0.5,0.54687 0.578125,1.375 l -0.9375,0.0937 q -0.09375,-0.54688 -0.40625,-0.84375 -0.296875,-0.3125 -0.703125,-0.3125 -0.40625,0 -0.71875,0.15625 -0.296875,0.14062 -0.546875,0.4375 -0.5625,0.64062 -0.65625,1.73437 -0.09375,1.07813 0.296875,1.71875 0.40625,0.64063 1.0625,0.64063 0.671875,0 1.03125,-0.34375 0.375,-0.34375 0.421875,-0.98438 h 0.953125 q -0.07813,0.96875 -0.765625,1.59375 -0.671875,0.64063 -1.703125,0.64063 -1.046875,0 -1.6875,-0.875 -0.6875,-0.92188 -0.546875,-2.39063 0.15625,-1.48437 1,-2.40625 0.796875,-0.84375 1.84375,-0.84375 z m 5.655273,5.6875 q 1.140625,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92188 -0.890625,1.4375 -0.65625,0.51563 -1.5625,0.51563 -1.125,0 -1.734375,-0.875 -0.640625,-0.90625 -0.484375,-2.35938 0.15625,-1.51562 0.9375,-2.39062 0.78125,-0.89063 1.890625,-0.89063 1.234375,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42188 h -3.84375 q -0.125,1.53125 0.734375,2.03125 0.265625,0.17187 0.671875,0.17187 z m 1.125,-4.70312 q -0.265625,-0.15625 -0.640625,-0.15625 -0.375,0 -0.6875,0.15625 -0.296875,0.14062 -0.53125,0.40625 -0.453125,0.51562 -0.578125,1.3125 h 2.984375 q 0.140625,-1.29688 -0.546875,-1.71875 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path304" + d="m 19.53125,122.98582 q 0.6875,-1.10937 1.828125,-1.10937 1.015625,0 1.640625,0.85937 0.671875,0.92188 0.53125,2.39063 -0.140625,1.48437 -1,2.39062 -0.78125,0.87499 -1.859375,0.87499 -1.0625,0 -1.5,-0.89061 l -0.359375,3.81249 h -0.921875 l 0.875,-9.28124 h 0.75 z m -0.1875,2.75 q -0.07813,0.79688 0.328125,1.29688 0.390625,0.45312 1,0.45312 0.703125,0 1.21875,-0.59375 0.5625,-0.64062 0.671875,-1.75 0.125,-1.10937 -0.296875,-1.71875 -0.421875,-0.625 -1.125,-0.625 -0.640625,0 -1.109375,0.46875 -0.515625,0.5 -0.59375,1.375 v 0 l -0.109375,1.09375 z m 9.802399,-1.51562 q 0.07813,-0.84375 -0.203125,-1.20313 -0.28125,-0.375 -0.875,-0.375 -0.59375,0 -1,0.26563 -0.390625,0.26562 -0.4375,0.84375 h -1.03125 q 0.109375,-1.01563 0.796875,-1.4375 0.6875,-0.4375 1.6875,-0.4375 1.578125,0 1.90625,1.3125 0.125,0.4375 0.0625,1.0625 l -0.375,3.99999 h -0.78125 v -1.04687 q -0.625,1.18749 -1.984375,1.18749 -0.828125,0 -1.34375,-0.49999 -0.46875,-0.46875 -0.46875,-1.07812 0,-0.60938 0.1875,-0.98438 0.203125,-0.39062 0.5,-0.64062 0.65625,-0.51563 1.578125,-0.51563 0.921875,0 1.703125,0.34375 z m -0.140625,1.4375 q -0.8125,-0.25 -1.453125,-0.25 -0.640625,0 -1.046875,0.29687 -0.40625,0.28125 -0.40625,0.95313 0,0.40625 0.234375,0.67187 0.234375,0.26563 0.859375,0.26563 0.65625,0 1.171875,-0.46875 0.578125,-0.53125 0.625,-1.34375 z m 5.686096,-3.78125 q 0.5,0 0.859375,0.17187 0.359375,0.15625 0.625,0.4375 0.5,0.54688 0.578125,1.375 l -0.9375,0.0937 q -0.09375,-0.54687 -0.40625,-0.84375 -0.296875,-0.3125 -0.703125,-0.3125 -0.40625,0 -0.71875,0.15625 -0.296875,0.14063 -0.546875,0.4375 -0.5625,0.64063 -0.65625,1.73438 -0.09375,1.07812 0.296875,1.71875 0.40625,0.64062 1.0625,0.64062 0.671875,0 1.03125,-0.34375 0.375,-0.34375 0.421875,-0.98437 h 0.953125 q -0.07813,0.96875 -0.765625,1.59375 -0.671875,0.64061 -1.703125,0.64061 -1.046875,0 -1.6875,-0.87499 -0.6875,-0.92187 -0.546875,-2.39062 0.15625,-1.48438 1,-2.40625 0.796875,-0.84375 1.84375,-0.84375 z m 5.483398,3.09375 -0.796875,0.67187 -0.25,2.60937 h -0.921875 l 0.828125,-8.85937 h 0.921875 l -0.484375,5.14063 2.9375,-2.5 h 1.296875 l -2.796875,2.32812 2.34375,3.89062 h -1.15625 z m 8.630035,-0.75 q 0.07813,-0.84375 -0.203125,-1.20313 -0.28125,-0.375 -0.875,-0.375 -0.59375,0 -1,0.26563 -0.390625,0.26562 -0.4375,0.84375 h -1.03125 q 0.109375,-1.01563 0.796875,-1.4375 0.6875,-0.4375 1.6875,-0.4375 1.578125,0 1.90625,1.3125 0.125,0.4375 0.0625,1.0625 l -0.375,3.99999 h -0.78125 v -1.04687 q -0.625,1.18749 -1.984375,1.18749 -0.828125,0 -1.34375,-0.49999 -0.46875,-0.46875 -0.46875,-1.07812 0,-0.60938 0.1875,-0.98438 0.203125,-0.39062 0.5,-0.64062 0.65625,-0.51563 1.578125,-0.51563 0.921875,0 1.703125,0.34375 z m -0.140625,1.4375 q -0.8125,-0.25 -1.453125,-0.25 -0.640625,0 -1.046875,0.29687 -0.40625,0.28125 -0.40625,0.95313 0,0.40625 0.234375,0.67187 0.234375,0.26563 0.859375,0.26563 0.65625,0 1.171875,-0.46875 0.578125,-0.53125 0.625,-1.34375 z m 7.217346,-3.3125 q 0.140625,-0.6875 0.59375,-1.09375 0.453125,-0.42188 1.140625,-0.42188 l -0.1875,1.01563 q -1.03125,0 -1.15625,0.95312 0.359375,0.57813 0.296875,1.21875 -0.0625,0.64063 -0.28125,1.0625 -0.21875,0.42188 -0.5625,0.73438 -0.6875,0.625 -1.671875,0.625 -0.65625,0 -1.140625,-0.3125 -0.25,0.0625 -0.453125,0.25 -0.203125,0.1875 -0.234375,0.5 -0.0625,0.70312 0.96875,0.70312 h 2.171875 q 0.78125,0 1.203125,0.375 0.4375,0.35937 0.375,1.03124 -0.07813,0.96875 -1.03125,1.70313 -0.984375,0.76562 -2.46875,0.76562 -1.265625,0 -2,-0.57812 -0.734375,-0.57813 -0.65625,-1.42188 0.04687,-0.54687 0.375,-0.90625 0.34375,-0.34375 0.859375,-0.48437 -0.328125,-0.18749 -0.484375,-0.48437 -0.15625,-0.29687 -0.125,-0.6875 0.04687,-0.39062 0.34375,-0.6875 0.3125,-0.3125 0.71875,-0.42187 -0.5625,-0.65625 -0.453125,-1.64063 0.09375,-1.01562 0.796875,-1.64062 0.703125,-0.625 1.609375,-0.625 0.90625,0 1.453125,0.46875 z m -4.171875,7.07811 q -0.04687,0.48438 0.40625,0.84375 0.453125,0.35938 1.390625,0.35938 1.03125,0 1.765625,-0.48438 0.671875,-0.45312 0.75,-1.09375 0.01563,-0.29687 -0.15625,-0.51562 -0.171875,-0.21875 -0.5625,-0.21875 h -2.28125 q -0.59375,0.0312 -0.921875,0.3125 -0.328125,0.29687 -0.390625,0.79687 z m 3.9375,-5.28124 q 0.07813,-0.67187 -0.25,-1.09375 -0.328125,-0.42187 -0.96875,-0.42187 -0.640625,0 -1.046875,0.42187 -0.390625,0.42188 -0.453125,1.09375 -0.0625,0.67188 0.25,1.10938 0.328125,0.4375 0.953125,0.4375 0.640625,0 1.046875,-0.4375 0.40625,-0.4375 0.46875,-1.10938 z m 4.958161,3.42188 q 1.140625,0 1.4375,-1.125 h 0.9375 q -0.21875,0.92187 -0.890625,1.4375 -0.65625,0.51561 -1.5625,0.51561 -1.125,0 -1.734375,-0.87499 -0.640625,-0.90625 -0.484375,-2.35937 0.15625,-1.51563 0.9375,-2.39063 0.78125,-0.89062 1.890625,-0.89062 1.234375,0 1.75,1.0625 0.46875,0.9375 0.15625,2.42187 h -3.84375 q -0.125,1.53125 0.734375,2.03125 0.265625,0.17188 0.671875,0.17188 z m 1.125,-4.70313 q -0.265625,-0.15625 -0.640625,-0.15625 -0.375,0 -0.6875,0.15625 -0.296875,0.14063 -0.53125,0.40625 -0.453125,0.51563 -0.578125,1.3125 h 2.984375 q 0.140625,-1.29687 -0.546875,-1.71875 z m 3.092773,0.70313 q 0.07813,-0.76563 0.703125,-1.21875 0.640625,-0.46875 1.640625,-0.46875 1.015625,0 1.53125,0.46875 0.515625,0.46875 0.484375,1.1875 h -0.90625 q -0.03125,-0.84375 -1.21875,-0.84375 -0.578125,0 -0.90625,0.29687 -0.328125,0.28125 -0.359375,0.60938 -0.03125,0.32812 0.171875,0.5625 0.21875,0.21875 0.71875,0.39062 l 1.078125,0.42188 q 0.703125,0.23437 1.046875,0.625 0.34375,0.375 0.28125,1 -0.07813,0.73437 -0.734375,1.23437 -0.703125,0.56249 -1.796875,0.56249 -1.09375,0 -1.671875,-0.54686 -0.578125,-0.5625 -0.515625,-1.42188 h 0.875 q -0.01563,0.57813 0.359375,0.875 0.375,0.29688 0.984375,0.29688 0.625,0 1.03125,-0.28125 0.40625,-0.29688 0.4375,-0.6875 0.04687,-0.40625 -0.171875,-0.60938 -0.203125,-0.20312 -0.71875,-0.35937 l -1.046875,-0.40625 q -1.421875,-0.46875 -1.296875,-1.6875 z m 6.819809,-4.78125 q 2.09375,2.35937 1.78125,5.48437 -0.140625,1.48438 -0.859375,2.89063 -0.703125,1.40624 -1.953125,2.56249 l -0.625,-0.51563 q 2.234375,-2.29686 2.5,-4.93749 0.234375,-2.6875 -1.5625,-4.95312 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path306" + d="m 151.65355,97.7664 h 93.63779 v 60.81889 h -93.63779 z" /> + <g + transform="matrix(0.75,0,0,0.75,35.105476,30.427388)" + id="g1156"> + <path + d="m 163.3098,110.08453 h 1.0625 l 2.3125,6.92187 h -0.89063 l -0.59375,-1.76562 h -2.75 l -0.59375,1.76562 h -0.92187 z m -0.625,4.48437 h 2.29687 l -1.15625,-3.42187 z m 8.78366,1.39063 q -0.54687,1.14062 -1.75,1.14062 -0.89062,0 -1.4375,-0.48437 -0.54687,-0.5 -0.54687,-1.53125 v -3.34375 h 0.875 v 3.28125 q 0,1.32812 1.23437,1.32812 0.70313,0 1.14063,-0.54687 0.45312,-0.5625 0.48437,-1.42188 v -2.64062 h 0.875 v 5.26562 h -0.875 z m 5.62962,0.89062 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79687,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85937 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 3.14742,-5.23437 q 1.10937,0 1.78125,0.71875 0.67187,0.71875 0.67187,2.04687 0,1.3125 -0.67187,2.03125 -0.67188,0.71875 -1.78125,0.71875 -1.09375,0 -1.78125,-0.71875 -0.67188,-0.71875 -0.67188,-2.03125 0,-1.32812 0.67188,-2.04687 0.6875,-0.71875 1.78125,-0.71875 z m 1.57812,2.76562 q 0,-0.95312 -0.40625,-1.48437 -0.39062,-0.53125 -1.15625,-0.53125 -0.76562,0 -1.17187,0.53125 -0.40625,0.53125 -0.40625,1.48437 0,0.9375 0.39062,1.46875 0.39063,0.53125 1.14063,0.53125 0.76562,0 1.1875,-0.53125 0.42187,-0.53125 0.42187,-1.46875 z m 3.19338,-1.625 q 0.51562,-1.14062 1.76562,-1.14062 0.6875,0 1.14063,0.34375 0.46875,0.32812 0.67187,0.92187 0.5,-1.26562 1.84375,-1.26562 0.9375,0 1.45313,0.625 0.51562,0.60937 0.51562,1.67187 v 3.09375 h -0.85937 v -3.09375 q 0,-0.75 -0.35938,-1.14062 -0.34375,-0.39063 -1.01562,-0.39063 -0.67188,0 -1.04688,0.5625 -0.35937,0.54688 -0.35937,1.51563 v 2.54687 h -0.85938 v -3.09375 q 0,-0.75 -0.35937,-1.14062 -0.35938,-0.39063 -1.01563,-0.39063 -0.65625,0 -1.07812,0.54688 -0.40625,0.53125 -0.42188,1.5 v 2.57812 h -0.875 v -5.26562 h 0.75 z m 12.36995,0.84375 q 0,-0.71875 -0.29688,-1.01562 -0.29687,-0.3125 -0.85937,-0.3125 -0.5625,0 -0.90625,0.21875 -0.34375,0.21875 -0.34375,0.70312 h -0.96875 q 0,-1.20312 1.29687,-1.48437 0.40625,-0.0937 0.85938,-0.0937 0.98437,0 1.53125,0.5 0.54687,0.48437 0.54687,1.5 v 3.39062 h -0.73437 l -0.0937,-0.875 q -0.48438,1 -1.75,1 -0.84375,0 -1.35938,-0.46875 -0.51562,-0.48437 -0.51562,-1.1875 0,-0.70312 0.5625,-1.09375 0.57812,-0.40625 1.42187,-0.40625 0.84375,0 1.60938,0.29688 z m 0,1.21875 q -0.76563,-0.21875 -1.35938,-0.21875 -0.57812,0 -0.95312,0.21875 -0.35938,0.20313 -0.35938,0.64063 0,1 1.125,1 0.64063,0 1.09375,-0.45313 0.45313,-0.46875 0.45313,-1.1875 z m 5.46756,2.03125 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79688,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67187 h 0.84375 v -1.45313 h 0.85938 v 1.45313 h 1.65625 v 0.67187 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 1.31929,-5.10937 h 0.85937 v 5.26562 h -0.85937 z m 0.42187,-1.23438 q -0.26562,0 -0.42187,-0.14062 -0.14063,-0.15625 -0.14063,-0.40625 0,-0.25 0.14063,-0.39063 0.15625,-0.15625 0.42187,-0.15625 0.26563,0 0.42188,0.15625 0.15625,0.14063 0.15625,0.39063 0,0.25 -0.15625,0.40625 -0.15625,0.14062 -0.42188,0.14062 z m 4.45188,1.10938 q 0.9375,0 1.48437,0.48437 0.54688,0.46875 0.71875,1.1875 l -0.875,0.0781 q -0.15625,-0.46875 -0.46875,-0.71875 -0.3125,-0.26563 -0.70312,-0.26563 -0.70313,0 -1.14063,0.53125 -0.4375,0.53125 -0.4375,1.4375 0,0.90625 0.42188,1.45313 0.42187,0.54687 1.04687,0.54687 0.64063,0 0.95313,-0.28125 0.32812,-0.29687 0.32812,-0.82812 h 0.89063 q 0,0.84375 -0.59375,1.375 -0.59375,0.51562 -1.53125,0.51562 -1,0 -1.70313,-0.75 -0.70312,-0.76562 -0.70312,-2.03125 0,-1.26562 0.6875,-2 0.70312,-0.73437 1.625,-0.73437 z" + id="path308" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + <path + d="m 165.34105,128.95953 q -0.54688,1.14062 -1.75,1.14062 -0.89063,0 -1.4375,-0.48437 -0.54688,-0.5 -0.54688,-1.53125 v -3.34376 h 0.875 v 3.28126 q 0,1.32812 1.23438,1.32812 0.70312,0 1.14062,-0.54687 0.45313,-0.5625 0.48438,-1.42188 v -2.64063 h 0.875 v 5.26563 h -0.875 z m 3.69212,-3.40626 q 0.51563,-0.9375 1.54688,-0.9375 1.03125,0 1.71875,0.76563 0.6875,0.75 0.6875,2 0,1.23438 -0.70313,2 -0.6875,0.75 -1.70312,0.75 -1,0 -1.48438,-0.76562 v 3.21875 h -0.875 v -7.84376 h 0.71875 z m 1.5,3.79688 q 0.625,0 1.09375,-0.51562 0.46875,-0.53125 0.46875,-1.45313 0,-0.92188 -0.45312,-1.45313 -0.4375,-0.54687 -1.07813,-0.54687 -0.64062,0 -1.04687,0.40625 -0.40625,0.40625 -0.42188,1.07812 v 1 q 0,0.70313 0.40625,1.09376 0.42188,0.39062 1.03125,0.39062 z m 7.45488,-3.82813 v -3 h 0.85938 v 7.48438 h -0.70313 l -0.10937,-0.875 q -0.25,0.48438 -0.67188,0.75 -0.40625,0.25 -0.90625,0.25 -1,0 -1.6875,-0.76562 -0.67187,-0.78125 -0.67187,-2.01563 0,-1.23438 0.65625,-1.98438 0.67187,-0.75 1.6875,-0.75 1.03125,0 1.54687,0.90625 z m -1.48437,-0.14062 q -0.64063,0 -1.07813,0.54687 -0.4375,0.53125 -0.4375,1.4375 0,0.90626 0.4375,1.45313 0.45313,0.53125 1.0625,0.53125 0.60938,0 1.04688,-0.40625 0.4375,-0.40625 0.45312,-1.10938 v -0.85937 q 0,-0.73438 -0.42187,-1.15625 -0.42188,-0.4375 -1.0625,-0.4375 z m 7.62675,1.21875 q 0,-0.71875 -0.29687,-1.01563 -0.29688,-0.3125 -0.85938,-0.3125 -0.5625,0 -0.90625,0.21875 -0.34375,0.21875 -0.34375,0.70313 h -0.96875 q 0,-1.20313 1.29688,-1.48438 0.40625,-0.0937 0.85937,-0.0937 0.98438,0 1.53125,0.5 0.54688,0.48438 0.54688,1.5 v 3.39063 h -0.73438 l -0.0937,-0.875 q -0.48437,1 -1.75,1 -0.84375,0 -1.35937,-0.46875 -0.51563,-0.48437 -0.51563,-1.1875 0,-0.70313 0.5625,-1.09375 0.57813,-0.40625 1.42188,-0.40625 0.84375,0 1.60937,0.29687 z m 0,1.21875 q -0.76562,-0.21875 -1.35937,-0.21875 -0.57813,0 -0.95313,0.21875 -0.35937,0.20313 -0.35937,0.64063 0,1 1.125,1 0.64062,0 1.09375,-0.45313 0.45312,-0.46875 0.45312,-1.1875 z m 5.46756,2.03125 q -0.9375,0.4375 -1.71875,0.1875 -0.5625,-0.17187 -0.79687,-0.73437 -0.125,-0.28125 -0.125,-0.65625 v -3.23438 h -0.84375 v -0.67188 h 0.84375 v -1.45312 h 0.85937 v 1.45312 h 1.65625 v 0.67188 h -1.65625 v 3.21875 q 0,0.79688 0.75,0.79688 0.40625,0 0.90625,-0.1875 z m 3.06929,-0.42187 q 1.09375,0 1.25,-0.96875 h 0.89063 q -0.125,0.79687 -0.70313,1.23437 -0.57812,0.4375 -1.4375,0.4375 -1.04687,0 -1.71875,-0.75 -0.65625,-0.76562 -0.65625,-2.01563 0,-1.25 0.65625,-2 0.67188,-0.75 1.78125,-0.75 1.10938,0 1.65625,0.85938 0.54688,0.85937 0.375,2.09375 h -3.59375 q 0,0.8125 0.39063,1.34375 0.40625,0.51563 1.10937,0.51563 z m 0.64063,-3.98438 q -0.25,-0.14063 -0.60938,-0.14063 -0.67187,0 -1.0625,0.46875 -0.39062,0.45313 -0.45312,1.125 h 2.79687 q 0,-1.09375 -0.67187,-1.45312 z m 12.43048,0.71875 q -0.48438,1.5 -1.26563,2.4375 l 0.48438,0.40625 q 0.21875,0.1875 0.39062,0.28125 0.17188,0.0781 0.4375,0.0781 0.26563,0 0.48438,-0.20313 0.21875,-0.20312 0.25,-0.70312 h 0.8125 q -0.0469,0.79687 -0.42188,1.23437 -0.35937,0.4375 -1.0625,0.4375 -0.4375,0 -0.79687,-0.17187 -0.35938,-0.1875 -0.79688,-0.5625 l -0.28125,-0.25 q -1.09375,0.98437 -2.5,0.98437 -1.15625,0 -1.9375,-0.57812 -0.78125,-0.57813 -0.78125,-1.39063 0,-0.8125 0.51563,-1.21875 0.53125,-0.42188 1.53125,-0.59375 l -0.15625,-0.14063 q -0.84375,-0.73437 -0.84375,-1.60937 0,-0.70313 0.57812,-1.15625 0.57813,-0.46875 1.53125,-0.46875 0.95313,0 1.51563,0.46875 0.5625,0.45312 0.5625,1.10937 0,0.65625 -0.42188,1.14063 -0.42187,0.46875 -1.39062,0.875 l 1.73437,1.53125 q 0.75,-0.90625 1.23438,-2.28125 z m -4.39063,0.67187 q -0.84375,0.10938 -1.25,0.40625 -0.40625,0.29688 -0.40625,0.82813 0,0.53125 0.45313,0.90625 0.46875,0.375 1.40625,0.375 0.95312,0 1.84375,-0.71875 z m 1.70313,-2.20312 q 0,-0.39063 -0.3125,-0.65625 -0.29688,-0.26563 -0.84375,-0.26563 -0.53125,0 -0.84375,0.3125 -0.29688,0.29688 -0.29688,0.65625 0,0.34375 0.14063,0.625 0.14062,0.26563 0.46875,0.5625 l 0.29687,0.26563 q 1.14063,-0.53125 1.32813,-1.09375 0.0625,-0.1875 0.0625,-0.40625 z" + id="path310" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + <path + d="m 163.01292,136.08453 2.32812,4.6875 2.3125,-4.6875 h 1.21875 v 6.92187 h -0.875 v -5.6875 l -2.375,4.8125 h -0.57812 l -2.40625,-4.89062 v 5.76562 h -0.875 v -6.92187 z m 9.59909,6.34375 q 1.09375,0 1.25,-0.96875 h 0.89063 q -0.125,0.79687 -0.70313,1.23437 -0.57812,0.4375 -1.4375,0.4375 -1.04687,0 -1.71875,-0.75 -0.65625,-0.76562 -0.65625,-2.01562 0,-1.25 0.65625,-2 0.67188,-0.75 1.78125,-0.75 1.10938,0 1.65625,0.85937 0.54688,0.85938 0.375,2.09375 h -3.59375 q 0,0.8125 0.39063,1.34375 0.40625,0.51563 1.10937,0.51563 z m 0.64063,-3.98438 q -0.25,-0.14062 -0.60938,-0.14062 -0.67187,0 -1.0625,0.46875 -0.39062,0.45312 -0.45312,1.125 h 2.79687 q 0,-1.09375 -0.67187,-1.45313 z m 5.17552,0.0469 q -1.23438,0 -1.28125,1.95312 v 2.5625 h -0.875 v -5.26562 h 0.875 v 1.01562 q 0.39062,-1.10937 1.39062,-1.10937 0.32813,0 0.60938,0.0937 l -0.0469,0.85937 q -0.32812,-0.10937 -0.67187,-0.10937 z m 2.1382,4.34375 q -0.65625,-0.3125 -0.65625,-0.96875 0,-0.34375 0.25,-0.59375 0.26562,-0.26563 0.65625,-0.35938 -0.59375,-0.53125 -0.59375,-1.375 0,-0.85937 0.60937,-1.39062 0.60938,-0.53125 1.4375,-0.53125 0.84375,0 1.42188,0.39062 0.0781,-0.57812 0.46875,-0.92187 0.39062,-0.35938 1.03125,-0.35938 l -0.0781,0.85938 q -0.96875,0 -1.01562,0.8125 0.39062,0.46875 0.39062,1.14062 0,0.84375 -0.60937,1.39063 -0.60938,0.53125 -1.53125,0.53125 -0.625,0 -1.10938,-0.25 -0.21875,0.0469 -0.39062,0.20312 -0.17188,0.15625 -0.17188,0.4375 0,0.57813 0.95313,0.57813 h 2.04687 q 0.75,0 1.17188,0.32812 0.42187,0.3125 0.42187,0.85938 0,0.84375 -0.84375,1.46875 -0.82812,0.625 -2.125,0.625 -1.28125,0 -2.01562,-0.48438 -0.73438,-0.46875 -0.73438,-1.20312 0,-0.46875 0.28125,-0.76563 0.28125,-0.29687 0.73438,-0.42187 z m -0.15625,1.15625 q 0,0.42187 0.45312,0.71875 0.45313,0.3125 1.375,0.3125 0.9375,0 1.5625,-0.40625 0.625,-0.40625 0.625,-0.9375 0,-0.25 -0.1875,-0.4375 -0.1875,-0.17188 -0.5625,-0.17188 h -2.10937 q -0.5625,0.0156 -0.85938,0.26563 -0.29687,0.25 -0.29687,0.65625 z m 3.23437,-4.46875 q 0,-0.5625 -0.34375,-0.92188 -0.34375,-0.35937 -0.95312,-0.35937 -0.59375,0 -0.9375,0.35937 -0.32813,0.35938 -0.32813,0.9375 0,0.5625 0.34375,0.9375 0.34375,0.35938 0.9375,0.35938 0.59375,0 0.9375,-0.375 0.34375,-0.375 0.34375,-0.9375 z m 4.53647,2.90625 q 1.09375,0 1.25,-0.96875 h 0.89063 q -0.125,0.79687 -0.70313,1.23437 -0.57812,0.4375 -1.4375,0.4375 -1.04687,0 -1.71875,-0.75 -0.65625,-0.76562 -0.65625,-2.01562 0,-1.25 0.65625,-2 0.67188,-0.75 1.78125,-0.75 1.10938,0 1.65625,0.85937 0.54688,0.85938 0.375,2.09375 h -3.59375 q 0,0.8125 0.39063,1.34375 0.40625,0.51563 1.10937,0.51563 z m 0.64063,-3.98438 q -0.25,-0.14062 -0.60938,-0.14062 -0.67187,0 -1.0625,0.46875 -0.39062,0.45312 -0.45312,1.125 h 2.79687 q 0,-1.09375 -0.67187,-1.45313 z" + id="path312" + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" /> + </g> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path314" + d="m 127.65354,106.98425 h 24.00001 v 24 h -24.00001 z" /> + <g + id="g321" + transform="translate(127.65354,106.98425)"> + <clipPath + id="g249fea5886_0_69.4"> + <path + style="clip-rule:evenodd" + inkscape:connector-curvature="0" + id="path316" + d="M 0,0 H 24 V 24 H 0 Z" /> + </clipPath> + <image + style="fill:#000000" + id="image319" + xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAQAAABKfvVzAAAAnUlEQVR42s2SQQqDMBBFf3q8QNDaWwk9lHqZNEpxoWQZf1xIqTFJQaTzF+GTeZPMMMAJ8UAHS7W456Q/4aiR8medru4wQEJQCm+6Ig50TJGbK+maOGD5FbG5GybMvw1A842zgAr9OpeQTKj143Sv1x5wkd8G764F/AA+G00C/VejScCsTucDBatrLt8fTSnrzkRXQ+8B3+hxusJlsQBGdoyNQjnZGwAAAABJRU5ErkJggg==" + preserveAspectRatio="none" + y="0" + x="0" + height="24" + width="24" + clip-path="url(#g249fea5886_0_69.4)" /> + </g> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path323" + d="m 731.5486,258.95538 h 181.82672 v 59.08661 H 731.5486 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path325" + d="m 764.22375,283.09055 v 7.67187 q 0,1.51563 0.76562,2.1875 0.78125,0.65625 2,0.65625 1.21875,0 1.98438,-0.65625 0.76562,-0.67187 0.76562,-2.1875 v -7.67187 h 2.25 v 7.67187 q 0,2.35938 -1.3125,3.64063 -1.3125,1.28125 -3.6875,1.28125 -2.375,0 -3.6875,-1.28125 -1.3125,-1.28125 -1.3125,-3.64063 v -7.67187 z m 15.1228,0 q 2.09375,0 3.25,1.01562 1.17188,1.01563 1.17188,2.90625 0,1.89063 -1.17188,2.90625 -1.15625,1.01563 -3.25,1.01563 h -2.09375 v 4.48437 h -2.26562 v -12.32812 z m 0,5.89062 q 1.04688,0 1.57813,-0.54687 0.53125,-0.5625 0.53125,-1.42188 0,-0.85937 -0.53125,-1.42187 -0.53125,-0.5625 -1.57813,-0.5625 h -2.09375 v 3.95312 z m 10.5268,-5.89062 q 2.8125,0 4.54687,1.67187 1.75,1.67188 1.75,4.5 0,2.8125 -1.75,4.48438 -1.73437,1.67187 -4.54687,1.67187 h -4 v -12.32812 z m -1.73438,10.29687 h 1.73438 q 1.75,0 2.84375,-1.1875 1.01562,-1.125 1.01562,-2.9375 0,-1.84375 -1.01562,-2.98437 -1.0625,-1.15625 -2.84375,-1.15625 h -1.73438 z m 13.39191,-10.29687 h 2.8125 l 4.04687,12.32812 h -2.375 l -0.84375,-2.65625 h -4.57812 l -0.875,2.65625 h -2.375 z m -0.375,7.98437 h 3.45312 l -1.70312,-5.3125 z m 7.55383,-7.98437 h 9.89063 v 1.9375 h -3.82813 v 10.39062 h -2.23437 v -10.39062 h -3.82813 z m 11.56574,0 h 7.9375 v 1.9375 h -5.70313 v 3.25 h 5.34375 v 1.9375 h -5.34375 v 3.25 h 5.70313 v 1.95312 h -7.9375 z m 17.43255,3.39062 q -0.3125,-1.60937 -2.28125,-1.60937 -0.96875,0 -1.51562,0.39062 -0.54688,0.39063 -0.54688,0.95313 0,0.54687 0.34375,0.85937 0.35938,0.3125 1.10938,0.57813 l 2.67187,1.04687 q 1.375,0.53125 2.10938,1.34375 0.75,0.79688 0.75,2.01563 0,1.67187 -1.26563,2.65625 -1.25,0.96875 -3.5625,0.96875 -2.04687,0 -3.32812,-1 -1.42188,-1.10938 -1.5,-3.125 h 2.21875 q 0,1.51562 1.57812,1.92187 0.48438,0.125 1.25,0.125 0.78125,0 1.4375,-0.375 0.67188,-0.39062 0.67188,-1.04687 0,-0.65625 -0.35938,-1 -0.35937,-0.35938 -1.17187,-0.67188 l -2.45313,-0.96875 q -1.42187,-0.54687 -2.1875,-1.28125 -0.75,-0.75 -0.75,-2.0625 0,-1.53125 1.1875,-2.42187 1.21875,-0.9375 3.29688,-0.9375 2.07812,0 3.20312,0.96875 1.14063,0.95312 1.3125,2.67187 z m 9.54334,-5.21875 h 2.29687 l -4.90625,15.6875 h -2.28125 z m 9.41516,1.57813 q 1.23437,0 2.25,0.40625 1.03125,0.40625 1.78125,1.20312 1.54687,1.67188 1.54687,4.79688 0,3.125 -1.54687,4.84375 -1.48438,1.59375 -4.04688,1.59375 -2.54687,0 -4.03125,-1.64063 -1.5625,-1.6875 -1.5625,-4.79687 0,-3.15625 1.5625,-4.82813 1.45313,-1.57812 4.04688,-1.57812 z m 3.26562,6.4375 q 0,-2.125 -0.89062,-3.26563 -0.875,-1.15625 -2.375,-1.15625 -1.5,0 -2.39063,1.15625 -0.89062,1.14063 -0.89062,3.26563 0,2.10937 0.89062,3.25 0.89063,1.125 2.39063,1.125 1.5,0 2.375,-1.125 0.89062,-1.14063 0.89062,-3.25 z m 3.08594,-6.1875 h 9.89063 v 1.9375 h -3.82813 v 10.39062 h -2.23437 v -10.39062 h -3.82813 z m 14.42517,0 h 2.8125 l 4.04688,12.32812 h -2.375 l -0.84375,-2.65625 h -4.57813 l -0.875,2.65625 h -2.375 z m -0.375,7.98437 h 3.45313 l -1.70313,-5.3125 z" /> + <path + sodipodi:nodetypes="ccccc" + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path327" + d="m 197.9563,74.58853 h 86.55118 v 279.1181 H 197.9563 Z" /> + <path + sodipodi:nodetypes="ccccc" + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path329" + d="m 197.9563,74.58853 h 86.55118 v 279.1181 H 197.9563 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path331" + d="m 212.17505,88.35478 q 0.95312,0 1.65625,0.23437 0.70312,0.23438 1.21875,0.64063 1.01562,0.82812 1.3125,2.29687 l -2.01563,0.35938 q -0.25,-0.8125 -0.79687,-1.3125 -0.53125,-0.5 -1.32813,-0.5 -1.09375,0 -1.76562,0.90625 -0.71875,1 -0.71875,2.75 0,1.75 0.64062,2.73437 0.64063,0.98438 1.73438,0.98438 1.10937,0 1.67187,-0.53125 0.5625,-0.54688 0.5625,-1.39063 h 2.03125 q 0,1.73438 -1.10937,2.6875 -1.10938,0.95313 -3.04688,0.95313 -2.0625,0 -3.28125,-1.4375 -1.23437,-1.46875 -1.23437,-4 0,-2.5625 1.26562,-4 1.21875,-1.375 3.20313,-1.375 z m 9.47215,2.60937 q 0.78125,0 1.46875,0.25 0.6875,0.25 1.1875,0.76563 1.09375,1.10937 1.09375,3.09375 0,1.95312 -1.09375,3.07812 -1,1.01563 -2.65625,1.01563 -1.67187,0 -2.6875,-1.01563 -1.10937,-1.10937 -1.10937,-3.07812 0,-2 1.10937,-3.09375 1,-1.01563 2.6875,-1.01563 z m 1.875,4.09375 q 0,-1.23437 -0.48437,-1.84375 -0.48438,-0.625 -1.34375,-0.625 -0.84375,0 -1.39063,0.625 -0.54687,0.60938 -0.54687,1.84375 0,1.23438 0.48437,1.85938 0.48438,0.60937 1.34375,0.60937 0.84375,0 1.39063,-0.60937 0.54687,-0.625 0.54687,-1.85938 z m 9.19664,2.6875 q -0.71875,1.42188 -2.20312,1.42188 -1.5,0 -2.5,-1.125 -1.04688,-1.1875 -1.04688,-3.01563 0,-1.82812 1,-2.95312 0.96875,-1.10938 2.42188,-1.10938 1.46875,0 2.20312,1.17188 v -4.15625 h 1.90625 v 10.96875 h -1.5625 z m -1.96875,-5.07812 q -0.79687,0 -1.34375,0.65625 -0.53125,0.64062 -0.53125,1.73437 0,1.07813 0.54688,1.75 0.54687,0.65625 1.375,0.65625 0.6875,0 1.23437,-0.54687 0.5625,-0.5625 0.5625,-1.40625 V 94.4954 q -0.0312,-0.82812 -0.5625,-1.35937 -0.48437,-0.46875 -1.28125,-0.46875 z m 12.13652,-0.5625 q 0.40625,0.5 0.60938,1.1875 0.20312,0.67187 0.20312,1.23437 0,0.54688 -0.0781,1 h -5.01563 q 0.0312,0.9375 0.45313,1.53125 0.4375,0.59375 1.32812,0.59375 1.15625,0 1.39063,-1.01562 h 1.90625 q -0.20313,1.15625 -1.07813,1.82812 -0.90625,0.70313 -2.21875,0.70313 -1.54687,0 -2.57812,-1.10938 -1.07813,-1.17187 -1.07813,-3 0,-1.875 1.07813,-3 1.01562,-1.09375 2.57812,-1.09375 1.60938,0 2.5,1.14063 z m -2.48437,0.35937 q -0.8125,0 -1.26563,0.53125 -0.4375,0.51563 -0.51562,1.32813 h 3.3125 q 0,-1.26563 -0.79688,-1.6875 -0.3125,-0.17188 -0.73437,-0.17188 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path333" + d="m 210.3313,107.5579 v 4.34375 h 4.53125 v -4.34375 h 1.89062 v 10.39062 h -1.89062 v -4.40625 h -4.53125 v 4.40625 h -1.89063 V 107.5579 Z m 12.4679,2.40625 q 0.78125,0 1.46875,0.25 0.6875,0.25 1.1875,0.76562 1.09375,1.10938 1.09375,3.09375 0,1.95313 -1.09375,3.07813 -1,1.01562 -2.65625,1.01562 -1.67188,0 -2.6875,-1.01562 -1.10938,-1.10938 -1.10938,-3.07813 0,-2 1.10938,-3.09375 1,-1.01562 2.6875,-1.01562 z m 1.875,4.09375 q 0,-1.23438 -0.48438,-1.84375 -0.48437,-0.625 -1.34375,-0.625 -0.84375,0 -1.39062,0.625 -0.54688,0.60937 -0.54688,1.84375 0,1.23437 0.48438,1.85937 0.48437,0.60938 1.34375,0.60938 0.84375,0 1.39062,-0.60938 0.54688,-0.625 0.54688,-1.85937 z m 5.18101,1.51562 q 0.0312,1.10938 1.60938,1.10938 0.60937,0 1,-0.26563 0.39062,-0.26562 0.39062,-0.60937 0,-0.35938 -0.23437,-0.54688 -0.23438,-0.1875 -0.75,-0.35937 l -1.70313,-0.59375 q -1.89062,-0.65625 -1.89062,-2.15625 0,-0.98438 0.89062,-1.57813 0.89063,-0.60937 2.39063,-0.60937 1.5,0 2.29687,0.65625 0.8125,0.65625 0.84375,1.64062 h -1.78125 q -0.0312,-0.375 -0.375,-0.59375 -0.32812,-0.23437 -0.95312,-0.23437 -0.625,0 -0.96875,0.25 -0.34375,0.25 -0.34375,0.5625 0,0.5625 0.95312,0.84375 l 1.84375,0.6875 q 0.90625,0.29687 1.39063,0.78125 0.48437,0.46875 0.48437,1.21875 0,0.95312 -0.90625,1.65625 -0.9375,0.73437 -2.5,0.73437 -1.54687,0 -2.5,-0.67187 -0.9375,-0.6875 -0.95312,-1.92188 z m 11.76015,2.1875 q -1.0625,0.40625 -1.67188,0.40625 -0.60937,0 -1.0625,-0.14062 -0.45312,-0.14063 -0.79687,-0.4375 -0.75,-0.65625 -0.75,-1.79688 v -4.35937 h -1.07813 v -1.26563 h 1.07813 v -2.04687 h 1.89062 v 2.04687 h 2.10938 v 1.26563 h -2.10938 v 4.29687 q 0,0.95313 0.92188,0.95313 0.45312,0 1.1875,-0.25 z m 2.08563,-7.60937 h 1.89062 v 7.79687 h -1.89062 z m -0.21875,-2.48438 q 0,-0.51562 0.29687,-0.8125 0.3125,-0.29687 0.875,-0.29687 0.54688,0 0.85938,0.29687 0.3125,0.29688 0.3125,0.8125 0,0.5 -0.3125,0.79688 -0.3125,0.29687 -0.85938,0.29687 -0.5625,0 -0.875,-0.29687 -0.29687,-0.29688 -0.29687,-0.79688 z m 7.16989,3.84375 q 0.76563,-1.54687 2.46875,-1.54687 1.4375,0 2.15625,0.95312 0.73438,0.9375 0.73438,2.48438 v 4.54687 h -1.89063 v -4.54687 q 0,-0.85938 -0.42187,-1.29688 -0.40625,-0.4375 -1.15625,-0.4375 -0.75,0 -1.29688,0.67188 -0.53125,0.67187 -0.5625,2.01562 v 3.59375 h -1.89062 v -7.78125 h 1.65625 z m 8.78052,3.25 q -0.9375,-0.79687 -0.9375,-2 0,-1.26562 0.98437,-2.04687 0.96875,-0.75 2.20313,-0.75 1.23437,0 2.07812,0.46875 0.0937,-0.92188 0.78125,-1.46875 0.67188,-0.5625 1.57813,-0.5625 l -0.0937,1.79687 q -1.375,0 -1.42188,0.92188 0.59375,0.73437 0.59375,1.5 0,0.76562 -0.28125,1.29687 -0.26562,0.51563 -0.73437,0.85938 -0.95313,0.76562 -2.32813,0.76562 -0.78125,0 -1.42187,-0.23437 -0.64063,0.1875 -0.64063,0.76562 0,0.71875 1.21875,0.71875 h 2.60938 q 2.64062,0 2.64062,1.85938 0,0.625 -0.3125,1.21875 -0.29687,0.60937 -0.89062,1.0625 -1.3125,1.03125 -3.29688,1.03125 -1.92187,0 -3.125,-0.78125 -1.125,-0.75 -1.125,-1.84375 0,-0.71875 0.4375,-1.14063 0.45313,-0.42187 1.17188,-0.53125 -0.95313,-0.57812 -0.95313,-1.4375 0,-0.54687 0.34375,-0.92187 0.35938,-0.39063 0.92188,-0.54688 z m 1.4375,3.35938 q -1.5,0.0625 -1.5,1.14062 0,0.54688 0.625,0.875 0.64062,0.32813 1.5,0.32813 0.875,0 1.35937,-0.15625 0.48438,-0.14063 0.82813,-0.375 0.71875,-0.48438 0.71875,-1.15625 0,-0.28125 -0.20313,-0.46875 -0.20312,-0.1875 -0.57812,-0.1875 z m 2.45312,-5.375 q 0,-0.65625 -0.35937,-1.0625 -0.35938,-0.40625 -1.09375,-0.40625 -0.73438,0 -1.125,0.40625 -0.375,0.40625 -0.375,1.0625 0,0.64062 0.375,1.0625 0.39062,0.40625 1.125,0.40625 0.73437,0 1.09375,-0.40625 0.35937,-0.42188 0.35937,-1.0625 z m 8.21827,-6.71875 h 1.9375 l -4.125,13.21875 h -1.92188 z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path335" + d="m 216.15942,129.7454 q 0,1.10937 -0.625,1.89062 -0.625,0.78125 -1.79688,1.09375 l 2.78125,4.21875 h -2.45312 l -2.29688,-4.04687 h -1.4375 v 4.04687 h -1.89062 V 126.5579 h 3.84375 q 1.84375,0 2.85937,0.89062 1.01563,0.84375 1.01563,2.29688 z m -4.04688,1.89062 q 1.03125,0 1.5625,-0.46875 0.53125,-0.46875 0.53125,-1.25 0,-0.78125 -0.48437,-1.25 -0.48438,-0.46875 -1.4375,-0.46875 h -1.95313 v 3.4375 z m 12.05402,-1.53125 q 0.40625,0.5 0.60938,1.1875 0.20312,0.67188 0.20312,1.23438 0,0.54687 -0.0781,1 h -5.01563 q 0.0312,0.9375 0.45313,1.53125 0.4375,0.59375 1.32812,0.59375 1.15625,0 1.39063,-1.01563 h 1.90625 q -0.20313,1.15625 -1.07813,1.82813 -0.90625,0.70312 -2.21875,0.70312 -1.54687,0 -2.57812,-1.10937 -1.07813,-1.17188 -1.07813,-3 0,-1.875 1.07813,-3 1.01562,-1.09375 2.57812,-1.09375 1.60938,0 2.5,1.14062 z m -2.48437,0.35938 q -0.8125,0 -1.26563,0.53125 -0.4375,0.51562 -0.51562,1.32812 h 3.3125 q 0,-1.26562 -0.79688,-1.6875 -0.3125,-0.17187 -0.73437,-0.17187 z m 6.43313,-1.29688 1.76563,5.90625 1.79687,-5.90625 h 2.17188 l -2.89063,7.78125 h -2.125 l -2.90625,-7.78125 z m 7.56964,-0.0156 h 1.89063 v 7.79687 h -1.89063 z m -0.21875,-2.48438 q 0,-0.51562 0.29688,-0.8125 0.3125,-0.29687 0.875,-0.29687 0.54687,0 0.85937,0.29687 0.3125,0.29688 0.3125,0.8125 0,0.5 -0.3125,0.79688 -0.3125,0.29687 -0.85937,0.29687 -0.5625,0 -0.875,-0.29687 -0.29688,-0.29688 -0.29688,-0.79688 z m 10.73239,3.4375 q 0.40625,0.5 0.60938,1.1875 0.20312,0.67188 0.20312,1.23438 0,0.54687 -0.0781,1 h -5.01563 q 0.0312,0.9375 0.45313,1.53125 0.4375,0.59375 1.32812,0.59375 1.15625,0 1.39063,-1.01563 h 1.90625 q -0.20313,1.15625 -1.07813,1.82813 -0.90625,0.70312 -2.21875,0.70312 -1.54687,0 -2.57812,-1.10937 -1.07813,-1.17188 -1.07813,-3 0,-1.875 1.07813,-3 1.01562,-1.09375 2.57812,-1.09375 1.60938,0 2.5,1.14062 z m -2.48437,0.35938 q -0.8125,0 -1.26563,0.53125 -0.4375,0.51562 -0.51562,1.32812 h 3.3125 q 0,-1.26562 -0.79688,-1.6875 -0.3125,-0.17187 -0.73437,-0.17187 z m 6.23001,-1.29688 1.57812,5.5625 1.48438,-5.125 h 1.70312 l 1.5,5.14063 1.57813,-5.57813 h 1.89062 l -2.5625,7.78125 h -1.85937 l -1.4375,-4.65625 -1.40625,4.65625 h -1.875 l -2.57813,-7.78125 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path339" + d="m 247.20462,318.51938 h 33.30072 v 30.80316 h -33.30072 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path348" + d="m 572.1562,118.59055 39.37006,0.7874" /> + <path + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;fill:#30bc3a;fill-opacity:1;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path350" + d="m 564.1562,118.59055 15.37488,0.3075" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:2.77046;stroke-linecap:butt;fill-opacity:1;stroke-opacity:1" + inkscape:connector-curvature="0" + id="path352" + d="m 575.97107,124.30528 10.48006,-5.22378 -10.32859,-5.83125 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path354" + d="m 151.65355,201.43626 h 23.30708" /> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill:#30bc3a;fill-opacity:1" + inkscape:connector-curvature="0" + id="path356" + d="m 151.65355,201.43626 h 33.30708" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:2;stroke-linecap:butt;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + id="path358" + d="m 184.96063,204.73973 9.07619,-3.30347 -9.07619,-3.30346 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path360" + d="m 151.65355,304.9185 h 23.18109" /> + <path + sodipodi:nodetypes="cc" + style="fill-rule:evenodd;stroke:#30bc3a;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-opacity:1;fill:#30bc3a;fill-opacity:1" + inkscape:connector-curvature="0" + id="path362" + d="m 151.65355,304.91846 h 33.18109" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:2;stroke-linecap:butt;stroke-opacity:1;fill-opacity:1" + inkscape:connector-curvature="0" + id="path364" + d="m 184.83464,308.22192 9.0762,-3.30347 -9.0762,-3.30343 z" /> + <path + style="fill:#99d3d5;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path366" + d="m 503.3491,401.60367 h 451.96848 v 59.08661 H 503.3491 Z" /> + <g + id="g6297" + transform="matrix(0.45852804,0,0,-0.45852804,886.58597,465.27047)"> + <g + id="g5622" + transform="translate(54.915256,1.9067797)"> + <path + d="m 47.203,59.387 -0.367,6.429 h -3.672 l -0.379,-6.429" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5624" + inkscape:connector-curvature="0" /> + <path + d="m 47.203,30.613 -0.367,-6.429 h -3.672 l -0.379,6.429" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5626" + inkscape:connector-curvature="0" /> + <path + d="m 59.387,42.797 6.429,0.367 v 3.672 l -6.429,0.379" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5628" + inkscape:connector-curvature="0" /> + <path + d="m 30.613,42.797 -6.429,0.367 v 3.672 l 6.429,0.379" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5630" + inkscape:connector-curvature="0" /> + <path + d="m 56.73,53.613 4.29,4.809 -2.598,2.598 -4.817,-4.282" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5632" + inkscape:connector-curvature="0" /> + <path + d="m 36.387,33.27 -4.809,-4.29 -2.598,2.598 4.282,4.817" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5634" + inkscape:connector-curvature="0" /> + <path + d="m 53.613,33.27 4.809,-4.29 2.598,2.598 -4.282,4.817" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5636" + inkscape:connector-curvature="0" /> + <path + d="m 33.27,53.613 -4.29,4.809 2.598,2.598 4.817,-4.282" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5638" + inkscape:connector-curvature="0" /> + <path + d="m 52.543,57.449 2.121,6.078 -3.394,1.407 -2.809,-5.793" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5640" + inkscape:connector-curvature="0" /> + <path + d="m 41.531,30.863 -2.801,-5.797 -3.394,1.407 2.113,6.082" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5642" + inkscape:connector-curvature="0" /> + <path + d="m 57.449,37.457 6.078,-2.121 1.407,3.394 -5.793,2.809" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5644" + inkscape:connector-curvature="0" /> + <path + d="m 30.863,48.469 -5.797,2.801 1.407,3.394 6.082,-2.113" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5646" + inkscape:connector-curvature="0" /> + <path + d="m 59.137,48.469 5.797,2.801 -1.407,3.394 -6.082,-2.113" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5648" + inkscape:connector-curvature="0" /> + <path + d="m 32.551,37.457 -6.078,-2.121 -1.407,3.394 5.793,2.809" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5650" + inkscape:connector-curvature="0" /> + <path + d="m 48.469,30.863 2.801,-5.797 3.394,1.407 -2.113,6.082" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5652" + inkscape:connector-curvature="0" /> + <path + d="m 37.457,57.449 -2.121,6.078 3.394,1.407 2.809,-5.793" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5654" + inkscape:connector-curvature="0" /> + <path + d="m 45,62.449 c -9.602,0 -17.449,-7.847 -17.449,-17.449 0,-9.602 7.847,-17.449 17.449,-17.449 9.602,0 17.449,7.847 17.449,17.449 0,9.602 -7.847,17.449 -17.449,17.449 z m 0,-5.816 c 6.457,0 11.633,-5.176 11.633,-11.633 0,-6.457 -5.176,-11.633 -11.633,-11.633 -6.457,0 -11.633,5.176 -11.633,11.633 0,6.457 5.176,11.633 11.633,11.633 z m 0,-4.59 c -1.867,0 -3.66,-0.742 -4.98,-2.063 -1.321,-1.32 -2.063,-3.113 -2.063,-4.98 0,-1.867 0.742,-3.66 2.063,-4.98 1.32,-1.321 3.113,-2.063 4.98,-2.063 1.867,0 3.66,0.742 4.98,2.063 1.321,1.32 2.063,3.113 2.063,4.98 0,1.867 -0.742,3.66 -2.063,4.98 -1.32,1.321 -3.113,2.063 -4.98,2.063 z" + style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" + id="path5656" + inkscape:connector-curvature="0" /> + <g + id="g5658" + transform="matrix(1,0,0,-1,0,90)"> + <path + d="M 45,71.633 C 24.797,71.633 9.184,55.102 2.602,45 9.184,34.898 24.797,18.367 45,18.367 65.203,18.367 80.816,34.898 87.398,45 80.816,55.102 65.203,71.633 45,71.633 Z" + style="fill:none;stroke:#000000;stroke-width:4.28571415;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + id="path5660" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + <path + style="fill-rule:evenodd;stroke:#666666;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path368" + d="m 503.3491,401.60367 h 451.96848 v 59.08661 H 503.3491 Z" /> + <path + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" + id="path372" + d="m 516.27094,434.2318 q 1.35937,0 2.0625,0.6875 0.70312,0.67188 0.70312,1.82813 0,1.15625 -0.70312,1.82812 -0.70313,0.67188 -2.0625,0.67188 h -1.60938 v 3.15625 h -1.03125 v -8.17188 z m 0,4.125 q 0.84375,0 1.28125,-0.42187 0.4375,-0.4375 0.4375,-1.17188 0,-0.75 -0.4375,-1.20312 -0.4375,-0.45313 -1.28125,-0.45313 h -1.60938 v 3.25 z m 7.30566,-1.29687 q -1.46875,0 -1.51562,2.3125 v 3.03125 h -1.03125 v -6.23438 h 1.03125 v 1.20313 q 0.46875,-1.29688 1.65625,-1.29688 0.375,0 0.70312,0.10938 l -0.0469,1 q -0.39063,-0.125 -0.79688,-0.125 z m 4.78113,-1.03125 q 1.29688,0 2.09375,0.84375 0.8125,0.84375 0.8125,2.42187 0,1.5625 -0.8125,2.40625 -0.79687,0.84375 -2.09375,0.84375 -1.29687,0 -2.09375,-0.84375 -0.79687,-0.84375 -0.79687,-2.40625 0,-1.57812 0.79687,-2.42187 0.79688,-0.84375 2.09375,-0.84375 z m 1.85938,3.26562 q 0,-1.10937 -0.46875,-1.73437 -0.46875,-0.64063 -1.375,-0.64063 -0.89063,0 -1.375,0.64063 -0.48438,0.625 -0.48438,1.73437 0,1.10938 0.45313,1.75 0.45312,0.625 1.35937,0.625 0.90625,0 1.39063,-0.625 0.5,-0.64062 0.5,-1.75 z m 3.94897,-4.57812 q -0.3125,0 -0.48437,-0.17188 -0.17188,-0.17187 -0.17188,-0.46875 0,-0.29687 0.17188,-0.46875 0.17187,-0.17187 0.48437,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m -1.65625,9.98437 q 1.15625,0 1.15625,-1.42187 v -7.10938 h 1.01563 v 7.10938 q 0,1.78125 -1.15625,2.1875 -0.375,0.14062 -0.8125,0.14062 -0.8125,0 -1.75,-0.48437 l 0.0625,-0.90625 q 0.8125,0.48437 1.48437,0.48437 z m 7.21631,-2.98437 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 6.0202,-0.98437 q 1.10937,0 1.75,0.57812 0.65625,0.5625 0.85937,1.40625 l -1.04687,0.0937 q -0.17188,-0.54687 -0.54688,-0.84375 -0.375,-0.3125 -0.82812,-0.3125 -0.82813,0 -1.34375,0.625 -0.51563,0.60938 -0.51563,1.6875 0,1.07813 0.5,1.73438 0.5,0.64062 1.25,0.64062 0.75,0 1.10938,-0.34375 0.375,-0.34375 0.375,-0.98437 h 1.0625 q 0,1 -0.70313,1.625 -0.6875,0.60937 -1.8125,0.60937 -1.1875,0 -2.01562,-0.89062 -0.8125,-0.90625 -0.8125,-2.39063 0,-1.48437 0.8125,-2.35937 0.8125,-0.875 1.90625,-0.875 z m 8.05145,6.1875 q -1.125,0.53125 -2.04687,0.21875 -0.65625,-0.20313 -0.92188,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01563 v 1.71875 h 1.95312 v 0.78125 h -1.95312 v 3.8125 q 0,0.95312 0.89062,0.95312 0.48438,0 1.07813,-0.23437 z m 6.40216,-7.98438 2.75,5.53125 2.73438,-5.53125 h 1.45312 v 8.17188 h -1.03125 v -6.71875 l -2.8125,5.6875 h -0.6875 l -2.84375,-5.78125 v 6.8125 h -1.03125 v -8.17188 z m 13.67725,4.14063 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 4.60431,-2.42188 q 0.60937,-1.35937 2.09375,-1.35937 1.10937,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 10.89624,0.98438 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 3.88562,2.40625 q -0.78125,-0.39063 -0.78125,-1.17188 0,-0.39062 0.29687,-0.6875 0.3125,-0.3125 0.76563,-0.42187 -0.70313,-0.625 -0.70313,-1.64063 0,-1.01562 0.71875,-1.64062 0.71875,-0.625 1.70313,-0.625 1,0 1.6875,0.46875 0.0937,-0.6875 0.54687,-1.09375 0.46875,-0.42188 1.21875,-0.42188 l -0.0937,1.01563 q -1.14062,0 -1.1875,0.95312 0.45313,0.5625 0.45313,1.34375 0,1 -0.71875,1.65625 -0.71875,0.64063 -1.8125,0.64063 -0.73438,0 -1.3125,-0.3125 -0.25,0.0625 -0.46875,0.25 -0.20313,0.1875 -0.20313,0.51562 0,0.6875 1.14063,0.6875 h 2.42187 q 0.875,0 1.375,0.375 0.51563,0.35938 0.51563,1.03125 0,0.98438 -1,1.71875 -1,0.75 -2.51563,0.75 -1.51562,0 -2.39062,-0.57812 -0.875,-0.5625 -0.875,-1.42188 0,-0.54687 0.32812,-0.90625 0.34375,-0.34375 0.89063,-0.48437 z m -0.20313,1.35937 q 0,0.48438 0.53125,0.84375 0.54688,0.35938 1.64063,0.35938 1.10937,0 1.84375,-0.46875 0.73437,-0.46875 0.73437,-1.10938 0,-0.29687 -0.21875,-0.51562 -0.21875,-0.21875 -0.65625,-0.21875 h -2.5 q -0.67187,0.0312 -1.03125,0.3125 -0.34375,0.29687 -0.34375,0.79687 z m 3.82813,-5.28125 q 0,-0.67187 -0.40625,-1.09375 -0.40625,-0.42187 -1.10938,-0.42187 -0.70312,0 -1.10937,0.42187 -0.40625,0.42188 -0.40625,1.09375 0,0.67188 0.40625,1.10938 0.40625,0.4375 1.10937,0.4375 0.70313,0 1.10938,-0.4375 0.40625,-0.4375 0.40625,-1.10938 z m 5.78033,3.42188 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 4.94207,0.375 q 0.60938,-1.35937 2.09375,-1.35937 0.8125,0 1.35938,0.40625 0.54687,0.39062 0.78125,1.09375 0.59375,-1.5 2.17187,-1.5 1.125,0 1.73438,0.73437 0.60937,0.73438 0.60937,1.98438 v 3.65625 h -1.01562 v -3.65625 q 0,-0.89063 -0.42188,-1.34375 -0.42187,-0.45313 -1.21875,-0.45313 -0.78125,0 -1.21875,0.65625 -0.4375,0.64063 -0.4375,1.78125 v 3.01563 h -1.01562 v -3.65625 q 0,-0.89063 -0.42188,-1.34375 -0.42187,-0.45313 -1.20312,-0.45313 -0.78125,0 -1.26563,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89063 z m 13.61798,4.32813 q 1.29688,0 1.46875,-1.125 h 1.0625 q -0.14062,0.92187 -0.82812,1.4375 -0.6875,0.51562 -1.70313,0.51562 -1.25,0 -2.03125,-0.89062 -0.76562,-0.89063 -0.76562,-2.375 0,-1.48438 0.78125,-2.35938 0.78125,-0.89062 2.09375,-0.89062 1.3125,0 1.95312,1.01562 0.64063,1.01563 0.4375,2.46875 h -4.25 q 0,0.96875 0.46875,1.59375 0.46875,0.60938 1.3125,0.60938 z m 0.76563,-4.70313 q -0.3125,-0.15625 -0.73438,-0.15625 -0.79687,0 -1.26562,0.54688 -0.45313,0.53125 -0.53125,1.32812 h 3.3125 q 0,-1.29687 -0.78125,-1.71875 z m 4.94208,0.375 q 0.60937,-1.35937 2.09375,-1.35937 1.10937,0 1.71875,0.73437 0.625,0.73438 0.625,1.98438 v 3.65625 h -1.01563 v -3.65625 q 0,-0.89063 -0.42187,-1.34375 -0.42188,-0.45313 -1.20313,-0.45313 -0.78125,0 -1.26562,0.64063 -0.46875,0.625 -0.5,1.75 v 3.0625 h -1.03125 v -6.21875 h 0.89062 z m 10.30249,4.82813 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path374" + d="m 913.15533,430.87595 h 39.37012 v 25.09842 h -39.37012 z" /> + <g + id="g381" + transform="matrix(0.49212598,0,0,0.49212598,913.15535,430.87594)"> + <clipPath + id="g249fea5886_0_69.6"> + <path + style="clip-rule:evenodd" + inkscape:connector-curvature="0" + id="path376" + d="M 0,0 H 80 V 51 H 0 Z" /> + </clipPath> + </g> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path383" + d="M 523.0853,184.979 V 374.5538 H 731.55771" /> + <path + style="fill-rule:evenodd;stroke:#595959;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round" + inkscape:connector-curvature="0" + id="path385" + d="M 523.0853,184.979 V 374.5538 H 731.55771" /> + <path + style="fill:#000000;fill-opacity:0;fill-rule:evenodd" + inkscape:connector-curvature="0" + id="path387" + d="m 642.895,251.75066 v 77.79527 h 113.76379" /> + <text + id="text4677" + y="222.32877" + x="51.369862" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.75px;line-height:125%;font-family:'Bebas Neue';-inkscape-font-specification:'Bebas Neue';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + y="234.49429" + x="51.369862" + id="tspan4675" + sodipodi:role="line" /></text> + <g + id="g4795"> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 21.828125,213.29877 c -1.5,1.53125 -2.333333,3.18229 -2.5,4.95312 -0.15625,1.78125 0.364583,3.42709 1.5625,4.9375 l -0.71875,0.51563 c -0.697917,-0.77083 -1.197917,-1.625 -1.5,-2.5625 -0.302083,-0.9375 -0.40625,-1.90625 -0.3125,-2.90625 0.09375,-1 0.380208,-1.96354 0.859375,-2.89063 0.479167,-0.9375 1.140625,-1.79687 1.984375,-2.57812 z" + id="path4782" /> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 27.311859,220.81439 c -0.416667,1.04167 -1.119792,1.5625 -2.109375,1.5625 -0.90625,0 -1.619792,-0.36979 -2.140625,-1.10937 -0.541667,-0.77083 -0.755208,-1.77604 -0.640625,-3.01563 0.114583,-1.34375 0.5625,-2.41666 1.34375,-3.21875 0.697917,-0.73958 1.541667,-1.10937 2.53125,-1.10937 1.166667,0 1.989583,0.54687 2.46875,1.64062 l -0.921875,0.34375 c -0.458333,-0.70833 -1.020833,-1.0625 -1.6875,-1.0625 -0.677083,0 -1.276042,0.3073 -1.796875,0.92188 -0.53125,0.61458 -0.848958,1.44271 -0.953125,2.48437 -0.09375,0.92709 0.03646,1.69271 0.390625,2.29688 0.34375,0.59375 0.864583,0.89062 1.5625,0.89062 0.520833,0 0.973958,-0.1927 1.359375,-0.57812 0.385417,-0.39583 0.630208,-1 0.734375,-1.8125 v -0.0781 -0.0156 l -1.84375,-0.0781 0.0625,-0.6875 h 2.75 l -0.359375,4.04688 h -0.765625 z" + id="path4780" /> + <path + style="fill:#000000;fill-rule:nonzero" + d="m 39.10225,212.76752 c 1.395833,1.57292 1.989583,3.40104 1.78125,5.48437 -0.09375,0.98959 -0.380209,1.95313 -0.859375,2.89063 -0.46875,0.9375 -1.119792,1.79167 -1.953125,2.5625 l -0.625,-0.51563 c 1.489583,-1.53125 2.322916,-3.17708 2.5,-4.9375 0.15625,-1.79166 -0.364584,-3.4427 -1.5625,-4.95312 z" + id="path264" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4766" + d="m 34.273495,214.29876 -0.17187,1.71875 h -0.89063 l -0.0937,0.78125 h 0.92188 l -0.35938,3.82813 c -0.0625,0.59375 0.0469,1.03646 0.32813,1.32812 0.28124,0.28125 0.62499,0.42188 1.03125,0.42188 0.41666,0 0.85416,-0.10938 1.3125,-0.32813 l -0.0625,-0.71875 c -0.38542,0.15625 -0.71355,0.23438 -0.98438,0.23438 -0.27083,0 -0.46875,-0.0781 -0.59375,-0.23438 -0.125,-0.15625 -0.16667,-0.39583 -0.125,-0.71875 l 0.35938,-3.8125 h 1.75 l 0.0781,-0.78125 h -1.75 l 0.17188,-1.71875 z" + style="fill:#000000;fill-rule:nonzero" /> + <g + transform="translate(-104.20502,-7.34381)" + id="g4774"> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 135.50977,220.75195 c -0.1875,0 -0.3366,0.0573 -0.45118,0.17188 -0.11462,0.11458 -0.18427,0.27083 -0.20507,0.46875 -0.0104,0.19791 0.028,0.35416 0.11132,0.46875 0.0937,0.11458 0.23243,0.17187 0.41993,0.17187 0.19792,0 0.35417,-0.0573 0.46875,-0.17187 0.12503,-0.11459 0.19795,-0.27084 0.21875,-0.46875 0.0208,-0.19792 -0.0208,-0.35417 -0.125,-0.46875 -0.0937,-0.11459 -0.23958,-0.17188 -0.4375,-0.17188 z" + id="path4744" /> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 134.79102,223.48633 -0.57618,6.23437 h 0.91993 l 0.59375,-6.23437 z" + id="path4728" /> + </g> + </g> + <g + id="g4795-5" + transform="translate(0,103.48221)"> + <path + style="fill:#000000;fill-rule:nonzero" + d="m 21.828125,213.29877 c -1.5,1.53125 -2.333333,3.18229 -2.5,4.95312 -0.15625,1.78125 0.364583,3.42709 1.5625,4.9375 l -0.71875,0.51563 c -0.697917,-0.77083 -1.197917,-1.625 -1.5,-2.5625 -0.302083,-0.9375 -0.40625,-1.90625 -0.3125,-2.90625 0.09375,-1 0.380208,-1.96354 0.859375,-2.89063 0.479167,-0.9375 1.140625,-1.79687 1.984375,-2.57812 z" + id="path4782-3" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000;fill-rule:nonzero" + d="m 27.311859,220.81439 c -0.416667,1.04167 -1.119792,1.5625 -2.109375,1.5625 -0.90625,0 -1.619792,-0.36979 -2.140625,-1.10937 -0.541667,-0.77083 -0.755208,-1.77604 -0.640625,-3.01563 0.114583,-1.34375 0.5625,-2.41666 1.34375,-3.21875 0.697917,-0.73958 1.541667,-1.10937 2.53125,-1.10937 1.166667,0 1.989583,0.54687 2.46875,1.64062 l -0.921875,0.34375 c -0.458333,-0.70833 -1.020833,-1.0625 -1.6875,-1.0625 -0.677083,0 -1.276042,0.3073 -1.796875,0.92188 -0.53125,0.61458 -0.848958,1.44271 -0.953125,2.48437 -0.09375,0.92709 0.03646,1.69271 0.390625,2.29688 0.34375,0.59375 0.864583,0.89062 1.5625,0.89062 0.520833,0 0.973958,-0.1927 1.359375,-0.57812 0.385417,-0.39583 0.630208,-1 0.734375,-1.8125 v -0.0781 -0.0156 l -1.84375,-0.0781 0.0625,-0.6875 h 2.75 l -0.359375,4.04688 h -0.765625 z" + id="path4780-7" + inkscape:connector-curvature="0" /> + <path + style="fill:#000000;fill-rule:nonzero" + d="m 39.10225,212.76752 c 1.395833,1.57292 1.989583,3.40104 1.78125,5.48437 -0.09375,0.98959 -0.380209,1.95313 -0.859375,2.89063 -0.46875,0.9375 -1.119792,1.79167 -1.953125,2.5625 l -0.625,-0.51563 c 1.489583,-1.53125 2.322916,-3.17708 2.5,-4.9375 0.15625,-1.79166 -0.364584,-3.4427 -1.5625,-4.95312 z" + id="path264-6" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path4766-8" + d="m 34.273495,214.29876 -0.17187,1.71875 h -0.89063 l -0.0937,0.78125 h 0.92188 l -0.35938,3.82813 c -0.0625,0.59375 0.0469,1.03646 0.32813,1.32812 0.28124,0.28125 0.62499,0.42188 1.03125,0.42188 0.41666,0 0.85416,-0.10938 1.3125,-0.32813 l -0.0625,-0.71875 c -0.38542,0.15625 -0.71355,0.23438 -0.98438,0.23438 -0.27083,0 -0.46875,-0.0781 -0.59375,-0.23438 -0.125,-0.15625 -0.16667,-0.39583 -0.125,-0.71875 l 0.35938,-3.8125 h 1.75 l 0.0781,-0.78125 h -1.75 l 0.17188,-1.71875 z" + style="fill:#000000;fill-rule:nonzero" /> + <g + transform="translate(-104.20502,-7.34381)" + id="g4774-1"> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 135.50977,220.75195 c -0.1875,0 -0.3366,0.0573 -0.45118,0.17188 -0.11462,0.11458 -0.18427,0.27083 -0.20507,0.46875 -0.0104,0.19791 0.028,0.35416 0.11132,0.46875 0.0937,0.11458 0.23243,0.17187 0.41993,0.17187 0.19792,0 0.35417,-0.0573 0.46875,-0.17187 0.12503,-0.11459 0.19795,-0.27084 0.21875,-0.46875 0.0208,-0.19792 -0.0208,-0.35417 -0.125,-0.46875 -0.0937,-0.11459 -0.23958,-0.17188 -0.4375,-0.17188 z" + id="path4744-3" /> + <path + inkscape:connector-curvature="0" + style="fill:#000000;fill-rule:nonzero" + d="m 134.79102,223.48633 -0.57618,6.23437 h 0.91993 l 0.59375,-6.23437 z" + id="path4728-6" /> + </g> + </g> + <g + transform="matrix(0.19373825,0,0,-0.19373825,849.05126,523.9531)" + id="g46"> + <g + transform="translate(75.4,-35.24)" + id="g48"> + <g + id="g50"> + <g + clip-path="url(#clipPath56)" + id="g52"> + <g + id="g58"> + <path + inkscape:connector-curvature="0" + id="path60-6" + style="fill:#f4d30b;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 110.418,157.573 C 98.254,169.565 82.215,176.123 65.254,176.123 29.309,176.123 0,146.33 0,109.795 0,98.272 2.949,86.842 8.664,76.819 l 1.934,-3.371 7.468,5.902 -1.382,2.527 c -4.704,8.434 -7.192,18.082 -7.192,27.825 0,31.195 24.981,56.586 55.672,56.586 14.285,0 27.836,-5.528 38.25,-15.551 l 2.121,-1.969 7.742,6.184 z" /> + <path + inkscape:connector-curvature="0" + id="path62-3" + style="fill:#0084ab;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 121.941,142.678 -1.937,3.375 -7.742,-6.183 1.383,-2.532 c 4.699,-8.429 7.097,-17.988 7.097,-27.73 0,-31.195 -24.976,-56.582 -55.672,-56.582 -14.285,0 -27.836,5.527 -38.156,15.457 l -2.121,1.965 -7.465,-5.993 2.766,-2.718 C 32.352,49.838 48.391,43.28 65.254,43.28 c 35.949,0 65.258,29.793 65.258,66.328 0,11.711 -2.95,23.14 -8.571,33.07 z" /> + <path + inkscape:connector-curvature="0" + id="path64-9" + style="fill:#99cc33;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 133.738,28.104 H 80.004 V 129.002 L 51.43,105.862 V -0.002 h 105.074 z" /> + <path + inkscape:connector-curvature="0" + id="path66-9" + style="fill:#99cc33;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 232.715,28.104 H 196.531 L 189.328,-0.002 H 164.59 l 35.351,129 h 29.34 l 35.348,-129 h -24.738 l -7.176,28.106 m -31.176,19.332 h 26.145 L 214.641,98.76 201.539,47.436" /> + <path + inkscape:connector-curvature="0" + id="path68" + style="fill:#99cc33;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 256.895,128.998 h 24.738 l 25.312,-95.214 25.25,95.214 h 24.739 l -35.352,-129 h -29.34 l -35.347,129" /> + <path + inkscape:connector-curvature="0" + id="path70" + style="fill:#99cc33;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 417.297,28.104 h -36.16 l -7.199,-28.106 h -24.739 l 35.348,129 h 29.34 l 35.347,-129 h -24.738 l -7.199,28.106 m -31.152,19.332 h 26.144 L 399.25,98.76 386.145,47.436" /> + </g> + </g> + </g> + </g> + </g> + <path + id="path337" + d="m 211.75317,144.52227 q -2.25,2.28125 -2.25,4.95312 0,2.65625 2.25,4.9375 l -0.75,0.51563 q -1.26563,-1.15625 -1.92188,-2.5625 -0.64062,-1.40625 -0.64062,-2.90625 0,-1.5 0.64062,-2.89063 0.65625,-1.40625 1.92188,-2.57812 z m 6.85417,7.53125 q -0.54687,1.54687 -2.125,1.54687 -1.57812,0 -2.59375,-1.14062 -1,-1.14063 -1,-3.07813 0,-1.9375 1.09375,-3.07812 1.10938,-1.15625 2.75,-1.15625 0.95313,0 1.67188,0.39062 0.73437,0.39063 1.25,1.25 l -0.98438,0.34375 q -0.84375,-1.0625 -1.98437,-1.0625 -1.125,0 -1.92188,0.9375 -0.78125,0.92188 -0.78125,2.39063 0,1.46875 0.67188,2.375 0.6875,0.89062 1.82812,0.89062 0.9375,0 1.5,-0.625 0.57813,-0.625 0.57813,-1.84375 v -0.0156 l -2.04688,-0.0781 v -0.6875 h 3.04688 v 4.04688 h -0.82813 z m 3.59661,-4.82813 h 1.03125 v 6.23438 h -1.03125 z m 0.51562,-1.45312 q -0.3125,0 -0.5,-0.17188 -0.17187,-0.17187 -0.17187,-0.46875 0,-0.29687 0.17187,-0.46875 0.1875,-0.17187 0.5,-0.17187 0.3125,0 0.5,0.17187 0.1875,0.17188 0.1875,0.46875 0,0.29688 -0.1875,0.46875 -0.1875,0.17188 -0.5,0.17188 z m 6.65697,7.5 q -1.125,0.53125 -2.04688,0.21875 -0.65625,-0.20313 -0.92187,-0.85938 -0.15625,-0.32812 -0.15625,-0.78125 v -3.82812 h -1 v -0.78125 h 1 v -1.71875 h 1.01562 v 1.71875 h 1.95313 v 0.78125 h -1.95313 v 3.8125 q 0,0.95312 0.89063,0.95312 0.48437,0 1.07812,-0.23437 z m 1.76135,-8.67188 h 1.03125 v 8.85938 h -1.03125 z m 7.57561,4.82813 q 0,-0.84375 -0.35938,-1.20313 -0.34375,-0.375 -1.01562,-0.375 -0.65625,0 -1.07813,0.28125 -0.40625,0.26563 -0.40625,0.82813 h -1.125 q 0,-1.42188 1.53125,-1.76563 0.46875,-0.10937 1.01563,-0.10937 1.15625,0 1.79687,0.59375 0.65625,0.57812 0.65625,1.78125 v 4 h -0.875 l -0.10937,-1.04688 q -0.57813,1.1875 -2.0625,1.1875 -1,0 -1.60938,-0.54687 -0.60937,-0.5625 -0.60937,-1.39063 0,-0.84375 0.67187,-1.3125 0.67188,-0.46875 1.67188,-0.46875 1,0 1.90625,0.34375 z m 0,1.4375 q -0.92188,-0.25 -1.60938,-0.25 -0.6875,0 -1.125,0.25 -0.42187,0.23437 -0.42187,0.78125 0,1.15625 1.32812,1.15625 0.75,0 1.28125,-0.53125 0.54688,-0.54688 0.54688,-1.40625 z m 4.65123,-2.70313 q 0.625,-1.07812 1.8125,-1.07812 1.20312,0 1.98437,0.89062 0.79688,0.89063 0.79688,2.35938 0,1.46875 -0.8125,2.375 -0.79688,0.89062 -1.95313,0.89062 -0.625,0 -1.125,-0.3125 -0.5,-0.3125 -0.78125,-0.92187 l -0.23437,1.09375 h -0.71875 v -8.85938 h 1.03125 z m 1.75,-0.15625 q -0.73438,0 -1.23438,0.46875 -0.5,0.46875 -0.51562,1.3125 v 1.01563 q 0,0.85937 0.5,1.375 0.51562,0.51562 1.25,0.51562 0.73437,0 1.26562,-0.64062 0.53125,-0.64063 0.53125,-1.70313 0,-1.07812 -0.53125,-1.70312 -0.51562,-0.64063 -1.26562,-0.64063 z m 4.04922,6.40625 q 2.25,-2.28125 2.25,-4.9375 0,-2.67187 -2.25,-4.95312 l 0.75,-0.53125 q 1.26563,1.17187 1.90625,2.57812 0.65625,1.39063 0.65625,2.89063 0,1.5 -0.65625,2.90625 -0.64062,1.40625 -1.90625,2.5625 z" + style="fill:#000000;fill-rule:nonzero" + inkscape:connector-curvature="0" /> + <g + sketch:type="MSPage" + id="g5834" + style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1" + transform="matrix(0.07466506,0,0,0.07466506,239.67628,311.59636)"> + <g + sketch:type="MSArtboardGroup" + id="logo-square"> + <g + transform="translate(2,19)" + sketch:type="MSLayerGroup" + id="logo-no-bg"> + <g + sketch:type="MSShapeGroup" + id="Page-1"> + <g + id="gitlab_logo"> + <g + transform="matrix(1,0,0,-1,0,457.3333)" + id="g10"> + <g + id="g16"> + <g + id="g18-Clipped"> + <g + id="g18"> + <g + id="g5824"> + <g + transform="translate(0.666658,0.666658)" + id="Group"> + <g + transform="translate(0.532,0.774933)" + id="g44" + style="fill:#fc6d26"> + <path + id="path46-9" + d="m 491.99999,194.66666 -27.55867,84.81467 -54.61733,168.09733 c -2.80933,8.64799 -15.04533,8.64799 -17.856,0 L 337.34933,279.48133 H 155.98266 l -54.62,168.09733 c -2.809329,8.64799 -15.045329,8.64799 -17.855995,0 L 28.889333,279.48133 1.332,194.66666 c -2.5146666,-7.736 0.24,-16.21066 6.8199998,-20.992 L 246.66533,0.38533332 485.17999,173.67466 c 6.58,4.78134 9.33333,13.256 6.82,20.992" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(156.19786,1.160267)" + id="g48-2" + style="fill:#e24329"> + <path + id="path50-2" + d="M 90.999998,0 V 0 L 181.68399,279.09599 H 0.31599997 Z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(28.531199,1.1608)" + id="g56" + style="fill:#fc6d26"> + <path + id="path58-8" + d="m 218.66666,0 -90.684,279.09466 H 0.89066664 Z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(0.088533,0.255867)" + id="g64" + style="fill:#fca326"> + <path + id="path66-97" + d="m 29.333333,279.99999 v 0 L 1.7746666,195.18533 c -2.51333325,-7.736 0.24,-16.21067 6.8213332,-20.99067 L 247.10933,0.90533331 Z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(29.421866,280.25559)" + id="g72" + style="fill:#e24329"> + <path + id="path74-3" + d="M 0,0 H 127.092 L 72.473331,168.09733 c -2.810666,8.64933 -15.046666,8.64933 -17.855999,0 z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(247.19786,1.1608)" + id="g76" + style="fill:#fc6d26"> + <path + id="path78-6" + d="M 0,0 90.683998,279.09466 H 217.77599 Z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(246.30706,0.255867)" + id="g80" + style="fill:#fca326"> + <path + id="path82-1" + d="m 218.66666,279.99999 v 0 l 27.55867,-84.81466 c 2.51333,-7.736 -0.24,-16.21067 -6.82134,-20.99067 L 0.89066664,0.90533331 Z" + inkscape:connector-curvature="0" /> + </g> + <g + transform="translate(336.97372,280.25559)" + id="g84" + style="fill:#e24329"> + <path + id="path86-2" + d="M 128,0 H 0.90799998 L 55.526665,168.09733 c 2.810667,8.64933 15.046667,8.64933 17.856,0 z" + inkscape:connector-curvature="0" /> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + <path + sodipodi:nodetypes="cc" + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path356-6" + d="m 151.65355,99.72685 h 33.30708" /> + <path + style="fill:#30bc3a;fill-rule:evenodd;stroke:#30bc3a;stroke-width:3;stroke-linecap:butt;stroke-miterlimit:10;font-variation-settings:normal;opacity:1;vector-effect:none;fill-opacity:1;stroke-linejoin:miter;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + inkscape:connector-curvature="0" + id="path358-7" + d="m 184.96063,103.03032 9.07619,-3.30347 -9.07619,-3.30346 z" /> + <g + transform="matrix(0.07466506,0,0,0.07466506,417.24505,489.20075)" + style="fill:none;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:square;stroke-miterlimit:10" + id="g5834-3" + sketch:type="MSPage"> + <g + id="logo-square-6" + sketch:type="MSArtboardGroup"> + <g + id="logo-no-bg-7" + sketch:type="MSLayerGroup" + transform="translate(2,19)"> + <g + id="Page-1-5" + sketch:type="MSShapeGroup"> + <g + id="gitlab_logo-3"> + <g + id="g10-5" + transform="matrix(1,0,0,-1,0,457.3333)"> + <g + id="g16-6"> + <g + id="g18-Clipped-2"> + <g + id="g18-9"> + <g + id="g5824-1"> + <g + id="Group-2" + transform="translate(0.666658,0.666658)"> + <g + style="fill:#fc6d26" + id="g44-7" + transform="translate(0.532,0.774933)"> + <path + inkscape:connector-curvature="0" + d="m 491.99999,194.66666 -27.55867,84.81467 -54.61733,168.09733 c -2.80933,8.64799 -15.04533,8.64799 -17.856,0 L 337.34933,279.48133 H 155.98266 l -54.62,168.09733 c -2.809329,8.64799 -15.045329,8.64799 -17.855995,0 L 28.889333,279.48133 1.332,194.66666 c -2.5146666,-7.736 0.24,-16.21066 6.8199998,-20.992 L 246.66533,0.38533332 485.17999,173.67466 c 6.58,4.78134 9.33333,13.256 6.82,20.992" + id="path46-9-0" /> + </g> + <g + style="fill:#e24329" + id="g48-2-9" + transform="translate(156.19786,1.160267)"> + <path + inkscape:connector-curvature="0" + d="M 90.999998,0 V 0 L 181.68399,279.09599 H 0.31599997 Z" + id="path50-2-3" /> + </g> + <g + style="fill:#fc6d26" + id="g56-6" + transform="translate(28.531199,1.1608)"> + <path + inkscape:connector-curvature="0" + d="m 218.66666,0 -90.684,279.09466 H 0.89066664 Z" + id="path58-8-0" /> + </g> + <g + style="fill:#fca326" + id="g64-6" + transform="translate(0.088533,0.255867)"> + <path + inkscape:connector-curvature="0" + d="m 29.333333,279.99999 v 0 L 1.7746666,195.18533 c -2.51333325,-7.736 0.24,-16.21067 6.8213332,-20.99067 L 247.10933,0.90533331 Z" + id="path66-97-2" /> + </g> + <g + style="fill:#e24329" + id="g72-6" + transform="translate(29.421866,280.25559)"> + <path + inkscape:connector-curvature="0" + d="M 0,0 H 127.092 L 72.473331,168.09733 c -2.810666,8.64933 -15.046666,8.64933 -17.855999,0 z" + id="path74-3-1" /> + </g> + <g + style="fill:#fc6d26" + id="g76-8" + transform="translate(247.19786,1.1608)"> + <path + inkscape:connector-curvature="0" + d="M 0,0 90.683998,279.09466 H 217.77599 Z" + id="path78-6-7" /> + </g> + <g + style="fill:#fca326" + id="g80-9" + transform="translate(246.30706,0.255867)"> + <path + inkscape:connector-curvature="0" + d="m 218.66666,279.99999 v 0 l 27.55867,-84.81466 c 2.51333,-7.736 -0.24,-16.21067 -6.82134,-20.99067 L 0.89066664,0.90533331 Z" + id="path82-1-2" /> + </g> + <g + style="fill:#e24329" + id="g84-0" + transform="translate(336.97372,280.25559)"> + <path + inkscape:connector-curvature="0" + d="M 128,0 H 0.90799998 L 55.526665,168.09733 c 2.810667,8.64933 15.046667,8.64933 17.856,0 z" + id="path86-2-2" /> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + </g> + <text + id="text1252" + y="500.62265" + x="16.844608" + style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none" + xml:space="preserve"><tspan + style="font-weight:bold" + y="500.62265" + x="16.844608" + id="tspan1250" + sodipodi:role="line">GitLab CI</tspan></text> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-linecap:square;stroke-miterlimit:10" + x="513.20081" + y="500.62268" + id="text1252-2"><tspan + sodipodi:role="line" + id="tspan1250-2" + x="513.20081" + y="500.62268" + style="font-weight:bold">LAVA</tspan></text> + <text + id="text1252-2-8" + y="425.965" + x="513.20081" + style="font-style:normal;font-weight:normal;font-size:13.3333px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-linecap:square;stroke-miterlimit:10" + xml:space="preserve"><tspan + style="font-weight:bold" + y="425.965" + x="513.20081" + id="tspan1250-2-9" + sodipodi:role="line">Phabricator</tspan></text> + </g> +</svg> diff --git a/static/media/apertis_logo_blue.png b/static/media/apertis_logo_blue.png new file mode 100644 index 0000000000000000000000000000000000000000..792f04d9b2d69d621137229097ea08f19b3a0a7d Binary files /dev/null and b/static/media/apertis_logo_blue.png differ diff --git a/static/media/continue-arrow.png b/static/media/continue-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..5e3d92e9361ef8b999820e78bc1924f3cdae72fa Binary files /dev/null and b/static/media/continue-arrow.png differ diff --git a/static/media/fig-1.png b/static/media/fig-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bee89f4f95c03bdbea373960eb0800c4be70e2e5 Binary files /dev/null and b/static/media/fig-1.png differ diff --git a/static/media/fig-10.png b/static/media/fig-10.png new file mode 100644 index 0000000000000000000000000000000000000000..ed5e2e207e84242ac13637cbc95c51697d671802 Binary files /dev/null and b/static/media/fig-10.png differ diff --git a/static/media/fig-11.png b/static/media/fig-11.png new file mode 100644 index 0000000000000000000000000000000000000000..85d89683a23a135b53cef28276400b40b9945d2b Binary files /dev/null and b/static/media/fig-11.png differ diff --git a/static/media/fig-12.png b/static/media/fig-12.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a4239bee7d70fafc5af1aecc3c72e6a38a5362 Binary files /dev/null and b/static/media/fig-12.png differ diff --git a/static/media/fig-13.png b/static/media/fig-13.png new file mode 100644 index 0000000000000000000000000000000000000000..da520eb454b623fcd96ce458b8fc4214103a5a21 Binary files /dev/null and b/static/media/fig-13.png differ diff --git a/static/media/fig-14.png b/static/media/fig-14.png new file mode 100644 index 0000000000000000000000000000000000000000..3362c5b55f88e9421d5dd50b7b877f94db529918 Binary files /dev/null and b/static/media/fig-14.png differ diff --git a/static/media/fig-15.png b/static/media/fig-15.png new file mode 100644 index 0000000000000000000000000000000000000000..b9824398991386fc4ce8e78b5f99167a4994e4e3 Binary files /dev/null and b/static/media/fig-15.png differ diff --git a/static/media/fig-16.png b/static/media/fig-16.png new file mode 100644 index 0000000000000000000000000000000000000000..09a5cd095ef3924685200279022c389269f00a2f Binary files /dev/null and b/static/media/fig-16.png differ diff --git a/static/media/fig-17.png b/static/media/fig-17.png new file mode 100644 index 0000000000000000000000000000000000000000..aa567ee898bd16beb1b5fbb3f27004ffa6660948 Binary files /dev/null and b/static/media/fig-17.png differ diff --git a/static/media/fig-18.png b/static/media/fig-18.png new file mode 100644 index 0000000000000000000000000000000000000000..45454c86cf2b85e35991d61df7e70bd5e585edaa Binary files /dev/null and b/static/media/fig-18.png differ diff --git a/static/media/fig-19.png b/static/media/fig-19.png new file mode 100644 index 0000000000000000000000000000000000000000..c4d93db503c6437fa9e6684003a724cd0b0f3380 Binary files /dev/null and b/static/media/fig-19.png differ diff --git a/static/media/fig-2.png b/static/media/fig-2.png new file mode 100644 index 0000000000000000000000000000000000000000..62fda83929d2f11e8afea5f9b60bb5223f91c0bd Binary files /dev/null and b/static/media/fig-2.png differ diff --git a/static/media/fig-3.png b/static/media/fig-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7e021d18aaa2dfe1c398e2c4c45ea30cd2061e76 Binary files /dev/null and b/static/media/fig-3.png differ diff --git a/static/media/fig-4.png b/static/media/fig-4.png new file mode 100644 index 0000000000000000000000000000000000000000..eccc927c13726083cc5745c10916b089777acc8e Binary files /dev/null and b/static/media/fig-4.png differ diff --git a/static/media/fig-5.png b/static/media/fig-5.png new file mode 100644 index 0000000000000000000000000000000000000000..c5beb56aa3316b07d999e9e55abdf361030768f6 Binary files /dev/null and b/static/media/fig-5.png differ diff --git a/static/media/fig-6.png b/static/media/fig-6.png new file mode 100644 index 0000000000000000000000000000000000000000..10b216840b48d125d116bc8a7f93de302b7a7de0 Binary files /dev/null and b/static/media/fig-6.png differ diff --git a/static/media/fig-7.png b/static/media/fig-7.png new file mode 100644 index 0000000000000000000000000000000000000000..d75c5af774f2449fc960d08fee16cb905cd9ca39 Binary files /dev/null and b/static/media/fig-7.png differ diff --git a/static/media/fig-8.png b/static/media/fig-8.png new file mode 100644 index 0000000000000000000000000000000000000000..0824f040c750f1f15d4b536ea306a3d44fabb531 Binary files /dev/null and b/static/media/fig-8.png differ diff --git a/static/media/fig-9.png b/static/media/fig-9.png new file mode 100644 index 0000000000000000000000000000000000000000..d9dfcfcd2b0f04bb7e2295ba0bfd55814b26bf2c Binary files /dev/null and b/static/media/fig-9.png differ diff --git a/static/media/image10.png b/static/media/image10.png new file mode 100644 index 0000000000000000000000000000000000000000..0ded2d35ede885f9ba2d33be56f45dc6454e5d71 Binary files /dev/null and b/static/media/image10.png differ diff --git a/static/media/image11.png b/static/media/image11.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9dcafa341183e2e6b86de4bb4e08e6d89a6c81 Binary files /dev/null and b/static/media/image11.png differ diff --git a/static/media/image16.png b/static/media/image16.png new file mode 100644 index 0000000000000000000000000000000000000000..22621cc92b221be529c3cdb288eff6922539c47a Binary files /dev/null and b/static/media/image16.png differ diff --git a/static/media/image17.png b/static/media/image17.png new file mode 100644 index 0000000000000000000000000000000000000000..e1baa17c0f98106463848cb5452b5600cdd23617 Binary files /dev/null and b/static/media/image17.png differ diff --git a/static/media/image18.png b/static/media/image18.png new file mode 100644 index 0000000000000000000000000000000000000000..04cc6f1434a2d4657d3bba00698d53242fe07679 Binary files /dev/null and b/static/media/image18.png differ diff --git a/static/media/image19.png b/static/media/image19.png new file mode 100644 index 0000000000000000000000000000000000000000..11b2d6602f7a5966d6e452a35f95c8c67e7c298e Binary files /dev/null and b/static/media/image19.png differ diff --git a/static/media/image2.png b/static/media/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..294b0da9b1503537b2565f087e406fc304d263d0 Binary files /dev/null and b/static/media/image2.png differ diff --git a/static/media/image20.png b/static/media/image20.png new file mode 100644 index 0000000000000000000000000000000000000000..03f0422dd049191467d0ae4a0258b53d4de21c5d Binary files /dev/null and b/static/media/image20.png differ diff --git a/static/media/image21.png b/static/media/image21.png new file mode 100644 index 0000000000000000000000000000000000000000..55b17f0842a8e0e7a9fe4c4ef4ba5ee9803ab4c0 Binary files /dev/null and b/static/media/image21.png differ diff --git a/static/media/image22.png b/static/media/image22.png new file mode 100644 index 0000000000000000000000000000000000000000..519eac5418655fa779378daea330fed1b26fe94c Binary files /dev/null and b/static/media/image22.png differ diff --git a/static/media/image23.png b/static/media/image23.png new file mode 100644 index 0000000000000000000000000000000000000000..eecf1d5d8c22b695a30c79208d3653d86f27a9a0 Binary files /dev/null and b/static/media/image23.png differ diff --git a/static/media/image24.png b/static/media/image24.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9da321da1e2e9d1f02c5fa691599b81692a031 Binary files /dev/null and b/static/media/image24.png differ diff --git a/static/media/image25.png b/static/media/image25.png new file mode 100644 index 0000000000000000000000000000000000000000..3377de711060fe37178a1160ada771b4e37910a7 Binary files /dev/null and b/static/media/image25.png differ diff --git a/static/media/image26.emf b/static/media/image26.emf new file mode 100644 index 0000000000000000000000000000000000000000..3d00dadbd953b3d2cf1f96e858269621ea03dfad Binary files /dev/null and b/static/media/image26.emf differ diff --git a/static/media/image27.png b/static/media/image27.png new file mode 100644 index 0000000000000000000000000000000000000000..963e40b2b9bed1c328d4d3472de7737d8748262b Binary files /dev/null and b/static/media/image27.png differ diff --git a/static/media/image28.png b/static/media/image28.png new file mode 100644 index 0000000000000000000000000000000000000000..bc9cda37e3432a91287806ebb4d44339b89ba24c Binary files /dev/null and b/static/media/image28.png differ diff --git a/static/media/image29.png b/static/media/image29.png new file mode 100644 index 0000000000000000000000000000000000000000..d02f03e7f60c3ce1381a18e969330662ae77dcfd Binary files /dev/null and b/static/media/image29.png differ diff --git a/static/media/image3.png b/static/media/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..5975b8492ca6aeb3e3b5a91c1b0c3214648fcbf1 Binary files /dev/null and b/static/media/image3.png differ diff --git a/static/media/image30.png b/static/media/image30.png new file mode 100644 index 0000000000000000000000000000000000000000..94b9e335440f9d55845884cf9246377962386603 Binary files /dev/null and b/static/media/image30.png differ diff --git a/static/media/image31.png b/static/media/image31.png new file mode 100644 index 0000000000000000000000000000000000000000..904e3c1df2c3d066fdcb5701018a5124efcbcbb4 Binary files /dev/null and b/static/media/image31.png differ diff --git a/static/media/image32.png b/static/media/image32.png new file mode 100644 index 0000000000000000000000000000000000000000..8d58c58e951d8757597a12f54b8cbead69dc3cb7 Binary files /dev/null and b/static/media/image32.png differ diff --git a/static/media/image33.png b/static/media/image33.png new file mode 100644 index 0000000000000000000000000000000000000000..302fcb3a4c984e9beb73644f9969d71064915012 Binary files /dev/null and b/static/media/image33.png differ diff --git a/static/media/image34.png b/static/media/image34.png new file mode 100644 index 0000000000000000000000000000000000000000..37587e70e967f7c2a62fdd9f266c854b4d561a11 Binary files /dev/null and b/static/media/image34.png differ diff --git a/static/media/image35.png b/static/media/image35.png new file mode 100644 index 0000000000000000000000000000000000000000..7d08d5b58f2e4f69374a31bb7cdbdb8f16d9d57d Binary files /dev/null and b/static/media/image35.png differ diff --git a/static/media/image36.png b/static/media/image36.png new file mode 100644 index 0000000000000000000000000000000000000000..825671f5c8f8b0ee426f3ee8a80393e17c8ddd77 Binary files /dev/null and b/static/media/image36.png differ diff --git a/static/media/image37.png b/static/media/image37.png new file mode 100644 index 0000000000000000000000000000000000000000..a2af383dd394295f0b6f4a88fc703fee52f305fa Binary files /dev/null and b/static/media/image37.png differ diff --git a/static/media/image38.png b/static/media/image38.png new file mode 100644 index 0000000000000000000000000000000000000000..5c725975efe18c3d251369473cff8ba1be2acc62 Binary files /dev/null and b/static/media/image38.png differ diff --git a/static/media/image39.png b/static/media/image39.png new file mode 100644 index 0000000000000000000000000000000000000000..22e10b11fde1488a2f706d0af2e8eb2c63586883 Binary files /dev/null and b/static/media/image39.png differ diff --git a/static/media/image4.png b/static/media/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..71ea8f9b2bf26c26f489a8b8f37385f876e51314 Binary files /dev/null and b/static/media/image4.png differ diff --git a/static/media/image40.png b/static/media/image40.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2416f87c70ef3a16c6918a2409c4564d11c08c Binary files /dev/null and b/static/media/image40.png differ diff --git a/static/media/image41.png b/static/media/image41.png new file mode 100644 index 0000000000000000000000000000000000000000..23e22ec1897f5ad998a98b00513f50837a81fb18 Binary files /dev/null and b/static/media/image41.png differ diff --git a/static/media/image42.png b/static/media/image42.png new file mode 100644 index 0000000000000000000000000000000000000000..e9f679632962bd2d12d9d58700a664a2759db032 Binary files /dev/null and b/static/media/image42.png differ diff --git a/static/media/image43.png b/static/media/image43.png new file mode 100644 index 0000000000000000000000000000000000000000..9f06a3b7d75ab00d3fd7b0b57058f95e22e53271 Binary files /dev/null and b/static/media/image43.png differ diff --git a/static/media/image44.png b/static/media/image44.png new file mode 100644 index 0000000000000000000000000000000000000000..37bca5256e2d7e5346d8771f7c3f5d872ddc1d73 Binary files /dev/null and b/static/media/image44.png differ diff --git a/static/media/image45.png b/static/media/image45.png new file mode 100644 index 0000000000000000000000000000000000000000..8b20beb39b732e0a8db84f3848ffc3621c920af1 Binary files /dev/null and b/static/media/image45.png differ diff --git a/static/media/image46.png b/static/media/image46.png new file mode 100644 index 0000000000000000000000000000000000000000..7af1de8a1b643e2017e2a2a20fe6ab756cd4c940 Binary files /dev/null and b/static/media/image46.png differ diff --git a/static/media/image47.png b/static/media/image47.png new file mode 100644 index 0000000000000000000000000000000000000000..7494b8db29f38e56d056870b8c3d6633f2348c67 Binary files /dev/null and b/static/media/image47.png differ diff --git a/static/media/image5.png b/static/media/image5.png new file mode 100644 index 0000000000000000000000000000000000000000..c9472eb5fcc4405d4c97c31628a4e72e2872694b Binary files /dev/null and b/static/media/image5.png differ diff --git a/static/media/image6.png b/static/media/image6.png new file mode 100644 index 0000000000000000000000000000000000000000..ce4273f8484268f13507e278f0843c3028b00495 Binary files /dev/null and b/static/media/image6.png differ diff --git a/static/media/image7.png b/static/media/image7.png new file mode 100644 index 0000000000000000000000000000000000000000..cfcce74e54d698feace04ebc88e46999d49c071f Binary files /dev/null and b/static/media/image7.png differ diff --git a/static/media/image8.png b/static/media/image8.png new file mode 100644 index 0000000000000000000000000000000000000000..73d76507e6818e2f57b7d2f3a647de10d5e84225 Binary files /dev/null and b/static/media/image8.png differ diff --git a/static/media/image9.png b/static/media/image9.png new file mode 100644 index 0000000000000000000000000000000000000000..22621cc92b221be529c3cdb288eff6922539c47a Binary files /dev/null and b/static/media/image9.png differ diff --git a/static/media/overview-docs.png b/static/media/overview-docs.png new file mode 100644 index 0000000000000000000000000000000000000000..00764f47e7a73a8a618b9e4bf922499a0776b00f Binary files /dev/null and b/static/media/overview-docs.png differ diff --git a/static/media/overview-eclipse.png b/static/media/overview-eclipse.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9b3b8201170a661c6b5ac05caa7b1c3b37de0a Binary files /dev/null and b/static/media/overview-eclipse.png differ diff --git a/static/media/overview-home.png b/static/media/overview-home.png new file mode 100644 index 0000000000000000000000000000000000000000..f4387b5139c5cca1e93a303fd37a2efc20babbc4 Binary files /dev/null and b/static/media/overview-home.png differ diff --git a/static/media/psdk-conf-success.png b/static/media/psdk-conf-success.png new file mode 100644 index 0000000000000000000000000000000000000000..d9f2e822a0fb0e30f176fb7da924ed0b21e87247 Binary files /dev/null and b/static/media/psdk-conf-success.png differ diff --git a/static/media/psdk-empty-found.png b/static/media/psdk-empty-found.png new file mode 100644 index 0000000000000000000000000000000000000000..cc915a8b63e289fd14a118336963239942425e74 Binary files /dev/null and b/static/media/psdk-empty-found.png differ diff --git a/static/media/psdk-found-persistent.png b/static/media/psdk-found-persistent.png new file mode 100644 index 0000000000000000000000000000000000000000..7c56389f2de1ca6ff20ad7f41a10e536f278350c Binary files /dev/null and b/static/media/psdk-found-persistent.png differ diff --git a/static/media/psdk-icon.png b/static/media/psdk-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb2ec59d15f701f085ab4c27329c2f2d8afd9ae Binary files /dev/null and b/static/media/psdk-icon.png differ diff --git a/static/media/psdk-init-success.png b/static/media/psdk-init-success.png new file mode 100644 index 0000000000000000000000000000000000000000..fe6536c8a64e53761fad215cc296a7d4dd918d0e Binary files /dev/null and b/static/media/psdk-init-success.png differ diff --git a/static/media/psdk-progress.png b/static/media/psdk-progress.png new file mode 100644 index 0000000000000000000000000000000000000000..32a341fa245815a78208bc5fdc9424f58704af58 Binary files /dev/null and b/static/media/psdk-progress.png differ diff --git a/static/media/simulator-start.png b/static/media/simulator-start.png new file mode 100644 index 0000000000000000000000000000000000000000..982e58dfa60488c9cdd43e78f93384270aa00788 Binary files /dev/null and b/static/media/simulator-start.png differ diff --git a/static/media/simulator-stop.png b/static/media/simulator-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..abb17304ef6742f13743b2edcb0719430f444191 Binary files /dev/null and b/static/media/simulator-stop.png differ diff --git a/static/media/vm-usbnet-setup.png b/static/media/vm-usbnet-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..125849163d75d4e7b0c888e02468b950c66fa0c3 Binary files /dev/null and b/static/media/vm-usbnet-setup.png differ diff --git a/static/media/vm-usbnet.dia b/static/media/vm-usbnet.dia new file mode 100644 index 0000000000000000000000000000000000000000..681dcb80e77e7ed0e991688ae3a9b49d2d7ce918 Binary files /dev/null and b/static/media/vm-usbnet.dia differ diff --git a/static/media/vm-usbnet.png b/static/media/vm-usbnet.png new file mode 100644 index 0000000000000000000000000000000000000000..6718c32030cba3e9081b21d28ef1823b80f0ed35 Binary files /dev/null and b/static/media/vm-usbnet.png differ