[Pkg-privacy-commits] [pond] 01/02: Imported Upstream version 0.1.1

Ximin Luo infinity0 at debian.org
Sun Oct 4 00:39:57 UTC 2015


This is an automated email from the git hooks/post-receive script.

infinity0 pushed a commit to branch master
in repository pond.

commit 91c3da8e9e5c56d49c27b7dc3ddd656f65e15143
Author: Ximin Luo <infinity0 at debian.org>
Date:   Sun Oct 4 02:32:47 2015 +0200

    Imported Upstream version 0.1.1
---
 .gitignore                           |    9 +
 .travis.yml                          |   44 +
 LICENSE                              |   27 +
 README.md                            |   20 +
 RUNNING                              |   16 +
 bbssig/bbssig.go                     |  560 +++++
 bbssig/bbssig_test.go                |  158 ++
 bn256cgo/bn256.go                    |  681 +++++
 bn256cgo/bn256_test.go               |   96 +
 bn256cgo/int_test.go                 |   49 +
 client/TODO                          |   50 +
 client/abstractgui.go                |  412 +++
 client/background.go                 |  338 +++
 client/build-osx-bundle.sh           |  152 ++
 client/cli-input.go                  |  619 +++++
 client/cli.go                        | 1914 ++++++++++++++
 client/client.go                     | 1476 +++++++++++
 client/client_test.go                | 2440 ++++++++++++++++++
 client/disk.go                       |  410 +++
 client/disk/client.pb.go             |  916 +++++++
 client/disk/client.proto             |  161 ++
 client/disk/disk.go                  |  484 ++++
 client/disk/tpm_linux.go             |  225 ++
 client/erasure_cli_linux.go          |   64 +
 client/erasure_darwin.go             |   14 +
 client/erasure_freebsd.go            |   14 +
 client/erasure_gui_linux.go          |  121 +
 client/erasure_notpm.go              |   15 +
 client/gtk.go                        |  698 ++++++
 client/gui-nogui.go                  |   27 +
 client/gui.go                        | 3663 +++++++++++++++++++++++++++
 client/images.go                     |   41 +
 client/images_gui.go                 |  119 +
 client/listui.go                     |  273 ++
 client/log.go                        |   85 +
 client/main_darwin.go                |   53 +
 client/main_freebsd.go               |   42 +
 client/main_linux.go                 |   79 +
 client/network.go                    | 1344 ++++++++++
 client/nogtk.go                      |   23 +
 client/pond.icns                     |  Bin 0 -> 295993 bytes
 client/ratchet/ratchet.go            |  623 +++++
 client/ratchet/ratchet_test.go       |  216 ++
 client/strings.go                    |   11 +
 client/system/sys_darwin.go          |  128 +
 client/system/sys_freebsd.go         |  139 ++
 client/system/sys_linux.go           |  138 +
 client/system/system_test.go         |   18 +
 client/testdata/state-old            |  Bin 0 -> 163880 bytes
 client/tpm/tpm.go                    |  252 ++
 client/tpm/tpm_test.go               |   44 +
 decrypt/decrypt.go                   |  119 +
 doc/_config.yml                      |    1 +
 doc/_layouts/default.html            |   81 +
 doc/images/add-contact1.svg          | 2258 +++++++++++++++++
 doc/images/compose.svg               | 4580 ++++++++++++++++++++++++++++++++++
 doc/images/create-account.svg        |  786 ++++++
 doc/images/main.svg                  |  485 ++++
 doc/images/manual-keying.svg         | 2844 +++++++++++++++++++++
 doc/images/outbox.svg                |  566 +++++
 doc/images/set-passphrase.svg        |  725 ++++++
 doc/images/shared-secret.svg         | 4452 +++++++++++++++++++++++++++++++++
 doc/images/shared-secret1.svg        | 4008 +++++++++++++++++++++++++++++
 doc/index.html                       |  222 ++
 doc/tech.html                        |  115 +
 doc/threat.html                      |   89 +
 doc/user-cli.html                    |  173 ++
 doc/user.html                        |  100 +
 editstate/editstate.go               |  540 ++++
 editstate/editstate_test.go          |   49 +
 editstate/testdata/stateproto        |  Bin 0 -> 117860 bytes
 editstate/tokenizer.go               |  168 ++
 editstate/tokenizer_test.go          |   56 +
 icons/pond-icon-blob.svg             |  958 +++++++
 icons/pond-icon-square.svg           |  897 +++++++
 panda/appengine-server/app.yaml      |    8 +
 panda/appengine-server/panda/main.go |  168 ++
 panda/appengine.go                   |  141 ++
 panda/card.go                        |  191 ++
 panda/panda.go                       |  448 ++++
 panda/panda_test.go                  |  149 ++
 panda/proto/core.pb.go               |  233 ++
 panda/proto/core.proto               |   35 +
 panda/rijndael/rijndael.go           |  259 ++
 panda/rijndael/rijndael_test.go      | 2118 ++++++++++++++++
 panda/simple_meeting_point.go        |   72 +
 papers/panda/.gitignore              |    8 +
 papers/panda/Makefile                |   29 +
 papers/panda/bibliography.bib        |  156 ++
 papers/panda/panda.tex               |  332 +++
 papers/panda/usenix.sty              |   94 +
 pathrewrite/pathrewrite.go           |   88 +
 pond.png                             |  Bin 0 -> 26371 bytes
 protos/const.go                      |   27 +
 protos/pond.pb.go                    |  935 +++++++
 protos/pond.proto                    |  283 +++
 server/identity.dev                  |  Bin 0 -> 32 bytes
 server/main.go                       |  227 ++
 server/protos/server.pb.go           |   51 +
 server/protos/server.proto           |   12 +
 server/server.go                     | 1243 +++++++++
 server/server_test.go                | 1061 ++++++++
 transport/transport.go               |  438 ++++
 transport/transport_test.go          |  156 ++
 104 files changed, 52735 insertions(+)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d6b9eb2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.swp
+*.test
+
+doc/_site
+
+client/client
+decrypt/decrypt
+editstate/editstate
+server/server
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..d579817
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,44 @@
+language: go
+go:
+  - 1.2
+  - release
+  - tip
+branches:
+  only:
+    - master
+install:
+  - cd; mkdir gopkg; export GOPATH=$HOME/gopkg
+# This is for the CLI interface - we want to build it
+  - go get -tags nogui github.com/agl/pond/client
+# Someday, we want to build the GTK stuff and the following tag should do it
+  - go get -tags ubuntu github.com/agl/pond/client
+before_install:
+  - sudo apt-get update -qq
+  - sudo apt-get install -qq golang git libgtk-3-dev libgtkspell-3-dev libtspi-dev trousers tor mercurial pkg-config libgtkspell-3-0 libgtkspell0
+script:
+  - go build -tags nogui github.com/agl/pond/client
+  # This currently fails:
+  # - go test -tags nogui github.com/agl/pond/client
+  - go build -tags ubuntu github.com/agl/pond/client
+  # This currently fails:
+  # - go test -tags ubuntu github.com/agl/pond/client
+  - go build -tags ubuntu github.com/agl/pond/server
+  # This currently fails:
+  #- go test -tags ubuntu github.com/agl/pond/server
+  - go build -tags ubuntu github.com/agl/pond/editstate
+  - go test -tags ubuntu github.com/agl/pond/editstate
+  - go build -tags ubuntu github.com/agl/pond/decrypt
+  # This isn't currently building as it lacks tests:
+  # - go test -tags ubuntu github.com/agl/pond/decrypt
+  - go build github.com/agl/pond/panda
+  - go test github.com/agl/pond/panda
+  - go build github.com/agl/pond/bbssig
+  - go test github.com/agl/pond/bbssig
+  # This currently fails:
+  # - go build github.com/agl/pond/bn256cgo
+  # - go test github.com/agl/pond/bn256cgo
+  - go build github.com/agl/pond/pathrewrite
+  # This isn't currently building as it lacks tests:
+  # - go test github.com/agl/pond/pathrewrite
+  # This requires some work to run a server and then we may also run the transport tests:
+  # go test github.com/agl/pond/transport
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2d18db8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2013 Adam Langley. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name Pond nor the names of its contributors may be
+used to endorse or promote products derived from this software without
+specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b807a66
--- /dev/null
+++ b/README.md
@@ -0,0 +1,20 @@
+Pond
+====
+
+(Or, how to better organise a discreet relationship with the Director of the CIA.)
+
+At this point, I welcome technical feedback on the design and comments from the sort of (often non-technical) folks who need this sort of thing about whether it actually meets their needs.
+
+For details, see [the main website](https://pond.imperialviolet.org).
+
+The code here is broken down as follows:
+
+ - `bbssig` contains an implementation of the BBS group signature scheme. This is used in Pond to allow servers to reject messages from non-contacts without the server being able to identify those contacts.
+ - `bn256cgo` contains a wrapping of Naehrig, Niederhagen and Schwabe's pairing library. This is a drop in replacement for the bn256 package from go.crypto and speeds up bbssig. See https://github.com/agl/dclxvi.
+ - `client` contains the Pond GUI and CLI client and package for manipulating state files.
+ - `doc` contains the https://pond.imperialviolet.org site in Jeykll format.
+ - `editstate` contains a debugging utility for manipulating state files.
+ - `panda` contains a library for performing shared-key exchanges. It's used by `client/` to implement that functionality.
+ - `protos` contains the protocol buffer files for client to server communication.
+ - `server` contains the Pond server.
+ - `transport` contains code to implement the, low-level, client to server transport protocol.
diff --git a/RUNNING b/RUNNING
new file mode 100644
index 0000000..8438c9d
--- /dev/null
+++ b/RUNNING
@@ -0,0 +1,16 @@
+Ensure that your environment is configured for running golang programs. See
+http://golang.org/doc/code.html for details, but you should have something
+similar to the following setup:
+
+  export GOPATH=$HOME/go
+  export PATH=$PATH:$GOPATH/bin
+
+Adjust these path locations to fit your Go environment.
+
+Launch the GUI for Pond on GNU/Linux and similar operating systems:
+
+  $GOPATH/bin/client
+
+To run the Pond CLI:
+
+  $GOPATH/bin/client --cli
diff --git a/bbssig/bbssig.go b/bbssig/bbssig.go
new file mode 100644
index 0000000..c8ded84
--- /dev/null
+++ b/bbssig/bbssig.go
@@ -0,0 +1,560 @@
+// Package bbssig implements the BBS, short group signatures scheme as
+// detailed in http://crypto.stanford.edu/~dabo/papers/groupsigs.pdf.
+//
+// Group signatures are a variation on traditional public-key signatures in
+// that there are many different private-keys that can create valid signatures.
+// Holders of these private keys are called members, and a signature from any
+// member is indistinguishable from any other, from the point of view of the
+// public key.
+//
+// However, there is also a group private key, which differs from the member
+// private keys. The group private key can create new member private keys, and
+// can open signatures and discover which member created the signature.
+//
+// This implementation of group signatures also supports revocation of member
+// private keys. The group private key can produce a public 'revocation' of a
+// member private key. A revocation can be combined with the group, and with
+// each member private key to produce an updated group and updated private keys.
+// Signatures under the old keys are invalid under the new but, critically, the
+// revoked private key cannot be updated due to a divisor becoming zero.
+//
+// This form of revocation is complicated, but avoids deanonymising all
+// previous signatures from the revoked member.
+package bbssig
+
+import (
+	"crypto/rand"
+	"hash"
+	"io"
+	"math/big"
+
+	"golang.org/x/crypto/bn256"
+)
+
+// SignatureSize is the size, in bytes, of the signatures produced by this
+// package. (3072 bits.)
+const SignatureSize = 12 * 32
+
+// Group represents a public key in the group signature scheme. Signatures by
+// the group members can be verified given the Group.
+type Group struct {
+	g1, h, u, v           *bn256.G1
+	g2, w                 *bn256.G2
+	ehw, ehg2, minusEg1g2 *bn256.GT
+}
+
+// Marshal serializes g to a slice of bytes, suitable for Unmarshal.
+func (g *Group) Marshal() []byte {
+	out := make([]byte, 0, 4*2*32+2*2*2*32)
+	out = append(out, g.g1.Marshal()...)
+	out = append(out, g.h.Marshal()...)
+	out = append(out, g.u.Marshal()...)
+	out = append(out, g.v.Marshal()...)
+	out = append(out, g.g2.Marshal()...)
+	out = append(out, g.w.Marshal()...)
+	return out
+}
+
+// Unmarshal sets g to the result of unmarshaling b and returns both g and a
+// bool that is true on success. Since Group contains some precomputed values
+// that aren't included in the serialisation, Unmarshal does significant
+// computation.
+func (g *Group) Unmarshal(b []byte) (*Group, bool) {
+	if len(b) != 4*2*32+2*2*2*32 {
+		return nil, false
+	}
+	var ok bool
+	if g.g1, ok = new(bn256.G1).Unmarshal(b[0*2*32 : 1*2*32]); !ok {
+		return nil, false
+	}
+	if g.h, ok = new(bn256.G1).Unmarshal(b[1*2*32 : 2*2*32]); !ok {
+		return nil, false
+	}
+	if g.u, ok = new(bn256.G1).Unmarshal(b[2*2*32 : 3*2*32]); !ok {
+		return nil, false
+	}
+	if g.v, ok = new(bn256.G1).Unmarshal(b[3*2*32 : 4*2*32]); !ok {
+		return nil, false
+	}
+
+	b = b[4*2*32:]
+	if g.g2, ok = new(bn256.G2).Unmarshal(b[0*2*2*32 : 1*2*2*32]); !ok {
+		return nil, false
+	}
+	if g.w, ok = new(bn256.G2).Unmarshal(b[1*2*2*32 : 2*2*2*32]); !ok {
+		return nil, false
+	}
+
+	g.precompute()
+	return g, true
+}
+
+func (g *Group) precompute() {
+	g.ehw = bn256.Pair(g.h, g.w)
+	g.ehg2 = bn256.Pair(g.h, g.g2)
+
+	t := bn256.Pair(g.g1, g.g2)
+	g.minusEg1g2 = new(bn256.GT).Neg(t)
+}
+
+// PrivateKey represents a group private key. The holder of the private key can
+// create new group members and can reveal which member created a given
+// signature.
+type PrivateKey struct {
+	*Group
+	xi1, xi2 *big.Int
+	gamma    *big.Int
+}
+
+// Marshal serializes priv to a slice of bytes, suitable for Unmarshal.
+func (priv *PrivateKey) Marshal() []byte {
+	out := make([]byte, 0, 3*32)
+	out = appendN(out, priv.xi1)
+	out = appendN(out, priv.xi2)
+	out = appendN(out, priv.gamma)
+	return out
+}
+
+// Unmarshal sets priv to the result of unmarshaling b and returns both priv
+// and a bool that is true on success.
+func (priv *PrivateKey) Unmarshal(g *Group, b []byte) (*PrivateKey, bool) {
+	if len(b) != 3*32 {
+		return nil, false
+	}
+
+	priv.Group = g
+	priv.xi1 = new(big.Int).SetBytes(b[0*32 : 1*32])
+	priv.xi2 = new(big.Int).SetBytes(b[1*32 : 2*32])
+	priv.gamma = new(big.Int).SetBytes(b[2*32 : 3*32])
+
+	return priv, true
+}
+
+// MemberKey represents a member private key. It is capable of signing messages
+// such that nobody, save the holder of the group private key, can determine
+// which member of the group made the signature.
+type MemberKey struct {
+	*Group
+	x *big.Int
+	a *bn256.G1
+}
+
+// Tag returns an opaque byte slice that identifies the member private key for
+// the purposes of comparing against the result of Open.
+func (mem *MemberKey) Tag() []byte {
+	return mem.a.Marshal()
+}
+
+// Marshal serializes mem to a slice of bytes, suitable for Unmarshal.
+func (mem *MemberKey) Marshal() []byte {
+	out := make([]byte, 0, 3*32)
+	out = appendN(out, mem.x)
+	out = append(out, mem.a.Marshal()...)
+	return out
+}
+
+// Unmarshal sets mem to the result of unmarshaling b and returns both mem and
+// a bool that is true on success.
+func (mem *MemberKey) Unmarshal(g *Group, b []byte) (*MemberKey, bool) {
+	if len(b) != 3*32 {
+		return nil, false
+	}
+
+	var ok bool
+	mem.Group = g
+	mem.x = new(big.Int).SetBytes(b[0*32 : 1*32])
+	if mem.a, ok = new(bn256.G1).Unmarshal(b[1*32:]); !ok {
+		return nil, false
+	}
+
+	return mem, true
+}
+
+func randomZp(r io.Reader) (*big.Int, error) {
+	for {
+		n, err := rand.Int(r, bn256.Order)
+		if err != nil {
+			return nil, err
+		}
+		if n.Sign() > 0 {
+			return n, nil
+		}
+	}
+
+	panic("unreachable")
+}
+
+// GenerateGroup generates a new group and group private key.
+func GenerateGroup(r io.Reader) (*PrivateKey, error) {
+	priv := new(PrivateKey)
+	priv.Group = new(Group)
+	var err error
+
+	if _, priv.g1, err = bn256.RandomG1(r); err != nil {
+		return nil, err
+	}
+	if _, priv.g2, err = bn256.RandomG2(r); err != nil {
+		return nil, err
+	}
+	if _, priv.h, err = bn256.RandomG1(r); err != nil {
+		return nil, err
+	}
+	if priv.xi1, err = randomZp(r); err != nil {
+		return nil, err
+	}
+	if priv.xi2, err = randomZp(r); err != nil {
+		return nil, err
+	}
+
+	z0 := new(big.Int).ModInverse(priv.xi1, bn256.Order)
+	priv.u = new(bn256.G1).ScalarMult(priv.h, z0)
+
+	z0.ModInverse(priv.xi2, bn256.Order)
+	priv.v = new(bn256.G1).ScalarMult(priv.h, z0)
+
+	priv.gamma, err = randomZp(r)
+	if err != nil {
+		return nil, err
+	}
+	priv.w = new(bn256.G2).ScalarMult(priv.g2, priv.gamma)
+	priv.precompute()
+
+	return priv, nil
+}
+
+// NewMember creates a new member private key for the group.
+func (priv *PrivateKey) NewMember(r io.Reader) (*MemberKey, error) {
+	mem := new(MemberKey)
+	var err error
+
+	mem.Group = priv.Group
+	mem.x, err = randomZp(r)
+	if err != nil {
+		return nil, err
+	}
+
+	s := new(big.Int).Add(priv.gamma, mem.x)
+	s.ModInverse(s, bn256.Order)
+	mem.a = new(bn256.G1).ScalarMult(priv.g1, s)
+
+	return mem, nil
+}
+
+// Sign computes a group signature of digest using the given hash function.
+func (mem *MemberKey) Sign(r io.Reader, digest []byte, hashFunc hash.Hash) ([]byte, error) {
+	var rnds [7]*big.Int
+	for i := range rnds {
+		var err error
+		rnds[i], err = randomZp(r)
+		if err != nil {
+			return nil, err
+		}
+	}
+	alpha := rnds[0]
+	beta := rnds[1]
+
+	t1 := new(bn256.G1).ScalarMult(mem.u, alpha)
+	t2 := new(bn256.G1).ScalarMult(mem.v, beta)
+
+	tmp := new(big.Int).Add(alpha, beta)
+	t3 := new(bn256.G1).ScalarMult(mem.h, tmp)
+	t3.Add(t3, mem.a)
+
+	delta1 := new(big.Int).Mul(mem.x, alpha)
+	delta1.Mod(delta1, bn256.Order)
+	delta2 := new(big.Int).Mul(mem.x, beta)
+	delta2.Mod(delta2, bn256.Order)
+
+	ralpha := rnds[2]
+	rbeta := rnds[3]
+	rx := rnds[4]
+	rdelta1 := rnds[5]
+	rdelta2 := rnds[6]
+
+	r1 := new(bn256.G1).ScalarMult(mem.u, ralpha)
+	r2 := new(bn256.G1).ScalarMult(mem.v, rbeta)
+
+	r3 := bn256.Pair(t3, mem.g2)
+	r3.ScalarMult(r3, rx)
+
+	tmp.Neg(ralpha)
+	tmp.Sub(tmp, rbeta)
+	tmp.Mod(tmp, bn256.Order)
+	tmpgt := new(bn256.GT).ScalarMult(mem.ehw, tmp)
+	r3.Add(r3, tmpgt)
+
+	tmp.Neg(rdelta1)
+	tmp.Sub(tmp, rdelta2)
+	tmp.Mod(tmp, bn256.Order)
+	tmpgt.ScalarMult(mem.ehg2, tmp)
+	r3.Add(r3, tmpgt)
+
+	r4 := new(bn256.G1).ScalarMult(t1, rx)
+	tmp.Neg(rdelta1)
+	tmp.Add(tmp, bn256.Order)
+	tmpg := new(bn256.G1).ScalarMult(mem.u, tmp)
+	r4.Add(r4, tmpg)
+
+	r5 := new(bn256.G1).ScalarMult(t2, rx)
+	tmp.Neg(rdelta2)
+	tmp.Add(tmp, bn256.Order)
+	tmpg.ScalarMult(mem.v, tmp)
+	r5.Add(r5, tmpg)
+
+	t1Bytes := t1.Marshal()
+	t2Bytes := t2.Marshal()
+	t3Bytes := t3.Marshal()
+
+	hashFunc.Reset()
+	hashFunc.Write(digest)
+	hashFunc.Write(t1Bytes)
+	hashFunc.Write(t2Bytes)
+	hashFunc.Write(t3Bytes)
+	hashFunc.Write(r1.Marshal())
+	hashFunc.Write(r2.Marshal())
+	hashFunc.Write(r3.Marshal())
+	hashFunc.Write(r4.Marshal())
+	hashFunc.Write(r5.Marshal())
+	c := new(big.Int).SetBytes(hashFunc.Sum(nil))
+	c.Mod(c, bn256.Order)
+
+	salpha := new(big.Int).Mul(c, alpha)
+	salpha.Add(salpha, ralpha)
+	salpha.Mod(salpha, bn256.Order)
+
+	sbeta := new(big.Int).Mul(c, beta)
+	sbeta.Add(sbeta, rbeta)
+	sbeta.Mod(sbeta, bn256.Order)
+
+	sx := new(big.Int).Mul(c, mem.x)
+	sx.Add(sx, rx)
+	sx.Mod(sx, bn256.Order)
+
+	sdelta1 := new(big.Int).Mul(c, delta1)
+	sdelta1.Add(sdelta1, rdelta1)
+	sdelta1.Mod(sdelta1, bn256.Order)
+
+	sdelta2 := new(big.Int).Mul(c, delta2)
+	sdelta2.Add(sdelta2, rdelta2)
+	sdelta2.Mod(sdelta2, bn256.Order)
+
+	sig := make([]byte, 0, SignatureSize)
+	sig = append(sig, t1Bytes...)
+	sig = append(sig, t2Bytes...)
+	sig = append(sig, t3Bytes...)
+	sig = appendN(sig, c)
+	sig = appendN(sig, salpha)
+	sig = appendN(sig, sbeta)
+	sig = appendN(sig, sx)
+	sig = appendN(sig, sdelta1)
+	sig = appendN(sig, sdelta2)
+
+	return sig, nil
+}
+
+// Verify verifies that sig is a valid signature of digest using the given hash
+// function.
+func (g *Group) Verify(digest []byte, hashFunc hash.Hash, sig []byte) bool {
+	if len(sig) != SignatureSize {
+		return false
+	}
+
+	t1, ok := new(bn256.G1).Unmarshal(sig[:2*32])
+	if !ok {
+		return false
+	}
+	t2, ok := new(bn256.G1).Unmarshal(sig[2*32 : 4*32])
+	if !ok {
+		return false
+	}
+	t3, ok := new(bn256.G1).Unmarshal(sig[4*32 : 6*32])
+	if !ok {
+		return false
+	}
+	c := new(big.Int).SetBytes(sig[6*32 : 7*32])
+	salpha := new(big.Int).SetBytes(sig[7*32 : 8*32])
+	sbeta := new(big.Int).SetBytes(sig[8*32 : 9*32])
+	sx := new(big.Int).SetBytes(sig[9*32 : 10*32])
+	sdelta1 := new(big.Int).SetBytes(sig[10*32 : 11*32])
+	sdelta2 := new(big.Int).SetBytes(sig[11*32 : 12*32])
+
+	r1 := new(bn256.G1).ScalarMult(g.u, salpha)
+	tmp := new(big.Int).Neg(c)
+	tmp.Add(tmp, bn256.Order)
+	tmpg := new(bn256.G1).ScalarMult(t1, tmp)
+	r1.Add(r1, tmpg)
+
+	r2 := new(bn256.G1).ScalarMult(g.v, sbeta)
+	tmpg.ScalarMult(t2, tmp)
+	r2.Add(r2, tmpg)
+
+	r4 := new(bn256.G1).ScalarMult(t1, sx)
+	tmp.Neg(sdelta1)
+	tmp.Add(tmp, bn256.Order)
+	tmpg.ScalarMult(g.u, tmp)
+	r4.Add(r4, tmpg)
+
+	r5 := new(bn256.G1).ScalarMult(t2, sx)
+	tmp.Neg(sdelta2)
+	tmp.Add(tmp, bn256.Order)
+	tmpg.ScalarMult(g.v, tmp)
+	r5.Add(r5, tmpg)
+
+	r3 := bn256.Pair(t3, g.g2)
+	r3.ScalarMult(r3, sx)
+
+	tmp.Neg(salpha)
+	tmp.Sub(tmp, sbeta)
+	tmp.Mod(tmp, bn256.Order)
+	tmpgt := new(bn256.GT).ScalarMult(g.ehw, tmp)
+	r3.Add(r3, tmpgt)
+
+	tmp.Neg(sdelta1)
+	tmp.Sub(tmp, sdelta2)
+	tmp.Mod(tmp, bn256.Order)
+	tmpgt.ScalarMult(g.ehg2, tmp)
+	r3.Add(r3, tmpgt)
+
+	et3w := bn256.Pair(t3, g.w)
+	et3w.Add(et3w, g.minusEg1g2)
+	et3w.ScalarMult(et3w, c)
+	r3.Add(r3, et3w)
+
+	hashFunc.Reset()
+	hashFunc.Write(digest)
+	hashFunc.Write(t1.Marshal())
+	hashFunc.Write(t2.Marshal())
+	hashFunc.Write(t3.Marshal())
+	hashFunc.Write(r1.Marshal())
+	hashFunc.Write(r2.Marshal())
+	hashFunc.Write(r3.Marshal())
+	hashFunc.Write(r4.Marshal())
+	hashFunc.Write(r5.Marshal())
+	cprime := new(big.Int).SetBytes(hashFunc.Sum(nil))
+	cprime.Mod(cprime, bn256.Order)
+
+	return cprime.Cmp(c) == 0
+}
+
+// Open reveals which member private key made the given signature. The return
+// value will match the result of calling Tag on the member private key in
+// question.
+func (priv *PrivateKey) Open(sig []byte) ([]byte, bool) {
+	if len(sig) != 12*32 {
+		return nil, false
+	}
+
+	t1, ok := new(bn256.G1).Unmarshal(sig[:2*32])
+	if !ok {
+		return nil, false
+	}
+	t2, ok := new(bn256.G1).Unmarshal(sig[2*32 : 4*32])
+	if !ok {
+		return nil, false
+	}
+	t3, ok := new(bn256.G1).Unmarshal(sig[4*32 : 6*32])
+	if !ok {
+		return nil, false
+	}
+
+	a := new(bn256.G1).ScalarMult(t1, priv.xi1)
+	b := new(bn256.G1).ScalarMult(t2, priv.xi2)
+	a.Add(a, b)
+	a.Neg(a)
+	a.Add(t3, a)
+
+	return a.Marshal(), true
+}
+
+// Revocation represents a revocation of a member private key. A Revocation can
+// be applied to update a member private key and also to a group to create a
+// new group that does not include the revoked member.
+type Revocation struct {
+	x     *big.Int
+	a     *bn256.G1
+	aStar *bn256.G2
+}
+
+// GenerateRevocation creates a Revocation that revokes the given member
+// private key.
+func (priv *PrivateKey) GenerateRevocation(mem *MemberKey) *Revocation {
+	s := new(big.Int).Add(priv.gamma, mem.x)
+	s.ModInverse(s, bn256.Order)
+	aStar := new(bn256.G2).ScalarMult(priv.g2, s)
+
+	return &Revocation{mem.x, mem.a, aStar}
+}
+
+// Marshal serializes r to a slice of bytes, suitable for Unmarshal.
+func (r *Revocation) Marshal() []byte {
+	ret := make([]byte, 0, 7*32)
+	ret = append(ret, r.a.Marshal()...)
+	ret = appendN(ret, r.x)
+	ret = append(ret, r.aStar.Marshal()...)
+	return ret
+}
+
+func (r *Revocation) Unmarshal(b []byte) (*Revocation, bool) {
+	if len(b) != 7*32 {
+		return nil, false
+	}
+
+	var ok bool
+	r.a, ok = new(bn256.G1).Unmarshal(b[:2*32])
+	if !ok {
+		return nil, false
+	}
+	r.x = new(big.Int).SetBytes(b[2*32 : 3*32])
+	r.aStar, ok = new(bn256.G2).Unmarshal(b[3*32 : 7*32])
+	if !ok {
+		return nil, false
+	}
+	return r, true
+}
+
+// Update alters g to create a new Group that includes all previous members,
+// save a specifically revoked member.
+func (g *Group) Update(r *Revocation) {
+	tmp := new(big.Int).Neg(r.x)
+	tmp.Add(tmp, bn256.Order)
+	t := new(bn256.G2).ScalarMult(r.aStar, tmp)
+	g.w.Add(g.g2, t)
+
+	g.g1 = r.a
+	g.g2 = r.aStar
+
+	g.precompute()
+}
+
+// Update alters mem to create a member private key for an updated Group. (Note
+// that the Group of mem must also be updated.) This functions returns false if
+// mem is the member private key that has been revoked.
+func (mem *MemberKey) Update(r *Revocation) bool {
+	if mem.x.Cmp(r.x) == 0 {
+		return false
+	}
+
+	d := new(big.Int).Sub(mem.x, r.x)
+	d.Mod(d, bn256.Order)
+	d.ModInverse(d, bn256.Order)
+
+	newA := new(bn256.G1).ScalarMult(r.a, d)
+	t := new(bn256.G1).ScalarMult(mem.a, d)
+	t.Neg(t)
+	newA.Add(newA, t)
+
+	mem.a = newA
+	return true
+}
+
+func appendN(b []byte, n *big.Int) []byte {
+	bytes := n.Bytes()
+	if len(bytes) > 32 {
+		panic("bad value passed to appendN")
+	}
+
+	for i := len(bytes); i < 32; i++ {
+		b = append(b, 0)
+	}
+	return append(b, bytes...)
+}
diff --git a/bbssig/bbssig_test.go b/bbssig/bbssig_test.go
new file mode 100644
index 0000000..74f8818
--- /dev/null
+++ b/bbssig/bbssig_test.go
@@ -0,0 +1,158 @@
+package bbssig
+
+import (
+	"bytes"
+	"crypto/rand"
+	"crypto/sha256"
+	"testing"
+)
+
+func TestMarshal(t *testing.T) {
+	priv, err := GenerateGroup(rand.Reader)
+	if err != nil {
+		t.Fatalf("failed to generate group: %s", err)
+	}
+
+	groupBytes := priv.Group.Marshal()
+	_, ok := new(Group).Unmarshal(groupBytes)
+	if !ok {
+		t.Error("failed to unmarshal group")
+	}
+
+	group2, ok := new(Group).Unmarshal(groupBytes)
+	if !ok {
+		t.Error("failed to unmarshal group")
+	}
+
+	if group2Bytes := group2.Marshal(); !bytes.Equal(groupBytes, group2Bytes) {
+		t.Error("reserialising group produces different result")
+	}
+
+	_, ok = new(PrivateKey).Unmarshal(group2, priv.Marshal())
+	if !ok {
+		t.Error("failed to unmarshal private key")
+	}
+}
+
+func TestSign(t *testing.T) {
+	priv, err := GenerateGroup(rand.Reader)
+	if err != nil {
+		t.Fatalf("failed to generate group: %s", err)
+	}
+
+	group := priv.Group
+	member, err := priv.NewMember(rand.Reader)
+	if err != nil {
+		t.Fatalf("failed to add member to group: %s", err)
+	}
+
+	msg := []byte("hello world")
+	h := sha256.New()
+	h.Write(msg)
+	digest := h.Sum(nil)
+
+	ok := false
+	groupBytes := group.Marshal()
+	group, ok = new(Group).Unmarshal(groupBytes)
+	if !ok {
+		t.Fatalf("failed to unmarshal group")
+	}
+
+	sig, err := member.Sign(rand.Reader, digest, h)
+	if err != nil {
+		t.Fatalf("failed to sign message: %s", err)
+	}
+
+	if !group.Verify(digest, h, sig) {
+		t.Errorf("signature failed to verify")
+	}
+
+	digest[1] ^= 0x80
+	if group.Verify(digest, h, sig) {
+		t.Errorf("signature always verifies")
+	}
+	digest[1] ^= 0x80
+
+	tag, ok := priv.Open(sig)
+	if !ok {
+		t.Fatalf("failed to open signature")
+	}
+
+	if !bytes.Equal(tag, member.Tag()) {
+		t.Errorf("Open returned wrong tag value")
+	}
+
+	member2, err := priv.NewMember(rand.Reader)
+	if err != nil {
+		t.Fatalf("failed to add second member: %s", err)
+	}
+	rev := priv.GenerateRevocation(member)
+	revBytes := rev.Marshal()
+	rev2, ok := new(Revocation).Unmarshal(revBytes)
+	if !ok {
+		t.Fatalf("failed to unmarshal revocation")
+	}
+
+	group.Update(rev2)
+	if group.Verify(digest, h, sig) {
+		t.Errorf("signature still verifies after revocation")
+	}
+
+	if member.Update(rev2) {
+		t.Errorf("revoked key successfully updated")
+	}
+
+	sig2, err := member2.Sign(rand.Reader, digest, h)
+	if err != nil {
+		t.Fatalf("failed to sign second message: %s", err)
+	}
+
+	if group.Verify(digest, h, sig2) {
+		t.Errorf("signature verified before member key updated")
+	}
+
+	member2.Group.Update(rev2)
+
+	if !member2.Update(rev2) {
+		t.Errorf("unrevoked member failed to update")
+	}
+
+	sig3, err := member2.Sign(rand.Reader, digest, h)
+	if err != nil {
+		t.Fatalf("failed to sign second message: %s", err)
+	}
+
+	if !group.Verify(digest, h, sig3) {
+		t.Errorf("updated signature failed to verify")
+	}
+}
+
+func BenchmarkVerify(b *testing.B) {
+	priv, err := GenerateGroup(rand.Reader)
+	if err != nil {
+		b.Fatalf("failed to generate group: %s", err)
+	}
+
+	group := priv.Group
+	member, err := priv.NewMember(rand.Reader)
+	if err != nil {
+		b.Fatalf("failed to add member to group: %s", err)
+	}
+
+	msg := []byte("hello world")
+	h := sha256.New()
+	h.Write(msg)
+	digest := h.Sum(nil)
+
+	sig, err := member.Sign(rand.Reader, digest, h)
+	if err != nil {
+		b.Fatalf("failed to sign message: %s", err)
+	}
+	b.ResetTimer()
+
+	for i := 0; i < b.N; i++ {
+		if !group.Verify(digest, h, sig) {
+			b.Errorf("signature failed to verify")
+		}
+	}
+}
diff --git a/bn256cgo/bn256.go b/bn256cgo/bn256.go
new file mode 100644
index 0000000..1aa9bc5
--- /dev/null
+++ b/bn256cgo/bn256.go
@@ -0,0 +1,681 @@
+/*
+Package bn256cgo is a drop in replacement for the bn256 package from go.crypto.
+
+It should be about 10x faster than the pure-Go version when run on an amd64
+based system. It wraps a patched version of
+http://cryptojedi.org/crypto/#dclxvi.
+
+See the original package for documentation.
+
+[1] http://cryptojedi.org/papers/dclxvi-20100714.pdf
+*/
+package bn256cgo
+
+import (
+	"crypto/rand"
+	"io"
+	"math/big"
+	"strings"
+	"unsafe"
+)
+
+// #cgo CFLAGS: -I/home/agl/devel/dclxvi
+// #cgo LDFLAGS: -L/home/agl/devel/dclxvi -ldclxvipairing -lm
+/*
+#include <stdio.h>
+#include <string.h>
+
+#include "curvepoint_fp.h"
+#include "optate.h"
+#include "twistpoint_fp2.h"
+#include "fp12e.h"
+
+extern const curvepoint_fp_t bn_curvegen;
+extern const twistpoint_fp2_t bn_twistgen;
+
+struct g1 {
+	curvepoint_fp_t p;
+};
+
+void g1_set_gen(struct g1 *a) {
+	curvepoint_fp_set(a->p, bn_curvegen);
+}
+
+void g1_double(struct g1 *a) {
+	curvepoint_fp_double(a->p, a->p);
+}
+
+void g1_set(struct g1 *out, struct g1 *in) {
+	curvepoint_fp_set(out->p, in->p);
+}
+
+void g1_set_x(struct g1 *a, const double *words) {
+	memcpy(&a->p->m_x[0].v[0], words, sizeof(double) * 12);
+}
+
+void g1_set_y(struct g1 *a, const double *words) {
+	memcpy(&a->p->m_y[0].v[0], words, sizeof(double) * 12);
+}
+
+void g1_init_zt(struct g1 *a) {
+	fpe_setone(a->p->m_z);
+	fpe_setone(a->p->m_t);
+}
+
+void g1_dump(struct g1 *a) {
+	curvepoint_fp_print(stdout, a->p);
+	printf("\n");
+}
+
+void g1_add(struct g1 *out, struct g1 *a, struct g1 *b) {
+	curvepoint_fp_makeaffine(b->p);
+	curvepoint_fp_mixadd(out->p, a->p, b->p);
+}
+
+void g1_make_affine(struct g1 *out) {
+	curvepoint_fp_makeaffine(out->p);
+}
+
+double* g1_x(struct g1 *in) {
+	return in->p[0].m_x[0].v;
+}
+
+double* g1_y(struct g1 *in) {
+	return in->p[0].m_y[0].v;
+}
+
+void g1_neg(struct g1 *out, struct g1 *in) {
+	curvepoint_fp_neg(out->p, in->p);
+}
+
+void g1_scalar_mult(struct g1 *out, struct g1 *base, unsigned long long *words, unsigned num_bits) {
+	curvepoint_fp_mul(out->p, base->p, words, num_bits);
+}
+
+
+struct g2 {
+	twistpoint_fp2_t p;
+};
+
+void g2_set_gen(struct g2 *a) {
+	twistpoint_fp2_set(a->p, bn_twistgen);
+}
+
+void g2_set(struct g2 *out, struct g2 *in) {
+	twistpoint_fp2_set(out->p, in->p);
+}
+
+void g2_double(struct g2 *a) {
+	twistpoint_fp2_double(a->p, a->p);
+}
+
+void g2_set_x(struct g2 *a, const double *words) {
+	memcpy(&a->p->m_x[0].v[0], words, sizeof(double) * 24);
+}
+
+void g2_set_y(struct g2 *a, const double *words) {
+	memcpy(&a->p->m_y[0].v[0], words, sizeof(double) * 24);
+}
+
+void g2_init_zt(struct g2 *a) {
+	fp2e_setone(a->p->m_z);
+	fp2e_setone(a->p->m_t);
+}
+
+void g2_add(struct g2 *out, struct g2 *a, struct g2 *b) {
+	twistpoint_fp2_makeaffine(b->p);
+	twistpoint_fp2_mixadd(out->p, a->p, b->p);
+}
+
+void g2_make_affine(struct g2 *out) {
+	twistpoint_fp2_makeaffine(out->p);
+}
+
+double* g2_x(struct g2 *in) {
+	return in->p[0].m_x[0].v;
+}
+
+double* g2_y(struct g2 *in) {
+	return in->p[0].m_y[0].v;
+}
+
+void g2_neg(struct g2 *out, struct g2 *in) {
+	twistpoint_fp2_neg(out->p, in->p);
+}
+
+void g2_scalar_mult(struct g2 *out, struct g2 *base, unsigned long long *words, unsigned num_bits) {
+	twistpoint_fp2_mul(out->p, base->p, words, num_bits);
+}
+
+
+struct gt {
+	fp12e_t p;
+};
+
+void pair(struct gt *out, struct g1 *a, struct g2 *b) {
+	g1_make_affine(a);
+	g2_make_affine(b);
+	optate(out->p, b->p, a->p);
+}
+
+void gt_set(struct gt *out, struct gt *in) {
+	fp12e_set(out->p, in->p);
+}
+
+void gt_mul(struct gt *out, struct gt *a, struct gt *b) {
+	fp12e_mul(out->p, a->p, b->p);
+}
+
+void gt_dump(struct gt *in) {
+	fp12e_print(stdout, in->p);
+	printf("\n");
+}
+
+double* gt_aa(struct gt *in) {
+	return in->p[0].m_a[0].m_a[0].v;
+}
+
+double* gt_ab(struct gt *in) {
+	return in->p[0].m_a[0].m_b[0].v;
+}
+
+double* gt_ac(struct gt *in) {
+	return in->p[0].m_a[0].m_c[0].v;
+}
+
+double* gt_ba(struct gt *in) {
+	return in->p[0].m_b[0].m_a[0].v;
+}
+
+double* gt_bb(struct gt *in) {
+	return in->p[0].m_b[0].m_b[0].v;
+}
+
+double* gt_bc(struct gt *in) {
+	return in->p[0].m_b[0].m_c[0].v;
+}
+
+void gt_neg(struct gt *out, struct gt *in) {
+	fp12e_invert(out->p, in->p);
+}
+
+void gt_scalar_mult(struct gt *out, struct gt *base, unsigned long long *words, unsigned num_bits) {
+	fp12e_pow(out->p, base->p, words, num_bits);
+}
+
+void gt_set_aa(struct gt *a, const double *words) {
+	memcpy(&a->p->m_a[0].m_a[0], words, sizeof(double) * 24);
+}
+
+void gt_set_ab(struct gt *a, const double *words) {
+	memcpy(&a->p->m_a[0].m_b[0], words, sizeof(double) * 24);
+}
+
+void gt_set_ac(struct gt *a, const double *words) {
+	memcpy(&a->p->m_a[0].m_c[0], words, sizeof(double) * 24);
+}
+
+void gt_set_ba(struct gt *a, const double *words) {
+	memcpy(&a->p->m_b[0].m_a[0], words, sizeof(double) * 24);
+}
+
+void gt_set_bb(struct gt *a, const double *words) {
+	memcpy(&a->p->m_b[0].m_b[0], words, sizeof(double) * 24);
+}
+
+void gt_set_bc(struct gt *a, const double *words) {
+	memcpy(&a->p->m_b[0].m_c[0], words, sizeof(double) * 24);
+}
+
+*/
+import "C"
+
+var v = new(big.Int).SetInt64(1868033)
+
+func bigFromBase10(s string) *big.Int {
+	n, _ := new(big.Int).SetString(s, 10)
+	return n
+}
+
+// p is a prime over which we form a basic field: 36u⁴+36u³+24u³+6u+1.
+var p = bigFromBase10("65000549695646603732796438742359905742825358107623003571877145026864184071783")
+
+// Order is the number of elements in both G₁ and G₂: 36u⁴+36u³+18u³+6u+1.
+var Order = bigFromBase10("65000549695646603732796438742359905742570406053903786389881062969044166799969")
+
+type convertContext struct {
+	vPower     *big.Int
+	tmp        *big.Int
+	acc        *big.Int
+	doubles    [12]C.double
+	doublesFP2 [24]C.double
+}
+
+func newConvertContext() *convertContext {
+	return &convertContext{
+		vPower: new(big.Int),
+		tmp:    new(big.Int),
+		acc:    new(big.Int),
+	}
+}
+
+// doublesToInt sets out to a value decoded from 12 doubles in dclxvi's format.
+// dclxvi stores values as described in [1], section 4.1.
+func (c *convertContext) doublesToInt(out *big.Int, limbsIn *C.double) *big.Int {
+	limbs := (*[12]C.double)(unsafe.Pointer(limbsIn))
+	out.SetInt64(int64(limbs[0]))
+
+	c.vPower.Set(v)
+	c.tmp.SetInt64(int64(limbs[1]) * 6)
+	c.tmp.Mul(c.tmp, c.vPower)
+	out.Add(out, c.tmp)
+
+	i := 2
+	for factor := int64(6); factor <= 36; factor *= 6 {
+		for j := 0; j < 5; j++ {
+			c.vPower.Mul(c.vPower, v)
+			c.tmp.SetInt64(int64(limbs[i]) * factor)
+			c.tmp.Mul(c.tmp, c.vPower)
+			out.Add(out, c.tmp)
+			i++
+		}
+	}
+
+	out.Mod(out, p)
+
+	return out
+}
+
+// doublesFP2ToInt set out to a value decoded from 24 doubles in dclxvi's F(p²)
+// format. dclxvi stores these values as pairs of the scalars where those
+// scalars are in the form described in [1], section 4.1. The words of the two
+// values are interleaved and phase (which must be either 0 or 1) determines
+// which of the two values is decoded.
+func (c *convertContext) doublesFP2ToInt(out *big.Int, limbsIn *C.double, phase int) *big.Int {
+	limbs2 := (*[24]C.double)(unsafe.Pointer(limbsIn))
+	var limbs [12]C.double
+
+	for i := 0; i < 12; i++ {
+		limbs[i] = limbs2[2*i+phase]
+	}
+	return c.doublesToInt(out, &limbs[0])
+}
+
+const numBytes = 32
+
+var bigSix = big.NewInt(6)
+
+func (c *convertContext) doublesToBytes(out []byte, v *C.double) {
+	c.doublesToInt(c.acc, v)
+	bytes := c.acc.Bytes()
+	copy(out[numBytes-len(bytes):], bytes)
+}
+
+func (c *convertContext) doublesFP2ToBytes(out []byte, v2In *C.double) {
+	c.doublesFP2ToInt(c.acc, v2In, 1)
+	bytes := c.acc.Bytes()
+	copy(out[numBytes-len(bytes):], bytes)
+
+	c.doublesFP2ToInt(c.acc, v2In, 0)
+	bytes = c.acc.Bytes()
+	copy(out[numBytes*2-len(bytes):], bytes)
+}
+
+// bytesToDoubles converts a binary, big-endian number into 12 doubles that are
+// in dclxvi's scalar format.
+func (c *convertContext) bytesToDoubles(in []byte) {
+	c.acc.SetBytes(in)
+
+	c.vPower.Mul(bigSix, v)
+	c.acc.DivMod(c.acc, c.vPower, c.tmp)
+	c.doubles[0] = C.double(c.tmp.Int64())
+
+	for i := 1; i < 6; i++ {
+		c.acc.DivMod(c.acc, v, c.tmp)
+		c.doubles[i] = C.double(c.tmp.Int64())
+	}
+	c.acc.DivMod(c.acc, c.vPower, c.tmp)
+	c.doubles[6] = C.double(c.tmp.Int64())
+	for i := 7; i < 11; i++ {
+		c.acc.DivMod(c.acc, v, c.tmp)
+		c.doubles[i] = C.double(c.tmp.Int64())
+	}
+	c.doubles[11] = C.double(c.acc.Int64())
+}
+
+// bytesToDoublesFP2 converts a pair of binary, big-endian values into 24
+// doubles that are in dclxvi's F(p²) format.
+func (c *convertContext) bytesToDoublesFP2(in []byte) {
+	c.bytesToDoubles(in[:numBytes])
+	for i := 0; i < 12; i++ {
+		c.doublesFP2[2*i+1] = c.doubles[i]
+	}
+	c.bytesToDoubles(in[numBytes:])
+	for i := 0; i < 12; i++ {
+		c.doublesFP2[2*i] = c.doubles[i]
+	}
+}
+
+func (c *convertContext) setG1X(e *G1) {
+	C.g1_set_x(&e.p, &c.doubles[0])
+}
+
+func (c *convertContext) setG1Y(e *G1) {
+	C.g1_set_y(&e.p, &c.doubles[0])
+}
+
+func (c *convertContext) setG2X(e *G2) {
+	C.g2_set_x(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setG2Y(e *G2) {
+	C.g2_set_y(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTAA(e *GT) {
+	C.gt_set_aa(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTAB(e *GT) {
+	C.gt_set_ab(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTAC(e *GT) {
+	C.gt_set_ac(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTBA(e *GT) {
+	C.gt_set_ba(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTBB(e *GT) {
+	C.gt_set_bb(&e.p, &c.doublesFP2[0])
+}
+
+func (c *convertContext) setGTBC(e *GT) {
+	C.gt_set_bc(&e.p, &c.doublesFP2[0])
+}
+
+type G1 struct {
+	p C.struct_g1
+}
+
+func (e *G1) Add(a, b *G1) *G1 {
+	C.g1_add(&e.p, &a.p, &b.p)
+	return e
+}
+
+func (e *G1) Marshal() []byte {
+	out := make([]byte, numBytes*2)
+	C.g1_make_affine(&e.p)
+
+	c := newConvertContext()
+	c.doublesToBytes(out, C.g1_x(&e.p))
+	c.doublesToBytes(out[numBytes:], C.g1_y(&e.p))
+
+	return out
+}
+
+func (e *G1) String() string {
+	C.g1_make_affine(&e.p)
+	c := newConvertContext()
+	x := c.doublesToInt(new(big.Int), C.g1_x(&e.p))
+	y := c.doublesToInt(new(big.Int), C.g1_y(&e.p))
+	return "bn256.G1(" + x.String() + ", " + y.String() + ")"
+}
+
+func (e *G1) Neg(a *G1) {
+	C.g1_neg(&e.p, &a.p)
+}
+
+var baseG1 *G1
+
+func init() {
+	baseG1 = new(G1)
+	C.g1_set_gen(&baseG1.p)
+}
+
+// powerToWords converts a exponent to a series of 64-bit words in
+// little-endian order and also returns the bit-length of the exponent.
+func powerToWords(kIn *big.Int) ([]uint64, int) {
+	k := new(big.Int)
+	if kIn.Sign() < 0 || kIn.Cmp(Order) >= 0 {
+		k.Mod(kIn, Order)
+	} else {
+		k.Set(kIn)
+	}
+	if k.Sign() == 0 {
+		return nil, 0
+	}
+	// This assumes that unsigned long long, in C land, is 64-bits.
+	bitLen := k.BitLen()
+	numWords := (bitLen + 63) / 64
+	words := make([]uint64, numWords)
+	for i := range words {
+		words[i] = k.Uint64()
+		k.Rsh(k, 64)
+	}
+
+	return words, bitLen
+}
+
+func (e *G1) ScalarMult(base *G1, k *big.Int) *G1 {
+	words, bitLen := powerToWords(k)
+	if bitLen == 0 {
+		C.g1_set(&e.p, &base.p)
+	} else {
+		C.g1_make_affine(&base.p)
+		C.g1_scalar_mult(&e.p, &base.p, (*C.ulonglong)(unsafe.Pointer(&words[0])), C.unsigned(bitLen))
+	}
+	return e
+}
+
+func (e *G1) ScalarBaseMult(k *big.Int) *G1 {
+	return e.ScalarMult(baseG1, k)
+}
+
+func (e *G1) Unmarshal(m []byte) (*G1, bool) {
+	if len(m) != numBytes*2 {
+		return nil, false
+	}
+
+	c := newConvertContext()
+	c.bytesToDoubles(m[:numBytes])
+	c.setG1X(e)
+	c.bytesToDoubles(m[numBytes:])
+	c.setG1Y(e)
+	C.g1_init_zt(&e.p)
+
+	return e, true
+}
+
+type G2 struct {
+	p C.struct_g2
+}
+
+func (e *G2) Add(a, b *G2) *G2 {
+	C.g2_add(&e.p, &a.p, &b.p)
+	return e
+}
+
+func (e *G2) Marshal() []byte {
+	out := make([]byte, numBytes*4)
+	C.g2_make_affine(&e.p)
+
+	c := newConvertContext()
+	c.doublesFP2ToBytes(out, C.g2_x(&e.p))
+	c.doublesFP2ToBytes(out[2*numBytes:], C.g2_y(&e.p))
+
+	return out
+}
+
+func (e *G2) String() string {
+	C.g2_make_affine(&e.p)
+	c := newConvertContext()
+	xa := c.doublesFP2ToInt(new(big.Int), C.g2_x(&e.p), 1)
+	xb := c.doublesFP2ToInt(new(big.Int), C.g2_x(&e.p), 0)
+	ya := c.doublesFP2ToInt(new(big.Int), C.g2_y(&e.p), 1)
+	yb := c.doublesFP2ToInt(new(big.Int), C.g2_y(&e.p), 0)
+	return "bn256.G2((" + xa.String() + ", " + xb.String() + "), (" + ya.String() + ", " + yb.String() + "))"
+}
+
+func (e *G2) Neg(a *G2) {
+	C.g2_neg(&e.p, &a.p)
+}
+
+var baseG2 *G2
+
+func init() {
+	baseG2 = new(G2)
+	C.g2_set_gen(&baseG2.p)
+}
+
+func (e *G2) ScalarMult(base *G2, k *big.Int) *G2 {
+	words, bitLen := powerToWords(k)
+	if bitLen == 0 {
+		C.g2_set(&e.p, &base.p)
+	} else {
+		C.g2_make_affine(&base.p)
+		C.g2_scalar_mult(&e.p, &base.p, (*C.ulonglong)(unsafe.Pointer(&words[0])), C.unsigned(bitLen))
+	}
+	return e
+}
+
+func (e *G2) ScalarBaseMult(k *big.Int) *G2 {
+	return e.ScalarMult(baseG2, k)
+}
+
+func (e *G2) Unmarshal(m []byte) (*G2, bool) {
+	if len(m) != numBytes*4 {
+		return nil, false
+	}
+
+	c := newConvertContext()
+	c.bytesToDoublesFP2(m[:numBytes*2])
+	c.setG2X(e)
+	c.bytesToDoublesFP2(m[numBytes*2:])
+	c.setG2Y(e)
+	C.g2_init_zt(&e.p)
+
+	return e, true
+}
+
+type GT struct {
+	p C.struct_gt
+}
+
+func Pair(g1 *G1, g2 *G2) *GT {
+	ret := new(GT)
+	C.pair(&ret.p, &g1.p, &g2.p)
+	return ret
+}
+
+func (e *GT) Add(a, b *GT) *GT {
+	C.gt_mul(&e.p, &a.p, &b.p)
+	return e
+}
+
+func (e *GT) Marshal() []byte {
+	out := make([]byte, numBytes*12)
+
+	c := newConvertContext()
+	c.doublesFP2ToBytes(out[0*numBytes:], C.gt_aa(&e.p))
+	c.doublesFP2ToBytes(out[2*numBytes:], C.gt_ab(&e.p))
+	c.doublesFP2ToBytes(out[4*numBytes:], C.gt_ac(&e.p))
+	c.doublesFP2ToBytes(out[6*numBytes:], C.gt_ba(&e.p))
+	c.doublesFP2ToBytes(out[8*numBytes:], C.gt_bb(&e.p))
+	c.doublesFP2ToBytes(out[10*numBytes:], C.gt_bc(&e.p))
+
+	return out
+}
+
+func (e *GT) String() string {
+	c := newConvertContext()
+	a := c.doublesFP2ToInt(new(big.Int), C.gt_aa(&e.p), 1).String()
+	b := c.doublesFP2ToInt(new(big.Int), C.gt_aa(&e.p), 0).String()
+	cc := c.doublesFP2ToInt(new(big.Int), C.gt_ab(&e.p), 1).String()
+	d := c.doublesFP2ToInt(new(big.Int), C.gt_ab(&e.p), 0).String()
+	ee := c.doublesFP2ToInt(new(big.Int), C.gt_ac(&e.p), 1).String()
+	f := c.doublesFP2ToInt(new(big.Int), C.gt_ac(&e.p), 0).String()
+	g := c.doublesFP2ToInt(new(big.Int), C.gt_ba(&e.p), 1).String()
+	h := c.doublesFP2ToInt(new(big.Int), C.gt_ba(&e.p), 0).String()
+	i := c.doublesFP2ToInt(new(big.Int), C.gt_bb(&e.p), 1).String()
+	j := c.doublesFP2ToInt(new(big.Int), C.gt_bb(&e.p), 0).String()
+	k := c.doublesFP2ToInt(new(big.Int), C.gt_bc(&e.p), 1).String()
+	l := c.doublesFP2ToInt(new(big.Int), C.gt_bc(&e.p), 0).String()
+
+	return "GF12(" + strings.Join([]string{a, b, cc, d, ee, f, g, h, i, j, k, l}, ",") + ")"
+}
+
+func (e *GT) Neg(a *GT) *GT {
+	C.gt_neg(&e.p, &a.p)
+	return e
+}
+
+func (e *GT) ScalarMult(base *GT, k *big.Int) *GT {
+	words, bitLen := powerToWords(k)
+	if bitLen == 0 {
+		C.gt_set(&e.p, &base.p)
+	} else {
+		C.gt_scalar_mult(&e.p, &base.p, (*C.ulonglong)(unsafe.Pointer(&words[0])), C.unsigned(bitLen))
+	}
+	return e
+}
+
+func (e *GT) Unmarshal(m []byte) (*GT, bool) {
+	if len(m) != numBytes*12 {
+		return nil, false
+	}
+
+	c := newConvertContext()
+	c.bytesToDoublesFP2(m[0*numBytes : 2*numBytes])
+	c.setGTAA(e)
+	c.bytesToDoublesFP2(m[2*numBytes : 4*numBytes])
+	c.setGTAB(e)
+	c.bytesToDoublesFP2(m[4*numBytes : 6*numBytes])
+	c.setGTAC(e)
+	c.bytesToDoublesFP2(m[6*numBytes : 8*numBytes])
+	c.setGTBA(e)
+	c.bytesToDoublesFP2(m[8*numBytes : 10*numBytes])
+	c.setGTBB(e)
+	c.bytesToDoublesFP2(m[10*numBytes : 12*numBytes])
+	c.setGTBC(e)
+
+	return e, true
+}
+
+// RandomG1 returns x and g₁ˣ where x is a random, non-zero number read from r.
+func RandomG1(r io.Reader) (*big.Int, *G1, error) {
+	var k *big.Int
+	var err error
+
+	for {
+		k, err = rand.Int(r, Order)
+		if err != nil {
+			return nil, nil, err
+		}
+		if k.Sign() > 0 {
+			break
+		}
+	}
+
+	return k, new(G1).ScalarBaseMult(k), nil
+}
+
+// RandomG2 returns x and g₂ˣ where x is a random, non-zero number read from r.
+func RandomG2(r io.Reader) (*big.Int, *G2, error) {
+	var k *big.Int
+	var err error
+
+	for {
+		k, err = rand.Int(r, Order)
+		if err != nil {
+			return nil, nil, err
+		}
+		if k.Sign() > 0 {
+			break
+		}
+	}
+
+	return k, new(G2).ScalarBaseMult(k), nil
+}
diff --git a/bn256cgo/bn256_test.go b/bn256cgo/bn256_test.go
new file mode 100644
index 0000000..73cee63
--- /dev/null
+++ b/bn256cgo/bn256_test.go
@@ -0,0 +1,96 @@
+package bn256cgo
+
+import (
+	"bytes"
+	"math/big"
+	"testing"
+
+	"golang.org/x/crypto/bn256"
+)
+
+func TestPowers(t *testing.T) {
+	power := big.NewInt(1)
+	bigOne := big.NewInt(1)
+
+	for i := 0; i < 150; i++ {
+		a := new(G1).ScalarBaseMult(power).Marshal()
+		b := new(bn256.G1).ScalarBaseMult(power).Marshal()
+		if !bytes.Equal(a, b) {
+			t.Errorf("failed at power %s: %x vs %x", power, a, b)
+		}
+		power.Lsh(power, 1)
+		if i&1 == 1 {
+			power.Add(power, bigOne)
+		}
+	}
+}
+
+func TestMarshalUnmarshal(t *testing.T) {
+	a := new(G1).ScalarBaseMult(big.NewInt(66))
+	serialise1 := a.Marshal()
+	b, ok := new(G1).Unmarshal(serialise1)
+	if !ok {
+		t.Fatalf("Unmarshal failed")
+	}
+	serialise2 := b.Marshal()
+	if !bytes.Equal(serialise1, serialise2) {
+		t.Errorf("Marshal/Unmarshal round trip failed, got: %x want: %x", serialise2, serialise1)
+	}
+}
+
+func TestPowersG2(t *testing.T) {
+	power := big.NewInt(1)
+	bigOne := big.NewInt(1)
+
+	for i := 0; i < 150; i++ {
+		a := new(G2).ScalarBaseMult(power).Marshal()
+		b := new(bn256.G2).ScalarBaseMult(power).Marshal()
+		if !bytes.Equal(a, b) {
+			t.Errorf("failed at power %s: %x vs %x", power, a, b)
+		}
+		power.Lsh(power, 1)
+		if i&1 == 1 {
+			power.Add(power, bigOne)
+		}
+	}
+}
+
+func TestMarshalUnmarshalG2(t *testing.T) {
+	a := new(G2).ScalarBaseMult(big.NewInt(66))
+	serialise1 := a.Marshal()
+	b, ok := new(G2).Unmarshal(serialise1)
+	if !ok {
+		t.Fatalf("Unmarshal failed")
+	}
+	serialise2 := b.Marshal()
+	if !bytes.Equal(serialise1, serialise2) {
+		t.Errorf("Marshal/Unmarshal round trip failed, got: %x want: %x", serialise2, serialise1)
+	}
+}
+
+func TestMarshalUnmarshalGT(t *testing.T) {
+	a := Pair(new(G1).ScalarBaseMult(big.NewInt(44)), new(G2).ScalarBaseMult(big.NewInt(22)))
+	serialise1 := a.Marshal()
+	b, ok := new(GT).Unmarshal(serialise1)
+	if !ok {
+		t.Fatalf("Unmarshal failed")
+	}
+	serialise2 := b.Marshal()
+	if !bytes.Equal(serialise1, serialise2) {
+		t.Errorf("Marshal/Unmarshal round trip failed, got:\n%x\nwant:\n%x", serialise2, serialise1)
+	}
+}
+
+func TestPairing(t *testing.T) {
+	a := bn256.Pair(new(bn256.G1).ScalarBaseMult(big.NewInt(2)), new(bn256.G2).ScalarBaseMult(big.NewInt(1))).Marshal()
+	b := Pair(new(G1).ScalarBaseMult(big.NewInt(2)), new(G2).ScalarBaseMult(big.NewInt(1))).Marshal()
+	base := Pair(new(G1).ScalarBaseMult(big.NewInt(1)), new(G2).ScalarBaseMult(big.NewInt(1)))
+	b2 := new(GT).Add(base, base).Marshal()
+
+	if !bytes.Equal(a, b) {
+		t.Errorf("Pairings differ\ngot:  %x\nwant: %x", a, b)
+	}
+	if !bytes.Equal(b, b2) {
+		t.Errorf("Pair(2,1) != 2*Pair(1,1)\ngot:  %x\nwant: %x", b, b2)
+	}
+}
diff --git a/bn256cgo/int_test.go b/bn256cgo/int_test.go
new file mode 100644
index 0000000..59b78d6
--- /dev/null
+++ b/bn256cgo/int_test.go
@@ -0,0 +1,49 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bn256cgo
+
+import (
+	"bytes"
+	"crypto/rand"
+	"math/big"
+	"testing"
+)
+
+func TestTripartiteDiffieHellman(t *testing.T) {
+	a, _ := rand.Int(rand.Reader, Order)
+	b, _ := rand.Int(rand.Reader, Order)
+	c, _ := rand.Int(rand.Reader, Order)
+
+	pa, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(a).Marshal())
+	qa, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(a).Marshal())
+	pb, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(b).Marshal())
+	qb, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(b).Marshal())
+	pc, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(c).Marshal())
+	qc, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(c).Marshal())
+
+	k1 := Pair(pb, qc)
+	k1.ScalarMult(k1, a)
+	k1Bytes := k1.Marshal()
+
+	k2 := Pair(pc, qa)
+	k2.ScalarMult(k2, b)
+	k2Bytes := k2.Marshal()
+
+	k3 := Pair(pa, qb)
+	k3.ScalarMult(k3, c)
+	k3Bytes := k3.Marshal()
+
+	if !bytes.Equal(k1Bytes, k2Bytes) || !bytes.Equal(k2Bytes, k3Bytes) {
+		t.Errorf("keys didn't agree")
+	}
+}
+
+func BenchmarkPairing(b *testing.B) {
+	g1 := new(G1).ScalarBaseMult(big.NewInt(44))
+	g2 := new(G2).ScalarBaseMult(big.NewInt(55))
+	for i := 0; i < b.N; i++ {
+		Pair(g1, g2)
+	}
+}
diff --git a/client/TODO b/client/TODO
new file mode 100644
index 0000000..3ef5ff6
--- /dev/null
+++ b/client/TODO
@@ -0,0 +1,50 @@
+Short-term TODOs:
+
+ ? Add delay to server responses.
+Compress messages
+
+Update ratchet
+Use single point for both signing and ECDH.
+
+
+Minor, non-urgent:
+
+Expose server queue length in fetches
+
+
+BUGS:
+
+A key exchange should send the group that's currently on the server, not the current group.
+
+
+This is a TODO list for the CLI interface to Pond:
+
+Add a message that indicates the inbox queue as well as the outbox queue.
+Add an emergency flush command to flush the queue.
+Add a Delete button to the outbox.
+Add the status of the to-be-flushed messages to the status()
+Add an Audio alert for a new message?
+Add an abort command for outgoing messages.
+Add a delete command for the outgoing messages.
+Document the Pond Key Exchange blob:
+
+  https://github.com/agl/pond/blob/master/protos/pond.proto#L161
+
+Show timer for next fetch
+Confirm password on CLI when it is set for the first time
+Ensure that messages don't flush and PANDA doesn't run at startup.
+
+Document errors such as the following:
+> error from server: GENERATION_REVOKED
+
+"It means that the contact revoked a group member key. That means that everyone
+who has a group member key needs to process the update (and the revoked contact
+will end up with a divide by zero and cannot update). The server rejected your
+message because it was signed under an old group key, but the server will have
+returned the update with the error. Pond will resign the outgoing message and
+it'll be transmitted again in two cycles."
+
+
+Document the easy way to build the CLI:
+
+go build -tags nogui && go install -tags nogui
diff --git a/client/abstractgui.go b/client/abstractgui.go
new file mode 100644
index 0000000..4e02dc7
--- /dev/null
+++ b/client/abstractgui.go
@@ -0,0 +1,412 @@
+// +build !nogui
+
+package main
+
+const uiActionsQueueLen = 256
+
+// GUI contains an abstraction layer that models GTK pretty closely.  This is
+// used to allow the GUI to run in a separate goroutine and also to allow
+// unittesting.
+type GUI interface {
+	// Actions returns a channel to which GUI actions can be written for
+	// execution by the GUI.
+	Actions() chan<- interface{}
+	// Events returns a channel from which events from the GUI can be read.
+	Events() <-chan interface{}
+	// Signal causes the GUI to process pending actions that have been
+	// written to the channel returned by Actions(). The GUI may process
+	// actions at any time but calling Signal ensures that all actions
+	// currently pending will be executed. Signal does not wait for
+	// pending actions to complete.
+	Signal()
+	// Run() starts the GUI's main loop and never returns.
+	Run()
+}
+
+const (
+	AlignNone = iota
+	AlignStart
+	AlignEnd
+	AlignFill
+	AlignCenter
+)
+
+// Widgets
+//
+// Widget structures mirror the similar widgets in GTK+ and their members
+// mirror GTK+ properties. The GTK+ documentation is the best source of
+// information.
+
+// Widget is the base type of all widgets. It's sole implementation should be
+// widgetBase, which should itself be embedded in all structs that represent
+// widgets.
+type Widget interface {
+	Name() string
+	Padding() uint
+	Expand() bool
+	Fill() bool
+	PackEnd() bool
+	Foreground() uint32
+	Background() uint32
+	Focused() bool
+}
+
+type widgetBase struct {
+	// name contains a freeform identifier for a widget. The name should be
+	// unique across all widgets that are currently live.
+	name                   string
+	padding                uint
+	expand, fill           bool
+	packEnd                bool
+	foreground, background uint32
+	focused                bool
+	insensitive            bool
+	width, height          int
+	font                   string
+	hExpand, vExpand       bool
+	margin                 int
+	marginTop              int
+	marginBottom           int
+	marginLeft             int
+	vAlign, hAlign         int
+}
+
+func (w widgetBase) Name() string {
+	return w.name
+}
+
+func (w widgetBase) PackEnd() bool {
+	return w.packEnd
+}
+
+func (w widgetBase) Padding() uint {
+	return w.padding
+}
+
+func (w widgetBase) Expand() bool {
+	return w.expand
+}
+
+func (w widgetBase) Fill() bool {
+	return w.fill
+}
+
+func (w widgetBase) Foreground() uint32 {
+	return w.foreground
+}
+
+func (w widgetBase) Background() uint32 {
+	return w.background
+}
+
+func (w widgetBase) Focused() bool {
+	return w.focused
+}
+
+type VBox struct {
+	widgetBase
+	spacing  uint
+	children []Widget
+}
+
+type HBox struct {
+	widgetBase
+	spacing  uint
+	children []Widget
+}
+
+type EventBox struct {
+	widgetBase
+	child Widget
+}
+
+type Label struct {
+	widgetBase
+	text           string
+	markup         string
+	size           int
+	xAlign, yAlign float32
+	wrap           int
+	selectable     bool
+}
+
+type Entry struct {
+	widgetBase
+	text           string
+	width          int
+	password       bool
+	updateOnChange bool
+}
+
+type Button struct {
+	widgetBase
+	text   string
+	markup string
+	image  Indicator
+}
+
+type Spinner struct {
+	widgetBase
+}
+
+type Paned struct {
+	widgetBase
+	left  Widget
+	right Widget
+}
+
+type Scrolled struct {
+	widgetBase
+	child      Widget
+	horizontal bool
+	viewport   bool
+}
+
+type TextView struct {
+	widgetBase
+	editable       bool
+	text           string
+	wrap           bool
+	updateOnChange bool
+	spellCheck     bool
+}
+
+type Combo struct {
+	widgetBase
+	labels      []string
+	preSelected string
+}
+
+type Grid struct {
+	widgetBase
+	rows           [][]GridE
+	rowSpacing     int
+	colSpacing     int
+	rowHomogeneous bool
+	colHomogeneous bool
+}
+
+type GridE struct {
+	width  int
+	height int
+	widget Widget
+}
+
+type RadioGroup struct {
+	widgetBase
+	labels []string
+}
+
+type Calendar struct {
+	widgetBase
+}
+
+type SpinButton struct {
+	widgetBase
+	min, max, step float64
+}
+
+type CheckButton struct {
+	widgetBase
+	checked bool
+	text    string
+}
+
+type Image struct {
+	widgetBase
+	image          Indicator
+	xAlign, yAlign float32
+}
+
+type Frame struct {
+	widgetBase
+	child Widget
+}
+
+type Progress struct {
+	widgetBase
+}
+
+// Actions
+//
+// These structures can be sent on the channel returned by Actions() in order
+// to perform GUI actions.
+
+// InsertRow adds an extra row to a Grid.
+type InsertRow struct {
+	name string
+	pos  int
+	row  []GridE
+}
+
+// GridSet sets the element at the given position in the grid.
+type GridSet struct {
+	name     string
+	col, row int
+	widget   Widget
+}
+
+// Reset replaces the top-level widget with root.
+type Reset struct {
+	root Widget
+}
+
+// Append adds widgets to a named, container widget.
+type Append struct {
+	name     string
+	children []Widget
+}
+
+// AddToBox adds a child widget at a specific location in a box widget.
+type AddToBox struct {
+	box   string
+	pos   int
+	child Widget
+}
+
+type SetChild struct {
+	name  string
+	child Widget
+}
+
+type SetBoxContents struct {
+	name  string
+	child Widget
+}
+
+type Sensitive struct {
+	name      string
+	sensitive bool
+}
+
+type SetBackground struct {
+	name  string
+	color uint32
+}
+
+type StartSpinner struct {
+	name string
+}
+
+type StopSpinner struct {
+	name string
+}
+
+type SetText struct {
+	name string
+	text string
+}
+
+type SetButtonText struct {
+	name string
+	text string
+}
+
+type SetEntry struct {
+	name string
+	text string
+}
+
+type SetTextView struct {
+	name string
+	text string
+}
+
+type SetImage struct {
+	name  string
+	image Indicator
+}
+
+type SetFocus struct {
+	name string
+}
+
+type ScrollTextViewToEnd struct {
+	name string
+}
+
+type Destroy struct {
+	name string
+}
+
+// FileOpen starts a file dialog.
+type FileOpen struct {
+	save  bool
+	title string
+	// filename contains the suggested filename in the case that save is
+	// true.
+	filename string
+	// arg is an arbitary value that is passed in the corresponding
+	// OpenResult event.
+	arg interface{}
+}
+
+type SetForeground struct {
+	name       string
+	foreground uint32
+}
+
+type SetProgress struct {
+	name     string
+	fraction float64
+	s        string
+}
+
+type SetTitle struct {
+	title string
+}
+
+// UIState is a message that is ignored by a real GUI, but is used for
+// synchronisation with unittests.
+type UIState struct {
+	stateID int
+}
+
+// UIError is a message that is ignored by a real GUI, but is used for
+// communication with unittests.
+type UIError struct {
+	err error
+}
+
+// UIInfo is used for passing information to the unittests.
+type UIInfo struct {
+	info string
+}
+
+// Events
+//
+// Events are received on the channel returned by Events().
+
+// Click is a very generic event that can be triggered by any sort of
+// activation - not just mouse clicks. Because the GUI abstraction is
+// asynchronous, the Click message contains the state of the GUI at the time of
+// the click. Otherwise, further messages to obtain the state of other widgets
+// at the time of the event would return the current values, as opposed to the
+// values at the event time.
+type Click struct {
+	name        string
+	entries     map[string]string
+	textViews   map[string]string
+	combos      map[string]string
+	checks      map[string]bool
+	radios      map[string]int
+	calendars   map[string]CalendarDate
+	spinButtons map[string]int
+}
+
+type CalendarDate struct {
+	year, month, day int
+}
+
+// Update can result when the contents of a text entry are changed.
+type Update struct {
+	name string
+	text string
+}
+
+// OpenResult results from the completion of a file dialog.
+type OpenResult struct {
+	ok   bool
+	path string
+	arg  interface{}
+}
diff --git a/client/background.go b/client/background.go
new file mode 100644
index 0000000..c364b6d
--- /dev/null
+++ b/client/background.go
@@ -0,0 +1,338 @@
+package main
+
+import (
+	"errors"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"net/url"
+	"os"
+	"path/filepath"
+	"time"
+
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/nacl/secretbox"
+)
+
+var backgroundCanceledError = errors.New("background task canceled")
+
+func (c *client) startEncryption(id uint64, outPath, inPath string) (cancel func()) {
+	killChan := make(chan bool, 1)
+	go func() {
+		var detachment *pond.Message_Detachment
+		var out *os.File
+		var err error
+		if out, err = os.OpenFile(outPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600); err != nil {
+			err = errors.New("failed to open output: " + err.Error())
+		} else {
+			defer out.Close()
+			detachment, err = saveEncrypted(c.rand, c.backgroundChan, out, id, inPath, killChan)
+		}
+		if detachment != nil {
+			c.backgroundChan <- DetachmentComplete{id, detachment}
+		} else {
+			os.Remove(outPath)
+			c.backgroundChan <- DetachmentError{id, err}
+		}
+	}()
+	return func() {
+		killChan <- true
+	}
+}
+
+func (c *client) startDecryption(id uint64, outPath, inPath string, detachment *pond.Message_Detachment) (cancel func()) {
+	killChan := make(chan bool, 1)
+	go func() {
+		var in *os.File
+		var err error
+		if in, err = os.Open(inPath); err != nil {
+			err = errors.New("failed to open input: " + err.Error())
+		} else {
+			defer in.Close()
+			err = saveDecrypted(c.backgroundChan, outPath, id, in, detachment, killChan)
+		}
+		if err != nil {
+			c.backgroundChan <- DetachmentError{id, err}
+		} else {
+			c.backgroundChan <- DetachmentComplete{id, nil}
+		}
+	}()
+	return func() {
+		killChan <- true
+	}
+}
+
+func (c *client) buildDetachmentURL(id uint64) string {
+	u, err := url.Parse(c.server)
+	if err != nil {
+		panic("own server failed to parse as URL")
+	}
+
+	u.Path = fmt.Sprintf("/%x/%x", c.identityPublic[:], id)
+	return u.String()
+}
+
+func (c *client) startUpload(id uint64, inPath string) (cancel func()) {
+	killChan := make(chan bool, 1)
+	go func() {
+		var detachment *pond.Message_Detachment
+		var tmp *os.File
+		var err error
+		if tmp, err = ioutil.TempFile("" /* default tmp dir */, "pond-upload-"); err != nil {
+			err = errors.New("failed to create temp file: " + err.Error())
+		} else {
+			os.Remove(tmp.Name())
+			defer tmp.Close()
+			detachment, err = saveEncrypted(c.rand, c.backgroundChan, tmp, id, inPath, killChan)
+			if err == nil {
+				err = c.uploadDetachment(c.backgroundChan, tmp, id, killChan)
+			}
+		}
+		if err == nil {
+			detachment.Url = proto.String(c.buildDetachmentURL(id))
+			c.log.Printf("Finished upload of %s", *detachment.Url)
+			c.backgroundChan <- DetachmentComplete{id, detachment}
+		} else {
+			c.backgroundChan <- DetachmentError{id, err}
+		}
+	}()
+	return func() {
+		killChan <- true
+	}
+}
+
+func (c *client) startDownload(id uint64, outPath string, detachment *pond.Message_Detachment) (cancel func()) {
+	killChan := make(chan bool, 1)
+	go func() {
+		var tmp *os.File
+		var err error
+		if tmp, err = ioutil.TempFile("" /* default tmp dir */, "pond-download-"); err != nil {
+			err = errors.New("failed to create temp file: " + err.Error())
+		} else {
+			os.Remove(tmp.Name())
+			defer tmp.Close()
+			err = c.downloadDetachment(c.backgroundChan, tmp, id, *detachment.Url, killChan)
+			if err == nil {
+				_, err := tmp.Seek(0, 0 /* from start */)
+				if err == nil {
+					err = saveDecrypted(c.backgroundChan, outPath, id, tmp, detachment, killChan)
+				}
+			}
+		}
+		if err == nil {
+			c.backgroundChan <- DetachmentComplete{id, nil}
+		} else {
+			c.backgroundChan <- DetachmentError{id, err}
+		}
+	}()
+	return func() {
+		killChan <- true
+	}
+}
+
+type DetachmentProgress struct {
+	id          uint64
+	done, total uint64
+	status      string
+}
+
+type DetachmentError struct {
+	id  uint64
+	err error
+}
+
+type DetachmentComplete struct {
+	id         uint64
+	detachment *pond.Message_Detachment
+}
+
+const defaultDetachmentBlockSize = 16384 - secretbox.Overhead
+
+func saveEncrypted(rand io.Reader, c chan interface{}, out io.Writer, id uint64, inPath string, killChan chan bool) (*pond.Message_Detachment, error) {
+	in, err := os.Open(inPath)
+	if err != nil {
+		return nil, errors.New("failed to open input: " + err.Error())
+	}
+	defer in.Close()
+
+	var size int64
+	if fileInfo, err := in.Stat(); err == nil {
+		size = fileInfo.Size()
+	}
+
+	var key [32]byte
+	var nonce [24]byte
+
+	if _, err := io.ReadFull(rand, key[:]); err != nil {
+		panic(err)
+	}
+
+	blockSize := defaultDetachmentBlockSize
+	buf := make([]byte, blockSize)
+
+	var fileSize, bytesOut uint64
+	var eof bool
+	var boxBuf []byte
+	var lastUpdate time.Time
+
+	for {
+		if !eof {
+			n, err := io.ReadFull(in, buf)
+			switch err {
+			case nil:
+				break
+			case io.ErrUnexpectedEOF, io.EOF:
+				eof = true
+			default:
+				return nil, errors.New("failed to read from source file: " + err.Error())
+			}
+			fileSize += uint64(n)
+		}
+		boxBuf = secretbox.Seal(boxBuf[:0], buf, &nonce, &key)
+
+		if _, err := out.Write(boxBuf); err != nil {
+			return nil, errors.New("failed to write to destination: " + err.Error())
+		}
+		bytesOut += uint64(len(boxBuf))
+
+		// Stop when we've read all of the file and have hit a power of
+		// two.
+		if eof && (bytesOut&(bytesOut-1)) == 0 {
+			break
+		}
+
+		incNonce(&nonce)
+
+		now := time.Now()
+		if size > 0 && (lastUpdate.IsZero() || now.Sub(lastUpdate) > 500*time.Millisecond) {
+			lastUpdate = now
+			select {
+			case c <- DetachmentProgress{
+				id:     id,
+				done:   fileSize,
+				total:  uint64(size),
+				status: "encrypting",
+			}:
+				break
+			default:
+			}
+		}
+
+		select {
+		case <-killChan:
+			return nil, backgroundCanceledError
+		default:
+			break
+		}
+	}
+
+	return &pond.Message_Detachment{
+		Filename:   proto.String(filepath.Base(inPath)),
+		Size:       proto.Uint64(fileSize),
+		PaddedSize: proto.Uint64(bytesOut),
+		ChunkSize:  proto.Uint32(uint32(blockSize)),
+		Key:        key[:],
+	}, nil
+}
+
+func saveDecrypted(c chan interface{}, outPath string, id uint64, in *os.File, detachment *pond.Message_Detachment, killChan chan bool) error {
+	out, err := os.OpenFile(outPath, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
+	if err != nil {
+		return errors.New("failed to open output: " + err.Error())
+	}
+	defer out.Close()
+
+	var key [32]byte
+	var nonce [24]byte
+
+	blockSize := *detachment.ChunkSize + secretbox.Overhead
+	if blockSize > 1<<20 {
+		return errors.New("chunk size too large")
+	}
+
+	copy(key[:], detachment.Key)
+
+	var bytesIn, bytesOut uint64
+	buf := make([]byte, blockSize)
+	var decrypted []byte
+	var lastUpdate time.Time
+
+BlockLoop:
+	for {
+		n, err := io.ReadFull(in, buf)
+		switch err {
+		case nil:
+			break
+		case io.ErrUnexpectedEOF, io.EOF:
+			break BlockLoop
+		default:
+			return errors.New("failed to read from source: " + err.Error())
+		}
+
+		bytesIn += uint64(n)
+		var ok bool
+		decrypted, ok = secretbox.Open(decrypted[:0], buf, &nonce, &key)
+		if !ok {
+			os.Remove(outPath)
+			return errors.New("input corrupt")
+		}
+
+		if bytesOut != *detachment.Size {
+			if n := bytesOut + uint64(len(decrypted)); n > *detachment.Size {
+				decrypted = decrypted[:*detachment.Size-bytesOut]
+			}
+			bytesOut += uint64(len(decrypted))
+
+			if _, err := out.Write(decrypted); err != nil {
+				return errors.New("failed to write to destination: " + err.Error())
+			}
+		}
+
+		if bytesIn > *detachment.PaddedSize {
+			// This means that we downloaded more bytes than we
+			// expected.
+			break
+		}
+
+		incNonce(&nonce)
+
+		now := time.Now()
+		if lastUpdate.IsZero() || now.Sub(lastUpdate) > 500*time.Millisecond {
+			lastUpdate = now
+			select {
+			case c <- DetachmentProgress{
+				id:     id,
+				done:   bytesIn,
+				total:  *detachment.PaddedSize,
+				status: "decrypting",
+			}:
+				break
+			default:
+			}
+		}
+
+		select {
+		case <-killChan:
+			os.Remove(outPath)
+			return backgroundCanceledError
+		default:
+			break
+		}
+	}
+
+	if bytesIn != *detachment.PaddedSize {
+		return errors.New("input truncated")
+	}
+
+	return nil
+}
+
+func incNonce(nonce *[24]byte) {
+	s := 1
+	for i, b := range nonce[:] {
+		s += int(b)
+		nonce[i] = byte(s)
+		s >>= 8
+	}
+}
diff --git a/client/build-osx-bundle.sh b/client/build-osx-bundle.sh
new file mode 100644
index 0000000..ddbf1ef
--- /dev/null
+++ b/client/build-osx-bundle.sh
@@ -0,0 +1,152 @@
+rm -Rf Pond.app
+mkdir -p Pond.app/Contents/MacOS
+frameworks=Pond.app/Contents/F
+resources=Pond.app/Contents/Resources
+mkdir -p $frameworks
+mkdir $resources
+macos=Pond.app/Contents/MacOS
+binary=$macos/Pond.bin
+wrapper=$macos/Pond
+cellar=/usr/local/Cellar
+
+cp -av client $binary
+cat > $wrapper << EOF
+#!/bin/bash
+
+cd \$(dirname \$0)
+exec ./Pond.bin
+EOF
+chmod a+x $wrapper
+
+rewrite_library() {
+  for lib in $(otool -L $1 | grep '^\t/usr/local' | sed -e 's/^[^\/]*//' -e 's/ .*//'); do
+    base=$(basename $lib)
+    if [ ! -f $frameworks/$base ] ; then
+      cp $lib $frameworks
+    fi
+    chmod u+w $1
+    install_name_tool -change $lib @executable_path/../F/$base $1
+    if [ $(basename $1) != $base ] ; then
+      rewrite_library $frameworks/$base
+    fi
+  done
+}
+
+for lib in $(otool -L ./client | grep '^\t/usr/local' | sed -e 's/^[^\/]*//' -e 's/ .*//'); do
+  base=$(basename $lib)
+  cp $lib $frameworks
+  install_name_tool -change $lib @executable_path/../F/$base $binary
+  rewrite_library $frameworks/$base
+done
+
+pango_etc=$(strings $frameworks/libpango-1.0.0.dylib  | grep usr/local | grep etc)
+pango_lib=$(strings $frameworks/libpango-1.0.0.dylib  | grep usr/local | grep lib)
+
+cp -a $(dirname $pango_etc) $resources
+cp -a $(dirname $pango_lib) $resources
+
+sed -i -e 's![^ ]*/\([^/ ]*\) !\1 !' $(find $resources -name pango.modules)
+
+mkdir -p $resources/lib/gdk-pixbuf-2.0/2.10.0
+cat > $resources/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache << EOF
+"../F/libpixbufloader-png.so"
+"png" 5 "gdk-pixbuf" "The PNG image format" "LGPL"
+"image/png" ""
+"png" ""
+"\211PNG\r\n\032\n" "" 100
+
+
+EOF
+
+cp $(find $cellar/gdk-pixbuf -name libpixbufloader-png.so | head -n 1) $frameworks
+rewrite_library $frameworks/libpixbufloader-png.so
+
+mkdir -p $resources/share/locale
+for dir in $(find $cellar -name locale -type d); do
+  cp -a $dir/* $resources/share/locale
+done
+
+(
+  cd $resources/share/locale
+  find . -type d -maxdepth 1 | grep -v '^\./en' | xargs rm -Rf
+)
+
+mkdir -p $resources/share/enchant
+cp -a $cellar/enchant/1.6.0/share/enchant/* $resources/share/enchant
+mkdir -p $resources/lib/enchant
+cp -a $cellar/enchant/1.6.0/lib/enchant/* $resources/lib/enchant
+rewrite_library $resources/lib/enchant/libenchant_aspell.so
+mkdir -p $resources/lib/aspell-0.60
+cp -a $cellar/aspell/0.60.6.1/lib/aspell-0.60/* $resources/lib/aspell-0.60
+# When libaspell has a relative prefix directory, it goes crazy. I can't figure out where the crazy is coming from so we just go with it and put the files in the directory that it expects.
+mkdir -p $resources/lib/Resources/lib/aspell-0.60
+mkdir -p $resources/lib/Resources/lib/Resources/lib/aspell-0.60
+(
+  cd $resources/lib/Resources/lib/Resources/lib/aspell-0.60
+  for x in $(find ../../../../../aspell-0.60 -type f); do
+    ln -s $x .
+  done
+) 
+
+mkdir -p $resources/etc/gtk-3.0
+mkdir -p $resources/share/themes
+cat > $resources/etc/gtk-3.0/settings.ini << EOF
+[Settings]
+gtk-theme-name=Adwaita
+EOF
+
+cp -a ~/Adwaita $resources/share/themes
+
+cat >> $resources/share/themes/Adwaita/gtk-3.0/gtk.css << EOF
+
+ at binding-set AppleClipboard {
+  bind "<Meta>V" { "paste-clipboard" ( ) };
+  bind "<Meta>X" { "cut-clipboard" ( ) };
+  bind "<Meta>C" { "copy-clipboard" ( ) };
+};
+GtkTextView {
+  gtk-key-bindings: AppleClipboard;
+}
+GtkEntry {
+  gtk-key-bindings: AppleClipboard;
+}
+EOF
+
+for lib in $(ls -1 $frameworks); do
+  ../pathrewrite/pathrewrite $frameworks/$lib
+done
+
+cat > Pond.app/Contents/Info.plist << EOF
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+    <key>CFBundleName</key>
+    <string>Pond</string>
+    <key>CFBundleIdentifier</key>
+    <string>org.imperialviolet.pond</string>
+    <key>CFBundleVersion</key>
+    <string>0.1</string>
+    <key>CFBundleAllowMixedLocalizations</key>
+    <string>true</string>
+    <key>CFBundleDevelopmentRegion</key>
+    <string>English</string>
+    <key>CFBundlePackageType</key>
+    <string>APPL</string>
+    <key>CFBundleInfoDictionaryVersion</key>
+    <string>6.0</string>
+    <key>NSHumanReadableCopyright</key>
+    <string>Copyright Pond developers 2013</string>
+    <key>CFBundleGetInfoString</key>
+    <string>Pond, © 2013 Pond developers</string>
+    <key>CFBundleDisplayName</key>
+    <string>Pond</string>
+    <key>NSHighResolutionCapable</key>
+    <true/>
+    <key>CFBundleIconFile</key>
+    <string>pond.icns</string>
+</dict>
+</plist>
+EOF
+
+cp pond.icns $resources
diff --git a/client/cli-input.go b/client/cli-input.go
new file mode 100644
index 0000000..291c624
--- /dev/null
+++ b/client/cli-input.go
@@ -0,0 +1,619 @@
+package main
+
+import (
+	"bytes"
+	"fmt"
+	"os"
+	"path/filepath"
+	"reflect"
+	"sort"
+	"strconv"
+	"strings"
+
+	"golang.org/x/crypto/ssh/terminal"
+)
+
+type cliCommand struct {
+	name      string
+	prototype interface{}
+	desc      string
+	context   inputContext
+}
+
+// inputContext is a flags type that indicates which contexts a given CLI
+// command is valid in.
+type inputContext int
+
+const (
+	contextInbox inputContext = 1 << iota
+	contextOutbox
+	contextDraft
+	contextContact
+)
+
+var cliCommands = []cliCommand{
+	{"abort", abortCommand{}, "Abort sending the current outbox message", contextOutbox},
+	{"acknowledge", ackCommand{}, "Acknowledge the inbox message", contextInbox},
+	{"attach", attachCommand{}, "Attach a file to the current draft", contextDraft},
+	{"clear", clearCommand{}, "Clear terminal", 0},
+	{"close", closeCommand{}, "Close currently opened object", contextDraft | contextInbox | contextOutbox | contextContact},
+	{"compose", composeCommand{}, "Compose a new message", contextContact},
+	{"contacts", showContactsCommand{}, "Show all known contacts", 0},
+	{"delete", deleteCommand{}, "Delete a message or contact", contextContact | contextDraft | contextInbox | contextOutbox},
+	{"download", downloadCommand{}, "Download a numbered detachment to disk", contextInbox},
+	{"drafts", showDraftsSummaryCommand{}, "Show drafts", 0},
+	{"edit", editCommand{}, "Edit the draft message", contextDraft},
+	{"help", helpCommand{}, "List known commands", 0},
+	{"identity", showIdentityCommand{}, "Show identity", 0},
+	{"inbox", showInboxSummaryCommand{}, "Show the Inbox", 0},
+	{"log", logCommand{}, "Show recent log entries", 0},
+	{"new-contact", newContactCommand{}, "Start a key exchange with a new contact", 0},
+	{"outbox", showOutboxSummaryCommand{}, "Show the Outbox", 0},
+	{"queue", showQueueStateCommand{}, "Show the queue", 0},
+	{"quit", quitCommand{}, "Exit Pond", 0},
+	{"remove", removeCommand{}, "Remove an attachment or detachment from a draft message", contextDraft},
+	{"rename", renameCommand{}, "Rename an existing contact", contextContact},
+	{"reply", replyCommand{}, "Reply to the current message", contextInbox},
+	{"retain", retainCommand{}, "Retain the current message", contextInbox},
+	{"dont-retain", dontRetainCommand{}, "Do not retain the current message", contextInbox},
+	{"save", saveCommand{}, "Save a numbered attachment to disk", contextInbox},
+	{"save-key", saveKeyCommand{}, "Save the key to a detachment to disk", contextInbox},
+	{"send", sendCommand{}, "Send the current draft", contextDraft},
+	{"show", showCommand{}, "Show the current object", contextDraft | contextInbox | contextOutbox | contextContact},
+	{"status", statusCommand{}, "Show overall Pond status", 0},
+	{"transact-now", transactNowCommand{}, "Perform a network transaction now", 0},
+	{"upload", uploadCommand{}, "Upload a file to home server and include key in current draft", contextDraft},
+}
+
+type abortCommand struct{}
+type ackCommand struct{}
+type clearCommand struct{}
+type closeCommand struct{}
+type composeCommand struct{}
+type deleteCommand struct{}
+type editCommand struct{}
+type logCommand struct{}
+type quitCommand struct{}
+type replyCommand struct{}
+type retainCommand struct{}
+type dontRetainCommand struct{}
+type sendCommand struct{}
+type showCommand struct{}
+type showContactsCommand struct{}
+type showDraftsSummaryCommand struct{}
+type showIdentityCommand struct{}
+type showInboxSummaryCommand struct{}
+type showOutboxSummaryCommand struct{}
+type showQueueStateCommand struct{}
+type statusCommand struct{}
+type transactNowCommand struct{}
+
+type newContactCommand struct {
+	Name string
+}
+
+type renameCommand struct {
+	NewName string
+}
+
+type attachCommand struct {
+	Filename string `cli:"filename"`
+}
+
+type uploadCommand struct {
+	Filename string `cli:"filename"`
+}
+
+type saveCommand struct {
+	Number   string
+	Filename string `cli:"filename"`
+}
+
+type saveKeyCommand struct {
+	Number   string
+	Filename string `cli:"filename"`
+}
+
+type downloadCommand struct {
+	Number   string
+	Filename string `cli:"filename"`
+}
+
+type removeCommand struct {
+	Number string
+}
+
+type tagCommand struct {
+	tag string
+}
+
+type helpCommand struct {
+	ShowAll bool `flag:all`
+}
+
+func numPositionalFields(t reflect.Type) int {
+	for i := 0; i < t.NumField(); i++ {
+		if strings.HasPrefix(string(t.Field(i).Tag), "flag:") {
+			return i
+		}
+	}
+	return t.NumField()
+}
+
+func parseCommandForCompletion(commands []cliCommand, line string) (before, prefix string, isCommand, ok bool) {
+	if len(line) == 0 {
+		return
+	}
+
+	spacePos := strings.IndexRune(line, ' ')
+	if spacePos == -1 {
+		// We're completing a command or tag name.
+		prefix = line
+		isCommand = true
+		ok = true
+		return
+	}
+
+	command := line[:spacePos]
+	var prototype interface{}
+
+	for _, cmd := range commands {
+		if cmd.name == command {
+			prototype = cmd.prototype
+			break
+		}
+	}
+	if prototype == nil {
+		return
+	}
+
+	t := reflect.TypeOf(prototype)
+	fieldNum := -1
+	fieldStart := 0
+	inQuotes := false
+	lastWasEscape := false
+	numFields := numPositionalFields(t)
+
+	skippingWhitespace := true
+	for pos, r := range line[spacePos:] {
+		if skippingWhitespace {
+			if r == ' ' {
+				continue
+			}
+			skippingWhitespace = false
+			fieldNum++
+			fieldStart = pos + spacePos
+		}
+
+		if lastWasEscape {
+			lastWasEscape = false
+			continue
+		}
+
+		if r == '\\' {
+			lastWasEscape = true
+			continue
+		}
+
+		if r == '"' {
+			inQuotes = !inQuotes
+		}
+
+		if r == ' ' && !inQuotes {
+			skippingWhitespace = true
+		}
+	}
+
+	if skippingWhitespace {
+		return
+	}
+	if fieldNum >= numFields {
+		return
+	}
+	f := t.Field(fieldNum)
+	if f.Tag.Get("cli") != "filename" {
+		return
+	}
+	ok = true
+	isCommand = false
+	before = line[:fieldStart]
+	prefix = line[fieldStart:]
+	return
+}
+
+// setOption updates the cliCommand, v, of type t given an option string with
+// the "--" prefix already removed. It returns true on success.
+func setOption(v reflect.Value, t reflect.Type, option string) bool {
+	for i := 0; i < t.NumField(); i++ {
+		fieldType := t.Field(i)
+		tag := string(fieldType.Tag)
+		if strings.HasPrefix(tag, "flag:") && tag[5:] == option {
+			field := v.Field(i)
+			if field.Bool() {
+				return false // already set
+			} else {
+				field.SetBool(true)
+				return true
+			}
+		}
+	}
+
+	return false
+}
+
+func parseCommand(commands []cliCommand, line []byte) (interface{}, string) {
+	spacePos := bytes.IndexByte(line, ' ')
+	if spacePos == -1 {
+		spacePos = len(line)
+	}
+	command := string(line[:spacePos])
+	var prototype interface{}
+
+	for _, cmd := range commands {
+		if cmd.name == command {
+			prototype = cmd.prototype
+			break
+		}
+	}
+	if prototype == nil {
+		if len(command) == 0 || len(command) == 3 {
+			// Very likely a tag or a blank line.
+			return tagCommand{string(line)}, ""
+		}
+		return nil, "Unknown command: " + command
+	}
+
+	t := reflect.TypeOf(prototype)
+	v := reflect.New(t)
+	v = reflect.Indirect(v)
+	pos := spacePos
+	fieldNum := -1
+	inQuotes := false
+	lastWasEscape := false
+	numFields := numPositionalFields(t)
+	var field []byte
+
+	skippingWhitespace := true
+	for ; pos <= len(line); pos++ {
+		if !skippingWhitespace && (pos == len(line) || (line[pos] == ' ' && !inQuotes && !lastWasEscape)) {
+			skippingWhitespace = true
+			strField := string(field)
+
+			switch {
+			case fieldNum < numFields:
+				f := v.Field(fieldNum)
+				f.Set(reflect.ValueOf(strField))
+			case strings.HasPrefix(strField, "--"):
+				if !setOption(v, t, strField[2:]) {
+					return nil, "No such option " + strField + " for command"
+				}
+			default:
+				return nil, "Too many arguments for command " + command + ". Expected " + strconv.Itoa(v.NumField())
+			}
+			field = field[:0]
+			continue
+		}
+
+		if pos == len(line) {
+			break
+		}
+
+		if lastWasEscape {
+			field = append(field, line[pos])
+			lastWasEscape = false
+			continue
+		}
+
+		if skippingWhitespace {
+			if line[pos] == ' ' {
+				continue
+			}
+			skippingWhitespace = false
+			fieldNum++
+		}
+
+		if line[pos] == '\\' {
+			lastWasEscape = true
+			continue
+		}
+
+		if line[pos] == '"' {
+			inQuotes = !inQuotes
+			continue
+		}
+
+		field = append(field, line[pos])
+	}
+
+	if fieldNum < numFields-1 {
+		return nil, "Too few arguments for command " + command + ". Expected " + strconv.Itoa(v.NumField()) + ", but found " + strconv.Itoa(fieldNum+1)
+	}
+
+	return v.Interface(), ""
+}
+
+type cliInput struct {
+	term                 *terminal.Terminal
+	commands             *priorityList
+	lastKeyWasCompletion bool
+}
+
+type cliTerminalLine struct {
+	command interface{}
+	err     error
+	ackChan chan struct{}
+}
+
+func (i *cliInput) processInput(commandsChan chan<- cliTerminalLine) {
+	i.commands = new(priorityList)
+	for _, command := range cliCommands {
+		i.commands.Insert(command.name)
+	}
+
+	autoCompleteCallback := func(line string, pos int, key rune) (string, int, bool) {
+		return i.AutoComplete(line, pos, key)
+	}
+
+	i.term.AutoCompleteCallback = autoCompleteCallback
+
+	var ackChan chan struct{}
+
+	for {
+		if ackChan != nil {
+			<-ackChan
+		}
+		ackChan = make(chan struct{})
+
+		line, err := i.term.ReadLine()
+		if err != nil {
+			commandsChan <- cliTerminalLine{err: err, ackChan: ackChan}
+			continue
+		}
+		cmd, errStr := parseCommand(cliCommands, []byte(line))
+		if len(errStr) != 0 {
+			fmt.Fprintf(i.term, "%s %s\n", termWarnPrefix, errStr)
+			ackChan = nil
+			continue
+		}
+		if cmd != nil {
+			commandsChan <- cliTerminalLine{command: cmd, ackChan: ackChan}
+		}
+		continue
+	}
+}
+
+func (input *cliInput) showHelp(context inputContext, showAll bool) {
+	contextTable := cliTable{
+		heading:      "These commands operate on the current object:",
+		noIndicators: true,
+	}
+	globalTable := cliTable{
+		heading:      "These commands are global:",
+		noIndicators: true,
+	}
+
+	if showAll {
+		globalTable.heading = "All commands:"
+	}
+
+	for _, cmd := range cliCommands {
+		if !showAll && cmd.context != 0 && context&cmd.context == 0 {
+			continue
+		}
+
+		line := cmd.name
+		prototype := reflect.TypeOf(cmd.prototype)
+		for j := 0; j < prototype.NumField(); j++ {
+			if strings.HasPrefix(string(prototype.Field(j).Tag), "flag:") {
+				line += " [--" + strings.ToLower(string(prototype.Field(j).Tag[5:])) + "]"
+			} else {
+				line += " <" + strings.ToLower(prototype.Field(j).Name) + ">"
+			}
+		}
+
+		table := &globalTable
+		if context&cmd.context != 0 {
+			table = &contextTable
+		}
+		table.rows = append(table.rows, cliRow{
+			cols: []string{line, cmd.desc},
+		})
+	}
+
+	widths := globalTable.UpdateWidths(contextTable.UpdateWidths(nil))
+	globalTable.WriteToWithWidths(input.term, widths)
+	if len(contextTable.rows) > 0 {
+		contextTable.WriteToWithWidths(input.term, widths)
+	}
+}
+
+func pathComplete(path string) (completedPath string, isComplete, ok bool) {
+	quoted := len(path) > 0 && path[0] == '"'
+	if quoted {
+		path = path[1:]
+		if len(path) > 0 && path[len(path)-1] == '"' {
+			path = path[:len(path)-1]
+		}
+	}
+
+	if strings.HasPrefix(path, "~/") {
+		if home := os.Getenv("HOME"); len(home) > 0 {
+			path = filepath.Join(home, path[2:])
+		}
+	}
+	path = filepath.Clean(path)
+	dirName := filepath.Dir(path)
+	base := filepath.Base(path)
+
+	dir, err := os.Open(dirName)
+	if err != nil {
+		return "", false, false
+	}
+	defer dir.Close()
+
+	ents, err := dir.Readdirnames(-1)
+	if err != nil {
+		return "", false, false
+	}
+
+	var candidates []string
+	for _, ent := range ents {
+		if strings.HasPrefix(ent, base) {
+			candidates = append(candidates, ent)
+		}
+	}
+	switch len(candidates) {
+	case 0:
+		return "", false, false
+	case 1:
+		completedPath = filepath.Join(dirName, candidates[0])
+		quoted = quoted || strings.IndexRune(candidates[0], ' ') != -1
+		fi, err := os.Stat(completedPath)
+		if quoted {
+			completedPath = "\"" + completedPath
+		}
+		if err == nil && fi.IsDir() {
+			return completedPath + "/", false, true
+		}
+		if quoted {
+			completedPath += "\""
+		}
+		return completedPath, true, true
+	}
+
+	sort.Strings(candidates)
+	first := []rune(candidates[0])
+	last := []rune(candidates[len(candidates)-1])
+
+	for i, r := range first {
+		if last[i] != r {
+			completedPath = filepath.Join(dirName, string(first[:i]))
+			if quoted {
+				completedPath = "\"" + completedPath
+			}
+			return completedPath, false, true
+		}
+		if last[i] == ' ' {
+			quoted = true
+		}
+	}
+
+	// Duplicate entries in the directory?
+	return filepath.Join(dirName, candidates[0]), true, true
+}
+
+func (i *cliInput) AutoComplete(line string, pos int, key rune) (string, int, bool) {
+	const keyTab = 9
+
+	if key != keyTab {
+		i.lastKeyWasCompletion = false
+		return "", -1, false
+	}
+
+	prefix := line[:pos]
+	if i.lastKeyWasCompletion {
+		// The user hit tab right after a completion, so we got
+		// it wrong.
+		if strings.IndexRune(prefix, ' ') == len(prefix)-1 {
+			// We just completed a command.
+			newCommand := i.commands.Next()
+			newLine := string(newCommand) + " " + line[pos:]
+			return newLine, len(newCommand) + 1, true
+		}
+	} else {
+		if len(prefix) > 0 {
+			a, b, isCommand, ok := parseCommandForCompletion(cliCommands, prefix)
+			if !ok {
+				return "", -1, false
+			}
+			var newValue string
+			var spacer string
+			if isCommand {
+				newValue, ok = i.commands.Find(b)
+				spacer = " "
+			} else {
+				var complete bool
+				newValue, complete, ok = pathComplete(b)
+				if complete {
+					spacer = " "
+				}
+			}
+			if !ok {
+				return "", -1, false
+			}
+
+			newLine := string(a) + newValue + spacer + line[pos:]
+			i.lastKeyWasCompletion = true
+			return newLine, len(a) + len(newValue) + len(spacer), true
+		}
+	}
+
+	i.lastKeyWasCompletion = false
+	return "", -1, false
+}
+
+type priorityListEntry struct {
+	value string
+	next  *priorityListEntry
+}
+
+type priorityList struct {
+	head       *priorityListEntry
+	lastPrefix string
+	lastResult string
+	n          int
+}
+
+func (pl *priorityList) Insert(value string) {
+	ent := new(priorityListEntry)
+	ent.next = pl.head
+	ent.value = value
+	pl.head = ent
+}
+
+func (pl *priorityList) findNth(prefix string, nth int) (string, bool) {
+	var cur, last *priorityListEntry
+	cur = pl.head
+	for n := 0; cur != nil; cur = cur.next {
+		if strings.HasPrefix(cur.value, prefix) {
+			if n == nth {
+				// move this entry to the top
+				if last != nil {
+					last.next = cur.next
+				} else {
+					pl.head = cur.next
+				}
+				cur.next = pl.head
+				pl.head = cur
+				pl.lastResult = cur.value
+				return cur.value, true
+			}
+			n++
+		}
+		last = cur
+	}
+
+	return "", false
+}
+
+func (pl *priorityList) Find(prefix string) (string, bool) {
+	pl.lastPrefix = prefix
+	pl.n = 0
+
+	return pl.findNth(prefix, 0)
+}
+
+func (pl *priorityList) Next() string {
+	pl.n++
+	result, ok := pl.findNth(pl.lastPrefix, pl.n)
+	if !ok {
+		pl.n = 1
+		result, ok = pl.findNth(pl.lastPrefix, pl.n)
+	}
+	// In this case, there's only one matching entry in the list.
+	if !ok {
+		pl.n = 0
+		result, _ = pl.findNth(pl.lastPrefix, pl.n)
+	}
+	return result
+}
diff --git a/client/cli.go b/client/cli.go
new file mode 100644
index 0000000..4a195b4
--- /dev/null
+++ b/client/cli.go
@@ -0,0 +1,1914 @@
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"os/signal"
+	"path/filepath"
+	"strconv"
+	"sync"
+	"syscall"
+	"time"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/client/system"
+	"github.com/agl/pond/panda"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/ssh/terminal"
+)
+
+const haveCLI = true
+
+const (
+	tpmIntroMsg      = "It's very difficult to erase information on modern computers so Pond tries to use the TPM chip if possible."
+	tpmPresentMsg    = "Your computer appears to have a TPM chip. You'll need tcsd (the TPM daemon) running in order to use it."
+	tpmNotPresentMsg = "Your computer does not appear to have a TPM chip. Without one, it's possible that someone in physical possession of your computer and passphrase could extract old messages that should have been deleted. Using a computer with a TPM is strongly preferable until alternatives can be implemented."
+)
+
+type cliClient struct {
+	client
+
+	term        *terminal.Terminal
+	termWrapper *terminalWrapper
+	input       *cliInput
+	interrupt   chan bool
+	// cliIdsAssigned contains cliIds that have been used in the current
+	// session to avoid giving the same cliId to two different objects.
+	cliIdsAssigned map[cliId]bool
+
+	// deleteArmed is set to true after an attempt to delete a contact. The
+	// first attempt sets this flag, the second will actually delete a
+	// contact. This flag is cleared after any command that is not a delete
+	// command.
+	deleteArmed bool
+
+	// currentObj is either a *Draft or *InboxMessage and is the object
+	// that the user is currently interacting with.
+	currentObj interface{}
+}
+
+func (c *cliClient) Printf(format string, args ...interface{}) {
+	c.term.Write([]byte(fmt.Sprintf(format, args...)))
+}
+
+func (c *cliClient) clearTerminalMessage(length int) {
+	if length > 0 {
+		c.term.Write([]byte(fmt.Sprintf("\x1b[%dD\x1b[2K", length)))
+	}
+}
+
+func (c *cliClient) newCliId() cliId {
+	var buf [2]byte
+
+	for {
+		c.randBytes(buf[:])
+		v := (cliId(buf[0])&0x7f)<<8 | cliId(buf[1])
+		if v == invalidCliId {
+			continue
+		}
+		if _, ok := c.cliIdsAssigned[v]; !ok {
+			c.cliIdsAssigned[v] = true
+			return v
+		}
+	}
+
+	panic("unreachable")
+}
+
+func terminalEscape(s string, lineBreaksOk bool) string {
+	in := []byte(s)
+	var out []byte
+
+	for _, b := range in {
+		switch {
+		case b == '\t':
+			out = append(out, ' ')
+		case b == '\r':
+			continue
+		case b == '\n' && lineBreaksOk:
+			out = append(out, '\n')
+		case b < 32:
+			out = append(out, '?')
+		default:
+			out = append(out, b)
+		}
+	}
+
+	return string(out)
+}
+
+func updateTerminalSize(term *terminal.Terminal) {
+	width, height, err := terminal.GetSize(0)
+	if err != nil {
+		return
+	}
+	term.SetSize(width, height)
+}
+
+func (c *cliClient) Start() {
+	oldState, err := terminal.MakeRaw(0)
+	if err != nil {
+		panic(err.Error())
+	}
+	defer terminal.Restore(0, oldState)
+
+	signal.Notify(make(chan os.Signal), os.Interrupt)
+
+	wrapper, interruptChan := NewTerminalWrapper(os.Stdin)
+	wrapper.SetErrorOnInterrupt(true)
+	c.interrupt = interruptChan
+	c.termWrapper = wrapper
+
+	c.term = terminal.NewTerminal(wrapper, "> ")
+	updateTerminalSize(c.term)
+
+	resizeChan := make(chan os.Signal)
+	go func() {
+		for _ = range resizeChan {
+			updateTerminalSize(c.term)
+		}
+	}()
+	signal.Notify(resizeChan, syscall.SIGWINCH)
+
+	c.loadUI()
+
+	if c.writerChan != nil {
+		c.save()
+	}
+	if c.writerChan != nil {
+		close(c.writerChan)
+		<-c.writerDone
+	}
+	if c.fetchNowChan != nil {
+		close(c.fetchNowChan)
+	}
+	if c.stateLock != nil {
+		c.stateLock.Close()
+	}
+}
+
+type terminalWrapper struct {
+	io.Writer
+	sync.Mutex
+
+	err   error
+	chars bytes.Buffer
+	cond  *sync.Cond
+
+	// pauseOnEnter determines whether the goroutine waits on restartChan
+	// after reading a newline. This is to allow a subprocess to take the
+	// terminal.
+	pauseOnEnter bool
+	// restartChan is used to signal to the goroutine that it's ok to start
+	// reading from the terminal again because we aren't going to be
+	// spawning a subprocess that needs the terminal.
+	restartChan chan bool
+	// waitingToRestart is true if the goroutine is waiting on restartChan.
+	waitingToRestart bool
+	// errorOnInterrupt, if true, causes reading from the terminal to
+	// result in errInterrupted if Ctrl-C is pressed.
+	errorOnInterrupt bool
+}
+
+func NewTerminalWrapper(term io.ReadWriter) (*terminalWrapper, chan bool) {
+	wrapper := &terminalWrapper{
+		Writer:      term,
+		restartChan: make(chan bool, 1),
+	}
+	wrapper.cond = sync.NewCond(&wrapper.Mutex)
+
+	c := make(chan bool, 1)
+	go wrapper.run(term, c)
+	return wrapper, c
+}
+
+func (wrapper *terminalWrapper) PauseOnEnter() {
+	wrapper.Lock()
+	defer wrapper.Unlock()
+
+	wrapper.pauseOnEnter = true
+}
+
+func (wrapper *terminalWrapper) SetErrorOnInterrupt(on bool) {
+	wrapper.Lock()
+	defer wrapper.Unlock()
+
+	wrapper.errorOnInterrupt = true
+}
+
+func (wrapper *terminalWrapper) Restart() {
+	wrapper.Lock()
+	defer wrapper.Unlock()
+
+	if wrapper.waitingToRestart {
+		wrapper.restartChan <- true
+		wrapper.waitingToRestart = false
+	}
+}
+
+func (wrapper *terminalWrapper) Read(buf []byte) (int, error) {
+	wrapper.Lock()
+	defer wrapper.Unlock()
+
+	for wrapper.chars.Len() == 0 && wrapper.err == nil {
+		if wrapper.waitingToRestart {
+			wrapper.waitingToRestart = false
+			wrapper.restartChan <- true
+		}
+		wrapper.cond.Wait()
+	}
+
+	if wrapper.err != nil {
+		return 0, wrapper.err
+	}
+
+	return wrapper.chars.Read(buf)
+}
+
+func (wrapper *terminalWrapper) run(r io.Reader, interruptChan chan bool) {
+	var buf [1]byte
+	for {
+		n, err := r.Read(buf[:])
+
+		// Check for Ctrl-C.
+		if err == nil && n == 1 && buf[0] == 3 {
+			select {
+			case interruptChan <- true:
+				break
+			default:
+			}
+			wrapper.Lock()
+			errorOnInterrupt := wrapper.errorOnInterrupt
+			wrapper.Unlock()
+			if errorOnInterrupt {
+				err = errInterrupted
+			} else {
+				continue
+			}
+		}
+
+		wrapper.Lock()
+		if err != nil {
+			wrapper.err = err
+		} else {
+			wrapper.chars.Write(buf[:n])
+		}
+
+		if err == nil && n == 1 && buf[0] == '\r' && wrapper.pauseOnEnter {
+			wrapper.waitingToRestart = true
+			wrapper.cond.Signal()
+			wrapper.Unlock()
+			<-wrapper.restartChan
+		} else {
+			wrapper.cond.Signal()
+			wrapper.Unlock()
+		}
+		if err != nil {
+			break
+		}
+	}
+}
+
+const (
+	termCol1   = "\x1b[38;5;129m"
+	termCol2   = "\x1b[38;5;135m"
+	termCol3   = "\x1b[38;5;141m"
+	termPrefix = termCol1 + ">" + termCol2 + ">" + termCol3 + ">" + termReset
+
+	termWarnCol1   = "\x1b[38;5;196m"
+	termWarnCol2   = "\x1b[38;5;202m"
+	termWarnCol3   = "\x1b[38;5;208m"
+	termWarnPrefix = termWarnCol1 + ">" + termWarnCol2 + ">" + termWarnCol3 + ">" + termReset
+
+	termErrCol1   = "\x1b[38;5;160m"
+	termErrCol2   = "\x1b[38;5;160m"
+	termErrCol3   = "\x1b[38;5;160m"
+	termErrPrefix = termErrCol1 + ">" + termErrCol2 + ">" + termErrCol3 + ">" + termReset
+
+	termInfoCol1   = "\x1b[38;5;021m"
+	termInfoCol2   = "\x1b[38;5;027m"
+	termInfoCol3   = "\x1b[38;5;033m"
+	termInfoPrefix = termInfoCol1 + ">" + termInfoCol2 + ">" + termInfoCol3 + ">" + termReset
+
+	termHeaderPrefix = "  " + termInfoCol3 + "-" + termReset
+
+	termGray = "\x1b[38;5;250m"
+
+	termCliIdStart = "\x1b[38;5;045m"
+
+	termReset = "\x1b[0m"
+)
+
+func (c *cliClient) initUI() {
+	c.Printf("%s Pond...\n", termPrefix)
+}
+
+func (c *cliClient) loadingUI() {
+}
+
+func (c *cliClient) drawChevrons(phase int) int {
+	phase = (phase + 1) % 3
+	cols := []string{termCol1, termCol2, termCol3}
+
+	var line []byte
+	for i := range cols {
+		i := (i - phase) % 3
+		if i < 0 {
+			i += 3
+		}
+		line = append(line, cols[i]...)
+		line = append(line, '>')
+	}
+	line = append(line, "\x1b[3D\x1b[0m"...)
+	c.term.Write(line)
+
+	return phase
+}
+
+func (c *cliClient) torPromptUI() error {
+	banner := "Please start a Tor SOCKS listener on port 9050 or 9150..."
+	bannerLength := 4 + len(banner)
+	c.Printf("%s %s", termPrefix, banner)
+
+	phase := 0
+	animateTicker := time.NewTicker(250 * time.Millisecond)
+	defer animateTicker.Stop()
+	probeTicker := time.NewTicker(1 * time.Second)
+	defer probeTicker.Stop()
+
+	for {
+		select {
+		case <-c.interrupt:
+			return errInterrupted
+		case <-animateTicker.C:
+			c.Printf("\x1b[%dD", bannerLength)
+			phase = c.drawChevrons(phase)
+			c.Printf("\x1b[%dC", bannerLength)
+		case <-probeTicker.C:
+			if c.detectTor() {
+				return nil
+			}
+		}
+	}
+
+	return nil
+}
+
+func (c *cliClient) sleepUI(d time.Duration) error {
+	select {
+	case <-c.interrupt:
+		return errInterrupted
+	case <-time.After(d):
+		return nil
+	}
+
+	return nil
+}
+
+func (c *cliClient) errorUI(msg string, fatal bool) {
+	prefix := termWarnPrefix
+	if fatal {
+		prefix = termErrPrefix
+	}
+	c.Printf("%s %s\n", prefix, msg)
+}
+
+func (c *cliClient) ShutdownAndSuspend() error {
+	return errInterrupted
+}
+
+func (c *cliClient) createPassphraseUI() (string, error) {
+	c.Printf("%s %s\n", termInfoPrefix, msgCreatePassphrase)
+
+	for {
+		pw1, err := c.term.ReadPassword("passphrase> ")
+		if err != nil {
+			return "", err
+		}
+		if len(pw1) == 0 {
+			return "", nil
+		}
+		c.Printf("%s Please confirm by entering the same passphrase again\n", termInfoPrefix)
+		pw2, err := c.term.ReadPassword("passphrase> ")
+		if err != nil {
+			return "", err
+		}
+		if pw1 == pw2 {
+			return pw1, nil
+		}
+		c.Printf("%s Passphrases don't match. Please start over\n", termInfoPrefix)
+	}
+	return "", nil
+}
+
+func (c *cliClient) createAccountUI(stateFile *disk.StateFile, pw string) (bool, error) {
+	defaultServer := msgDefaultServer
+	if c.dev {
+		defaultServer = msgDefaultDevServer
+	}
+
+	c.Printf("%s %s\n", termInfoPrefix, msgCreateAccount)
+	c.Printf("%s\n", termInfoPrefix)
+	c.Printf("%s Either leave this blank to use the default server, enter a pondserver:// address, or type one of the following server nicknames:\n", termInfoPrefix)
+	for _, server := range knownServers {
+		if len(server.nickname) == 0 {
+			continue
+		}
+		c.Printf("%s   %s: %s\n", termInfoPrefix, server.nickname, server.description)
+	}
+	c.term.SetPrompt("server> ")
+
+	for {
+		line, err := c.term.ReadLine()
+		if err != nil {
+			return false, err
+		}
+		for _, server := range knownServers {
+			if line == server.nickname {
+				line = server.uri
+				break
+			}
+		}
+		if len(line) == 0 {
+			line = defaultServer
+		}
+		c.server = line
+
+		updateMsg := func(msg string) {
+			c.Printf("%s %s\n", termInfoPrefix, msg)
+		}
+
+		if err := c.doCreateAccount(updateMsg); err != nil {
+			c.Printf("%s %s\n", termErrPrefix, err.Error())
+			continue
+		}
+
+		break
+	}
+
+	return false, nil
+}
+
+func (c *cliClient) keyPromptUI(stateFile *disk.StateFile) error {
+	c.Printf("%s %s\n", termInfoPrefix, msgKeyPrompt)
+
+	for {
+		line, err := c.term.ReadPassword("password> ")
+		if err != nil {
+			return err
+		}
+
+		if err := c.loadState(stateFile, line); err != disk.BadPasswordError {
+			return err
+		}
+
+		c.Printf("%s %s\n", termWarnPrefix, msgIncorrectPassword)
+	}
+
+	return nil
+}
+
+func (c *cliClient) processFetch(inboxMsg *InboxMessage) {
+	if inboxMsg.message != nil && len(inboxMsg.message.Body) == 0 {
+		// Skip acks.
+		return
+	}
+
+	if inboxMsg.cliId == invalidCliId {
+		inboxMsg.cliId = c.newCliId()
+	}
+
+	c.Printf("\x07%s (%s) New message (%s%s%s) received from %s\n", termPrefix, time.Now().Format(shortTimeFormat), termCliIdStart, inboxMsg.cliId.String(), termReset, terminalEscape(c.ContactName(inboxMsg.from), false))
+}
+
+func (c *cliClient) processServerAnnounce(inboxMsg *InboxMessage) {
+	c.Printf("%s New message received from home server\n", termPrefix)
+}
+
+func (c *cliClient) processAcknowledgement(ackedMsg *queuedMessage) {
+	c.Printf("%s (%s) Message acknowledged by %s\n", termPrefix, time.Now().Format(shortTimeFormat), terminalEscape(c.ContactName(ackedMsg.to), false))
+}
+
+func (c *cliClient) processRevocationOfUs(by *Contact) {
+	c.Printf("%s Access to contact revoked. All outgoing messages dropped: %s\n", termPrefix, terminalEscape(c.ContactName(by.id), false))
+}
+
+func (c *cliClient) processRevocation(by *Contact) {
+}
+
+// unsealPendingMessages is run once a key exchange with a contact has
+// completed and unseals any previously unreadable messages from that contact.
+func (c *cliClient) unsealPendingMessages(contact *Contact) {
+	var needToFilter bool
+
+	for _, msg := range c.inbox {
+		if msg.message == nil && msg.from == contact.id {
+			if !c.unsealMessage(msg, contact) {
+				needToFilter = true
+				continue
+			}
+			if len(msg.message.Body) == 0 {
+				needToFilter = true
+				continue
+			}
+		}
+	}
+
+	if needToFilter {
+		c.dropSealedAndAckMessagesFrom(contact)
+	}
+}
+
+func (c *cliClient) processPANDAUpdateUI(update pandaUpdate) {
+	contact := c.contacts[update.id]
+
+	switch {
+	case update.err != nil:
+		c.Printf("%s Key exchange with %s failed: %s\n", termErrPrefix, terminalEscape(contact.name, false), terminalEscape(update.err.Error(), false))
+	case update.serialised != nil:
+	case update.result != nil:
+		c.Printf("%s Key exchange with %s complete\n", termPrefix, terminalEscape(contact.name, false))
+		c.unsealPendingMessages(contact)
+	}
+}
+
+func (c *cliClient) processMessageDelivered(msg *queuedMessage) {
+	if !msg.revocation && len(msg.message.Body) > 0 {
+		c.Printf("%s (%s) Message %s%s%s to %s transmitted successfully\n", termPrefix, time.Now().Format(shortTimeFormat), termCliIdStart, msg.cliId.String(), termReset, terminalEscape(c.ContactName(msg.to), false))
+	}
+	c.showQueueState()
+}
+
+func (c *cliClient) removeInboxMessageUI(msg *InboxMessage) {
+}
+
+func (c *cliClient) removeOutboxMessageUI(msg *queuedMessage) {
+}
+
+func (c *cliClient) addRevocationMessageUI(msg *queuedMessage) {
+	c.Printf("%s New revocation message created and pending transmission to home server.\n", termPrefix)
+}
+
+func (c *cliClient) removeContactUI(contact *Contact) {
+}
+
+func (c *cliClient) logEventUI(contact *Contact, event Event) {
+	c.Printf("%s While processing message from %s: %s\n", termWarnPrefix, terminalEscape(contact.name, false), terminalEscape(event.msg, false))
+}
+
+func (c *cliClient) setCurrentObject(o interface{}) {
+	c.currentObj = o
+
+	if c.currentObj == nil {
+		c.term.SetPrompt(fmt.Sprintf("%s>%s ", termCol1, termReset))
+		return
+	}
+
+	var id cliId
+	var typ string
+	switch o := c.currentObj.(type) {
+	case *Draft:
+		typ = "draft"
+		id = o.cliId
+	case *InboxMessage:
+		typ = "inbox"
+		id = o.cliId
+	case *Contact:
+		typ = "contact"
+		id = o.cliId
+	case *queuedMessage:
+		typ = "outbox"
+		id = o.cliId
+	default:
+		panic("unknown currentObj type")
+	}
+
+	c.term.SetPrompt(fmt.Sprintf("%s%s%s/%s%s%s>%s ", termGray, typ, termReset, termCliIdStart, id.String(), termCol1, termReset))
+}
+
+func (c *cliClient) mainUI() {
+	c.term.SetPrompt(fmt.Sprintf("%s>%s ", termCol1, termReset))
+	c.showState()
+
+	termChan := make(chan cliTerminalLine)
+	c.input = &cliInput{
+		term: c.term,
+	}
+	c.termWrapper.PauseOnEnter()
+	c.termWrapper.SetErrorOnInterrupt(false)
+	go c.input.processInput(termChan)
+
+	for {
+		select {
+		case sigReq := <-c.signingRequestChan:
+			c.processSigningRequest(sigReq)
+		case line := <-termChan:
+			if line.err != nil {
+				return
+			}
+
+		FlushInterrupts:
+			for {
+				select {
+				case <-c.interrupt:
+					continue
+				default:
+					break FlushInterrupts
+				}
+			}
+
+			shouldQuit := c.processCommand(line.command)
+			// Any command other than a delete command clears the
+			// delete confirmation flag.
+			if _, ok := line.command.(deleteCommand); !ok {
+				c.deleteArmed = false
+			}
+			if shouldQuit {
+				return
+			}
+			close(line.ackChan)
+		case newMessage := <-c.newMessageChan:
+			c.processNewMessage(newMessage)
+		case msr := <-c.messageSentChan:
+			if msr.id != 0 {
+				c.processMessageSent(msr)
+			}
+		case update := <-c.pandaChan:
+			c.processPANDAUpdate(update)
+		case <-c.backgroundChan:
+		case <-c.log.updateChan:
+		}
+	}
+}
+
+// cliTable is a structure for containing tabular data for display on the
+// terminal. For example, the inbox, outbox etc summaries are handled using
+// this structure.
+type cliTable struct {
+	// heading is an optional string that will be printed before the table.
+	heading string
+	rows    []cliRow
+	// noIndicators, if true, causes the indicators for each row to be
+	// ignored and a blue hyphen to be printed in their place.
+	noIndicators bool
+	// noTrailingNewline, if true, stops the printing of a newline after
+	// the table.
+	noTrailingNewline bool
+}
+
+// cliRow is a row of terminal data.
+type cliRow struct {
+	// indicator contains an optional indicator star to print at the
+	// beginning of the line.
+	indicator Indicator
+	// cols contains strings for each column. Note that strings must
+	// already have been terminal escaped.
+	cols []string
+	// id contains an optional tag string to print as a final column.
+	id cliId
+}
+
+// UpdateWidths calculates the maximum width of each column. If widths is
+// non-nil then those widths are updated.
+func (tab cliTable) UpdateWidths(widths []int) []int {
+	if len(tab.rows) == 0 {
+		return widths
+	}
+
+	n := len(tab.rows[0].cols)
+	if len(widths) < n {
+		newWidths := make([]int, n)
+		copy(newWidths, widths)
+		widths = newWidths
+	}
+
+	for _, row := range tab.rows {
+		if len(row.cols) != n {
+			panic("table is not square")
+		}
+		for j, col := range row.cols {
+			if widths[j] < len(col) {
+				widths[j] = len(col)
+			}
+		}
+	}
+
+	return widths
+}
+
+// WriteTo writes the terminal data for tab to w.
+func (tab cliTable) WriteTo(w io.Writer) {
+	widths := tab.UpdateWidths(nil)
+	tab.WriteToWithWidths(w, widths)
+}
+
+// WriteToWithWidths writes the terminal data for tab to w using the given
+// widths.
+func (tab cliTable) WriteToWithWidths(w io.Writer, widths []int) {
+	maxWidth := 0
+	for _, width := range widths {
+		if maxWidth < width {
+			maxWidth = width
+		}
+	}
+
+	spaces := make([]byte, maxWidth+1)
+	for i := range spaces {
+		spaces[i] = ' '
+	}
+
+	buf := bufio.NewWriter(w)
+
+	if len(tab.heading) > 0 {
+		buf.WriteString(termInfoPrefix)
+		buf.WriteString(" ")
+		buf.WriteString(tab.heading)
+		buf.WriteString("\n")
+	}
+
+	for _, row := range tab.rows {
+		if tab.noIndicators {
+			buf.WriteString(termHeaderPrefix)
+		} else {
+			buf.WriteString(" ")
+			buf.WriteString(row.indicator.Star())
+		}
+		buf.WriteString(" ")
+
+		for j, width := range widths {
+			var col string
+			if j < len(row.cols) {
+				col = row.cols[j]
+			}
+
+			switch j {
+			case 0:
+			case 1:
+				buf.WriteString(" ")
+				if len(col) > 0 {
+					buf.WriteString(termGray)
+					buf.WriteString("|")
+					buf.WriteString(termReset)
+				} else {
+					buf.WriteString(" ")
+				}
+				buf.WriteString(" ")
+			default:
+				buf.WriteString(" ")
+			}
+			buf.WriteString(col)
+			buf.Write(spaces[:width-len(col)])
+		}
+
+		if row.id != invalidCliId {
+			buf.WriteString(" (")
+			buf.WriteString(termCliIdStart)
+			buf.WriteString(row.id.String())
+			buf.WriteString(termReset)
+			buf.WriteString(")")
+		}
+		buf.WriteString("\n")
+	}
+
+	if len(tab.rows) > 0 && !tab.noTrailingNewline {
+		buf.WriteString("\n")
+	}
+	buf.Flush()
+}
+
+func (c *cliClient) showState() {
+	tables := make([]cliTable, 0, 4)
+
+	tables = append(tables, c.outboxSummary())
+	tables = append(tables, c.inboxSummary())
+	tables = append(tables, c.draftsSummary())
+	tables = append(tables, c.contactsSummary())
+
+	var widths []int
+	for _, table := range tables {
+		widths = table.UpdateWidths(widths)
+	}
+
+	for _, table := range tables {
+		table.WriteToWithWidths(c.term, widths)
+	}
+
+	c.showQueueState()
+}
+
+func (c *cliClient) showIdentity() {
+	table := cliTable{
+		noIndicators: true,
+		heading:      "Identity",
+		rows: []cliRow{
+			cliRow{cols: []string{"Server", terminalEscape(c.server, false)}},
+			cliRow{cols: []string{"Public identity", fmt.Sprintf("%x", c.identityPublic[:])}},
+			cliRow{cols: []string{"Public key", fmt.Sprintf("%x", c.pub[:])}},
+			cliRow{cols: []string{"State file", terminalEscape(c.stateFilename, false)}},
+			cliRow{cols: []string{"Group generation", fmt.Sprintf("%d", c.generation)}},
+		},
+	}
+	table.WriteTo(c.term)
+}
+
+func (c *cliClient) inboxSummary() (table cliTable) {
+	if len(c.inbox) == 0 {
+		return
+	}
+
+	heading := "Inbox"
+	var filter uint64
+
+	if obj, isContact := c.currentObj.(*Contact); isContact {
+		heading = "Inbox messages from " + terminalEscape(obj.name, false)
+		filter = obj.id
+	}
+
+	table = cliTable{
+		heading: heading,
+		rows:    make([]cliRow, 0, len(c.inbox)),
+	}
+
+	for _, msg := range c.inbox {
+		if filter != 0 && filter != msg.from {
+			continue
+		}
+
+		var subline string
+		i := indicatorNone
+
+		if msg.message == nil {
+			subline = "pending"
+		} else {
+			if len(msg.message.Body) == 0 {
+				continue
+			}
+			if !msg.read {
+				i = indicatorBlue
+			} else if !msg.acked && msg.from != 0 {
+				i = indicatorYellow
+			}
+			subline = time.Unix(*msg.message.Time, 0).Format(shortTimeFormat)
+		}
+		if msg.cliId == invalidCliId {
+			msg.cliId = c.newCliId()
+		}
+
+		table.rows = append(table.rows, cliRow{
+			i,
+			[]string{
+				terminalEscape(c.ContactName(msg.from), false),
+				subline,
+			},
+			msg.cliId,
+		})
+	}
+
+	return
+}
+
+func (c *cliClient) outboxSummary() (table cliTable) {
+	if len(c.outbox) == 0 {
+		return
+	}
+
+	heading := "Outbox"
+	var filter uint64
+
+	if obj, isContact := c.currentObj.(*Contact); isContact {
+		heading = "Outbox messages to " + terminalEscape(obj.name, false)
+		filter = obj.id
+	}
+
+	table = cliTable{
+		heading: heading,
+		rows:    make([]cliRow, 0, len(c.outbox)),
+	}
+
+	for _, msg := range c.outbox {
+		if filter != 0 && filter != msg.to {
+			continue
+		}
+
+		subline := msg.created.Format(shortTimeFormat)
+
+		if msg.revocation {
+			table.rows = append(table.rows, cliRow{
+				msg.indicator(nil),
+				[]string{
+					"(Revocation)",
+					subline,
+				},
+				invalidCliId,
+			})
+			continue
+		}
+
+		if len(msg.message.Body) == 0 {
+			continue
+		}
+
+		if msg.cliId == invalidCliId {
+			msg.cliId = c.newCliId()
+		}
+
+		to := c.contacts[msg.to]
+		table.rows = append(table.rows, cliRow{
+			msg.indicator(to),
+			[]string{
+				terminalEscape(to.name, false),
+				subline,
+			},
+			msg.cliId,
+		})
+	}
+
+	return
+}
+
+func (c *cliClient) draftsSummary() (table cliTable) {
+	if len(c.drafts) == 0 {
+		return
+	}
+
+	heading := "Drafts"
+	var filter uint64
+
+	if obj, isContact := c.currentObj.(*Contact); isContact {
+		heading = "Draft messages to " + terminalEscape(obj.name, false)
+		filter = obj.id
+	}
+
+	table = cliTable{
+		heading: heading,
+		rows:    make([]cliRow, 0, len(c.drafts)),
+	}
+
+	for _, msg := range c.drafts {
+		if filter != 0 && filter != msg.to {
+			continue
+		}
+
+		if msg.cliId == invalidCliId {
+			msg.cliId = c.newCliId()
+		}
+
+		subline := msg.created.Format(shortTimeFormat)
+		to := "(nobody)"
+		if msg.to != 0 {
+			to = c.ContactName(msg.to)
+		}
+
+		table.rows = append(table.rows, cliRow{
+			indicatorNone,
+			[]string{
+				terminalEscape(to, false),
+				subline,
+			},
+			msg.cliId,
+		})
+	}
+
+	return
+}
+
+func (c *cliClient) contactsSummary() (table cliTable) {
+	if len(c.contacts) == 0 {
+		return
+	}
+
+	table = cliTable{
+		heading: "Contacts",
+		rows:    make([]cliRow, 0, len(c.contacts)),
+	}
+
+	contacts := c.client.contactsSorted()
+
+	for _, contact := range contacts {
+		if contact.cliId == invalidCliId {
+			contact.cliId = c.newCliId()
+		}
+		indicator := indicatorNone
+		if contact.revokedUs {
+			indicator = indicatorBlack
+		}
+
+		table.rows = append(table.rows, cliRow{
+			indicator,
+			[]string{
+				terminalEscape(contact.name, false),
+				contact.subline(),
+			},
+			contact.cliId,
+		})
+	}
+
+	return
+}
+
+func (c *cliClient) showQueueState() {
+	c.queueMutex.Lock()
+	queueLength := len(c.queue)
+	c.queueMutex.Unlock()
+
+	switch {
+	case queueLength > 1:
+		c.Printf("%s There are %d messages waiting to be transmitted\n", termInfoPrefix, queueLength)
+	case queueLength > 0:
+		c.Printf("%s There is one message waiting to be transmitted\n", termInfoPrefix)
+	default:
+		c.Printf("%s There are no messages waiting to be transmitted\n", termInfoPrefix)
+	}
+}
+
+func (c *cliClient) printDraftSize(draft *Draft) {
+	usageString, oversize := draft.usageString()
+	prefix := termPrefix
+	if oversize {
+		prefix = termErrPrefix
+	}
+	c.Printf("%s Message using %s\n", prefix, usageString)
+}
+
+// prepareSubobjectCommand performs the initial processing for a command that
+// operates on a subobject of a message. (Either an attachment or a
+// detachment.) It takes the 1-based index string from the user and the number
+// and name of the subobjects in question. It return the validated, 0-based
+// index.
+func (c *cliClient) prepareSubobjectCommand(userIndex string, n int, objName string) (i int, ok bool) {
+	i, err := strconv.Atoi(userIndex)
+	if err != nil {
+		c.Printf("%s Failed to parse number: %s\n", termErrPrefix, terminalEscape(err.Error(), false))
+		return
+	}
+	i-- // the UI has 1-based indexing
+	switch {
+	case i < 0:
+		c.Printf("%s Invalid %s number\n", termErrPrefix, objName)
+	case i < n:
+		ok = true
+	default:
+		c.Printf("%s There aren't that many %ss\n", termErrPrefix, objName)
+	}
+	return
+}
+
+// runBackgroundProcess processes update messages from a background process and
+// displays them.
+func (c *cliClient) runBackgroundProcess(id uint64, cancelThunk func()) (*pond.Message_Detachment, bool) {
+	lastProgressStringLength := 0
+
+	for {
+		select {
+		case event := <-c.backgroundChan:
+			switch e := event.(type) {
+			case DetachmentError:
+				if e.id != id {
+					continue
+				}
+				c.clearTerminalMessage(lastProgressStringLength)
+				lastProgressStringLength = 0
+				c.Printf("%s Error: %s\n", termErrPrefix, terminalEscape(e.err.Error(), false))
+				return nil, false
+			case DetachmentProgress:
+				if e.id != id {
+					continue
+				}
+				s := fmt.Sprintf("%s: %d / %d", terminalEscape(e.status, false), e.done, e.total)
+				c.clearTerminalMessage(lastProgressStringLength)
+				lastProgressStringLength = len(s)
+				c.term.Write([]byte(s))
+			case DetachmentComplete:
+				if e.id != id {
+					continue
+				}
+				c.clearTerminalMessage(lastProgressStringLength)
+				c.Printf("%s Complete\n", termPrefix)
+				return e.detachment, true
+			}
+		case <-c.interrupt:
+			cancelThunk()
+			c.clearTerminalMessage(lastProgressStringLength)
+			c.Printf("%s Aborted\n", termPrefix)
+			return nil, false
+		}
+	}
+	return nil, false
+}
+
+func (c *cliClient) processCommand(cmd interface{}) (shouldQuit bool) {
+	// First commands that might start a subprocess that needs terminal
+	// control.
+	switch cmd.(type) {
+	case composeCommand:
+		if contact, ok := c.currentObj.(*Contact); ok {
+			c.compose(contact, nil, nil)
+		} else {
+			c.Printf("%s Select contact first\n", termWarnPrefix)
+		}
+
+	case editCommand:
+		if draft, ok := c.currentObj.(*Draft); ok {
+			if draft.to == 0 {
+				c.Printf("%s Draft was created in the GUI and doesn't have a destination specified. Please use the GUI to manipulate this draft.\n", termErrPrefix)
+				return
+			}
+			c.compose(nil, draft, nil)
+		} else {
+			c.Printf("%s Select draft first\n", termWarnPrefix)
+		}
+
+	case replyCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message first\n", termWarnPrefix)
+			return
+		}
+		if msg.from == 0 {
+			c.Printf("%s Cannot reply to server announcement\n", termWarnPrefix)
+			return
+		}
+		c.compose(c.contacts[msg.from], nil, msg)
+
+	default:
+		goto Handle
+	}
+	return
+
+Handle:
+	// The command won't need to start subprocesses with terminal control
+	// so we can start watching for Ctrl-C again.
+	c.termWrapper.Restart()
+
+	switch cmd := cmd.(type) {
+	case clearCommand:
+		c.Printf("\x1b[2J")
+
+	case helpCommand:
+		if cmd.ShowAll {
+			c.input.showHelp(0, true)
+			return
+		}
+
+		switch c.currentObj.(type) {
+		case *Contact:
+			c.input.showHelp(contextContact, false)
+		case *Draft:
+			c.input.showHelp(contextDraft, false)
+		case *InboxMessage:
+			c.input.showHelp(contextInbox, false)
+		case *queuedMessage:
+			c.input.showHelp(contextOutbox, false)
+		default:
+			c.input.showHelp(0, false)
+		}
+
+	case tagCommand:
+		if len(cmd.tag) == 0 {
+			c.showState()
+			return
+		}
+		cliId, ok := cliIdFromString(cmd.tag)
+		if !ok {
+			c.Printf("%s Bad tag\n", termWarnPrefix)
+			return
+		}
+		for _, msg := range c.inbox {
+			if msg.cliId == cliId {
+				c.setCurrentObject(msg)
+				return
+			}
+		}
+		for _, msg := range c.outbox {
+			if msg.cliId == cliId {
+				c.setCurrentObject(msg)
+				return
+			}
+		}
+		for _, msg := range c.drafts {
+			if msg.cliId == cliId {
+				c.setCurrentObject(msg)
+				return
+			}
+		}
+		for _, contact := range c.contacts {
+			if contact.cliId == cliId {
+				c.setCurrentObject(contact)
+				return
+			}
+		}
+		c.Printf("%s Unknown tag\n", termWarnPrefix)
+
+	case logCommand:
+		n := 15
+		if l := len(c.log.entries); l < n {
+			n = l
+		}
+		table := cliTable{
+			rows:         make([]cliRow, 0, n),
+			noIndicators: true,
+		}
+
+		for _, entry := range c.log.entries[len(c.log.entries)-n:] {
+			table.rows = append(table.rows, cliRow{
+				cols: []string{
+					entry.Format(logTimeFormat),
+					terminalEscape(entry.s, false),
+				},
+			})
+		}
+
+		table.WriteTo(c.term)
+
+	case transactNowCommand:
+		c.Printf("%s Triggering immediate network transaction.\n", termPrefix)
+		select {
+		case c.fetchNowChan <- nil:
+		default:
+		}
+
+	case closeCommand:
+		c.setCurrentObject(nil)
+
+	case quitCommand:
+		c.ShutdownAndSuspend()
+		c.Printf("Goodbye!\n")
+		shouldQuit = true
+		return
+
+	case deleteCommand:
+		if c.currentObj == nil {
+			c.Printf("%s Select object first\n", termWarnPrefix)
+			return
+		}
+		if !c.deleteArmed {
+			switch obj := c.currentObj.(type) {
+			case *Contact:
+				c.Printf("%s You attempted to delete a contact (%s). Doing so removes all messages to and from that contact and revokes their ability to send you messages. To confirm, enter the delete command again.\n", termWarnPrefix, terminalEscape(obj.name, false))
+			case *Draft:
+				toName := "<unknown>"
+				if obj.to != 0 {
+					toName = c.ContactName(obj.to)
+				}
+				c.Printf("%s You attempted to delete a draft message (to %s). To confirm, enter the delete command again.\n", termWarnPrefix, terminalEscape(toName, false))
+			case *queuedMessage:
+				c.queueMutex.Lock()
+				if c.indexOfQueuedMessage(obj) != -1 {
+					c.queueMutex.Unlock()
+					c.Printf("%s Please abort the unsent message before deleting it.\n", termErrPrefix)
+					return
+				}
+				c.queueMutex.Unlock()
+				c.Printf("%s You attempted to delete a message (to %s). To confirm, enter the delete command again.\n", termWarnPrefix, terminalEscape(c.ContactName(obj.to), false))
+			case *InboxMessage:
+				c.Printf("%s You attempted to delete a message (from %s). To confirm, enter the delete command again.\n", termWarnPrefix, terminalEscape(c.ContactName(obj.from), false))
+			default:
+				c.Printf("%s Cannot delete current object\n", termWarnPrefix)
+				return
+			}
+			c.deleteArmed = true
+			return
+		}
+		c.deleteArmed = false
+
+		switch obj := c.currentObj.(type) {
+		case *Contact:
+			c.deleteContact(obj)
+		case *Draft:
+			delete(c.drafts, obj.id)
+		case *queuedMessage:
+			c.deleteOutboxMsg(obj.id)
+		case *InboxMessage:
+			c.deleteInboxMsg(obj.id)
+		default:
+			c.Printf("%s Cannot delete current object\n", termWarnPrefix)
+			return
+		}
+		c.setCurrentObject(nil)
+		c.save()
+
+	case sendCommand:
+		draft, ok := c.currentObj.(*Draft)
+		if !ok {
+			c.Printf("%s Select draft first\n", termWarnPrefix)
+			return
+		}
+		if draft.to == 0 {
+			c.Printf("%s Draft was created in the GUI and doesn't have a destination specified. Please use the GUI to manipulate this draft.\n", termErrPrefix)
+			return
+		}
+		id, _, err := c.sendDraft(draft)
+		if err != nil {
+			c.Printf("%s Error sending: %s\n", termErrPrefix, err)
+			return
+		}
+		if draft.inReplyTo != 0 {
+			for _, msg := range c.inbox {
+				if msg.message != nil && msg.message.GetId() == draft.inReplyTo {
+					msg.acked = true
+					break
+				}
+			}
+		}
+		delete(c.drafts, draft.id)
+		c.setCurrentObject(nil)
+		for _, msg := range c.outbox {
+			if msg.id == id {
+				if msg.cliId == invalidCliId {
+					msg.cliId = c.newCliId()
+				}
+				c.Printf("%s Created new outbox entry %s%s%s\n", termInfoPrefix, termCliIdStart, msg.cliId.String(), termReset)
+				c.setCurrentObject(msg)
+				c.showQueueState()
+				break
+			}
+		}
+		c.save()
+
+	case abortCommand:
+		msg, ok := c.currentObj.(*queuedMessage)
+		if !ok {
+			c.Printf("%s Select outbox message first\n", termErrPrefix)
+			return
+		}
+
+		c.queueMutex.Lock()
+		index := c.indexOfQueuedMessage(msg)
+		if index == -1 || msg.sending {
+			c.queueMutex.Unlock()
+			c.Printf("%s Too Late to Abort!\n", termErrPrefix)
+			return
+		}
+
+		c.removeQueuedMessage(index)
+		c.queueMutex.Unlock()
+
+		c.deleteOutboxMsg(msg.id)
+		draft := c.outboxToDraft(msg)
+		c.drafts[draft.id] = draft
+		if draft.cliId == invalidCliId {
+			draft.cliId = c.newCliId()
+		}
+
+		c.Printf("%s Aborted sending %s%s%s and moved to Drafts as %s%s%s\n", termInfoPrefix, termCliIdStart, msg.cliId.String(), termReset, termCliIdStart, draft.cliId.String(), termReset)
+		c.save()
+		c.setCurrentObject(draft)
+
+	case ackCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message first\n", termWarnPrefix)
+			return
+		}
+		if msg.acked {
+			c.Printf("%s Message has already been acknowledged\n", termWarnPrefix)
+			return
+		}
+		if msg.from == 0 {
+			c.Printf("%s Cannot ack server announcement\n", termWarnPrefix)
+			return
+		}
+		msg.acked = true
+		c.sendAck(msg)
+		c.showQueueState()
+
+	case showCommand:
+		if c.currentObj == nil {
+			c.Printf("Select object first\n")
+			return
+		}
+		switch o := c.currentObj.(type) {
+		case *queuedMessage:
+			c.showOutbox(o)
+		case *InboxMessage:
+			c.showInbox(o)
+		case *Draft:
+			c.showDraft(o)
+		case *Contact:
+			c.showContact(o)
+		default:
+			c.Printf("%s Cannot show the current object\n", termWarnPrefix)
+		}
+
+	case showIdentityCommand:
+		c.showIdentity()
+
+	case showInboxSummaryCommand:
+		c.inboxSummary().WriteTo(c.term)
+
+	case showOutboxSummaryCommand:
+		c.outboxSummary().WriteTo(c.term)
+
+	case showDraftsSummaryCommand:
+		c.draftsSummary().WriteTo(c.term)
+
+	case showContactsCommand:
+		c.contactsSummary().WriteTo(c.term)
+
+	case showQueueStateCommand:
+		c.showQueueState()
+
+	case statusCommand:
+		c.showState()
+
+	case attachCommand:
+		draft, ok := c.currentObj.(*Draft)
+		if !ok {
+			c.Printf("%s Select draft first\n", termWarnPrefix)
+			return
+		}
+		contents, size, err := openAttachment(cmd.Filename)
+		if err != nil {
+			c.Printf("%s Failed to open file: %s\n", termErrPrefix, terminalEscape(err.Error(), false))
+			return
+		}
+		if size > 0 {
+			c.Printf("%s File is too large (%d bytes) to attach. Use the 'upload' command to encrypt the file and upload it to your home server. Pond will include the key in the current draft.\n", termErrPrefix, size)
+			return
+		}
+
+		base := filepath.Base(cmd.Filename)
+		a := &pond.Message_Attachment{
+			Filename: proto.String(base),
+			Contents: contents,
+		}
+		draft.attachments = append(draft.attachments, a)
+		c.Printf("%s Attached '%s' (%d bytes)\n", termPrefix, terminalEscape(base, false), len(contents))
+		c.printDraftSize(draft)
+
+	case uploadCommand:
+		draft, ok := c.currentObj.(*Draft)
+		if !ok {
+			c.Printf("%s Select draft first\n", termWarnPrefix)
+			return
+		}
+
+		base := filepath.Base(cmd.Filename)
+		id := c.randId()
+		c.Printf("%s Padding, encrypting and uploading '%s' to home server (Ctrl-C to abort):\n", termPrefix, terminalEscape(base, false))
+		cancelThunk := c.startUpload(id, cmd.Filename)
+
+		if detachment, ok := c.runBackgroundProcess(id, cancelThunk); ok {
+			draft.detachments = append(draft.detachments, detachment)
+		}
+
+	case downloadCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message\n", termWarnPrefix)
+			return
+		}
+		i, ok := c.prepareSubobjectCommand(cmd.Number, len(msg.message.DetachedFiles), "detachment")
+		if !ok {
+			return
+		}
+		id := c.randId()
+
+		if msg.message.DetachedFiles[i].Url == nil {
+			c.Printf("%s That detachment is just a key; you need to obtain the encrypted payload out-of-band. Use the save-key command and the decrypt utility the decrypt the payload.\n", termErrPrefix)
+			return
+		}
+
+		c.Printf("%s Downloading and decrypting detachment (Ctrl-C to abort):\n", termPrefix)
+		cancelThunk := c.startDownload(id, cmd.Filename, msg.message.DetachedFiles[i])
+
+		c.runBackgroundProcess(id, cancelThunk)
+
+	case saveKeyCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message\n", termWarnPrefix)
+			return
+		}
+		i, ok := c.prepareSubobjectCommand(cmd.Number, len(msg.message.DetachedFiles), "detachment")
+		if !ok {
+			return
+		}
+
+		if msg.message.DetachedFiles[i].Url != nil {
+			c.Printf("%s (Note that this detachment can be downloaded with the 'download' command)\n", termInfoPrefix)
+		}
+
+		bytes, err := proto.Marshal(msg.message.DetachedFiles[i])
+		if err != nil {
+			panic(err)
+		}
+
+		if err := ioutil.WriteFile(cmd.Filename, bytes, 0600); err != nil {
+			c.Printf("%s Failed to write file: %s\n", termErrPrefix, terminalEscape(err.Error(), false))
+		} else {
+			c.Printf("%s Wrote file\n", termPrefix)
+		}
+
+	case saveCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message\n", termWarnPrefix)
+			return
+		}
+		i, ok := c.prepareSubobjectCommand(cmd.Number, len(msg.message.Files), "attachment")
+		if !ok {
+			return
+		}
+
+		if err := ioutil.WriteFile(cmd.Filename, msg.message.Files[i].GetContents(), 0600); err != nil {
+			c.Printf("%s Failed to write file: %s\n", termErrPrefix, terminalEscape(err.Error(), false))
+		} else {
+			c.Printf("%s Wrote file\n", termPrefix)
+		}
+
+	case removeCommand:
+		draft, ok := c.currentObj.(*Draft)
+		if !ok {
+			c.Printf("%s Select draft first\n", termWarnPrefix)
+			return
+		}
+		i, ok := c.prepareSubobjectCommand(cmd.Number, len(draft.attachments)+len(draft.detachments), "attachment")
+		if !ok {
+			return
+		}
+
+		if i < len(draft.attachments) {
+			draft.attachments = append(draft.attachments[:i], draft.attachments[i+1:]...)
+			return
+		}
+		i -= len(draft.attachments)
+		draft.detachments = append(draft.detachments[:i], draft.detachments[i+1:]...)
+
+	case newContactCommand:
+		for _, contact := range c.contacts {
+			if contact.name == cmd.Name {
+				c.Printf("%s A contact with that name already exists.\n", termErrPrefix)
+				return
+			}
+		}
+
+		var sharedSecret string
+
+		for {
+			c.Printf("Enter shared secret with contact, or hit enter to generate, print and use a random one\n")
+			var err error
+			sharedSecret, err = c.term.ReadPassword("secret: ")
+			if err != nil {
+				panic(err)
+			}
+			if len(sharedSecret) == 0 || panda.IsAcceptableSecretString(sharedSecret) {
+				break
+			}
+			c.Printf("%s Checksum incorrect. Please try again.\n", termErrPrefix)
+		}
+
+		if len(sharedSecret) == 0 {
+			sharedSecret = panda.NewSecretString(c.rand)
+			c.Printf("%s Shared secret: %s\n", termPrefix, sharedSecret)
+		}
+
+		contact := &Contact{
+			name:      cmd.Name,
+			isPending: true,
+			id:        c.randId(),
+			cliId:     c.newCliId(),
+		}
+
+		c.newKeyExchange(contact)
+
+		stack := &panda.CardStack{
+			NumDecks: 1,
+		}
+		secret := panda.SharedSecret{
+			Secret: sharedSecret,
+			Cards:  *stack,
+		}
+
+		mp := c.newMeetingPlace()
+
+		c.contacts[contact.id] = contact
+		kx, err := panda.NewKeyExchange(c.rand, mp, &secret, contact.kxsBytes)
+		if err != nil {
+			panic(err)
+		}
+		kx.Testing = c.testing
+		contact.pandaKeyExchange = kx.Marshal()
+		contact.kxsBytes = nil
+
+		c.save()
+		c.pandaWaitGroup.Add(1)
+		contact.pandaShutdownChan = make(chan struct{})
+		go c.runPANDA(contact.pandaKeyExchange, contact.id, contact.name, contact.pandaShutdownChan)
+		c.Printf("%s Key exchange running in background.\n", termPrefix)
+
+	case renameCommand:
+		if contact, ok := c.currentObj.(*Contact); ok {
+			c.renameContact(contact, cmd.NewName)
+		} else {
+			c.Printf("%s Select contact first\n", termWarnPrefix)
+		}
+
+	case retainCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message first\n", termWarnPrefix)
+			return
+		}
+		msg.retained = true
+		c.save()
+
+	case dontRetainCommand:
+		msg, ok := c.currentObj.(*InboxMessage)
+		if !ok {
+			c.Printf("%s Select inbox message first\n", termWarnPrefix)
+			return
+		}
+		msg.retained = false
+		msg.exposureTime = c.Now()
+		// TODO: the CLI needs to expire messages when open as the GUI
+		// does. See guiClient.processTimer.
+		c.save()
+
+	default:
+		panic(fmt.Sprintf("Unhandled command: %#v", cmd))
+	}
+
+	return
+}
+
+func (c *cliClient) compose(to *Contact, draft *Draft, inReplyTo *InboxMessage) {
+	if draft == nil {
+		draft = &Draft{
+			id:      c.randId(),
+			created: time.Now(),
+			to:      to.id,
+			cliId:   c.newCliId(),
+		}
+		if inReplyTo != nil && inReplyTo.message != nil {
+			draft.inReplyTo = inReplyTo.message.GetId()
+			draft.body = indentForReply(inReplyTo.message.GetBody())
+		}
+		c.Printf("%s Created new draft: %s%s%s\n", termInfoPrefix, termCliIdStart, draft.cliId.String(), termReset)
+		c.drafts[draft.id] = draft
+		c.setCurrentObject(draft)
+	}
+	if to == nil {
+		to = c.contacts[draft.to]
+	}
+	if to.isPending {
+		c.Printf("%s Cannot send message to pending contact\n", termErrPrefix)
+		return
+	}
+
+	tempDir, err := system.SafeTempDir()
+	if err != nil {
+		c.Printf("%s Failed to get safe temp directory: %s\n", termErrPrefix, err)
+		return
+	}
+
+	tempFile, err := ioutil.TempFile(tempDir, "pond-cli-")
+	if err != nil {
+		c.Printf("%s Failed to create temp file: %s\n", termErrPrefix, err)
+		return
+	}
+	tempFileName := tempFile.Name()
+	defer func() {
+		os.Remove(tempFileName)
+	}()
+
+	fmt.Fprintf(tempFile, "# Pond message. Lines prior to the first blank line are ignored.\nTo: %s\n\n", to.name)
+	if len(draft.body) == 0 {
+		tempFile.WriteString("\n")
+	} else {
+		tempFile.WriteString(draft.body)
+	}
+
+	// The editor is forced to vim because I'm not sure about leaks from
+	// other editors. (I'm not sure about leaks from vim either, but at
+	// least I can set some arguments to remove the obvious ones.)
+	cmd := exec.Command("vim", "-n", "--cmd", "set modelines=0", "-c", "set viminfo=", "+4", "--", tempFileName)
+	cmd.Stdin = os.Stdin
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+
+	if err := cmd.Run(); err != nil {
+		c.Printf("%s Failed to run editor: %s\n", termErrPrefix, err)
+		return
+	}
+	tempFile.Close()
+	tempFile, err = os.Open(tempFileName)
+	if err != nil {
+		c.Printf("%s Failed to open temp file: %s\n", termErrPrefix, err)
+		return
+	}
+	contents, err := ioutil.ReadAll(tempFile)
+	if err != nil {
+		c.Printf("%s Failed to read temp file: %s\n", termErrPrefix, err)
+		return
+	}
+
+	if i := bytes.Index(contents, []byte("\n\n")); i >= 0 {
+		contents = contents[i+2:]
+	}
+	draft.body = string(contents)
+	c.printDraftSize(draft)
+
+	c.save()
+}
+
+func (c *cliClient) showInbox(msg *InboxMessage) {
+	sentTimeText, eraseTimeText, msgText := msg.Strings()
+	msg.read = true
+
+	table := cliTable{
+		noIndicators:      true,
+		noTrailingNewline: true,
+		rows: []cliRow{
+			cliRow{cols: []string{"From", terminalEscape(c.ContactName(msg.from), false)}},
+			cliRow{cols: []string{"Sent", sentTimeText}},
+			cliRow{cols: []string{"Erase", eraseTimeText}},
+			cliRow{cols: []string{"Retain", fmt.Sprintf("%t", msg.retained)}},
+		},
+	}
+	table.WriteTo(c.term)
+
+	if msg.message != nil {
+		if len(msg.message.Files) > 0 {
+			c.Printf("%s Attachments (use 'save <#> <filename>' to save):\n", termHeaderPrefix)
+		}
+		for i, attachment := range msg.message.Files {
+			c.Printf("%s     %d: %s (%d bytes):\n", termHeaderPrefix, i+1, terminalEscape(attachment.GetFilename(), false), len(attachment.Contents))
+		}
+		if len(msg.message.DetachedFiles) > 0 {
+			c.Printf("%s Detachments (use '[download|save-key] <#> <filename>' to save):\n", termHeaderPrefix)
+		}
+		for i, detachment := range msg.message.DetachedFiles {
+			disposition := ""
+			if detachment.Url != nil {
+				disposition = ", downloadable"
+			}
+			c.Printf("%s     %d: %s (%d bytes%s):\n", termHeaderPrefix, i+1, terminalEscape(detachment.GetFilename(), false), detachment.GetSize(), disposition)
+		}
+	}
+	c.Printf("\n")
+	c.term.Write([]byte(terminalEscape(string(msgText), true /* line breaks ok */)))
+	c.Printf("\n")
+}
+
+func (c *cliClient) showOutbox(msg *queuedMessage) {
+	contact := c.contacts[msg.to]
+	var sentTime string
+	if contact.revokedUs {
+		sentTime = "(never - contact has revoked us)"
+	} else {
+		sentTime = formatTime(msg.sent)
+	}
+	eraseTime := formatTime(msg.created.Add(messageLifetime))
+
+	table := cliTable{
+		noIndicators: true,
+		rows: []cliRow{
+			cliRow{cols: []string{"To", terminalEscape(contact.name, false)}},
+			cliRow{cols: []string{"Created", formatTime(time.Unix(*msg.message.Time, 0))}},
+			cliRow{cols: []string{"Sent", sentTime}},
+			cliRow{cols: []string{"Acknowledged", formatTime(msg.acked)}},
+			cliRow{cols: []string{"Erase", eraseTime}},
+		},
+	}
+	table.WriteTo(c.term)
+
+	if len(msg.message.Files) > 0 {
+		c.Printf("%s Attachments:\n", termHeaderPrefix)
+	}
+	for _, attachment := range msg.message.Files {
+		c.Printf("%s     %s (%d bytes):\n", termHeaderPrefix, terminalEscape(attachment.GetFilename(), false), len(attachment.Contents))
+	}
+	if len(msg.message.DetachedFiles) > 0 {
+		c.Printf("%s Detachments:\n", termHeaderPrefix)
+	}
+	for _, detachment := range msg.message.DetachedFiles {
+		c.Printf("%s     %s (%d bytes):\n", termHeaderPrefix, terminalEscape(detachment.GetFilename(), false), detachment.GetSize())
+	}
+	if len(msg.message.Files) > 0 || len(msg.message.DetachedFiles) > 0 {
+		c.Printf("\n")
+	}
+
+	c.term.Write([]byte(terminalEscape(string(msg.message.Body), true /* line breaks ok */)))
+	c.Printf("\n")
+}
+
+func (c *cliClient) showDraft(msg *Draft) {
+	to := "(not specified)"
+	if msg.to != 0 {
+		to = c.ContactName(msg.to)
+	}
+	c.Printf("%s To: %s\n", termHeaderPrefix, terminalEscape(to, false))
+	c.Printf("%s Created: %s\n", termHeaderPrefix, formatTime(msg.created))
+	if len(msg.attachments) > 0 {
+		c.Printf("%s Attachments (use 'remove <#>' to remove):\n", termHeaderPrefix)
+	}
+	for i, attachment := range msg.attachments {
+		c.Printf("%s     %d: %s (%d bytes):\n", termHeaderPrefix, i+1, terminalEscape(attachment.GetFilename(), false), len(attachment.Contents))
+	}
+	if len(msg.detachments) > 0 {
+		c.Printf("%s Detachments (use 'remove <#>' to remove):\n", termHeaderPrefix)
+	}
+	for i, detachment := range msg.detachments {
+		c.Printf("%s     %d: %s (%d bytes):\n", termHeaderPrefix, 1+len(msg.attachments)+i, terminalEscape(detachment.GetFilename(), false), detachment.GetSize())
+	}
+	c.Printf("\n")
+	c.term.Write([]byte(terminalEscape(string(msg.body), true /* line breaks ok */)))
+	c.Printf("\n")
+}
+
+func (c *cliClient) renameContact(contact *Contact, newName string) {
+	if contact.name == newName {
+		return
+	}
+
+	for _, contact := range c.contacts {
+		if contact.name == newName {
+			c.Printf("%s Another contact already has that name.\n", termErrPrefix)
+			return
+		}
+	}
+
+	contact.name = newName
+	c.save()
+}
+
+func (c *cliClient) showContact(contact *Contact) {
+	if len(contact.pandaResult) > 0 {
+		c.Printf("%s PANDA error: %s\n", termErrPrefix, terminalEscape(contact.pandaResult, false))
+	}
+	if contact.revoked {
+		c.Printf("%s This contact has been revoked\n", termWarnPrefix)
+	}
+	if contact.revokedUs {
+		c.Printf("%s This contact has revoked access\n", termWarnPrefix)
+	}
+	if contact.isPending {
+		c.Printf("%s This contact is pending\n", termWarnPrefix)
+	}
+
+	table := cliTable{
+		noIndicators: true,
+		rows: []cliRow{
+			cliRow{cols: []string{"Name", terminalEscape(contact.name, false)}},
+			cliRow{cols: []string{"Server", terminalEscape(contact.theirServer, false)}},
+			cliRow{cols: []string{"Generation", fmt.Sprintf("%d", contact.generation)}},
+			cliRow{cols: []string{"Public key", fmt.Sprintf("%x", contact.theirPub[:])}},
+			cliRow{cols: []string{"Identity key", fmt.Sprintf("%x", contact.theirIdentityPublic[:])}},
+			cliRow{cols: []string{"Client version", fmt.Sprintf("%d", contact.supportedVersion)}},
+		},
+	}
+	table.WriteTo(c.term)
+
+	if len(contact.events) > 0 {
+		table = cliTable{
+			noIndicators: true,
+			heading:      "Events for this contact",
+		}
+		for _, event := range contact.events {
+			table.rows = append(table.rows,
+				cliRow{cols: []string{event.t.Format(logTimeFormat), terminalEscape(event.msg, false)}},
+			)
+		}
+
+		table.WriteTo(c.term)
+	}
+}
+
+func NewCLIClient(stateFilename string, rand io.Reader, testing, autoFetch bool) *cliClient {
+	c := &cliClient{
+		client: client{
+			testing:            testing,
+			dev:                testing,
+			autoFetch:          autoFetch,
+			stateFilename:      stateFilename,
+			log:                NewLog(),
+			rand:               rand,
+			contacts:           make(map[uint64]*Contact),
+			drafts:             make(map[uint64]*Draft),
+			newMessageChan:     make(chan NewMessage),
+			messageSentChan:    make(chan messageSendResult, 1),
+			backgroundChan:     make(chan interface{}, 8),
+			pandaChan:          make(chan pandaUpdate, 1),
+			usedIds:            make(map[uint64]bool),
+			signingRequestChan: make(chan signingRequest),
+		},
+		cliIdsAssigned: make(map[cliId]bool),
+	}
+	c.ui = c
+
+	c.newMeetingPlace = func() panda.MeetingPlace {
+		return &panda.HTTPMeetingPlace{
+			TorAddress: c.torAddress,
+			URL:        "https://panda-key-exchange.appspot.com/exchange",
+		}
+	}
+	c.log.toStderr = false
+	return c
+}
diff --git a/client/client.go b/client/client.go
new file mode 100644
index 0000000..0d5ddef
--- /dev/null
+++ b/client/client.go
@@ -0,0 +1,1476 @@
+package main
+
+// The Pond client consists of a number of goroutines:
+//
+// The initial goroutine handles GTK and sits in the GTK event loop most of the
+// time. It reads requests to change the UI from UI.Actions() and writes UI
+// events to UI.Events(). Since its sitting in a GTK mainloop, after writing to
+// UI.Actions(), UI.Signal() must be called which wakes up the UI goroutine and
+// triggers the processing of any pending requests.
+//
+// The "main" goroutine is started immediately and exclusively drives the UI.
+// The reason that the "main" goroutine isn't the initial goroutine is that, on
+// OS X, the system really likes the native UI calls to be made from the
+// initial thread.
+//
+// The main goroutine drives the startup process, loads state from disk etc.
+// During startup it interacts with the UI channels directly but once startup
+// has completed it sits in nextEvent(). The UI goroutine is callback based
+// because GTK is callback based, but the main goroutine has a synchronous
+// model. The nextEvent() call reads from a number of differnet channels,
+// including UI.Events() and either processes the event directly, returns the
+// event to the calling function, or returns and indicates that it's a global
+// event. Global events are basically clicks on the left-hand-side of the UI
+// which stop the current UI flow and start a different one.
+//
+// There are two utility goroutines with which the main goroutine communicates:
+//
+// The state writing goroutine is passed the serialised state for writing to
+// the disk every time c.save() is called. It avoids having disk or TPM latency
+// hang the main goroutine.
+//
+// The network goroutine handles sending and receiving messages. It shares a
+// locked queue with the main goroutine in the form of client.queue. Once
+// something has been added to the queue, the network goroutine owns it. This
+// is complex when it comes to handling revocations because that involves
+// resigning messages that have already been queued and thus part of the
+// handling has to happen on the network goroutine.
+//
+// Lastly there are two types of O(n) goroutines: detachment and PANDA
+// goroutines.
+//
+// Detachment goroutines handle the encryption/decryption and upload/download
+// of detactments. They feed their results back into nextEvent().
+//
+// PANDA goroutines handle shared-secret key exchanges. They spend most of
+// their time sleeping, waiting to poll the MeetingPlace. In tests, the mock
+// MeetingPlace can be gracefully shutdown but, in normal operation, these
+// goroutines are just killed. Their state is preserved because it's serialised
+// whenever they write a log message.
+//
+//
+// There are two flags that affect operation: dev and testing. Development mode
+// is triggered by an environment variable: POND=dev. It causes a number of
+// changes, including: servers are not contacted over Tor, fetches happen once
+// every 5 seconds and the default server is on localhost.
+//
+// In addition to dev mode, there's testing mode. (Testing mode implies dev.)
+// Testing mode is used by the unittests and generally changes things so that
+// the tests can fully synchonise and avoid non-determinism.
+
+import (
+	"bufio"
+	"bytes"
+	"crypto/rand"
+	"encoding/binary"
+	"encoding/hex"
+	"errors"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"net"
+	"os"
+	"os/exec"
+	"sort"
+	"strconv"
+	"sync"
+	"time"
+
+	"github.com/agl/ed25519"
+	"github.com/agl/ed25519/extra25519"
+	"github.com/agl/pond/bbssig"
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/client/ratchet"
+	"github.com/agl/pond/panda"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/nacl/secretbox"
+)
+
+const (
+	// messageLifetime is the default amount of time for which we'll keep a
+	// message. (Counting from the time that it was received.)
+	messageLifetime = 7 * 24 * time.Hour
+	// messagePreIndicationLifetime is the amount of time that a message
+	// remains before the background color changes to indicate that it will
+	// be deleted soon.
+	messagePreIndicationLifetime = 6 * 24 * time.Hour
+	// messageGraceTime is the amount of time that we'll leave a message
+	// before deletion after it has been marked as not-retained, or after
+	// startup.
+	messageGraceTime = 5 * time.Minute
+	// The current protocol version implemented by this code.
+	protoVersion = 1
+)
+
+const (
+	shortTimeFormat = "Jan _2 15:04"
+	logTimeFormat   = "Jan _2 15:04:05"
+	keyExchangePEM  = "POND KEY EXCHANGE"
+)
+
+// client is the main structure containing most of the client's state.
+type client struct {
+	// testing is true in unittests and disables some assertions that are
+	// needed in the real world, but which make testing difficult.
+	testing bool
+	// dev is true if POND=dev is in the environment. Unittests also set this.
+	dev bool
+	// autoFetch controls whether the network goroutine performs periodic
+	// transactions or waits for outside prompting.
+	autoFetch bool
+	// newMeetingPlace is a function that returns a PANDA MeetingPlace. In
+	// tests this can be overridden to return a testing meeting place.
+	newMeetingPlace func() panda.MeetingPlace
+
+	ui UI
+	// stateFilename is the filename of the file on disk in which we
+	// load/save our state.
+	stateFilename string
+	// stateLock protects the state against concurrent access by another
+	// program.
+	stateLock *disk.Lock
+	// torAddress contains a string like "127.0.0.1:9050", which specifies
+	// the address of the local Tor SOCKS proxy.
+	torAddress string
+
+	// server is the URL of the user's home server.
+	server string
+	// identity is a curve25519 private value that's used to authenticate
+	// the client to its home server.
+	identity, identityPublic [32]byte
+	// groupPriv is the group private key for the user's delivery group.
+	groupPriv *bbssig.PrivateKey
+	// prevGroupPrivs contains previous group private keys that have been
+	// revoked. This allows us to process messages that were inflight at
+	// the time of the revocation.
+	prevGroupPrivs []previousGroupPrivateKey
+	// generation is the generation number of the group private key and is
+	// incremented when a member of the group is revoked.
+	generation uint32
+	// priv is an Ed25519 private key.
+	priv [64]byte
+	// pub is the public key corresponding to |priv|.
+	pub  [32]byte
+	rand io.Reader
+	// lastErasureStorageTime is the time at which we last rotated the
+	// erasure storage value.
+	lastErasureStorageTime time.Time
+	// writerChan is a channel that the disk goroutine reads from to
+	// receive updated, serialised states.
+	writerChan chan disk.NewState
+	// writerDone is a channel that is closed by the disk goroutine when it
+	// has finished all pending updates.
+	writerDone chan struct{}
+	// fetchNowChan is the channel that the network goroutine reads from
+	// that triggers an immediate network transaction. Mostly intended for
+	// testing.
+	fetchNowChan chan chan bool
+
+	log *Log
+
+	// outbox contains all outgoing messages.
+	outbox   []*queuedMessage
+	drafts   map[uint64]*Draft
+	contacts map[uint64]*Contact
+	inbox    []*InboxMessage
+
+	// queue is a queue of messages for transmission that's shared with the
+	// network goroutine and protected by queueMutex.
+	queue      []*queuedMessage
+	queueMutex sync.Mutex
+	// newMessageChan receives messages that have been read from the home
+	// server by the network goroutine.
+	newMessageChan chan NewMessage
+	// messageSentChan receives the ids of messages that have been sent by
+	// the network goroutine.
+	messageSentChan chan messageSendResult
+	// backgroundChan is used for signals from background processes - e.g.
+	// detachment uploads.
+	backgroundChan chan interface{}
+	// pandaChan receives messages from goroutines in runPANDA about
+	// changes to PANDA key exchange state.
+	pandaChan chan pandaUpdate
+	// pandaWaitGroup is incremented for each running PANDA goroutine.
+	pandaWaitGroup sync.WaitGroup
+	// signingRequestChan receives requests to sign messages for delivery,
+	// just before they are sent to the destination server.
+	signingRequestChan chan signingRequest
+
+	// usedIds records ID numbers that have been assigned in the current
+	// state file.
+	usedIds map[uint64]bool
+
+	// timerChan fires every two minutes so that messages can be erased.
+	timerChan <-chan time.Time
+	// nowFunc is a function that, if not nil, will be used by the GUI to
+	// get the current time. This is used in testing.
+	nowFunc func() time.Time
+
+	// simulateOldClient causes the client to act like a pre-ratchet client
+	// for testing purposes.
+	simulateOldClient bool
+
+	// disableV2Ratchet causes the client to advertise and process V1
+	// axolotl ratchet support.
+	disableV2Ratchet bool
+
+	// receiveHookCommand is command to run upon receiving a message.
+	receiveHookCommand string
+}
+
+// UI abstracts behaviour that is specific to a given interface (GUI or CLI).
+// Generic code can call these functions to perform interface-specific
+// behaviour.
+type UI interface {
+	initUI()
+	// loadingUI shows a basic "loading" prompt while the state file is read.
+	loadingUI()
+	// torPromptUI prompts the user to start Tor.
+	torPromptUI() error
+	// sleepUI waits the given amount of time or never returns if the user
+	// closes the UI.
+	sleepUI(d time.Duration) error
+	// errorUI shows an error and returns.
+	errorUI(msg string, fatal bool)
+	// ShutdownAndSuspend quits the program - possibly waiting for the user
+	// to close the window in the case of a GUI so any error message can be
+	// read first.
+	ShutdownAndSuspend() error
+	createPassphraseUI() (string, error)
+	createErasureStorage(pw string, stateFile *disk.StateFile) error
+	// createAccountUI allows the user to either create a new account or to
+	// import from a entombed statefile. It returns whether an import
+	// occured and an error.
+	createAccountUI(stateFile *disk.StateFile, pw string) (bool, error)
+	keyPromptUI(stateFile *disk.StateFile) error
+	processFetch(msg *InboxMessage)
+	processServerAnnounce(announce *InboxMessage)
+	processAcknowledgement(ackedMsg *queuedMessage)
+	// processRevocationOfUs is called when a revocation is received that
+	// revokes our group key for a contact.
+	processRevocationOfUs(by *Contact)
+	// processRevocation is called when we have finished processing a
+	// revocation. This includes revocations of others and of this
+	// ourselves. In the latter case, this is called after
+	// processRevocationOfUs.
+	processRevocation(by *Contact)
+	// processMessageSent is called when an outbox message has been
+	// delivered to the destination server.
+	processMessageDelivered(msg *queuedMessage)
+	// processPANDAUpdateUI is called on each PANDA update to update the
+	// UI and unseal pending messages.
+	processPANDAUpdateUI(update pandaUpdate)
+	// removeInboxMessageUI removes a message from the inbox UI.
+	removeInboxMessageUI(msg *InboxMessage)
+	// removeOutboxMessageUI removes a message from the outbox UI.
+	removeOutboxMessageUI(msg *queuedMessage)
+	// addRevocationMessageUI notifies the UI that a new revocation message
+	// has been created.
+	addRevocationMessageUI(msg *queuedMessage)
+	// removeContactUI removes a contact from the UI.
+	removeContactUI(contact *Contact)
+	// logEventUI is called when an exceptional event has been logged for
+	// the given contact.
+	logEventUI(contact *Contact, event Event)
+	// mainUI starts the main interface.
+	mainUI()
+}
+
+type messageSendResult struct {
+	// If the id is zero then a message wasn't actually sent - this is just
+	// the transact goroutine poking the UI because the queue has been
+	// updated.
+	id uint64
+	// revocation optionally contains a revocation update that resulted
+	// from attempting to send a message.
+	revocation *pond.SignedRevocation
+	// extraRevocations optionally contains revocations further to
+	// |revocation|. This is only non-empty if |revocation| is non-nil.
+	extraRevocations []*pond.SignedRevocation
+}
+
+// signingRequest is a structure that is sent from the network thread to the
+// main thread to request that a message be signed with a group signature for
+// delivery.
+type signingRequest struct {
+	msg        *queuedMessage
+	resultChan chan *pond.Request
+}
+
+// pendingDecryption represents a detachment decryption/download operation
+// that's in progress. These are not saved to disk.
+type pendingDecryption struct {
+	// index is used by the UI code and indexes the list of detachments in
+	// a message.
+	index int
+	// cancel is a thunk that causes the task to be canceled at some point
+	// in the future.
+	cancel func()
+}
+
+// cliId represents a short, unique ID that is assigned by the command-line
+// interface so that users can select an object by typing a short sequence of
+// letters and digits. The value is 15 bits long and represented as a string in
+// z-base-32.
+type cliId uint
+
+const invalidCliId cliId = 0
+
+// See http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt
+const zBase32Chars = "ybndrfg8ejkmcpqxot1uwisza345h769"
+
+func (id cliId) String() string {
+	var chars [3]byte
+
+	for i := range chars {
+		chars[i] = zBase32Chars[id&31]
+		id >>= 5
+	}
+
+	return string(chars[:])
+}
+
+func cliIdFromString(s string) (id cliId, ok bool) {
+	if len(s) != 3 {
+		return
+	}
+
+	var shift uint
+
+NextChar:
+	for _, r := range s {
+		for i, r2 := range zBase32Chars {
+			if r == r2 {
+				id |= cliId(i) << shift
+				shift += 5
+				continue NextChar
+			}
+		}
+
+		return
+	}
+
+	ok = true
+	return
+}
+
+// InboxMessage represents a message in the client's inbox. (Acks also appear
+// as InboxMessages, but their message.Body is empty.)
+type InboxMessage struct {
+	id           uint64
+	read         bool
+	receivedTime time.Time
+	from         uint64
+	// sealed contained the encrypted message if the contact who sent this
+	// message is still pending.
+	sealed []byte
+	acked  bool
+	// message may be nil if the contact who sent this is pending. In this
+	// case, sealed with contain the encrypted message.
+	message *pond.Message
+	// cliId is a number, assigned by the command-line interface, to
+	// identity this message for the duration of the session. It's not
+	// saved to disk.
+	cliId cliId
+	// retained is true if the user has chosen to retain this message -
+	// i.e. to opt it out of the usual, time-based, auto-deletion.
+	retained bool
+	// exposureTime contains the time when the message was last "exposed".
+	// This is used to allow a small period of time for the user to mark a
+	// message as retained (messageGraceTime). For example, if a message is
+	// loaded at startup and has expired then it's a candidate for
+	// deletion, but the exposureTime will be the startup time, which
+	// ensures that we leave it a few minutes before deletion. Setting
+	// retained to false also resets the exposureTime.
+	exposureTime time.Time
+
+	decryptions map[uint64]*pendingDecryption
+}
+
+func (msg *InboxMessage) Strings() (sentTime, eraseTime, body string) {
+	isPending := msg.message == nil
+	if isPending {
+		body = "(cannot display message as key exchange is still pending)"
+		sentTime = "(unknown)"
+	} else {
+		sentTime = time.Unix(*msg.message.Time, 0).Format(time.RFC1123)
+		body = "(cannot display message as encoding is not supported)"
+		if msg.message.BodyEncoding != nil {
+			switch *msg.message.BodyEncoding {
+			case pond.Message_RAW:
+				body = string(msg.message.Body)
+			}
+		}
+	}
+	eraseTime = msg.receivedTime.Add(messageLifetime).Format(time.RFC1123)
+	return
+}
+
+// NewMessage is sent from the network goroutine to the client goroutine and
+// contains messages fetched from the home server.
+type NewMessage struct {
+	fetched  *pond.Fetched
+	announce *pond.ServerAnnounce
+	ack      chan bool
+}
+
+// Contact represents a contact to which we can send messages.
+type Contact struct {
+	// id is only locally valid.
+	id uint64
+	// name is the friendly name that the user chose for this contact. It
+	// is unique for all contacts.
+	name string
+	// isPending is true if we haven't received a key exchange message from
+	// this contact.
+	isPending bool
+	// kxsBytes is the serialised key exchange message that we generated
+	// for this contact. (Only valid if |isPending| is true.)
+	kxsBytes []byte
+	// groupKey is the group member key that we gave to this contact.
+	// myGroupKey is the one that they gave to us.
+	groupKey, myGroupKey *bbssig.MemberKey
+	// previousTags contains bbssig tags that were previously used by this
+	// contact. The tag of a contact changes when a recovation is
+	// processed, but old messages may still be queued.
+	previousTags []previousTag
+	// generation is the current group generation number that we know for
+	// this contact.
+	generation uint32
+	// theirServer is the URL of the contact's home server.
+	theirServer string
+	// theirPub is their Ed25519 public key.
+	theirPub [32]byte
+	// theirIdentityPublic is the public identity that their home server
+	// knows them by.
+	theirIdentityPublic [32]byte
+	// supportedVersion contains the greatest protocol version number that
+	// we have observed from this contact.
+	supportedVersion int32
+	// revoked is true if this contact has been revoked.
+	revoked bool
+	// revokedUs is true if this contact has recoved us.
+	revokedUs bool
+	// pandaKeyExchange contains the serialised PANDA state if a key
+	// exchange is ongoing.
+	pandaKeyExchange []byte
+	// pandaShutdownChan is a channel that can be closed to trigger the
+	// shutdown of an individual PANDA exchange.
+	pandaShutdownChan chan struct{}
+	// pandaResult contains an error message in the event that a PANDA key
+	// exchange failed.
+	pandaResult string
+	// events contains a log of important events relating to this contact.
+	events []Event
+
+	// Members for the old ratchet.
+	lastDHPrivate        [32]byte
+	currentDHPrivate     [32]byte
+	theirLastDHPublic    [32]byte
+	theirCurrentDHPublic [32]byte
+
+	// New ratchet support.
+	ratchet *ratchet.Ratchet
+
+	cliId cliId
+}
+
+// Event represents a log entry. This does not apply to the global log, which
+// is quite chatty, but rather to significant events related to a given
+// contact. These events are surfaced in the UI and recorded in the statefile.
+type Event struct {
+	t   time.Time
+	msg string
+}
+
+// contactList is a sortable slice of Contacts.
+type contactList []*Contact
+
+func (cl contactList) Len() int {
+	return len(cl)
+}
+
+func (cl contactList) Less(i, j int) bool {
+	return cl[i].name < cl[j].name
+}
+
+func (cl contactList) Swap(i, j int) {
+	cl[i], cl[j] = cl[j], cl[i]
+}
+
+func (c *client) contactsSorted() []*Contact {
+	contacts := contactList(make([]*Contact, 0, len(c.contacts)))
+	for _, contact := range c.contacts {
+		contacts = append(contacts, contact)
+	}
+	sort.Sort(contacts)
+	return contacts
+}
+
+// previousTagLifetime contains the amount of time that we'll store a previous
+// tag (or previous group private key) for.
+const previousTagLifetime = 14 * 24 * time.Hour
+
+// previousTag represents a group signature tag that was previously assigned to
+// a contact. In the event of a revocation, all the tags change but we need to
+// know the previous tags for a certain amount of time because messages may
+// have been created before the contact saw the revocation update.
+type previousTag struct {
+	tag []byte
+	// expired contains the time at which this tag was expired - i.e. the
+	// timestamp when the revocation occured.
+	expired time.Time
+}
+
+// previousGroupPrivateKey represents a group private key that has been
+// revoked. These are retained for the same reason as previous tags.
+type previousGroupPrivateKey struct {
+	priv *bbssig.PrivateKey
+	// expired contains the time at which this tag was expired - i.e. the
+	// timestamp when the revocation occured.
+	expired time.Time
+}
+
+// pendingDetachment represents a detachment conversion/upload operation that's
+// in progress. These are not saved to disk.
+type pendingDetachment struct {
+	size   int64
+	path   string
+	cancel func()
+}
+
+type Draft struct {
+	id          uint64
+	created     time.Time
+	to          uint64
+	body        string
+	inReplyTo   uint64
+	attachments []*pond.Message_Attachment
+	detachments []*pond.Message_Detachment
+	// cliId is a number, assigned by the command-line interface, to
+	// identity this message for the duration of the session. It's not
+	// saved to disk.
+	cliId cliId
+
+	// pendingDetachments is only used by the GTK UI.
+	pendingDetachments map[uint64]*pendingDetachment
+}
+
+// prettyNumber formats n in base 10 and puts commas between groups of
+// thousands.
+func prettyNumber(n uint64) string {
+	s := strconv.FormatUint(n, 10)
+	ret := make([]rune, 0, len(s)*2)
+
+	phase := len(s) % 3
+	for i, r := range s {
+		if phase == 0 && i > 0 {
+			ret = append(ret, ',')
+		}
+		ret = append(ret, r)
+		phase--
+		if phase < 0 {
+			phase += 3
+		}
+	}
+
+	return string(ret)
+}
+
+// usageString returns a description of the amount of space taken up by a body
+// with the given contents and a bool indicating overflow.
+func (draft *Draft) usageString() (string, bool) {
+	var replyToId *uint64
+	if draft.inReplyTo != 0 {
+		replyToId = proto.Uint64(1)
+	}
+	var dhPub [32]byte
+
+	msg := &pond.Message{
+		Id:               proto.Uint64(0),
+		Time:             proto.Int64(1 << 62),
+		Body:             []byte(draft.body),
+		BodyEncoding:     pond.Message_RAW.Enum(),
+		InReplyTo:        replyToId,
+		MyNextDh:         dhPub[:],
+		Files:            draft.attachments,
+		DetachedFiles:    draft.detachments,
+		SupportedVersion: proto.Int32(protoVersion),
+	}
+
+	serialized, err := proto.Marshal(msg)
+	if err != nil {
+		panic("error while serialising candidate Message: " + err.Error())
+	}
+
+	s := fmt.Sprintf("%s of %s bytes", prettyNumber(uint64(len(serialized))), prettyNumber(pond.MaxSerializedMessage))
+	return s, len(serialized) > pond.MaxSerializedMessage
+}
+
+type queuedMessage struct {
+	request    *pond.Request
+	id         uint64
+	to         uint64
+	server     string
+	created    time.Time
+	sent       time.Time
+	acked      time.Time
+	revocation bool
+	message    *pond.Message
+
+	// sending is true if the transact goroutine is currently sending this
+	// message. This is protected by the queueMutex.
+	sending bool
+
+	// cliId is a number, assigned by the command-line interface, to
+	// identity this message for the duration of the session. It's not
+	// saved to disk.
+	cliId cliId
+}
+
+func (qm *queuedMessage) indicator(contact *Contact) Indicator {
+	switch {
+	case !qm.acked.IsZero():
+		return indicatorGreen
+	case !qm.sent.IsZero():
+		if qm.revocation {
+			// Revocations are never acked so they are green as
+			// soon as they are sent.
+			return indicatorGreen
+		}
+		return indicatorYellow
+	case contact != nil && contact.revokedUs:
+		return indicatorBlack
+	}
+	return indicatorRed
+}
+
+// outboxToDraft converts an outbox message back to a Draft. This is used when
+// the user aborts the sending of a message.
+func (c *client) outboxToDraft(msg *queuedMessage) *Draft {
+	draft := &Draft{
+		id:          msg.id,
+		created:     msg.created,
+		to:          msg.to,
+		body:        string(msg.message.Body),
+		attachments: msg.message.Files,
+		detachments: msg.message.DetachedFiles,
+	}
+
+	if irt := msg.message.GetInReplyTo(); irt != 0 {
+		// The inReplyTo value of a draft references *our* id for the
+		// inbox message. But the InReplyTo field of a pond.Message
+		// references's the contact's id for the message. So we need to
+		// enumerate the messages in the inbox from that contact and
+		// find the one with the matching id.
+		for _, inboxMsg := range c.inbox {
+			if inboxMsg.from == msg.to && inboxMsg.message != nil && inboxMsg.message.GetId() == irt {
+				draft.inReplyTo = inboxMsg.id
+				break
+			}
+		}
+	}
+
+	return draft
+}
+
+func (c *client) ContactName(id uint64) string {
+	if id == 0 {
+		return "Home Server"
+	}
+	return c.contacts[id].name
+}
+
+// detectTor sets c.torAddress, either from the POND_TOR_ADDRESS environment
+// variable if it is set or by attempting to connect to port 9050 and 9150 on
+// the local host and assuming that Tor is running on the first port that it
+// finds to be open.
+func (c *client) detectTor() bool {
+	c.torAddress = "127.0.0.1:9050" // default for dev mode.
+
+	if addr := os.Getenv("POND_TOR_ADDRESS"); len(addr) != 0 {
+		if _, _, err := net.SplitHostPort(addr); err != nil {
+			c.log.Printf("Ignoring POND_TOR_ADDRESS because of parse error: %s", err)
+		} else {
+			c.torAddress = addr
+			c.log.Printf("Using POND_TOR_ADDRESS=%s", addr)
+			return true
+		}
+	}
+
+	ports := []int{9050, 9150}
+	for _, port := range ports {
+		addr := fmt.Sprintf("127.0.0.1:%d", port)
+		conn, err := net.Dial("tcp", addr)
+		if err != nil {
+			continue
+		}
+		c.torAddress = addr
+		conn.Close()
+		return true
+	}
+
+	return false
+}
+
+var knownServers = []struct {
+	nickname    string
+	description string
+	uri         string
+}{
+	{"wau", "Wau Holland Foundation", "pondserver://25WHHEVD3565FGIOXJZWV7LGQFR4BTO3HF3FWHEW7PCYPFMFPVOQ@vx652n4utsodj5c6.onion"},
+	{"hoi", "Hoi Polloi (https://hoi-polloi.org)", "pondserver://4V6Q5M2AFLBW6UIYL2B5LMKDHEBA6HRHR6UIUU3VDQFNI3BHZAEQ@oum7argqrnlzpcro.onion"},
+}
+
+func (c *client) enqueue(m *queuedMessage) {
+	c.queueMutex.Lock()
+	defer c.queueMutex.Unlock()
+
+	c.queue = append(c.queue, m)
+}
+
+func maybeTruncate(s string) string {
+	if runes := []rune(s); len(runes) > 30 {
+		runes = runes[:30]
+		runes = append(runes, 0x2026 /* ellipsis */)
+		return string(runes)
+	}
+	return s
+}
+
+func formatTime(t time.Time) string {
+	if t.IsZero() {
+		return "(not yet)"
+	}
+	return t.Format(time.RFC1123)
+}
+
+var errInterrupted = errors.New("cli: interrupt signal")
+
+func (c *client) loadUI() error {
+	c.ui.initUI()
+
+	if !c.detectTor() && !c.dev {
+		if err := c.ui.torPromptUI(); err != nil {
+			return err
+		}
+	}
+
+	c.receiveHookCommand = os.Getenv("POND_HOOK_RECEIVE")
+
+	c.ui.loadingUI()
+
+	stateFile := &disk.StateFile{
+		Path: c.stateFilename,
+		Rand: c.rand,
+		Log: func(format string, args ...interface{}) {
+			c.log.Printf(format, args...)
+		},
+	}
+
+	var newAccount, imported bool
+	var err error
+	if c.stateLock, err = stateFile.Lock(false /* don't create */); err == nil && c.stateLock == nil {
+		c.ui.errorUI("State file locked by another process. Waiting for lock.", false)
+		c.log.Errorf("Waiting for locked state file")
+
+		for {
+			if c.stateLock, err = stateFile.Lock(false /* don't create */); c.stateLock != nil {
+				break
+			}
+			if err := c.ui.sleepUI(1 * time.Second); err != nil {
+				return err
+			}
+		}
+	} else if err == nil {
+	} else if os.IsNotExist(err) {
+		newAccount = true
+	} else {
+		c.ui.errorUI(err.Error(), true)
+		if err := c.ui.ShutdownAndSuspend(); err != nil {
+			return err
+		}
+	}
+
+	if newAccount {
+		pub, priv, err := ed25519.GenerateKey(rand.Reader)
+		if err != nil {
+			panic(err)
+		}
+		copy(c.priv[:], priv[:])
+		copy(c.pub[:], pub[:])
+
+		if c.disableV2Ratchet {
+			c.randBytes(c.identity[:])
+		} else {
+			extra25519.PrivateKeyToCurve25519(&c.identity, priv)
+		}
+		curve25519.ScalarBaseMult(&c.identityPublic, &c.identity)
+
+		c.groupPriv, err = bbssig.GenerateGroup(rand.Reader)
+		if err != nil {
+			panic(err)
+		}
+		pw, err := c.ui.createPassphraseUI()
+		if err != nil {
+			return err
+		}
+		c.ui.createErasureStorage(pw, stateFile)
+		imported, err = c.ui.createAccountUI(stateFile, pw)
+		if err != nil {
+			return err
+		}
+	} else {
+		// First try with zero key.
+		err := c.loadState(stateFile, "")
+		for err == disk.BadPasswordError {
+			// That didn't work, try prompting for a key.
+			err = c.ui.keyPromptUI(stateFile)
+		}
+		if err == errInterrupted {
+			return err
+		}
+		if err != nil {
+			// Fatal error loading state. Abort.
+			c.ui.errorUI(err.Error(), true)
+			if err := c.ui.ShutdownAndSuspend(); err != nil {
+				return err
+			}
+		}
+	}
+
+	if newAccount && !imported {
+		c.stateLock, err = stateFile.Lock(true /* create */)
+		if err != nil {
+			err = errors.New("Failed to create state file: " + err.Error())
+		} else if c.stateLock == nil {
+			err = errors.New("Failed to obtain lock on created state file")
+		}
+		if err != nil {
+			c.ui.errorUI(err.Error(), true)
+			if err := c.ui.ShutdownAndSuspend(); err != nil {
+				return err
+			}
+		}
+		c.lastErasureStorageTime = time.Now()
+	}
+
+	c.writerChan = make(chan disk.NewState)
+	c.writerDone = make(chan struct{})
+	c.fetchNowChan = make(chan chan bool, 1)
+
+	// Start disk and network workers.
+	go stateFile.StartWriter(c.writerChan, c.writerDone)
+	go c.transact()
+	if newAccount {
+		c.save()
+	}
+
+	// Start any pending key exchanges.
+	for _, contact := range c.contacts {
+		if len(contact.pandaKeyExchange) == 0 {
+			continue
+		}
+		c.pandaWaitGroup.Add(1)
+		contact.pandaShutdownChan = make(chan struct{})
+		go c.runPANDA(contact.pandaKeyExchange, contact.id, contact.name, contact.pandaShutdownChan)
+	}
+
+	c.ui.mainUI()
+
+	return nil
+}
+
+func (contact *Contact) subline() string {
+	switch {
+	case contact.revokedUs:
+		return "has revoked"
+	case contact.isPending:
+		return "pending"
+	case len(contact.pandaResult) > 0:
+		return "failed"
+	case !contact.isPending && contact.ratchet == nil:
+		return "old ratchet"
+	}
+	return ""
+}
+
+func (contact *Contact) indicator() Indicator {
+	switch {
+	case contact.revokedUs:
+		return indicatorBlack
+	case contact.isPending:
+		return indicatorYellow
+	}
+	return indicatorNone
+}
+
+func (contact *Contact) processKeyExchange(kxsBytes []byte, testing, simulateOldClient, disableV2Ratchet bool) error {
+	var kxs pond.SignedKeyExchange
+	if err := proto.Unmarshal(kxsBytes, &kxs); err != nil {
+		return err
+	}
+
+	var sig [64]byte
+	if len(kxs.Signature) != len(sig) {
+		return errors.New("invalid signature length")
+	}
+	copy(sig[:], kxs.Signature)
+
+	var kx pond.KeyExchange
+	if err := proto.Unmarshal(kxs.Signed, &kx); err != nil {
+		return err
+	}
+
+	if len(kx.PublicKey) != len(contact.theirPub) {
+		return errors.New("invalid public key")
+	}
+	copy(contact.theirPub[:], kx.PublicKey)
+
+	if !ed25519.Verify(&contact.theirPub, kxs.Signed, &sig) {
+		return errors.New("invalid signature")
+	}
+
+	contact.theirServer = *kx.Server
+	if _, _, err := parseServer(contact.theirServer, testing); err != nil {
+		return err
+	}
+
+	group, ok := new(bbssig.Group).Unmarshal(kx.Group)
+	if !ok {
+		return errors.New("invalid group")
+	}
+	if contact.myGroupKey, ok = new(bbssig.MemberKey).Unmarshal(group, kx.GroupKey); !ok {
+		return errors.New("invalid group key")
+	}
+
+	if len(kx.IdentityPublic) != len(contact.theirIdentityPublic) {
+		return errors.New("invalid public identity")
+	}
+	copy(contact.theirIdentityPublic[:], kx.IdentityPublic)
+
+	if simulateOldClient {
+		kx.Dh1 = nil
+	}
+
+	if len(kx.Dh1) == 0 {
+		// They are using an old-style ratchet. We have to extract the
+		// private value from the Ratchet in order to use it with the
+		// old code.
+		contact.lastDHPrivate = contact.ratchet.GetKXPrivateForTransition()
+		if len(kx.Dh) != len(contact.theirCurrentDHPublic) {
+			return errors.New("invalid public DH value")
+		}
+		copy(contact.theirCurrentDHPublic[:], kx.Dh)
+		contact.ratchet = nil
+	} else {
+		// If the identity and ed25519 public keys are the same (modulo
+		// isomorphism) then the contact is using the v2 ratchet.
+		var ed25519Public, curve25519Public [32]byte
+		copy(ed25519Public[:], kx.PublicKey)
+		extra25519.PublicKeyToCurve25519(&curve25519Public, &ed25519Public)
+		v2 := !disableV2Ratchet && bytes.Equal(curve25519Public[:], kx.IdentityPublic[:])
+		if err := contact.ratchet.CompleteKeyExchange(&kx, v2); err != nil {
+			return err
+		}
+	}
+
+	contact.generation = *kx.Generation
+
+	return nil
+}
+
+// logEvent records an exceptional event relating to the given contact.
+func (c *client) logEvent(contact *Contact, msg string) {
+	event := Event{
+		t:   time.Now(),
+		msg: msg,
+	}
+	contact.events = append(contact.events, event)
+	c.log.Errorf("While processing message from %s: %s", contact.name, msg)
+	c.ui.logEventUI(contact, event)
+}
+
+func (c *client) randBytes(buf []byte) {
+	if _, err := io.ReadFull(c.rand, buf); err != nil {
+		panic(err)
+	}
+}
+
+func (c *client) randId() uint64 {
+	var idBytes [8]byte
+	for {
+		c.randBytes(idBytes[:])
+		n := binary.LittleEndian.Uint64(idBytes[:])
+		if n == 0 {
+			continue
+		}
+		if c.usedIds[n] {
+			continue
+		}
+		c.usedIds[n] = true
+		return n
+	}
+	panic("unreachable")
+}
+
+// Now is a wrapper around time.Now() that allows unittests to override the
+// current time.
+func (c *client) Now() time.Time {
+	if c.nowFunc == nil {
+		return time.Now()
+	}
+	return c.nowFunc()
+}
+
+// registerId records that an ID number has been used, typically because we are
+// loading a state file.
+func (c *client) registerId(id uint64) {
+	if c.usedIds[id] {
+		panic("duplicate ID registered")
+	}
+	c.usedIds[id] = true
+}
+
+func (c *client) newRatchet(contact *Contact) *ratchet.Ratchet {
+	r := ratchet.New(c.rand)
+	r.MyIdentityPrivate = &c.identity
+	r.MySigningPublic = &c.pub
+	r.TheirIdentityPublic = &contact.theirIdentityPublic
+	r.TheirSigningPublic = &contact.theirPub
+	return r
+}
+
+func (c *client) newKeyExchange(contact *Contact) {
+	var err error
+	if contact.groupKey, err = c.groupPriv.NewMember(c.rand); err != nil {
+		panic(err)
+	}
+	contact.ratchet = c.newRatchet(contact)
+
+	kx := &pond.KeyExchange{
+		PublicKey:      c.pub[:],
+		IdentityPublic: c.identityPublic[:],
+		Server:         proto.String(c.server),
+		Group:          contact.groupKey.Group.Marshal(),
+		GroupKey:       contact.groupKey.Marshal(),
+		Generation:     proto.Uint32(c.generation),
+	}
+	contact.ratchet.FillKeyExchange(kx)
+	if c.simulateOldClient {
+		kx.Dh1 = nil
+	}
+
+	kxBytes, err := proto.Marshal(kx)
+	if err != nil {
+		panic(err)
+	}
+
+	sig := ed25519.Sign(&c.priv, kxBytes)
+
+	kxs := &pond.SignedKeyExchange{
+		Signed:    kxBytes,
+		Signature: sig[:],
+	}
+
+	if contact.kxsBytes, err = proto.Marshal(kxs); err != nil {
+		panic(err)
+	}
+}
+
+func (c *client) contactByName(name string) (*Contact, bool) {
+	for _, contact := range c.contacts {
+		if contact.name == name {
+			return contact, true
+		}
+	}
+
+	return nil, false
+}
+
+func (c *client) deleteInboxMsg(id uint64) {
+	newInbox := make([]*InboxMessage, 0, len(c.inbox))
+	for _, inboxMsg := range c.inbox {
+		if inboxMsg.id == id {
+			continue
+		}
+		newInbox = append(newInbox, inboxMsg)
+	}
+	c.inbox = newInbox
+}
+
+// dropSealedAndAckMessagesFrom removes all sealed or pure-ack messages from
+// the given contact, from the inbox.
+func (c *client) dropSealedAndAckMessagesFrom(contact *Contact) {
+	newInbox := make([]*InboxMessage, 0, len(c.inbox))
+	for _, inboxMsg := range c.inbox {
+		if inboxMsg.from == contact.id &&
+			(len(inboxMsg.sealed) > 0 ||
+				(inboxMsg.message != nil && len(inboxMsg.message.Body) == 0)) {
+			continue
+		}
+		newInbox = append(newInbox, inboxMsg)
+	}
+	c.inbox = newInbox
+}
+
+func (c *client) deleteOutboxMsg(id uint64) {
+	newOutbox := make([]*queuedMessage, 0, len(c.outbox))
+	for _, outboxMsg := range c.outbox {
+		if outboxMsg.id == id {
+			continue
+		}
+		newOutbox = append(newOutbox, outboxMsg)
+	}
+	c.outbox = newOutbox
+}
+
+func (c *client) indexOfQueuedMessage(msg *queuedMessage) (index int) {
+	// c.queueMutex must be held before calling this function.
+
+	for i, queuedMsg := range c.queue {
+		if queuedMsg == msg {
+			return i
+		}
+	}
+
+	return -1
+}
+
+func (c *client) removeQueuedMessage(index int) {
+	// c.queueMutex must be held before calling this function.
+
+	var newQueue []*queuedMessage
+	for i, queuedMsg := range c.queue {
+		if i != index {
+			newQueue = append(newQueue, queuedMsg)
+		}
+	}
+	c.queue = newQueue
+}
+
+// If sending a message fails for any reason then we want to move the
+// message to the end of the queue so that we never clog the queue with
+// an unsendable message. However, we also don't want to reorder messages
+// so all messages to the same contact are moved to the end of the queue.
+func (c *client) moveContactsMessagesToEndOfQueue(id uint64) {
+	// c.queueMutex must be held before calling this function.
+
+	if len(c.queue) < 2 {
+		// There are no other orders for queues of length zero or one.
+		return
+	}
+
+	newQueue := make([]*queuedMessage, 0, len(c.queue))
+	movedMessages := make([]*queuedMessage, 0, 2)
+
+	for _, queuedMsg := range c.queue {
+		if queuedMsg.to == id {
+			movedMessages = append(movedMessages, queuedMsg)
+		} else {
+			newQueue = append(newQueue, queuedMsg)
+		}
+	}
+	newQueue = append(newQueue, movedMessages...)
+	c.queue = newQueue
+}
+
+func (c *client) deleteContact(contact *Contact) {
+	var newInbox []*InboxMessage
+	for _, msg := range c.inbox {
+		if msg.from == contact.id {
+			c.ui.removeInboxMessageUI(msg)
+			continue
+		}
+		newInbox = append(newInbox, msg)
+	}
+	c.inbox = newInbox
+
+	for _, draft := range c.drafts {
+		if draft.to == contact.id {
+			draft.to = 0
+		}
+	}
+
+	c.queueMutex.Lock()
+	var newQueue []*queuedMessage
+	for _, msg := range c.queue {
+		if msg.to == contact.id && !msg.revocation {
+			continue
+		}
+		newQueue = append(newQueue, msg)
+	}
+	c.queue = newQueue
+	c.queueMutex.Unlock()
+
+	var newOutbox []*queuedMessage
+	for _, msg := range c.outbox {
+		if msg.to == contact.id && !msg.revocation {
+			c.ui.removeOutboxMessageUI(msg)
+			continue
+		}
+		newOutbox = append(newOutbox, msg)
+	}
+	c.outbox = newOutbox
+
+	revocationMessage := c.revoke(contact)
+	c.ui.addRevocationMessageUI(revocationMessage)
+
+	if contact.pandaShutdownChan != nil {
+		close(contact.pandaShutdownChan)
+	}
+
+	c.ui.removeContactUI(contact)
+	delete(c.contacts, contact.id)
+}
+
+// indentForReply returns a copy of in where the beginning of each line is
+// prefixed with "> ", as is typical for replies.
+func indentForReply(i []byte) string {
+	in := bufio.NewReader(bytes.NewBuffer(i))
+	var out bytes.Buffer
+
+	newLine := true
+	for {
+		line, isPrefix, err := in.ReadLine()
+		if err != nil {
+			break
+		}
+
+		if newLine {
+			if len(line) > 0 {
+				out.WriteString("> ")
+			} else {
+				out.WriteString(">")
+			}
+		}
+		out.Write(line)
+		newLine = !isPrefix
+		if !isPrefix {
+			out.WriteString("\n")
+		}
+	}
+
+	return string(out.Bytes())
+}
+
+// RunPANDA runs in its own goroutine and runs a PANDA key exchange.
+func (c *client) runPANDA(serialisedKeyExchange []byte, id uint64, name string, shutdown chan struct{}) {
+	var result []byte
+	defer c.pandaWaitGroup.Done()
+
+	c.log.Printf("Starting PANDA key exchange with %s", name)
+
+	kx, err := panda.UnmarshalKeyExchange(c.rand, c.newMeetingPlace(), serialisedKeyExchange)
+	kx.Testing = c.testing
+	kx.Log = func(format string, args ...interface{}) {
+		serialised := kx.Marshal()
+		c.pandaChan <- pandaUpdate{
+			id:         id,
+			serialised: serialised,
+		}
+		c.log.Printf("Key exchange with %s: %s", name, fmt.Sprintf(format, args...))
+	}
+	kx.ShutdownChan = shutdown
+
+	if err == nil {
+		result, err = kx.Run()
+	}
+
+	if err == panda.ShutdownErr {
+		return
+	}
+
+	c.pandaChan <- pandaUpdate{
+		id:     id,
+		err:    err,
+		result: result,
+	}
+}
+
+// processPANDAUpdate runs on the main client goroutine and handles messages
+// from a runPANDA goroutine.
+func (c *client) processPANDAUpdate(update pandaUpdate) {
+	contact, ok := c.contacts[update.id]
+	if !ok {
+		return
+	}
+
+	switch {
+	case update.err != nil:
+		contact.pandaResult = update.err.Error()
+		contact.pandaKeyExchange = nil
+		contact.pandaShutdownChan = nil
+		c.log.Printf("Key exchange with %s failed: %s", contact.name, update.err)
+	case update.serialised != nil:
+		if bytes.Equal(contact.pandaKeyExchange, update.serialised) {
+			return
+		}
+		contact.pandaKeyExchange = update.serialised
+	case update.result != nil:
+		contact.pandaKeyExchange = nil
+		contact.pandaShutdownChan = nil
+
+		if err := contact.processKeyExchange(update.result, c.dev, c.simulateOldClient, c.disableV2Ratchet); err != nil {
+			contact.pandaResult = err.Error()
+			update.err = err
+			c.log.Printf("Key exchange with %s failed: %s", contact.name, err)
+		} else {
+			c.log.Printf("Key exchange with %s complete", contact.name)
+			contact.isPending = false
+		}
+	}
+
+	c.ui.processPANDAUpdateUI(update)
+	c.save()
+}
+
+type pandaUpdate struct {
+	id         uint64
+	err        error
+	result     []byte
+	serialised []byte
+}
+
+func openAttachment(path string) (contents []byte, size int64, err error) {
+	file, err := os.Open(path)
+	if err != nil {
+		return
+	}
+	defer file.Close()
+
+	fi, err := file.Stat()
+	if err != nil {
+		return
+	}
+	if fi.Size() < pond.MaxSerializedMessage-500 {
+		contents, err = ioutil.ReadAll(file)
+		size = -1
+	} else {
+		size = fi.Size()
+	}
+	return
+}
+
+// entomb encrypts and *destroys* the statefile. The encrypted statefile is
+// written to tombFile (with tombPath). The function log will be called during
+// the process to give status updates. It returns the random key of the
+// encrypted statefile and whether the process was successful. If unsuccessful,
+// the original statefile will not be destroyed.
+func (c *client) entomb(tombPath string, tombFile *os.File, log func(string, ...interface{})) (keyHex *[32]byte, ok bool) {
+	log("Emtombing statefile to %s\n", tombPath)
+	log("Stopping network processing...\n")
+	if c.fetchNowChan != nil {
+		close(c.fetchNowChan)
+	}
+	log("Stopping active key exchanges...\n")
+	for _, contact := range c.contacts {
+		if contact.pandaShutdownChan != nil {
+			close(contact.pandaShutdownChan)
+		}
+	}
+	log("Serialising state...\n")
+	stateBytes := c.marshal()
+
+	var key [32]byte
+	c.randBytes(key[:])
+	var nonce [24]byte
+	log("Encrypting...\n")
+	encrypted := secretbox.Seal(nil, stateBytes, &nonce, &key)
+
+	log("Writing...\n")
+	if _, err := tombFile.Write(encrypted); err != nil {
+		log("Error writing: %s\n", err)
+		return nil, false
+	}
+	log("Syncing...\n")
+	if err := tombFile.Sync(); err != nil {
+		log("Error syncing: %s\n", err)
+		return nil, false
+	}
+	if err := tombFile.Close(); err != nil {
+		log("Error closing: %s\n", err)
+		return nil, false
+	}
+
+	readBack, err := ioutil.ReadFile(tombPath)
+	if err != nil {
+		log("Error rereading: %s\n", err)
+		return nil, false
+	}
+	if !bytes.Equal(readBack, encrypted) {
+		log("Contents of tomb file incorrect\n")
+		return nil, false
+	}
+
+	log("The ephemeral key is: %x\n", key)
+	log("You must write the ephemeral key down now! Store it somewhat erasable!\n")
+
+	log("Erasing statefile... ")
+	c.writerChan <- disk.NewState{stateBytes, false, true /* destruct */}
+	<-c.writerDone
+	log("done\n")
+
+	return &key, true
+}
+
+// importTombFile decrypts a file with the given path, using a hex-encoded key
+// and loads the client state from the result.
+func (c *client) importTombFile(stateFile *disk.StateFile, keyHex, path string) error {
+	keyBytes, err := hex.DecodeString(keyHex)
+	if err != nil {
+		return err
+	}
+
+	var key [32]byte
+	var nonce [24]byte
+	if len(keyBytes) != len(key) {
+		return fmt.Errorf("Incorrect key length: %d (want %d)", len(keyBytes), len(key))
+	}
+	copy(key[:], keyBytes)
+
+	tombBytes, err := ioutil.ReadFile(path)
+	if err != nil {
+		return err
+	}
+
+	plaintext, ok := secretbox.Open(nil, tombBytes, &nonce, &key)
+	if !ok {
+		return errors.New("Incorrect key")
+	}
+
+	c.stateLock, err = stateFile.Lock(true /* create */)
+	if c.stateLock == nil && err == nil {
+		return errors.New("Output statefile is locked.")
+	}
+	if err != nil {
+		return err
+	}
+
+	writerChan := make(chan disk.NewState)
+	writerDone := make(chan struct{})
+	go stateFile.StartWriter(writerChan, writerDone)
+
+	writerChan <- disk.NewState{State: plaintext}
+	close(writerChan)
+	<-writerDone
+
+	return nil
+}
+
+// receiveHook runs any configured commands to notify the user that a new
+// message has been received.
+func (c *client) receiveHook() {
+	if len(c.receiveHookCommand) == 0 {
+		return
+	}
+
+	cmd := exec.Command(c.receiveHookCommand)
+	go func() {
+		if err := cmd.Run(); err != nil {
+			c.log.Errorf("Failed to run receive hook command: %s", err.Error())
+		}
+	}()
+}
diff --git a/client/client_test.go b/client/client_test.go
new file mode 100644
index 0000000..38627e0
--- /dev/null
+++ b/client/client_test.go
@@ -0,0 +1,2440 @@
+package main
+
+import (
+	"bufio"
+	"bytes"
+	"crypto/rand"
+	"errors"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"strconv"
+	"strings"
+	"sync"
+	"syscall"
+	"testing"
+	"time"
+
+	panda "github.com/agl/pond/panda"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+)
+
+// clientLogToStderr controls whether the TestClients will log to stderr during
+// the test. This produces too much noise to be enabled all the time, but it
+// can be helpful when debugging.
+const clientLogToStderr = false
+
+// Since t.Log calls don't result in any output until the test terminates, this
+// constant can be tweaked to enable logging to stderr.
+const debugDeadlock = false
+
+const parallel = true
+
+// logActions causes all GUI events to be written to the test log.
+const logActions = false
+
+type TestServer struct {
+	cmd      *exec.Cmd
+	port     int
+	identity string
+	stateDir string
+}
+
+func NewTestServer(t *testing.T) (*TestServer, error) {
+	var err error
+	server := new(TestServer)
+	if server.stateDir, err = ioutil.TempDir("", "pond-client-test"); err != nil {
+		return nil, err
+	}
+
+	// To ensure that the server dies when the test exits, we install a
+	// socketpair into the child process and set a command line flag to
+	// tell the server to exit if it sees EOF on that socket. Since we hold
+	// the other end in this process, the kernel will close it for us if we
+	// die.
+	pipeFds, err := syscall.Socketpair(syscall.AF_UNIX, syscall.SOCK_STREAM, 0)
+	if err != nil {
+		return nil, err
+	}
+	syscall.CloseOnExec(pipeFds[0])
+	syscall.CloseOnExec(pipeFds[1])
+
+	serverLifeline := os.NewFile(uintptr(pipeFds[0]), "server lifeline fd")
+	defer serverLifeline.Close()
+
+	server.cmd = exec.Command("../server/server",
+		"--init",
+		"--base-directory", server.stateDir,
+		"--port", "0",
+		"--lifeline-fd", "3",
+	)
+	server.cmd.ExtraFiles = []*os.File{serverLifeline}
+	rawStderr, err := server.cmd.StderrPipe()
+	if err != nil {
+		return nil, err
+	}
+	if err := server.cmd.Start(); err != nil {
+		return nil, err
+	}
+
+	stderr := bufio.NewReader(rawStderr)
+
+	for {
+		line, isPrefix, err := stderr.ReadLine()
+		if err != nil {
+			return nil, errors.New("error while reading status line: " + err.Error())
+		}
+		if isPrefix {
+			continue
+		}
+		if i := bytes.Index(line, []byte("Started. Listening on port ")); i != -1 {
+			line = line[i:]
+			words := strings.Split(string(line), " ")
+			if len(words) < 8 {
+				return nil, errors.New("status line from server has unexpected form: " + string(line))
+			}
+			portStr := words[4]
+			server.identity = words[7]
+
+			if server.port, err = strconv.Atoi(portStr); err != nil {
+				return nil, errors.New("failed to parse port number: " + err.Error())
+			}
+			break
+		}
+	}
+
+	go func() {
+		for {
+			line, _, err := stderr.ReadLine()
+			if err != nil {
+				return
+			}
+			t.Logf("%s\n", string(line))
+		}
+	}()
+
+	return server, nil
+}
+
+func (server *TestServer) URL() string {
+	return fmt.Sprintf("pondserver://%s@127.0.0.1:%d", server.identity, server.port)
+}
+
+func (server *TestServer) Close() {
+	server.cmd.Process.Kill()
+	server.cmd.Wait()
+	os.RemoveAll(server.stateDir)
+}
+
+type TestGUI struct {
+	actions        chan interface{}
+	events         chan interface{}
+	signal         chan chan bool
+	currentStateID int
+	info           string
+	t              *testing.T
+	text           map[string]string
+	combos         map[string][]string
+	fileOpen       FileOpen
+	haveFileOpen   bool
+	panicOnSignal  bool
+}
+
+func NewTestGUI(t *testing.T) *TestGUI {
+	return &TestGUI{
+		actions:        make(chan interface{}, 16),
+		events:         make(chan interface{}, 16),
+		signal:         make(chan chan bool),
+		currentStateID: uiStateInvalid,
+		t:              t,
+		text:           make(map[string]string),
+		combos:         make(map[string][]string),
+	}
+}
+
+func (ui *TestGUI) Actions() chan<- interface{} {
+	return ui.actions
+}
+
+func (ui *TestGUI) Events() <-chan interface{} {
+	return ui.events
+}
+
+func (ui *TestGUI) Signal() {
+	c := make(chan bool)
+	ui.signal <- c
+	<-c
+}
+
+func (ui *TestGUI) Run() {
+	panic("should never be called")
+}
+
+func (ui *TestGUI) processWidget(widget interface{}) {
+	switch v := widget.(type) {
+	case VBox:
+		for _, child := range v.children {
+			ui.processWidget(child)
+		}
+	case HBox:
+		for _, child := range v.children {
+			ui.processWidget(child)
+		}
+	case Grid:
+		for _, row := range v.rows {
+			for _, elem := range row {
+				ui.processWidget(elem.widget)
+			}
+		}
+	case EventBox:
+		ui.processWidget(v.child)
+	case Scrolled:
+		ui.processWidget(v.child)
+	case Frame:
+		ui.processWidget(v.child)
+	case TextView:
+		ui.text[v.name] = v.text
+	case Label:
+		ui.text[v.name] = v.text
+	case Combo:
+		ui.combos[v.name] = v.labels
+	}
+}
+
+func (ui *TestGUI) WaitForSignal() error {
+	var uierr error
+	ack, ok := <-ui.signal
+	if !ok {
+		panic("signal channel closed")
+	}
+
+ReadActions:
+	for {
+		select {
+		case action := <-ui.actions:
+			if logActions {
+				ui.t.Logf("%#v", action)
+			}
+			if debugDeadlock {
+				fmt.Printf("%#v\n", action)
+			}
+			switch action := action.(type) {
+			case UIState:
+				ui.currentStateID = action.stateID
+			case UIError:
+				uierr = action.err
+			case UIInfo:
+				ui.info = action.info
+			case SetText:
+				ui.text[action.name] = action.text
+			case SetTextView:
+				ui.text[action.name] = action.text
+			case SetChild:
+				ui.processWidget(action.child)
+			case Append:
+				for _, child := range action.children {
+					ui.processWidget(child)
+				}
+			case InsertRow:
+				for _, gride := range action.row {
+					ui.processWidget(gride.widget)
+				}
+			case FileOpen:
+				ui.fileOpen = action
+				ui.haveFileOpen = true
+			}
+		default:
+			break ReadActions
+		}
+	}
+	ack <- true
+
+	return uierr
+}
+
+func (ui *TestGUI) WaitForFileOpen() FileOpen {
+	ui.haveFileOpen = false
+	for !ui.haveFileOpen {
+		if err := ui.WaitForSignal(); err != nil {
+			ui.t.Fatal(err)
+		}
+	}
+	return ui.fileOpen
+}
+
+type TestClient struct {
+	*guiClient
+	stateDir      string
+	gui           *TestGUI
+	mainUIDone    bool
+	name          string
+	testTimerChan chan time.Time
+}
+
+type TestClientOptions struct {
+	initialStateFile string
+}
+
+func NewTestClient(t *testing.T, name string, options *TestClientOptions) (*TestClient, error) {
+	tc := &TestClient{
+		gui:           NewTestGUI(t),
+		name:          name,
+		testTimerChan: make(chan time.Time, 1),
+	}
+	var err error
+	if tc.stateDir, err = ioutil.TempDir("", "pond-client-test"); err != nil {
+		return nil, err
+	}
+	stateFilePath := filepath.Join(tc.stateDir, "state")
+	if options != nil && len(options.initialStateFile) != 0 {
+		inBytes, err := ioutil.ReadFile(options.initialStateFile)
+		if err != nil {
+			panic(err)
+		}
+		if err := ioutil.WriteFile(stateFilePath, inBytes, 0600); err != nil {
+			panic(err)
+		}
+	}
+	tc.guiClient = NewGUIClient(stateFilePath, tc.gui, rand.Reader, true, false)
+	tc.guiClient.log.name = name
+	tc.guiClient.log.toStderr = clientLogToStderr
+	tc.guiClient.timerChan = tc.testTimerChan
+	tc.guiClient.Start()
+	return tc, nil
+}
+
+func (tc *TestClient) Shutdown() {
+	tc.gui.t.Log("Shutting down client")
+	close(tc.gui.events)
+
+WaitForClient:
+	for {
+		select {
+		case _, ok := <-tc.gui.actions:
+			if !ok {
+				break WaitForClient
+			}
+		case ack := <-tc.gui.signal:
+			ack <- true
+		}
+	}
+}
+
+func (tc *TestClient) Close() {
+	tc.Shutdown()
+	os.RemoveAll(tc.stateDir)
+}
+
+func (tc *TestClient) AdvanceTo(state int) {
+	tc.gui.currentStateID = uiStateInvalid
+	for tc.gui.currentStateID != state {
+		if err := tc.gui.WaitForSignal(); err != nil {
+			tc.gui.t.Fatal(err)
+		}
+	}
+}
+
+func (tc *TestClient) Reload() {
+	tc.ReloadWithMeetingPlace(nil)
+}
+
+func (tc *TestClient) ReloadWithMeetingPlace(mp panda.MeetingPlace) {
+	tc.Shutdown()
+	oldNowFunc := tc.nowFunc
+	tc.gui = NewTestGUI(tc.gui.t)
+	tc.guiClient = NewGUIClient(filepath.Join(tc.stateDir, "state"), tc.gui, rand.Reader, true /* testing */, false /* autoFetch */)
+	tc.guiClient.log.name = tc.name
+	tc.guiClient.log.toStderr = clientLogToStderr
+	tc.guiClient.timerChan = tc.testTimerChan
+	tc.nowFunc = oldNowFunc
+	if mp != nil {
+		tc.guiClient.newMeetingPlace = func() panda.MeetingPlace {
+			return mp
+		}
+	}
+	tc.guiClient.Start()
+}
+
+func TestOpenClose(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+}
+
+func TestAccountCreation(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	client.gui.WaitForSignal()
+	if id := client.gui.currentStateID; id != uiStateLoading {
+		t.Fatalf("client in UI state %d when it was expected to be loading", id)
+	}
+
+	client.gui.WaitForSignal()
+	if id := client.gui.currentStateID; id != uiStateCreatePassphrase {
+		t.Fatalf("client in UI state %d when it was expected to be creating a passphrase", id)
+	}
+	client.gui.events <- Click{
+		name:    "next",
+		entries: map[string]string{"pw": ""},
+	}
+
+	if client.hasErasure() {
+		client.gui.WaitForSignal()
+		if id := client.gui.currentStateID; id != uiStateErasureStorage {
+			t.Fatalf("client in UI state %d when it was expected to be setting up erasure storage", id)
+		}
+
+		client.gui.events <- Click{
+			name: "continue",
+		}
+	}
+
+	client.gui.WaitForSignal()
+	if id := client.gui.currentStateID; id != uiStateCreateAccount {
+		t.Fatalf("client in UI state %d when it was expected to be creating an account", id)
+	}
+
+	client.gui.events <- Click{
+		name:    "create",
+		entries: map[string]string{"server": "asldfjksadfkl"},
+	}
+	t.Log("Waiting for error from garbage URL")
+	for {
+		if err := client.gui.WaitForSignal(); err != nil {
+			break
+		}
+	}
+
+	url := server.URL()
+	client.gui.events <- Click{
+		name:    "create",
+		entries: map[string]string{"server": url[:len(url)-1]},
+	}
+
+	t.Log("Waiting for error from invalid port")
+	for {
+		if err := client.gui.WaitForSignal(); err != nil {
+			break
+		}
+	}
+
+	t.Log("Waiting for success")
+	client.gui.events <- Click{
+		name:    "create",
+		entries: map[string]string{"server": url},
+	}
+	client.AdvanceTo(uiStateMain)
+}
+
+func proceedToMainUI(t *testing.T, client *TestClient, server *TestServer) {
+	if client.mainUIDone {
+		return
+	}
+
+	client.AdvanceTo(uiStateCreatePassphrase)
+	client.gui.events <- Click{
+		name:    "next",
+		entries: map[string]string{"pw": ""},
+	}
+
+	if client.hasErasure() {
+		client.AdvanceTo(uiStateErasureStorage)
+		client.gui.events <- Click{
+			name: "continue",
+		}
+	}
+
+	client.AdvanceTo(uiStateCreateAccount)
+	url := server.URL()
+	client.gui.events <- Click{
+		name:    "create",
+		entries: map[string]string{"server": url},
+	}
+	client.AdvanceTo(uiStateMain)
+	client.mainUIDone = true
+}
+
+func proceedToKeyExchange(t *testing.T, client *TestClient, server *TestServer, otherName string) {
+	proceedToMainUI(t, client, server)
+
+	client.gui.events <- Click{name: "newcontact"}
+	client.AdvanceTo(uiStateNewContact)
+
+	client.gui.events <- Click{
+		name:    "name",
+		entries: map[string]string{"name": otherName},
+	}
+	client.gui.events <- Click{name: "manual"}
+	client.AdvanceTo(uiStateNewContact2)
+}
+
+func proceedToPairedWithNames(t *testing.T, client1, client2 *TestClient, name1, name2 string, server *TestServer) {
+	proceedToKeyExchange(t, client1, server, name2)
+	proceedToKeyExchange(t, client2, server, name1)
+
+	client1.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client2.gui.text["kxout"]},
+	}
+	client1.AdvanceTo(uiStateShowContact)
+
+	client2.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client1.gui.text["kxout"]},
+	}
+	client2.AdvanceTo(uiStateShowContact)
+}
+
+func proceedToPaired(t *testing.T, client1, client2 *TestClient, server *TestServer) {
+	proceedToPairedWithNames(t, client1, client2, "client1", "client2", server)
+}
+
+const (
+	simulateOldRatchet = iota
+	simulateNewRatchet
+	simulateNewRatchetV2
+)
+
+func TestKeyExchange(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	testKeyExchange(t, simulateNewRatchetV2, simulateNewRatchetV2)
+}
+
+func TestKeyExchangeCrossVersion(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	testKeyExchange(t, simulateNewRatchetV2, simulateNewRatchet)
+	testKeyExchange(t, simulateNewRatchetV2, simulateOldRatchet)
+	testKeyExchange(t, simulateNewRatchet, simulateNewRatchet)
+	testKeyExchange(t, simulateNewRatchet, simulateOldRatchet)
+	testKeyExchange(t, simulateOldRatchet, simulateOldRatchet)
+}
+
+func testKeyExchange(t *testing.T, versionA, versionB int) {
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	switch versionA {
+	case simulateOldRatchet:
+		client1.simulateOldClient = true
+	case simulateNewRatchet:
+		client1.disableV2Ratchet = true
+	case simulateNewRatchetV2:
+		client1.disableV2Ratchet = false
+	}
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	switch versionB {
+	case simulateOldRatchet:
+		client2.simulateOldClient = true
+	case simulateNewRatchet:
+		client2.disableV2Ratchet = true
+	case simulateNewRatchetV2:
+		client1.disableV2Ratchet = false
+	}
+
+	proceedToKeyExchange(t, client1, server, "client2")
+	proceedToKeyExchange(t, client2, server, "client1")
+
+	client1.Reload()
+	client1.AdvanceTo(uiStateMain)
+	client1.gui.events <- Click{
+		name: client1.contactsUI.entries[0].boxName,
+	}
+	client1.AdvanceTo(uiStateNewContact2)
+	client2.Reload()
+	client2.AdvanceTo(uiStateMain)
+	client2.gui.events <- Click{
+		name: client2.contactsUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateNewContact2)
+
+	client1.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": "rubbish"},
+	}
+	t.Log("Waiting for error from garbage key exchange")
+	for {
+		if err := client1.gui.WaitForSignal(); err != nil {
+			break
+		}
+	}
+
+	kxBytes := []byte(client2.gui.text["kxout"])
+	kxBytes[55] ^= 1
+	client1.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": string(kxBytes)},
+	}
+	t.Log("Waiting for error from corrupt key exchange")
+	for {
+		if err := client1.gui.WaitForSignal(); err != nil {
+			break
+		}
+	}
+	client1.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client2.gui.text["kxout"]},
+	}
+	client1.AdvanceTo(uiStateShowContact)
+
+	client2.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client1.gui.text["kxout"]},
+	}
+	client2.AdvanceTo(uiStateShowContact)
+}
+
+func contactByName(client *TestClient, name string) (id uint64, contact *Contact) {
+	for id, contact = range client.contacts {
+		if contact.name == name {
+			return
+		}
+	}
+	panic("contact not found: " + name)
+}
+
+func clickOnContact(client *TestClient, name string) {
+	for id, contact := range client.contacts {
+		if contact.name == name {
+			for _, entry := range client.contactsUI.entries {
+				if entry.id == id {
+					client.gui.events <- Click{name: entry.boxName}
+					return
+				}
+			}
+		}
+	}
+	panic("contact not found: " + name)
+}
+
+func selectContact(t *testing.T, client *TestClient, name string) {
+	id, _ := contactByName(client, name)
+	var boxName string
+	for _, item := range client.contactsUI.entries {
+		if item.id == id {
+			boxName = item.boxName
+		}
+	}
+	if len(boxName) == 0 {
+		panic("couldn't find box for given name")
+	}
+	client.gui.events <- Click{name: boxName}
+	client.AdvanceTo(uiStateShowContact)
+}
+
+func sendMessage(client *TestClient, to string, message string) {
+	composeMessage(client, to, message)
+	transmitMessage(client, false)
+}
+
+func composeMessage(client *TestClient, to string, message string) {
+	client.gui.events <- Click{name: "compose"}
+	client.AdvanceTo(uiStateCompose)
+
+	client.gui.events <- Click{
+		name:      "send",
+		combos:    map[string]string{"to": to},
+		textViews: map[string]string{"body": message},
+	}
+
+	client.AdvanceTo(uiStateOutbox)
+}
+
+func transmitMessage(client *TestClient, readActions bool) {
+	ackChan := make(chan bool)
+	client.fetchNowChan <- ackChan
+
+WaitForAck:
+	for {
+		select {
+		case ack := <-client.gui.signal:
+			if readActions {
+			ReadActions:
+				for {
+					select {
+					case <-client.gui.actions:
+					default:
+						break ReadActions
+					}
+				}
+			}
+			ack <- true
+		case <-ackChan:
+			break WaitForAck
+		}
+	}
+}
+
+func fetchMessage(client *TestClient) (from string, msg *InboxMessage) {
+	ackChan := make(chan bool)
+	initialInboxLen := len(client.inbox)
+	client.fetchNowChan <- ackChan
+
+WaitForAck:
+	for {
+		select {
+		case ack := <-client.gui.signal:
+			ack <- true
+		case <-ackChan:
+			break WaitForAck
+		}
+	}
+
+	if len(client.inbox) <= initialInboxLen {
+		return "", nil
+	}
+	msg = client.inbox[len(client.inbox)-1]
+	if msg.from != 0 {
+		from = client.contacts[msg.from].name
+	}
+	return
+}
+
+func TestMessageExchange(t *testing.T) {
+	testMessageExchange(t, false)
+}
+
+func TestMessageExchangeCrossVersion(t *testing.T) {
+	testMessageExchange(t, true)
+}
+
+func testMessageExchange(t *testing.T, crossVersion bool) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+	client1.simulateOldClient = crossVersion
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	proceedToPaired(t, client1, client2, server)
+
+	var initialCurrentDH [32]byte
+	if crossVersion {
+		for _, contact := range client1.contacts {
+			if contact.name == "client2" {
+				copy(initialCurrentDH[:], contact.currentDHPrivate[:])
+			}
+		}
+	}
+
+	for i := 0; i < 3; i++ {
+		testMsg := fmt.Sprintf("test message %d", i)
+		sendMessage(client1, "client2", testMsg)
+		from, msg := fetchMessage(client2)
+		if from != "client1" {
+			t.Fatalf("message from %s, expected client1", from)
+		}
+		if string(msg.message.Body) != testMsg {
+			t.Fatalf("Incorrect message contents: %#v", msg)
+		}
+
+		sendMessage(client2, "client1", testMsg)
+		from, msg = fetchMessage(client1)
+		if from != "client2" {
+			t.Fatalf("message from %s, expected client2", from)
+		}
+		if string(msg.message.Body) != testMsg {
+			t.Fatalf("Incorrect message contents: %#v", msg)
+		}
+	}
+
+	if crossVersion {
+		// Ensure that the DH secrets are advancing.
+		for _, contact := range client1.contacts {
+			if contact.name == "client2" {
+				if bytes.Equal(initialCurrentDH[:], contact.currentDHPrivate[:]) {
+					t.Fatalf("DH secrets aren't advancing!")
+				}
+			}
+		}
+	}
+}
+
+func TestACKs(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, msg := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+	if string(msg.message.Body) != testMsg {
+		t.Fatalf("Incorrect message contents: %#v", msg)
+	}
+	if !client1.outbox[0].acked.IsZero() {
+		t.Fatalf("client1 incorrectly believes that its message has been acked")
+	}
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name: "ack",
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	ackChan := make(chan bool)
+	client2.fetchNowChan <- ackChan
+WaitForAck:
+	for {
+		select {
+		case ack := <-client2.gui.signal:
+			ack <- true
+		case <-ackChan:
+			break WaitForAck
+		}
+	}
+
+	fetchMessage(client1)
+
+	if client1.outbox[0].acked.IsZero() {
+		t.Fatalf("client1 doesn't believe that its message has been acked")
+	}
+
+	client1.gui.events <- Click{
+		name: client1.outboxUI.entries[0].boxName,
+	}
+	client1.AdvanceTo(uiStateOutbox)
+	client1.gui.events <- Click{
+		name: "delete",
+	}
+	client1.AdvanceTo(uiStateMain)
+
+	if l := len(client1.outboxUI.entries); l > 0 {
+		t.Fatalf("client1 still has %d outbox UI entries after delete", l)
+	}
+
+	if l := len(client1.outbox); l > 0 {
+		t.Fatalf("client1 still has %d outbox entries after delete", l)
+	}
+}
+
+func TestHalfPairedMessageExchange(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	proceedToKeyExchange(t, client1, server, "client2")
+	proceedToKeyExchange(t, client2, server, "client1")
+
+	client1KX := client1.gui.text["kxout"]
+	client1.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client2.gui.text["kxout"]},
+	}
+	client1.AdvanceTo(uiStateShowContact)
+
+	// Now client1 is paired with client2, but client2 is still pending on
+	// client1.
+
+	// Send a message from client1 to client2.
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, msg := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+	if len(msg.sealed) == 0 {
+		t.Fatalf("no sealed message from client2")
+	}
+	if len(client2.inboxUI.entries) == 0 {
+		t.Fatalf("no pending UI entry in client2")
+	}
+
+	// Check that viewing the message in client2 doesn't crash anything.
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	client2.Reload()
+	client2.AdvanceTo(uiStateMain)
+
+	// Select the pending contact in client2 to complete the key exchange.
+	client2.gui.events <- Click{
+		name: client2.contactsUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateNewContact)
+	client2.gui.events <- Click{
+		name:      "process",
+		textViews: map[string]string{"kxin": client1KX},
+	}
+	client2.AdvanceTo(uiStateShowContact)
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	if s := client2.gui.text["body"]; s != testMsg {
+		t.Fatalf("resolved message is incorrect: %s", s)
+	}
+}
+
+func TestDraft(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	proceedToMainUI(t, client, server)
+	client.gui.events <- Click{name: "compose"}
+	client.AdvanceTo(uiStateCompose)
+
+	if l := len(client.drafts); l != 1 {
+		t.Fatalf("Bad number of drafts: %d", l)
+	}
+	var draftID uint64
+	for id := range client.drafts {
+		draftID = id
+		break
+	}
+
+	const initialText = "wibble wobble"
+
+	client.gui.events <- Update{
+		name: "body",
+		text: initialText,
+	}
+	client.Reload()
+	client.AdvanceTo(uiStateMain)
+
+	if l := len(client.drafts); l != 1 {
+		t.Fatalf("Bad number of drafts after reload: %d", l)
+	}
+
+	if l := len(client.draftsUI.entries); l != 1 {
+		t.Fatalf("Bad number of draft UI entries after reload: %d", l)
+	}
+
+	if id := client.draftsUI.entries[0].id; id != draftID {
+		t.Fatalf("Incorrect draft ID after reload: %d vs %d", id, draftID)
+	}
+
+	client.gui.events <- Click{name: client.draftsUI.entries[0].boxName}
+	client.AdvanceTo(uiStateCompose)
+	if text := client.gui.text["body"]; text != initialText {
+		t.Fatalf("Wrong message text after reload: '%s' vs '%s'", text, initialText)
+	}
+
+	attachmentFile := filepath.Join(client.stateDir, "attachment")
+	if err := ioutil.WriteFile(attachmentFile, []byte(initialText), 0644); err != nil {
+		t.Fatalf("Failed to write attachment file: %s", err)
+	}
+
+	client.gui.events <- Click{name: "attach"}
+	client.gui.events <- OpenResult{path: attachmentFile, ok: true}
+
+	client.Reload()
+	client.AdvanceTo(uiStateMain)
+	client.gui.events <- Click{name: client.draftsUI.entries[0].boxName}
+	client.AdvanceTo(uiStateCompose)
+
+	const labelPrefix = "attachment-label-"
+	var attachmentID uint64
+	for name := range client.gui.text {
+		if strings.HasPrefix(name, labelPrefix) {
+			attachmentID, err = strconv.ParseUint(name[len(labelPrefix):], 16, 64)
+			if err != nil {
+				t.Fatalf("Failed to parse attachment label: %s", name)
+			}
+			break
+		}
+	}
+
+	if attachmentID == 0 {
+		t.Fatalf("failed to find attachment after reload")
+	}
+
+	client.gui.events <- Click{name: fmt.Sprintf("remove-%x", attachmentID)}
+	client.Reload()
+	client.AdvanceTo(uiStateMain)
+	client.gui.events <- Click{name: client.draftsUI.entries[0].boxName}
+	client.AdvanceTo(uiStateCompose)
+
+	for name := range client.gui.text {
+		if strings.HasPrefix(name, labelPrefix) {
+			t.Fatalf("Found attachment after removing")
+		}
+	}
+
+	errorFile := filepath.Join(client.stateDir, "error")
+	if err := ioutil.WriteFile(errorFile, nil, 0); err != nil {
+		t.Fatalf("Failed to write error file: %s", err)
+	}
+
+	client.gui.events <- Click{name: "attach"}
+	client.gui.WaitForFileOpen()
+	client.gui.events <- OpenResult{path: attachmentFile, ok: true}
+	client.gui.events <- Click{name: "attach"}
+	client.gui.WaitForFileOpen()
+	client.gui.events <- OpenResult{path: errorFile, ok: true}
+	client.gui.WaitForSignal()
+
+	attachmentID = 0
+	const errorPrefix = "attachment-error-"
+	for name := range client.gui.text {
+		if strings.HasPrefix(name, errorPrefix) {
+			attachmentID, err = strconv.ParseUint(name[len(errorPrefix):], 16, 64)
+			if err != nil {
+				t.Fatalf("Failed to parse attachment label: %s", name)
+			}
+			break
+		}
+	}
+
+	if attachmentID == 0 {
+		t.Fatalf("failed to find error attachment")
+	}
+
+	client.gui.events <- Click{name: fmt.Sprintf("remove-%x", attachmentID)}
+	client.gui.WaitForSignal()
+}
+
+func TestDraftDiscard(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	proceedToMainUI(t, client, server)
+	client.gui.events <- Click{name: "compose"}
+	client.AdvanceTo(uiStateCompose)
+
+	if l := len(client.drafts); l != 1 {
+		t.Fatalf("Bad number of drafts: %d", l)
+	}
+
+	client.gui.events <- Click{name: "discard"}
+	client.AdvanceTo(uiStateMain)
+
+	if l := len(client.drafts); l != 0 {
+		t.Fatalf("Bad number of drafts after discard: %d", l)
+	}
+}
+
+func testDetached(t *testing.T, upload bool) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	proceedToPaired(t, client1, client2, server)
+	client1.gui.events <- Click{name: "compose"}
+	client1.AdvanceTo(uiStateCompose)
+
+	plaintextPath := filepath.Join(client1.stateDir, "file")
+	ciphertextPath := filepath.Join(client1.stateDir, "encrypted")
+	plaintext := make([]byte, 200*1024)
+	io.ReadFull(rand.Reader, plaintext)
+	if err := ioutil.WriteFile(plaintextPath, plaintext, 0644); err != nil {
+		t.Fatal(err)
+	}
+
+	client1.gui.events <- Click{name: "attach"}
+	client1.gui.WaitForFileOpen()
+	client1.gui.events <- OpenResult{path: plaintextPath, ok: true}
+	client1.gui.WaitForSignal()
+	for name := range client1.gui.text {
+		const labelPrefix = "attachment-label-"
+		if strings.HasPrefix(name, labelPrefix) {
+			attachmentID, err := strconv.ParseUint(name[len(labelPrefix):], 16, 64)
+			if err != nil {
+				t.Fatalf("Failed to parse attachment label: %s", name)
+			}
+			if upload {
+				client1.gui.events <- Click{name: fmt.Sprintf("attachment-upload-%x", attachmentID)}
+			} else {
+				client1.gui.events <- Click{name: fmt.Sprintf("attachment-convert-%x", attachmentID)}
+			}
+			break
+		}
+	}
+	if !upload {
+		fo := client1.gui.WaitForFileOpen()
+		client1.gui.events <- OpenResult{path: ciphertextPath, ok: true, arg: fo.arg}
+		client1.gui.WaitForSignal()
+	}
+
+	var draft *Draft
+	for _, d := range client1.drafts {
+		draft = d
+		break
+	}
+
+	client1.AdvanceTo(uiStateDetachmentComplete)
+
+	if len(draft.detachments) == 0 {
+		t.Errorf("detachments still empty")
+	}
+
+	client1.gui.events <- Click{
+		name:      "send",
+		combos:    map[string]string{"to": "client2"},
+		textViews: map[string]string{"body": "foo"},
+	}
+
+	client1.AdvanceTo(uiStateOutbox)
+	ackChan := make(chan bool)
+	client1.fetchNowChan <- ackChan
+
+WaitForAck:
+	for {
+		select {
+		case ack := <-client1.gui.signal:
+			ack <- true
+		case <-ackChan:
+			break WaitForAck
+		}
+	}
+
+	_, msg := fetchMessage(client2)
+	if len(msg.message.DetachedFiles) != 1 {
+		t.Fatalf("message received with no detachments")
+	}
+
+	for _, e := range client2.inboxUI.entries {
+		if e.id == msg.id {
+			client2.gui.events <- Click{name: e.boxName}
+			break
+		}
+	}
+
+	client2.AdvanceTo(uiStateInbox)
+	if upload {
+		client2.gui.events <- Click{name: "detachment-download-0"}
+	} else {
+		client2.gui.events <- Click{name: "detachment-decrypt-0"}
+	}
+	fo := client2.gui.WaitForFileOpen()
+	outputPath := filepath.Join(client1.stateDir, "output")
+	if upload {
+		client2.gui.events <- OpenResult{ok: true, path: outputPath, arg: fo.arg}
+	} else {
+		client2.gui.events <- OpenResult{ok: true, path: ciphertextPath, arg: fo.arg}
+		fo = client2.gui.WaitForFileOpen()
+		client2.gui.events <- OpenResult{ok: true, path: outputPath, arg: fo.arg}
+	}
+	client2.AdvanceTo(uiStateDetachmentComplete)
+
+	result, err := ioutil.ReadFile(outputPath)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	if !bytes.Equal(result, plaintext) {
+		t.Fatalf("bad decryption")
+	}
+}
+
+func TestDetachedFile(t *testing.T) {
+	testDetached(t, false)
+}
+
+func TestUploadDownload(t *testing.T) {
+	testDetached(t, true)
+}
+
+func TestLogOverflow(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+	proceedToMainUI(t, client1, server)
+
+	client1.gui.events <- Click{name: client1.clientUI.entries[1].boxName}
+	client1.AdvanceTo(uiStateLog)
+
+	for i := 0; i < 2*(logLimit+logSlack); i++ {
+		client1.log.Printf("%d", i)
+	}
+}
+
+func TestServerAnnounce(t *testing.T) {
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	proceedToMainUI(t, client, server)
+
+	const testMessage = "Hello world"
+	announce := &pond.Message{
+		Id:           proto.Uint64(0),
+		Time:         proto.Int64(time.Now().Unix()),
+		Body:         []byte(testMessage),
+		MyNextDh:     []byte{},
+		BodyEncoding: pond.Message_RAW.Enum(),
+	}
+	announceBytes, err := proto.Marshal(announce)
+	if err != nil {
+		t.Fatalf("Failed to marshal announce message: %s", err)
+	}
+	if err := ioutil.WriteFile(fmt.Sprintf("%s/accounts/%x/announce-00000000", server.stateDir, client.identityPublic[:]), announceBytes, 0666); err != nil {
+		t.Fatalf("Failed to write announce message: %s", err)
+	}
+
+	fetchMessage(client)
+
+	if len(client.inbox) != 1 {
+		t.Fatalf("Inbox doesn't have a message")
+	}
+	client.gui.events <- Click{
+		name: client.inboxUI.entries[0].boxName,
+	}
+	client.AdvanceTo(uiStateInbox)
+	if s := client.gui.text["body"]; s != testMessage {
+		t.Fatalf("resolved message is incorrect: %s", s)
+	}
+
+	client.Reload()
+	client.AdvanceTo(uiStateMain)
+}
+
+func TestRevoke(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	client3, err := NewTestClient(t, "client3", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client3.Close()
+
+	client4, err := NewTestClient(t, "client4", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client4.Close()
+
+	proceedToPaired(t, client1, client2, server)
+	proceedToPairedWithNames(t, client1, client3, "client1", "client3", server)
+	proceedToPairedWithNames(t, client1, client4, "client1", "client4", server)
+
+	initialGeneration := client1.generation
+
+	// Have client4 send a message before the revocation.
+	const beforeRevocationMsg = "from before revocation"
+	sendMessage(client4, "client1", beforeRevocationMsg)
+
+	var client1FromClient2 *Contact
+	for _, candidate := range client2.contacts {
+		if candidate.name == "client1" {
+			client1FromClient2 = candidate
+			break
+		}
+	}
+	if client1FromClient2.generation != initialGeneration {
+		t.Errorf("Initial generations don't match")
+	}
+
+	var client1FromClient3 *Contact
+	for _, candidate := range client3.contacts {
+		if candidate.name == "client1" {
+			client1FromClient3 = candidate
+			break
+		}
+	}
+
+	client1.gui.events <- Click{name: client1.contactsUI.entries[0].boxName}
+	client1.AdvanceTo(uiStateShowContact)
+	client1.gui.events <- Click{name: "delete"}
+	client1.gui.WaitForSignal() // button changes to "Confirm"
+	client1.gui.events <- Click{name: "delete"}
+	client1.AdvanceTo(uiStateRevocationComplete)
+
+	if client1.generation != initialGeneration+1 {
+		t.Errorf("Generation did not advance")
+	}
+
+	if len(client1.outboxUI.entries) != 1 {
+		t.Errorf("No revocation entry found after click")
+	}
+	client1.Reload()
+	client1.AdvanceTo(uiStateMain)
+
+	if len(client1.outboxUI.entries) != 1 {
+		t.Errorf("No revocation entry found after reload")
+	}
+
+	transmitMessage(client1, true)
+
+	composeMessage(client2, "client1", "test1")
+	// Select the contact before sending because we have previously crashed
+	// in this case. See https://github.com/agl/pond/issues/96.
+	client2.gui.events <- Click{name: client2.contactsUI.entries[0].boxName}
+	client2.AdvanceTo(uiStateShowContact)
+	transmitMessage(client2, false)
+	client2.AdvanceTo(uiStateRevocationProcessed)
+
+	if gen := client1FromClient2.generation; gen != client1.generation {
+		t.Errorf("Generation number didn't update: found %d, want %d", gen, client1.generation)
+	}
+	if !client1FromClient2.revokedUs {
+		t.Errorf("Client1 isn't marked as revoked")
+	}
+
+	sendMessage(client3, "client1", "test2")
+	client3.AdvanceTo(uiStateRevocationProcessed)
+
+	if gen := client1FromClient3.generation; gen != client1.generation {
+		t.Errorf("Generation number didn't update for non-revoked: found %d, want %d", gen, client1.generation)
+	}
+	if client1FromClient3.revokedUs {
+		t.Errorf("Client3 believes that it was revoked")
+	}
+
+	// Have client3 resend.
+	transmitMessage(client3, false)
+
+	// Have client1 fetch the resigned message from client3, and the
+	// message from client4 using previousTags.
+	var seenClient3, seenClient4 bool
+	for i := 0; i < 2; i++ {
+		from, msg := fetchMessage(client1)
+		switch from {
+		case "client3":
+			if seenClient3 {
+				t.Fatalf("client3 message observed twice")
+			}
+			if string(msg.message.Body) != "test2" {
+				t.Fatalf("Incorrect message contents from client3: %#v", msg)
+			}
+			seenClient3 = true
+		case "client4":
+			if seenClient4 {
+				t.Fatalf("client4 message observed twice")
+			}
+			if string(msg.message.Body) != beforeRevocationMsg {
+				t.Fatalf("Incorrect message contents client4: %#v", msg)
+			}
+			seenClient4 = true
+		}
+	}
+}
+
+func TestMultiRevoke(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	client3, err := NewTestClient(t, "client3", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client3.Close()
+
+	client4, err := NewTestClient(t, "client4", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client4.Close()
+
+	proceedToPaired(t, client1, client2, server)
+	proceedToPairedWithNames(t, client1, client3, "client1", "client3", server)
+	proceedToPairedWithNames(t, client1, client4, "client1", "client4", server)
+
+	revokeContact := func(client *TestClient, name string) {
+		found := false
+		for _, ent := range client.contactsUI.entries {
+			if client.contacts[ent.id].name == name {
+				client.gui.events <- Click{name: ent.boxName}
+				found = true
+				break
+			}
+		}
+		if !found {
+			t.Fatalf("Couldn't find contact %s", name)
+		}
+		client.AdvanceTo(uiStateShowContact)
+		client.gui.events <- Click{name: "delete"}
+		client.gui.WaitForSignal() // button changes to "Confirm"
+		client.gui.events <- Click{name: "delete"}
+		client.AdvanceTo(uiStateRevocationComplete)
+
+		transmitMessage(client, true)
+	}
+
+	// Revoke client3 and 4 from client1.
+	revokeContact(client1, "client3")
+	revokeContact(client1, "client4")
+
+	// Send a message from client2 to client1. It should hit two
+	// revocations, which should be returned in a single error from the
+	// server.
+	sendMessage(client2, "client1", "test")
+	client2.AdvanceTo(uiStateRevocationProcessed)
+	client2.AdvanceTo(uiStateRevocationProcessed)
+
+	if g := client2.contacts[client2.contactsUI.entries[0].id].generation; g != client1.generation {
+		t.Errorf("Generations don't match: %d vs %d", g, client1.generation)
+	}
+}
+
+func startPANDAKeyExchange(t *testing.T, client *TestClient, server *TestServer, otherName, sharedSecret string) {
+	proceedToMainUI(t, client, server)
+
+	client.gui.events <- Click{name: "newcontact"}
+	client.AdvanceTo(uiStateNewContact)
+
+	client.gui.events <- Click{
+		name:    "name",
+		entries: map[string]string{"name": otherName},
+	}
+	client.gui.events <- Click{name: "shared"}
+	client.AdvanceTo(uiStateNewContact2)
+
+	client.gui.events <- Click{
+		name:    "begin",
+		entries: map[string]string{"shared": sharedSecret},
+	}
+}
+
+func TestPANDA(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	mp := panda.NewSimpleMeetingPlace()
+	newMeetingPlace := func() panda.MeetingPlace {
+		return mp
+	}
+	client1.newMeetingPlace = newMeetingPlace
+	client2.newMeetingPlace = newMeetingPlace
+
+	startPANDAKeyExchange(t, client1, server, "client2", "shared secret")
+
+	client1.ReloadWithMeetingPlace(mp)
+
+	startPANDAKeyExchange(t, client2, server, "client1", "shared secret")
+
+	var wg sync.WaitGroup
+	wg.Add(2)
+	go func() {
+		client1.AdvanceTo(uiStatePANDAComplete)
+		wg.Done()
+	}()
+	go func() {
+		client2.AdvanceTo(uiStatePANDAComplete)
+		wg.Done()
+	}()
+	wg.Wait()
+
+	var client2FromClient1 *Contact
+	for _, contact := range client1.contacts {
+		client2FromClient1 = contact
+		break
+	}
+
+	var client1FromClient2 *Contact
+	for _, contact := range client2.contacts {
+		client1FromClient2 = contact
+		break
+	}
+
+	if g := client2FromClient1.generation; g != client2.generation {
+		t.Errorf("Generation mismatch %d vs %d", g, client1.generation)
+	}
+
+	if g := client1FromClient2.generation; g != client1.generation {
+		t.Errorf("Generation mismatch %d vs %d", g, client1.generation)
+	}
+}
+
+func TestReadingOldStateFiles(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", &TestClientOptions{
+		initialStateFile: "testdata/state-old",
+	})
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client1.AdvanceTo(uiStateMain)
+	client1.Reload()
+	client1.AdvanceTo(uiStateMain)
+}
+
+func testReplyACKs(t *testing.T, reloadDraft bool, abortSend bool) {
+	// Test that a message is acked by sending a reply. If reloadDraft is
+	// true then the message is reloaded as draft before sending.
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, _ := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+	if !client1.outbox[0].acked.IsZero() {
+		t.Fatalf("client1 incorrectly believes that its message has been acked")
+	}
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name: "reply",
+	}
+	client2.AdvanceTo(uiStateCompose)
+
+	if reloadDraft {
+		client2.gui.events <- Click{
+			name: client2.draftsUI.entries[0].boxName,
+		}
+		client2.AdvanceTo(uiStateCompose)
+	}
+
+	client2.gui.events <- Click{
+		name:      "send",
+		combos:    map[string]string{"to": "client1"},
+		textViews: map[string]string{"body": "reply message"},
+	}
+	client2.AdvanceTo(uiStateOutbox)
+
+	if abortSend {
+		client2.gui.events <- Click{name: "abort"}
+		client2.AdvanceTo(uiStateCompose)
+
+		client2.gui.events <- Click{
+			name:      "send",
+			combos:    map[string]string{"to": "client1"},
+			textViews: map[string]string{"body": "reply message"},
+		}
+		client2.AdvanceTo(uiStateOutbox)
+	}
+
+	ackChan := make(chan bool)
+	client2.fetchNowChan <- ackChan
+
+WaitForAck:
+	for {
+		select {
+		case ack := <-client2.gui.signal:
+			ack <- true
+		case <-ackChan:
+			break WaitForAck
+		}
+	}
+
+	from, _ = fetchMessage(client1)
+	if from != "client2" {
+		t.Fatalf("ack received from wrong contact: %s", from)
+	}
+
+	if client1.outbox[0].acked.IsZero() {
+		t.Fatalf("client1 doesn't believe that its message has been acked")
+	}
+	if !client2.inbox[0].acked {
+		t.Fatalf("client2 doesn't believe that it has acked the message")
+	}
+}
+
+func TestReplyACKs(t *testing.T) {
+	testReplyACKs(t, false, false)
+}
+
+func TestReplyACKsWithDraft(t *testing.T) {
+	testReplyACKs(t, true, false)
+}
+
+func TestReplyACKsWithDraftAndAbort(t *testing.T) {
+	testReplyACKs(t, true, true)
+}
+
+func TestCliId(t *testing.T) {
+	id := cliId(0x7ab8)
+	s := id.String()
+	t.Log(s)
+	if result, ok := cliIdFromString(s); !ok || result != id {
+		t.Fatalf("CliId parse failed: got %d, want %d", result, id)
+	}
+}
+
+func TestSendToPendingContact(t *testing.T) {
+	// Test that it's not possible to send a message to a pending contact.
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client, err := NewTestClient(t, "client", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client.Close()
+
+	proceedToMainUI(t, client, server)
+
+	client.gui.events <- Click{name: "newcontact"}
+	client.AdvanceTo(uiStateNewContact)
+
+	client.gui.events <- Click{
+		name:    "name",
+		entries: map[string]string{"name": "pendingContact"},
+	}
+	client.gui.events <- Click{name: "manual"}
+	client.AdvanceTo(uiStateNewContact2)
+
+	client.gui.events <- Click{name: "compose"}
+	client.AdvanceTo(uiStateCompose)
+
+	if contacts, ok := client.gui.combos["to"]; !ok || len(contacts) > 0 {
+		t.Error("can send message to pending contact")
+	}
+}
+
+func TestDelete(t *testing.T) {
+	// Test that deleting contacts works.
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, _ := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+
+	// Start an incomplete, manual exchange.
+	proceedToKeyExchange(t, client1, server, "client3")
+
+	// Start a PANDA exchange.
+	mp := panda.NewSimpleMeetingPlace()
+	newMeetingPlace := func() panda.MeetingPlace {
+		return mp
+	}
+	client1.newMeetingPlace = newMeetingPlace
+	startPANDAKeyExchange(t, client1, server, "client4", "secret")
+	client1.AdvanceTo(uiStateShowContact)
+
+	clickOnContact(client1, "client2")
+	client1.gui.events <- Click{name: "delete"}
+	client1.gui.events <- Click{name: "delete"}
+	client1.AdvanceTo(uiStateRevocationComplete)
+
+	if len(client1.inbox) > 0 {
+		t.Errorf("still entries in inbox")
+	}
+
+	for _, msg := range client1.outbox {
+		if !msg.revocation {
+			t.Errorf("still entries in outbox")
+			break
+		}
+	}
+
+	clickOnContact(client1, "client3")
+	client1.gui.events <- Click{name: "abort"}
+	client1.AdvanceTo(uiStateRevocationComplete)
+
+	clickOnContact(client1, "client4")
+	client1.gui.events <- Click{name: "delete"}
+	client1.gui.events <- Click{name: "delete"}
+	client1.AdvanceTo(uiStateRevocationComplete)
+
+	if len(client1.contacts) > 0 {
+		t.Errorf("still contacts")
+	}
+
+	client1.Reload()
+	client1.AdvanceTo(uiStateMain)
+}
+
+func TestExpireMessage(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, _ := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Bad initial number of inbox messages: %d", n)
+	}
+
+	baseTime := time.Now()
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Bad number of messages after first timer: %d", n)
+	}
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI after first timer: %d", n)
+	}
+
+	if client2.inboxUI.entries[0].background != colorGray {
+		t.Fatalf("Bad message background after first timer")
+	}
+
+	// Advance the clock so that the message should be indicated as near
+	// deletion.
+
+	client2.nowFunc = func() time.Time {
+		return baseTime.Add(messagePreIndicationLifetime + 10*time.Second)
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI: %d", n)
+	}
+
+	if client2.inboxUI.entries[0].background != colorDeleteSoon {
+		t.Fatalf("Bad message background after second timer")
+	}
+
+	client2.Reload()
+	client2.AdvanceTo(uiStateMain)
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI after reload: %d", n)
+	}
+
+	if client2.inboxUI.entries[0].background != colorDeleteSoon {
+		t.Fatalf("Bad message background after second reload")
+	}
+
+	client2.nowFunc = func() time.Time {
+		return baseTime.Add(messageLifetime + 10*time.Second)
+	}
+
+	client2.Reload()
+	client2.AdvanceTo(uiStateMain)
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI after second reload: %d", n)
+	}
+
+	if client2.inboxUI.entries[0].background != colorImminently {
+		t.Fatalf("Bad message background after second reload")
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI after grace period timer: %d", n)
+	}
+
+	if client2.inboxUI.entries[0].background != colorImminently {
+		t.Fatalf("Bad message background after grace period timer")
+	}
+
+	client2.nowFunc = func() time.Time {
+		return baseTime.Add(messageLifetime + 10*time.Second + messageGraceTime)
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad number of messages in listUI after expiry: %d", n)
+	}
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Bad number of messages in inbox after expiry: %d", n)
+	}
+}
+
+func TestRetainMessage(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, _ := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Bad initial number of inbox messages: %d", n)
+	}
+
+	if n := len(client2.inboxUI.entries); n != 1 {
+		t.Fatalf("Bad initial number of messages in listUI: %d", n)
+	}
+
+	msg := client2.inbox[0]
+	if msg.retained {
+		t.Fatalf("Retained flag is initially set")
+	}
+
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name:   "retain",
+		checks: map[string]bool{"retain": true},
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	if !msg.retained {
+		t.Fatalf("Retained flag not set")
+	}
+
+	client2.Reload()
+	client2.AdvanceTo(uiStateMain)
+
+	msg = client2.inbox[0]
+	if !msg.retained {
+		t.Fatalf("Retained flag lost")
+	}
+
+	baseTime := time.Now()
+	client2.nowFunc = func() time.Time {
+		return baseTime.Add(messageLifetime + 10*time.Second)
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Message was deleted while retain flag set")
+	}
+
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name:   "retain",
+		checks: map[string]bool{"retain": false},
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	if msg.retained {
+		t.Fatalf("Retain flag not cleared")
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Message was deleted while in grace period")
+	}
+
+	client2.nowFunc = func() time.Time {
+		return baseTime.Add(messageLifetime + messageGraceTime + 20*time.Second)
+	}
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inbox); n != 1 {
+		t.Fatalf("Message deleted while selected")
+	}
+
+	client2.gui.events <- Click{
+		name: "compose",
+	}
+	client2.AdvanceTo(uiStateCompose)
+
+	client2.testTimerChan <- baseTime
+	client2.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client2.inbox); n != 0 {
+		t.Fatalf("Message not deleted")
+	}
+}
+
+func TestOutboxDeletion(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+
+	client1.gui.events <- Click{
+		name: "compose",
+	}
+	client1.AdvanceTo(uiStateCompose)
+
+	if n := len(client1.outbox); n != 1 {
+		t.Fatalf("Bad initial number of outbox messages: %d", n)
+	}
+
+	baseTime := time.Now()
+	client1.nowFunc = func() time.Time {
+		return baseTime.Add(messageLifetime + 10*time.Second)
+	}
+
+	client1.testTimerChan <- baseTime
+	client1.AdvanceTo(uiStateTimerComplete)
+
+	if n := len(client1.outbox); n != 0 {
+		t.Fatalf("Outbox message not deleted")
+	}
+}
+
+func TestStateFileLocking(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	stateFile, err := os.Open(filepath.Join(client1.stateDir, "state"))
+	if err != nil {
+		t.Fatalf("Failed to open state file")
+	}
+	defer stateFile.Close()
+	if syscall.Flock(int(stateFile.Fd()), syscall.LOCK_EX|syscall.LOCK_NB) == nil {
+		t.Fatalf("Was able to lock state file")
+	}
+}
+
+func TestMergedACKs(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	// Send two messages to client2.
+	sendMessage(client1, "client2", "foo1")
+	fetchMessage(client2)
+	sendMessage(client1, "client2", "foo2")
+	fetchMessage(client2)
+
+	// Ack the two messages in client2. The second ack should merge with
+	// the first.
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[0].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name: "ack",
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	client2.gui.events <- Click{
+		name: client2.inboxUI.entries[1].boxName,
+	}
+	client2.AdvanceTo(uiStateInbox)
+	client2.gui.events <- Click{
+		name: "ack",
+	}
+	client2.AdvanceTo(uiStateInbox)
+
+	// Send only one message from client2.
+	transmitMessage(client2, false)
+
+	// Both messages should be ACKed in client1 on receipt.
+	fetchMessage(client1)
+
+	for _, msg := range client1.outbox {
+		if msg.acked.IsZero() {
+			t.Errorf("Unacked message in client1's outbox.")
+		}
+	}
+}
+
+func TestEntombing(t *testing.T) {
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	// Send a message so that we can be sure that the state file was
+	// correctly recovered.
+	sendMessage(client1, "client2", "foo1")
+	fetchMessage(client2)
+
+	// Emtomb client1.
+	client1.gui.events <- Click{
+		name: client1.clientUI.entries[0].boxName,
+	}
+	client1.AdvanceTo(uiStateShowIdentity)
+
+	client1.gui.events <- OpenResult{ok: true, path: filepath.Join(client1.stateDir, "statefile.tomb")}
+	client1.gui.events <- Click{name: "entomb"}
+	client1.AdvanceTo(uiStateEntomb)
+	client1.AdvanceTo(uiStateEntombComplete)
+
+	keyHex := client1.gui.info
+	client1.Reload()
+	client1.AdvanceTo(uiStateLoading)
+	client1.AdvanceTo(uiStateCreatePassphrase)
+	client1.gui.events <- Click{
+		name:    "next",
+		entries: map[string]string{"pw": ""},
+	}
+
+	if client1.hasErasure() {
+		client1.AdvanceTo(uiStateErasureStorage)
+		client1.gui.events <- Click{
+			name: "continue",
+		}
+	}
+
+	client1.AdvanceTo(uiStateCreateAccount)
+	client1.gui.events <- OpenResult{ok: true, path: filepath.Join(client1.stateDir, "statefile.tomb")}
+	client1.gui.events <- Click{
+		name:    "import",
+		entries: map[string]string{"tombkey": keyHex},
+	}
+	client1.AdvanceTo(uiStateMain)
+
+	if len(client1.outbox) != 1 {
+		t.Fatalf("No messages in outbox")
+	}
+}
+
+func TestContactNameChange(t *testing.T) {
+	// Exercise the code to change a contact's name.
+	if parallel {
+		t.Parallel()
+	}
+
+	server, err := NewTestServer(t)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer server.Close()
+
+	client1, err := NewTestClient(t, "client1", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client1.Close()
+
+	client2, err := NewTestClient(t, "client2", nil)
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer client2.Close()
+
+	// Setup a normal pair of clients.
+	proceedToPaired(t, client1, client2, server)
+
+	const testMsg = "test message"
+	sendMessage(client1, "client2", testMsg)
+	from, _ := fetchMessage(client2)
+	if from != "client1" {
+		t.Fatalf("message from %s, expected client1", from)
+	}
+
+	clickOnContact(client1, "client2")
+	const newName = "client2x"
+	client1.gui.events <- Update{name: "contactname", text: newName}
+	client1.gui.events <- Click{
+		name:    "changebutton",
+		entries: map[string]string{"contactname": newName},
+	}
+	client1.AdvanceTo(uiStateContactNameChanged)
+
+	if contact, _ := client1.contactByName(newName); contact == nil {
+		t.Errorf("name not updated in client")
+	}
+
+	client1.Reload()
+	client1.AdvanceTo(uiStateMain)
+
+	if contact, _ := client1.contactByName(newName); contact == nil {
+		t.Errorf("name not updated in client after reload")
+	}
+}
diff --git a/client/disk.go b/client/disk.go
new file mode 100644
index 0000000..8406609
--- /dev/null
+++ b/client/disk.go
@@ -0,0 +1,410 @@
+package main
+
+import (
+	"errors"
+	"time"
+
+	"github.com/agl/pond/bbssig"
+	"github.com/agl/pond/client/disk"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+)
+
+// erasureRotationTime is the amount of time that we'll use a single erasure
+// storage value before rotating.
+const erasureRotationTime = 24 * time.Hour
+
+func (c *client) loadState(stateFile *disk.StateFile, pw string) error {
+	parsedState, err := stateFile.Read(pw)
+	if err != nil {
+		return err
+	}
+	return c.unmarshal(parsedState)
+}
+
+func (c *client) save() {
+	c.log.Printf("Saving state")
+	now := c.Now()
+	rotateErasureStorage := now.Before(c.lastErasureStorageTime) || now.Sub(c.lastErasureStorageTime) > erasureRotationTime
+	if rotateErasureStorage {
+		c.log.Printf("Rotating erasure storage key")
+		c.lastErasureStorageTime = now
+	}
+	serialized := c.marshal()
+	c.writerChan <- disk.NewState{serialized, rotateErasureStorage, false /* don't destruct */}
+}
+
+func (c *client) unmarshal(state *disk.State) error {
+	c.server = *state.Server
+
+	if len(state.Identity) != len(c.identity) {
+		return errors.New("client: identity is wrong length in State")
+	}
+	copy(c.identity[:], state.Identity)
+	curve25519.ScalarBaseMult(&c.identityPublic, &c.identity)
+
+	group, ok := new(bbssig.Group).Unmarshal(state.Group)
+	if !ok {
+		return errors.New("client: failed to unmarshal group")
+	}
+	c.groupPriv, ok = new(bbssig.PrivateKey).Unmarshal(group, state.GroupPrivate)
+	if !ok {
+		return errors.New("client: failed to unmarshal group private key")
+	}
+
+	if len(state.Private) != len(c.priv) {
+		return errors.New("client: failed to unmarshal private key")
+	}
+	copy(c.priv[:], state.Private)
+	if len(state.Public) != len(c.pub) {
+		return errors.New("client: failed to unmarshal public key")
+	}
+	copy(c.pub[:], state.Public)
+	c.generation = *state.Generation
+
+	if state.LastErasureStorageTime != nil {
+		c.lastErasureStorageTime = time.Unix(*state.LastErasureStorageTime, 0)
+	}
+
+	for _, prevGroupPriv := range state.PreviousGroupPrivateKeys {
+		group, ok := new(bbssig.Group).Unmarshal(prevGroupPriv.Group)
+		if !ok {
+			return errors.New("client: failed to unmarshal previous group")
+		}
+		priv, ok := new(bbssig.PrivateKey).Unmarshal(group, prevGroupPriv.GroupPrivate)
+		if !ok {
+			return errors.New("client: failed to unmarshal previous group private key")
+		}
+		c.prevGroupPrivs = append(c.prevGroupPrivs, previousGroupPrivateKey{
+			priv:    priv,
+			expired: time.Unix(*prevGroupPriv.Expired, 0),
+		})
+	}
+
+	for _, cont := range state.Contacts {
+		contact := &Contact{
+			id:               *cont.Id,
+			name:             *cont.Name,
+			kxsBytes:         cont.KeyExchangeBytes,
+			pandaKeyExchange: cont.PandaKeyExchange,
+			pandaResult:      cont.GetPandaError(),
+			revokedUs:        cont.GetRevokedUs(),
+		}
+		c.registerId(contact.id)
+		c.contacts[contact.id] = contact
+		if contact.groupKey, ok = new(bbssig.MemberKey).Unmarshal(c.groupPriv.Group, cont.GroupKey); !ok {
+			return errors.New("client: failed to unmarshal group member key")
+		}
+		copy(contact.lastDHPrivate[:], cont.LastPrivate)
+		copy(contact.currentDHPrivate[:], cont.CurrentPrivate)
+
+		if cont.Ratchet != nil {
+			contact.ratchet = c.newRatchet(contact)
+			if err := contact.ratchet.Unmarshal(cont.Ratchet); err != nil {
+				return err
+			}
+		}
+
+		if cont.IsPending != nil && *cont.IsPending {
+			contact.isPending = true
+			continue
+		}
+
+		theirGroup, ok := new(bbssig.Group).Unmarshal(cont.TheirGroup)
+		if !ok {
+			return errors.New("client: failed to unmarshal their group")
+		}
+		if contact.myGroupKey, ok = new(bbssig.MemberKey).Unmarshal(theirGroup, cont.MyGroupKey); !ok {
+			return errors.New("client: failed to unmarshal my group key")
+		}
+
+		if cont.TheirServer == nil {
+			return errors.New("client: contact missing server")
+		}
+		contact.theirServer = *cont.TheirServer
+
+		if len(cont.TheirPub) != len(contact.theirPub) {
+			return errors.New("client: contact missing public key")
+		}
+		copy(contact.theirPub[:], cont.TheirPub)
+
+		if len(cont.TheirIdentityPublic) != len(contact.theirIdentityPublic) {
+			return errors.New("client: contact missing identity public key")
+		}
+		copy(contact.theirIdentityPublic[:], cont.TheirIdentityPublic)
+
+		copy(contact.theirLastDHPublic[:], cont.TheirLastPublic)
+		copy(contact.theirCurrentDHPublic[:], cont.TheirCurrentPublic)
+
+		for _, prevTag := range cont.PreviousTags {
+			contact.previousTags = append(contact.previousTags, previousTag{
+				tag:     prevTag.Tag,
+				expired: time.Unix(*prevTag.Expired, 0),
+			})
+		}
+
+		// For now we'll have to do this conditionally until everyone
+		// has updated local state.
+		if cont.Generation != nil {
+			contact.generation = *cont.Generation
+		}
+		if cont.SupportedVersion != nil {
+			contact.supportedVersion = *cont.SupportedVersion
+		}
+
+		contact.events = make([]Event, 0, len(cont.Events))
+		for _, evt := range cont.Events {
+			event := Event{
+				t:   time.Unix(*evt.Time, 0),
+				msg: *evt.Message,
+			}
+			contact.events = append(contact.events, event)
+		}
+	}
+
+	now := c.Now()
+	for _, m := range state.Inbox {
+		msg := &InboxMessage{
+			id:           *m.Id,
+			from:         *m.From,
+			receivedTime: time.Unix(*m.ReceivedTime, 0),
+			acked:        *m.Acked,
+			read:         *m.Read,
+			sealed:       m.Sealed,
+			retained:     m.GetRetained(),
+			exposureTime: now,
+		}
+		c.registerId(msg.id)
+		if len(m.Message) > 0 {
+			msg.message = new(pond.Message)
+			if err := proto.Unmarshal(m.Message, msg.message); err != nil {
+				return errors.New("client: corrupt message in inbox: " + err.Error())
+			}
+		}
+
+		c.inbox = append(c.inbox, msg)
+	}
+
+	for _, m := range state.Outbox {
+		msg := &queuedMessage{
+			id:      *m.Id,
+			to:      *m.To,
+			server:  *m.Server,
+			created: time.Unix(*m.Created, 0),
+		}
+		c.registerId(msg.id)
+		if len(m.Message) > 0 {
+			msg.message = new(pond.Message)
+			if err := proto.Unmarshal(m.Message, msg.message); err != nil {
+				return errors.New("client: corrupt message in outbox: " + err.Error())
+			}
+		}
+		if m.Sent != nil {
+			msg.sent = time.Unix(*m.Sent, 0)
+		}
+		if m.Acked != nil {
+			msg.acked = time.Unix(*m.Acked, 0)
+		}
+		if len(m.Request) != 0 {
+			msg.request = new(pond.Request)
+			if err := proto.Unmarshal(m.Request, msg.request); err != nil {
+				return errors.New("client: corrupt request in outbox: " + err.Error())
+			}
+		}
+		msg.revocation = m.GetRevocation()
+		if msg.revocation && len(msg.server) == 0 {
+			// There was a bug in some versions where revoking a
+			// pending contact would result in a revocation message
+			// with an empty server.
+			msg.server = c.server
+		}
+
+		c.outbox = append(c.outbox, msg)
+
+		if msg.sent.IsZero() && (msg.to == 0 || !c.contacts[msg.to].revokedUs) {
+			// This message hasn't been sent yet.
+			c.enqueue(msg)
+		}
+	}
+
+	for _, m := range state.Drafts {
+		draft := &Draft{
+			id:          *m.Id,
+			body:        *m.Body,
+			attachments: m.Attachments,
+			detachments: m.Detachments,
+			created:     time.Unix(*m.Created, 0),
+		}
+		c.registerId(draft.id)
+		if m.To != nil {
+			draft.to = *m.To
+		}
+		if m.InReplyTo != nil {
+			draft.inReplyTo = *m.InReplyTo
+		}
+
+		c.drafts[draft.id] = draft
+	}
+
+	return nil
+}
+
+func (c *client) marshal() []byte {
+	var err error
+	var contacts []*disk.Contact
+
+	for _, contact := range c.contacts {
+		cont := &disk.Contact{
+			Id:               proto.Uint64(contact.id),
+			Name:             proto.String(contact.name),
+			GroupKey:         contact.groupKey.Marshal(),
+			IsPending:        proto.Bool(contact.isPending),
+			KeyExchangeBytes: contact.kxsBytes,
+			LastPrivate:      contact.lastDHPrivate[:],
+			CurrentPrivate:   contact.currentDHPrivate[:],
+			SupportedVersion: proto.Int32(contact.supportedVersion),
+			PandaKeyExchange: contact.pandaKeyExchange,
+			PandaError:       proto.String(contact.pandaResult),
+			RevokedUs:        proto.Bool(contact.revokedUs),
+		}
+		if !contact.isPending {
+			cont.MyGroupKey = contact.myGroupKey.Marshal()
+			cont.TheirGroup = contact.myGroupKey.Group.Marshal()
+			cont.TheirServer = proto.String(contact.theirServer)
+			cont.TheirPub = contact.theirPub[:]
+			cont.Generation = proto.Uint32(contact.generation)
+
+			cont.TheirIdentityPublic = contact.theirIdentityPublic[:]
+			cont.TheirLastPublic = contact.theirLastDHPublic[:]
+			cont.TheirCurrentPublic = contact.theirCurrentDHPublic[:]
+		}
+		if contact.ratchet != nil {
+			cont.Ratchet = contact.ratchet.Marshal(time.Now(), messageLifetime)
+		}
+		for _, prevTag := range contact.previousTags {
+			if time.Since(prevTag.expired) > previousTagLifetime {
+				continue
+			}
+			cont.PreviousTags = append(cont.PreviousTags, &disk.Contact_PreviousTag{
+				Tag:     prevTag.tag,
+				Expired: proto.Int64(prevTag.expired.Unix()),
+			})
+		}
+		cont.Events = make([]*disk.Contact_Event, 0, len(contact.events))
+		for _, event := range contact.events {
+			if time.Since(event.t) > messageLifetime {
+				continue
+			}
+			cont.Events = append(cont.Events, &disk.Contact_Event{
+				Time:    proto.Int64(event.t.Unix()),
+				Message: proto.String(event.msg),
+			})
+		}
+		contacts = append(contacts, cont)
+	}
+
+	var inbox []*disk.Inbox
+	for _, msg := range c.inbox {
+		if time.Since(msg.receivedTime) > messageLifetime && !msg.retained {
+			continue
+		}
+		m := &disk.Inbox{
+			Id:           proto.Uint64(msg.id),
+			From:         proto.Uint64(msg.from),
+			ReceivedTime: proto.Int64(msg.receivedTime.Unix()),
+			Acked:        proto.Bool(msg.acked),
+			Read:         proto.Bool(msg.read),
+			Sealed:       msg.sealed,
+			Retained:     proto.Bool(msg.retained),
+		}
+		if msg.message != nil {
+			if m.Message, err = proto.Marshal(msg.message); err != nil {
+				panic(err)
+			}
+		}
+		inbox = append(inbox, m)
+	}
+
+	var outbox []*disk.Outbox
+	for _, msg := range c.outbox {
+		if time.Since(msg.created) > messageLifetime {
+			continue
+		}
+		m := &disk.Outbox{
+			Id:         proto.Uint64(msg.id),
+			To:         proto.Uint64(msg.to),
+			Server:     proto.String(msg.server),
+			Created:    proto.Int64(msg.created.Unix()),
+			Revocation: proto.Bool(msg.revocation),
+		}
+		if msg.message != nil {
+			if m.Message, err = proto.Marshal(msg.message); err != nil {
+				panic(err)
+			}
+		}
+		if !msg.sent.IsZero() {
+			m.Sent = proto.Int64(msg.sent.Unix())
+		}
+		if !msg.acked.IsZero() {
+			m.Acked = proto.Int64(msg.acked.Unix())
+		}
+		if msg.request != nil {
+			if m.Request, err = proto.Marshal(msg.request); err != nil {
+				panic(err)
+			}
+		}
+
+		outbox = append(outbox, m)
+	}
+
+	var drafts []*disk.Draft
+	for _, draft := range c.drafts {
+		m := &disk.Draft{
+			Id:          proto.Uint64(draft.id),
+			Body:        proto.String(draft.body),
+			Attachments: draft.attachments,
+			Detachments: draft.detachments,
+			Created:     proto.Int64(draft.created.Unix()),
+		}
+		if draft.to != 0 {
+			m.To = proto.Uint64(draft.to)
+		}
+		if draft.inReplyTo != 0 {
+			m.InReplyTo = proto.Uint64(draft.inReplyTo)
+		}
+
+		drafts = append(drafts, m)
+	}
+
+	state := &disk.State{
+		Private:                c.priv[:],
+		Public:                 c.pub[:],
+		Identity:               c.identity[:],
+		Server:                 proto.String(c.server),
+		Group:                  c.groupPriv.Group.Marshal(),
+		GroupPrivate:           c.groupPriv.Marshal(),
+		Generation:             proto.Uint32(c.generation),
+		Contacts:               contacts,
+		Inbox:                  inbox,
+		Outbox:                 outbox,
+		Drafts:                 drafts,
+		LastErasureStorageTime: proto.Int64(c.lastErasureStorageTime.Unix()),
+	}
+	for _, prevGroupPriv := range c.prevGroupPrivs {
+		if time.Since(prevGroupPriv.expired) > previousTagLifetime {
+			continue
+		}
+
+		state.PreviousGroupPrivateKeys = append(state.PreviousGroupPrivateKeys, &disk.State_PreviousGroup{
+			Group:        prevGroupPriv.priv.Group.Marshal(),
+			GroupPrivate: prevGroupPriv.priv.Marshal(),
+			Expired:      proto.Int64(prevGroupPriv.expired.Unix()),
+		})
+	}
+	s, err := proto.Marshal(state)
+	if err != nil {
+		panic(err)
+	}
+	return s
+}
diff --git a/client/disk/client.pb.go b/client/disk/client.pb.go
new file mode 100644
index 0000000..1f29160
--- /dev/null
+++ b/client/disk/client.pb.go
@@ -0,0 +1,916 @@
+// Code generated by protoc-gen-go.
+// source: github.com/agl/pond/client/disk/client.proto
+// DO NOT EDIT!
+
+package disk
+
+import proto "github.com/golang/protobuf/proto"
+import json "encoding/json"
+import math "math"
+import protos "github.com/agl/pond/protos"
+
+// Reference proto, json, and math imports to suppress error if they are not otherwise used.
+var _ = proto.Marshal
+var _ = &json.SyntaxError{}
+var _ = math.Inf
+
+type Header struct {
+	NonceSmearCopies *int32         `protobuf:"varint,1,opt,name=nonce_smear_copies,def=1365" json:"nonce_smear_copies,omitempty"`
+	KdfSalt          []byte         `protobuf:"bytes,2,opt,name=kdf_salt" json:"kdf_salt,omitempty"`
+	Scrypt           *Header_SCrypt `protobuf:"bytes,3,opt,name=scrypt" json:"scrypt,omitempty"`
+	TpmNvram         *Header_TPM    `protobuf:"bytes,4,opt,name=tpm_nvram" json:"tpm_nvram,omitempty"`
+	NoErasureStorage *bool          `protobuf:"varint,5,opt,name=no_erasure_storage" json:"no_erasure_storage,omitempty"`
+	XXX_unrecognized []byte         `json:"-"`
+}
+
+func (this *Header) Reset()         { *this = Header{} }
+func (this *Header) String() string { return proto.CompactTextString(this) }
+func (*Header) ProtoMessage()       {}
+
+const Default_Header_NonceSmearCopies int32 = 1365
+
+func (this *Header) GetNonceSmearCopies() int32 {
+	if this != nil && this.NonceSmearCopies != nil {
+		return *this.NonceSmearCopies
+	}
+	return Default_Header_NonceSmearCopies
+}
+
+func (this *Header) GetKdfSalt() []byte {
+	if this != nil {
+		return this.KdfSalt
+	}
+	return nil
+}
+
+func (this *Header) GetScrypt() *Header_SCrypt {
+	if this != nil {
+		return this.Scrypt
+	}
+	return nil
+}
+
+func (this *Header) GetTpmNvram() *Header_TPM {
+	if this != nil {
+		return this.TpmNvram
+	}
+	return nil
+}
+
+func (this *Header) GetNoErasureStorage() bool {
+	if this != nil && this.NoErasureStorage != nil {
+		return *this.NoErasureStorage
+	}
+	return false
+}
+
+type Header_SCrypt struct {
+	N                *int32 `protobuf:"varint,2,opt,def=32768" json:"N,omitempty"`
+	R                *int32 `protobuf:"varint,3,opt,name=r,def=16" json:"r,omitempty"`
+	P                *int32 `protobuf:"varint,4,opt,name=p,def=1" json:"p,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *Header_SCrypt) Reset()         { *this = Header_SCrypt{} }
+func (this *Header_SCrypt) String() string { return proto.CompactTextString(this) }
+func (*Header_SCrypt) ProtoMessage()       {}
+
+const Default_Header_SCrypt_N int32 = 32768
+const Default_Header_SCrypt_R int32 = 16
+const Default_Header_SCrypt_P int32 = 1
+
+func (this *Header_SCrypt) GetN() int32 {
+	if this != nil && this.N != nil {
+		return *this.N
+	}
+	return Default_Header_SCrypt_N
+}
+
+func (this *Header_SCrypt) GetR() int32 {
+	if this != nil && this.R != nil {
+		return *this.R
+	}
+	return Default_Header_SCrypt_R
+}
+
+func (this *Header_SCrypt) GetP() int32 {
+	if this != nil && this.P != nil {
+		return *this.P
+	}
+	return Default_Header_SCrypt_P
+}
+
+type Header_TPM struct {
+	Index            *uint32 `protobuf:"varint,1,req,name=index" json:"index,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Header_TPM) Reset()         { *this = Header_TPM{} }
+func (this *Header_TPM) String() string { return proto.CompactTextString(this) }
+func (*Header_TPM) ProtoMessage()       {}
+
+func (this *Header_TPM) GetIndex() uint32 {
+	if this != nil && this.Index != nil {
+		return *this.Index
+	}
+	return 0
+}
+
+type Contact struct {
+	Id                  *uint64                `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	Name                *string                `protobuf:"bytes,2,req,name=name" json:"name,omitempty"`
+	GroupKey            []byte                 `protobuf:"bytes,3,req,name=group_key" json:"group_key,omitempty"`
+	SupportedVersion    *int32                 `protobuf:"varint,16,opt,name=supported_version" json:"supported_version,omitempty"`
+	KeyExchangeBytes    []byte                 `protobuf:"bytes,4,opt,name=key_exchange_bytes" json:"key_exchange_bytes,omitempty"`
+	PandaKeyExchange    []byte                 `protobuf:"bytes,18,opt,name=panda_key_exchange" json:"panda_key_exchange,omitempty"`
+	PandaError          *string                `protobuf:"bytes,19,opt,name=panda_error" json:"panda_error,omitempty"`
+	TheirGroup          []byte                 `protobuf:"bytes,5,opt,name=their_group" json:"their_group,omitempty"`
+	MyGroupKey          []byte                 `protobuf:"bytes,6,opt,name=my_group_key" json:"my_group_key,omitempty"`
+	Generation          *uint32                `protobuf:"varint,7,opt,name=generation" json:"generation,omitempty"`
+	TheirServer         *string                `protobuf:"bytes,8,opt,name=their_server" json:"their_server,omitempty"`
+	TheirPub            []byte                 `protobuf:"bytes,9,opt,name=their_pub" json:"their_pub,omitempty"`
+	TheirIdentityPublic []byte                 `protobuf:"bytes,10,opt,name=their_identity_public" json:"their_identity_public,omitempty"`
+	RevokedUs           *bool                  `protobuf:"varint,21,opt,name=revoked_us" json:"revoked_us,omitempty"`
+	LastPrivate         []byte                 `protobuf:"bytes,11,opt,name=last_private" json:"last_private,omitempty"`
+	CurrentPrivate      []byte                 `protobuf:"bytes,12,opt,name=current_private" json:"current_private,omitempty"`
+	TheirLastPublic     []byte                 `protobuf:"bytes,13,opt,name=their_last_public" json:"their_last_public,omitempty"`
+	TheirCurrentPublic  []byte                 `protobuf:"bytes,14,opt,name=their_current_public" json:"their_current_public,omitempty"`
+	Ratchet             *RatchetState          `protobuf:"bytes,20,opt,name=ratchet" json:"ratchet,omitempty"`
+	PreviousTags        []*Contact_PreviousTag `protobuf:"bytes,17,rep,name=previous_tags" json:"previous_tags,omitempty"`
+	Events              []*Contact_Event       `protobuf:"bytes,22,rep,name=events" json:"events,omitempty"`
+	IsPending           *bool                  `protobuf:"varint,15,opt,name=is_pending,def=0" json:"is_pending,omitempty"`
+	XXX_unrecognized    []byte                 `json:"-"`
+}
+
+func (this *Contact) Reset()         { *this = Contact{} }
+func (this *Contact) String() string { return proto.CompactTextString(this) }
+func (*Contact) ProtoMessage()       {}
+
+const Default_Contact_IsPending bool = false
+
+func (this *Contact) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Contact) GetName() string {
+	if this != nil && this.Name != nil {
+		return *this.Name
+	}
+	return ""
+}
+
+func (this *Contact) GetGroupKey() []byte {
+	if this != nil {
+		return this.GroupKey
+	}
+	return nil
+}
+
+func (this *Contact) GetSupportedVersion() int32 {
+	if this != nil && this.SupportedVersion != nil {
+		return *this.SupportedVersion
+	}
+	return 0
+}
+
+func (this *Contact) GetKeyExchangeBytes() []byte {
+	if this != nil {
+		return this.KeyExchangeBytes
+	}
+	return nil
+}
+
+func (this *Contact) GetPandaKeyExchange() []byte {
+	if this != nil {
+		return this.PandaKeyExchange
+	}
+	return nil
+}
+
+func (this *Contact) GetPandaError() string {
+	if this != nil && this.PandaError != nil {
+		return *this.PandaError
+	}
+	return ""
+}
+
+func (this *Contact) GetTheirGroup() []byte {
+	if this != nil {
+		return this.TheirGroup
+	}
+	return nil
+}
+
+func (this *Contact) GetMyGroupKey() []byte {
+	if this != nil {
+		return this.MyGroupKey
+	}
+	return nil
+}
+
+func (this *Contact) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *Contact) GetTheirServer() string {
+	if this != nil && this.TheirServer != nil {
+		return *this.TheirServer
+	}
+	return ""
+}
+
+func (this *Contact) GetTheirPub() []byte {
+	if this != nil {
+		return this.TheirPub
+	}
+	return nil
+}
+
+func (this *Contact) GetTheirIdentityPublic() []byte {
+	if this != nil {
+		return this.TheirIdentityPublic
+	}
+	return nil
+}
+
+func (this *Contact) GetRevokedUs() bool {
+	if this != nil && this.RevokedUs != nil {
+		return *this.RevokedUs
+	}
+	return false
+}
+
+func (this *Contact) GetLastPrivate() []byte {
+	if this != nil {
+		return this.LastPrivate
+	}
+	return nil
+}
+
+func (this *Contact) GetCurrentPrivate() []byte {
+	if this != nil {
+		return this.CurrentPrivate
+	}
+	return nil
+}
+
+func (this *Contact) GetTheirLastPublic() []byte {
+	if this != nil {
+		return this.TheirLastPublic
+	}
+	return nil
+}
+
+func (this *Contact) GetTheirCurrentPublic() []byte {
+	if this != nil {
+		return this.TheirCurrentPublic
+	}
+	return nil
+}
+
+func (this *Contact) GetRatchet() *RatchetState {
+	if this != nil {
+		return this.Ratchet
+	}
+	return nil
+}
+
+func (this *Contact) GetPreviousTags() []*Contact_PreviousTag {
+	if this != nil {
+		return this.PreviousTags
+	}
+	return nil
+}
+
+func (this *Contact) GetEvents() []*Contact_Event {
+	if this != nil {
+		return this.Events
+	}
+	return nil
+}
+
+func (this *Contact) GetIsPending() bool {
+	if this != nil && this.IsPending != nil {
+		return *this.IsPending
+	}
+	return Default_Contact_IsPending
+}
+
+type Contact_PreviousTag struct {
+	Tag              []byte `protobuf:"bytes,1,req,name=tag" json:"tag,omitempty"`
+	Expired          *int64 `protobuf:"varint,2,req,name=expired" json:"expired,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *Contact_PreviousTag) Reset()         { *this = Contact_PreviousTag{} }
+func (this *Contact_PreviousTag) String() string { return proto.CompactTextString(this) }
+func (*Contact_PreviousTag) ProtoMessage()       {}
+
+func (this *Contact_PreviousTag) GetTag() []byte {
+	if this != nil {
+		return this.Tag
+	}
+	return nil
+}
+
+func (this *Contact_PreviousTag) GetExpired() int64 {
+	if this != nil && this.Expired != nil {
+		return *this.Expired
+	}
+	return 0
+}
+
+type Contact_Event struct {
+	Time             *int64  `protobuf:"varint,1,req,name=time" json:"time,omitempty"`
+	Message          *string `protobuf:"bytes,2,req,name=message" json:"message,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Contact_Event) Reset()         { *this = Contact_Event{} }
+func (this *Contact_Event) String() string { return proto.CompactTextString(this) }
+func (*Contact_Event) ProtoMessage()       {}
+
+func (this *Contact_Event) GetTime() int64 {
+	if this != nil && this.Time != nil {
+		return *this.Time
+	}
+	return 0
+}
+
+func (this *Contact_Event) GetMessage() string {
+	if this != nil && this.Message != nil {
+		return *this.Message
+	}
+	return ""
+}
+
+type RatchetState struct {
+	RootKey            []byte                    `protobuf:"bytes,1,req,name=root_key" json:"root_key,omitempty"`
+	SendHeaderKey      []byte                    `protobuf:"bytes,2,req,name=send_header_key" json:"send_header_key,omitempty"`
+	RecvHeaderKey      []byte                    `protobuf:"bytes,3,req,name=recv_header_key" json:"recv_header_key,omitempty"`
+	NextSendHeaderKey  []byte                    `protobuf:"bytes,4,req,name=next_send_header_key" json:"next_send_header_key,omitempty"`
+	NextRecvHeaderKey  []byte                    `protobuf:"bytes,5,req,name=next_recv_header_key" json:"next_recv_header_key,omitempty"`
+	SendChainKey       []byte                    `protobuf:"bytes,6,req,name=send_chain_key" json:"send_chain_key,omitempty"`
+	RecvChainKey       []byte                    `protobuf:"bytes,7,req,name=recv_chain_key" json:"recv_chain_key,omitempty"`
+	SendRatchetPrivate []byte                    `protobuf:"bytes,8,req,name=send_ratchet_private" json:"send_ratchet_private,omitempty"`
+	RecvRatchetPublic  []byte                    `protobuf:"bytes,9,req,name=recv_ratchet_public" json:"recv_ratchet_public,omitempty"`
+	SendCount          *uint32                   `protobuf:"varint,10,req,name=send_count" json:"send_count,omitempty"`
+	RecvCount          *uint32                   `protobuf:"varint,11,req,name=recv_count" json:"recv_count,omitempty"`
+	PrevSendCount      *uint32                   `protobuf:"varint,12,req,name=prev_send_count" json:"prev_send_count,omitempty"`
+	Ratchet            *bool                     `protobuf:"varint,13,req,name=ratchet" json:"ratchet,omitempty"`
+	V2                 *bool                     `protobuf:"varint,17,opt,name=v2" json:"v2,omitempty"`
+	Private0           []byte                    `protobuf:"bytes,14,opt,name=private0" json:"private0,omitempty"`
+	Private1           []byte                    `protobuf:"bytes,15,opt,name=private1" json:"private1,omitempty"`
+	SavedKeys          []*RatchetState_SavedKeys `protobuf:"bytes,16,rep,name=saved_keys" json:"saved_keys,omitempty"`
+	XXX_unrecognized   []byte                    `json:"-"`
+}
+
+func (this *RatchetState) Reset()         { *this = RatchetState{} }
+func (this *RatchetState) String() string { return proto.CompactTextString(this) }
+func (*RatchetState) ProtoMessage()       {}
+
+func (this *RatchetState) GetRootKey() []byte {
+	if this != nil {
+		return this.RootKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetSendHeaderKey() []byte {
+	if this != nil {
+		return this.SendHeaderKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetRecvHeaderKey() []byte {
+	if this != nil {
+		return this.RecvHeaderKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetNextSendHeaderKey() []byte {
+	if this != nil {
+		return this.NextSendHeaderKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetNextRecvHeaderKey() []byte {
+	if this != nil {
+		return this.NextRecvHeaderKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetSendChainKey() []byte {
+	if this != nil {
+		return this.SendChainKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetRecvChainKey() []byte {
+	if this != nil {
+		return this.RecvChainKey
+	}
+	return nil
+}
+
+func (this *RatchetState) GetSendRatchetPrivate() []byte {
+	if this != nil {
+		return this.SendRatchetPrivate
+	}
+	return nil
+}
+
+func (this *RatchetState) GetRecvRatchetPublic() []byte {
+	if this != nil {
+		return this.RecvRatchetPublic
+	}
+	return nil
+}
+
+func (this *RatchetState) GetSendCount() uint32 {
+	if this != nil && this.SendCount != nil {
+		return *this.SendCount
+	}
+	return 0
+}
+
+func (this *RatchetState) GetRecvCount() uint32 {
+	if this != nil && this.RecvCount != nil {
+		return *this.RecvCount
+	}
+	return 0
+}
+
+func (this *RatchetState) GetPrevSendCount() uint32 {
+	if this != nil && this.PrevSendCount != nil {
+		return *this.PrevSendCount
+	}
+	return 0
+}
+
+func (this *RatchetState) GetRatchet() bool {
+	if this != nil && this.Ratchet != nil {
+		return *this.Ratchet
+	}
+	return false
+}
+
+func (this *RatchetState) GetV2() bool {
+	if this != nil && this.V2 != nil {
+		return *this.V2
+	}
+	return false
+}
+
+func (this *RatchetState) GetPrivate0() []byte {
+	if this != nil {
+		return this.Private0
+	}
+	return nil
+}
+
+func (this *RatchetState) GetPrivate1() []byte {
+	if this != nil {
+		return this.Private1
+	}
+	return nil
+}
+
+func (this *RatchetState) GetSavedKeys() []*RatchetState_SavedKeys {
+	if this != nil {
+		return this.SavedKeys
+	}
+	return nil
+}
+
+type RatchetState_SavedKeys struct {
+	HeaderKey        []byte                               `protobuf:"bytes,1,req,name=header_key" json:"header_key,omitempty"`
+	MessageKeys      []*RatchetState_SavedKeys_MessageKey `protobuf:"bytes,2,rep,name=message_keys" json:"message_keys,omitempty"`
+	XXX_unrecognized []byte                               `json:"-"`
+}
+
+func (this *RatchetState_SavedKeys) Reset()         { *this = RatchetState_SavedKeys{} }
+func (this *RatchetState_SavedKeys) String() string { return proto.CompactTextString(this) }
+func (*RatchetState_SavedKeys) ProtoMessage()       {}
+
+func (this *RatchetState_SavedKeys) GetHeaderKey() []byte {
+	if this != nil {
+		return this.HeaderKey
+	}
+	return nil
+}
+
+func (this *RatchetState_SavedKeys) GetMessageKeys() []*RatchetState_SavedKeys_MessageKey {
+	if this != nil {
+		return this.MessageKeys
+	}
+	return nil
+}
+
+type RatchetState_SavedKeys_MessageKey struct {
+	Num              *uint32 `protobuf:"varint,1,req,name=num" json:"num,omitempty"`
+	Key              []byte  `protobuf:"bytes,2,req,name=key" json:"key,omitempty"`
+	CreationTime     *int64  `protobuf:"varint,3,req,name=creation_time" json:"creation_time,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *RatchetState_SavedKeys_MessageKey) Reset()         { *this = RatchetState_SavedKeys_MessageKey{} }
+func (this *RatchetState_SavedKeys_MessageKey) String() string { return proto.CompactTextString(this) }
+func (*RatchetState_SavedKeys_MessageKey) ProtoMessage()       {}
+
+func (this *RatchetState_SavedKeys_MessageKey) GetNum() uint32 {
+	if this != nil && this.Num != nil {
+		return *this.Num
+	}
+	return 0
+}
+
+func (this *RatchetState_SavedKeys_MessageKey) GetKey() []byte {
+	if this != nil {
+		return this.Key
+	}
+	return nil
+}
+
+func (this *RatchetState_SavedKeys_MessageKey) GetCreationTime() int64 {
+	if this != nil && this.CreationTime != nil {
+		return *this.CreationTime
+	}
+	return 0
+}
+
+type Inbox struct {
+	Id               *uint64 `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	From             *uint64 `protobuf:"fixed64,2,req,name=from" json:"from,omitempty"`
+	ReceivedTime     *int64  `protobuf:"varint,3,req,name=received_time" json:"received_time,omitempty"`
+	Acked            *bool   `protobuf:"varint,4,req,name=acked" json:"acked,omitempty"`
+	Message          []byte  `protobuf:"bytes,5,opt,name=message" json:"message,omitempty"`
+	Read             *bool   `protobuf:"varint,6,req,name=read" json:"read,omitempty"`
+	Sealed           []byte  `protobuf:"bytes,7,opt,name=sealed" json:"sealed,omitempty"`
+	Retained         *bool   `protobuf:"varint,8,opt,name=retained,def=0" json:"retained,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Inbox) Reset()         { *this = Inbox{} }
+func (this *Inbox) String() string { return proto.CompactTextString(this) }
+func (*Inbox) ProtoMessage()       {}
+
+const Default_Inbox_Retained bool = false
+
+func (this *Inbox) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Inbox) GetFrom() uint64 {
+	if this != nil && this.From != nil {
+		return *this.From
+	}
+	return 0
+}
+
+func (this *Inbox) GetReceivedTime() int64 {
+	if this != nil && this.ReceivedTime != nil {
+		return *this.ReceivedTime
+	}
+	return 0
+}
+
+func (this *Inbox) GetAcked() bool {
+	if this != nil && this.Acked != nil {
+		return *this.Acked
+	}
+	return false
+}
+
+func (this *Inbox) GetMessage() []byte {
+	if this != nil {
+		return this.Message
+	}
+	return nil
+}
+
+func (this *Inbox) GetRead() bool {
+	if this != nil && this.Read != nil {
+		return *this.Read
+	}
+	return false
+}
+
+func (this *Inbox) GetSealed() []byte {
+	if this != nil {
+		return this.Sealed
+	}
+	return nil
+}
+
+func (this *Inbox) GetRetained() bool {
+	if this != nil && this.Retained != nil {
+		return *this.Retained
+	}
+	return Default_Inbox_Retained
+}
+
+type Outbox struct {
+	Id               *uint64 `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	To               *uint64 `protobuf:"fixed64,2,req,name=to" json:"to,omitempty"`
+	Server           *string `protobuf:"bytes,3,req,name=server" json:"server,omitempty"`
+	Created          *int64  `protobuf:"varint,4,req,name=created" json:"created,omitempty"`
+	Sent             *int64  `protobuf:"varint,5,opt,name=sent" json:"sent,omitempty"`
+	Message          []byte  `protobuf:"bytes,6,opt,name=message" json:"message,omitempty"`
+	Request          []byte  `protobuf:"bytes,7,opt,name=request" json:"request,omitempty"`
+	Acked            *int64  `protobuf:"varint,8,opt,name=acked" json:"acked,omitempty"`
+	Revocation       *bool   `protobuf:"varint,9,opt,name=revocation" json:"revocation,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Outbox) Reset()         { *this = Outbox{} }
+func (this *Outbox) String() string { return proto.CompactTextString(this) }
+func (*Outbox) ProtoMessage()       {}
+
+func (this *Outbox) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Outbox) GetTo() uint64 {
+	if this != nil && this.To != nil {
+		return *this.To
+	}
+	return 0
+}
+
+func (this *Outbox) GetServer() string {
+	if this != nil && this.Server != nil {
+		return *this.Server
+	}
+	return ""
+}
+
+func (this *Outbox) GetCreated() int64 {
+	if this != nil && this.Created != nil {
+		return *this.Created
+	}
+	return 0
+}
+
+func (this *Outbox) GetSent() int64 {
+	if this != nil && this.Sent != nil {
+		return *this.Sent
+	}
+	return 0
+}
+
+func (this *Outbox) GetMessage() []byte {
+	if this != nil {
+		return this.Message
+	}
+	return nil
+}
+
+func (this *Outbox) GetRequest() []byte {
+	if this != nil {
+		return this.Request
+	}
+	return nil
+}
+
+func (this *Outbox) GetAcked() int64 {
+	if this != nil && this.Acked != nil {
+		return *this.Acked
+	}
+	return 0
+}
+
+func (this *Outbox) GetRevocation() bool {
+	if this != nil && this.Revocation != nil {
+		return *this.Revocation
+	}
+	return false
+}
+
+type Draft struct {
+	Id               *uint64                      `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	Created          *int64                       `protobuf:"varint,2,req,name=created" json:"created,omitempty"`
+	To               *uint64                      `protobuf:"fixed64,3,opt,name=to" json:"to,omitempty"`
+	Body             *string                      `protobuf:"bytes,4,req,name=body" json:"body,omitempty"`
+	InReplyTo        *uint64                      `protobuf:"fixed64,5,opt,name=in_reply_to" json:"in_reply_to,omitempty"`
+	Attachments      []*protos.Message_Attachment `protobuf:"bytes,6,rep,name=attachments" json:"attachments,omitempty"`
+	Detachments      []*protos.Message_Detachment `protobuf:"bytes,7,rep,name=detachments" json:"detachments,omitempty"`
+	XXX_unrecognized []byte                       `json:"-"`
+}
+
+func (this *Draft) Reset()         { *this = Draft{} }
+func (this *Draft) String() string { return proto.CompactTextString(this) }
+func (*Draft) ProtoMessage()       {}
+
+func (this *Draft) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Draft) GetCreated() int64 {
+	if this != nil && this.Created != nil {
+		return *this.Created
+	}
+	return 0
+}
+
+func (this *Draft) GetTo() uint64 {
+	if this != nil && this.To != nil {
+		return *this.To
+	}
+	return 0
+}
+
+func (this *Draft) GetBody() string {
+	if this != nil && this.Body != nil {
+		return *this.Body
+	}
+	return ""
+}
+
+func (this *Draft) GetInReplyTo() uint64 {
+	if this != nil && this.InReplyTo != nil {
+		return *this.InReplyTo
+	}
+	return 0
+}
+
+func (this *Draft) GetAttachments() []*protos.Message_Attachment {
+	if this != nil {
+		return this.Attachments
+	}
+	return nil
+}
+
+func (this *Draft) GetDetachments() []*protos.Message_Detachment {
+	if this != nil {
+		return this.Detachments
+	}
+	return nil
+}
+
+type State struct {
+	Identity                 []byte                 `protobuf:"bytes,1,req,name=identity" json:"identity,omitempty"`
+	Public                   []byte                 `protobuf:"bytes,2,req,name=public" json:"public,omitempty"`
+	Private                  []byte                 `protobuf:"bytes,3,req,name=private" json:"private,omitempty"`
+	Server                   *string                `protobuf:"bytes,4,req,name=server" json:"server,omitempty"`
+	Group                    []byte                 `protobuf:"bytes,5,req,name=group" json:"group,omitempty"`
+	GroupPrivate             []byte                 `protobuf:"bytes,6,req,name=group_private" json:"group_private,omitempty"`
+	PreviousGroupPrivateKeys []*State_PreviousGroup `protobuf:"bytes,12,rep,name=previous_group_private_keys" json:"previous_group_private_keys,omitempty"`
+	Generation               *uint32                `protobuf:"varint,7,req,name=generation" json:"generation,omitempty"`
+	LastErasureStorageTime   *int64                 `protobuf:"varint,13,opt,name=last_erasure_storage_time" json:"last_erasure_storage_time,omitempty"`
+	Contacts                 []*Contact             `protobuf:"bytes,8,rep,name=contacts" json:"contacts,omitempty"`
+	Inbox                    []*Inbox               `protobuf:"bytes,9,rep,name=inbox" json:"inbox,omitempty"`
+	Outbox                   []*Outbox              `protobuf:"bytes,10,rep,name=outbox" json:"outbox,omitempty"`
+	Drafts                   []*Draft               `protobuf:"bytes,11,rep,name=drafts" json:"drafts,omitempty"`
+	XXX_unrecognized         []byte                 `json:"-"`
+}
+
+func (this *State) Reset()         { *this = State{} }
+func (this *State) String() string { return proto.CompactTextString(this) }
+func (*State) ProtoMessage()       {}
+
+func (this *State) GetIdentity() []byte {
+	if this != nil {
+		return this.Identity
+	}
+	return nil
+}
+
+func (this *State) GetPublic() []byte {
+	if this != nil {
+		return this.Public
+	}
+	return nil
+}
+
+func (this *State) GetPrivate() []byte {
+	if this != nil {
+		return this.Private
+	}
+	return nil
+}
+
+func (this *State) GetServer() string {
+	if this != nil && this.Server != nil {
+		return *this.Server
+	}
+	return ""
+}
+
+func (this *State) GetGroup() []byte {
+	if this != nil {
+		return this.Group
+	}
+	return nil
+}
+
+func (this *State) GetGroupPrivate() []byte {
+	if this != nil {
+		return this.GroupPrivate
+	}
+	return nil
+}
+
+func (this *State) GetPreviousGroupPrivateKeys() []*State_PreviousGroup {
+	if this != nil {
+		return this.PreviousGroupPrivateKeys
+	}
+	return nil
+}
+
+func (this *State) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *State) GetLastErasureStorageTime() int64 {
+	if this != nil && this.LastErasureStorageTime != nil {
+		return *this.LastErasureStorageTime
+	}
+	return 0
+}
+
+func (this *State) GetContacts() []*Contact {
+	if this != nil {
+		return this.Contacts
+	}
+	return nil
+}
+
+func (this *State) GetInbox() []*Inbox {
+	if this != nil {
+		return this.Inbox
+	}
+	return nil
+}
+
+func (this *State) GetOutbox() []*Outbox {
+	if this != nil {
+		return this.Outbox
+	}
+	return nil
+}
+
+func (this *State) GetDrafts() []*Draft {
+	if this != nil {
+		return this.Drafts
+	}
+	return nil
+}
+
+type State_PreviousGroup struct {
+	Group            []byte `protobuf:"bytes,1,req,name=group" json:"group,omitempty"`
+	GroupPrivate     []byte `protobuf:"bytes,2,req,name=group_private" json:"group_private,omitempty"`
+	Expired          *int64 `protobuf:"varint,3,req,name=expired" json:"expired,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *State_PreviousGroup) Reset()         { *this = State_PreviousGroup{} }
+func (this *State_PreviousGroup) String() string { return proto.CompactTextString(this) }
+func (*State_PreviousGroup) ProtoMessage()       {}
+
+func (this *State_PreviousGroup) GetGroup() []byte {
+	if this != nil {
+		return this.Group
+	}
+	return nil
+}
+
+func (this *State_PreviousGroup) GetGroupPrivate() []byte {
+	if this != nil {
+		return this.GroupPrivate
+	}
+	return nil
+}
+
+func (this *State_PreviousGroup) GetExpired() int64 {
+	if this != nil && this.Expired != nil {
+		return *this.Expired
+	}
+	return 0
+}
+
+func init() {
+}
diff --git a/client/disk/client.proto b/client/disk/client.proto
new file mode 100644
index 0000000..ff47104
--- /dev/null
+++ b/client/disk/client.proto
@@ -0,0 +1,161 @@
+package disk;
+
+import "github.com/agl/pond/protos/pond.proto";
+
+// These protobufs are used for serialising the client's state to disk.
+
+// Header is placed at the beginning of the state file and is *unencrypted and
+// unauthenticated*. Its purpose is only to describe how to decrypt the
+// remainder of the file.
+message Header {
+	// nonce_smear_copies contains the number of copies of the nonce that
+	// follow the header. Each copy of the nonce is different and, XORed
+	// together, they result in the real nonce. The intent is that this may
+	// make recovery of old state files more difficult on HDDs.
+	optional int32 nonce_smear_copies = 1 [ default = 1365 ];
+	// kdf_salt contains the salt for the KDF function.
+	optional bytes kdf_salt = 2;
+
+	message SCrypt {
+		optional int32 N = 2 [ default = 32768 ];
+		optional int32 r = 3 [ default = 16 ];
+		optional int32 p = 4 [ default = 1 ];
+	}
+	optional SCrypt scrypt = 3;
+
+	// TPM contains information about an erasure key stored in TPM NVRAM.
+	message TPM {
+		required uint32 index = 1;
+	}
+	optional TPM tpm_nvram = 4;
+
+	// no_erasure_storage exists to signal that there is no erasure storage
+	// for this state file, as opposed to the state file using a method
+	// that isn't recognised by the client.
+	optional bool no_erasure_storage = 5;
+}
+
+message Contact {
+	required fixed64 id = 1;
+	required string name = 2;
+	required bytes group_key = 3;
+	optional int32 supported_version = 16;
+	optional bytes key_exchange_bytes = 4;
+	optional bytes panda_key_exchange = 18;
+	optional string panda_error = 19;
+	optional bytes their_group = 5;
+	optional bytes my_group_key = 6;
+	optional uint32 generation = 7;
+	optional string their_server = 8;
+	optional bytes their_pub = 9;
+	optional bytes their_identity_public = 10;
+	optional bool revoked_us = 21;
+
+	optional bytes last_private = 11;
+	optional bytes current_private = 12;
+	optional bytes their_last_public = 13;
+	optional bytes their_current_public = 14;
+
+	optional RatchetState ratchet = 20;
+
+	message PreviousTag {
+		required bytes tag = 1;
+		required int64 expired = 2;
+	}
+	repeated PreviousTag previous_tags = 17;
+
+	message Event {
+		required int64 time = 1;
+		required string message = 2;
+	}
+	repeated Event events = 22;
+
+	optional bool is_pending = 15 [ default = false ];
+}
+
+message RatchetState {
+	required bytes root_key = 1;
+	required bytes send_header_key = 2;
+	required bytes recv_header_key = 3;
+	required bytes next_send_header_key = 4;
+	required bytes next_recv_header_key = 5;
+	required bytes send_chain_key = 6;
+	required bytes recv_chain_key = 7;
+	required bytes send_ratchet_private = 8;
+	required bytes recv_ratchet_public = 9;
+	required uint32 send_count = 10;
+	required uint32 recv_count = 11;
+	required uint32 prev_send_count = 12;
+	required bool ratchet = 13;
+	optional bool v2 = 17;
+
+	optional bytes private0 = 14;
+	optional bytes private1 = 15;
+
+	message SavedKeys {
+		required bytes header_key = 1;
+		message MessageKey {
+			required uint32 num = 1;
+			required bytes key = 2;
+			required int64 creation_time = 3;
+		}
+		repeated MessageKey message_keys = 2;
+	}
+	repeated SavedKeys saved_keys = 16;
+}
+
+message Inbox {
+	required fixed64 id = 1;
+	required fixed64 from = 2;
+	required int64 received_time = 3;
+	required bool acked = 4;
+	optional bytes message = 5;
+	required bool read = 6;
+	optional bytes sealed = 7;
+	optional bool retained = 8 [ default = false ];
+}
+
+message Outbox {
+	required fixed64 id = 1;
+	required fixed64 to = 2;
+	required string server = 3;
+	required int64 created = 4;
+	optional int64 sent = 5;
+	optional bytes message = 6;
+	optional bytes request = 7;
+	optional int64 acked = 8;
+	optional bool revocation = 9;
+};
+
+message Draft {
+	required fixed64 id = 1;
+	required int64 created = 2;
+	optional fixed64 to = 3;
+	required string body = 4;
+	optional fixed64 in_reply_to = 5;
+	repeated protos.Message.Attachment attachments = 6;
+	repeated protos.Message.Detachment detachments = 7;
+}
+
+message State {
+	required bytes identity = 1;
+	required bytes public = 2;
+	required bytes private = 3;
+	required string server = 4;
+	required bytes group = 5;
+	required bytes group_private = 6;
+	message PreviousGroup {
+		required bytes group = 1;
+		required bytes group_private = 2;
+		required int64 expired = 3;
+	}
+	repeated PreviousGroup previous_group_private_keys = 12;
+
+	required uint32 generation = 7;
+	optional int64 last_erasure_storage_time = 13;
+
+	repeated Contact contacts = 8;
+	repeated Inbox inbox = 9;
+	repeated Outbox outbox = 10;
+	repeated Draft drafts = 11;
+}
diff --git a/client/disk/disk.go b/client/disk/disk.go
new file mode 100644
index 0000000..10a83f8
--- /dev/null
+++ b/client/disk/disk.go
@@ -0,0 +1,484 @@
+package disk
+
+import (
+	"bytes"
+	"encoding/binary"
+	"errors"
+	"io"
+	"io/ioutil"
+	"os"
+	"sync"
+	"syscall"
+
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/nacl/secretbox"
+	"golang.org/x/crypto/scrypt"
+)
+
+const (
+	kdfSaltLen    = 32
+	kdfKeyLen     = 32
+	erasureKeyLen = 32
+)
+
+var headerMagic = [8]byte{0xa8, 0x34, 0x64, 0x9e, 0xce, 0x39, 0x94, 0xe3}
+
+// ErasureStorage represents a type of storage that can store, and erase, small
+// amounts of data.
+type ErasureStorage interface {
+	// Create creates a new erasure storage object and fills out header to
+	// include the needed values.
+	Create(header *Header, key *[kdfKeyLen]byte) error
+	// Read reads the current value of the storage.
+	Read(key *[kdfKeyLen]byte) (*[erasureKeyLen]byte, error)
+	// Write requests that the given value be stored and the old value
+	// forgotten.
+	Write(key *[kdfKeyLen]byte, value *[erasureKeyLen]byte) error
+	// Destroy erases the NVRAM entry.
+	Destroy(key *[kdfKeyLen]byte) error
+}
+
+// erasureRegistry is a slice of functions, each of which can inspect a header
+// and optionally return an ErasureStorage that loads the mask key specified by
+// that header.
+var erasureRegistry []func(*Header) ErasureStorage
+
+// StateFile encapsulates information about a state file on diskl
+type StateFile struct {
+	Path string
+	Rand io.Reader
+	Log  func(format string, args ...interface{})
+	// Erasure is able to store a `mask key' - a random value that is XORed
+	// with the key. This is done because an ErasureStorage is believed to
+	// be able to erase old mask values.
+	Erasure ErasureStorage
+
+	header Header
+	key    [kdfKeyLen]byte
+	mask   [erasureKeyLen]byte
+	valid  bool
+	// lockFd contains the file descriptor that any outstanding Locks refer
+	// to. This is protected by lockFdMutex.
+	lockFd      *int
+	lockFdMutex sync.Mutex
+}
+
+func NewStateFile(rand io.Reader, path string) *StateFile {
+	return &StateFile{
+		Rand: rand,
+		Path: path,
+	}
+}
+
+func (sf *StateFile) Lock(create bool) (*Lock, error) {
+	sf.lockFdMutex.Lock()
+	defer sf.lockFdMutex.Unlock()
+
+	if sf.lockFd != nil {
+		return &Lock{sf.lockFd}, nil
+	}
+
+	flags := os.O_RDWR
+	if create {
+		flags |= os.O_CREATE | os.O_EXCL
+	}
+	file, err := os.OpenFile(sf.Path, flags, 0600)
+	if err != nil {
+		return nil, err
+	}
+	defer file.Close()
+
+	fd := int(file.Fd())
+	newFd, err := syscall.Dup(fd)
+	if err != nil {
+		return nil, err
+	}
+	if syscall.Flock(newFd, syscall.LOCK_EX|syscall.LOCK_NB) != nil {
+		syscall.Close(newFd)
+		return nil, nil
+	}
+	sf.lockFd = &newFd
+	return &Lock{sf.lockFd}, nil
+}
+
+func (sf *StateFile) deriveKey(pw string) error {
+	if len(pw) == 0 && sf.header.Scrypt != nil {
+		return BadPasswordError
+	}
+	params := sf.header.Scrypt
+	key, err := scrypt.Key([]byte(pw), sf.header.KdfSalt, int(params.GetN()), int(params.GetR()), int(params.GetP()), kdfKeyLen)
+	if err != nil {
+		return err
+	}
+	copy(sf.key[:], key)
+	return nil
+}
+
+func (sf *StateFile) Create(pw string) error {
+	var salt [kdfSaltLen]byte
+	if _, err := io.ReadFull(sf.Rand, salt[:]); err != nil {
+		return err
+	}
+
+	if len(pw) > 0 {
+		sf.header.KdfSalt = salt[:]
+		if err := sf.deriveKey(pw); err != nil {
+			return err
+		}
+		sf.header.Scrypt = new(Header_SCrypt)
+	}
+
+	if sf.Erasure != nil {
+		if err := sf.Erasure.Create(&sf.header, &sf.key); err != nil {
+			return err
+		}
+		if _, err := io.ReadFull(sf.Rand, sf.mask[:]); err != nil {
+			return err
+		}
+		if err := sf.Erasure.Write(&sf.key, &sf.mask); err != nil {
+			return err
+		}
+	} else {
+		sf.header.NoErasureStorage = proto.Bool(true)
+	}
+
+	sf.valid = true
+	return nil
+}
+
+func (sf *StateFile) Read(pw string) (*State, error) {
+	b, err := ioutil.ReadFile(sf.Path)
+	if err != nil {
+		return nil, err
+	}
+
+	if len(b) < len(headerMagic)+4 {
+		return nil, errors.New("state file is too small to be valid")
+	}
+
+	if !bytes.Equal(b[:len(headerMagic)], headerMagic[:]) {
+		sf.header.NoErasureStorage = proto.Bool(true)
+		if len(pw) > 0 {
+			sf.header.Scrypt = new(Header_SCrypt)
+			sf.header.KdfSalt = b[:32]
+			if err := sf.deriveKey(pw); err != nil {
+				return nil, err
+			}
+		}
+		b = b[32:]
+		state, err := sf.readOldStyle(b)
+		if err != nil {
+			return nil, err
+		}
+		return state, nil
+	}
+
+	b = b[len(headerMagic):]
+	headerLen := binary.LittleEndian.Uint32(b)
+	b = b[4:]
+	if headerLen > 1<<16 {
+		return nil, errors.New("state file corrupt")
+	}
+	if len(b) < int(headerLen) {
+		return nil, errors.New("state file truncated")
+	}
+	headerBytes := b[:int(headerLen)]
+	b = b[int(headerLen):]
+
+	if err := proto.Unmarshal(headerBytes, &sf.header); err != nil {
+		return nil, err
+	}
+	if len(pw) > 0 {
+		if err := sf.deriveKey(pw); err != nil {
+			return nil, err
+		}
+	}
+
+	if !sf.header.GetNoErasureStorage() {
+		for _, erasureMethod := range erasureRegistry {
+			sf.Erasure = erasureMethod(&sf.header)
+			if sf.Erasure != nil {
+				break
+			}
+		}
+		if sf.Erasure == nil {
+			return nil, errors.New("unknown erasure storage method")
+		}
+
+		mask, err := sf.Erasure.Read(&sf.key)
+		if err != nil {
+			return nil, err
+		}
+		copy(sf.mask[:], mask[:])
+	}
+
+	smearedCopies := int(sf.header.GetNonceSmearCopies())
+
+	if len(b) < 24*smearedCopies {
+		return nil, errors.New("state file truncated")
+	}
+
+	var nonce [24]byte
+	for i := 0; i < smearedCopies; i++ {
+		for j := 0; j < 24; j++ {
+			nonce[j] ^= b[24*i+j]
+		}
+	}
+
+	b = b[24*smearedCopies:]
+
+	var effectiveKey [kdfKeyLen]byte
+	for i := range effectiveKey {
+		effectiveKey[i] = sf.mask[i] ^ sf.key[i]
+	}
+	plaintext, ok := secretbox.Open(nil, b, &nonce, &effectiveKey)
+	if !ok {
+		return nil, BadPasswordError
+	}
+	if len(plaintext) < 4 {
+		return nil, errors.New("state file corrupt")
+	}
+	length := binary.LittleEndian.Uint32(plaintext[:4])
+	plaintext = plaintext[4:]
+	if length > 1<<31 || length > uint32(len(plaintext)) {
+		return nil, errors.New("state file corrupt")
+	}
+	plaintext = plaintext[:int(length)]
+
+	var state State
+	if err := proto.Unmarshal(plaintext, &state); err != nil {
+		return nil, err
+	}
+
+	return &state, nil
+}
+
+func (sf *StateFile) readOldStyle(b []byte) (*State, error) {
+	return loadOldState(b, &sf.key)
+}
+
+type NewState struct {
+	State                []byte
+	RotateErasureStorage bool
+	Destruct             bool
+}
+
+func (sf *StateFile) StartWriter(states chan NewState, done chan struct{}) {
+	for {
+		newState, ok := <-states
+		if !ok {
+			close(done)
+			return
+		}
+
+		if newState.Destruct {
+			sf.Log("disk: Destruct command received.")
+			var newMask [erasureKeyLen]byte
+			if _, err := io.ReadFull(sf.Rand, newMask[:]); err != nil {
+				panic(err)
+			}
+			if sf.Erasure != nil {
+				if err := sf.Erasure.Write(&sf.key, &newMask); err != nil {
+					sf.Log("disk: Error while clearing NVRAM: %s", err)
+				}
+				if err := sf.Erasure.Destroy(&sf.key); err != nil {
+					sf.Log("disk: Error while deleting NVRAM: %s", err)
+				}
+			}
+			out, _ := os.OpenFile(sf.Path, os.O_WRONLY, 0600)
+			if out != nil {
+				pos, _ := out.Seek(0, 2)
+				out.Seek(0, 0)
+				sf.Log("disk: writing %d zeros to statefile", pos)
+				zeros := make([]byte, pos)
+				if _, err := out.Write(zeros); err != nil {
+					sf.Log("disk: error from Write: %s", err)
+				}
+				if err := out.Sync(); err != nil {
+					sf.Log("disk: error from Sync: %s", err)
+				}
+				if err := out.Close(); err != nil {
+					sf.Log("disk: error from Close: %s", err)
+				}
+			}
+			if err := os.Remove(sf.Path); err != nil {
+				sf.Log("disk: error from Remove: %s", err)
+			}
+			close(done)
+			return
+		}
+
+		s := newState.State
+
+		length := uint32(len(s)) + 4
+		for i := uint(17); i < 32; i++ {
+			if n := (uint32(1) << i); n >= length {
+				length = n
+				break
+			}
+		}
+
+		plaintext := make([]byte, length)
+		copy(plaintext[4:], s)
+		if _, err := io.ReadFull(sf.Rand, plaintext[len(s)+4:]); err != nil {
+			panic(err)
+		}
+		binary.LittleEndian.PutUint32(plaintext, uint32(len(s)))
+
+		smearCopies := int(sf.header.GetNonceSmearCopies())
+		nonceSmear := make([]byte, 24*smearCopies)
+		if _, err := io.ReadFull(sf.Rand, nonceSmear[:]); err != nil {
+			panic(err)
+		}
+
+		var nonce [24]byte
+		for i := 0; i < smearCopies; i++ {
+			for j := 0; j < 24; j++ {
+				nonce[j] ^= nonceSmear[24*i+j]
+			}
+		}
+
+		if sf.Erasure != nil && newState.RotateErasureStorage {
+			var newMask [erasureKeyLen]byte
+			if _, err := io.ReadFull(sf.Rand, newMask[:]); err != nil {
+				panic(err)
+			}
+			if err := sf.Erasure.Write(&sf.key, &newMask); err != nil {
+				sf.Log("Failed to write new erasure value: %s", err)
+			} else {
+				copy(sf.mask[:], newMask[:])
+			}
+		}
+
+		var effectiveKey [kdfKeyLen]byte
+		for i := range effectiveKey {
+			effectiveKey[i] = sf.mask[i] ^ sf.key[i]
+		}
+		ciphertext := secretbox.Seal(nil, plaintext, &nonce, &effectiveKey)
+
+		// Open a new, temporary, statefile
+		out, err := os.OpenFile(sf.Path+".tmp", os.O_TRUNC|os.O_CREATE|os.O_WRONLY, 0600)
+		if err != nil {
+			panic(err)
+		}
+		headerBytes, err := proto.Marshal(&sf.header)
+		if err != nil {
+			panic(err)
+		}
+		if _, err := out.Write(headerMagic[:]); err != nil {
+			panic(err)
+		}
+		if err := binary.Write(out, binary.LittleEndian, uint32(len(headerBytes))); err != nil {
+			panic(err)
+		}
+		if _, err := out.Write(headerBytes); err != nil {
+			panic(err)
+		}
+		if _, err := out.Write(nonceSmear[:]); err != nil {
+			panic(err)
+		}
+		if _, err := out.Write(ciphertext); err != nil {
+			panic(err)
+		}
+		out.Sync()
+
+		var newFd int
+
+		// If we had a lock on the old state file then we need to also
+		// lock the new file. First we lock the temp file.
+		sf.lockFdMutex.Lock()
+		if sf.lockFd != nil {
+			newFd, err = syscall.Dup(int(out.Fd()))
+			if err != nil {
+				panic(err)
+			}
+			if err := syscall.Flock(newFd, syscall.LOCK_EX|syscall.LOCK_NB); err != nil {
+				panic(err)
+			}
+		}
+		sf.lockFdMutex.Unlock()
+		out.Close()
+
+		// Remove any previous temporary statefile
+		// (But this shouldn't ever happen?)
+		if err := os.Remove(sf.Path + "~"); err != nil && !os.IsNotExist(err) {
+			panic(err)
+		}
+		// Relink the old statefile to a temporary location
+		if err := os.Rename(sf.Path, sf.Path+"~"); err != nil && !os.IsNotExist(err) {
+			panic(err)
+		}
+		// Link the new statefile in place
+		if err := os.Rename(sf.Path+".tmp", sf.Path); err != nil {
+			panic(err)
+		}
+		// Remove the old file.
+		os.Remove(sf.Path + "~")
+
+		sf.lockFdMutex.Lock()
+		if sf.lockFd != nil {
+			// Duplicate the new file descriptor over the old one.
+			// This will unlock the old inode.
+			if err := syscall.Dup2(newFd, *sf.lockFd); err != nil {
+				panic(err)
+			}
+			syscall.Close(newFd)
+		}
+		sf.lockFdMutex.Unlock()
+	}
+}
+
+type Lock struct {
+	fd *int
+}
+
+func (l *Lock) Close() {
+	if *l.fd < 0 {
+		return
+	}
+	syscall.Flock(*l.fd, syscall.LOCK_UN)
+	syscall.Close(*l.fd)
+	*l.fd = -1
+}
+
+var BadPasswordError = errors.New("bad password")
+
+func loadOldState(b []byte, key *[32]byte) (*State, error) {
+	const (
+		SCryptSaltLen = 32
+		smearedCopies = 32768 / 24
+	)
+
+	if len(b) < SCryptSaltLen+24*smearedCopies {
+		return nil, errors.New("state file is too small to be valid")
+	}
+
+	var nonce [24]byte
+	for i := 0; i < smearedCopies; i++ {
+		for j := 0; j < 24; j++ {
+			nonce[j] ^= b[24*i+j]
+		}
+	}
+
+	b = b[24*smearedCopies:]
+	plaintext, ok := secretbox.Open(nil, b, &nonce, key)
+	if !ok {
+		return nil, BadPasswordError
+	}
+	if len(plaintext) < 4 {
+		return nil, errors.New("state file corrupt")
+	}
+	length := binary.LittleEndian.Uint32(plaintext[:4])
+	plaintext = plaintext[4:]
+	if length > 1<<31 || length > uint32(len(plaintext)) {
+		return nil, errors.New("state file corrupt")
+	}
+	plaintext = plaintext[:int(length)]
+
+	var state State
+	if err := proto.Unmarshal(plaintext, &state); err != nil {
+		return nil, err
+	}
+
+	return &state, nil
+}
diff --git a/client/disk/tpm_linux.go b/client/disk/tpm_linux.go
new file mode 100644
index 0000000..2908215
--- /dev/null
+++ b/client/disk/tpm_linux.go
@@ -0,0 +1,225 @@
+// +build !notpm
+
+package disk
+
+import (
+	"crypto/sha256"
+	"errors"
+	"fmt"
+	"io"
+
+	"github.com/agl/pond/client/tpm"
+	"github.com/golang/protobuf/proto"
+)
+
+func init() {
+	erasureRegistry = append(erasureRegistry, func(header *Header) ErasureStorage {
+		if header.TpmNvram != nil {
+			return &TPM{
+				index: header.TpmNvram.GetIndex(),
+			}
+		}
+		return nil
+	})
+}
+
+type TPM struct {
+	Log   func(format string, args ...interface{})
+	Rand  io.Reader
+	index uint32
+}
+
+func (t *TPM) getContext() (*tpm.Context, error) {
+	ctx, err := tpm.NewContext()
+	if err != nil {
+		if tpmErr, ok := err.(tpm.Error); ok {
+			if tpmErr.Code() == tpm.ErrCodeCommunicationFailure {
+				return nil, errors.New("failed to connect to tcsd; is it running?")
+			}
+		}
+		return nil, fmt.Errorf("failed to create context: %s", err)
+	}
+
+	return ctx, nil
+}
+
+func (t *TPM) getNVRAM(ctx *tpm.Context, key *[kdfKeyLen]byte) (*tpm.NVRAM, error) {
+	h := sha256.New()
+	h.Write([]byte("TPM NVRAM key\x00"))
+	h.Write(key[:])
+	digest := h.Sum(nil)[:20]
+	var nvramKey [20]byte
+	copy(nvramKey[:], digest[:])
+
+	nvram, err := ctx.NewNVRAM()
+	if err != nil {
+		return nil, fmt.Errorf("failed to create NVRAM handle: %s", err)
+	}
+
+	policy, err := ctx.NewPolicy()
+	if err != nil {
+		return nil, fmt.Errorf("failed to create new policy object: %s", err)
+	}
+	if err := policy.SetKey(nvramKey); err != nil {
+		return nil, fmt.Errorf("failed to set policy key: %s", err)
+	}
+	policy.AssignTo(&nvram.Object)
+
+	return nvram, nil
+
+}
+
+func (t *TPM) createIndex(key *[kdfKeyLen]byte) (uint32, error) {
+	t.Log("Connecting to local tcsd")
+	ctx, err := t.getContext()
+	if err != nil {
+		return 0, err
+	}
+	defer ctx.Close()
+
+	tpmPolicy, err := ctx.GetPolicy()
+	if err != nil {
+		return 0, fmt.Errorf("failed to get TPM policy: %s", err)
+	}
+
+	if err := tpmPolicy.SetPassword(""); err != nil {
+		return 0, fmt.Errorf("failed to set password on TPM policy: %s", err)
+	}
+
+	nvram, err := t.getNVRAM(ctx, key)
+	if err != nil {
+		return 0, err
+	}
+
+	nvram.Size = 32
+	nvram.Permissions = tpm.PermWriteAllAtOnce | tpm.PermAuthWrite | tpm.PermAuthRead
+
+NextAttempt:
+	for attempt := 0; attempt < 3; attempt++ {
+		for nvram.Index == 0 {
+			var buf [2]byte
+			if _, err := io.ReadFull(t.Rand, buf[:]); err != nil {
+				return 0, err
+			}
+			nvram.Index = uint32(buf[0]) | uint32(buf[1])<<8
+		}
+		t.Log("Attempting to create NVRAM index %d", nvram.Index)
+		if err := nvram.Create(); err != nil {
+			if tpmErr, ok := err.(tpm.Error); ok {
+				switch tpmErr.Code() {
+				case tpm.ErrCodeNVRAMAlreadyExists:
+					t.Log("NVRAM index already exists. Trying another.")
+					continue NextAttempt
+				case tpm.ErrCodeTPMDisabled:
+					return 0, errors.New("TPM is disabled. Please enable in the BIOS and try again.")
+				case tpm.ErrCodeNoStorageRootKey:
+					t.Log("TPM has no owner. Attempting to set default keys.")
+					srk, err := ctx.NewRSA()
+					if err != nil {
+						return 0, fmt.Errorf("failed to create SRK handle: %s", err)
+					}
+					srkPolicy, err := srk.GetPolicy()
+					if err != nil {
+						return 0, fmt.Errorf("failed to create SRK policy handle: %s", err)
+					}
+					if err := srkPolicy.SetPassword(""); err != nil {
+						return 0, fmt.Errorf("failed to set SRK policy password: %s", err)
+					}
+					if err := ctx.TakeOwnership(srk); err != nil {
+						return 0, fmt.Errorf("failed to take ownership of TPM: %s", err)
+					}
+					t.Log("TPM setup with default owner password. Trying again.")
+					continue NextAttempt
+				}
+			}
+			return 0, fmt.Errorf("error creating NVRAM: %s", err)
+		}
+
+		return nvram.Index, nil
+	}
+
+	return 0, errors.New("too many attempts to create NVRAM")
+}
+
+func (t *TPM) Create(header *Header, key *[kdfKeyLen]byte) error {
+	index, err := t.createIndex(key)
+	if err != nil {
+		return err
+	}
+
+	header.TpmNvram = &Header_TPM{
+		Index: proto.Uint32(index),
+	}
+	t.index = index
+
+	return nil
+}
+
+func (t *TPM) Read(key *[kdfKeyLen]byte) (*[erasureKeyLen]byte, error) {
+	ctx, err := t.getContext()
+	if err != nil {
+		return nil, err
+	}
+	defer ctx.Close()
+
+	nvram, err := t.getNVRAM(ctx, key)
+	if err != nil {
+		return nil, err
+	}
+
+	nvram.Index = t.index
+	var buf [erasureKeyLen]byte
+	n, err := nvram.Read(buf[:])
+	if err != nil {
+		if tpmErr, ok := err.(tpm.Error); ok && tpmErr.Code() == tpm.ErrCodeAuthentication {
+			return nil, BadPasswordError
+		}
+		return nil, err
+	}
+	if n != erasureKeyLen {
+		return nil, fmt.Errorf("NVRAM read returned only %d bytes", n)
+	}
+
+	return &buf, nil
+}
+
+func (t *TPM) Write(key *[kdfKeyLen]byte, value *[erasureKeyLen]byte) error {
+	ctx, err := t.getContext()
+	if err != nil {
+		return err
+	}
+	defer ctx.Close()
+
+	nvram, err := t.getNVRAM(ctx, key)
+	if err != nil {
+		return err
+	}
+
+	nvram.Index = t.index
+	return nvram.Write(value[:])
+}
+
+func (t *TPM) Destroy(key *[kdfKeyLen]byte) error {
+	ctx, err := t.getContext()
+	if err != nil {
+		return err
+	}
+	defer ctx.Close()
+
+	tpmPolicy, err := ctx.GetPolicy()
+	if err != nil {
+		return fmt.Errorf("failed to get TPM policy: %s", err)
+	}
+
+	if err := tpmPolicy.SetPassword(""); err != nil {
+		return fmt.Errorf("failed to set password on TPM policy: %s", err)
+	}
+
+	nvram, err := t.getNVRAM(ctx, key)
+	if err != nil {
+		return err
+	}
+
+	nvram.Index = t.index
+	return nvram.Destroy()
+}
diff --git a/client/erasure_cli_linux.go b/client/erasure_cli_linux.go
new file mode 100644
index 0000000..119139f
--- /dev/null
+++ b/client/erasure_cli_linux.go
@@ -0,0 +1,64 @@
+// +build !notpm
+
+package main
+
+import (
+	"fmt"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/client/tpm"
+)
+
+func (c *cliClient) createErasureStorage(pw string, stateFile *disk.StateFile) error {
+	c.Printf("%s %s\n", termInfoPrefix, tpmIntroMsg)
+
+	present := tpm.Present()
+	if !present {
+		c.Printf("%s %s\n", termErrPrefix, tpmNotPresentMsg)
+	} else {
+		c.Printf("%s %s\n", termInfoPrefix, tpmPresentMsg)
+	}
+
+ConfigureLoop:
+	for present {
+		c.term.SetPrompt("Try to configure TPM (y/n)> ")
+
+	PromptLoop:
+		for {
+			line, err := c.term.ReadLine()
+			if err != nil {
+				return err
+			}
+			switch line {
+			case "y", "yes", "Yes":
+				break PromptLoop
+			case "n", "no", "No":
+				break ConfigureLoop
+			}
+		}
+
+		tpm := disk.TPM{
+			Log: func(format string, args ...interface{}) {
+				msg := fmt.Sprintf(format, args...)
+				c.Printf("%s\n", terminalEscape(msg, false))
+			},
+			Rand: c.rand,
+		}
+
+		stateFile.Erasure = &tpm
+		if err := stateFile.Create(pw); err != nil {
+			c.Printf("%s Setup failed with error: %s\n", termErrPrefix, terminalEscape(err.Error(), false))
+		} else {
+			c.Printf("%s TPM in use for this statefile\n", termInfoPrefix)
+			return nil
+		}
+	}
+
+	c.Printf("%s TPM will not be used for this statefile\n", termErrPrefix)
+	stateFile.Erasure = nil
+	return stateFile.Create(pw)
+}
+
+func (c *cliClient) hasErasure() bool {
+	return true
+}
diff --git a/client/erasure_darwin.go b/client/erasure_darwin.go
new file mode 100644
index 0000000..7580362
--- /dev/null
+++ b/client/erasure_darwin.go
@@ -0,0 +1,14 @@
+package main
+
+import (
+	"github.com/agl/pond/client/disk"
+)
+
+func (c *client) createErasureStorage(pw string, stateFile *disk.StateFile) error {
+	// No NVRAM support on OS X yet.
+	return stateFile.Create(pw)
+}
+
+func (c *client) hasErasure() bool {
+	return false
+}
diff --git a/client/erasure_freebsd.go b/client/erasure_freebsd.go
new file mode 100644
index 0000000..5513c0d
--- /dev/null
+++ b/client/erasure_freebsd.go
@@ -0,0 +1,14 @@
+package main
+
+import (
+	"github.com/agl/pond/client/disk"
+)
+
+func (c *client) createErasureStorage(pw string, stateFile *disk.StateFile) error {
+	// No NVRAM support on FreeBSD yet.
+	return stateFile.Create(pw)
+}
+
+func (c *client) hasErasure() bool {
+	return false
+}
diff --git a/client/erasure_gui_linux.go b/client/erasure_gui_linux.go
new file mode 100644
index 0000000..cbcf599
--- /dev/null
+++ b/client/erasure_gui_linux.go
@@ -0,0 +1,121 @@
+// +build !nogui,linux,!notpm
+
+package main
+
+import (
+	"fmt"
+	"time"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/client/tpm"
+)
+
+func (c *guiClient) createErasureStorage(pw string, stateFile *disk.StateFile) error {
+	var tpmInfo string
+	present := tpm.Present()
+	if present {
+		tpmInfo = tpmPresentMsg
+	} else {
+		tpmInfo = tpmNotPresentMsg
+	}
+
+	ui := VBox{
+		widgetBase: widgetBase{padding: 40, expand: true, fill: true, name: "vbox"},
+		children: []Widget{
+			Label{
+				widgetBase: widgetBase{font: "DejaVu Sans 30"},
+				text:       "Configure TPM",
+			},
+			Label{
+				widgetBase: widgetBase{
+					padding: 20,
+					font:    "DejaVu Sans 14",
+				},
+				text: tpmIntroMsg + "\n\n" + tpmInfo,
+				wrap: 600,
+			},
+			HBox{
+				children: []Widget{
+					Button{
+						widgetBase: widgetBase{
+							name:        "tpm",
+							insensitive: !present,
+						},
+						text: "Try to configure TPM",
+					},
+				},
+			},
+			TextView{
+				widgetBase: widgetBase{name: "log", expand: true, fill: true},
+				editable:   false,
+			},
+			Button{
+				widgetBase: widgetBase{name: "continue"},
+				text:       "Continue without TPM",
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Actions() <- SetFocus{name: "tpm"}
+	c.gui.Actions() <- UIState{uiStateErasureStorage}
+	c.gui.Signal()
+
+	var logText string
+
+	tpm := disk.TPM{
+		Log: func(format string, args ...interface{}) {
+			c.log.Printf(format, args...)
+			logText += fmt.Sprintf(format, args...) + "\n"
+			c.gui.Actions() <- SetTextView{name: "log", text: logText}
+			c.gui.Signal()
+		},
+		Rand: c.rand,
+	}
+
+NextEvent:
+	for {
+		event, ok := <-c.gui.Events()
+		if !ok {
+			c.ShutdownAndSuspend()
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		switch click.name {
+		case "continue":
+			stateFile.Erasure = nil
+			return stateFile.Create(pw)
+		case "tpm":
+			if len(logText) > 0 {
+				c.gui.Actions() <- SetTextView{name: "log", text: ""}
+				c.gui.Signal()
+				logText = ""
+				time.Sleep(300 * time.Millisecond)
+			}
+
+			stateFile.Erasure = &tpm
+			c.gui.Actions() <- Sensitive{name: "tpm", sensitive: false}
+			c.gui.Actions() <- Sensitive{name: "continue", sensitive: false}
+			c.gui.Signal()
+			if err := stateFile.Create(pw); err != nil {
+				tpm.Log("Setup failed with error: %s", err)
+				tpm.Log("You can click the button to try again")
+				c.gui.Actions() <- Sensitive{name: "tpm", sensitive: true}
+				c.gui.Actions() <- Sensitive{name: "continue", sensitive: true}
+				c.gui.Signal()
+				continue NextEvent
+			}
+			return nil
+		}
+	}
+
+	panic("unreachable")
+}
+
+func (c *guiClient) hasErasure() bool {
+	return true
+}
diff --git a/client/erasure_notpm.go b/client/erasure_notpm.go
new file mode 100644
index 0000000..e868172
--- /dev/null
+++ b/client/erasure_notpm.go
@@ -0,0 +1,15 @@
+// +build notpm
+
+package main
+
+import (
+	"github.com/agl/pond/client/disk"
+)
+
+func (c *client) createErasureStorage(pw string, stateFile *disk.StateFile) error {
+	return stateFile.Create(pw)
+}
+
+func (c *client) hasErasure() bool {
+	return false
+}
diff --git a/client/gtk.go b/client/gtk.go
new file mode 100644
index 0000000..a08be89
--- /dev/null
+++ b/client/gtk.go
@@ -0,0 +1,698 @@
+// +build !nogui,!nogtk
+
+package main
+
+import (
+	"fmt"
+	"os"
+	"syscall"
+
+	"github.com/agl/go-gtk/gdk"
+	"github.com/agl/go-gtk/gdkpixbuf"
+	"github.com/agl/go-gtk/glib"
+	"github.com/agl/go-gtk/gtk"
+	"github.com/agl/go-gtk/gtkspell"
+)
+
+type GTKUI struct {
+	window      *gtk.GtkWindow
+	actions     chan interface{}
+	events      chan interface{}
+	pipe        [2]int
+	topWidget   gtk.WidgetLike
+	widgets     map[string]gtk.WidgetLike
+	entries     map[string]*gtk.GtkEntry
+	textViews   map[string]*gtk.GtkTextView
+	combos      map[string]*gtk.GtkComboBoxText
+	checks      map[string]*gtk.GtkCheckButton
+	radioGroups map[string]int
+	calendars   map[string]*gtk.GtkCalendar
+	spinButtons map[string]*gtk.GtkSpinButton
+}
+
+func NewGTKUI() *GTKUI {
+	gtk.Init(nil)
+	window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL)
+	window.SetPosition(gtk.GTK_WIN_POS_CENTER)
+	window.SetTitle("Pond")
+	window.SetDefaultSize(1000, 800)
+
+	ui := &GTKUI{
+		window:  window,
+		actions: make(chan interface{}, uiActionsQueueLen),
+		events:  make(chan interface{}, 8),
+	}
+	window.Connect("destroy", func(ctx *glib.CallbackContext) {
+		close(ui.events)
+		for {
+			if _, ok := <-ui.actions; !ok {
+				break
+			}
+		}
+		gtk.MainQuit()
+	})
+	if err := syscall.Pipe(ui.pipe[:]); err != nil {
+		panic(err)
+	}
+	syscall.SetNonblock(ui.pipe[0], true)
+
+	glib.FdWatchAdd(ui.pipe[0], glib.IOIn, func(conditions int) bool {
+		ui.onAction()
+		return true
+	})
+
+	return ui
+}
+
+func (ui *GTKUI) Actions() chan<- interface{} {
+	return ui.actions
+}
+
+func (ui *GTKUI) Events() <-chan interface{} {
+	return ui.events
+}
+
+func (ui *GTKUI) Signal() {
+	syscall.Write(ui.pipe[1], []byte{0})
+}
+
+func (ui *GTKUI) Run() {
+	gtk.Main()
+}
+
+func (ui *GTKUI) onAction() {
+	buf := make([]byte, 8)
+	for {
+		n, _ := syscall.Read(ui.pipe[0], buf)
+		if n < 1 {
+			break
+		}
+	}
+
+	for {
+		select {
+		case v, ok := <-ui.actions:
+			if !ok {
+				gtk.MainQuit()
+				return
+			}
+			ui.handle(v)
+		default:
+			return
+		}
+	}
+}
+
+func (ui *GTKUI) updated(name string) {
+	buf := ui.textViews[name].GetBuffer()
+	var start, end gtk.GtkTextIter
+	buf.GetStartIter(&start)
+	buf.GetEndIter(&end)
+	contents := buf.GetText(&start, &end, false)
+	ui.events <- Update{name, contents}
+}
+
+func (ui *GTKUI) updatedEntry(name string) {
+	ui.events <- Update{name, ui.entries[name].GetText()}
+}
+
+func (ui *GTKUI) clicked(name string) {
+	entries := make(map[string]string)
+	textViews := make(map[string]string)
+	var combos map[string]string
+	var checks map[string]bool
+	var radios map[string]int
+	var calendars map[string]CalendarDate
+	var spins map[string]int
+
+	if len(ui.combos) > 0 {
+		combos = make(map[string]string)
+	}
+	if len(ui.checks) > 0 {
+		checks = make(map[string]bool)
+	}
+	if len(ui.radioGroups) > 0 {
+		radios = make(map[string]int)
+	}
+	if len(ui.calendars) > 0 {
+		calendars = make(map[string]CalendarDate)
+	}
+	if len(ui.spinButtons) > 0 {
+		spins = make(map[string]int)
+	}
+
+	for ename, entry := range ui.entries {
+		entries[ename] = entry.GetText()
+	}
+	for tvname, tv := range ui.textViews {
+		buf := tv.GetBuffer()
+		var start, end gtk.GtkTextIter
+		buf.GetStartIter(&start)
+		buf.GetEndIter(&end)
+		textViews[tvname] = buf.GetText(&start, &end, false)
+	}
+	for comboName, combo := range ui.combos {
+		combos[comboName] = combo.GetActiveText()
+	}
+	for checkName, check := range ui.checks {
+		checks[checkName] = check.GetActive()
+	}
+	for radioName, val := range ui.radioGroups {
+		radios[radioName] = val
+	}
+	for calName, cal := range ui.calendars {
+		year, month, day := cal.GetDate()
+		calendars[calName] = CalendarDate{year, month, day}
+	}
+	for spinName, spin := range ui.spinButtons {
+		spins[spinName] = spin.GetInt()
+	}
+
+	ui.events <- Click{name, entries, textViews, combos, checks, radios, calendars, spins}
+}
+
+func (ui *GTKUI) newWidget(v Widget) gtk.WidgetLike {
+	widget := ui.createWidget(v)
+	if name := v.Name(); len(name) > 0 {
+		ui.widgets[name] = widget
+	}
+	return widget
+}
+
+func alignToGTK(align int) gtk.GtkAlign {
+	switch align {
+	case AlignStart:
+		return gtk.GTK_ALIGN_START
+	case AlignEnd:
+		return gtk.GTK_ALIGN_END
+	case AlignFill:
+		return gtk.GTK_ALIGN_FILL
+	case AlignCenter:
+		return gtk.GTK_ALIGN_CENTER
+	}
+
+	panic("bad alignment value")
+}
+
+func configureWidget(w *gtk.GtkWidget, b widgetBase) {
+	width := -1
+	if b.width != 0 {
+		width = b.width
+	}
+
+	height := -1
+	if b.height != 0 {
+		height = b.height
+	}
+
+	if width != -1 || height != -1 {
+		w.SetSizeRequest(width, height)
+	}
+
+	w.SetSensitive(!b.insensitive)
+
+	if color := b.Foreground(); color != 0 {
+		w.OverrideColor(gtk.GTK_STATE_FLAG_NORMAL, toColor(color))
+	}
+	if color := b.Background(); color != 0 {
+		w.OverrideBackgroundColor(gtk.GTK_STATE_FLAG_NORMAL, toColor(color))
+	}
+	if len(b.font) != 0 {
+		w.OverrideFont(b.font)
+	}
+	if b.hExpand {
+		w.SetHExpand(true)
+	}
+	if b.vExpand {
+		w.SetVExpand(true)
+	}
+	if b.margin > 0 {
+		w.SetMargin(b.margin)
+	}
+	if b.marginTop > 0 {
+		w.SetMarginTop(b.marginTop)
+	}
+	if b.marginBottom > 0 {
+		w.SetMarginBottom(b.marginBottom)
+	}
+	if b.marginLeft > 0 {
+		w.SetMarginLeft(b.marginLeft)
+	}
+	if b.vAlign != AlignNone {
+		w.SetVAlign(alignToGTK(b.vAlign))
+	}
+	if b.hAlign != AlignNone {
+		w.SetHAlign(alignToGTK(b.hAlign))
+	}
+}
+
+func (ui *GTKUI) createWidget(v interface{}) gtk.WidgetLike {
+	switch v := v.(type) {
+	case VBox:
+		vbox := gtk.Box(gtk.GTK_ORIENTATION_VERTICAL, v.spacing)
+		for _, child := range v.children {
+			widget := ui.newWidget(child)
+			if child.PackEnd() {
+				vbox.PackEnd(widget, child.Expand(), child.Fill(), child.Padding())
+			} else {
+				vbox.PackStart(widget, child.Expand(), child.Fill(), child.Padding())
+			}
+		}
+		return vbox
+	case HBox:
+		hbox := gtk.Box(gtk.GTK_ORIENTATION_HORIZONTAL, v.spacing)
+		for _, child := range v.children {
+			widget := ui.newWidget(child)
+			hbox.PackStart(widget, child.Expand(), child.Fill(), child.Padding())
+		}
+		return hbox
+	case EventBox:
+		box := gtk.EventBox()
+		if v.child != nil {
+			widget := ui.newWidget(v.child)
+			box.Add(widget)
+		}
+		configureWidget(&box.GtkWidget, v.widgetBase)
+		if len(v.name) > 0 {
+			box.Connect("button-press-event", func(e interface{}) {
+				ui.clicked(v.name)
+			})
+		}
+		return box
+	case Label:
+		label := gtk.Label(v.text)
+		if len(v.markup) > 0 {
+			label.SetMarkup(v.markup)
+		}
+		label.SetAlignment(v.xAlign, v.yAlign)
+		configureWidget(&label.GtkWidget, v.widgetBase)
+		if v.wrap != 0 {
+			label.SetSizeRequest(v.wrap, -1)
+			label.SetLineWrap(true)
+		}
+		label.SetSelectable(v.selectable)
+		return label
+	case Entry:
+		entry := gtk.Entry()
+		entry.SetText(v.text)
+		if v.width > 0 {
+			entry.SetWidthChars(v.width)
+		}
+		if name := v.name; len(name) > 0 {
+			ui.entries[name] = entry
+			entry.Connect("destroy", func() {
+				delete(ui.entries, name)
+			})
+			entry.Connect("activate", func() {
+				ui.clicked(v.name)
+			})
+			if v.updateOnChange {
+				entry.Connect("changed", func() {
+					ui.updatedEntry(v.name)
+				})
+			}
+		}
+		if v.password {
+			entry.SetVisibility(false)
+		}
+		configureWidget(&entry.GtkWidget, v.widgetBase)
+		return entry
+	case Button:
+		var button *gtk.GtkButton
+		if len(v.text) > 0 {
+			button = gtk.ButtonWithLabel(v.text)
+		} else {
+			button = gtk.Button()
+			if len(v.markup) > 0 {
+				label := gtk.Label("")
+				label.SetMarkup(v.markup)
+				button.Add(label)
+			}
+		}
+		if v.image != indicatorNone {
+			image := gtk.ImageFromPixbuf(v.image.Image())
+			button.Add(image)
+		}
+		button.Clicked(func() {
+			ui.clicked(v.name)
+		})
+		configureWidget(&button.GtkWidget, v.widgetBase)
+		return button
+	case Spinner:
+		spinner := gtk.Spinner()
+		spinner.Start()
+		return spinner
+	case Paned:
+		paned := gtk.Paned(gtk.GTK_ORIENTATION_HORIZONTAL)
+		left := ui.newWidget(v.left)
+		right := ui.newWidget(v.right)
+		paned.Add1(left)
+		paned.Add2(right)
+		return paned
+	case Scrolled:
+		scrolled := gtk.ScrolledWindow(nil, nil)
+		horizonalPolicy := gtk.GtkPolicyType(gtk.GTK_POLICY_NEVER)
+		if v.horizontal {
+			horizonalPolicy = gtk.GTK_POLICY_AUTOMATIC
+		}
+		scrolled.SetPolicy(horizonalPolicy, gtk.GTK_POLICY_AUTOMATIC)
+		child := ui.newWidget(v.child)
+		if v.viewport {
+			scrolled.AddWithViewPort(child)
+		} else {
+			scrolled.Add(child)
+		}
+		return scrolled
+	case TextView:
+		view := gtk.TextView()
+		view.SetBorderWidth(1)
+		view.SetEditable(v.editable)
+		if len(v.text) > 0 {
+			buffer := gtk.TextBuffer(gtk.TextTagTable())
+			buffer.SetText(v.text)
+			view.SetBuffer(buffer)
+		}
+		if v.wrap {
+			view.SetWrapMode(gtk.GTK_WRAP_WORD_CHAR)
+		}
+		if v.updateOnChange && len(v.name) > 0 {
+			view.GetBuffer().Connect("changed", func() {
+				ui.updated(v.name)
+			})
+		}
+		if v.spellCheck {
+			if _, err := gtkspell.New(view, ""); err != nil {
+				fmt.Fprintf(os.Stderr, "Failed to setup spellchecker: %s\n", err)
+			}
+		}
+		if name := v.name; len(name) > 0 {
+			ui.textViews[name] = view
+			view.Connect("destroy", func() {
+				delete(ui.textViews, name)
+			})
+		}
+		configureWidget(&view.GtkWidget, v.widgetBase)
+		return view
+	case Combo:
+		combo := gtk.ComboBoxText()
+		selectedIndex := -1
+		for i, l := range v.labels {
+			combo.AppendText(l)
+			if len(v.preSelected) > 0 && l == v.preSelected {
+				selectedIndex = i
+			}
+		}
+		if selectedIndex >= 0 {
+			combo.SetActive(selectedIndex)
+		}
+		if name := v.name; len(name) > 0 {
+			ui.combos[name] = combo
+			combo.Connect("destroy", func() {
+				delete(ui.combos, name)
+			})
+			combo.Connect("changed", func() {
+				ui.clicked(v.name)
+			})
+		}
+		configureWidget(&combo.GtkWidget, v.widgetBase)
+		return combo
+	case Image:
+		image := gtk.ImageFromPixbuf(v.image.Image())
+		image.SetAlignment(v.xAlign, v.yAlign)
+		configureWidget(&image.GtkWidget, v.widgetBase)
+		return image
+	case Frame:
+		frame := gtk.Frame("")
+		configureWidget(&frame.GtkWidget, v.widgetBase)
+		if v.child != nil {
+			widget := ui.newWidget(v.child)
+			frame.Add(widget)
+		}
+		return frame
+	case Progress:
+		pro := gtk.ProgressBar()
+		configureWidget(&pro.GtkWidget, v.widgetBase)
+		return pro
+	case Grid:
+		grid := gtk.Grid()
+		configureWidget(&grid.GtkWidget, v.widgetBase)
+		for y, row := range v.rows {
+			x := 0
+			for _, elem := range row {
+				if elem.widget != nil {
+					grid.Attach(ui.newWidget(elem.widget), x, y, elem.width, elem.height)
+				}
+				x += elem.width
+			}
+		}
+		if v.rowSpacing > 0 {
+			grid.SetRowSpacing(v.rowSpacing)
+		}
+		if v.colSpacing > 0 {
+			grid.SetColSpacing(v.colSpacing)
+		}
+		if v.rowHomogeneous {
+			grid.SetRowHomogeneous(true)
+		}
+		if v.colHomogeneous {
+			grid.SetColumnHomogeneous(true)
+		}
+		return grid
+	case RadioGroup:
+		hbox := gtk.Box(gtk.GTK_ORIENTATION_HORIZONTAL, 2)
+		var last *gtk.GtkRadioButton
+		for i, labelText := range v.labels {
+			last = gtk.RadioButtonWithLabelFromWidget(last, labelText)
+			i := i
+			last.Connect("toggled", func() {
+				ui.radioGroups[v.name] = i
+				ui.clicked(v.name)
+			})
+			last.Connect("destroy", func() {
+				delete(ui.radioGroups, v.name)
+			})
+			hbox.PackStart(last, false, true, 2)
+		}
+		return hbox
+	case Calendar:
+		cal := gtk.Calendar()
+		configureWidget(&cal.GtkWidget, v.widgetBase)
+		if len(v.name) > 0 {
+			ui.calendars[v.name] = cal
+			cal.Connect("destroy", func() {
+				delete(ui.calendars, v.name)
+			})
+		}
+		return cal
+	case SpinButton:
+		spin := gtk.SpinButtonWithRange(v.min, v.max, v.step)
+		configureWidget(&spin.GtkWidget, v.widgetBase)
+		if len(v.name) > 0 {
+			ui.spinButtons[v.name] = spin
+			spin.Connect("destroy", func() {
+				delete(ui.spinButtons, v.name)
+			})
+		}
+		return spin
+	case CheckButton:
+		check := gtk.CheckButtonWithLabel(v.text)
+		configureWidget(&check.GtkWidget, v.widgetBase)
+		check.SetActive(v.checked)
+		if len(v.name) > 0 {
+			check.Connect("toggled", func() {
+				ui.clicked(v.name)
+			})
+			check.Connect("destroy", func() {
+				delete(ui.checks, v.name)
+			})
+			ui.checks[v.name] = check
+		}
+
+		return check
+
+	default:
+		panic("unknown widget: " + fmt.Sprintf("%#v", v))
+	}
+
+	panic("forgot to return")
+}
+
+func (ui *GTKUI) getWidget(name string) gtk.WidgetLike {
+	widget, ok := ui.widgets[name]
+	if !ok {
+		panic("no such widget: " + name)
+	}
+	return widget
+}
+
+func (ui *GTKUI) handle(action interface{}) {
+	switch action := action.(type) {
+	case Reset:
+		ui.widgets = make(map[string]gtk.WidgetLike)
+		ui.entries = make(map[string]*gtk.GtkEntry)
+		ui.textViews = make(map[string]*gtk.GtkTextView)
+		ui.combos = make(map[string]*gtk.GtkComboBoxText)
+		ui.radioGroups = make(map[string]int)
+		ui.checks = make(map[string]*gtk.GtkCheckButton)
+		ui.radioGroups = make(map[string]int)
+		ui.calendars = make(map[string]*gtk.GtkCalendar)
+		ui.spinButtons = make(map[string]*gtk.GtkSpinButton)
+
+		if ui.topWidget != nil {
+			ui.window.Remove(ui.topWidget)
+			ui.topWidget = nil
+		}
+		ui.topWidget = ui.newWidget(action.root)
+		ui.window.Add(ui.topWidget)
+		ui.window.ShowAll()
+	case Append:
+		box := ui.getWidget(action.name).(gtk.BoxLike)
+		for _, child := range action.children {
+			widget := ui.newWidget(child)
+			box.PackStart(widget, child.Expand(), child.Fill(), child.Padding())
+		}
+		ui.window.ShowAll()
+	case AddToBox:
+		box := ui.getWidget(action.box).(gtk.BoxLike)
+		widget := ui.newWidget(action.child)
+		box.PackStart(widget, action.child.Expand(), action.child.Fill(), action.child.Padding())
+		box.ReorderChild(widget, action.pos)
+		ui.window.ShowAll()
+	case SetChild:
+		bin := gtk.GtkBin{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		for _, child := range bin.GetChildren() {
+			child.Destroy()
+		}
+		bin.Add(ui.newWidget(action.child))
+		ui.window.ShowAll()
+	case SetBoxContents:
+		box := gtk.GtkBox{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		for _, child := range box.GetChildren() {
+			child.Destroy()
+		}
+		child := action.child
+		widget := ui.newWidget(child)
+		box.PackStart(widget, child.Expand(), child.Fill(), child.Padding())
+		ui.window.ShowAll()
+	case SetBackground:
+		widget := gtk.GtkWidget{ui.getWidget(action.name).ToNative()}
+		widget.OverrideBackgroundColor(gtk.GTK_STATE_FLAG_NORMAL, toColor(action.color))
+	case Sensitive:
+		widget := gtk.GtkWidget{ui.getWidget(action.name).ToNative()}
+		widget.SetSensitive(action.sensitive)
+	case StartSpinner:
+		widget := gtk.GtkSpinner{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}
+		widget.Start()
+	case StopSpinner:
+		widget := gtk.GtkSpinner{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}
+		widget.Stop()
+	case SetText:
+		widget := gtk.GtkLabel{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}
+		widget.SetText(action.text)
+	case SetButtonText:
+		widget := gtk.GtkButton{gtk.GtkBin{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}}
+		widget.SetLabel(action.text)
+	case SetEntry:
+		widget := ui.getWidget(action.name).(gtk.TextInputLike)
+		widget.SetText(action.text)
+	case SetTextView:
+		widget := gtk.GtkTextView{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		buffer := gtk.TextBuffer(gtk.TextTagTable())
+		buffer.SetText(action.text)
+		widget.SetBuffer(buffer)
+	case ScrollTextViewToEnd:
+		widget := gtk.GtkTextView{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		mark := widget.GetBuffer().GetMark("insert")
+		widget.ScrollToMark(mark, 0.0, true, 0, 1)
+	case SetImage:
+		widget := gtk.GtkImage{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}
+		widget.SetFromPixbuf(action.image.Image())
+	case SetFocus:
+		widget := gtk.GtkWidget{ui.getWidget(action.name).ToNative()}
+		widget.GrabFocus()
+	case Destroy:
+		widget := gtk.GtkWidget{ui.getWidget(action.name).ToNative()}
+		widget.Destroy()
+		delete(ui.widgets, action.name)
+	case FileOpen:
+		fileAction := gtk.GTK_FILE_CHOOSER_ACTION_OPEN
+		button := gtk.GTK_STOCK_OPEN
+		if action.save {
+			fileAction = gtk.GTK_FILE_CHOOSER_ACTION_SAVE
+			button = gtk.GTK_STOCK_SAVE
+		}
+		dialog := gtk.FileChooserDialog(action.title, ui.window, fileAction, gtk.GTK_STOCK_CANCEL, int(gtk.GTK_RESPONSE_CANCEL), button, int(gtk.GTK_RESPONSE_ACCEPT))
+		if action.save {
+			if len(action.filename) > 0 {
+				dialog.SetCurrentName(action.filename)
+			} else {
+				panic("save dialog without filename")
+			}
+		}
+		switch gtk.GtkResponseType(dialog.Run()) {
+		case gtk.GTK_RESPONSE_ACCEPT:
+			ui.events <- OpenResult{
+				ok:   true,
+				path: dialog.GetFilename(),
+				arg:  action.arg,
+			}
+		default:
+			ui.events <- OpenResult{arg: action.arg}
+		}
+		dialog.Destroy()
+	case SetForeground:
+		widget := gtk.GtkWidget{ui.getWidget(action.name).ToNative()}
+		widget.OverrideColor(gtk.GTK_STATE_FLAG_NORMAL, toColor(action.foreground))
+	case SetProgress:
+		widget := gtk.GtkProgressBar{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}
+		widget.SetFraction(action.fraction)
+		widget.SetText(action.s)
+	case SetTitle:
+		ui.window.SetTitle(action.title)
+	case InsertRow:
+		grid := gtk.GtkGrid{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		x := 0
+		for _, elem := range action.row {
+			if elem.widget != nil {
+				grid.Attach(ui.newWidget(elem.widget), x, action.pos, elem.width, elem.height)
+			}
+			x += elem.width
+		}
+		ui.window.ShowAll()
+	case GridSet:
+		grid := gtk.GtkGrid{gtk.GtkContainer{gtk.GtkWidget{ui.getWidget(action.name).ToNative()}}}
+		grid.Attach(ui.newWidget(action.widget), action.col, action.row, 1, 1)
+		ui.window.ShowAll()
+
+	case UIError:
+	case UIState:
+	case UIInfo:
+		// for testing.
+	default:
+		panic("unknown action")
+	}
+}
+
+func colComponent(component uint32) float64 {
+	return float64(component&0xff) / 255
+}
+
+func toColor(color uint32) *gdk.GdkRGBA {
+	return gdk.RGBA(colComponent(color>>16), colComponent(color>>8), colComponent(color), 1)
+}
+
+var indicatorImages [indicatorCount]*gdkpixbuf.GdkPixbuf
+
+func (i Indicator) Image() *gdkpixbuf.GdkPixbuf {
+	if indicatorImages[i] == nil {
+		loader, err := gdkpixbuf.PixbufLoaderWithType("png")
+		if err != nil {
+			panic(err)
+		}
+		if ok, err := loader.Write(indicatorPNGBytes[i]); !ok {
+			panic(err)
+		}
+		indicatorImages[i] = loader.GetPixbuf()
+	}
+	return indicatorImages[i]
+}
diff --git a/client/gui-nogui.go b/client/gui-nogui.go
new file mode 100644
index 0000000..5eccc80
--- /dev/null
+++ b/client/gui-nogui.go
@@ -0,0 +1,27 @@
+// +build nogui
+
+package main
+
+import "io"
+
+const haveGUI = false
+
+type noGUIClient struct {
+	client
+}
+
+type GUI int
+
+func (GUI) Run() {
+}
+
+func NewGTKUI() GUI {
+	return 0
+}
+
+func (*noGUIClient) Start() {
+}
+
+func NewGUIClient(stateFilename string, gui GUI, rand io.Reader, testing, autoFetch bool) *noGUIClient {
+	panic("no GUI built")
+}
diff --git a/client/gui.go b/client/gui.go
new file mode 100644
index 0000000..7d96a5f
--- /dev/null
+++ b/client/gui.go
@@ -0,0 +1,3663 @@
+// +build !nogui
+
+package main
+
+import (
+	"bytes"
+	"encoding/pem"
+	"errors"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+	"path/filepath"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/panda"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+)
+
+const haveGUI = true
+
+const (
+	colorDefault               = 0
+	colorWhite                 = 0xffffff
+	colorGray                  = 0xfafafa
+	colorHighlight             = 0xffebcd
+	colorSubline               = 0x999999
+	colorHeaderBackground      = 0xececed
+	colorHeaderForeground      = 0x777777
+	colorHeaderForegroundSmall = 0x7b7f83
+	colorSep                   = 0xc9c9c9
+	colorTitleForeground       = 0xdddddd
+	colorBlack                 = 1
+	colorRed                   = 0xff0000
+	colorError                 = 0xff0000
+	colorImminently            = 0xffdddd
+	colorDeleteSoon            = 0xdddddd
+)
+
+const (
+	fontLoadTitle   = "DejaVu Serif 30"
+	fontLoadLarge   = "Arial Bold 30"
+	fontListHeading = "Ariel Bold 11"
+	fontListEntry   = "Liberation Sans 12"
+	fontListSubline = "Liberation Sans 10"
+	fontMainTitle   = "Arial 16"
+	fontMainLabel   = "Arial Bold 9"
+	fontMainBody    = "Arial 12"
+	fontMainMono    = "Liberation Mono 10"
+)
+
+// uiState values are used for synchronisation with tests.
+const (
+	uiStateInvalid = iota
+	uiStateLoading
+	uiStateError
+	uiStateMain
+	uiStateCreateAccount
+	uiStateCreatePassphrase
+	uiStateNewContact
+	uiStateNewContact2
+	uiStateShowContact
+	uiStateCompose
+	uiStateOutbox
+	uiStateShowIdentity
+	uiStatePassphrase
+	uiStateInbox
+	uiStateLog
+	uiStateRevocationProcessed
+	uiStateRevocationComplete
+	uiStatePANDAComplete
+	uiStateErasureStorage
+	uiStateTimerComplete
+	uiStateEntomb
+	uiStateEntombComplete
+	uiStateContactNameChanged
+	uiStateDetachmentComplete
+)
+
+type guiClient struct {
+	client
+
+	gui                                               GUI
+	inboxUI, outboxUI, contactsUI, clientUI, draftsUI *listUI
+}
+
+// nextEvent polls a number of event sources and returns a GUI event and a bool
+// which indicates whether this is a global event or not. Global events are
+// events like clicks on the lists on the left-hand-side, which cause the
+// currently running interaction to be aborted.
+//
+// It takes the id of the currently active message (be it inbox or outbox),
+// which can be zero if no message is currently being viewed. This id is used
+// to prevent the deletion of those messages.
+func (c *guiClient) nextEvent(currentMsgId uint64) (event interface{}, wanted bool) {
+	var ok bool
+	select {
+	case sigReq := <-c.signingRequestChan:
+		c.processSigningRequest(sigReq)
+		return
+	case event, ok = <-c.gui.Events():
+		if !ok {
+			c.ShutdownAndSuspend()
+		}
+	case newMessage := <-c.newMessageChan:
+		c.processNewMessage(newMessage)
+		return
+	case msr := <-c.messageSentChan:
+		if msr.id != 0 {
+			c.processMessageSent(msr)
+		}
+		return
+	case update := <-c.pandaChan:
+		c.processPANDAUpdate(update)
+		return
+	case event = <-c.backgroundChan:
+		break
+	case <-c.log.updateChan:
+		return
+	case <-c.timerChan:
+		c.processTimer(currentMsgId)
+		return
+	}
+
+	if _, ok := c.contactsUI.Event(event); ok {
+		wanted = true
+	}
+	if _, ok := c.outboxUI.Event(event); ok {
+		wanted = true
+	}
+	if _, ok := c.inboxUI.Event(event); ok {
+		wanted = true
+	}
+	if _, ok := c.clientUI.Event(event); ok {
+		wanted = true
+	}
+	if _, ok := c.draftsUI.Event(event); ok {
+		wanted = true
+	}
+	if click, ok := event.(Click); ok {
+		wanted = wanted || click.name == "newcontact" || click.name == "compose"
+	}
+	return
+}
+
+func (c *guiClient) processTimer(currentMsgId uint64) {
+	now := c.Now()
+	haveDeleted := false
+
+RestartInboxIteration:
+	for {
+		for _, msg := range c.inbox {
+			if msg.id != currentMsgId && !msg.retained && now.Sub(msg.receivedTime) > messageLifetime && now.Sub(msg.exposureTime) > messageGraceTime {
+				if len(msg.message.Body) > 0 {
+					c.inboxUI.Remove(msg.id)
+				}
+				c.deleteInboxMsg(msg.id)
+				// c.inbox will have been updated by this
+				// deletion so we start from the beginning
+				// again.
+				haveDeleted = true
+				continue RestartInboxIteration
+			}
+			c.updateInboxBackgroundColor(msg)
+		}
+		break
+	}
+
+RestartOutboxIteration:
+	for {
+		for _, msg := range c.outbox {
+			if msg.id != currentMsgId && now.Sub(msg.created) > messageLifetime {
+				if msg.revocation || len(msg.message.Body) > 0 {
+					c.outboxUI.Remove(msg.id)
+				}
+				c.deleteOutboxMsg(msg.id)
+				haveDeleted = true
+				continue RestartOutboxIteration
+			}
+		}
+		break
+	}
+
+	if haveDeleted {
+		c.save()
+	}
+
+	c.gui.Actions() <- UIState{uiStateTimerComplete}
+	c.gui.Signal()
+}
+
+// torPromptUI displays a prompt to start Tor and tries once a second until it
+// can be found.
+func (c *guiClient) torPromptUI() error {
+	ui := VBox{
+		widgetBase: widgetBase{padding: 40, expand: true, fill: true, name: "vbox"},
+		children: []Widget{
+			Label{
+				widgetBase: widgetBase{font: "DejaVu Sans 30"},
+				text:       "Cannot find Tor",
+			},
+			Label{
+				widgetBase: widgetBase{
+					padding: 20,
+					font:    "DejaVu Sans 14",
+				},
+				text: "Please start Tor or the Tor Browser Bundle. Looking for a SOCKS proxy on port 9050 or 9150...",
+				wrap: 600,
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Signal()
+
+	ticker := time.NewTicker(1 * time.Second)
+	defer ticker.Stop()
+	for {
+		select {
+		case _, ok := <-c.gui.Events():
+			if !ok {
+				c.ShutdownAndSuspend()
+			}
+		case <-ticker.C:
+			if c.detectTor() {
+				return nil
+			}
+		}
+	}
+
+	return nil
+}
+
+func (c *guiClient) sleepUI(d time.Duration) error {
+	select {
+	case _, ok := <-c.gui.Events():
+		if !ok {
+			// User asked to close the window.
+			close(c.gui.Actions())
+			select {}
+		}
+	case <-time.After(d):
+		break
+	}
+
+	return nil
+}
+
+func (c *guiClient) initUI() {
+	ui := VBox{
+		widgetBase: widgetBase{
+			background: colorWhite,
+		},
+		children: []Widget{
+			EventBox{
+				widgetBase: widgetBase{background: 0x333355},
+				child: HBox{
+					children: []Widget{
+						Label{
+							widgetBase: widgetBase{
+								foreground: colorWhite,
+								padding:    10,
+								font:       fontLoadTitle,
+							},
+							text: "Pond",
+						},
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{
+					name:    "body",
+					padding: 30,
+					expand:  true,
+					fill:    true,
+				},
+			},
+		},
+	}
+	c.gui.Actions() <- Reset{ui}
+}
+
+func (c *guiClient) loadingUI() {
+	loading := EventBox{
+		widgetBase: widgetBase{expand: true, fill: true},
+		child: Label{
+			widgetBase: widgetBase{
+				foreground: colorTitleForeground,
+				font:       fontLoadLarge,
+			},
+			text:   "Loading...",
+			xAlign: 0.5,
+			yAlign: 0.5,
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: loading}
+	c.gui.Actions() <- UIState{uiStateLoading}
+	c.gui.Signal()
+}
+
+func (c *guiClient) DeselectAll() {
+	c.inboxUI.Deselect()
+	c.outboxUI.Deselect()
+	c.contactsUI.Deselect()
+	c.clientUI.Deselect()
+	c.draftsUI.Deselect()
+}
+
+var rightPlaceholderUI = EventBox{
+	widgetBase: widgetBase{background: colorGray, name: "right"},
+	child: Label{
+		widgetBase: widgetBase{
+			foreground: colorTitleForeground,
+			font:       fontLoadLarge,
+		},
+		text:   "Pond",
+		xAlign: 0.5,
+		yAlign: 0.5,
+	},
+}
+
+func (c *guiClient) updateWindowTitle() {
+	unreadCount := 0
+
+	for _, msg := range c.inbox {
+		if msg.message != nil && !msg.read && len(msg.message.Body) > 0 {
+			unreadCount++
+		}
+	}
+
+	if unreadCount == 0 {
+		c.gui.Actions() <- SetTitle{"Pond"}
+	} else {
+		c.gui.Actions() <- SetTitle{fmt.Sprintf("Pond (%d)", unreadCount)}
+	}
+	c.gui.Signal()
+}
+
+func (c *guiClient) processFetch(inboxMsg *InboxMessage) {
+	from := c.contacts[inboxMsg.from]
+
+	if !from.isPending {
+		if len(inboxMsg.message.Body) > 0 {
+			subline := time.Unix(*inboxMsg.message.Time, 0).Format(shortTimeFormat)
+			c.inboxUI.Add(inboxMsg.id, from.name, subline, indicatorBlue)
+		}
+	} else {
+		c.inboxUI.Add(inboxMsg.id, from.name, "pending", indicatorRed)
+	}
+
+	c.updateWindowTitle()
+}
+
+func (c *guiClient) processServerAnnounce(inboxMsg *InboxMessage) {
+	subline := time.Unix(*inboxMsg.message.Time, 0).Format(shortTimeFormat)
+	c.inboxUI.Add(inboxMsg.id, c.ContactName(inboxMsg.from), subline, indicatorBlue)
+	c.updateWindowTitle()
+}
+
+func (c *guiClient) processAcknowledgement(ackedMsg *queuedMessage) {
+	c.outboxUI.SetIndicator(ackedMsg.id, indicatorGreen)
+}
+
+func (c *guiClient) processRevocationOfUs(by *Contact) {
+	c.contactsUI.SetIndicator(by.id, indicatorBlack)
+	c.contactsUI.SetSubline(by.id, "has revoked")
+
+	c.queueMutex.Lock()
+	for _, m := range c.queue {
+		if m.to == by.id {
+			c.outboxUI.SetIndicator(m.id, indicatorBlack)
+		}
+	}
+	c.queueMutex.Unlock()
+}
+
+func (c *guiClient) processRevocation(by *Contact) {
+	c.gui.Actions() <- UIState{uiStateRevocationProcessed}
+	c.gui.Signal()
+}
+
+func (c *guiClient) processMessageDelivered(msg *queuedMessage) {
+	c.outboxUI.SetIndicator(msg.id, indicatorYellow)
+}
+
+func (c *guiClient) mainUI() {
+	ui := Paned{
+		left: Scrolled{
+			viewport: true,
+			child: EventBox{
+				widgetBase: widgetBase{background: colorGray},
+				child: VBox{
+					children: []Widget{
+						EventBox{
+							widgetBase: widgetBase{background: colorHeaderBackground},
+							child: Label{
+								widgetBase: widgetBase{
+									foreground: colorHeaderForegroundSmall,
+									padding:    10,
+									font:       fontListHeading,
+								},
+								xAlign: 0.5,
+								text:   "Inbox",
+							},
+						},
+						EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+						VBox{widgetBase: widgetBase{name: "inboxVbox"}},
+
+						EventBox{
+							widgetBase: widgetBase{background: colorHeaderBackground},
+							child: Label{
+								widgetBase: widgetBase{
+									foreground: colorHeaderForegroundSmall,
+									padding:    10,
+									font:       fontListHeading,
+								},
+								xAlign: 0.5,
+								text:   "Outbox",
+							},
+						},
+						EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+						HBox{
+							widgetBase: widgetBase{padding: 6},
+							children: []Widget{
+								HBox{widgetBase: widgetBase{expand: true}},
+								HBox{
+									widgetBase: widgetBase{padding: 8},
+									children: []Widget{
+										VBox{
+											widgetBase: widgetBase{padding: 8},
+											children: []Widget{
+												Button{
+													widgetBase: widgetBase{width: 100, name: "compose"},
+													text:       "Compose",
+												},
+											},
+										},
+									},
+								},
+								HBox{widgetBase: widgetBase{expand: true}},
+							},
+						},
+						VBox{widgetBase: widgetBase{name: "outboxVbox"}},
+
+						EventBox{
+							widgetBase: widgetBase{background: colorHeaderBackground},
+							child: Label{
+								widgetBase: widgetBase{
+									foreground: colorHeaderForegroundSmall,
+									padding:    10,
+									font:       fontListHeading,
+								},
+								xAlign: 0.5,
+								text:   "Drafts",
+							},
+						},
+						EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+						VBox{widgetBase: widgetBase{name: "draftsVbox"}},
+
+						EventBox{
+							widgetBase: widgetBase{background: colorHeaderBackground},
+							child: Label{
+								widgetBase: widgetBase{
+									foreground: colorHeaderForegroundSmall,
+									padding:    10,
+									font:       fontListHeading,
+								},
+								xAlign: 0.5,
+								text:   "Contacts",
+							},
+						},
+						EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+						HBox{
+							widgetBase: widgetBase{padding: 6},
+							children: []Widget{
+								HBox{widgetBase: widgetBase{expand: true}},
+								HBox{
+									widgetBase: widgetBase{padding: 8},
+									children: []Widget{
+										VBox{
+											widgetBase: widgetBase{padding: 8},
+											children: []Widget{
+												Button{
+													widgetBase: widgetBase{width: 100, name: "newcontact"},
+													text:       "Add",
+												},
+											},
+										},
+									},
+								},
+								HBox{widgetBase: widgetBase{expand: true}},
+							},
+						},
+						VBox{widgetBase: widgetBase{name: "contactsVbox"}},
+
+						EventBox{
+							widgetBase: widgetBase{background: colorHeaderBackground},
+							child: Label{
+								widgetBase: widgetBase{
+									foreground: colorHeaderForegroundSmall,
+									padding:    10,
+									font:       fontListHeading,
+								},
+								xAlign: 0.5,
+								text:   "Client",
+							},
+						},
+						EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+						VBox{
+							widgetBase: widgetBase{name: "clientVbox"},
+						},
+					},
+				},
+			},
+		},
+		right: Scrolled{
+			horizontal: true,
+			viewport:   true,
+			child:      rightPlaceholderUI,
+		},
+	}
+
+	c.gui.Actions() <- Reset{ui}
+	c.gui.Signal()
+
+	c.contactsUI = &listUI{
+		gui:      c.gui,
+		vboxName: "contactsVbox",
+	}
+
+	for _, contact := range c.client.contactsSorted() {
+		c.contactsUI.Add(contact.id, contact.name, contact.subline(), contact.indicator())
+	}
+
+	c.inboxUI = &listUI{
+		gui:      c.gui,
+		vboxName: "inboxVbox",
+	}
+
+	for _, msg := range c.inbox {
+		var subline string
+		i := indicatorNone
+
+		if msg.message == nil {
+			subline = "pending"
+		} else {
+			if len(msg.message.Body) == 0 {
+				continue
+			}
+			if !msg.read {
+				i = indicatorBlue
+			}
+			subline = time.Unix(*msg.message.Time, 0).Format(shortTimeFormat)
+		}
+		if msg.from != 0 {
+			if i == indicatorNone && !msg.acked {
+				i = indicatorYellow
+			}
+		}
+		c.inboxUI.Add(msg.id, c.ContactName(msg.from), subline, i)
+		c.updateInboxBackgroundColor(msg)
+	}
+	c.updateWindowTitle()
+
+	c.outboxUI = &listUI{
+		gui:      c.gui,
+		vboxName: "outboxVbox",
+	}
+
+	for _, msg := range c.outbox {
+		if msg.revocation {
+			c.outboxUI.Add(msg.id, "Revocation", msg.created.Format(shortTimeFormat), msg.indicator(nil))
+			c.outboxUI.SetInsensitive(msg.id)
+			continue
+		}
+		if len(msg.message.Body) > 0 {
+			subline := msg.created.Format(shortTimeFormat)
+			c.outboxUI.Add(msg.id, c.ContactName(msg.to), subline, msg.indicator(c.contacts[msg.to]))
+		}
+	}
+
+	c.draftsUI = &listUI{
+		gui:      c.gui,
+		vboxName: "draftsVbox",
+	}
+
+	for _, draft := range c.drafts {
+		to := "Unknown"
+		if draft.to != 0 {
+			to = c.ContactName(draft.to)
+		}
+		subline := draft.created.Format(shortTimeFormat)
+		c.draftsUI.Add(draft.id, to, subline, indicatorNone)
+	}
+
+	c.clientUI = &listUI{
+		gui:      c.gui,
+		vboxName: "clientVbox",
+	}
+	const (
+		clientUIIdentity = iota + 1
+		clientUIActivity
+	)
+	c.clientUI.Add(clientUIIdentity, "Identity", "", indicatorNone)
+	c.clientUI.Add(clientUIActivity, "Activity Log", "", indicatorNone)
+
+	c.gui.Actions() <- UIState{uiStateMain}
+	c.gui.Signal()
+
+	var nextEvent interface{}
+	for {
+		event := nextEvent
+		nextEvent = nil
+		if event == nil {
+			event, _ = c.nextEvent(0)
+		}
+		if event == nil {
+			continue
+		}
+
+		c.DeselectAll()
+		if id, ok := c.inboxUI.Event(event); ok {
+			c.inboxUI.Select(id)
+			nextEvent = c.showInbox(id)
+			continue
+		}
+		if id, ok := c.outboxUI.Event(event); ok {
+			c.outboxUI.Select(id)
+			nextEvent = c.showOutbox(id)
+			continue
+		}
+		if id, ok := c.contactsUI.Event(event); ok {
+			c.contactsUI.Select(id)
+			nextEvent = c.showContact(id)
+			continue
+		}
+		if id, ok := c.clientUI.Event(event); ok {
+			c.clientUI.Select(id)
+			switch id {
+			case clientUIIdentity:
+				nextEvent = c.identityUI()
+			case clientUIActivity:
+				nextEvent = c.logUI()
+			default:
+				panic("bad clientUI event")
+			}
+			continue
+		}
+		if id, ok := c.draftsUI.Event(event); ok {
+			c.draftsUI.Select(id)
+			nextEvent = c.composeUI(c.drafts[id], nil)
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+		switch click.name {
+		case "newcontact":
+			nextEvent = c.newContactUI(nil)
+		case "compose":
+			nextEvent = c.composeUI(nil, nil)
+		}
+	}
+}
+
+// updateInboxBackgroundColor updates the background color of an inbox message
+// in the listUI. For example, if a message is marked as "retain" then the
+// background color may go from a warning indication to a normal color.
+func (c *guiClient) updateInboxBackgroundColor(msg *InboxMessage) {
+	now := c.Now()
+
+	if !msg.retained {
+		if now.Sub(msg.receivedTime) > messageLifetime {
+			// The message will be deleted imminently.
+			c.inboxUI.SetBackground(msg.id, colorImminently)
+			return
+		}
+		if now.Sub(msg.receivedTime) > messagePreIndicationLifetime {
+			// The message will be deleted soon.
+			c.inboxUI.SetBackground(msg.id, colorDeleteSoon)
+			return
+		}
+	}
+
+	c.inboxUI.SetBackground(msg.id, colorGray)
+}
+
+func (c *guiClient) errorUI(errorText string, fatal bool) {
+	bgColor := uint32(colorDefault)
+	if fatal {
+		bgColor = colorError
+	}
+
+	ui := EventBox{
+		widgetBase: widgetBase{background: bgColor, expand: true, fill: true},
+		child: Label{
+			widgetBase: widgetBase{
+				foreground: colorBlack,
+				font:       "Ariel Bold 12",
+			},
+			text:   errorText,
+			xAlign: 0.5,
+			yAlign: 0.5,
+		},
+	}
+	c.log.Printf("Fatal error: %s", errorText)
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Actions() <- UIState{uiStateError}
+	c.gui.Signal()
+	if !c.testing {
+		select {
+		case _, ok := <-c.gui.Events():
+			if !ok {
+				// User asked to close the window.
+				close(c.gui.Actions())
+				select {}
+			}
+		}
+	}
+}
+
+func (c *guiClient) keyPromptUI(stateFile *disk.StateFile) error {
+	ui := VBox{
+		widgetBase: widgetBase{padding: 40, expand: true, fill: true, name: "vbox"},
+		children: []Widget{
+			Label{
+				widgetBase: widgetBase{font: "DejaVu Sans 30"},
+				text:       "Passphrase",
+			},
+			Label{
+				widgetBase: widgetBase{
+					padding: 20,
+					font:    "DejaVu Sans 14",
+				},
+				text: msgKeyPrompt,
+				wrap: 600,
+			},
+			HBox{
+				spacing: 5,
+				children: []Widget{
+					Label{
+						text:   "Passphrase:",
+						yAlign: 0.5,
+					},
+					Entry{
+						widgetBase: widgetBase{name: "pw"},
+						width:      60,
+						password:   true,
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{padding: 40},
+				children: []Widget{
+					Button{
+						widgetBase: widgetBase{name: "next"},
+						text:       "Next",
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{padding: 5},
+				children: []Widget{
+					Label{
+						widgetBase: widgetBase{name: "status"},
+					},
+				},
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Actions() <- SetFocus{name: "pw"}
+	c.gui.Actions() <- UIState{uiStatePassphrase}
+	c.gui.Signal()
+
+	for {
+		event, ok := <-c.gui.Events()
+		if !ok {
+			c.ShutdownAndSuspend()
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+		if click.name != "next" && click.name != "pw" {
+			continue
+		}
+
+		pw, ok := click.entries["pw"]
+		if !ok {
+			panic("missing pw")
+		}
+
+		c.gui.Actions() <- Sensitive{name: "next", sensitive: false}
+		c.gui.Actions() <- Sensitive{name: "pw", sensitive: false}
+		c.gui.Signal()
+
+		if err := c.loadState(stateFile, pw); err != disk.BadPasswordError {
+			return err
+		}
+
+		c.gui.Actions() <- SetText{name: "status", text: msgIncorrectPassword}
+		c.gui.Actions() <- SetEntry{name: "pw", text: ""}
+		c.gui.Actions() <- Sensitive{name: "pw", sensitive: true}
+		c.gui.Actions() <- SetFocus{name: "pw"}
+		c.gui.Actions() <- Sensitive{name: "next", sensitive: true}
+		c.gui.Signal()
+	}
+
+	return nil
+}
+
+func (c *guiClient) createPassphraseUI() (string, error) {
+	ui := Grid{
+		widgetBase: widgetBase{margin: 20},
+		rowSpacing: 5,
+		colSpacing: 5,
+		rows: [][]GridE{
+			{
+				{2, 1, Label{
+					widgetBase: widgetBase{font: "DejaVu Sans 30"},
+					text:       "Set Passphrase",
+				}},
+			},
+			{
+				{2, 1, Label{
+					widgetBase: widgetBase{
+						padding: 20,
+						font:    "DejaVu Sans 14",
+					},
+					text: msgCreatePassphrase,
+					wrap: 600,
+				}},
+			},
+			{
+				{1, 1, Label{
+					text:   "Passphrase:",
+					yAlign: 0.5,
+				}},
+				{1, 1, Entry{
+					widgetBase: widgetBase{name: "pw", hAlign: AlignStart, hExpand: true},
+					width:      60,
+					password:   true,
+				}},
+			},
+			{
+				{2, 1, Button{
+					widgetBase: widgetBase{name: "next", hAlign: AlignStart},
+					text:       "Next",
+				}},
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Actions() <- SetFocus{name: "pw"}
+	c.gui.Actions() <- UIState{uiStateCreatePassphrase}
+	c.gui.Signal()
+
+	for {
+		event, ok := <-c.gui.Events()
+		if !ok {
+			c.ShutdownAndSuspend()
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+		if click.name != "next" && click.name != "pw" {
+			continue
+		}
+
+		pw, ok := click.entries["pw"]
+		if !ok {
+			panic("missing pw")
+		}
+
+		return pw, nil
+	}
+
+	panic("unreachable")
+}
+
+func (c *guiClient) createAccountUI(stateFile *disk.StateFile, pw string) (didImport bool, err error) {
+	defaultServer := msgDefaultServer
+	if c.dev {
+		defaultServer = msgDefaultDevServer
+	}
+
+	serverLabels := []string{"Default"}
+	for _, server := range knownServers {
+		serverLabels = append(serverLabels, server.description)
+	}
+	serverLabels = append(serverLabels, "Custom")
+
+	ui := Grid{
+		widgetBase: widgetBase{margin: 20},
+		rowSpacing: 5,
+		colSpacing: 5,
+		rows: [][]GridE{
+			{
+				{2, 1, Label{
+					widgetBase: widgetBase{font: "DejaVu Sans 30"},
+					text:       "Create Account",
+				}},
+			},
+			{
+				{2, 1, Label{
+					widgetBase: widgetBase{
+						padding: 20,
+						font:    "DejaVu Sans 14",
+					},
+					text: msgCreateAccount + " If you want to use the default server, just click 'Create'.",
+					wrap: 600,
+				}},
+			},
+			{
+				{1, 1, Combo{
+					widgetBase:  widgetBase{name: "servercombo"},
+					labels:      serverLabels,
+					preSelected: "Default",
+				}},
+				{1, 1, Entry{
+					widgetBase: widgetBase{name: "server", hAlign: AlignStart, hExpand: true, margin: 10, insensitive: true},
+					width:      60,
+					text:       defaultServer,
+				}},
+			},
+			{
+				{2, 1, Button{
+					widgetBase: widgetBase{name: "create", hAlign: AlignStart},
+					text:       "Create",
+				}},
+			},
+			{
+				{2, 1, VBox{
+					widgetBase: widgetBase{name: "vbox"},
+				}},
+			},
+			{
+				{2, 1, Grid{
+					widgetBase: widgetBase{vAlign: AlignEnd, vExpand: true},
+					rowSpacing: 5,
+					colSpacing: 5,
+					rows: [][]GridE{
+						{
+							{2, 1, Label{
+								widgetBase: widgetBase{font: "bold"},
+								text:       "Import entombed state file",
+							}},
+						},
+						{
+							{2, 1, Label{
+								text: "Rather than creating a new account, it's also possible to import an 'entombed' state file. This is used when moving Pond from one computer to another.",
+								wrap: 600,
+							}},
+						},
+						{
+							{1, 1, Label{
+								text:   "Key:",
+								yAlign: 0.5,
+							}},
+							{1, 1, Entry{
+								widgetBase: widgetBase{name: "tombkey", hAlign: AlignStart, hExpand: true},
+								width:      66,
+							}},
+						},
+						{
+							{1, 1, Button{
+								widgetBase: widgetBase{name: "tombfile", hAlign: AlignStart},
+								text:       "Select File",
+							}},
+							{1, 1, Button{
+								widgetBase: widgetBase{name: "import", hAlign: AlignStart, insensitive: true},
+								text:       "Import",
+							}},
+						},
+						{
+							{2, 1, Label{
+								widgetBase: widgetBase{name: "tomberror", foreground: colorRed},
+								wrap:       600,
+							}},
+						},
+					},
+				}},
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetBoxContents{name: "body", child: ui}
+	c.gui.Actions() <- SetFocus{name: "create"}
+	c.gui.Actions() <- UIState{uiStateCreateAccount}
+	c.gui.Signal()
+
+	var spinnerCreated bool
+	var tombPath string
+	for {
+		event, ok := <-c.gui.Events()
+		if !ok {
+			c.ShutdownAndSuspend()
+		}
+
+		if open, ok := event.(OpenResult); ok && open.ok {
+			tombPath = open.path
+			c.gui.Actions() <- Sensitive{name: "import", sensitive: true}
+			c.gui.Signal()
+			continue
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		switch click.name {
+		case "tombfile":
+			c.gui.Actions() <- FileOpen{
+				save:     false,
+				title:    "Select path of entombed file",
+				filename: "statefile.tomb",
+				arg:      nil,
+			}
+			c.gui.Signal()
+			continue
+		case "import":
+			if err := c.importTombFile(stateFile, click.entries["tombkey"], tombPath); err == nil {
+				err = c.loadState(stateFile, pw)
+			}
+			if err != nil {
+				c.gui.Actions() <- SetText{name: "tomberror", text: err.Error()}
+				c.gui.Actions() <- UIError{err}
+				c.gui.Signal()
+				continue
+			}
+
+			c.lastErasureStorageTime = time.Now()
+			return true, nil
+		case "servercombo":
+			selected := click.combos["servercombo"]
+			server := ""
+
+			switch selected {
+			case "Default":
+				server = defaultServer
+			case "Custom":
+				server = ""
+			default:
+				for _, known := range knownServers {
+					if known.description == selected {
+						server = known.uri
+					}
+				}
+			}
+
+			c.gui.Actions() <- Sensitive{name: "server", sensitive: len(server) == 0}
+			c.gui.Actions() <- SetEntry{name: "server", text: server}
+			c.gui.Signal()
+			continue
+		case "create":
+			break
+		default:
+			continue
+		}
+
+		c.server = click.entries["server"]
+
+		c.gui.Actions() <- Sensitive{name: "server", sensitive: false}
+		c.gui.Actions() <- Sensitive{name: "create", sensitive: false}
+
+		const initialMessage = "Checking..."
+
+		if !spinnerCreated {
+			c.gui.Actions() <- SetBoxContents{
+				name: "vbox",
+				child: HBox{
+					widgetBase: widgetBase{name: "statusbox"},
+					spacing:    10,
+					children: []Widget{
+						Spinner{
+							widgetBase: widgetBase{name: "spinner"},
+						},
+						Label{
+							widgetBase: widgetBase{name: "status"},
+							text:       initialMessage,
+						},
+					},
+				},
+			}
+			spinnerCreated = true
+		} else {
+			c.gui.Actions() <- StartSpinner{name: "spinner"}
+			c.gui.Actions() <- SetText{name: "status", text: initialMessage}
+		}
+		c.gui.Signal()
+
+		updateMsg := func(msg string) {
+			c.gui.Actions() <- SetText{name: "status", text: msg}
+			c.gui.Signal()
+		}
+
+		if err := c.doCreateAccount(updateMsg); err != nil {
+			c.gui.Actions() <- StopSpinner{name: "spinner"}
+			c.gui.Actions() <- UIError{err}
+			c.gui.Actions() <- SetText{name: "status", text: err.Error()}
+			c.gui.Actions() <- Sensitive{name: "server", sensitive: true}
+			c.gui.Actions() <- Sensitive{name: "create", sensitive: true}
+			c.gui.Signal()
+			continue
+		}
+
+		break
+	}
+
+	return false, nil
+}
+
+func (c *guiClient) ShutdownAndSuspend() error {
+	if c.writerChan != nil {
+		c.save()
+	}
+	c.Shutdown()
+	close(c.gui.Actions())
+	select {}
+	return nil
+}
+
+func (c *guiClient) Shutdown() {
+	for _, contact := range c.contacts {
+		if contact.pandaShutdownChan != nil {
+			close(contact.pandaShutdownChan)
+		}
+	}
+	if c.testing {
+		c.pandaWaitGroup.Wait()
+
+	ProcessPANDAUpdates:
+		for {
+			select {
+			case update := <-c.pandaChan:
+				c.processPANDAUpdate(update)
+			default:
+				break ProcessPANDAUpdates
+			}
+		}
+	}
+	if c.writerChan != nil {
+		close(c.writerChan)
+		<-c.writerDone
+	}
+	if c.fetchNowChan != nil {
+		close(c.fetchNowChan)
+	}
+	if c.stateLock != nil {
+		c.stateLock.Close()
+	}
+}
+
+type InboxDetachmentUI struct {
+	msg *InboxMessage
+	gui GUI
+}
+
+func (i InboxDetachmentUI) IsValid(id uint64) bool {
+	_, ok := i.msg.decryptions[id]
+	return ok
+}
+
+func (i InboxDetachmentUI) ProgressName(id uint64) string {
+	return fmt.Sprintf("detachment-progress-%d", i.msg.decryptions[id].index)
+}
+
+func (i InboxDetachmentUI) VBoxName(id uint64) string {
+	return fmt.Sprintf("detachment-vbox-%d", i.msg.decryptions[id].index)
+}
+
+func (i InboxDetachmentUI) OnFinal(id uint64) {
+	i.gui.Actions() <- Sensitive{
+		name:      fmt.Sprintf("detachment-decrypt-%d", i.msg.decryptions[id].index),
+		sensitive: true,
+	}
+	i.gui.Actions() <- Sensitive{
+		name:      fmt.Sprintf("detachment-download-%d", i.msg.decryptions[id].index),
+		sensitive: true,
+	}
+	delete(i.msg.decryptions, id)
+}
+
+func (i InboxDetachmentUI) OnSuccess(id uint64, detachment *pond.Message_Detachment) {
+}
+
+func (c *guiClient) showInbox(id uint64) interface{} {
+	var msg *InboxMessage
+	for _, candidate := range c.inbox {
+		if candidate.id == id {
+			msg = candidate
+			break
+		}
+	}
+	if msg == nil {
+		panic("failed to find message in inbox")
+	}
+	isServerAnnounce := msg.from == 0
+	isPending := msg.message == nil
+	if msg.message != nil && !msg.read {
+		msg.read = true
+		i := indicatorYellow
+		if isServerAnnounce {
+			i = indicatorNone
+		}
+		c.inboxUI.SetIndicator(id, i)
+		c.updateWindowTitle()
+		c.save()
+	}
+
+	sentTimeText, eraseTimeText, msgText := msg.Strings()
+
+	left := Grid{
+		widgetBase: widgetBase{margin: 6, name: "lhs"},
+		rowSpacing: 3,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "FROM",
+				}},
+				// We set hExpand true here so that the
+				// attachments/detachments UI doesn't cause the
+				// first column to expand.
+				{1, 1, Label{widgetBase: widgetBase{hExpand: true}, text: c.ContactName(msg.from)}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "SENT",
+				}},
+				{1, 1, Label{text: sentTimeText}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "ERASE",
+				}},
+				{1, 1, Label{text: eraseTimeText}},
+			},
+		},
+	}
+	lhsNextRow := len(left.rows)
+
+	right := Grid{
+		widgetBase: widgetBase{margin: 6},
+		rowSpacing: 3,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:        "reply",
+						insensitive: isServerAnnounce || isPending,
+					},
+					text: "Reply",
+				}},
+			},
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:        "ack",
+						insensitive: isServerAnnounce || isPending || msg.acked,
+					},
+					text: "Ack",
+				}},
+			},
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name: "delete",
+					},
+					text: "Delete Now",
+				}},
+			},
+			{
+				{1, 1, CheckButton{
+					widgetBase: widgetBase{
+						name: "retain",
+					},
+					checked: msg.retained,
+					text:    "Retain",
+				}},
+			},
+		},
+	}
+
+	main := TextView{
+		widgetBase: widgetBase{hExpand: true, vExpand: true, name: "body"},
+		editable:   false,
+		text:       msgText,
+		wrap:       true,
+	}
+
+	c.gui.Actions() <- SetChild{name: "right", child: rightPane("RECEIVED MESSAGE", left, right, main)}
+
+	// The UI names widgets with strings so these prefixes are used to
+	// generate names for the dynamic parts of the UI.
+	const (
+		detachmentDecryptPrefix  = "detachment-decrypt-"
+		detachmentVBoxPrefix     = "detachment-decrypt-"
+		detachmentProgressPrefix = "detachment-progress-"
+		detachmentDownloadPrefix = "detachment-download-"
+		detachmentSavePrefix     = "detachment-save-"
+		attachmentPrefix         = "attachment-"
+	)
+
+	widgetForDetachmentProcess := func(index int) Widget {
+		return VBox{
+			widgetBase: widgetBase{name: fmt.Sprintf("detachment-vbox-%d", index)},
+			children: []Widget{
+				Progress{
+					widgetBase: widgetBase{
+						name: fmt.Sprintf("%s%d", detachmentProgressPrefix, index),
+					},
+				},
+			},
+		}
+	}
+
+	if msg.message != nil && len(msg.message.Files) != 0 {
+		grid := Grid{widgetBase: widgetBase{marginLeft: 25}, rowSpacing: 3}
+
+		for i, attachment := range msg.message.Files {
+			filename := maybeTruncate(*attachment.Filename)
+			grid.rows = append(grid.rows, []GridE{
+				{1, 1, Label{
+					widgetBase: widgetBase{vAlign: AlignCenter, hAlign: AlignStart},
+					text:       filename,
+				}},
+				{1, 1, Button{
+					widgetBase: widgetBase{name: fmt.Sprintf("%s%d", attachmentPrefix, i)},
+					text:       "Save",
+				}},
+			})
+		}
+
+		c.gui.Actions() <- InsertRow{name: "lhs", pos: lhsNextRow, row: []GridE{
+			{1, 1, Label{
+				widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+				text:       "ATTACHMENTS",
+			}},
+		}}
+		lhsNextRow++
+		c.gui.Actions() <- InsertRow{name: "lhs", pos: lhsNextRow, row: []GridE{{2, 1, grid}}}
+		lhsNextRow++
+	}
+
+	if msg.message != nil && len(msg.message.DetachedFiles) != 0 {
+		grid := Grid{widgetBase: widgetBase{name: "detachment-grid", marginLeft: 25}, rowSpacing: 3}
+
+		for i, detachment := range msg.message.DetachedFiles {
+			filename := maybeTruncate(*detachment.Filename)
+			var pending *pendingDecryption
+			for _, candidate := range msg.decryptions {
+				if candidate.index == i {
+					pending = candidate
+					break
+				}
+			}
+			row := []GridE{
+				{1, 1, Label{
+					widgetBase: widgetBase{vAlign: AlignCenter, hAlign: AlignStart},
+					text:       filename,
+				}},
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:        fmt.Sprintf("%s%d", detachmentDecryptPrefix, i),
+						padding:     3,
+						insensitive: pending != nil,
+					},
+					text: "Decrypt local file with key",
+				}},
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:    fmt.Sprintf("%s%d", detachmentSavePrefix, i),
+						padding: 3,
+					},
+					text: "Save key to disk",
+				}},
+			}
+			if detachment.Url != nil && len(*detachment.Url) > 0 {
+				row = append(row, GridE{1, 1,
+					Button{
+						widgetBase: widgetBase{
+							name:        fmt.Sprintf("%s%d", detachmentDownloadPrefix, i),
+							padding:     3,
+							insensitive: pending != nil,
+						},
+						text: "Download",
+					},
+				})
+			}
+			var progressRow []GridE
+			if pending != nil {
+				progressRow = append(progressRow, GridE{4, 1, widgetForDetachmentProcess(i)})
+			}
+			grid.rows = append(grid.rows, row)
+			grid.rows = append(grid.rows, progressRow)
+		}
+
+		c.gui.Actions() <- InsertRow{name: "lhs", pos: lhsNextRow, row: []GridE{
+			{1, 1, Label{
+				widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+				text:       "KEYS",
+			}},
+		}}
+		lhsNextRow++
+		c.gui.Actions() <- InsertRow{name: "lhs", pos: lhsNextRow, row: []GridE{{2, 1, grid}}}
+		lhsNextRow++
+		c.gui.Signal()
+	}
+
+	c.gui.Actions() <- UIState{uiStateInbox}
+	c.gui.Signal()
+
+	detachmentUI := InboxDetachmentUI{msg, c.gui}
+
+	if msg.decryptions == nil {
+		msg.decryptions = make(map[uint64]*pendingDecryption)
+	}
+
+NextEvent:
+	for {
+		event, wanted := c.nextEvent(msg.id)
+		if wanted {
+			return event
+		}
+
+		// These types are returned by the UI from a file dialog and
+		// serve to identify the actions that should be taken with the
+		// resulting filename.
+		type (
+			attachmentSaveIndex    int
+			detachmentSaveIndex    int
+			detachmentDecryptIndex int
+			detachmentDecryptInput struct {
+				index  int
+				inPath string
+			}
+			detachmentDownloadIndex int
+		)
+
+		if open, ok := event.(OpenResult); ok && open.ok {
+			switch i := open.arg.(type) {
+			case attachmentSaveIndex:
+				// Save an attachment to disk.
+				ioutil.WriteFile(open.path, msg.message.Files[i].Contents, 0600)
+			case detachmentSaveIndex:
+				// Save a detachment key to disk.
+				bytes, err := proto.Marshal(msg.message.DetachedFiles[i])
+				if err != nil {
+					panic(err)
+				}
+				ioutil.WriteFile(open.path, bytes, 0600)
+			case detachmentDecryptIndex:
+				// Decrypt a local file with a detachment key.
+				c.gui.Actions() <- FileOpen{
+					save:     true,
+					title:    "Save decrypted file",
+					filename: filepath.Base(open.path),
+					arg: detachmentDecryptInput{
+						index:  int(i),
+						inPath: open.path,
+					},
+				}
+				c.gui.Signal()
+			case detachmentDecryptInput:
+				// Decrypt a local file with a detachment key,
+				// after the second save dialog - which prompts
+				// for where to write the new key.
+				for _, decryption := range msg.decryptions {
+					if decryption.index == i.index {
+						continue NextEvent
+					}
+				}
+				c.gui.Actions() <- Sensitive{
+					name:      fmt.Sprintf("%s%d", detachmentDecryptPrefix, i.index),
+					sensitive: false,
+				}
+				c.gui.Actions() <- Sensitive{
+					name:      fmt.Sprintf("%s%d", detachmentDownloadPrefix, i.index),
+					sensitive: false,
+				}
+				c.gui.Actions() <- InsertRow{
+					name: "detachment-grid",
+					pos:  i.index*2 + 1,
+					row:  []GridE{{4, 1, widgetForDetachmentProcess(i.index)}},
+				}
+				id := c.randId()
+				msg.decryptions[id] = &pendingDecryption{
+					index:  i.index,
+					cancel: c.startDecryption(id, open.path, i.inPath, msg.message.DetachedFiles[i.index]),
+				}
+				c.gui.Signal()
+			case detachmentDownloadIndex:
+				// Download a detachment.
+				for _, decryption := range msg.decryptions {
+					if decryption.index == int(i) {
+						continue NextEvent
+					}
+				}
+				c.gui.Actions() <- Sensitive{
+					name:      fmt.Sprintf("%s%d", detachmentDecryptPrefix, i),
+					sensitive: false,
+				}
+				c.gui.Actions() <- Sensitive{
+					name:      fmt.Sprintf("%s%d", detachmentDownloadPrefix, i),
+					sensitive: false,
+				}
+				c.gui.Actions() <- InsertRow{
+					name: "detachment-grid",
+					pos:  int(i)*2 + 1,
+					row:  []GridE{{4, 1, widgetForDetachmentProcess(int(i))}},
+				}
+				id := c.randId()
+				msg.decryptions[id] = &pendingDecryption{
+					index:  int(i),
+					cancel: c.startDownload(id, open.path, msg.message.DetachedFiles[i]),
+				}
+				c.gui.Signal()
+			default:
+				panic("unimplemented OpenResult")
+			}
+			continue
+		}
+
+		if c.maybeProcessDetachmentMsg(event, detachmentUI) {
+			continue
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+		switch {
+		case strings.HasPrefix(click.name, attachmentPrefix):
+			i, _ := strconv.Atoi(click.name[len(attachmentPrefix):])
+			c.gui.Actions() <- FileOpen{
+				save:     true,
+				title:    "Save Attachment",
+				filename: msg.message.Files[i].GetFilename(),
+				arg:      attachmentSaveIndex(i),
+			}
+			c.gui.Signal()
+			continue
+		case strings.HasPrefix(click.name, detachmentSavePrefix):
+			i, _ := strconv.Atoi(click.name[len(detachmentSavePrefix):])
+			c.gui.Actions() <- FileOpen{
+				save:     true,
+				title:    "Save Key",
+				filename: msg.message.DetachedFiles[i].GetFilename() + ".key",
+				arg:      detachmentSaveIndex(i),
+			}
+			c.gui.Signal()
+			continue
+		case strings.HasPrefix(click.name, detachmentDecryptPrefix):
+			i, _ := strconv.Atoi(click.name[len(detachmentDecryptPrefix):])
+			c.gui.Actions() <- FileOpen{
+				title: "Select encrypted file",
+				arg:   detachmentDecryptIndex(i),
+			}
+			c.gui.Signal()
+			continue
+		case strings.HasPrefix(click.name, detachmentDownloadPrefix):
+			i, _ := strconv.Atoi(click.name[len(detachmentDownloadPrefix):])
+			c.gui.Actions() <- FileOpen{
+				save:     true,
+				title:    "Save to",
+				filename: msg.message.DetachedFiles[i].GetFilename(),
+				arg:      detachmentDownloadIndex(i),
+			}
+			c.gui.Signal()
+			continue
+		case click.name == "ack":
+			c.gui.Actions() <- Sensitive{name: "ack", sensitive: false}
+			c.gui.Signal()
+			msg.acked = true
+			c.sendAck(msg)
+			c.inboxUI.SetIndicator(msg.id, indicatorNone)
+			c.gui.Actions() <- UIState{uiStateInbox}
+			c.gui.Signal()
+		case click.name == "reply":
+			c.inboxUI.Deselect()
+			return c.composeUI(nil, msg)
+		case click.name == "delete":
+			c.inboxUI.Remove(msg.id)
+			c.deleteInboxMsg(msg.id)
+			c.gui.Actions() <- SetChild{name: "right", child: rightPlaceholderUI}
+			c.gui.Actions() <- UIState{uiStateMain}
+			c.gui.Signal()
+			c.save()
+			return nil
+		case click.name == "retain":
+			msg.retained = click.checks["retain"]
+			if !msg.retained {
+				msg.exposureTime = c.Now()
+			}
+			c.updateInboxBackgroundColor(msg)
+			c.save()
+			c.gui.Actions() <- UIState{uiStateInbox}
+			c.gui.Signal()
+		}
+	}
+
+	return nil
+}
+
+func (c *guiClient) showOutbox(id uint64) interface{} {
+	var msg *queuedMessage
+	for _, candidate := range c.outbox {
+		if candidate.id == id {
+			msg = candidate
+			break
+		}
+	}
+	if msg == nil {
+		panic("failed to find message in outbox")
+	}
+
+	contact := c.contacts[msg.to]
+	var sentTime string
+	if contact.revokedUs {
+		sentTime = "(never - contact has revoked us)"
+	} else {
+		sentTime = formatTime(msg.sent)
+	}
+	eraseTime := formatTime(msg.created.Add(messageLifetime))
+
+	canAbort := !contact.revokedUs && msg.sent.IsZero()
+	if canAbort {
+		c.queueMutex.Lock()
+		if msg.sending {
+			canAbort = false
+		}
+		c.queueMutex.Unlock()
+	}
+
+	left := Grid{
+		widgetBase: widgetBase{margin: 6},
+		rowSpacing: 3,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "TO",
+				}},
+				{1, 1, Label{text: contact.name}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "CREATED",
+				}},
+				{1, 1, Label{
+					text: time.Unix(*msg.message.Time, 0).Format(time.RFC1123),
+				}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "SENT",
+				}},
+				{1, 1, Label{
+					widgetBase: widgetBase{name: "sent"},
+					text:       sentTime,
+				}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "ACKNOWLEDGED",
+				}},
+				{1, 1, Label{
+					widgetBase: widgetBase{name: "acked"},
+					text:       formatTime(msg.acked),
+				}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "ERASE",
+				}},
+				{1, 1, Label{
+					text: eraseTime,
+				}},
+			},
+		},
+	}
+
+	right := Grid{
+		widgetBase: widgetBase{margin: 6},
+		rowSpacing: 3,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:        "abort",
+						insensitive: !canAbort,
+					},
+					text: "Abort Send",
+				}},
+			},
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name:        "delete",
+						insensitive: canAbort,
+					},
+					text: "Delete",
+				}},
+			},
+		},
+	}
+
+	main := TextView{
+		widgetBase: widgetBase{vExpand: true, hExpand: true, name: "body"},
+		editable:   false,
+		text:       string(msg.message.Body),
+		wrap:       true,
+	}
+
+	c.gui.Actions() <- SetChild{name: "right", child: rightPane("SENT MESSAGE", left, right, main)}
+	c.gui.Actions() <- UIState{uiStateOutbox}
+	c.gui.Signal()
+
+	haveSentTime := !msg.sent.IsZero()
+	haveAckTime := !msg.acked.IsZero()
+
+	for {
+		event, wanted := c.nextEvent(msg.id)
+		if wanted {
+			return event
+		}
+
+		if click, ok := event.(Click); ok && click.name == "abort" {
+			c.queueMutex.Lock()
+			indexOfMessage := c.indexOfQueuedMessage(msg)
+			if indexOfMessage == -1 || msg.sending {
+				// Sorry - too late. Can't abort now.
+				c.queueMutex.Unlock()
+
+				canAbort = false
+				c.gui.Actions() <- Sensitive{name: "abort", sensitive: canAbort}
+				c.gui.Actions() <- Sensitive{name: "delete", sensitive: !canAbort}
+				c.gui.Signal()
+				continue
+			}
+
+			c.removeQueuedMessage(indexOfMessage)
+			c.queueMutex.Unlock()
+
+			c.deleteOutboxMsg(msg.id)
+			c.outboxUI.Remove(msg.id)
+
+			draft := c.outboxToDraft(msg)
+			c.draftsUI.Add(draft.id, c.ContactName(msg.to), draft.created.Format(shortTimeFormat), indicatorNone)
+			c.draftsUI.Select(draft.id)
+			c.drafts[draft.id] = draft
+			c.save()
+			return c.composeUI(draft, nil)
+		}
+
+		if click, ok := event.(Click); ok && click.name == "delete" {
+			c.deleteOutboxMsg(msg.id)
+			// Also find and delete any empty acks for this message.
+			for _, inboxMsg := range c.inbox {
+				if inboxMsg.message != nil && len(inboxMsg.message.Body) == 0 && inboxMsg.message.InReplyTo != nil && *inboxMsg.message.InReplyTo == msg.id {
+					c.deleteInboxMsg(inboxMsg.id)
+					break
+				}
+			}
+			c.save()
+			if msg.revocation || len(msg.message.Body) > 0 {
+				c.outboxUI.Remove(msg.id)
+			}
+			c.gui.Actions() <- SetChild{name: "right", child: rightPlaceholderUI}
+			c.gui.Actions() <- UIState{uiStateMain}
+			c.gui.Signal()
+			return nil
+		}
+
+		if !haveSentTime && !msg.sent.IsZero() {
+			c.gui.Actions() <- SetText{name: "sent", text: formatTime(msg.sent)}
+			c.gui.Signal()
+		}
+		if !haveAckTime && !msg.acked.IsZero() {
+			c.gui.Actions() <- SetText{name: "acked", text: formatTime(msg.acked)}
+			c.gui.Signal()
+		}
+
+		canAbortChanged := false
+		c.queueMutex.Lock()
+		if c := !contact.revokedUs && msg.sent.IsZero() && !msg.sending; c != canAbort {
+			canAbort = c
+			canAbortChanged = true
+		}
+		c.queueMutex.Unlock()
+
+		if canAbortChanged {
+			c.gui.Actions() <- Sensitive{name: "abort", sensitive: canAbort}
+			c.gui.Actions() <- Sensitive{name: "delete", sensitive: !canAbort}
+			c.gui.Signal()
+		}
+	}
+
+	return nil
+}
+
+func rightPane(title string, left, right, main Widget) Grid {
+	var mid []GridE
+	if left != nil {
+		mid = append(mid, GridE{1, 1, left})
+	}
+	mid = append(mid, GridE{1, 1, Label{widgetBase: widgetBase{hExpand: true}}})
+	if right != nil {
+		mid = append(mid, GridE{1, 1, right})
+	}
+
+	grid := Grid{
+		rows: [][]GridE{
+			{
+				{3, 1, EventBox{
+					widgetBase: widgetBase{background: colorHeaderBackground, hExpand: true},
+					child: Label{
+						widgetBase: widgetBase{font: fontMainTitle, margin: 10, foreground: colorHeaderForeground, hExpand: true},
+						text:       title,
+					},
+				}},
+			},
+			{
+				{3, 1, EventBox{widgetBase: widgetBase{height: 1, background: colorSep}}},
+			},
+			mid,
+			{},
+		},
+	}
+
+	if main != nil {
+		grid.rows = append(grid.rows, []GridE{{3, 1, main}})
+	}
+
+	return grid
+}
+
+type nvEntry struct {
+	name, value string
+}
+
+func nameValuesLHS(entries []nvEntry) Grid {
+	grid := Grid{
+		widgetBase: widgetBase{margin: 6, name: "lhs"},
+		rowSpacing: 3,
+		colSpacing: 3,
+	}
+	for _, ent := range entries {
+		var font string
+		vAlign := AlignCenter
+		if strings.HasPrefix(ent.value, "-----") {
+			// PEM block
+			font = fontMainMono
+			vAlign = AlignStart
+		}
+
+		grid.rows = append(grid.rows, []GridE{
+			GridE{1, 1, Label{
+				widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: vAlign},
+				text:       ent.name,
+			}},
+			GridE{1, 1, Label{
+				widgetBase: widgetBase{font: font},
+				text:       ent.value,
+				selectable: true,
+			}},
+		})
+	}
+
+	return grid
+}
+
+func (c *guiClient) identityUI() interface{} {
+	entries := nameValuesLHS([]nvEntry{
+		{"SERVER", c.server},
+		{"PUBLIC IDENTITY", fmt.Sprintf("%x", c.identityPublic[:])},
+		{"PUBLIC KEY", fmt.Sprintf("%x", c.pub[:])},
+		{"STATE FILE", c.stateFilename},
+		{"GROUP GENERATION", fmt.Sprintf("%d", c.generation)},
+	})
+
+	left := Grid{
+		widgetBase: widgetBase{margin: 6},
+		rowSpacing: 10,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, entries},
+			},
+			{
+				{1, 1, Grid{
+					widgetBase: widgetBase{margin: 6},
+					rowSpacing: 3,
+					colSpacing: 3,
+					rows: [][]GridE{
+						{
+							{3, 1, Label{
+								widgetBase: widgetBase{
+									font: "bold",
+								},
+								text: "Entombing",
+							}},
+						},
+						{
+							{3, 1, Label{
+								text: "Entombing your statefile causes it to be converted into an encrypted file that can be moved to a different computer. The file is encrypted with an ephemeral key that is printed at the end of the entombing process and must be written down. The original statefile is erased. Once the entombed file has been imported elsewhere, the paper with the ephemeral key must be destroyed.",
+								wrap: 600,
+							}},
+						},
+						{
+							{1, 1, Button{
+								widgetBase: widgetBase{name: "tombfile"},
+								text:       "Select file",
+							}},
+							{1, 1, Button{
+								widgetBase: widgetBase{
+									name:        "entomb",
+									insensitive: true,
+								},
+								text: "Entomb",
+							}},
+							{1, 1, Label{
+								widgetBase: widgetBase{hExpand: true},
+							}},
+						},
+						{
+							{3, 1, Label{
+								widgetBase: widgetBase{
+									name:       "tomberror",
+									foreground: colorRed,
+								},
+							}},
+						},
+					},
+				}},
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetChild{name: "right", child: rightPane("IDENTITY", left, nil, nil)}
+	c.gui.Actions() <- UIState{uiStateShowIdentity}
+	c.gui.Signal()
+
+	var tombPath string
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		if open, ok := event.(OpenResult); ok && open.ok {
+			tombPath = open.path
+			c.gui.Actions() <- Sensitive{name: "entomb", sensitive: true}
+			c.gui.Signal()
+			continue
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		switch click.name {
+		case "tombfile":
+			c.gui.Actions() <- FileOpen{
+				save:     true,
+				title:    "Select path for entombed file",
+				filename: "statefile.tomb",
+				arg:      nil,
+			}
+			c.gui.Signal()
+		case "entomb":
+			f, err := os.OpenFile(tombPath, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0400)
+			if err != nil {
+				c.gui.Actions() <- SetText{
+					name: "tomberror",
+					text: err.Error(),
+				}
+				c.gui.Actions() <- UIError{err}
+				c.gui.Signal()
+				continue
+			}
+
+			c.gui.Actions() <- Reset{TextView{
+				widgetBase: widgetBase{name: "log"},
+				editable:   false,
+				wrap:       true,
+			}}
+			c.gui.Actions() <- UIState{uiStateEntomb}
+			c.gui.Signal()
+
+			var logText string
+			log := func(msg string, args ...interface{}) {
+				logText += fmt.Sprintf(msg, args...)
+				c.gui.Actions() <- SetTextView{
+					name: "log",
+					text: logText,
+				}
+				c.gui.Signal()
+			}
+
+			key, ok := c.entomb(tombPath, f, log)
+			if ok {
+				log("\nThe process has completed successfully. You must write down the ephemeral key now. You can close this window when done.\n")
+				c.gui.Actions() <- UIInfo{fmt.Sprintf("%x", key[:])}
+			} else {
+				log("\nThe process failed! Your statefile is still intact. Please close this window and restart when ready.")
+			}
+
+			c.gui.Actions() <- UIState{uiStateEntombComplete}
+			c.gui.Signal()
+
+			for {
+				if _, ok := <-c.gui.Events(); !ok {
+					break
+				}
+			}
+			close(c.gui.Actions())
+			select {}
+		}
+	}
+
+	panic("unreachable")
+}
+
+func allBytesZero(bs []byte) bool {
+	for _, b := range bs {
+		if b != 0 {
+			return false
+		}
+	}
+	return true
+}
+
+func (c *guiClient) showContact(id uint64) interface{} {
+	contact := c.contacts[id]
+	if contact.isPending && len(contact.pandaKeyExchange) == 0 && len(contact.pandaResult) == 0 {
+		return c.newContactUI(contact)
+	}
+	c.contactsUI.SetIndicator(id, indicatorNone)
+
+	entries := []nvEntry{
+		{"NAME", ""},
+		{"SERVER", contact.theirServer},
+		{"PUBLIC IDENTITY", fmt.Sprintf("%x", contact.theirIdentityPublic[:])},
+		{"PUBLIC KEY", fmt.Sprintf("%x", contact.theirPub[:])},
+	}
+	if !allBytesZero(contact.theirLastDHPublic[:]) {
+		entries = append(entries,
+			nvEntry{"LAST DH", fmt.Sprintf("%x", contact.theirLastDHPublic[:])},
+			nvEntry{"CURRENT DH", fmt.Sprintf("%x", contact.theirCurrentDHPublic[:])})
+	}
+	entries = append(entries,
+		nvEntry{"GROUP GENERATION", fmt.Sprintf("%d", contact.generation)},
+		nvEntry{"CLIENT VERSION", fmt.Sprintf("%d", contact.supportedVersion)})
+
+	var pandaMessage string
+
+	if len(contact.pandaResult) > 0 {
+		pandaMessage = contact.pandaResult
+	} else if len(contact.pandaKeyExchange) > 0 {
+		pandaMessage = "in progress"
+	}
+
+	if len(pandaMessage) > 0 {
+		entries = append(entries, nvEntry{"PANDA KEY EXCHANGE", pandaMessage})
+	} else if len(contact.kxsBytes) > 0 {
+		var out bytes.Buffer
+		pem.Encode(&out, &pem.Block{Bytes: contact.kxsBytes, Type: keyExchangePEM})
+		entries = append(entries, nvEntry{"KEY EXCHANGE", string(out.Bytes())})
+	}
+
+	if len(contact.events) > 0 {
+		eventsText := ""
+		for i, event := range contact.events {
+			if i > 0 {
+				eventsText += "\n"
+			}
+			eventsText += event.t.Format(logTimeFormat)
+			eventsText += ": "
+			eventsText += event.msg
+		}
+		entries = append(entries, nvEntry{"EVENTS", eventsText})
+	}
+
+	right := Grid{
+		widgetBase: widgetBase{margin: 6},
+		rowSpacing: 3,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Button{
+					widgetBase: widgetBase{
+						name: "delete",
+					},
+					text: "Delete",
+				}},
+			},
+		},
+	}
+
+	left := nameValuesLHS(entries)
+
+	// Switch the label next to "name" with an entry and a button.
+	left.rows[0][1].widget = HBox{
+		children: []Widget{
+			Entry{
+				widgetBase: widgetBase{
+					name: "contactname",
+				},
+				text:           contact.name,
+				updateOnChange: true,
+			},
+			Button{
+				widgetBase: widgetBase{
+					insensitive: true,
+					name:        "changebutton",
+				},
+				text: "Change name",
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetChild{name: "right", child: rightPane("CONTACT", left, right, nil)}
+	c.gui.Actions() <- UIState{uiStateShowContact}
+	c.gui.Signal()
+
+	deleteArmed := false
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		if update, ok := event.(Update); ok && update.name == "contactname" {
+			candidate := update.text
+			_, alreadyExists := c.contactByName(candidate)
+			c.gui.Actions() <- Sensitive{name: "changebutton", sensitive: len(candidate) > 0 && !alreadyExists}
+			c.gui.Signal()
+			continue
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		switch click.name {
+		case "delete":
+			if deleteArmed {
+				c.gui.Actions() <- Sensitive{name: "delete", sensitive: false}
+				c.gui.Signal()
+				c.deleteContact(contact)
+				c.gui.Actions() <- SetChild{name: "right", child: rightPlaceholderUI}
+				c.gui.Actions() <- UIState{uiStateRevocationComplete}
+				c.gui.Signal()
+				c.save()
+				return nil
+			} else {
+				deleteArmed = true
+				c.gui.Actions() <- SetButtonText{name: "delete", text: "Confirm"}
+				c.gui.Signal()
+			}
+
+		case "changebutton":
+			newName := click.entries["contactname"]
+			_, alreadyExists := c.contactByName(newName)
+			if len(newName) == 0 || alreadyExists {
+				continue
+			}
+
+			contact.name = newName
+			for _, msg := range c.inbox {
+				if msg.from == contact.id {
+					c.inboxUI.SetLine(msg.id, newName)
+				}
+			}
+			for _, msg := range c.outbox {
+				if msg.to == contact.id {
+					c.outboxUI.SetLine(msg.id, newName)
+				}
+			}
+			for _, msg := range c.drafts {
+				if msg.to == contact.id {
+					c.draftsUI.SetLine(msg.id, newName)
+				}
+			}
+			for _, msg := range c.drafts {
+				if msg.to == contact.id {
+					c.draftsUI.SetLine(msg.id, newName)
+				}
+			}
+			c.contactsUI.SetLine(contact.id, newName)
+			c.gui.Actions() <- UIState{uiStateContactNameChanged}
+			c.gui.Signal()
+
+			c.save()
+		}
+	}
+
+	panic("unreachable")
+}
+
+func (c *guiClient) newContactUI(contact *Contact) interface{} {
+	var name string
+	existing := contact != nil
+	if existing {
+		name = contact.name
+	}
+
+	grid := Grid{
+		widgetBase: widgetBase{name: "grid", margin: 5},
+		rowSpacing: 8,
+		colSpacing: 3,
+		rows: [][]GridE{
+			{
+				{1, 1, Label{text: "1."}},
+				{1, 1, Label{text: "Choose a name for this contact."}},
+			},
+			{
+				{1, 1, nil},
+				{1, 1, Label{text: "You can choose any name for this contact. It will be used to identify the contact to you and must be unique amongst all your contacts. However, it will not be revealed to anyone else nor used automatically in messages.", wrap: 400}},
+			},
+			{
+				{1, 1, nil},
+				{1, 1, Entry{
+					widgetBase: widgetBase{name: "name", insensitive: existing},
+					width:      20,
+					text:       name,
+				}},
+			},
+			{
+				{1, 1, nil},
+				{1, 1, Label{
+					widgetBase: widgetBase{name: "error1", foreground: colorRed},
+				}},
+			},
+			{
+				{1, 1, Label{text: "2."}},
+				{1, 1, Label{text: "Choose a key agreement method."}},
+			},
+			{
+				{1, 1, nil},
+				{1, 1, Label{text: `Shared secret keying involves anonymously contacting a global, shared service and performing key agreement with another party who holds the same shared secret.
+
+If the other party is someone who you are in email or IM contact with, then a button is provided to generate a secret, which can then be sent to the other party. Neither Email nor IM ensures that someone didn't change the secret during transmission but you can verify the other party's fingerprint later and, as always, have to weigh convenience against security.
+
+If, for example, you met your contact in real life, you could agree on a shared secret and the time (to the minute). Later you can both use this function to bootstrap Pond communication. The security of this scheme rests on the secret being unguessable, which is very hard for humans to manage. So there is also a scheme whereby a deck of cards can be shuffled and split between you.
+
+Manual keying (not generally recommended) involves exchanging key material with your contact in a secure and authentic manner, i.e. by using PGP. The security of Pond is moot if you actually exchange keys with an attacker: they can masquerade the intended contact or could simply do the same to them and pass messages between you, reading everything in the process. Note that the key material is also secret - it's not a public key and so must be encrypted as well as signed.`, wrap: 400}},
+			},
+			{
+				{1, 1, nil},
+				{1, 1, Grid{
+					widgetBase: widgetBase{marginTop: 20},
+					rows: [][]GridE{
+						{
+							{1, 1, Label{widgetBase: widgetBase{hExpand: true}}},
+							{1, 1, Button{
+								widgetBase: widgetBase{
+									name: "shared",
+								},
+								text: "Shared secret",
+							}},
+							{1, 1, Label{widgetBase: widgetBase{hExpand: true}}},
+							{1, 1, Button{
+								widgetBase: widgetBase{
+									name: "manual",
+								},
+								text: "Manual Keying",
+							}},
+							{1, 1, Label{widgetBase: widgetBase{hExpand: true}}},
+						},
+					},
+				}},
+			},
+		},
+	}
+
+	nextRow := len(grid.rows)
+
+	c.gui.Actions() <- SetChild{name: "right", child: rightPane("CREATE CONTACT", nil, nil, grid)}
+	c.gui.Actions() <- UIState{uiStateNewContact}
+	c.gui.Signal()
+
+	if existing {
+		return c.newContactManual(contact, existing, nextRow)
+	}
+
+	var keyAgreementClick interface{}
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		keyAgreementClick = nil
+		switch click.name {
+		case "name":
+		case "manual", "shared":
+			// If the user clicked one of the key-agreement type
+			// buttons then we remember the event for the next
+			// event loop, below.
+			keyAgreementClick = event
+		default:
+			continue
+		}
+
+		name = click.entries["name"]
+
+		if len(name) == 0 {
+			continue
+		}
+
+		nameIsUnique := true
+		for _, contact := range c.contacts {
+			if contact.name == name {
+				const errText = "A contact by that name already exists!"
+				c.gui.Actions() <- SetText{name: "error1", text: errText}
+				c.gui.Actions() <- UIError{errors.New(errText)}
+				c.gui.Signal()
+				nameIsUnique = false
+				break
+			}
+		}
+
+		if nameIsUnique {
+			break
+		}
+	}
+
+	contact = &Contact{
+		name:      name,
+		isPending: true,
+		id:        c.randId(),
+	}
+
+	c.gui.Actions() <- SetText{name: "error1", text: ""}
+	c.gui.Actions() <- Sensitive{name: "name", sensitive: false}
+	c.gui.Signal()
+
+	for {
+		var event interface{}
+		if keyAgreementClick != nil {
+			event, keyAgreementClick = keyAgreementClick, event
+		} else {
+			var wanted bool
+			event, wanted = c.nextEvent(0)
+			if wanted {
+				return event
+			}
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		var nextFunc func(*Contact, bool, int) interface{}
+
+		switch click.name {
+		case "manual":
+			nextFunc = func(contact *Contact, existing bool, nextRow int) interface{} {
+				return c.newContactManual(contact, existing, nextRow)
+			}
+		case "shared":
+			nextFunc = func(contact *Contact, existing bool, nextRow int) interface{} {
+				return c.newContactPanda(contact, existing, nextRow)
+			}
+		default:
+			continue
+		}
+
+		c.gui.Actions() <- Sensitive{name: "manual", sensitive: false}
+		c.gui.Actions() <- Sensitive{name: "shared", sensitive: false}
+		return nextFunc(contact, existing, nextRow)
+	}
+
+	panic("unreachable")
+}
+
+func (c *guiClient) newContactManual(contact *Contact, existing bool, nextRow int) interface{} {
+	if !existing {
+		c.newKeyExchange(contact)
+		c.contacts[contact.id] = contact
+		c.save()
+
+		c.contactsUI.Add(contact.id, contact.name, "pending", indicatorNone)
+		c.contactsUI.Select(contact.id)
+	}
+
+	var out bytes.Buffer
+	pem.Encode(&out, &pem.Block{Bytes: contact.kxsBytes, Type: keyExchangePEM})
+	handshake := string(out.Bytes())
+
+	rows := [][]GridE{
+		{
+			{1, 1, Label{text: "3."}},
+			{1, 1, Label{text: "Give them a handshake message."}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, Label{text: "A handshake is for a single person. Don't give it to anyone else and ensure that it came from the person you intended! For example, you could send it in a PGP signed and encrypted email, or exchange it over an OTR chat.", wrap: 400}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, TextView{
+				widgetBase: widgetBase{
+					height: 150,
+					name:   "kxout",
+					font:   fontMainMono,
+				},
+				editable: false,
+				text:     handshake,
+			},
+			},
+		},
+		{
+			{1, 1, Label{text: "4."}},
+			{1, 1, Label{text: "Enter the handshake message from them."}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, Label{text: "You won't be able to exchange messages with them until they complete the handshake.", wrap: 400}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, TextView{
+				widgetBase: widgetBase{
+					height: 150,
+					name:   "kxin",
+					font:   fontMainMono,
+				},
+				editable: true,
+			},
+			},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, Grid{
+				widgetBase: widgetBase{marginTop: 20},
+				colSpacing: 5,
+				rows: [][]GridE{
+					{
+						{1, 1, Button{
+							widgetBase: widgetBase{name: "process"},
+							text:       "Process",
+						}},
+						{1, 1, Button{
+							widgetBase: widgetBase{name: "abort"},
+							text:       "Abort",
+						}},
+						{1, 1, Label{widgetBase: widgetBase{hExpand: true}}},
+					},
+				},
+			}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, Label{
+				widgetBase: widgetBase{name: "error2", foreground: colorRed},
+			}},
+		},
+	}
+
+	for _, row := range rows {
+		c.gui.Actions() <- InsertRow{name: "grid", pos: nextRow, row: row}
+		nextRow++
+	}
+	c.gui.Actions() <- UIState{uiStateNewContact2}
+	c.gui.Signal()
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+
+		if click.name == "abort" {
+			c.gui.Actions() <- Sensitive{name: "abort", sensitive: false}
+			c.gui.Signal()
+			c.deleteContact(contact)
+			c.gui.Actions() <- SetChild{name: "right", child: rightPlaceholderUI}
+			c.gui.Actions() <- UIState{uiStateRevocationComplete}
+			c.gui.Signal()
+			c.save()
+			return nil
+		}
+
+		if click.name != "process" {
+			continue
+		}
+
+		block, _ := pem.Decode([]byte(click.textViews["kxin"]))
+		if block == nil || block.Type != keyExchangePEM {
+			const errText = "No key exchange message found!"
+			c.gui.Actions() <- SetText{name: "error2", text: errText}
+			c.gui.Actions() <- UIError{errors.New(errText)}
+			c.gui.Signal()
+			continue
+		}
+		if err := contact.processKeyExchange(block.Bytes, c.dev, c.simulateOldClient, c.disableV2Ratchet); err != nil {
+			c.gui.Actions() <- SetText{name: "error2", text: err.Error()}
+			c.gui.Actions() <- UIError{err}
+			c.gui.Signal()
+			continue
+		} else {
+			break
+		}
+	}
+
+	// Unseal all pending messages from this new contact.
+	contact.isPending = false
+	c.unsealPendingMessages(contact)
+	c.contactsUI.SetSubline(contact.id, "")
+	c.save()
+	return c.showContact(contact.id)
+}
+
+func (c *guiClient) newContactPanda(contact *Contact, existing bool, nextRow int) interface{} {
+	c.newKeyExchange(contact)
+
+	controls := Grid{
+		widgetBase: widgetBase{name: "controls", margin: 5},
+		rowSpacing: 5,
+		colSpacing: 5,
+		rows: [][]GridE{
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "Shared secret",
+				}},
+				{2, 1, Grid{
+					colSpacing: 5,
+					rows: [][]GridE{
+						{
+							{1, 1, Entry{widgetBase: widgetBase{name: "shared", width: 400}, updateOnChange: true}},
+							{1, 1, Button{widgetBase: widgetBase{name: "generate"}, text: "Generate"}},
+						},
+					},
+				}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "Cards",
+				}},
+				{1, 1, Entry{widgetBase: widgetBase{name: "cardentry"}, updateOnChange: true}},
+				{1, 1, RadioGroup{widgetBase: widgetBase{name: "numdecks"}, labels: []string{"1 deck", "2 decks"}}},
+			},
+			{
+				{1, 1, nil},
+				{2, 1, Grid{
+					widgetBase: widgetBase{name: "cards"},
+					rowSpacing: 2,
+					colSpacing: 2,
+				}},
+			},
+			{
+				{1, 1, Label{
+					widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, hAlign: AlignEnd, vAlign: AlignCenter},
+					text:       "When",
+				}},
+				{2, 1, Grid{
+					rowSpacing: 5,
+					colSpacing: 3,
+					rows: [][]GridE{
+						{
+							{1, 1, CheckButton{widgetBase: widgetBase{name: "hastime"}, text: "Include time"}},
+						},
+						{
+							{1, 1, Calendar{widgetBase: widgetBase{name: "cal", insensitive: true}}},
+							{1, 1, Grid{
+								widgetBase: widgetBase{marginLeft: 5},
+								rowSpacing: 5,
+								colSpacing: 3,
+								rows: [][]GridE{
+									{
+										{1, 1, Label{widgetBase: widgetBase{vAlign: AlignCenter}, text: "Hour"}},
+										{1, 1, SpinButton{widgetBase: widgetBase{name: "hour", insensitive: true}, min: 0, max: 23, step: 1}},
+									},
+									{
+										{1, 1, Label{widgetBase: widgetBase{vAlign: AlignCenter}, text: "Minute"}},
+										{1, 1, SpinButton{widgetBase: widgetBase{name: "minute", insensitive: true}, min: 0, max: 59, step: 1}},
+									},
+								},
+							}},
+						},
+					},
+				}},
+			},
+			{
+				{1, 1, Button{widgetBase: widgetBase{name: "begin"}, text: "Begin"}},
+			},
+		},
+	}
+
+	rows := [][]GridE{
+		{
+			{1, 1, Label{text: "3."}},
+			{1, 1, Label{text: "Enter the shared secret."}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, Label{text: `If you received a secret from someone, enter it as the "Shared secret" and ignore the rest.
+
+If you wish to email/IM a shared secret, click "Generate" to create one and send it to them over email or IM.
+
+If you are agreeing upon the shared secret via other means, then it can be a phrase, or can be generated by shuffling one or two decks of cards together, splitting the stack roughly in half and giving one half to each person. (Or you can do both the card trick and have a phrase.) Additionally, it's possible to use the time of a meeting as a salt if you agreed on it.
+
+When entering cards enter the number or face of the card first, and then the suit - both as single letters. So the three of diamonds is '3d' and the ace of spades is 'as'. Discard the jokers. Click on a card to delete.`, wrap: 400}},
+		},
+		{
+			{1, 1, nil},
+			{1, 1, controls},
+		},
+	}
+
+	for _, row := range rows {
+		c.gui.Actions() <- InsertRow{name: "grid", pos: nextRow, row: row}
+		nextRow++
+	}
+	c.gui.Actions() <- UIState{uiStateNewContact2}
+	c.gui.Signal()
+
+	const cardsPerRow = 10
+	type gridPoint struct {
+		col, row int
+	}
+	// freeList contains the `holes' in the card grid due to cards being
+	// deleted.
+	var freeList []gridPoint
+	// nextPoint contains the next location to insert into the grid of cards.
+	var nextPoint gridPoint
+	stack := &panda.CardStack{
+		NumDecks: 1,
+	}
+	cardAtLocation := make(map[gridPoint]panda.Card)
+	minDecks := 1
+	timeEnabled := false
+
+SharedSecretEvent:
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		if update, ok := event.(Update); ok && update.name == "shared" {
+			ok := panda.IsAcceptableSecretString(update.text)
+			c.gui.Actions() <- Sensitive{name: "begin", sensitive: ok}
+			c.gui.Signal()
+		}
+
+		if update, ok := event.(Update); ok && update.name == "cardentry" && len(update.text) >= 2 {
+			cardText := update.text[:2]
+			if cardText == "10" {
+				if len(update.text) >= 3 {
+					cardText = update.text[:3]
+				} else {
+					continue SharedSecretEvent
+				}
+			}
+			if card, ok := panda.ParseCard(cardText); ok && stack.Add(card) {
+				point := nextPoint
+				if l := len(freeList); l > 0 {
+					point = freeList[l-1]
+					freeList = freeList[:l-1]
+				} else {
+					nextPoint.col++
+					if nextPoint.col == cardsPerRow {
+						nextPoint.row++
+						nextPoint.col = 0
+					}
+				}
+				markup := card.String()
+				if card.IsRed() {
+					numLen := 1
+					if markup[0] == '1' {
+						numLen = 2
+					}
+					markup = markup[:numLen] + "<span color=\"red\">" + markup[numLen:] + "</span>"
+				}
+				name := fmt.Sprintf("card-%d,%d", point.col, point.row)
+				c.gui.Actions() <- GridSet{"cards", point.col, point.row, Button{
+					widgetBase: widgetBase{name: name},
+					markup:     markup,
+				}}
+				cardAtLocation[point] = card
+				if min := stack.MinimumDecks(); min > minDecks {
+					minDecks = min
+					if min > 1 {
+						c.gui.Actions() <- Sensitive{name: "numdecks", sensitive: false}
+					}
+				}
+			}
+			c.gui.Actions() <- SetEntry{name: "cardentry", text: update.text[len(cardText):]}
+			c.gui.Signal()
+			continue
+		}
+
+		if click, ok := event.(Click); ok {
+			switch {
+			case strings.HasPrefix(click.name, "card-"):
+				var point gridPoint
+				fmt.Sscanf(click.name[5:], "%d,%d", &point.col, &point.row)
+				card := cardAtLocation[point]
+				freeList = append(freeList, point)
+				delete(cardAtLocation, point)
+				stack.Remove(card)
+				if min := stack.MinimumDecks(); min < minDecks {
+					minDecks = min
+					if min < 2 {
+						c.gui.Actions() <- Sensitive{name: "numdecks", sensitive: true}
+					}
+				}
+				c.gui.Actions() <- Destroy{name: click.name}
+				c.gui.Signal()
+			case click.name == "hastime":
+				timeEnabled = click.checks["hastime"]
+				c.gui.Actions() <- Sensitive{name: "cal", sensitive: timeEnabled}
+				c.gui.Actions() <- Sensitive{name: "hour", sensitive: timeEnabled}
+				c.gui.Actions() <- Sensitive{name: "minute", sensitive: timeEnabled}
+				c.gui.Signal()
+			case click.name == "numdecks":
+				numDecks := click.radios["numdecks"] + 1
+				if numDecks >= minDecks {
+					stack.NumDecks = numDecks
+				}
+			case click.name == "begin":
+				secret := panda.SharedSecret{
+					Secret: click.entries["shared"],
+					Cards:  *stack,
+				}
+				if timeEnabled {
+					date := click.calendars["cal"]
+					secret.Year = date.year
+					secret.Month = date.month
+					secret.Day = date.day
+					secret.Hours = click.spinButtons["hour"]
+					secret.Minutes = click.spinButtons["minute"]
+				}
+				mp := c.newMeetingPlace()
+
+				c.contacts[contact.id] = contact
+				c.contactsUI.Add(contact.id, contact.name, "pending", indicatorNone)
+				c.contactsUI.Select(contact.id)
+
+				kx, err := panda.NewKeyExchange(c.rand, mp, &secret, contact.kxsBytes)
+				if err != nil {
+					panic(err)
+				}
+				kx.Testing = c.testing
+				contact.pandaKeyExchange = kx.Marshal()
+				contact.kxsBytes = nil
+				break SharedSecretEvent
+			case click.name == "generate":
+				c.gui.Actions() <- SetEntry{name: "shared", text: panda.NewSecretString(c.rand)}
+				c.gui.Signal()
+			}
+		}
+	}
+
+	c.save()
+	c.pandaWaitGroup.Add(1)
+	contact.pandaShutdownChan = make(chan struct{})
+	go c.runPANDA(contact.pandaKeyExchange, contact.id, contact.name, contact.pandaShutdownChan)
+	return c.showContact(contact.id)
+}
+
+func widgetForAttachment(id uint64, label string, isError bool, extraWidgets []Widget) Widget {
+	var labelName string
+	var labelColor uint32
+	if isError {
+		labelName = fmt.Sprintf("attachment-error-%x", id)
+		labelColor = colorRed
+	} else {
+		labelName = fmt.Sprintf("attachment-label-%x", id)
+	}
+	return Frame{
+		widgetBase: widgetBase{
+			name:    fmt.Sprintf("attachment-frame-%x", id),
+			padding: 1,
+		},
+		child: VBox{
+			widgetBase: widgetBase{
+				name: fmt.Sprintf("attachment-vbox-%x", id),
+			},
+			children: append([]Widget{
+				HBox{
+					children: []Widget{
+						Label{
+							widgetBase: widgetBase{
+								padding:    2,
+								foreground: labelColor,
+								name:       labelName,
+							},
+							yAlign: 0.5,
+							text:   label,
+						},
+						VBox{
+							widgetBase: widgetBase{expand: true, fill: true},
+						},
+						Button{
+							widgetBase: widgetBase{name: fmt.Sprintf("remove-%x", id)},
+							image:      indicatorRemove,
+						},
+					},
+				},
+			}, extraWidgets...),
+		},
+	}
+}
+
+type DetachmentUI interface {
+	IsValid(id uint64) bool
+	ProgressName(id uint64) string
+	VBoxName(id uint64) string
+	OnFinal(id uint64)
+	OnSuccess(id uint64, detachment *pond.Message_Detachment)
+}
+
+type ComposeDetachmentUI struct {
+	draft       *Draft
+	detachments map[uint64]int
+	gui         GUI
+	final       func()
+}
+
+func (i ComposeDetachmentUI) IsValid(id uint64) bool {
+	_, ok := i.draft.pendingDetachments[id]
+	return ok
+}
+
+func (i ComposeDetachmentUI) ProgressName(id uint64) string {
+	return fmt.Sprintf("attachment-progress-%x", id)
+}
+
+func (i ComposeDetachmentUI) VBoxName(id uint64) string {
+	return fmt.Sprintf("attachment-vbox-%x", id)
+}
+
+func (i ComposeDetachmentUI) OnFinal(id uint64) {
+	delete(i.draft.pendingDetachments, id)
+	i.final()
+}
+
+func (i ComposeDetachmentUI) OnSuccess(id uint64, detachment *pond.Message_Detachment) {
+	i.detachments[id] = len(i.draft.detachments)
+	i.draft.detachments = append(i.draft.detachments, detachment)
+}
+
+// maybeProcessDetachmentMsg is called to process a possible message from a
+// background, detachment task. It returns true if event was handled.
+func (c *guiClient) maybeProcessDetachmentMsg(event interface{}, ui DetachmentUI) bool {
+	if derr, ok := event.(DetachmentError); ok {
+		id := derr.id
+		if !ui.IsValid(id) {
+			return true
+		}
+		c.gui.Actions() <- Destroy{name: ui.ProgressName(id)}
+		c.gui.Actions() <- Append{
+			name: ui.VBoxName(id),
+			children: []Widget{
+				Label{
+					widgetBase: widgetBase{
+						foreground: colorRed,
+					},
+					text: derr.err.Error(),
+				},
+			},
+		}
+		ui.OnFinal(id)
+		c.gui.Signal()
+		return true
+	}
+	if prog, ok := event.(DetachmentProgress); ok {
+		id := prog.id
+		if !ui.IsValid(id) {
+			return true
+		}
+		if prog.total == 0 {
+			return true
+		}
+		f := float64(prog.done) / float64(prog.total)
+		if f > 1 {
+			f = 1
+		}
+		c.gui.Actions() <- SetProgress{
+			name:     ui.ProgressName(id),
+			s:        prog.status,
+			fraction: f,
+		}
+		c.gui.Signal()
+		return true
+	}
+	if complete, ok := event.(DetachmentComplete); ok {
+		id := complete.id
+		if !ui.IsValid(id) {
+			return true
+		}
+		c.gui.Actions() <- Destroy{
+			name: ui.ProgressName(id),
+		}
+		ui.OnFinal(id)
+		ui.OnSuccess(id, complete.detachment)
+		c.gui.Actions() <- UIState{uiStateDetachmentComplete}
+		c.gui.Signal()
+		return true
+	}
+
+	return false
+}
+
+func (c *guiClient) updateUsage(validContactSelected bool, draft *Draft) bool {
+	usageMessage, over := draft.usageString()
+	c.gui.Actions() <- SetText{name: "usage", text: usageMessage}
+	color := uint32(colorBlack)
+	if over {
+		color = colorRed
+		c.gui.Actions() <- Sensitive{name: "send", sensitive: false}
+	} else if validContactSelected {
+		c.gui.Actions() <- Sensitive{name: "send", sensitive: true}
+	}
+	c.gui.Actions() <- SetForeground{name: "usage", foreground: color}
+	return over
+}
+
+func (c *guiClient) composeUI(draft *Draft, inReplyTo *InboxMessage) interface{} {
+	if draft != nil && inReplyTo != nil {
+		panic("draft and inReplyTo both set")
+	}
+
+	var contactNames []string
+	for _, contact := range c.contacts {
+		if !contact.isPending && !contact.revokedUs {
+			contactNames = append(contactNames, contact.name)
+		}
+	}
+
+	var preSelected string
+	if inReplyTo != nil {
+		if from, ok := c.contacts[inReplyTo.from]; ok {
+			preSelected = from.name
+		}
+	}
+
+	attachments := make(map[uint64]int)
+	detachments := make(map[uint64]int)
+
+	if draft != nil {
+		if to, ok := c.contacts[draft.to]; ok {
+			preSelected = to.name
+		}
+		for i := range draft.attachments {
+			attachments[c.randId()] = i
+		}
+		for i := range draft.detachments {
+			detachments[c.randId()] = i
+		}
+	}
+
+	if draft != nil && draft.inReplyTo != 0 {
+		for _, msg := range c.inbox {
+			if msg.id == draft.inReplyTo {
+				inReplyTo = msg
+				break
+			}
+		}
+	}
+
+	if draft == nil {
+		from := preSelected
+		if len(preSelected) == 0 {
+			from = "Unknown"
+		}
+
+		draft = &Draft{
+			id:      c.randId(),
+			created: c.Now(),
+		}
+		if inReplyTo != nil {
+			draft.inReplyTo = inReplyTo.id
+			draft.to = inReplyTo.from
+			draft.body = indentForReply(inReplyTo.message.GetBody())
+		}
+
+		c.draftsUI.Add(draft.id, from, draft.created.Format(shortTimeFormat), indicatorNone)
+		c.draftsUI.Select(draft.id)
+		c.drafts[draft.id] = draft
+	}
+
+	initialUsageMessage, overSize := draft.usageString()
+	validContactSelected := len(preSelected) > 0
+
+	lhs := VBox{
+		children: []Widget{
+			HBox{
+				widgetBase: widgetBase{padding: 2},
+				children: []Widget{
+					Label{
+						widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, padding: 10},
+						text:       "TO",
+						yAlign:     0.5,
+					},
+					Combo{
+						widgetBase: widgetBase{
+							name:        "to",
+							insensitive: len(preSelected) > 0 && inReplyTo != nil,
+						},
+						labels:      contactNames,
+						preSelected: preSelected,
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{padding: 2},
+				children: []Widget{
+					Label{
+						widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, padding: 10},
+						text:       "SIZE",
+						yAlign:     0.5,
+					},
+					Label{
+						widgetBase: widgetBase{name: "usage"},
+						text:       initialUsageMessage,
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{padding: 0},
+				children: []Widget{
+					Label{
+						widgetBase: widgetBase{font: fontMainLabel, foreground: colorHeaderForeground, padding: 10},
+						text:       "ATTACHMENTS",
+						yAlign:     0.5,
+					},
+					Button{
+						widgetBase: widgetBase{name: "attach", font: "Liberation Sans 8"},
+						image:      indicatorAdd,
+					},
+				},
+			},
+			HBox{
+				widgetBase: widgetBase{padding: 0},
+				children: []Widget{
+					VBox{
+						widgetBase: widgetBase{name: "filesvbox", padding: 25},
+					},
+				},
+			},
+		},
+	}
+	rhs := VBox{
+		widgetBase: widgetBase{padding: 5},
+		children: []Widget{
+			Button{
+				widgetBase: widgetBase{name: "send", insensitive: !validContactSelected, padding: 2},
+				text:       "Send",
+			},
+			Button{
+				widgetBase: widgetBase{name: "discard", padding: 2},
+				text:       "Discard",
+			},
+		},
+	}
+	ui := VBox{
+		children: []Widget{
+			EventBox{
+				widgetBase: widgetBase{background: colorHeaderBackground},
+				child: VBox{
+					children: []Widget{
+						HBox{
+							widgetBase: widgetBase{padding: 10},
+							children: []Widget{
+								Label{
+									widgetBase: widgetBase{font: fontMainTitle, padding: 10, foreground: colorHeaderForeground},
+									text:       "COMPOSE",
+								},
+							},
+						},
+					},
+				},
+			},
+			EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+			HBox{
+				children: []Widget{
+					lhs,
+					Label{
+						widgetBase: widgetBase{expand: true, fill: true},
+					},
+					rhs,
+				},
+			},
+			Scrolled{
+				widgetBase: widgetBase{expand: true, fill: true},
+				horizontal: true,
+				child: TextView{
+					widgetBase:     widgetBase{expand: true, fill: true, name: "body"},
+					editable:       true,
+					wrap:           true,
+					updateOnChange: true,
+					spellCheck:     true,
+					text:           draft.body,
+				},
+			},
+		},
+	}
+
+	c.gui.Actions() <- SetChild{name: "right", child: ui}
+
+	if draft.pendingDetachments == nil {
+		draft.pendingDetachments = make(map[uint64]*pendingDetachment)
+	}
+
+	var initialAttachmentChildren []Widget
+	for id, index := range attachments {
+		attachment := draft.attachments[index]
+		initialAttachmentChildren = append(initialAttachmentChildren, widgetForAttachment(id, fmt.Sprintf("%s (%d bytes)", *attachment.Filename, len(attachment.Contents)), false, nil))
+	}
+	for id, index := range detachments {
+		detachment := draft.detachments[index]
+		initialAttachmentChildren = append(initialAttachmentChildren, widgetForAttachment(id, fmt.Sprintf("%s (%d bytes, external)", *detachment.Filename, *detachment.Size), false, nil))
+	}
+	for id, pending := range draft.pendingDetachments {
+		initialAttachmentChildren = append(initialAttachmentChildren, widgetForAttachment(id, fmt.Sprintf("%s (%d bytes, external)", filepath.Base(pending.path), pending.size), false, []Widget{
+			Progress{
+				widgetBase: widgetBase{
+					name: fmt.Sprintf("attachment-progress-%x", id),
+				},
+			},
+		}))
+	}
+
+	if len(initialAttachmentChildren) > 0 {
+		c.gui.Actions() <- Append{
+			name:     "filesvbox",
+			children: initialAttachmentChildren,
+		}
+	}
+
+	detachmentUI := ComposeDetachmentUI{draft, detachments, c.gui, func() {
+		overSize = c.updateUsage(validContactSelected, draft)
+	}}
+
+	c.gui.Actions() <- UIState{uiStateCompose}
+	c.gui.Signal()
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		if update, ok := event.(Update); ok {
+			overSize = c.updateUsage(validContactSelected, draft)
+			draft.body = update.text
+			c.gui.Signal()
+			continue
+		}
+
+		if open, ok := event.(OpenResult); ok && open.ok && open.arg == nil {
+			// Opening a file for an attachment.
+			contents, size, err := openAttachment(open.path)
+			base := filepath.Base(open.path)
+			id := c.randId()
+
+			var label string
+			var extraWidgets []Widget
+			if err != nil {
+				label = base + ": " + err.Error()
+			} else if size > 0 {
+				// Oversize attachment.
+				label = fmt.Sprintf("%s (%d bytes, external)", base, size)
+				extraWidgets = []Widget{VBox{
+					widgetBase: widgetBase{
+						name: fmt.Sprintf("attachment-addi-%x", id),
+					},
+					children: []Widget{
+						Label{
+							widgetBase: widgetBase{
+								padding: 4,
+							},
+							text: "This file is too large to send via Pond directly. Instead, this Pond message can contain the encryption key for the file and the encrypted file can be transported via a non-Pond mechanism.",
+							wrap: 300,
+						},
+						HBox{
+							children: []Widget{
+								Button{
+									widgetBase: widgetBase{
+										name: fmt.Sprintf("attachment-convert-%x", id),
+									},
+									text: "Save Encrypted",
+								},
+								Button{
+									widgetBase: widgetBase{
+										name: fmt.Sprintf("attachment-upload-%x", id),
+									},
+									text: "Upload",
+								},
+							},
+						},
+					},
+				}}
+
+				draft.pendingDetachments[id] = &pendingDetachment{
+					path: open.path,
+					size: size,
+				}
+			} else {
+				label = fmt.Sprintf("%s (%d bytes)", base, len(contents))
+				a := &pond.Message_Attachment{
+					Filename: proto.String(base),
+					Contents: contents,
+				}
+				attachments[id] = len(draft.attachments)
+				draft.attachments = append(draft.attachments, a)
+			}
+
+			c.gui.Actions() <- Append{
+				name: "filesvbox",
+				children: []Widget{
+					widgetForAttachment(id, label, err != nil, extraWidgets),
+				},
+			}
+			overSize = c.updateUsage(validContactSelected, draft)
+			c.gui.Signal()
+		}
+		if open, ok := event.(OpenResult); ok && open.ok && open.arg != nil {
+			// Saving a detachment.
+			id := open.arg.(uint64)
+			c.gui.Actions() <- Destroy{name: fmt.Sprintf("attachment-addi-%x", id)}
+			c.gui.Actions() <- Append{
+				name: fmt.Sprintf("attachment-vbox-%x", id),
+				children: []Widget{
+					Progress{
+						widgetBase: widgetBase{
+							name: fmt.Sprintf("attachment-progress-%x", id),
+						},
+					},
+				},
+			}
+			draft.pendingDetachments[id].cancel = c.startEncryption(id, open.path, draft.pendingDetachments[id].path)
+			c.gui.Signal()
+		}
+
+		if c.maybeProcessDetachmentMsg(event, detachmentUI) {
+			continue
+		}
+
+		click, ok := event.(Click)
+		if !ok {
+			continue
+		}
+		if click.name == "attach" {
+			c.gui.Actions() <- FileOpen{
+				title: "Attach File",
+			}
+			c.gui.Signal()
+			continue
+		}
+		if click.name == "to" {
+			selected := click.combos["to"]
+			if len(selected) > 0 {
+				validContactSelected = true
+			}
+			for _, contact := range c.contacts {
+				if contact.name == selected {
+					draft.to = contact.id
+				}
+			}
+			c.draftsUI.SetLine(draft.id, selected)
+			if validContactSelected && !overSize {
+				c.gui.Actions() <- Sensitive{name: "send", sensitive: true}
+				c.gui.Signal()
+			}
+			continue
+		}
+		if click.name == "discard" {
+			c.draftsUI.Remove(draft.id)
+			delete(c.drafts, draft.id)
+			c.save()
+			c.gui.Actions() <- SetChild{name: "right", child: rightPlaceholderUI}
+			c.gui.Actions() <- UIState{uiStateMain}
+			c.gui.Signal()
+			return nil
+		}
+		if strings.HasPrefix(click.name, "remove-") {
+			// One of the attachment remove buttons.
+			id, err := strconv.ParseUint(click.name[7:], 16, 64)
+			if err != nil {
+				panic(click.name)
+			}
+			c.gui.Actions() <- Destroy{name: "attachment-frame-" + click.name[7:]}
+			if index, ok := attachments[id]; ok {
+				draft.attachments = append(draft.attachments[:index], draft.attachments[index+1:]...)
+				delete(attachments, id)
+			}
+			if detachment, ok := draft.pendingDetachments[id]; ok {
+				if detachment.cancel != nil {
+					detachment.cancel()
+				}
+				delete(draft.pendingDetachments, id)
+			}
+			if index, ok := detachments[id]; ok {
+				draft.detachments = append(draft.detachments[:index], draft.detachments[index+1:]...)
+				delete(detachments, id)
+			}
+			overSize = c.updateUsage(validContactSelected, draft)
+			c.gui.Signal()
+			continue
+		}
+		const convertPrefix = "attachment-convert-"
+		if strings.HasPrefix(click.name, convertPrefix) {
+			// One of the attachment "Save Encrypted" buttons.
+			idStr := click.name[len(convertPrefix):]
+			id, err := strconv.ParseUint(idStr, 16, 64)
+			if err != nil {
+				panic(click.name)
+			}
+			c.gui.Actions() <- FileOpen{
+				save:     true,
+				title:    "Save encrypted file",
+				filename: filepath.Base(draft.pendingDetachments[id].path) + ".pondencrypted",
+				arg:      id,
+			}
+			c.gui.Signal()
+		}
+		const uploadPrefix = "attachment-upload-"
+		if strings.HasPrefix(click.name, uploadPrefix) {
+			idStr := click.name[len(uploadPrefix):]
+			id, err := strconv.ParseUint(idStr, 16, 64)
+			if err != nil {
+				panic(click.name)
+			}
+			c.gui.Actions() <- Destroy{name: fmt.Sprintf("attachment-addi-%x", id)}
+			c.gui.Actions() <- Append{
+				name: fmt.Sprintf("attachment-vbox-%x", id),
+				children: []Widget{
+					Progress{
+						widgetBase: widgetBase{
+							name: fmt.Sprintf("attachment-progress-%x", id),
+						},
+					},
+				},
+			}
+			draft.pendingDetachments[id].cancel = c.startUpload(id, draft.pendingDetachments[id].path)
+			c.gui.Signal()
+		}
+
+		if click.name != "send" {
+			continue
+		}
+
+		toName := click.combos["to"]
+		if len(toName) == 0 {
+			continue
+		}
+		for _, contact := range c.contacts {
+			if contact.name == toName {
+				draft.to = contact.id
+				break
+			}
+		}
+
+		if inReplyTo != nil {
+			draft.inReplyTo = inReplyTo.message.GetId()
+		}
+		draft.body = click.textViews["body"]
+
+		id, created, err := c.sendDraft(draft)
+		if err != nil {
+			// TODO: handle this case better.
+			println(err.Error())
+			c.log.Errorf("Error sending message: %s", err)
+			continue
+		}
+		to := c.contacts[draft.to]
+		c.outboxUI.Add(id, to.name, created.Format(shortTimeFormat), indicatorRed)
+		if inReplyTo != nil {
+			inReplyTo.acked = true
+			c.inboxUI.SetIndicator(inReplyTo.id, indicatorNone)
+		}
+
+		c.draftsUI.Remove(draft.id)
+		delete(c.drafts, draft.id)
+
+		c.save()
+
+		c.outboxUI.Select(id)
+		return c.showOutbox(id)
+	}
+
+	return nil
+}
+
+// unsealPendingMessages is run once a key exchange with a contact has
+// completed and unseals any previously unreadable messages from that contact.
+func (c *guiClient) unsealPendingMessages(contact *Contact) {
+	var needToFilter = true
+
+	for _, msg := range c.inbox {
+		if msg.message == nil && msg.from == contact.id {
+			if !c.unsealMessage(msg, contact) || len(msg.message.Body) == 0 {
+				c.inboxUI.Remove(msg.id)
+				needToFilter = true
+				continue
+			}
+			subline := time.Unix(*msg.message.Time, 0).Format(shortTimeFormat)
+			c.inboxUI.SetSubline(msg.id, subline)
+			c.inboxUI.SetIndicator(msg.id, indicatorBlue)
+		}
+	}
+
+	if needToFilter {
+		c.dropSealedAndAckMessagesFrom(contact)
+	}
+
+	c.updateWindowTitle()
+}
+
+func (c *guiClient) processPANDAUpdateUI(update pandaUpdate) {
+	contact := c.contacts[update.id]
+
+	switch {
+	case update.err != nil:
+		c.contactsUI.SetSubline(contact.id, "failed")
+	case update.serialised != nil:
+	case update.result != nil:
+		c.contactsUI.SetSubline(contact.id, "")
+		c.unsealPendingMessages(contact)
+		c.gui.Actions() <- UIState{uiStatePANDAComplete}
+		c.gui.Signal()
+	}
+}
+
+func (c *guiClient) removeInboxMessageUI(msg *InboxMessage) {
+	if msg.message == nil || len(msg.message.Body) > 0 {
+		c.inboxUI.Remove(msg.id)
+	}
+}
+
+func (c *guiClient) removeOutboxMessageUI(msg *queuedMessage) {
+	if msg.revocation || len(msg.message.Body) > 0 {
+		c.outboxUI.Remove(msg.id)
+	}
+}
+
+func (c *guiClient) addRevocationMessageUI(msg *queuedMessage) {
+	c.outboxUI.Add(msg.id, "Revocation", msg.created.Format(shortTimeFormat), indicatorRed)
+	c.outboxUI.SetInsensitive(msg.id)
+}
+
+func (c *guiClient) removeContactUI(contact *Contact) {
+	c.contactsUI.Remove(contact.id)
+}
+
+func (c *guiClient) logEventUI(contact *Contact, event Event) {
+	c.contactsUI.SetIndicator(contact.id, indicatorBlue)
+}
+
+func (c *guiClient) logUI() interface{} {
+	ui := VBox{
+		children: []Widget{
+			EventBox{
+				widgetBase: widgetBase{background: colorHeaderBackground},
+				child: VBox{
+					children: []Widget{
+						HBox{
+							widgetBase: widgetBase{padding: 10},
+							children: []Widget{
+								Label{
+									widgetBase: widgetBase{font: "Arial 16", padding: 10, foreground: colorHeaderForeground},
+									text:       "ACTIVITY LOG",
+								},
+							},
+						},
+					},
+				},
+			},
+			EventBox{widgetBase: widgetBase{height: 1, background: colorSep}},
+			HBox{
+				widgetBase: widgetBase{
+					padding: 5,
+				},
+				children: []Widget{
+					VBox{
+						widgetBase: widgetBase{
+							expand: true,
+							fill:   true,
+						},
+					},
+					HBox{
+						widgetBase: widgetBase{
+							padding: 10,
+						},
+						children: []Widget{
+							Button{
+								widgetBase: widgetBase{
+									name:    "clear-log",
+									padding: 2,
+								},
+								text: "Clear",
+							},
+							Button{
+								widgetBase: widgetBase{
+									name:    "transact",
+									padding: 2,
+								},
+								text: "Transact Now",
+							},
+						},
+					},
+				},
+			},
+			Scrolled{
+				horizontal: true,
+				widgetBase: widgetBase{expand: true, fill: true},
+				child: TextView{
+					widgetBase: widgetBase{expand: true, fill: true, name: "log"},
+					editable:   false,
+				},
+			},
+		},
+	}
+
+	log := ""
+	lastProcessedIndex := -1
+
+	c.log.Lock()
+	logEpoch := c.log.epoch
+	for _, entry := range c.log.entries {
+		log += fmt.Sprintf("%s: %s\n", entry.Format(logTimeFormat), entry.s)
+		lastProcessedIndex++
+	}
+	c.log.Unlock()
+
+	c.gui.Actions() <- SetChild{name: "right", child: ui}
+	c.gui.Actions() <- SetTextView{name: "log", text: log}
+	c.gui.Actions() <- UIState{uiStateLog}
+	c.gui.Actions() <- ScrollTextViewToEnd{name: "log"}
+	c.gui.Signal()
+
+	for {
+		event, wanted := c.nextEvent(0)
+		if wanted {
+			return event
+		}
+
+		if click, ok := event.(Click); ok && click.name == "transact" {
+			select {
+			case c.fetchNowChan <- nil:
+			default:
+			}
+			continue
+		}
+
+		if click, ok := event.(Click); ok && click.name == "clear-log" {
+			c.log.clear()
+			logEpoch = c.log.epoch
+			lastProcessedIndex = -1
+			log = ""
+			c.gui.Actions() <- SetTextView{name: "log", text: log}
+			c.gui.Signal()
+			continue
+		}
+
+		c.log.Lock()
+		if logEpoch != c.log.epoch {
+			logEpoch = c.log.epoch
+			lastProcessedIndex = -1
+			log = ""
+		}
+		for _, entry := range c.log.entries[lastProcessedIndex+1:] {
+			log += fmt.Sprintf("%s: %s\n", entry.Format(logTimeFormat), entry.s)
+			lastProcessedIndex++
+		}
+		c.log.Unlock()
+
+		c.gui.Actions() <- SetTextView{name: "log", text: log}
+		c.gui.Actions() <- ScrollTextViewToEnd{name: "log"}
+		c.gui.Signal()
+	}
+
+	return nil
+}
+
+func NewGUIClient(stateFilename string, gui GUI, rand io.Reader, testing, autoFetch bool) *guiClient {
+	c := &guiClient{
+		client: client{
+			testing:            testing,
+			dev:                testing,
+			autoFetch:          autoFetch,
+			stateFilename:      stateFilename,
+			log:                NewLog(),
+			rand:               rand,
+			contacts:           make(map[uint64]*Contact),
+			drafts:             make(map[uint64]*Draft),
+			newMessageChan:     make(chan NewMessage),
+			messageSentChan:    make(chan messageSendResult, 1),
+			backgroundChan:     make(chan interface{}, 8),
+			pandaChan:          make(chan pandaUpdate, 1),
+			signingRequestChan: make(chan signingRequest),
+			usedIds:            make(map[uint64]bool),
+		},
+		gui: gui,
+	}
+	c.ui = c
+
+	if !testing {
+		c.timerChan = time.Tick(60 * time.Second)
+	}
+
+	c.newMeetingPlace = func() panda.MeetingPlace {
+		return &panda.HTTPMeetingPlace{
+			TorAddress: c.torAddress,
+			URL:        "https://panda-key-exchange.appspot.com/exchange",
+		}
+	}
+	c.log.toStderr = true
+	return c
+}
+
+func (c *guiClient) Start() {
+	go c.loadUI()
+}
diff --git a/client/images.go b/client/images.go
new file mode 100644
index 0000000..d576510
--- /dev/null
+++ b/client/images.go
@@ -0,0 +1,41 @@
+package main
+
+import (
+	"strconv"
+)
+
+type Indicator int
+
+const (
+	indicatorNone Indicator = iota
+	indicatorRed
+	indicatorYellow
+	indicatorGreen
+	indicatorBlue
+	indicatorBlack
+	indicatorRemove
+	indicatorAdd
+	indicatorCount
+)
+
+func starWithColor(xtermColorNum int) string {
+	return "\x1b[38;5;" + strconv.Itoa(xtermColorNum) + "m*\x1b[0m"
+}
+
+// Star returns a colored star for the given indicator
+func (i Indicator) Star() string {
+	switch i {
+	case indicatorRed:
+		return starWithColor(160)
+	case indicatorYellow:
+		return starWithColor(227)
+	case indicatorGreen:
+		return starWithColor(82)
+	case indicatorBlue:
+		return starWithColor(57)
+	case indicatorBlack:
+		return starWithColor(201)
+	}
+
+	return " "
+}
diff --git a/client/images_gui.go b/client/images_gui.go
new file mode 100644
index 0000000..d9947e4
--- /dev/null
+++ b/client/images_gui.go
@@ -0,0 +1,119 @@
+// +build !nogui
+
+package main
+
+func (i Indicator) pngBytes() []byte {
+	return indicatorPNGBytes[i]
+}
+
+var indicatorPNGBytes = [][]byte{
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0x15, 0xc4,
+		0x89, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00,
+		0x00, 0x0b, 0x49, 0x44, 0x41, 0x54, 0x08, 0xd7, 0x63, 0x60, 0x00, 0x02, 0x00, 0x00, 0x05, 0x00,
+		0x01, 0xe2, 0x26, 0x05, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60,
+		0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0x0f, 0xbe,
+		0x8b, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+		0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+		0x6b, 0x01, 0x0e, 0x5f, 0x5b, 0x51, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
+		0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
+		0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x58, 0x49,
+		0x44, 0x41, 0x54, 0x18, 0x95, 0x85, 0xcf, 0xb1, 0x11, 0x83, 0x40, 0x0c, 0x04, 0xc0, 0x95, 0x52,
+		0x17, 0xf0, 0x65, 0xd0, 0x93, 0x13, 0x6a, 0xfa, 0xc4, 0x3d, 0x7d, 0x19, 0x14, 0x40, 0x2c, 0x07,
+		0x7c, 0x80, 0x19, 0xdb, 0x6c, 0xa8, 0x1b, 0x69, 0x4e, 0x51, 0x55, 0x44, 0x34, 0xac, 0x58, 0x1c,
+		0x06, 0xba, 0xaa, 0x2d, 0x8a, 0x86, 0x17, 0x1e, 0x3e, 0xed, 0x78, 0xe6, 0xdc, 0xbc, 0x86, 0xe6,
+		0x6c, 0xcd, 0xd3, 0xd9, 0x6f, 0x96, 0xfc, 0x13, 0x82, 0x9c, 0x85, 0x7e, 0x19, 0x89, 0x3e, 0x0b,
+		0x5d, 0xed, 0xe8, 0x71, 0xf7, 0xe6, 0x1b, 0xbe, 0xd0, 0x19, 0x1e, 0x20, 0xed, 0x4e, 0xff, 0x00,
+		0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0x0f, 0xbe,
+		0x8b, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+		0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+		0x6b, 0x01, 0x0e, 0x5f, 0x5b, 0x51, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
+		0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
+		0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x5a, 0x49,
+		0x44, 0x41, 0x54, 0x18, 0x95, 0x85, 0xcf, 0xb1, 0x0d, 0x83, 0x40, 0x0c, 0x05, 0xd0, 0x77, 0x6e,
+		0xa3, 0xb4, 0x8c, 0xc1, 0x52, 0x34, 0x19, 0x89, 0xe6, 0x96, 0x62, 0x0c, 0xca, 0x44, 0x57, 0x9b,
+		0x22, 0x57, 0x04, 0x14, 0xe0, 0x95, 0xfe, 0xb2, 0xf5, 0x5d, 0x32, 0x93, 0x4f, 0x19, 0x30, 0x61,
+		0xf4, 0xb5, 0xa0, 0x7a, 0xe6, 0x5a, 0xf2, 0x6d, 0xc0, 0x8c, 0x87, 0xbd, 0x86, 0x57, 0xf4, 0xcd,
+		0x63, 0xa8, 0xcf, 0xa6, 0xf8, 0x39, 0xfb, 0xcf, 0x18, 0x17, 0x21, 0x88, 0x5e, 0xe8, 0xcc, 0x12,
+		0xa8, 0xbd, 0xd0, 0x51, 0x43, 0x2d, 0x77, 0x6f, 0x6e, 0xbd, 0xe2, 0x1a, 0x0f, 0x2f, 0x31, 0x73,
+		0x73, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0x0f, 0xbe,
+		0x8b, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+		0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00,
+		0x6b, 0x01, 0x0e, 0x5f, 0x5b, 0x51, 0x00, 0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x53, 0x6f,
+		0x66, 0x74, 0x77, 0x61, 0x72, 0x65, 0x00, 0x77, 0x77, 0x77, 0x2e, 0x69, 0x6e, 0x6b, 0x73, 0x63,
+		0x61, 0x70, 0x65, 0x2e, 0x6f, 0x72, 0x67, 0x9b, 0xee, 0x3c, 0x1a, 0x00, 0x00, 0x00, 0x57, 0x49,
+		0x44, 0x41, 0x54, 0x18, 0x95, 0x85, 0xcf, 0xa1, 0x11, 0xc3, 0x40, 0x0c, 0x04, 0xc0, 0x95, 0x68,
+		0xb8, 0xcb, 0xf8, 0xa6, 0x4c, 0x52, 0x52, 0xc8, 0x37, 0xf5, 0x65, 0x98, 0x1b, 0xcb, 0x20, 0x0f,
+		0x12, 0x8f, 0x9d, 0x2c, 0xd4, 0x8d, 0x34, 0xa7, 0xa8, 0x2a, 0x21, 0x16, 0xac, 0x68, 0xde, 0x06,
+		0x7a, 0xa9, 0x2d, 0x94, 0x05, 0x2f, 0x3c, 0x7c, 0xdb, 0xf1, 0xcc, 0xb9, 0x79, 0x0e, 0xcd, 0xd9,
+		0x9a, 0x1f, 0x67, 0xaf, 0xb4, 0xfc, 0x11, 0x82, 0x9c, 0x85, 0xee, 0x8c, 0x44, 0x9f, 0x85, 0xce,
+		0x76, 0xf4, 0xf8, 0xf7, 0xe6, 0x01, 0xb8, 0xfa, 0x19, 0x1d, 0x1e, 0x33, 0x74, 0x3e, 0x00, 0x00,
+		0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0x0f, 0xbe,
+		0x8b, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c, 0xe9, 0x00, 0x00,
+		0x00, 0x3e, 0x49, 0x44, 0x41, 0x54, 0x18, 0x57, 0x63, 0xf8, 0xff, 0xff, 0x3f, 0x03, 0x3b, 0xe3,
+		0x7f, 0x71, 0x20, 0xae, 0x03, 0xe2, 0xb5, 0x50, 0x0c, 0x62, 0x8b, 0x83, 0xe4, 0x60, 0x92, 0x5b,
+		0x81, 0xf8, 0x00, 0x1a, 0x06, 0x89, 0x89, 0x33, 0x40, 0x55, 0xa3, 0x4b, 0xc2, 0x70, 0x1d, 0x03,
+		0xd4, 0x48, 0x5c, 0x0a, 0xd6, 0x12, 0xa5, 0x80, 0xa0, 0x15, 0xf8, 0x1d, 0x49, 0xc8, 0x9b, 0x00,
+		0xaf, 0x96, 0x6e, 0x7d, 0x64, 0x1b, 0xd8, 0x8b, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44,
+		0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x08, 0x06, 0x00, 0x00, 0x00, 0xc4, 0x0f, 0xbe,
+		0x8b, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0xa0,
+		0xbd, 0xa7, 0x93, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x6b, 0x00,
+		0x00, 0x00, 0x6b, 0x01, 0x0e, 0x5f, 0x5b, 0x51, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
+		0x07, 0xdd, 0x05, 0x05, 0x13, 0x30, 0x18, 0x4f, 0x00, 0x69, 0x9f, 0x00, 0x00, 0x00, 0x3b, 0x49,
+		0x44, 0x41, 0x54, 0x28, 0xcf, 0x63, 0xf8, 0xff, 0xff, 0x3f, 0x03, 0x10, 0x88, 0x03, 0x71, 0x1d,
+		0x10, 0xaf, 0x85, 0x62, 0x10, 0x5b, 0x1c, 0x2a, 0x07, 0x96, 0xdc, 0x0a, 0xc4, 0x07, 0xd0, 0xf0,
+		0x56, 0xa8, 0x1c, 0x58, 0xf5, 0x01, 0x1c, 0x18, 0x24, 0x07, 0x36, 0x12, 0x97, 0x82, 0xb5, 0x44,
+		0x29, 0x20, 0x68, 0x05, 0x7e, 0x47, 0x12, 0xf2, 0x26, 0x00, 0x00, 0x83, 0x30, 0xd9, 0xc1, 0x52,
+		0x3f, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x09, 0x08, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x53, 0x6d,
+		0x2e, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+		0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+		0x6e, 0x01, 0x23, 0xe5, 0x3e, 0xa7, 0x00, 0x00, 0x00, 0x62, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3,
+		0x63, 0x50, 0x50, 0x50, 0x58, 0x0e, 0xc4, 0x99, 0xff, 0xff, 0xff, 0x67, 0x40, 0xc6, 0x20, 0x31,
+		0x20, 0x5e, 0x00, 0x62, 0x54, 0x00, 0xf1, 0x1f, 0x20, 0xf6, 0x45, 0x92, 0xf4, 0x05, 0xe2, 0xbf,
+		0x40, 0x5c, 0x07, 0x13, 0x98, 0x0d, 0xc4, 0x5f, 0x80, 0xd8, 0x18, 0x88, 0x8d, 0xa0, 0xec, 0x05,
+		0x20, 0x39, 0x98, 0x02, 0x16, 0x20, 0xde, 0x09, 0xc4, 0xaf, 0x80, 0xf8, 0x25, 0x10, 0xef, 0x05,
+		0x62, 0x56, 0xb8, 0x02, 0xa8, 0x22, 0x69, 0x20, 0xfe, 0x0e, 0xc4, 0x3f, 0x80, 0x58, 0x16, 0x26,
+		0x4e, 0x9c, 0x09, 0x78, 0xdd, 0x40, 0xd0, 0x17, 0x84, 0xc2, 0x01, 0x00, 0xcf, 0x55, 0x74, 0xd8,
+		0x8c, 0x0e, 0x23, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+	{
+		0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
+		0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x08, 0x06, 0x00, 0x00, 0x00, 0x8d, 0x32, 0xcf,
+		0xbd, 0x00, 0x00, 0x00, 0x04, 0x73, 0x42, 0x49, 0x54, 0x08, 0x08, 0x08, 0x08, 0x7c, 0x08, 0x64,
+		0x88, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00,
+		0x61, 0x01, 0x55, 0x2b, 0x90, 0xbd, 0x00, 0x00, 0x00, 0x6d, 0x49, 0x44, 0x41, 0x54, 0x18, 0xd3,
+		0x63, 0xf8, 0xff, 0xff, 0x3f, 0x03, 0x0c, 0x2b, 0x28, 0x28, 0x70, 0x00, 0xf1, 0x45, 0x20, 0x36,
+		0x46, 0x16, 0x07, 0x61, 0x06, 0x34, 0x85, 0x02, 0x40, 0xfc, 0x1f, 0x88, 0x03, 0x08, 0x29, 0x14,
+		0xc4, 0xa9, 0x10, 0x28, 0xa8, 0x06, 0xc4, 0x0e, 0x50, 0xec, 0x0b, 0x55, 0x58, 0x83, 0x24, 0x06,
+		0xc2, 0x6a, 0x20, 0x85, 0x37, 0xa1, 0x92, 0xf8, 0xf0, 0x2d, 0x90, 0x42, 0x23, 0x90, 0x55, 0x40,
+		0x1c, 0x08, 0xc4, 0x09, 0x50, 0x89, 0x2e, 0x20, 0x0e, 0x05, 0xe2, 0x30, 0x20, 0x0e, 0x07, 0x62,
+		0x73, 0x74, 0x37, 0x8a, 0x12, 0xeb, 0x19, 0x31, 0x62, 0x15, 0x8a, 0x13, 0xab, 0x90, 0x17, 0x88,
+		0x2f, 0x83, 0xdc, 0x8d, 0xae, 0x10, 0x00, 0xb6, 0xdd, 0xbf, 0x8e, 0x33, 0x76, 0x4d, 0x53, 0x00,
+		0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82,
+	},
+}
diff --git a/client/listui.go b/client/listui.go
new file mode 100644
index 0000000..b32a15c
--- /dev/null
+++ b/client/listui.go
@@ -0,0 +1,273 @@
+// +build !nogui
+
+package main
+
+import (
+	"strconv"
+)
+
+// listUI manages the sections in the left-hand side list. It contains a number
+// of items, which may have subheadlines and indicators (coloured dots).
+type listUI struct {
+	gui        GUI
+	vboxName   string
+	entries    []listItem
+	selected   uint64
+	nextId     int
+	hasSubline bool
+}
+
+type listItem struct {
+	id                                                                           uint64
+	name, sepName, boxName, imageName, lineName, sublineTextName, sublineBoxName string
+	insensitive                                                                  bool
+	hasSubline                                                                   bool
+	background                                                                   uint32
+}
+
+func (cs *listUI) Event(event interface{}) (uint64, bool) {
+	if click, ok := event.(Click); ok {
+		for _, entry := range cs.entries {
+			if click.name == entry.boxName {
+				if entry.insensitive {
+					return 0, false
+				}
+				return entry.id, true
+			}
+		}
+	}
+
+	return 0, false
+}
+
+func sublineLabel(name, text string) Label {
+	return Label{
+		widgetBase: widgetBase{
+			padding:    5,
+			foreground: colorSubline,
+			font:       fontListSubline,
+			name:       name,
+		},
+		text: text,
+	}
+}
+
+func (cs *listUI) Add(id uint64, name, subline string, indicator Indicator) {
+	c := listItem{
+		id:              id,
+		name:            name,
+		sepName:         cs.newIdent(),
+		boxName:         cs.newIdent(),
+		imageName:       cs.newIdent(),
+		lineName:        cs.newIdent(),
+		sublineTextName: cs.newIdent(),
+		sublineBoxName:  cs.newIdent(),
+		background:      colorGray,
+		hasSubline:      len(subline) > 0,
+	}
+	cs.entries = append(cs.entries, c)
+	index := len(cs.entries) - 1
+
+	if index > 0 {
+		// Add the separator bar.
+		cs.gui.Actions() <- AddToBox{
+			box:   cs.vboxName,
+			pos:   index*2 - 1,
+			child: EventBox{widgetBase: widgetBase{height: 1, background: 0xe5e6e6, name: c.sepName}},
+		}
+	}
+
+	children := []Widget{
+		HBox{
+			widgetBase: widgetBase{padding: 1},
+			children: []Widget{
+				Label{
+					widgetBase: widgetBase{
+						name:    c.lineName,
+						padding: 5,
+						font:    fontListEntry,
+					},
+					text: name,
+				},
+			},
+		},
+	}
+
+	var sublineChildren []Widget
+
+	if len(subline) > 0 {
+		sublineChildren = append(sublineChildren, sublineLabel(c.sublineTextName, subline))
+	}
+
+	sublineChildren = append(sublineChildren, Image{
+		widgetBase: widgetBase{
+			padding: 4,
+			expand:  true,
+			fill:    true,
+			name:    c.imageName,
+		},
+		image:  indicator,
+		xAlign: 1,
+		yAlign: 0.5,
+	})
+
+	children = append(children, HBox{
+		widgetBase: widgetBase{padding: 1, name: c.sublineBoxName},
+		children:   sublineChildren,
+	})
+
+	cs.gui.Actions() <- AddToBox{
+		box: cs.vboxName,
+		pos: index * 2,
+		child: EventBox{
+			widgetBase: widgetBase{name: c.boxName, background: c.background},
+			child:      VBox{children: children},
+		},
+	}
+	cs.gui.Signal()
+}
+
+func (cs *listUI) SetInsensitive(id uint64) {
+	for i, entry := range cs.entries {
+		if entry.id == id {
+			cs.entries[i].insensitive = true
+		}
+	}
+}
+
+func (cs *listUI) Remove(id uint64) {
+	newEntries := make([]listItem, 0, len(cs.entries))
+	for i, entry := range cs.entries {
+		if entry.id == id {
+			if i > 0 {
+				cs.gui.Actions() <- Destroy{name: entry.sepName}
+			}
+			cs.gui.Actions() <- Destroy{name: entry.boxName}
+			cs.gui.Signal()
+			if cs.selected == id {
+				cs.selected = 0
+			}
+			continue
+		}
+		newEntries = append(newEntries, entry)
+	}
+
+	if len(newEntries) == len(cs.entries) {
+		panic("unknown id passed to Remove")
+	}
+	cs.entries = newEntries
+}
+
+func (cs *listUI) Deselect() {
+	if cs.selected == 0 {
+		return
+	}
+
+	var currentlySelected *listItem
+
+	for i, entry := range cs.entries {
+		if entry.id == cs.selected {
+			currentlySelected = &cs.entries[i]
+			break
+		}
+	}
+
+	cs.gui.Actions() <- SetBackground{name: currentlySelected.boxName, color: currentlySelected.background}
+	cs.selected = 0
+	cs.gui.Signal()
+}
+
+func (cs *listUI) Select(id uint64) {
+	if id == cs.selected {
+		return
+	}
+
+	var currentlySelected, newSelected *listItem
+
+	for i, entry := range cs.entries {
+		if entry.id == cs.selected {
+			currentlySelected = &cs.entries[i]
+		} else if entry.id == id {
+			newSelected = &cs.entries[i]
+		}
+
+		if currentlySelected != nil && newSelected != nil {
+			break
+		}
+	}
+
+	if newSelected == nil {
+		panic("internal error")
+	}
+
+	if currentlySelected != nil {
+		cs.gui.Actions() <- SetBackground{name: currentlySelected.boxName, color: currentlySelected.background}
+	}
+	cs.gui.Actions() <- SetBackground{name: newSelected.boxName, color: colorHighlight}
+	cs.selected = id
+	cs.gui.Signal()
+}
+
+func (cs *listUI) SetIndicator(id uint64, indicator Indicator) {
+	for _, entry := range cs.entries {
+		if entry.id == id {
+			cs.gui.Actions() <- SetImage{name: entry.imageName, image: indicator}
+			cs.gui.Signal()
+			break
+		}
+	}
+}
+
+func (cs *listUI) SetLine(id uint64, line string) {
+	for _, entry := range cs.entries {
+		if entry.id == id {
+			cs.gui.Actions() <- SetText{name: entry.lineName, text: line}
+			cs.gui.Signal()
+			break
+		}
+	}
+}
+
+// SetSubline sets the second row of text in an entry.
+func (cs *listUI) SetSubline(id uint64, subline string) {
+	for i, entry := range cs.entries {
+		if entry.id == id {
+			if entry.hasSubline {
+				if len(subline) > 0 {
+					cs.gui.Actions() <- SetText{name: entry.sublineTextName, text: subline}
+				} else {
+					cs.gui.Actions() <- Destroy{name: entry.sublineTextName}
+					cs.entries[i].hasSubline = false
+				}
+			} else if len(subline) > 0 {
+				cs.gui.Actions() <- AddToBox{
+					box:   entry.sublineBoxName,
+					pos:   0,
+					child: sublineLabel(entry.sublineTextName, subline),
+				}
+				cs.entries[i].hasSubline = true
+			}
+			cs.gui.Signal()
+			break
+		}
+	}
+}
+
+func (cs *listUI) SetBackground(id uint64, color uint32) {
+	for i, entry := range cs.entries {
+		if entry.id == id {
+			cs.entries[i].background = color
+			if cs.selected != id {
+				cs.gui.Actions() <- SetBackground{name: entry.boxName, color: color}
+				cs.gui.Signal()
+			}
+			break
+		}
+	}
+}
+
+func (cs *listUI) newIdent() string {
+	id := cs.vboxName + "-" + strconv.Itoa(cs.nextId)
+	cs.nextId++
+	return id
+}
diff --git a/client/log.go b/client/log.go
new file mode 100644
index 0000000..103eb95
--- /dev/null
+++ b/client/log.go
@@ -0,0 +1,85 @@
+package main
+
+import (
+	"fmt"
+	"os"
+	"sync"
+	"time"
+)
+
+type logEntry struct {
+	time.Time
+	isError bool
+	s       string
+}
+
+type Log struct {
+	sync.Mutex
+	entries    []logEntry
+	epoch      uint64
+	updateChan chan bool
+	toStderr   bool
+	// name is set in tests to an opaque identifer for this client. It's
+	// prepended to log messages in order to aid debugging.
+	name string
+}
+
+func NewLog() *Log {
+	return &Log{
+		updateChan: make(chan bool, 1),
+	}
+}
+
+func (l *Log) Printf(format string, args ...interface{}) {
+	l.add(false, format, args...)
+}
+
+func (l *Log) Errorf(format string, args ...interface{}) {
+	l.add(true, format, args...)
+}
+
+const (
+	// logLimit is the maximum number of entries in the log.
+	logLimit = 500
+	// logSlack is the number of entries past the maximum that we'll allow
+	// before the log is recompacted down to logLimit enties.
+	logSlack = 250
+)
+
+func (l *Log) add(isError bool, format string, args ...interface{}) {
+	l.Lock()
+	defer l.Unlock()
+
+	entry := logEntry{
+		time.Now(),
+		isError,
+		fmt.Sprintf(format, args...),
+	}
+	if len(l.entries) > logLimit+logSlack {
+		newEntries := make([]logEntry, logLimit)
+		copy(newEntries, l.entries[logSlack:])
+		l.entries = newEntries
+		l.epoch++
+	}
+	l.entries = append(l.entries, entry)
+	select {
+	case l.updateChan <- true:
+	default:
+	}
+
+	if l.toStderr {
+		var name string
+		if len(l.name) != 0 {
+			name = fmt.Sprintf("(%s) ", l.name)
+		}
+		fmt.Fprintf(os.Stderr, "%s%s: %s\n", name, entry.Format(logTimeFormat), entry.s)
+	}
+}
+
+func (l *Log) clear() {
+	l.Lock()
+	defer l.Unlock()
+
+	l.entries = nil
+	l.epoch = 0
+}
diff --git a/client/main_darwin.go b/client/main_darwin.go
new file mode 100644
index 0000000..56f5626
--- /dev/null
+++ b/client/main_darwin.go
@@ -0,0 +1,53 @@
+package main
+
+import (
+	"crypto/rand"
+	"flag"
+	"fmt"
+	"os"
+	"path/filepath"
+	"runtime"
+
+	"github.com/agl/pond/client/system"
+)
+
+func main() {
+	devFlag := flag.Bool("dev", false, "Is this a development environment?")
+	stateFile := flag.String("state-file", "", "File in which to save persistent state")
+	cliFlag := flag.Bool("cli", false, "If true, the CLI will be used, even if the GUI is available")
+	flag.Parse()
+
+	runtime.LockOSThread()
+
+	dev := os.Getenv("POND") == "dev" || *devFlag
+	runtime.GOMAXPROCS(4)
+
+	if len(*stateFile) == 0 && dev {
+		*stateFile = "state"
+	}
+
+	if len(*stateFile) == 0 {
+		home := os.Getenv("HOME")
+		if len(home) == 0 {
+			fmt.Fprintf(os.Stderr, "$HOME not set. Please export $HOME to set the directory for the state file.\n")
+			os.Exit(1)
+		}
+		*stateFile = filepath.Join(home, ".pond")
+	}
+
+	defer system.Shutdown()
+
+	if !haveGUI || *cliFlag {
+		client := NewCLIClient(*stateFile, rand.Reader, false /* testing */, true /* autoFetch */)
+		client.disableV2Ratchet = true
+		client.dev = dev
+		client.Start()
+	} else {
+		ui := NewGTKUI()
+		client := NewGUIClient(*stateFile, ui, rand.Reader, false /* testing */, true /* autoFetch */)
+		client.disableV2Ratchet = true
+		client.dev = dev
+		client.Start()
+		ui.Run()
+	}
+}
diff --git a/client/main_freebsd.go b/client/main_freebsd.go
new file mode 100644
index 0000000..b89fba8
--- /dev/null
+++ b/client/main_freebsd.go
@@ -0,0 +1,42 @@
+package main
+
+import (
+	"crypto/rand"
+	"flag"
+	"fmt"
+	"os"
+	"path/filepath"
+	"runtime"
+)
+
+func main() {
+	devFlag := flag.Bool("dev", false, "Is this a development environment?")
+	stateFile := flag.String("state-file", "", "File in which to save persistent state")
+	cliFlag := flag.Bool("cli", false, "If true, the CLI will be used, even if the GUI is available")
+	flag.Parse()
+
+	dev := os.Getenv("POND") == "dev" || *devFlag
+	runtime.GOMAXPROCS(4)
+
+	if len(*stateFile) == 0 && dev {
+		*stateFile = "state"
+	}
+
+	if len(*stateFile) == 0 {
+		home := os.Getenv("HOME")
+		if len(home) == 0 {
+			fmt.Fprintf(os.Stderr, "$HOME not set. Please export $HOME to set the directory for the state file.\n")
+			os.Exit(1)
+		}
+		*stateFile = filepath.Join(home, ".pond")
+	}
+
+	if !haveGUI || *cliFlag {
+		client := NewCLIClient(*stateFile, rand.Reader, false /* testing */, true /* autoFetch */)
+		client.disableV2Ratchet = true
+		client.dev = dev
+		client.Start()
+	} else {
+		fmt.Fprintf(os.Stderr, "GUI not supported on %s\n", runtime.GOOS)
+	}
+}
diff --git a/client/main_linux.go b/client/main_linux.go
new file mode 100644
index 0000000..2cf4e5e
--- /dev/null
+++ b/client/main_linux.go
@@ -0,0 +1,79 @@
+package main
+
+import (
+	"crypto/rand"
+	"encoding/binary"
+	"flag"
+	"fmt"
+	"os"
+	"path/filepath"
+	"runtime"
+
+	"golang.org/x/crypto/scrypt"
+)
+
+func main() {
+	stateFile := flag.String("state-file", "", "File in which to save persistent state")
+	pandaScrypt := flag.Bool("panda-scrypt", false, "Run in subprocess mode to process passphrase")
+	cliFlag := flag.Bool("cli", false, "If true, the CLI will be used, even if the GUI is available")
+	devFlag := flag.Bool("dev", false, "Is this a development environment?")
+	flag.Parse()
+
+	if *pandaScrypt {
+		var numBytes uint32
+		if err := binary.Read(os.Stdin, binary.LittleEndian, &numBytes); err != nil {
+			panic(err)
+		}
+		if numBytes > 1024*1024 {
+			panic("passphrase too large")
+		}
+		passphrase := make([]byte, int(numBytes))
+		if _, err := os.Stdin.Read(passphrase); err != nil {
+			panic(err)
+		}
+		data, err := scrypt.Key(passphrase, nil, 1<<17, 16, 4, 32*3)
+		if err != nil {
+			panic(err)
+		}
+		os.Stdout.Write(data)
+		os.Exit(0)
+	}
+
+	dev := os.Getenv("POND") == "dev" || *devFlag
+	runtime.GOMAXPROCS(4)
+
+	if len(*stateFile) == 0 && dev {
+		*stateFile = "state"
+	}
+
+	if len(*stateFile) == 0 {
+		home := os.Getenv("HOME")
+		if len(home) == 0 {
+			fmt.Fprintf(os.Stderr, "$HOME not set. Please either export $HOME or use --state-file to set the location of the state file explicitly.\n")
+			os.Exit(1)
+		}
+		persistentDir := filepath.Join(home, "Persistent")
+		if stat, err := os.Lstat(persistentDir); err == nil && stat.IsDir() {
+			// Looks like Tails.
+			*stateFile = filepath.Join(persistentDir, ".pond")
+		} else {
+			configDir := filepath.Join(home, ".config")
+			os.Mkdir(configDir, 0700)
+			*stateFile = filepath.Join(configDir, "pond")
+		}
+	}
+
+	if !haveGUI || *cliFlag || len(os.Getenv("PONDCLI")) > 0 {
+		client := NewCLIClient(*stateFile, rand.Reader, false /* testing */, true /* autoFetch */)
+		client.disableV2Ratchet = true
+		client.dev = dev
+		client.Start()
+	} else {
+		ui := NewGTKUI()
+		client := NewGUIClient(*stateFile, ui, rand.Reader, false /* testing */, true /* autoFetch */)
+		client.disableV2Ratchet = true
+		client.dev = dev
+		client.Start()
+		ui.Run()
+	}
+}
diff --git a/client/network.go b/client/network.go
new file mode 100644
index 0000000..673e3c0
--- /dev/null
+++ b/client/network.go
@@ -0,0 +1,1344 @@
+package main
+
+import (
+	"bytes"
+	"crypto/rand"
+	"crypto/sha256"
+	"encoding/base32"
+	"encoding/binary"
+	"encoding/hex"
+	"errors"
+	"fmt"
+	"io"
+	mrand "math/rand"
+	"net"
+	"net/url"
+	"os"
+	"strconv"
+	"strings"
+	"time"
+
+	"github.com/agl/ed25519"
+	"github.com/agl/pond/bbssig"
+	pond "github.com/agl/pond/protos"
+	"github.com/agl/pond/transport"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/nacl/box"
+	"golang.org/x/net/proxy"
+)
+
+const (
+	// nonceLen is the length of a NaCl nonce.
+	nonceLen = 24
+	// ephemeralBlockLen is the length of the signcrypted, ephemeral key
+	// used when Contact.supportedVersion >= 1.
+	ephemeralBlockLen = nonceLen + 32 + box.Overhead
+)
+
+func (c *client) sendAck(msg *InboxMessage) {
+	// First, see if we can merge this ack with a message to the same
+	// contact that is pending transmission.
+	c.queueMutex.Lock()
+	for _, queuedMsg := range c.queue {
+		if queuedMsg.sending {
+			continue
+		}
+		if msg.from == queuedMsg.to && !queuedMsg.revocation {
+			proto := queuedMsg.message
+			proto.AlsoAck = append(proto.AlsoAck, msg.message.GetId())
+			if !tooLarge(queuedMsg) {
+				c.queueMutex.Unlock()
+				c.log.Printf("ACK merged with queued message.")
+				// All done.
+				return
+			}
+
+			proto.AlsoAck = proto.AlsoAck[:len(proto.AlsoAck)-1]
+			if len(proto.AlsoAck) == 0 {
+				proto.AlsoAck = nil
+			}
+		}
+	}
+	c.queueMutex.Unlock()
+
+	to := c.contacts[msg.from]
+	var myNextDH []byte
+	if to.ratchet == nil {
+		var nextDHPub [32]byte
+		curve25519.ScalarBaseMult(&nextDHPub, &to.currentDHPrivate)
+		myNextDH = nextDHPub[:]
+	}
+
+	id := c.randId()
+	err := c.send(to, &pond.Message{
+		Id:               proto.Uint64(id),
+		Time:             proto.Int64(time.Now().Unix()),
+		Body:             make([]byte, 0),
+		BodyEncoding:     pond.Message_RAW.Enum(),
+		MyNextDh:         myNextDH,
+		InReplyTo:        msg.message.Id,
+		SupportedVersion: proto.Int32(protoVersion),
+	})
+	if err != nil {
+		c.log.Errorf("Error sending message: %s", err)
+	}
+}
+
+// send encrypts |message| and enqueues it for transmission.
+func (c *client) send(to *Contact, message *pond.Message) error {
+	messageBytes, err := proto.Marshal(message)
+	if err != nil {
+		return err
+	}
+
+	if len(messageBytes) > pond.MaxSerializedMessage {
+		return errors.New("message too large")
+	}
+
+	out := &queuedMessage{
+		id:      *message.Id,
+		to:      to.id,
+		server:  to.theirServer,
+		message: message,
+		created: time.Unix(*message.Time, 0),
+	}
+	c.enqueue(out)
+	c.outbox = append(c.outbox, out)
+
+	return nil
+}
+
+func (c *client) sendDraft(draft *Draft) (uint64, time.Time, error) {
+	to := c.contacts[draft.to]
+
+	// Zero length bodies are ACKs.
+	if len(draft.body) == 0 {
+		draft.body = " "
+	}
+
+	id := c.randId()
+	created := c.Now()
+	message := &pond.Message{
+		Id:               proto.Uint64(id),
+		Time:             proto.Int64(created.Unix()),
+		Body:             []byte(draft.body),
+		BodyEncoding:     pond.Message_RAW.Enum(),
+		Files:            draft.attachments,
+		DetachedFiles:    draft.detachments,
+		SupportedVersion: proto.Int32(protoVersion),
+	}
+
+	if r := draft.inReplyTo; r != 0 {
+		message.InReplyTo = proto.Uint64(r)
+	}
+
+	if to.ratchet == nil {
+		var nextDHPub [32]byte
+		curve25519.ScalarBaseMult(&nextDHPub, &to.currentDHPrivate)
+		message.MyNextDh = nextDHPub[:]
+	}
+
+	err := c.send(to, message)
+	return id, created, err
+}
+
+// tooLarge returns true if the given message is too large to serialise.
+func tooLarge(msg *queuedMessage) bool {
+	messageBytes, err := proto.Marshal(msg.message)
+	if err != nil {
+		return true
+	}
+
+	return len(messageBytes) > pond.MaxSerializedMessage
+}
+
+// processSigningRequest is run on the main goroutine in response to a request
+// from the network thread to apply a group signature to a message that is just
+// about to be sent to the destination server.
+func (c *client) processSigningRequest(sigReq signingRequest) {
+	defer close(sigReq.resultChan)
+	to := c.contacts[sigReq.msg.to]
+
+	messageBytes, err := proto.Marshal(sigReq.msg.message)
+	if err != nil {
+		c.log.Printf("Failed to sign outgoing message: %s", err)
+		return
+	}
+
+	if len(messageBytes) > pond.MaxSerializedMessage {
+		c.log.Printf("Failed to sign outgoing message because it's too large")
+		return
+	}
+
+	// All messages are padded to the maximum length.
+	plaintext := make([]byte, pond.MaxSerializedMessage+4)
+	binary.LittleEndian.PutUint32(plaintext, uint32(len(messageBytes)))
+	copy(plaintext[4:], messageBytes)
+	c.randBytes(plaintext[4+len(messageBytes):])
+
+	var sealed []byte
+	if to.ratchet != nil {
+		sealed = to.ratchet.Encrypt(sealed, plaintext)
+	} else {
+		// The message is encrypted to an ephemeral key so that the sending
+		// client can choose not to store it and then cannot decrypt it once
+		// sent.
+
+		//            +---------------------+            +---...
+		// outerNonce | ephemeral DH public | innerNonce | message
+		// (24 bytes) |                     | (24 bytes) |
+		//            +---------------------+            +---....
+
+		sealedLen := ephemeralBlockLen + nonceLen + len(plaintext) + box.Overhead
+		sealed = make([]byte, sealedLen)
+		var outerNonce [24]byte
+		c.randBytes(outerNonce[:])
+		copy(sealed, outerNonce[:])
+		x := sealed[nonceLen:]
+
+		public, private, err := box.GenerateKey(c.rand)
+		if err != nil {
+			c.log.Printf("Failed to generate key for outgoing message: %s", err)
+			return
+		}
+		box.Seal(x[:0], public[:], &outerNonce, &to.theirCurrentDHPublic, &to.lastDHPrivate)
+		x = x[len(public)+box.Overhead:]
+
+		var innerNonce [24]byte
+		c.randBytes(innerNonce[:])
+		copy(x, innerNonce[:])
+		x = x[nonceLen:]
+		box.Seal(x[:0], plaintext, &innerNonce, &to.theirCurrentDHPublic, private)
+	}
+
+	sha := sha256.New()
+	sha.Write(sealed)
+	digest := sha.Sum(nil)
+	sha.Reset()
+	groupSig, err := to.myGroupKey.Sign(c.rand, digest, sha)
+	if err != nil {
+		c.log.Printf("Failed to sign outgoing message: %s", err)
+		return
+	}
+
+	request := &pond.Request{
+		Deliver: &pond.Delivery{
+			To:             to.theirIdentityPublic[:],
+			GroupSignature: groupSig,
+			Generation:     proto.Uint32(to.generation),
+			Message:        sealed,
+		},
+	}
+
+	sigReq.resultChan <- request
+}
+
+// revocationSignaturePrefix is prepended to a SignedRevocation_Revocation
+// message before signing in order to give context to the signature.
+var revocationSignaturePrefix = []byte("revocation\x00")
+
+func (c *client) revoke(to *Contact) *queuedMessage {
+	to.revoked = true
+	revocation := c.groupPriv.GenerateRevocation(to.groupKey)
+	now := time.Now()
+
+	groupCopy, _ := new(bbssig.Group).Unmarshal(c.groupPriv.Group.Marshal())
+	groupPrivCopy, _ := new(bbssig.PrivateKey).Unmarshal(groupCopy, c.groupPriv.Marshal())
+	c.prevGroupPrivs = append(c.prevGroupPrivs, previousGroupPrivateKey{
+		priv:    groupPrivCopy,
+		expired: now,
+	})
+
+	for _, contact := range c.contacts {
+		if contact == to {
+			continue
+		}
+		contact.previousTags = append(contact.previousTags, previousTag{
+			tag:     contact.groupKey.Tag(),
+			expired: now,
+		})
+		contact.groupKey.Update(revocation)
+	}
+
+	rev := &pond.SignedRevocation_Revocation{
+		Revocation: revocation.Marshal(),
+		Generation: proto.Uint32(c.generation),
+	}
+
+	c.groupPriv.Group.Update(revocation)
+	c.generation++
+
+	revBytes, err := proto.Marshal(rev)
+	if err != nil {
+		panic(err)
+	}
+
+	var signed []byte
+	signed = append(signed, revocationSignaturePrefix...)
+	signed = append(signed, revBytes...)
+
+	sig := ed25519.Sign(&c.priv, signed)
+
+	signedRev := pond.SignedRevocation{
+		Revocation: rev,
+		Signature:  sig[:],
+	}
+
+	request := &pond.Request{
+		Revocation: &signedRev,
+	}
+
+	out := &queuedMessage{
+		revocation: true,
+		request:    request,
+		id:         c.randId(),
+		server:     c.server, // revocations always go to the home server.
+		created:    time.Now(),
+	}
+	c.enqueue(out)
+	c.outbox = append(c.outbox, out)
+	return out
+}
+
+func decryptMessage(sealed []byte, from *Contact) ([]byte, error) {
+	if from.ratchet != nil {
+		plaintext, err := from.ratchet.Decrypt(sealed)
+		if err != nil {
+			return nil, err
+		}
+		return plaintext, nil
+	}
+
+	var nonce [24]byte
+	if len(sealed) < len(nonce) {
+		return nil, errors.New("message shorter than nonce")
+	}
+	copy(nonce[:], sealed)
+	sealed = sealed[24:]
+	headerLen := ephemeralBlockLen - len(nonce)
+	if len(sealed) < headerLen {
+		return nil, errors.New("message shorter than header")
+	}
+
+	publicBytes, ok := decryptMessageInner(sealed[:headerLen], &nonce, from)
+	if !ok || len(publicBytes) != 32 {
+		return nil, errors.New("failed to decrypt inner message")
+	}
+	var innerNonce [nonceLen]byte
+	sealed = sealed[headerLen:]
+	copy(innerNonce[:], sealed)
+	sealed = sealed[nonceLen:]
+	var ephemeralPublicKey [32]byte
+	copy(ephemeralPublicKey[:], publicBytes)
+
+	if plaintext, ok := box.Open(nil, sealed, &innerNonce, &ephemeralPublicKey, &from.lastDHPrivate); ok {
+		return plaintext, nil
+	}
+
+	plaintext, ok := box.Open(nil, sealed, &innerNonce, &ephemeralPublicKey, &from.currentDHPrivate)
+	if !ok {
+		return nil, errors.New("failed to decrypt with either DH values (old ratchet)")
+	}
+
+	// They have clearly received our current DH value. Time to
+	// rotate.
+	copy(from.lastDHPrivate[:], from.currentDHPrivate[:])
+	if _, err := io.ReadFull(rand.Reader, from.currentDHPrivate[:]); err != nil {
+		panic(err)
+	}
+	return plaintext, nil
+}
+
+func decryptMessageInner(sealed []byte, nonce *[24]byte, from *Contact) ([]byte, bool) {
+	if plaintext, ok := box.Open(nil, sealed, nonce, &from.theirLastDHPublic, &from.lastDHPrivate); ok {
+		return plaintext, true
+	}
+
+	if plaintext, ok := box.Open(nil, sealed, nonce, &from.theirCurrentDHPublic, &from.lastDHPrivate); ok {
+		return plaintext, true
+	}
+
+	plaintext, ok := box.Open(nil, sealed, nonce, &from.theirLastDHPublic, &from.currentDHPrivate)
+	if !ok {
+		plaintext, ok = box.Open(nil, sealed, nonce, &from.theirCurrentDHPublic, &from.currentDHPrivate)
+		if !ok {
+			return nil, false
+		}
+	}
+
+	// They have clearly received our current DH value. Time to
+	// rotate.
+	copy(from.lastDHPrivate[:], from.currentDHPrivate[:])
+	if _, err := io.ReadFull(rand.Reader, from.currentDHPrivate[:]); err != nil {
+		panic(err)
+	}
+	return plaintext, true
+}
+
+func (c *client) processNewMessage(m NewMessage) {
+	defer func() { m.ack <- true }()
+
+	if m.fetched != nil {
+		c.processFetch(m)
+	} else {
+		c.processServerAnnounce(m)
+	}
+}
+
+func (c *client) processFetch(m NewMessage) {
+	f := m.fetched
+
+	sha := sha256.New()
+	sha.Write(f.Message)
+	digest := sha.Sum(nil)
+
+	var tag []byte
+	var ok bool
+	if c.groupPriv.Verify(digest, sha, f.GroupSignature) {
+		tag, ok = c.groupPriv.Open(f.GroupSignature)
+	} else {
+		found := false
+		for _, prev := range c.prevGroupPrivs {
+			if prev.priv.Verify(digest, sha, f.GroupSignature) {
+				found = true
+				tag, ok = c.groupPriv.Open(f.GroupSignature)
+				break
+			}
+		}
+		if !found {
+			c.log.Errorf("Received message with bad group signature!")
+			return
+		}
+	}
+	if !ok {
+		c.log.Errorf("Failed to open group signature!")
+		return
+	}
+
+	var from *Contact
+NextCandidate:
+	for _, candidate := range c.contacts {
+		if bytes.Equal(tag, candidate.groupKey.Tag()) {
+			from = candidate
+			break
+		}
+		for _, prevTag := range candidate.previousTags {
+			if bytes.Equal(tag, prevTag.tag) {
+				from = candidate
+				break NextCandidate
+			}
+		}
+	}
+
+	if from == nil {
+		c.log.Errorf("Message from unknown contact. Dropping. Tag: %x", tag)
+		return
+	}
+
+	if from.revoked {
+		// It's possible that there were pending messages from the
+		// contact when we revoked them.
+		c.log.Errorf("Message from revoked contact %s. Dropping", from.name)
+		return
+	}
+
+	if len(f.Message) < box.Overhead+24 {
+		c.logEvent(from, "Message too small to process")
+		return
+	}
+
+	inboxMsg := &InboxMessage{
+		id:           c.randId(),
+		receivedTime: time.Now(),
+		from:         from.id,
+		sealed:       f.Message,
+	}
+
+	if !from.isPending {
+		if !c.unsealMessage(inboxMsg, from) || len(inboxMsg.message.Body) == 0 {
+			return
+		}
+	}
+
+	c.inbox = append(c.inbox, inboxMsg)
+	c.ui.processFetch(inboxMsg)
+	c.save()
+
+	c.receiveHook()
+}
+
+func (c *client) processServerAnnounce(m NewMessage) {
+	inboxMsg := &InboxMessage{
+		id:           c.randId(),
+		receivedTime: time.Now(),
+		from:         0,
+		message:      m.announce.Message,
+	}
+
+	c.inbox = append(c.inbox, inboxMsg)
+	c.ui.processServerAnnounce(inboxMsg)
+
+	c.save()
+}
+
+func (c *client) unsealMessage(inboxMsg *InboxMessage, from *Contact) bool {
+	if from.isPending {
+		panic("was asked to unseal message from pending contact")
+	}
+
+	sealed := inboxMsg.sealed
+	plaintext, err := decryptMessage(sealed, from)
+
+	if err != nil {
+		c.logEvent(from, "Failed to decrypt message: "+err.Error())
+		return false
+	}
+
+	if len(plaintext) < 4 {
+		c.logEvent(from, "Plaintext too small to process")
+		return false
+	}
+
+	mLen := int(binary.LittleEndian.Uint32(plaintext[:4]))
+	plaintext = plaintext[4:]
+	if mLen < 0 || mLen > len(plaintext) {
+		c.logEvent(from, fmt.Sprintf("Plaintext length incorrect: %d", mLen))
+		return false
+	}
+	plaintext = plaintext[:mLen]
+
+	msg := new(pond.Message)
+	if err := proto.Unmarshal(plaintext, msg); err != nil {
+		c.logEvent(from, "Failed to parse message: "+err.Error())
+		return false
+	}
+
+	// Check for duplicate message.
+	for _, candidate := range c.inbox {
+		if candidate.from == from.id &&
+			candidate.id != inboxMsg.id &&
+			candidate.message != nil &&
+			*candidate.message.Id == *msg.Id {
+			c.log.Printf("Dropping duplicate message from %s", from.name)
+			return false
+		}
+	}
+
+	if from.ratchet == nil {
+		if l := len(msg.MyNextDh); l != len(from.theirCurrentDHPublic) {
+			c.logEvent(from, fmt.Sprintf("Bad Diffie-Hellman value length: %d", l))
+			return false
+		}
+
+		if !bytes.Equal(from.theirCurrentDHPublic[:], msg.MyNextDh) {
+			// We have a new DH value from them.
+			copy(from.theirLastDHPublic[:], from.theirCurrentDHPublic[:])
+			copy(from.theirCurrentDHPublic[:], msg.MyNextDh)
+		}
+	}
+
+	var ackedIds []uint64
+	ackedIds = append(ackedIds, msg.AlsoAck...)
+	if msg.InReplyTo != nil {
+		ackedIds = append(ackedIds, *msg.InReplyTo)
+	}
+
+	var now time.Time
+	if len(ackedIds) > 0 {
+		now = time.Now()
+	}
+
+	for _, ackedId := range ackedIds {
+		for _, candidate := range c.outbox {
+			if candidate.id == ackedId {
+				candidate.acked = now
+				c.ui.processAcknowledgement(candidate)
+				break
+			}
+		}
+	}
+
+	if msg.SupportedVersion != nil {
+		from.supportedVersion = *msg.SupportedVersion
+	}
+
+	from.kxsBytes = nil
+	inboxMsg.message = msg
+	inboxMsg.sealed = nil
+	inboxMsg.read = false
+
+	return true
+}
+
+func (c *client) processMessageSent(msr messageSendResult) {
+	var msg *queuedMessage
+	for _, m := range c.outbox {
+		if m.id == msr.id {
+			msg = m
+			break
+		}
+	}
+
+	if msg == nil {
+		// Message might have been deleted while sending.
+		return
+	}
+
+	if msr.revocation != nil {
+		// We tried to deliver a message to a user but the server told
+		// us that there's a pending revocation.
+		to := c.contacts[msg.to]
+
+		for revNum := 0; !to.revokedUs; revNum++ {
+			var rev *pond.SignedRevocation
+			if revNum == 0 {
+				rev = msr.revocation
+			} else {
+				if n := revNum - 1; n < len(msr.extraRevocations) {
+					rev = msr.extraRevocations[n]
+				} else {
+					break
+				}
+			}
+
+			if gen := *rev.Revocation.Generation; gen != to.generation {
+				c.log.Printf("Message to '%s' resulted in revocation for generation %d, but current generation is %d", to.name, gen, to.generation)
+				return
+			}
+
+			// Check the signature on the revocation.
+			revBytes, err := proto.Marshal(rev.Revocation)
+			if err != nil {
+				c.log.Printf("Failed to marshal revocation message: %s", err)
+				return
+			}
+
+			var sig [ed25519.SignatureSize]byte
+			if revSig := rev.Signature; copy(sig[:], revSig) != len(sig) {
+				c.log.Printf("Bad signature length on revocation (%d bytes) from %s", len(revSig), to.name)
+				return
+			}
+
+			var signed []byte
+			signed = append(signed, revocationSignaturePrefix...)
+			signed = append(signed, revBytes...)
+			if !ed25519.Verify(&to.theirPub, signed, &sig) {
+				c.log.Printf("Bad signature on revocation from %s", to.name)
+				return
+			}
+			bbsRev, ok := new(bbssig.Revocation).Unmarshal(rev.Revocation.Revocation)
+			if !ok {
+				c.log.Printf("Failed to parse revocation from %s", to.name)
+				return
+			}
+			to.generation++
+			if !to.myGroupKey.Update(bbsRev) {
+				// We were revoked.
+				to.revokedUs = true
+				// Further revocations will not be applied
+				// because the loop conditional is false now.
+				c.log.Printf("Revoked by %s", to.name)
+				c.ui.processRevocationOfUs(to)
+
+				// Mark all pending messages to this contact as
+				// undeliverable.
+				newQueue := make([]*queuedMessage, 0, len(c.queue))
+				c.queueMutex.Lock()
+				for _, m := range c.queue {
+					if m.to != msg.to {
+						newQueue = append(newQueue, m)
+					}
+				}
+				c.queue = newQueue
+				c.queueMutex.Unlock()
+			} else {
+				to.myGroupKey.Group.Update(bbsRev)
+				// Outgoing messages will be resigned when the network
+				// goroutine next attempts to send them.
+			}
+
+			c.ui.processRevocation(to)
+		}
+
+		return
+	}
+
+	msg.sent = time.Now()
+	if msg.revocation {
+		c.deleteOutboxMsg(msg.id)
+		c.ui.removeOutboxMessageUI(msg)
+	} else {
+		c.ui.processMessageDelivered(msg)
+	}
+	c.save()
+}
+
+func decodeBase32(s string) ([]byte, error) {
+	for len(s)%8 != 0 {
+		s += "="
+	}
+	return base32.StdEncoding.DecodeString(s)
+}
+
+func replyToError(reply *pond.Reply) error {
+	if reply.Status == nil || *reply.Status == pond.Reply_OK {
+		return nil
+	}
+	if msg, ok := pond.Reply_Status_name[int32(*reply.Status)]; ok {
+		return errors.New("error from server: " + msg)
+	}
+	return errors.New("unknown error from server: " + strconv.Itoa(int(*reply.Status)))
+}
+
+func parseServer(server string, testing bool) (serverIdentity *[32]byte, host string, err error) {
+	url, err := url.Parse(server)
+	if err != nil {
+		return
+	}
+	if url.Scheme != "pondserver" {
+		err = errors.New("bad URL scheme, should be pondserver")
+		return
+	}
+	if url.User == nil || len(url.User.Username()) == 0 {
+		err = errors.New("no server ID in URL")
+		return
+	}
+	serverIdSlice, err := decodeBase32(url.User.Username())
+	if err != nil {
+		return
+	}
+	if len(serverIdSlice) != 32 {
+		err = errors.New("bad server ID length")
+		return
+	}
+
+	host = url.Host
+	if !testing {
+		if strings.ContainsRune(host, ':') {
+			err = errors.New("URL contains a port number")
+			return
+		}
+		if !strings.HasSuffix(host, ".onion") {
+			err = errors.New("host is not a .onion address")
+			return
+		}
+		host += ":16333"
+	}
+
+	serverIdentity = new([32]byte)
+	copy(serverIdentity[:], serverIdSlice)
+	return
+}
+
+func (c *client) torDialer() proxy.Dialer {
+	// We generate a random username so that Tor will decouple all of our
+	// connections.
+	var userBytes [8]byte
+	c.randBytes(userBytes[:])
+	auth := proxy.Auth{
+		User:     base32.StdEncoding.EncodeToString(userBytes[:]),
+		Password: "password",
+	}
+	dialer, err := proxy.SOCKS5("tcp", c.torAddress, &auth, proxy.Direct)
+	if err != nil {
+		panic(err)
+	}
+	return dialer
+}
+
+func (c *client) dialServer(server string, useRandomIdentity bool) (*transport.Conn, error) {
+	identity := &c.identity
+	identityPublic := &c.identityPublic
+	if useRandomIdentity {
+		var randomIdentity [32]byte
+		c.randBytes(randomIdentity[:])
+
+		var randomIdentityPublic [32]byte
+		curve25519.ScalarBaseMult(&randomIdentityPublic, &randomIdentity)
+
+		identity = &randomIdentity
+		identityPublic = &randomIdentityPublic
+	}
+
+	serverIdentity, host, err := parseServer(server, c.dev)
+	if err != nil {
+		return nil, err
+	}
+	var tor proxy.Dialer
+	if c.dev {
+		tor = proxy.Direct
+	} else {
+		tor = c.torDialer()
+	}
+	rawConn, err := tor.Dial("tcp", host)
+	if err != nil {
+		return nil, err
+	}
+	// Sometimes Tor holds the connection open but we never receive
+	// anything so we add a 60 second deadline.
+	rawConn.SetDeadline(time.Now().Add(60 * time.Second))
+	conn := transport.NewClient(rawConn, identity, identityPublic, serverIdentity)
+	if err := conn.Handshake(); err != nil {
+		return nil, err
+	}
+	return conn, nil
+}
+
+func (c *client) doCreateAccount(displayMsg func(string)) error {
+	_, _, err := parseServer(c.server, c.dev)
+	if err != nil {
+		return err
+	}
+
+	if !c.dev {
+		// Check that Tor is running.
+		testConn, err := net.Dial("tcp", c.torAddress)
+		if err != nil {
+			return errors.New("Failed to connect to local Tor: " + err.Error())
+		}
+		testConn.Close()
+	}
+
+	displayMsg("Connecting...")
+
+	conn, err := c.dialServer(c.server, false)
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+
+	displayMsg("Requesting new account...")
+
+	c.generation = uint32(c.randId())
+
+	request := new(pond.Request)
+	request.NewAccount = &pond.NewAccount{
+		Generation: proto.Uint32(c.generation),
+		Group:      c.groupPriv.Group.Marshal(),
+	}
+	if err := conn.WriteProto(request); err != nil {
+		return err
+	}
+
+	reply := new(pond.Reply)
+	if err := conn.ReadProto(reply); err != nil {
+		return err
+	}
+	if err := replyToError(reply); err != nil {
+		return err
+	}
+
+	displayMsg("Done")
+
+	return nil
+}
+
+// transactionRateSeconds is the mean of the exponential distribution that
+// we'll sample in order to distribute the time between our network
+// connections.
+const transactionRateSeconds = 300 // five minutes
+
+func (c *client) transact() {
+	startup := true
+
+	var ackChan chan bool
+	var head *queuedMessage
+	lastWasSend := false
+
+	for {
+		if head != nil {
+			// We failed to send a message.
+			c.queueMutex.Lock()
+			head.sending = false
+			c.queueMutex.Unlock()
+			head = nil
+		}
+
+		if !startup || !c.autoFetch {
+			if ackChan != nil {
+				ackChan <- true
+				ackChan = nil
+			}
+
+			var timerChan <-chan time.Time
+			if c.autoFetch {
+				var seedBytes [8]byte
+				c.randBytes(seedBytes[:])
+				seed := int64(binary.LittleEndian.Uint64(seedBytes[:]))
+				r := mrand.New(mrand.NewSource(seed))
+				delaySeconds := r.ExpFloat64() * transactionRateSeconds
+				if c.dev {
+					delaySeconds = 5
+				}
+				delay := time.Duration(delaySeconds*1000) * time.Millisecond
+				c.log.Printf("Next network transaction in %s seconds", delay)
+				timerChan = time.After(delay)
+			}
+
+			var ok bool
+			select {
+			case ackChan, ok = <-c.fetchNowChan:
+				if !ok {
+					return
+				}
+				c.log.Printf("Starting fetch because of fetchNow signal")
+			case <-timerChan:
+				c.log.Printf("Starting fetch because of timer")
+			}
+		}
+		startup = false
+
+		var req *pond.Request
+		var server string
+
+		useAnonymousIdentity := true
+		isFetch := false
+		c.queueMutex.Lock()
+		if (!c.testing && lastWasSend) || len(c.queue) == 0 {
+			useAnonymousIdentity = false
+			isFetch = true
+			req = &pond.Request{Fetch: &pond.Fetch{}}
+			server = c.server
+			c.log.Printf("Starting fetch from home server")
+			lastWasSend = false
+		} else {
+			head = c.queue[0]
+			head.sending = true
+			req = head.request
+			server = head.server
+			c.log.Printf("Starting message transmission to %s", server)
+
+			if head.revocation {
+				useAnonymousIdentity = false
+			}
+			lastWasSend = true
+		}
+		c.queueMutex.Unlock()
+
+		// Poke the UI thread so that it knows that a message has
+		// started sending.
+		c.messageSentChan <- messageSendResult{}
+
+		sendRecv := func() (*pond.Reply, bool) {
+			conn, err := c.dialServer(server, useAnonymousIdentity)
+			if err != nil {
+				c.log.Printf("Failed to connect to %s: %s", server, err)
+				return nil, false
+			}
+			defer conn.Close()
+
+			if lastWasSend && req == nil {
+				resultChan := make(chan *pond.Request, 1)
+				c.signingRequestChan <- signingRequest{head, resultChan}
+				req = <-resultChan
+				if req == nil {
+					return nil, false
+				}
+			}
+
+			if err := conn.WriteProto(req); err != nil {
+				c.log.Printf("Failed to send to %s: %s", server, err)
+				return nil, false
+			}
+
+			reply := new(pond.Reply)
+			if err := conn.ReadProto(reply); err != nil {
+				c.log.Printf("Failed to read from %s: %s", server, err)
+				return nil, false
+			}
+
+			return reply, true
+		}
+
+		reply, ok := sendRecv()
+		if !ok {
+			if !isFetch {
+				c.queueMutex.Lock()
+				c.moveContactsMessagesToEndOfQueue(head.to)
+				c.queueMutex.Unlock()
+			}
+			continue
+		}
+
+		if !isFetch {
+			c.queueMutex.Lock()
+			// Find the index of the message that we just sent (if any) in
+			// the queue. It should be at the front, but something
+			// may have happened while we didn't hold the lock.
+			indexOfSentMessage := c.indexOfQueuedMessage(head)
+
+			// If we sent a message that was removed from the queue while
+			// we were processing it then ignore any result.
+			if indexOfSentMessage == -1 {
+				continue
+			}
+
+			head.sending = false
+
+			if reply.Status == nil {
+				c.removeQueuedMessage(indexOfSentMessage)
+				c.queueMutex.Unlock()
+				c.messageSentChan <- messageSendResult{id: head.id}
+			} else {
+				c.moveContactsMessagesToEndOfQueue(head.to)
+				c.queueMutex.Unlock()
+
+				if *reply.Status == pond.Reply_GENERATION_REVOKED && reply.Revocation != nil {
+					c.messageSentChan <- messageSendResult{id: head.id, revocation: reply.Revocation, extraRevocations: reply.ExtraRevocations}
+				}
+			}
+
+			head = nil
+		} else if reply.Fetched != nil || reply.Announce != nil {
+			ackChan := make(chan bool)
+			c.newMessageChan <- NewMessage{reply.Fetched, reply.Announce, ackChan}
+			<-ackChan
+		}
+
+		if err := replyToError(reply); err != nil {
+			c.log.Errorf("Error from server %s: %s", server, err)
+			continue
+		}
+	}
+}
+
+// detachmentTransfer is the interface to either an upload or download so that
+// the code for moving the bytes can be shared between them.
+type detachmentTransfer interface {
+	// Request returns the request that should be sent to the server.
+	Request() *pond.Request
+	// ProcessReply returns a file to read/write from, the starting offset
+	// for the transfer and the total size of the file. The file will
+	// already have been positioned correctly.
+	ProcessReply(*pond.Reply) (file *os.File, isUpload bool, offset, total int64, isComplete bool, err error)
+	// Complete is called once the bytes have been transfered. It trues true on success.
+	Complete(conn *transport.Conn) bool
+}
+
+type uploadTransfer struct {
+	id    uint64
+	file  *os.File
+	total int64
+}
+
+func (ut uploadTransfer) Request() *pond.Request {
+	return &pond.Request{
+		Upload: &pond.Upload{
+			Id:   proto.Uint64(ut.id),
+			Size: proto.Int64(ut.total),
+		},
+	}
+}
+
+func (ut uploadTransfer) ProcessReply(reply *pond.Reply) (file *os.File, isUpload bool, offset, total int64, isComplete bool, err error) {
+	if reply.Upload != nil && reply.Upload.Resume != nil {
+		offset = *reply.Upload.Resume
+	}
+
+	if offset == ut.total {
+		isComplete = true
+		return
+	}
+	if offset > ut.total {
+		err = fmt.Errorf("offset from server is greater than the length of the file: %d vs %d", offset, ut.total)
+		return
+	}
+	pos, err := ut.file.Seek(offset, 0 /* from start */)
+	if err != nil || pos != offset {
+		err = fmt.Errorf("failed to seek in temp file: %d %d %s", pos, offset, err)
+		return
+	}
+
+	file = ut.file
+	isUpload = true
+	total = ut.total
+	return
+}
+
+func (ut uploadTransfer) Complete(conn *transport.Conn) bool {
+	// The server will send us a zero byte if it got everything.
+	buf := []byte{1}
+	io.ReadFull(conn, buf)
+	return buf[0] == 0
+}
+
+func (c *client) uploadDetachment(out chan interface{}, in *os.File, id uint64, killChan chan bool) error {
+	transfer := uploadTransfer{file: in, id: id}
+
+	fi, err := in.Stat()
+	if err != nil {
+		return err
+	}
+	transfer.total = fi.Size()
+
+	return c.transferDetachment(out, c.server, transfer, id, killChan)
+}
+
+type downloadTransfer struct {
+	fileID uint64
+	file   *os.File
+	resume int64
+	from   *[32]byte
+}
+
+func (dt *downloadTransfer) Request() *pond.Request {
+	pos, err := dt.file.Seek(0, 2 /* from end */)
+	if err == nil {
+		dt.resume = pos
+	} else {
+		dt.resume = 0
+	}
+
+	var resume *int64
+	if dt.resume > 0 {
+		resume = proto.Int64(dt.resume)
+	}
+
+	return &pond.Request{
+		Download: &pond.Download{
+			From:   dt.from[:],
+			Id:     proto.Uint64(dt.fileID),
+			Resume: resume,
+		},
+	}
+}
+
+func (dt *downloadTransfer) ProcessReply(reply *pond.Reply) (file *os.File, isUpload bool, offset, total int64, isComplete bool, err error) {
+	if reply.Download == nil {
+		err = errors.New("Reply from server didn't include a download section")
+		return
+	}
+
+	total = *reply.Download.Size
+	if total < dt.resume {
+		err = errors.New("Reply from server suggested that the file was truncated")
+		return
+	}
+
+	offset = dt.resume
+	file = dt.file
+	return
+}
+
+func (dt *downloadTransfer) Complete(conn *transport.Conn) bool {
+	return true
+}
+
+func (c *client) downloadDetachment(out chan interface{}, file *os.File, id uint64, downloadURL string, killChan chan bool) error {
+	c.log.Printf("Starting download of %s", downloadURL)
+	u, err := url.Parse(downloadURL)
+	if err != nil {
+		return errors.New("failed to parse download URL: " + err.Error())
+	}
+	if u.Scheme != "pondserver" {
+		return errors.New("download URL is a not a Pond URL")
+	}
+	path := u.Path
+	if len(path) == 0 {
+		return errors.New("download URL is missing a path")
+	}
+	path = path[1:]
+	parts := strings.Split(path, "/")
+	if len(parts) != 2 {
+		return errors.New("download URL has incorrect number of path elements")
+	}
+	fromSlice, err := hex.DecodeString(parts[0])
+	if err != nil {
+		return errors.New("failed to parse public identity from download URL: " + err.Error())
+	}
+	if len(fromSlice) != 32 {
+		return errors.New("public identity in download URL is wrong length")
+	}
+	var from [32]byte
+	copy(from[:], fromSlice)
+
+	fileID, err := strconv.ParseUint(parts[1], 16, 64)
+	if err != nil {
+		return errors.New("failed to parse download ID from URL: " + err.Error())
+	}
+
+	u.Path = ""
+	server := u.String()
+
+	transfer := &downloadTransfer{file: file, fileID: fileID, from: &from}
+
+	return c.transferDetachment(out, server, transfer, id, killChan)
+}
+
+// transferDetachmentConn transfers as much of a detachment as possible on a
+// single connection. It calls sendStatus repeatedly with the current state of
+// the transfer and watches killChan for an abort signal. It returns an error
+// and an indication of whether the error is fatal. If not fatatl then another
+// connection can be attempted in order to resume the transfer.
+func (c *client) transferDetachmentConn(sendStatus func(s string, done, total int64), conn *transport.Conn, transfer detachmentTransfer, killChan chan bool) (err error, fatal bool) {
+	defer conn.Close()
+
+	// transferred is the number of bytes that *this connection* has transferred.
+	// total is the full length of the file.
+	var startingOffset, transferred, total int64
+
+	sendStatus("Requesting transfer", 0, 0)
+	if err := conn.WriteProto(transfer.Request()); err != nil {
+		return fmt.Errorf("failed to write request: %s", err), false
+	}
+
+	reply := new(pond.Reply)
+	if err := conn.ReadProto(reply); err != nil {
+		return fmt.Errorf("failed to read reply: %s", err), false
+	}
+
+	if reply.Status != nil && *reply.Status == pond.Reply_RESUME_PAST_END_OF_FILE {
+		return nil, false
+	}
+
+	if err := replyToError(reply); err != nil {
+		if reply.GetStatus() == pond.Reply_OVER_QUOTA {
+			return fmt.Errorf("server reports that the upload would exceed allowed quota"), true
+		}
+		return fmt.Errorf("request failed: %s", err), false
+	}
+
+	var file *os.File
+	var isUpload, isComplete bool
+	if file, isUpload, startingOffset, total, isComplete, err = transfer.ProcessReply(reply); err != nil {
+		return fmt.Errorf("request failed: %s", err), false
+	}
+	if isComplete {
+		return nil, false
+	}
+	todo := total - startingOffset
+
+	var in io.Reader
+	var out io.Writer
+	if isUpload {
+		out = conn
+		in = file
+	} else {
+		out = file
+		in = conn
+	}
+
+	buf := make([]byte, 16*1024)
+	var lastUpdate time.Time
+
+	for transferred < todo {
+		select {
+		case <-killChan:
+			return backgroundCanceledError, true
+		default:
+			break
+		}
+
+		conn.SetDeadline(time.Now().Add(30 * time.Second))
+
+		n, err := in.Read(buf)
+		if err != nil {
+			if isUpload {
+				return fmt.Errorf("failed to read from disk: %s", err), true
+			}
+
+			return err, false
+		}
+
+		n, err = out.Write(buf[:n])
+		if err != nil {
+			if !isUpload {
+				return fmt.Errorf("failed to write to disk: %s", err), true
+			}
+
+			return err, false
+		}
+
+		transferred += int64(n)
+
+		if transferred > todo {
+			return errors.New("transferred more than the expected amount"), true
+		}
+		now := time.Now()
+		if lastUpdate.IsZero() || now.Sub(lastUpdate) > 10*time.Millisecond {
+			lastUpdate = now
+			sendStatus("", startingOffset+transferred, total)
+		}
+	}
+	sendStatus("", startingOffset+transferred, total)
+
+	if transferred < todo {
+		return errors.New("incomplete transfer"), false
+	}
+
+	if !transfer.Complete(conn) {
+		return errors.New("didn't receive confirmation from server"), false
+	}
+	return nil, false
+}
+
+func (c *client) transferDetachment(out chan interface{}, server string, transfer detachmentTransfer, id uint64, killChan chan bool) error {
+	sendStatus := func(s string, done, total int64) {
+		select {
+		case out <- DetachmentProgress{
+			id:     id,
+			done:   uint64(done),
+			total:  uint64(total),
+			status: s,
+		}:
+			break
+		default:
+		}
+	}
+
+	const initialBackoff = 10 * time.Second
+	const maxBackoff = 5 * time.Minute
+	backoff := initialBackoff
+
+	const maxTransientErrors = 15
+	transientErrors := 0
+
+	for transientErrors < maxTransientErrors {
+		sendStatus("Connecting", 0, 0)
+
+		conn, err := c.dialServer(server, false)
+		if err != nil {
+			c.log.Printf("Failed to connect to %s: %s", server, err)
+			sendStatus("Waiting to reconnect", 0, 0)
+
+			select {
+			case <-time.After(backoff):
+				break
+			case <-killChan:
+				return backgroundCanceledError
+			}
+			backoff *= 2
+			if backoff > maxBackoff {
+				backoff = maxBackoff
+			}
+			continue
+		}
+
+		backoff = initialBackoff
+		err, isFatal := c.transferDetachmentConn(sendStatus, conn, transfer, killChan)
+		if err == nil {
+			c.log.Printf("Completed transfer to/from %s", server)
+			return nil
+		}
+
+		if err == backgroundCanceledError {
+			return err
+		}
+
+		if isFatal {
+			err = fmt.Errorf("fatal error: %s", err)
+		} else {
+			transientErrors++
+			err = fmt.Errorf("transient error: %s", err)
+		}
+		c.log.Printf("While transferring to/from %s: %s", server, err)
+		if isFatal {
+			return err
+		}
+	}
+
+	err := errors.New("too many transient errors")
+	c.log.Printf("While tranferring to/from %s: %s", server, err)
+	return err
+}
diff --git a/client/nogtk.go b/client/nogtk.go
new file mode 100644
index 0000000..bc41a17
--- /dev/null
+++ b/client/nogtk.go
@@ -0,0 +1,23 @@
+// +build nogtk
+
+package main
+
+type GTKUI struct{}
+
+func NewGTKUI() *GTKUI { return &GTKUI{} }
+
+func (ui *GTKUI) Run() {
+	panic("not implemented")
+}
+
+func (ui *GTKUI) Actions() chan<- interface{} {
+	panic("not implemented")
+}
+
+func (ui *GTKUI) Events() <-chan interface{} {
+	panic("not implemented")
+}
+
+func (ui *GTKUI) Signal() {
+	panic("not implemented")
+}
diff --git a/client/pond.icns b/client/pond.icns
new file mode 100644
index 0000000..4321ba7
Binary files /dev/null and b/client/pond.icns differ
diff --git a/client/ratchet/ratchet.go b/client/ratchet/ratchet.go
new file mode 100644
index 0000000..bbed65a
--- /dev/null
+++ b/client/ratchet/ratchet.go
@@ -0,0 +1,623 @@
+// Package ratchet implements the axolotl ratchet, by Trevor Perrin. See
+// https://github.com/trevp/axolotl/wiki.
+package ratchet
+
+import (
+	"bytes"
+	"crypto/hmac"
+	"crypto/sha256"
+	"encoding/binary"
+	"errors"
+	"hash"
+	"io"
+	"time"
+
+	"github.com/agl/pond/client/disk"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/nacl/secretbox"
+)
+
+const (
+	// headerSize is the size, in bytes, of a header's plaintext contents.
+	headerSize = 4 /* uint32 message count */ +
+		4 /* uint32 previous message count */ +
+		32 /* curve25519 ratchet public */ +
+		24 /* nonce for message */
+	// sealedHeader is the size, in bytes, of an encrypted header.
+	sealedHeaderSize = 24 /* nonce */ + headerSize + secretbox.Overhead
+	// nonceInHeaderOffset is the offset of the message nonce in the
+	// header's plaintext.
+	nonceInHeaderOffset = 4 + 4 + 32
+	// maxMissingMessages is the maximum number of missing messages that
+	// we'll keep track of.
+	maxMissingMessages = 8
+)
+
+// Ratchet contains the per-contact, crypto state.
+type Ratchet struct {
+	// MyIdentityPrivate and TheirIdentityPublic contain the primary,
+	// curve25519 identity keys. These are pointers because the canonical
+	// copies live in the client and Contact structs.
+	MyIdentityPrivate, TheirIdentityPublic *[32]byte
+	// MySigningPublic and TheirSigningPublic are Ed25519 keys. Again,
+	// these are pointers because the canonical versions are kept
+	// elsewhere.
+	MySigningPublic, TheirSigningPublic *[32]byte
+	// Now is an optional function that will be used to get the current
+	// time. If nil, time.Now is used.
+	Now func() time.Time
+
+	// rootKey gets updated by the DH ratchet.
+	rootKey [32]byte
+	// Header keys are used to encrypt message headers.
+	sendHeaderKey, recvHeaderKey         [32]byte
+	nextSendHeaderKey, nextRecvHeaderKey [32]byte
+	// Chain keys are used for forward secrecy updating.
+	sendChainKey, recvChainKey            [32]byte
+	sendRatchetPrivate, recvRatchetPublic [32]byte
+	sendCount, recvCount                  uint32
+	prevSendCount                         uint32
+	// ratchet is true if we will send a new ratchet value in the next message.
+	ratchet bool
+
+	// saved is a map from a header key to a map from sequence number to
+	// message key.
+	saved map[[32]byte]map[uint32]savedKey
+
+	// kxPrivate0 and kxPrivate1 contain curve25519 private values during
+	// the key exchange phase. They are not valid once key exchange has
+	// completed.
+	kxPrivate0, kxPrivate1 *[32]byte
+
+	// v2 is true if we are using the updated ratchet with better forward
+	// security properties.
+	v2 bool
+
+	rand io.Reader
+}
+
+// savedKey contains a message key and timestamp for a message which has not
+// been received. The timestamp comes from the message by which we learn of the
+// missing message.
+type savedKey struct {
+	key       [32]byte
+	timestamp time.Time
+}
+
+func (r *Ratchet) randBytes(buf []byte) {
+	if _, err := io.ReadFull(r.rand, buf); err != nil {
+		panic(err)
+	}
+}
+
+func New(rand io.Reader) *Ratchet {
+	r := &Ratchet{
+		rand:       rand,
+		kxPrivate0: new([32]byte),
+		kxPrivate1: new([32]byte),
+		saved:      make(map[[32]byte]map[uint32]savedKey),
+	}
+
+	r.randBytes(r.kxPrivate0[:])
+	r.randBytes(r.kxPrivate1[:])
+
+	return r
+}
+
+// FillKeyExchange sets elements of kx with key exchange information from the
+// ratchet.
+func (r *Ratchet) FillKeyExchange(kx *pond.KeyExchange) error {
+	if r.kxPrivate0 == nil || r.kxPrivate1 == nil {
+		return errors.New("ratchet: handshake already complete")
+	}
+
+	var public0, public1 [32]byte
+	curve25519.ScalarBaseMult(&public0, r.kxPrivate0)
+	curve25519.ScalarBaseMult(&public1, r.kxPrivate1)
+
+	kx.Dh = public0[:]
+	kx.Dh1 = public1[:]
+
+	return nil
+}
+
+// deriveKey takes an HMAC object and a label and calculates out = HMAC(k, label).
+func deriveKey(out *[32]byte, label []byte, h hash.Hash) {
+	h.Reset()
+	h.Write(label)
+	n := h.Sum(out[:0])
+	if &n[0] != &out[0] {
+		panic("hash function too large")
+	}
+}
+
+// These constants are used as the label argument to deriveKey to derive
+// independent keys from a master key.
+var (
+	chainKeyLabel          = []byte("chain key")
+	headerKeyLabel         = []byte("header key")
+	nextRecvHeaderKeyLabel = []byte("next receive header key")
+	rootKeyLabel           = []byte("root key")
+	rootKeyUpdateLabel     = []byte("root key update")
+	sendHeaderKeyLabel     = []byte("next send header key")
+	messageKeyLabel        = []byte("message key")
+	chainKeyStepLabel      = []byte("chain key step")
+)
+
+// GetKXPrivateForTransition returns the DH private key used in the key
+// exchange. This exists in order to support the transition to the new ratchet
+// format.
+func (r *Ratchet) GetKXPrivateForTransition() [32]byte {
+	return *r.kxPrivate0
+}
+
+// CompleteKeyExchange takes a KeyExchange message from the other party and
+// establishes the ratchet.
+func (r *Ratchet) CompleteKeyExchange(kx *pond.KeyExchange, isV2 bool) error {
+	if r.kxPrivate0 == nil {
+		return errors.New("ratchet: handshake already complete")
+	}
+
+	var public0 [32]byte
+	curve25519.ScalarBaseMult(&public0, r.kxPrivate0)
+
+	if len(kx.Dh) != len(public0) {
+		return errors.New("ratchet: peer's key exchange is invalid")
+	}
+	if len(kx.Dh1) != len(public0) {
+		return errors.New("ratchet: peer using old-form key exchange")
+	}
+
+	var amAlice bool
+	switch bytes.Compare(public0[:], kx.Dh) {
+	case -1:
+		amAlice = true
+	case 1:
+		amAlice = false
+	case 0:
+		return errors.New("ratchet: peer echoed our own DH values back")
+	}
+
+	var theirDH [32]byte
+	copy(theirDH[:], kx.Dh)
+
+	keyMaterial := make([]byte, 0, 32*5)
+	var sharedKey [32]byte
+	curve25519.ScalarMult(&sharedKey, r.kxPrivate0, &theirDH)
+	keyMaterial = append(keyMaterial, sharedKey[:]...)
+
+	if amAlice {
+		curve25519.ScalarMult(&sharedKey, r.MyIdentityPrivate, &theirDH)
+		keyMaterial = append(keyMaterial, sharedKey[:]...)
+		curve25519.ScalarMult(&sharedKey, r.kxPrivate0, r.TheirIdentityPublic)
+		keyMaterial = append(keyMaterial, sharedKey[:]...)
+		if !isV2 {
+			keyMaterial = append(keyMaterial, r.MySigningPublic[:]...)
+			keyMaterial = append(keyMaterial, r.TheirSigningPublic[:]...)
+		}
+	} else {
+		curve25519.ScalarMult(&sharedKey, r.kxPrivate0, r.TheirIdentityPublic)
+		keyMaterial = append(keyMaterial, sharedKey[:]...)
+		curve25519.ScalarMult(&sharedKey, r.MyIdentityPrivate, &theirDH)
+		keyMaterial = append(keyMaterial, sharedKey[:]...)
+		if !isV2 {
+			keyMaterial = append(keyMaterial, r.TheirSigningPublic[:]...)
+			keyMaterial = append(keyMaterial, r.MySigningPublic[:]...)
+		}
+	}
+
+	h := hmac.New(sha256.New, keyMaterial)
+	deriveKey(&r.rootKey, rootKeyLabel, h)
+	if amAlice {
+		deriveKey(&r.recvHeaderKey, headerKeyLabel, h)
+		deriveKey(&r.nextSendHeaderKey, sendHeaderKeyLabel, h)
+		deriveKey(&r.nextRecvHeaderKey, nextRecvHeaderKeyLabel, h)
+		deriveKey(&r.recvChainKey, chainKeyLabel, h)
+		copy(r.recvRatchetPublic[:], kx.Dh1)
+	} else {
+		deriveKey(&r.sendHeaderKey, headerKeyLabel, h)
+		deriveKey(&r.nextRecvHeaderKey, sendHeaderKeyLabel, h)
+		deriveKey(&r.nextSendHeaderKey, nextRecvHeaderKeyLabel, h)
+		deriveKey(&r.sendChainKey, chainKeyLabel, h)
+		copy(r.sendRatchetPrivate[:], r.kxPrivate1[:])
+	}
+
+	r.ratchet = amAlice
+	r.kxPrivate0 = nil
+	r.kxPrivate1 = nil
+	r.v2 = isV2
+
+	return nil
+}
+
+// Encrypt acts like append() but appends an encrypted version of msg to out.
+func (r *Ratchet) Encrypt(out, msg []byte) []byte {
+	if r.ratchet {
+		r.randBytes(r.sendRatchetPrivate[:])
+		copy(r.sendHeaderKey[:], r.nextSendHeaderKey[:])
+
+		var sharedKey, keyMaterial [32]byte
+		curve25519.ScalarMult(&sharedKey, &r.sendRatchetPrivate, &r.recvRatchetPublic)
+		sha := sha256.New()
+		sha.Write(rootKeyUpdateLabel)
+		sha.Write(r.rootKey[:])
+		sha.Write(sharedKey[:])
+
+		if r.v2 {
+			sha.Sum(keyMaterial[:0])
+			h := hmac.New(sha256.New, keyMaterial[:])
+			deriveKey(&r.rootKey, rootKeyLabel, h)
+			deriveKey(&r.nextSendHeaderKey, sendHeaderKeyLabel, h)
+			deriveKey(&r.sendChainKey, chainKeyLabel, h)
+		} else {
+			sha.Sum(r.rootKey[:0])
+			h := hmac.New(sha256.New, r.rootKey[:])
+			deriveKey(&r.nextSendHeaderKey, sendHeaderKeyLabel, h)
+			deriveKey(&r.sendChainKey, chainKeyLabel, h)
+		}
+		r.prevSendCount, r.sendCount = r.sendCount, 0
+		r.ratchet = false
+	}
+
+	h := hmac.New(sha256.New, r.sendChainKey[:])
+	var messageKey [32]byte
+	deriveKey(&messageKey, messageKeyLabel, h)
+	deriveKey(&r.sendChainKey, chainKeyStepLabel, h)
+
+	var sendRatchetPublic [32]byte
+	curve25519.ScalarBaseMult(&sendRatchetPublic, &r.sendRatchetPrivate)
+	var header [headerSize]byte
+	var headerNonce, messageNonce [24]byte
+	r.randBytes(headerNonce[:])
+	r.randBytes(messageNonce[:])
+
+	binary.LittleEndian.PutUint32(header[0:4], r.sendCount)
+	binary.LittleEndian.PutUint32(header[4:8], r.prevSendCount)
+	copy(header[8:], sendRatchetPublic[:])
+	copy(header[nonceInHeaderOffset:], messageNonce[:])
+	out = append(out, headerNonce[:]...)
+	out = secretbox.Seal(out, header[:], &headerNonce, &r.sendHeaderKey)
+	r.sendCount++
+	return secretbox.Seal(out, msg, &messageNonce, &messageKey)
+}
+
+// trySavedKeys tries to decrypt ciphertext using keys saved for missing messages.
+func (r *Ratchet) trySavedKeys(ciphertext []byte) ([]byte, error) {
+	if len(ciphertext) < sealedHeaderSize {
+		return nil, errors.New("ratchet: header too small to be valid")
+	}
+
+	sealedHeader := ciphertext[:sealedHeaderSize]
+	var nonce [24]byte
+	copy(nonce[:], sealedHeader)
+	sealedHeader = sealedHeader[len(nonce):]
+
+	for headerKey, messageKeys := range r.saved {
+		header, ok := secretbox.Open(nil, sealedHeader, &nonce, &headerKey)
+		if !ok {
+			continue
+		}
+		if len(header) != headerSize {
+			continue
+		}
+		msgNum := binary.LittleEndian.Uint32(header[:4])
+		msgKey, ok := messageKeys[msgNum]
+		if !ok {
+			// This is a fairly common case: the message key might
+			// not have been saved because it's the next message
+			// key.
+			return nil, nil
+		}
+
+		sealedMessage := ciphertext[sealedHeaderSize:]
+		copy(nonce[:], header[nonceInHeaderOffset:])
+		msg, ok := secretbox.Open(nil, sealedMessage, &nonce, &msgKey.key)
+		if !ok {
+			return nil, errors.New("ratchet: corrupt message")
+		}
+		delete(messageKeys, msgNum)
+		if len(messageKeys) == 0 {
+			delete(r.saved, headerKey)
+		}
+		return msg, nil
+	}
+
+	return nil, nil
+}
+
+// saveKeys takes a header key, the current chain key, a received message
+// number and the expected message number and advances the chain key as needed.
+// It returns the message key for given given message number and the new chain
+// key. If any messages have been skipped over, it also returns savedKeys, a
+// map suitable for merging with r.saved, that contains the message keys for
+// the missing messages.
+func (r *Ratchet) saveKeys(headerKey, recvChainKey *[32]byte, messageNum, receivedCount uint32) (provisionalChainKey, messageKey [32]byte, savedKeys map[[32]byte]map[uint32]savedKey, err error) {
+	if messageNum < receivedCount {
+		// This is a message from the past, but we didn't have a saved
+		// key for it, which means that it's a duplicate message or we
+		// expired the save key.
+		err = errors.New("ratchet: duplicate message or message delayed longer than tolerance")
+		return
+	}
+
+	missingMessages := messageNum - receivedCount
+	if missingMessages > maxMissingMessages {
+		err = errors.New("ratchet: message exceeds reordering limit")
+		return
+	}
+
+	// messageKeys maps from message number to message key.
+	var messageKeys map[uint32]savedKey
+	var now time.Time
+	if missingMessages > 0 {
+		messageKeys = make(map[uint32]savedKey)
+		if r.Now == nil {
+			now = time.Now()
+		} else {
+			now = r.Now()
+		}
+	}
+
+	copy(provisionalChainKey[:], recvChainKey[:])
+
+	for n := receivedCount; n <= messageNum; n++ {
+		h := hmac.New(sha256.New, provisionalChainKey[:])
+		deriveKey(&messageKey, messageKeyLabel, h)
+		deriveKey(&provisionalChainKey, chainKeyStepLabel, h)
+		if n < messageNum {
+			messageKeys[n] = savedKey{messageKey, now}
+		}
+	}
+
+	if messageKeys != nil {
+		savedKeys = make(map[[32]byte]map[uint32]savedKey)
+		savedKeys[*headerKey] = messageKeys
+	}
+
+	return
+}
+
+// mergeSavedKeys takes a map of saved message keys from saveKeys and merges it
+// into r.saved.
+func (r *Ratchet) mergeSavedKeys(newKeys map[[32]byte]map[uint32]savedKey) {
+	for headerKey, newMessageKeys := range newKeys {
+		messageKeys, ok := r.saved[headerKey]
+		if !ok {
+			r.saved[headerKey] = newMessageKeys
+			continue
+		}
+
+		for n, messageKey := range newMessageKeys {
+			messageKeys[n] = messageKey
+		}
+	}
+}
+
+// isZeroKey returns true if key is all zeros.
+func isZeroKey(key *[32]byte) bool {
+	var x uint8
+	for _, v := range key {
+		x |= v
+	}
+
+	return x == 0
+}
+
+func (r *Ratchet) Decrypt(ciphertext []byte) ([]byte, error) {
+	msg, err := r.trySavedKeys(ciphertext)
+	if err != nil || msg != nil {
+		return msg, err
+	}
+
+	sealedHeader := ciphertext[:sealedHeaderSize]
+	sealedMessage := ciphertext[sealedHeaderSize:]
+	var nonce [24]byte
+	copy(nonce[:], sealedHeader)
+	sealedHeader = sealedHeader[len(nonce):]
+
+	header, ok := secretbox.Open(nil, sealedHeader, &nonce, &r.recvHeaderKey)
+	ok = ok && !isZeroKey(&r.recvHeaderKey)
+	if ok {
+		if len(header) != headerSize {
+			return nil, errors.New("ratchet: incorrect header size")
+		}
+		messageNum := binary.LittleEndian.Uint32(header[:4])
+		provisionalChainKey, messageKey, savedKeys, err := r.saveKeys(&r.recvHeaderKey, &r.recvChainKey, messageNum, r.recvCount)
+		if err != nil {
+			return nil, err
+		}
+
+		copy(nonce[:], header[nonceInHeaderOffset:])
+		msg, ok := secretbox.Open(nil, sealedMessage, &nonce, &messageKey)
+		if !ok {
+			return nil, errors.New("ratchet: corrupt message")
+		}
+
+		copy(r.recvChainKey[:], provisionalChainKey[:])
+		r.mergeSavedKeys(savedKeys)
+		r.recvCount = messageNum + 1
+		return msg, nil
+	}
+
+	header, ok = secretbox.Open(nil, sealedHeader, &nonce, &r.nextRecvHeaderKey)
+	if !ok {
+		return nil, errors.New("ratchet: cannot decrypt")
+	}
+	if len(header) != headerSize {
+		return nil, errors.New("ratchet: incorrect header size")
+	}
+
+	if r.ratchet {
+		return nil, errors.New("ratchet: received message encrypted to next header key without ratchet flag set")
+	}
+
+	messageNum := binary.LittleEndian.Uint32(header[:4])
+	prevMessageCount := binary.LittleEndian.Uint32(header[4:8])
+
+	_, _, oldSavedKeys, err := r.saveKeys(&r.recvHeaderKey, &r.recvChainKey, prevMessageCount, r.recvCount)
+	if err != nil {
+		return nil, err
+	}
+
+	var dhPublic, sharedKey, rootKey, chainKey, keyMaterial [32]byte
+	copy(dhPublic[:], header[8:])
+
+	curve25519.ScalarMult(&sharedKey, &r.sendRatchetPrivate, &dhPublic)
+
+	sha := sha256.New()
+	sha.Write(rootKeyUpdateLabel)
+	sha.Write(r.rootKey[:])
+	sha.Write(sharedKey[:])
+
+	var rootKeyHMAC hash.Hash
+
+	if r.v2 {
+		sha.Sum(keyMaterial[:0])
+		rootKeyHMAC = hmac.New(sha256.New, keyMaterial[:])
+		deriveKey(&rootKey, rootKeyLabel, rootKeyHMAC)
+	} else {
+		sha.Sum(rootKey[:0])
+		rootKeyHMAC = hmac.New(sha256.New, rootKey[:])
+	}
+	deriveKey(&chainKey, chainKeyLabel, rootKeyHMAC)
+
+	provisionalChainKey, messageKey, savedKeys, err := r.saveKeys(&r.nextRecvHeaderKey, &chainKey, messageNum, 0)
+	if err != nil {
+		return nil, err
+	}
+
+	copy(nonce[:], header[nonceInHeaderOffset:])
+	msg, ok = secretbox.Open(nil, sealedMessage, &nonce, &messageKey)
+	if !ok {
+		return nil, errors.New("ratchet: corrupt message")
+	}
+
+	copy(r.rootKey[:], rootKey[:])
+	copy(r.recvChainKey[:], provisionalChainKey[:])
+	copy(r.recvHeaderKey[:], r.nextRecvHeaderKey[:])
+	deriveKey(&r.nextRecvHeaderKey, sendHeaderKeyLabel, rootKeyHMAC)
+	for i := range r.sendRatchetPrivate {
+		r.sendRatchetPrivate[i] = 0
+	}
+	copy(r.recvRatchetPublic[:], dhPublic[:])
+
+	r.recvCount = messageNum + 1
+	r.mergeSavedKeys(oldSavedKeys)
+	r.mergeSavedKeys(savedKeys)
+	r.ratchet = true
+
+	return msg, nil
+}
+
+func dup(key *[32]byte) []byte {
+	if key == nil {
+		return nil
+	}
+
+	ret := make([]byte, 32)
+	copy(ret, key[:])
+	return ret
+}
+
+func (r *Ratchet) Marshal(now time.Time, lifetime time.Duration) *disk.RatchetState {
+	s := &disk.RatchetState{
+		RootKey:            dup(&r.rootKey),
+		SendHeaderKey:      dup(&r.sendHeaderKey),
+		RecvHeaderKey:      dup(&r.recvHeaderKey),
+		NextSendHeaderKey:  dup(&r.nextSendHeaderKey),
+		NextRecvHeaderKey:  dup(&r.nextRecvHeaderKey),
+		SendChainKey:       dup(&r.sendChainKey),
+		RecvChainKey:       dup(&r.recvChainKey),
+		SendRatchetPrivate: dup(&r.sendRatchetPrivate),
+		RecvRatchetPublic:  dup(&r.recvRatchetPublic),
+		SendCount:          proto.Uint32(r.sendCount),
+		RecvCount:          proto.Uint32(r.recvCount),
+		PrevSendCount:      proto.Uint32(r.prevSendCount),
+		Ratchet:            proto.Bool(r.ratchet),
+		Private0:           dup(r.kxPrivate0),
+		Private1:           dup(r.kxPrivate1),
+		V2:                 proto.Bool(r.v2),
+	}
+
+	for headerKey, messageKeys := range r.saved {
+		keys := make([]*disk.RatchetState_SavedKeys_MessageKey, 0, len(messageKeys))
+		for messageNum, savedKey := range messageKeys {
+			if now.Sub(savedKey.timestamp) > lifetime {
+				continue
+			}
+			keys = append(keys, &disk.RatchetState_SavedKeys_MessageKey{
+				Num:          proto.Uint32(messageNum),
+				Key:          dup(&savedKey.key),
+				CreationTime: proto.Int64(savedKey.timestamp.Unix()),
+			})
+		}
+		s.SavedKeys = append(s.SavedKeys, &disk.RatchetState_SavedKeys{
+			HeaderKey:   dup(&headerKey),
+			MessageKeys: keys,
+		})
+	}
+
+	return s
+}
+
+func unmarshalKey(dst *[32]byte, src []byte) bool {
+	if len(src) != 32 {
+		return false
+	}
+	copy(dst[:], src)
+	return true
+}
+
+var badSerialisedKeyLengthErr = errors.New("ratchet: bad serialised key length")
+
+func (r *Ratchet) Unmarshal(s *disk.RatchetState) error {
+	if !unmarshalKey(&r.rootKey, s.RootKey) ||
+		!unmarshalKey(&r.sendHeaderKey, s.SendHeaderKey) ||
+		!unmarshalKey(&r.recvHeaderKey, s.RecvHeaderKey) ||
+		!unmarshalKey(&r.nextSendHeaderKey, s.NextSendHeaderKey) ||
+		!unmarshalKey(&r.nextRecvHeaderKey, s.NextRecvHeaderKey) ||
+		!unmarshalKey(&r.sendChainKey, s.SendChainKey) ||
+		!unmarshalKey(&r.recvChainKey, s.RecvChainKey) ||
+		!unmarshalKey(&r.sendRatchetPrivate, s.SendRatchetPrivate) ||
+		!unmarshalKey(&r.recvRatchetPublic, s.RecvRatchetPublic) {
+		return badSerialisedKeyLengthErr
+	}
+
+	r.sendCount = *s.SendCount
+	r.recvCount = *s.RecvCount
+	r.prevSendCount = *s.PrevSendCount
+	r.ratchet = *s.Ratchet
+	r.v2 = s.GetV2()
+
+	if len(s.Private0) > 0 {
+		if !unmarshalKey(r.kxPrivate0, s.Private0) ||
+			!unmarshalKey(r.kxPrivate1, s.Private1) {
+			return badSerialisedKeyLengthErr
+		}
+	} else {
+		r.kxPrivate0 = nil
+		r.kxPrivate1 = nil
+	}
+
+	for _, saved := range s.SavedKeys {
+		var headerKey [32]byte
+		if !unmarshalKey(&headerKey, saved.HeaderKey) {
+			return badSerialisedKeyLengthErr
+		}
+		messageKeys := make(map[uint32]savedKey)
+		for _, messageKey := range saved.MessageKeys {
+			var savedKey savedKey
+			if !unmarshalKey(&savedKey.key, messageKey.Key) {
+				return badSerialisedKeyLengthErr
+			}
+			savedKey.timestamp = time.Unix(messageKey.GetCreationTime(), 0)
+			messageKeys[messageKey.GetNum()] = savedKey
+		}
+
+		r.saved[headerKey] = messageKeys
+	}
+
+	return nil
+}
diff --git a/client/ratchet/ratchet_test.go b/client/ratchet/ratchet_test.go
new file mode 100644
index 0000000..0808082
--- /dev/null
+++ b/client/ratchet/ratchet_test.go
@@ -0,0 +1,216 @@
+package ratchet
+
+import (
+	"bytes"
+	"crypto/rand"
+	"io"
+	"testing"
+	"time"
+
+	pond "github.com/agl/pond/protos"
+	"golang.org/x/crypto/curve25519"
+)
+
+func nowFunc() time.Time {
+	var t time.Time
+	return t
+}
+
+func pairedRatchet() (a, b *Ratchet) {
+	var privA, pubA, privB, pubB [32]byte
+	io.ReadFull(rand.Reader, privA[:])
+	io.ReadFull(rand.Reader, privB[:])
+	curve25519.ScalarBaseMult(&pubA, &privA)
+	curve25519.ScalarBaseMult(&pubB, &privB)
+
+	// These are the "Ed25519" public keys for the two parties. Of course,
+	// they're not actually valid Ed25519 keys but that doesn't matter
+	// here.
+	var aSigningPublic, bSigningPublic [32]byte
+	io.ReadFull(rand.Reader, aSigningPublic[:])
+	io.ReadFull(rand.Reader, bSigningPublic[:])
+
+	a, b = New(rand.Reader), New(rand.Reader)
+	a.Now = nowFunc
+	b.Now = nowFunc
+	a.MyIdentityPrivate = &privA
+	b.MyIdentityPrivate = &privB
+	a.TheirIdentityPublic = &pubB
+	b.TheirIdentityPublic = &pubA
+	a.MySigningPublic = &aSigningPublic
+	b.MySigningPublic = &bSigningPublic
+	a.TheirSigningPublic = &bSigningPublic
+	b.TheirSigningPublic = &aSigningPublic
+
+	kxA, kxB := new(pond.KeyExchange), new(pond.KeyExchange)
+	if err := a.FillKeyExchange(kxA); err != nil {
+		panic(err)
+	}
+	if err := b.FillKeyExchange(kxB); err != nil {
+		panic(err)
+	}
+	if err := a.CompleteKeyExchange(kxB, true); err != nil {
+		panic(err)
+	}
+	if err := b.CompleteKeyExchange(kxA, true); err != nil {
+		panic(err)
+	}
+
+	return
+}
+
+func TestExchange(t *testing.T) {
+	a, b := pairedRatchet()
+
+	msg := []byte("test message")
+	encrypted := a.Encrypt(nil, msg)
+	result, err := b.Decrypt(encrypted)
+	if err != nil {
+		t.Fatal(err)
+	}
+	if !bytes.Equal(msg, result) {
+		t.Fatalf("result doesn't match: %x vs %x", msg, result)
+	}
+}
+
+type scriptAction struct {
+	// object is one of sendA, sendB or sendDelayed. The first two options
+	// cause a message to be sent from one party to the other. The latter
+	// causes a previously delayed message, identified by id, to be
+	// delivered.
+	object int
+	// result is one of deliver, drop or delay. If delay, then the message
+	// is stored using the value in id. This value can be repeated later
+	// with a sendDelayed.
+	result int
+	id     int
+}
+
+const (
+	sendA = iota
+	sendB
+	sendDelayed
+	deliver
+	drop
+	delay
+)
+
+func reinitRatchet(t *testing.T, r *Ratchet) *Ratchet {
+	state := r.Marshal(nowFunc(), 1*time.Hour)
+	newR := New(rand.Reader)
+	newR.Now = nowFunc
+	newR.MyIdentityPrivate = r.MyIdentityPrivate
+	newR.TheirIdentityPublic = r.TheirIdentityPublic
+	newR.MySigningPublic = r.MySigningPublic
+	newR.TheirSigningPublic = r.TheirSigningPublic
+	if err := newR.Unmarshal(state); err != nil {
+		t.Fatalf("Failed to unmarshal: %s", err)
+	}
+
+	return newR
+
+}
+
+func testScript(t *testing.T, script []scriptAction) {
+	type delayedMessage struct {
+		msg       []byte
+		encrypted []byte
+		fromA     bool
+	}
+	delayedMessages := make(map[int]delayedMessage)
+	a, b := pairedRatchet()
+
+	for i, action := range script {
+		switch action.object {
+		case sendA, sendB:
+			sender, receiver := a, b
+			if action.object == sendB {
+				sender, receiver = receiver, sender
+			}
+
+			var msg [20]byte
+			rand.Reader.Read(msg[:])
+			encrypted := sender.Encrypt(nil, msg[:])
+
+			switch action.result {
+			case deliver:
+				result, err := receiver.Decrypt(encrypted)
+				if err != nil {
+					t.Fatalf("#%d: receiver returned error: %s", i, err)
+				}
+				if !bytes.Equal(result, msg[:]) {
+					t.Fatalf("#%d: bad message: got %x, not %x", i, result, msg[:])
+				}
+			case delay:
+				if _, ok := delayedMessages[action.id]; ok {
+					t.Fatalf("#%d: already have delayed message with id %d", i, action.id)
+				}
+				delayedMessages[action.id] = delayedMessage{msg[:], encrypted, sender == a}
+			case drop:
+			}
+		case sendDelayed:
+			delayed, ok := delayedMessages[action.id]
+			if !ok {
+				t.Fatalf("#%d: no such delayed message id: %d", i, action.id)
+			}
+
+			receiver := a
+			if delayed.fromA {
+				receiver = b
+			}
+
+			result, err := receiver.Decrypt(delayed.encrypted)
+			if err != nil {
+				t.Fatalf("#%d: receiver returned error: %s", i, err)
+			}
+			if !bytes.Equal(result, delayed.msg) {
+				t.Fatalf("#%d: bad message: got %x, not %x", i, result, delayed.msg)
+			}
+		}
+
+		a = reinitRatchet(t, a)
+		b = reinitRatchet(t, b)
+	}
+}
+
+func TestBackAndForth(t *testing.T) {
+	testScript(t, []scriptAction{
+		{sendA, deliver, -1},
+		{sendB, deliver, -1},
+		{sendA, deliver, -1},
+		{sendB, deliver, -1},
+		{sendA, deliver, -1},
+		{sendB, deliver, -1},
+	})
+}
+
+func TestReorder(t *testing.T) {
+	testScript(t, []scriptAction{
+		{sendA, deliver, -1},
+		{sendA, delay, 0},
+		{sendA, deliver, -1},
+		{sendDelayed, deliver, 0},
+	})
+}
+
+func TestReorderAfterRatchet(t *testing.T) {
+	testScript(t, []scriptAction{
+		{sendA, deliver, -1},
+		{sendA, delay, 0},
+		{sendB, deliver, -1},
+		{sendA, deliver, -1},
+		{sendB, deliver, -1},
+		{sendDelayed, deliver, 0},
+	})
+}
+
+func TestDrop(t *testing.T) {
+	testScript(t, []scriptAction{
+		{sendA, drop, -1},
+		{sendA, drop, -1},
+		{sendA, drop, -1},
+		{sendA, drop, -1},
+		{sendA, deliver, -1},
+		{sendB, deliver, -1},
+	})
+}
diff --git a/client/strings.go b/client/strings.go
new file mode 100644
index 0000000..ab9aa97
--- /dev/null
+++ b/client/strings.go
@@ -0,0 +1,11 @@
+package main
+
+const (
+	msgCreatePassphrase = "Pond keeps private keys, messages etc on disk for a limited amount of time and that information can be encrypted with a passphrase. If you are comfortable with the security of your home directory, this passphrase can be empty and you won't be prompted for it again. If you set a passphrase and forget it, it cannot be recovered. You will have to start afresh."
+	msgCreateAccount    = "In order to use Pond you have to have an account on a server. Servers may set their own account policies, but the default server allows anyone to create an account."
+
+	msgDefaultServer     = "pondserver://ICYUHSAYGIXTKYKXSAHIBWEAQCTEF26WUWEPOVC764WYELCJMUPA@jb644zapje5dvgk3.onion"
+	msgDefaultDevServer  = "pondserver://ZGL2WALCGXCKYBIHTWL5Q3TPCOEHSQB2XON5JHA2KHM5PJ3C7AFA@127.0.0.1:16333"
+	msgKeyPrompt         = "Please enter the passphrase used to encrypt Pond's state file. If you set a passphrase and forgot it, it cannot be recovered. You will have to start afresh."
+	msgIncorrectPassword = "Incorrect passphrase or corrupt state file"
+)
diff --git a/client/system/sys_darwin.go b/client/system/sys_darwin.go
new file mode 100644
index 0000000..ed0aa1b
--- /dev/null
+++ b/client/system/sys_darwin.go
@@ -0,0 +1,128 @@
+package system
+
+import (
+	"bytes"
+	"crypto/rand"
+	"errors"
+	"fmt"
+	"os"
+	"os/exec"
+	"path/filepath"
+	"strings"
+	"sync"
+)
+
+// OS X doesn't appear to have a tmpfs mounted by default. However, it does
+// appear to use encrypted swap by default, which is good. (Try running `sysctl
+// vm.swapusage` to check.) So this function mounts a RAM-disk volume and
+// unmounts it on exit (assuming that we don't crash). It would be nice if we
+// could open a file descriptor to the directory and then lazy unmount it.
+// However, Darwin doesn't appear to have lazy unmount, nor openat().
+
+// IsSafe checks to see whether the current OS appears to be safe. Specifically
+// it checks that any swap is encrypted.
+func IsSafe() error {
+	sysctlOutput, err := exec.Command("sysctl", "vm.swapusage").CombinedOutput()
+	if err != nil {
+		return errors.New("system: error when executing sysctl vm.swapusage: " + err.Error())
+	}
+	if !bytes.Contains(sysctlOutput, []byte("(encrypted)")) {
+		return errors.New("swap does not appear to be encrypted")
+	}
+	return nil
+}
+
+var (
+	// safeTempDir contains the name of a directory that is a RAM disk
+	// mount once setupSafeTempDir has been run, unless safeTempDirErr is
+	// non-nil.
+	safeTempDir string
+	// safeTempDirErr contains any errors arising from trying to setup a
+	// RAM disk by setupSafeTempDir.
+	safeTempDirErr error
+	// safeTempDevice, if not empty, contains the device name of the RAM
+	// disk created by setupSafeTempDir.
+	safeTempDevice string
+	// safeTempMounted is true if setupSafeTempDir mounted safeTempDevice
+	// on /Volumes/$safeTempVolumeName.
+	safeTempMounted bool
+	// safeTempDirOnce protects setupSafeTempDir from running multiple
+	// times.
+	safeTempDirOnce sync.Once
+	// safeTempVolumName contains the name of the RAM disk volume that
+	// we'll create. This turns into a directory name in /Volumes and also
+	// appears in the Disk Utility GUI when Pond is running.
+	safeTempVolumeName string
+)
+
+func setupSafeTempDir() {
+	var randBytes [6]byte
+	rand.Reader.Read(randBytes[:])
+	safeTempVolumeName = fmt.Sprintf("Pond RAM disk (%x)", randBytes)
+
+	hdiUtilOutput, err := exec.Command("hdiutil", "attach", "-nomount", "ram://2048").CombinedOutput()
+	if err != nil {
+		safeTempDirErr = err
+		return
+	}
+	device := strings.TrimSpace(string(hdiUtilOutput))
+	safeTempDevice = device
+	if err := exec.Command("diskutil", "erasevolume", "HFS+", safeTempVolumeName, device).Run(); err != nil {
+		safeTempDirErr = err
+		return
+	}
+
+	safeTempMounted = true
+	safeTempDir = "/Volumes/" + safeTempVolumeName
+
+	readMe, err := os.OpenFile(filepath.Join(safeTempDir, "README"), os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
+	if err != nil {
+		safeTempDirErr = err
+		return
+	}
+	defer readMe.Close()
+
+	fmt.Fprintf(readMe, `Pond Safe Temp Directory
+
+This directory contains a RAM filesystem, created by Pond, so that temporary files
+can be safely used. Unless Pond is still running, it has somehow failed to cleanup
+after itself! Sorry! You can run the following commands to clean it up:
+
+$ cd ~
+$ umount "/Volumes/%s"
+$ hdiutil detach %s
+`, safeTempVolumeName, device)
+}
+
+func SafeTempDir() (string, error) {
+	safeTempDirOnce.Do(setupSafeTempDir)
+	if safeTempDirErr != nil {
+		return "", safeTempDirErr
+	}
+	return safeTempDir, nil
+}
+
+// runCommandWithIOOnError runs a command and sends the output to Stdout in the
+// even of an error.
+func runCommandWithIOOnError(name string, args ...string) error {
+	output, err := exec.Command(name, args...).CombinedOutput()
+	if err == nil {
+		return nil
+	}
+	fmt.Printf("Failed to run command: %s %s: %s", name, strings.Join(args, " "), err)
+	os.Stdout.Write(output)
+	return err
+}
+
+// Shutdown performs any needed cleanup and should be called by a defer in
+// main().
+func Shutdown() {
+	if safeTempMounted {
+		runCommandWithIOOnError("umount", "/Volumes/"+safeTempVolumeName)
+		safeTempMounted = false
+	}
+	if len(safeTempDevice) > 0 {
+		runCommandWithIOOnError("hdiutil", "detach", safeTempDevice)
+		safeTempDevice = ""
+	}
+}
diff --git a/client/system/sys_freebsd.go b/client/system/sys_freebsd.go
new file mode 100644
index 0000000..648e45c
--- /dev/null
+++ b/client/system/sys_freebsd.go
@@ -0,0 +1,139 @@
+package system
+
+import (
+	"bufio"
+	"bytes"
+	"errors"
+	"os"
+	"os/exec"
+	"strings"
+	"sync"
+	"syscall"
+)
+
+// IsSafe checks to see whether the current OS appears to be safe. Specifically
+// it checks that any swap is encrypted.
+func IsSafe() error {
+	output, err := exec.Command("swapinfo").CombinedOutput()
+	if err != nil {
+		return errors.New("system: error when executing swapinfo: " + err.Error())
+	}
+
+	scanner := bufio.NewScanner(bytes.NewReader(output))
+	scanner.Scan() // skip header line
+	for scanner.Scan() {
+		fields := strings.Fields(scanner.Text())
+		if len(fields) < 1 {
+			continue
+		}
+		device := fields[0]
+		if strings.HasSuffix(device, ".bde") || strings.HasSuffix(device, ".eli") {
+			continue
+		}
+		return errors.New("swapping is active on " + device + " which doesn't appear to be encrypted")
+	}
+
+	if err := scanner.Err(); err != nil {
+		return errors.New("system: while parsing swapinfo output: " + err.Error())
+	}
+	return nil
+}
+
+func stringFromInt8(s []int8) string {
+	b := make([]byte, 0, len(s))
+
+	for _, v := range s {
+		if v == 0 {
+			break
+		}
+		b = append(b, byte(v))
+	}
+
+	return string(b)
+}
+
+func processFilesystems(f func(fstype, path string) error) error {
+	n, err := syscall.Getfsstat(nil, 1 /* MNT_WAIT */)
+	if err != nil {
+		return errors.New("system: getfsstat error: " + err.Error())
+	}
+
+	filesystems := make([]syscall.Statfs_t, n)
+	n, err = syscall.Getfsstat(filesystems, 1 /* MNT_WAIT */)
+	if err != nil {
+		return errors.New("system: Getfsstat error: " + err.Error())
+	}
+
+	for _, fs := range filesystems[:n] {
+		fstype := stringFromInt8(fs.Fstypename[:])
+		path := stringFromInt8(fs.Mntonname[:])
+		if err := f(fstype, path); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+var (
+	safeTempDir     string
+	safeTempDirErr  error
+	safeTempDirOnce sync.Once
+)
+
+func findSafeTempDir() {
+	var candidates []string
+
+	err := processFilesystems(func(fstype, path string) error {
+		if fstype == "tmpfs" &&
+			syscall.Access(path, 7 /* write ok */) == nil {
+			candidates = append(candidates, path)
+		}
+
+		return nil
+	})
+
+	if err == nil && len(candidates) == 0 {
+		err = errors.New("no writable tmpfs directories found")
+	}
+
+	if err != nil {
+		safeTempDirErr = errors.New("system: while checking filesystems: " + err.Error())
+		return
+	}
+
+	suggested := os.TempDir()
+	preferred := []string{suggested}
+	var otherOptions []string
+	if dir := os.Getenv("XDG_RUNTIME_DIR"); len(dir) > 0 {
+		otherOptions = append(otherOptions, dir)
+	}
+	otherOptions = append(otherOptions, "/tmp", "/var/tmp")
+	for _, d := range otherOptions {
+		if suggested != d {
+			preferred = append(preferred, d)
+		}
+	}
+
+	for _, d := range preferred {
+		for _, candidate := range candidates {
+			if candidate == d {
+				safeTempDir = candidate
+				return
+			}
+		}
+	}
+
+	safeTempDir = candidates[0]
+}
+
+// SafeTempDir returns the path of a writable directory which is mounted with
+// tmpfs. As long as the swap is encrypted, then it should be safe to write
+// there.
+func SafeTempDir() (string, error) {
+	safeTempDirOnce.Do(findSafeTempDir)
+	if safeTempDirErr != nil {
+		return "", safeTempDirErr
+	}
+	return safeTempDir, nil
+}
diff --git a/client/system/sys_linux.go b/client/system/sys_linux.go
new file mode 100644
index 0000000..d8a1efb
--- /dev/null
+++ b/client/system/sys_linux.go
@@ -0,0 +1,138 @@
+package system
+
+import (
+	"bufio"
+	"bytes"
+	"errors"
+	"io"
+	"io/ioutil"
+	"os"
+	"strings"
+	"sync"
+	"syscall"
+)
+
+func processLines(filename string, f func(line string) error) error {
+	contents, err := ioutil.ReadFile(filename)
+	if err != nil {
+		return err
+	}
+
+	file := bufio.NewReader(bytes.NewBuffer(contents))
+	for {
+		line, isPrefix, err := file.ReadLine()
+		if err == io.EOF {
+			break
+		}
+		if err != nil {
+			return err
+		}
+		if isPrefix {
+			return errors.New("file contains a line that it too long to process")
+		}
+		if err = f(string(line)); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+// IsSafe checks to see whether the current OS appears to be safe. Specifically
+// it checks that any swap is encrypted.
+func IsSafe() error {
+	lineNo := 0
+	err := processLines("/proc/swaps", func(line string) error {
+		lineNo++
+		if lineNo == 1 {
+			// First line is just headings.
+			return nil
+		}
+		fields := strings.Fields(line)
+		if len(fields) < 1 {
+			return nil
+		}
+		device := fields[0]
+		if strings.Contains(device, "/mapper/") || strings.Contains(device, "/dm-") {
+			// We don't have permissions to introspect the mapper
+			// device, so we have to assume that it's encrypted.
+			return nil
+		}
+
+		return errors.New("swapping is active on " + device + " which doesn't appear to be encrypted")
+	})
+
+	if err != nil {
+		return errors.New("system: while checking /proc/swaps: " + err.Error())
+	}
+	return nil
+}
+
+var (
+	safeTempDir     string
+	safeTempDirErr  error
+	safeTempDirOnce sync.Once
+)
+
+func findSafeTempDir() {
+	var candidates []string
+
+	err := processLines("/proc/mounts", func(line string) error {
+		fields := strings.Fields(line)
+		if len(fields) < 1 {
+			return nil
+		}
+		path := fields[1]
+		filesystem := fields[2]
+		if filesystem == "tmpfs" &&
+			syscall.Access(path, 7 /* rwx ok */) == nil {
+			candidates = append(candidates, path)
+		}
+
+		return nil
+	})
+
+	if err == nil && len(candidates) == 0 {
+		err = errors.New("no writable tmpfs directories found")
+	}
+
+	if err != nil {
+		safeTempDirErr = errors.New("system: while checking /proc/mounts: " + err.Error())
+		return
+	}
+
+	suggested := os.TempDir()
+	preferred := []string{suggested}
+	var otherOptions []string
+	if dir := os.Getenv("XDG_RUNTIME_DIR"); len(dir) > 0 {
+		otherOptions = append(otherOptions, dir)
+	}
+	otherOptions = append(otherOptions, "/tmp", "/var/tmp")
+	for _, d := range otherOptions {
+		if suggested != d {
+			preferred = append(preferred, d)
+		}
+	}
+
+	for _, d := range preferred {
+		for _, candidate := range candidates {
+			if candidate == d {
+				safeTempDir = candidate
+				return
+			}
+		}
+	}
+
+	safeTempDir = candidates[0]
+}
+
+// SafeTempDir returns the path of a writable directory which is mounted with
+// tmpfs. As long as the swap is encrypted, then it should be safe to write
+// there.
+func SafeTempDir() (string, error) {
+	safeTempDirOnce.Do(findSafeTempDir)
+	if safeTempDirErr != nil {
+		return "", safeTempDirErr
+	}
+	return safeTempDir, nil
+}
diff --git a/client/system/system_test.go b/client/system/system_test.go
new file mode 100644
index 0000000..c2957cd
--- /dev/null
+++ b/client/system/system_test.go
@@ -0,0 +1,18 @@
+package system
+
+import (
+	"testing"
+)
+
+func TestSafe(t *testing.T) {
+	if err := IsSafe(); err != nil {
+		t.Errorf("IsSafe returned an error: %s", err)
+	}
+}
+
+func TestSafeTempDir(t *testing.T) {
+	_, err := SafeTempDir()
+	if err != nil {
+		t.Errorf("error while getting safe temp directory: %s", err)
+	}
+}
diff --git a/client/testdata/state-old b/client/testdata/state-old
new file mode 100644
index 0000000..9ebc048
Binary files /dev/null and b/client/testdata/state-old differ
diff --git a/client/tpm/tpm.go b/client/tpm/tpm.go
new file mode 100644
index 0000000..b046e7a
--- /dev/null
+++ b/client/tpm/tpm.go
@@ -0,0 +1,252 @@
+// Package tpm wraps the Trousers library for accessing the TPM from
+// user-space. It currently provides very limited functionality: just NVRAM
+// access.
+package tpm
+
+// #cgo LDFLAGS: -ltspi
+// #include <trousers/tss.h>
+// #include <trousers/trousers.h>
+// #include <string.h>
+import "C"
+
+import (
+	"fmt"
+	"os"
+	"unsafe"
+)
+
+func Present() bool {
+	_, err := os.Stat("/sys/class/misc/tpm0")
+	return err == nil
+}
+
+func isError(result C.TSS_RESULT) bool {
+	return result != C.TSS_SUCCESS
+}
+
+type Error struct {
+	result C.TSS_RESULT
+}
+
+func (e Error) Error() string {
+	return fmt.Sprintf("tpm: layer: %s, code: 0x%x: %s", C.GoString(C.Trspi_Error_Layer(e.result)), C.Trspi_Error_Code(e.result), C.GoString(C.Trspi_Error_String(e.result)))
+}
+
+type ErrorCode int
+
+func (e Error) Code() ErrorCode {
+	return ErrorCode(C.Trspi_Error_Code(e.result))
+}
+
+// Error code values
+const (
+	// Failed to connect to daemon process.
+	ErrCodeCommunicationFailure ErrorCode = C.TSS_E_COMM_FAILURE
+	// The TPM is disabled in the BIOS.
+	ErrCodeTPMDisabled = 7
+	// The TPM doesn't have an owner and thus no storage root key has been
+	// defined.
+	ErrCodeNoStorageRootKey = 0x12
+	// The NVRAM index already exists.
+	ErrCodeNVRAMAlreadyExists = 0x13b
+	// The password is incorrect.
+	ErrCodeAuthentication = 1
+)
+
+type Object struct {
+	handle C.TSS_HOBJECT
+}
+
+type Policy struct {
+	policy C.TSS_HPOLICY
+}
+
+func (p *Policy) SetKey(key [20]byte) error {
+	if result := C.Tspi_Policy_SetSecret(p.policy, C.TSS_SECRET_MODE_SHA1, 20, (*C.BYTE)(&key[0])); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+func (p *Policy) SetPassword(pw string) error {
+	var result C.TSS_RESULT
+	if len(pw) == 0 {
+		var zeros [20]byte
+		result = C.Tspi_Policy_SetSecret(p.policy, C.TSS_SECRET_MODE_SHA1, 20, (*C.BYTE)(&zeros[0]))
+	} else {
+		panic("unimplemented")
+	}
+
+	if isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+func (p *Policy) AssignTo(o *Object) error {
+	if result := C.Tspi_Policy_AssignToObject(p.policy, o.handle); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+type NVRAM struct {
+	Object
+	Index       uint32
+	Size        int
+	Permissions uint32
+}
+
+const (
+	PermAuthRead       = C.TPM_NV_PER_AUTHREAD
+	PermAuthWrite      = C.TPM_NV_PER_AUTHWRITE
+	PermWriteAllAtOnce = C.TPM_NV_PER_WRITEALL
+)
+
+func (nv *NVRAM) setAttributes() error {
+	if result := C.Tspi_SetAttribUint32(nv.handle, C.TSS_TSPATTRIB_NV_INDEX, 0, C.UINT32(nv.Index)); isError(result) {
+		return Error{result}
+	}
+	if result := C.Tspi_SetAttribUint32(nv.handle, C.TSS_TSPATTRIB_NV_PERMISSIONS, 0, C.UINT32(nv.Permissions)); isError(result) {
+		return Error{result}
+	}
+	if result := C.Tspi_SetAttribUint32(nv.handle, C.TSS_TSPATTRIB_NV_DATASIZE, 0, C.UINT32(nv.Size)); isError(result) {
+		return Error{result}
+	}
+
+	return nil
+}
+
+func (nv *NVRAM) Create() error {
+	if err := nv.setAttributes(); err != nil {
+		return err
+	}
+	if result := C.Tspi_NV_DefineSpace(C.TSS_HNVSTORE(nv.handle), 0, 0); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+func (nv *NVRAM) Destroy() error {
+	if err := nv.setAttributes(); err != nil {
+		return err
+	}
+	if result := C.Tspi_NV_ReleaseSpace(C.TSS_HNVSTORE(nv.handle)); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+func (nv *NVRAM) Read(out []byte) (int, error) {
+	if result := C.Tspi_SetAttribUint32(nv.handle, C.TSS_TSPATTRIB_NV_INDEX, 0, C.UINT32(nv.Index)); isError(result) {
+		return 0, Error{result}
+	}
+	l32 := C.UINT32(len(out))
+	var buf *C.BYTE
+	if result := C.Tspi_NV_ReadValue(C.TSS_HNVSTORE(nv.handle), 0 /* offset */, &l32, &buf); isError(result) {
+		return 0, Error{result}
+	}
+	l := int(l32)
+	if l > len(out) {
+		l = len(out)
+	}
+	if l < 0 {
+		l = 0
+	}
+	C.memcpy(unsafe.Pointer(&out[0]), unsafe.Pointer(buf), C.size_t(l))
+	return l, nil
+}
+
+func (nv *NVRAM) Write(contents []byte) error {
+	if result := C.Tspi_SetAttribUint32(nv.handle, C.TSS_TSPATTRIB_NV_INDEX, 0, C.UINT32(nv.Index)); isError(result) {
+		return Error{result}
+	}
+	if result := C.Tspi_NV_WriteValue(C.TSS_HNVSTORE(nv.handle), 0 /* offset */, C.UINT32(len(contents)), (*C.BYTE)(&contents[0])); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+type RSA struct {
+	Object
+}
+
+func (rsa *RSA) GetPolicy() (*Policy, error) {
+	p := new(Policy)
+	if result := C.Tspi_GetPolicyObject(C.TSS_HOBJECT(rsa.handle), C.TSS_POLICY_USAGE, &p.policy); isError(result) {
+		return nil, Error{result}
+	}
+
+	return p, nil
+}
+
+type Context struct {
+	ctx C.TSS_HCONTEXT
+	tpm C.TSS_HTPM
+}
+
+func NewContext() (*Context, error) {
+	c := new(Context)
+	if result := C.Tspi_Context_Create(&c.ctx); isError(result) {
+		return nil, Error{result}
+	}
+	if result := C.Tspi_Context_Connect(c.ctx, nil /* local TPM */); isError(result) {
+		return nil, Error{result}
+	}
+	if result := C.Tspi_Context_GetTpmObject(c.ctx, &c.tpm); isError(result) {
+		return nil, Error{result}
+	}
+
+	return c, nil
+}
+
+func (c *Context) Close() error {
+	C.Tspi_Context_FreeMemory(c.ctx, nil)
+	if result := C.Tspi_Context_Close(c.ctx); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
+
+func (c *Context) GetPolicy() (*Policy, error) {
+	p := new(Policy)
+	if result := C.Tspi_GetPolicyObject(C.TSS_HOBJECT(c.tpm), C.TSS_POLICY_USAGE, &p.policy); isError(result) {
+		return nil, Error{result}
+	}
+
+	return p, nil
+}
+
+func (c *Context) NewPolicy() (*Policy, error) {
+	p := new(Policy)
+	if result := C.Tspi_Context_CreateObject(c.ctx, C.TSS_OBJECT_TYPE_POLICY, C.TSS_POLICY_USAGE, (*C.TSS_HOBJECT)(&p.policy)); isError(result) {
+		return nil, Error{result}
+	}
+
+	return p, nil
+}
+
+func (c *Context) NewNVRAM() (*NVRAM, error) {
+	nv := new(NVRAM)
+	if result := C.Tspi_Context_CreateObject(c.ctx, C.TSS_OBJECT_TYPE_NV, 0, &nv.handle); isError(result) {
+		return nil, Error{result}
+	}
+
+	return nv, nil
+}
+
+func (c *Context) NewRSA() (*RSA, error) {
+	rsa := new(RSA)
+	if result := C.Tspi_Context_CreateObject(c.ctx, C.TSS_OBJECT_TYPE_RSAKEY, C.TSS_KEY_TSP_SRK|C.TSS_KEY_AUTHORIZATION, &rsa.handle); isError(result) {
+		return nil, Error{result}
+	}
+
+	return rsa, nil
+}
+
+func (c *Context) TakeOwnership(srk *RSA) error {
+	if result := C.Tspi_TPM_TakeOwnership(c.tpm, C.TSS_HKEY(srk.handle), 0); isError(result) {
+		return Error{result}
+	}
+	return nil
+}
diff --git a/client/tpm/tpm_test.go b/client/tpm/tpm_test.go
new file mode 100644
index 0000000..f785016
--- /dev/null
+++ b/client/tpm/tpm_test.go
@@ -0,0 +1,44 @@
+package tpm
+
+import (
+	"testing"
+)
+
+func TestConnect(t *testing.T) {
+	ctx, err := NewContext()
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer ctx.Close()
+
+	tpmPolicy, err := ctx.GetPolicy()
+	if err != nil {
+		t.Fatal(err)
+	}
+	if err := tpmPolicy.SetPassword(""); err != nil {
+		t.Fatal(err)
+	}
+
+	nvram, err := ctx.NewNVRAM()
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	policy, err := ctx.NewPolicy()
+	if err != nil {
+		t.Fatal(err)
+	}
+	if err := policy.SetPassword(""); err != nil {
+		t.Fatal(err)
+	}
+	policy.AssignTo(&nvram.Object)
+
+	/*
+		nvram.Index = 43
+		nvram.Size = 32
+		nvram.Permissions = PermWriteAllAtOnce | PermAuthWrite | PermAuthRead
+		if err := nvram.Create(); err != nil {
+			t.Fatalf("error creating NVRAM: %s", err)
+		}
+	*/
+}
diff --git a/decrypt/decrypt.go b/decrypt/decrypt.go
new file mode 100644
index 0000000..ac447ba
--- /dev/null
+++ b/decrypt/decrypt.go
@@ -0,0 +1,119 @@
+// decrypt is a tiny utility that can decrypt Pond detachments given the key
+// file. The key file can be saved to disk from within the main Pond client.
+// Later the bulk of the data, transported by other means, can be decrypted
+// with this utility. (Or the main Pond client itself.)
+package main
+
+import (
+	"errors"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"os"
+
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/nacl/secretbox"
+)
+
+func main() {
+	if len(os.Args) != 2 {
+		fmt.Fprintf(os.Stderr, "Usage: %s <key file> < encrypted > decrypted\n", os.Args[0])
+		os.Exit(1)
+	}
+
+	if err := do(os.Args[1]); err != nil {
+		fmt.Fprintf(os.Stderr, "%s\n", err)
+		os.Exit(1)
+	}
+}
+
+func do(keyFile string) error {
+	contents, err := ioutil.ReadFile(os.Args[1])
+	if err != nil {
+		return err
+	}
+
+	var detachment pond.Message_Detachment
+	if err := proto.Unmarshal(contents, &detachment); err != nil {
+		return err
+	}
+
+	size := detachment.GetSize()
+	paddedSize := detachment.GetPaddedSize()
+	chunkSize := uint64(detachment.GetChunkSize())
+	blockSize := chunkSize + secretbox.Overhead
+
+	if blockSize > 1<<20 {
+		return errors.New("chunk size too large")
+	}
+
+	if paddedSize%blockSize != 0 {
+		return errors.New("padded size is not a multiple of the chunk size")
+	}
+
+	fmt.Fprintf(os.Stderr, `Pond decryption:
+  Original filename: %s
+  Size: %d
+  Padded size: %d
+  Chunk size: %d
+`, sanitiseForTerminal(detachment.GetFilename()), size, paddedSize, chunkSize)
+
+	var key [32]byte
+	var nonce [24]byte
+	copy(key[:], detachment.Key)
+
+	var read, written uint64
+	buf := make([]byte, blockSize)
+	var decrypted []byte
+
+	for read < paddedSize {
+		if _, err := io.ReadFull(os.Stdin, buf); err != nil {
+			return err
+		}
+
+		read += uint64(len(buf))
+		var ok bool
+		decrypted, ok := secretbox.Open(decrypted[:0], buf, &nonce, &key)
+		if !ok {
+			return errors.New("decryption error")
+		}
+
+		incNonce(&nonce)
+
+		todo := size - written
+		if n := uint64(len(decrypted)); todo > n {
+			todo = n
+		}
+
+		if _, err := os.Stdout.Write(decrypted[:todo]); err != nil {
+			return err
+		}
+
+		written += todo
+	}
+
+	return nil
+}
+
+func incNonce(nonce *[24]byte) {
+	s := 1
+	for i, b := range nonce[:] {
+		s += int(b)
+		nonce[i] = byte(s)
+		s >>= 8
+	}
+}
+
+func sanitiseForTerminal(s string) string {
+	var out []rune
+
+	for _, r := range s {
+		if r < 32 {
+			r = ' '
+		}
+		out = append(out, r)
+	}
+
+	return string(out)
+}
diff --git a/doc/_config.yml b/doc/_config.yml
new file mode 100644
index 0000000..392ed34
--- /dev/null
+++ b/doc/_config.yml
@@ -0,0 +1 @@
+pygments: false
diff --git a/doc/_layouts/default.html b/doc/_layouts/default.html
new file mode 100644
index 0000000..0685ec6
--- /dev/null
+++ b/doc/_layouts/default.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <title>Pond - {{page.title}}</title>
+
+    <link href='https://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:extralight&text=Pond' rel='stylesheet' type='text/css'>
+    <link href='https://fonts.googleapis.com/css?family=Marcellus+SC' rel='stylesheet' type='text/css'>
+
+    <style>
+      @font-face {
+        font-family: Elena;
+        src: url('/fonts/ElenaWebBasicRegular.woff');
+      }
+      @font-face {
+        font-family: Elena;
+        src: url('/fonts/ElenaWebBasicRegularItalic.woff');
+        font-style: italic;
+      }
+      @font-face {
+        font-family: Elena;
+        src: url('/fonts/ElenaWebBasicBold.woff');
+        font-weight: bold;
+      }
+      @font-face {
+        font-family: Elena;
+        src: url('/fonts/ElenaWebBasicBoldItalic.woff');
+        font-weight: bold;
+        font-style: italic;
+      }
+
+      body {
+        font-family: Elena; serif;
+        text-align: justify;
+        max-width: 50em;
+        line-height: 1.8;
+        margin-left: auto;
+        margin-right: auto;
+        background-color: #fbfbfc;
+      }
+
+      h1, h2 {
+        font-family: 'Yanone Kaffeesatz', arial, serif;
+        font-weight: normal;
+      }
+
+      h1 a {
+        text-decoration: none;
+        color: black;
+      }
+
+      h1 {
+        font-size: 4.5em;
+        margin-bottom: 0;
+        padding-bottom: 0;
+        margin-top: 0;
+        padding-top: 0;
+      }
+
+      h2 {
+        margin-top: 0;
+        padding-top: 0;
+        margin-bottom: 2em;
+      }
+
+      h3 {
+        color: #222;
+        text-decoration: none;
+        margin-left: -2em;
+        font-weight: normal;
+	font-family: 'Marcellus SC', serif;
+      }
+
+    </style>
+  </head>
+
+  <body>
+    <h1><a href="/">Pond</a></h1>
+    {{content}}
+  </body>
+</html>
diff --git a/doc/images/add-contact1.svg b/doc/images/add-contact1.svg
new file mode 100644
index 0000000..659a1ea
--- /dev/null
+++ b/doc/images/add-contact1.svg
@@ -0,0 +1,2258 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 4.125 -0.921875 C 3.34375 -0.921875 2.296875 -1.15625 1 -1.609375 L 0.59375 -0.53125 C 1.703125 -0.21875 2.484375 0 3.859375 0 C 5.53125 0 6.734375 -0.484375 7.421875 -1.34375 C 7.8125 -1.828125 8.015625 -2.359375 8.015625 -2.90625 C 8.015625 -3.6875 7.703125 -4.265625 7.09375 -4.6875 C 6.359375 -5.15625 5.78125 -5.40625 4.703125 -5.703125 C 4.09375 -5.859375 3.5 -6.078125 2.9375 -6.328125 C 2.328125 -6.609375 2.015625 -7 2.015625 -7.5 C 2.015625 -8.5625 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.640625 C 7.015625 -6.078125 6.140625 -7 4.546875 -7 C 3.78125 -7 2.9375 -6.796875 2.015625 -6.40625 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.5625 C 2.796875 -5.921875 3.5 -6.078125 4.09375 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 4.1875 0 L 4.25 0 C 4.890625 0 5.515625 -0.125 6.203125 -0.375 L 5.921875 -1.140625 C 5.46875 -1 5.03125 -0.921875 4.640625 -0.921875 C 4.515625 -0.921875 4.421875 -0.921875 4.3125 -0.9375 C 2.75 -1.125 2.015625 -1.953125 2.015625 -3.609375 C 2.015625 -5.1875 2.828125 -6.078125 4.515625 -6.078125 C 4.953125 -6.078125 5.453125 -5.984375 6 -5.8125 L 6.296875 -6.609375 C 5.640625 -6.859375 5.015625 -7 4.4375 -7 C 3.1875 -7 2.265625 -6.65625 1.671875 -5.96875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.28125 L 5.265625 -2.859375 L 6.546875 -2.859375 L 9.796875 -8.28125 L 9.796875 0 L 11.015625 0 L 11.015625 -10 L 9.40625 -10 L 5.921875 -3.921875 L 2.53125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.65625 C 7.015625 -6.09375 6.15625 -7 4.546875 -7 C 3.765625 -7 2.828125 -6.796875 1.875 -6.421875 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.796875 -5.90625 3.546875 -6.078125 4.140625 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 2.015625 -2.625 L 2.015625 -7 L 0.796875 -7 L 0.796875 -2.34375 C 0.796875 -0.90625 1.671875 0 3.28125 0 C 4.078125 0 4.984375 -0.21875 5.9375 -0.625 L 6.171875 0 L 7.015625 0 L 7.015625 -7 L 5.796875 -7 L 5.796875 -1.484375 C 5.015625 -1.15625 4.3125 -0.984375 3.6875 -0.984375 C 2.453125 -0.984375 2.015625 -1.5 2.015625 -2.625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 2.953125 -1.0625 C 2.015625 -1.0625 2.015625 -1.546875 2.015625 -2.09375 L 2.015625 -10 L 0.796875 -10 L 0.796875 -1.6875 C 0.796875 -0.6875 1.40625 0 2.34375 0 C 3.03125 0 3.53125 -0.25 3.78125 -0.34375 L 3.78125 -1.21875 C 3.453125 -1.125 3.21875 -1.0625 2.953125 -1.0625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 6.484375 -10 L 2.171875 -5.125 L 6.71875 0 L 8.296875 0 L 3.71875 -5.234375 L 8.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 5.9375 -7 L 3.734375 -0.921875 L 1.515625 -7 L 0.328125 -7 L 3.21875 0.4375 L 1.765625 4 L 3 4 L 7.0625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d="M 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 5.796875 -0.453125 L 5.796875 -0.21875 C 5.796875 0.265625 5.796875 0.609375 5.765625 0.84375 C 5.625 2.234375 4.78125 3.078125 3.390625 3.078125 C 2.875 3.078125 2.328125 2.953125 1.734375 2.703125 L 1.375 3.5625 C 1.953125 3.8125 2.84375 4 3.53125 4 C 4.59375 4 5.515625 3.625 6.078125 3.09375 C 6.78125 2.421875 7.015625 1.765625 7.015625 0.4375 L 7.015625 -7 L 6.15625 -7 L 6.015625 -6.546875 L 5.6875 -6.671875 C 5.09375 -6.890625 4.546875 -7 4.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 5.25 -7 L 2.125 -3.875 L 5.328125 0 L 6.734375 0 L 3.46875 -4 L 6.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-25">
+<path style="stroke:none;" d="M 6.890625 -7 L 5.65625 -7 L 3.703125 -1.515625 L 3.640625 -1.140625 L 3.5625 -1.515625 L 1.609375 -7 L 0.328125 -7 L 2.96875 0 L 4.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-26">
+<path style="stroke:none;" d="M 5.75 -7 L 3.828125 -4.21875 L 1.828125 -7 L 0.46875 -7 L 3.03125 -3.4375 L 0.5625 0 L 1.796875 0 L 3.609375 -2.625 L 5.5 0 L 6.859375 0 L 4.40625 -3.421875 L 7.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-27">
+<path style="stroke:none;" d="M 0.390625 -7 L 2.984375 0 L 4.09375 0 L 5.984375 -5.671875 L 7.828125 0 L 9.015625 0 L 11.609375 -7 L 10.359375 -7 L 8.4375 -1.125 L 6.609375 -7 L 5.453125 -7 L 3.5625 -1.125 L 1.640625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-28">
+<path style="stroke:none;" d="M 1.4375 -0.84375 L 0.3125 2 L 1.578125 2 L 2.734375 -0.84375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-29">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-30">
+<path style="stroke:none;" d="M 3.5625 -0.921875 C 2.859375 -0.921875 2.5 -1.078125 2.015625 -1.34375 L 2.015625 -5.765625 C 2.515625 -5.984375 3.015625 -6.078125 3.546875 -6.078125 C 5.046875 -6.078125 5.796875 -5 5.796875 -3.5 C 5.796875 -1.984375 5.078125 -0.921875 3.5625 -0.921875 Z M 3.828125 0 C 5.9375 0 7.015625 -1.40625 7.015625 -3.40625 C 7.015625 -4.5625 6.6875 -5.46875 6.03125 -6.109375 C 5.40625 -6.703125 4.609375 -7 3.671875 -7 C 3.109375 -7 2.5625 -6.890625 2.015625 -6.6718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-31">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 C 2.46875 -4.046875 2.9375 -4.046875 3.34375 -4.046875 C 4.25 -4.046875 5.390625 -4.15625 5.96875 -4.328125 C 7.25 -4.71875 8.015625 -5.78125 8.015625 -7.328125 C 8.015625 -8.140625 7.734375 -8.78125 7.203125 -9.28125 C 6.5 -9.90625 5.71875 -10 4.21875 -10 Z M 3.46875 -4.953125 C 3.046875 -4.953125 2.546875 -4.953125 2.015625 -5.015625 L 2.015625 -9.078125 L 3.5 -9.078125 C 4.21875 -9.078125 4.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-32">
+<path style="stroke:none;" d="M 9.046875 -8.296875 L 9.546875 -9.25 C 8.515625 -9.71875 7.453125 -10 6.03125 -10 C 5.03125 -10 4.140625 -9.796875 3.328125 -9.359375 C 1.859375 -8.578125 0.796875 -7 0.796875 -4.953125 C 0.796875 -4.03125 1.03125 -3.203125 1.46875 -2.4375 C 2.328125 -1 3.78125 0 6.0625 0 C 7.90625 0 9.171875 -0.515625 10.015625 -1.328125 L 10.015625 -4.953125 L 5.71875 -4.953125 L 5.71875 -4.046875 L 8.796875 -4.046875 L 8.796875 -1.6875 C 8.203125 -1.171875 7.4375 -0.9218 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-33">
+<path style="stroke:none;" d="M 1 -10 L 1 -9.078125 L 4.796875 -9.078125 L 4.796875 0 L 6.015625 0 L 6.015625 -9.078125 L 9 -9.078125 L 9 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-34">
+<path style="stroke:none;" d="M 4.5625 -9.078125 C 4.890625 -9.078125 5.25 -9.015625 5.703125 -8.90625 L 5.890625 -9.75 C 5.390625 -9.890625 4.78125 -10 4.171875 -10 C 3.1875 -10 2.453125 -9.65625 2.015625 -8.953125 C 1.875 -8.703125 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.765625 -7 L 0.765625 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.375 -6.078125 L 5.375 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-35">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z M 0.796875 -7 L 0.796875 -6.078125 L 2.015625 -6.078125 L 2.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-36">
+<path style="stroke:none;" d="M 5.796875 -5.65625 L 5.796875 -1.234375 C 5.296875 -1.03125 4.78125 -0.921875 4.25 -0.921875 C 2.78125 -0.921875 2.015625 -2.03125 2.015625 -3.515625 C 2.015625 -5.015625 2.75 -6.078125 4.234375 -6.078125 C 4.9375 -6.078125 5.3125 -5.921875 5.796875 -5.65625 Z M 4.140625 0 C 4.6875 0 5.25 -0.109375 5.796875 -0.34375 L 5.796875 4 L 7.015625 4 L 7.015625 -7 L 6.15625 -7 L 5.921875 -6.46875 C 5.3125 -6.8125 4.65625 -7 3.984375 -7 C 3.296875 -7 2.734375 -6.8437 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-37">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.390625 L 7.484375 0 L 9.015625 0 L 9.015625 -10 L 7.796875 -10 L 7.796875 -1.625 L 2.328125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-38">
+<path style="stroke:none;" d="M 0.8125 -4.96875 L 0.8125 -4.046875 L 5.0625 -4.046875 L 5.0625 -4.96875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-39">
+<path style="stroke:none;" d="M 0.796875 -10.984375 L 0.796875 -8 L 2.015625 -8 L 2.015625 -10.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-40">
+<path style="stroke:none;" d="M 2.015625 -9.078125 L 6.6875 -9.078125 L 6.6875 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.046875 L 6.25 -5.046875 L 6.25 -5.953125 L 2.015625 -5.953125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-41">
+<path style="stroke:none;" d="M 3.015625 -4 C 3.015625 -5.015625 3.1875 -6.078125 3.5 -7.15625 C 3.828125 -8.25 4.296875 -9.296875 4.921875 -10.3125 L 3.984375 -10.796875 C 2.890625 -9 1.796875 -6.65625 1.796875 -4.015625 C 1.796875 -2.921875 2.015625 -1.765625 2.390625 -0.578125 C 2.78125 0.59375 3.328125 1.75 4 2.84375 L 4.921875 2.25 C 3.875 0.578125 3.015625 -1.578125 3.015625 -4 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-42">
+<path style="stroke:none;" d="M 4.015625 -4.015625 C 4.015625 -5.109375 3.8125 -6.265625 3.4375 -7.4375 C 3.046875 -8.609375 2.5 -9.734375 1.84375 -10.796875 L 0.890625 -10.3125 C 1.515625 -9.296875 1.984375 -8.25 2.3125 -7.15625 C 2.625 -6.078125 2.796875 -5.03125 2.796875 -4.015625 C 2.796875 -1.875 2.15625 0.21875 0.890625 2.25 L 1.8125 2.84375 C 2.484375 1.75 3.03125 0.59375 3.4375 -0.578125 C 3.828125 -1.765625 4.015625 -2.921875 4.015625 -4.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-43">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 6.578125 0 L 6.578125 -1.046875 L 2.015625 -1.046875 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-44">
+<path style="stroke:none;" d="M 9.359375 -9.078125 C 10.109375 -9.078125 10.796875 -8.984375 10.796875 -8.734375 L 10.796875 -1.625 C 10.796875 -0.671875 11.40625 0 12.34375 0 C 13.046875 0 13.546875 -0.21875 13.796875 -0.296875 L 13.796875 -1.078125 C 13.46875 -0.984375 13.21875 -0.921875 12.953125 -0.921875 C 12.015625 -0.921875 12.015625 -1.390625 12.015625 -1.921875 L 12.015625 -8.90625 C 12.015625 -9.71875 10.640625 -10 9.015625 -10 C 8.078125 -10 7.40625 -9.65625 7 -8.953125 C 6.85 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-45">
+<path style="stroke:none;" d="M 1.8125 -9.296875 L 2.09375 -8.40625 L 3.25 -8.78125 C 3.890625 -8.984375 4.3125 -9.078125 4.796875 -9.078125 C 5.5 -9.078125 6.0625 -8.859375 6.53125 -8.40625 C 6.875 -8.078125 7.046875 -7.703125 7.046875 -7.3125 C 7.046875 -7.171875 7.015625 -7.03125 7 -6.90625 C 6.921875 -6.609375 6.65625 -6.265625 6.234375 -5.90625 L 5.625 -5.40625 C 4.90625 -4.84375 4.203125 -4.21875 3.546875 -3.40625 C 2.84375 -2.546875 2.328125 -1.5625 2 -0.5625 L 2 0 L 9 0 L 9 -0.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-46">
+<path style="stroke:none;" d="M 3.796875 -10 L 3.796875 -2.9375 C 3.796875 -2.609375 3.765625 -2.359375 3.71875 -2.1875 C 3.515625 -1.375 2.75 -0.921875 1.703125 -0.921875 C 1.375 -0.921875 1.03125 -0.953125 0.671875 -1.046875 L 0.484375 -0.140625 C 0.96875 -0.03125 1.421875 0 1.875 0 C 2.953125 0 3.75 -0.265625 4.3125 -0.859375 C 4.859375 -1.40625 5.015625 -2.015625 5.015625 -3.078125 L 5.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-47">
+<path style="stroke:none;" d="M 5.015625 0 L 5.015625 -4.734375 L 8.484375 -10 L 7.125 -10 L 4.46875 -5.859375 L 1.875 -10 L 0.4375 -10 L 3.796875 -4.734375 L 3.796875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-48">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-49">
+<path style="stroke:none;" d="M 7.796875 -10 L 7.796875 -4.953125 L 2.015625 -4.953125 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 7.796875 -4.046875 L 7.796875 0 L 9.015625 0 L 9.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-50">
+<path style="stroke:none;" d="M 6.015625 -10 L 4.515625 -10 L 1.703125 -9 L 2.171875 -7.984375 L 4.796875 -8.84375 L 4.796875 -1.046875 L 2 -1.046875 L 2 0 L 8 0 L 8 -1.046875 L 6.015625 -1.046875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.578125 0 C 1.710938 0 0.601562 -0.921875 0.25 -2.765625 L 1.71875 -3 C 1.8125 -2.4375 2.019531 -2 2.34375 -1.6875 C 2.675781 -1.375 3.085938 -1.21875 3.578125 -1.21875 C 4.117188 -1.21875 4.546875 -1.421875 4.859375 -1.828125 C 5.171875 -2.234375 5.328125 -2.832031 5.328125 -3.625 L 5.328125 -10.78125 L 3.203125 -10.78125 L 3.203125 -12 L 6.8125 -12 L 6.8125 -3.6875 C 6.8125 -2.539062 6.519531 -1.640625 5.9375 -0.984375 C 5.363281 -0.328125 4.578125 0 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.328125 -10 L 8.65625 -10 L 8.65625 0 L 1.328125 0 Z M 1.8125 -9 L 1.8125 -1 L 8.171875 -1 L 8.171875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 6.46875 -3.53125 C 6.46875 -1.175781 5.660156 0 4.046875 0 C 3.023438 0 2.335938 -0.390625 1.984375 -1.171875 L 1.96875 -1.171875 C 1.976562 -1.128906 1.984375 -0.726562 1.984375 0.03125 L 1.984375 3 L 0.84375 3 L 0.84375 -5.53125 C 0.84375 -6.269531 0.832031 -6.757812 0.8125 -7 L 1.90625 -7 C 1.90625 -6.976562 1.910156 -6.910156 1.921875 -6.796875 C 1.929688 -6.691406 1.941406 -6.519531 1.953125 -6.28125 C 1.960938 -6.039062 1.96875 -5.878906 1.96875 -5.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 1.734375 -3.125 C 1.734375 -2.394531 1.882812 -1.832031 2.1875 -1.4375 C 2.5 -1.050781 2.957031 -0.859375 3.5625 -0.859375 C 4.03125 -0.859375 4.40625 -0.960938 4.6875 -1.171875 C 4.96875 -1.390625 5.160156 -1.664062 5.265625 -2 L 6.265625 -1.703125 C 5.867188 -0.566406 4.960938 0 3.546875 0 C 2.566406 0 1.816406 -0.296875 1.296875 -0.890625 C 0.785156 -1.484375 0.53125 -2.367188 0.53125 -3.546875 C 0.53125 -4.660156 0.785156 -5.515625 1.296875 -6.109375 C [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 5.03125 0 L 5.03125 -4.359375 C 5.03125 -4.816406 4.988281 -5.171875 4.90625 -5.421875 C 4.820312 -5.671875 4.6875 -5.847656 4.5 -5.953125 C 4.320312 -6.066406 4.050781 -6.125 3.6875 -6.125 C 3.175781 -6.125 2.769531 -5.9375 2.46875 -5.5625 C 2.164062 -5.1875 2.015625 -4.660156 2.015625 -3.984375 L 2.015625 0 L 0.875 0 L 0.875 -5.5 C 0.875 -6.320312 0.859375 -6.820312 0.828125 -7 L 1.921875 -7 C 1.921875 -6.976562 1.921875 -6.914062 1.921875 -6.8125 C 1.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 5.015625 -1.203125 C 4.804688 -0.773438 4.535156 -0.46875 4.203125 -0.28125 C 3.867188 -0.09375 3.453125 0 2.953125 0 C 2.117188 0 1.503906 -0.285156 1.109375 -0.859375 C 0.722656 -1.429688 0.53125 -2.300781 0.53125 -3.46875 C 0.53125 -5.820312 1.335938 -7 2.953125 -7 C 3.453125 -7 3.867188 -6.90625 4.203125 -6.71875 C 4.535156 -6.53125 4.804688 -6.234375 5.015625 -5.828125 L 5.015625 -10 L 6.15625 -10 L 6.15625 -1.5 C 6.15625 -0.738281 6.164062 -0.238281  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 0.90625 -8.90625 L 0.90625 -10 L 2.046875 -10 L 2.046875 -8.90625 Z M 0.90625 0 L 0.90625 -7 L 2.046875 -7 L 2.046875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.375 3 C 2.644531 3 2.066406 2.851562 1.640625 2.5625 C 1.210938 2.269531 0.9375 1.851562 0.8125 1.3125 L 1.96875 1.140625 C 2.039062 1.453125 2.195312 1.691406 2.4375 1.859375 C 2.6875 2.035156 3.007812 2.125 3.40625 2.125 C 4.476562 2.125 5.015625 1.382812 5.015625 -0.09375 L 5.015625 -1.328125 L 5 -1.328125 C 4.789062 -0.890625 4.503906 -0.554688 4.140625 -0.328125 C 3.785156 -0.109375 3.367188 0 2.890625 0 C 2.078125 0 1.476562 -0.273438 1.09375 -0.82 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 2.140625 -14 L 13.84375 -14 L 13.84375 0 L 2.140625 0 Z M 2.90625 -13 L 2.90625 -1 L 13.0625 -1 L 13.0625 -13 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 8.03125 -12.40625 C 6.46875 -12.40625 5.25 -11.925781 4.375 -10.96875 C 3.5 -10.019531 3.0625 -8.71875 3.0625 -7.0625 C 3.0625 -5.414062 3.515625 -4.09375 4.421875 -3.09375 C 5.335938 -2.101562 6.570312 -1.609375 8.125 -1.609375 C 10.113281 -1.609375 11.609375 -2.40625 12.609375 -4 L 14.203125 -3.3125 C 13.617188 -2.226562 12.789062 -1.40625 11.71875 -0.84375 C 10.65625 -0.28125 9.421875 0 8.015625 0 C 6.578125 0 5.332031 -0.28125 4.28125 -0.84375 C 3.2382 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-2">
+<path style="stroke:none;" d="M 11.78125 0 L 8.078125 -5.453125 L 3.671875 -5.453125 L 3.671875 0 L 1.703125 0 L 1.703125 -14 L 8.421875 -14 C 10.035156 -14 11.28125 -13.628906 12.15625 -12.890625 C 13.03125 -12.148438 13.46875 -11.125 13.46875 -9.8125 C 13.46875 -8.726562 13.15625 -7.816406 12.53125 -7.078125 C 11.914062 -6.335938 11.066406 -5.867188 9.984375 -5.671875 L 14.03125 0 Z M 11.5 -9.796875 C 11.5 -10.660156 11.21875 -11.316406 10.65625 -11.765625 C 10.09375 -12.210938 9.28515 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-3">
+<path style="stroke:none;" d="M 1.71875 0 L 1.71875 -14 L 12.671875 -14 L 12.671875 -12.40625 L 3.6875 -12.40625 L 3.6875 -8 L 12.0625 -8 L 12.0625 -6.421875 L 3.6875 -6.421875 L 3.6875 -1.59375 L 13.09375 -1.59375 L 13.09375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-4">
+<path style="stroke:none;" d="M 10.96875 0 L 9.484375 -4.46875 L 3.5625 -4.46875 L 2.0625 0 L 0.03125 0 L 5.421875 -14 L 7.640625 -14 L 12.96875 0 Z M 6.515625 -12.515625 L 6.4375 -12.25 C 6.28125 -11.738281 6.050781 -11.082031 5.75 -10.28125 L 4.09375 -6 L 8.953125 -6 L 7.28125 -10.296875 C 7.113281 -10.722656 6.941406 -11.207031 6.765625 -11.75 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-5">
+<path style="stroke:none;" d="M 7.03125 -12.40625 L 7.03125 0 L 5.078125 0 L 5.078125 -12.40625 L 0.4375 -12.40625 L 0.4375 -14 L 11.546875 -14 L 11.546875 -12.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-6">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph4-7">
+<path style="stroke:none;" d="M 15.015625 -7.0625 C 15.015625 -5.632812 14.726562 -4.382812 14.15625 -3.3125 C 13.59375 -2.25 12.78125 -1.429688 11.71875 -0.859375 C 10.664062 -0.285156 9.421875 0 7.984375 0 C 6.523438 0 5.269531 -0.28125 4.21875 -0.84375 C 3.164062 -1.414062 2.359375 -2.238281 1.796875 -3.3125 C 1.242188 -4.382812 0.96875 -5.632812 0.96875 -7.0625 C 0.96875 -9.238281 1.585938 -10.9375 2.828125 -12.15625 C 4.066406 -13.382812 5.789062 -14 8 -14 C 9.4375 -14 10.6875 -13.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-8">
+<path style="stroke:none;" d="M 10.0625 0 L 3.234375 -11.859375 L 3.296875 -10.90625 L 3.34375 -9.25 L 3.34375 0 L 1.59375 0 L 1.59375 -14 L 3.875 -14 L 10.78125 -2.0625 C 10.695312 -3.351562 10.65625 -4.289062 10.65625 -4.875 L 10.65625 -14 L 12.421875 -14 L 12.421875 0 Z "/>
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image5346" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image5346"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image5350" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image5350"/>
+</pattern>
+<image id="image5353" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image5353"/>
+</pattern>
+<image id="image5358" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image5358"/>
+</pattern>
+<image id="image5363" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image5363"/>
+</pattern>
+<image id="image5368" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image5368"/>
+</pattern>
+<image id="image5373" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image5373"/>
+</pattern>
+<image id="image5378" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image5378"/>
+</pattern>
+<image id="image5383" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image5383"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip10">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+</clipPath>
+<clipPath id="clip12">
+  <path d="M 0 119 L 145 119 L 145 120 L 0 120 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 129 C 24 127.894531 24.894531 127 26 127 L 120 127 C 121.105469 127 122 127.449219 122 128 L 122 154 C 122 155.105469 121.105469 156 120 156 L 26 156 C 24.894531 156 24 155.550781 24 155 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,141.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image5389" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,126)">
+  <use xlink:href="#image5389"/>
+</pattern>
+<image id="image5392" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,126)">
+  <use xlink:href="#image5392"/>
+</pattern>
+<image id="image5397" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,126)">
+  <use xlink:href="#image5397"/>
+</pattern>
+<image id="image5402" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,129)">
+  <use xlink:href="#image5402"/>
+</pattern>
+<image id="image5407" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,129)">
+  <use xlink:href="#image5407"/>
+</pattern>
+<image id="image5412" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,154)">
+  <use xlink:href="#image5412"/>
+</pattern>
+<image id="image5417" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,154)">
+  <use xlink:href="#image5417"/>
+</pattern>
+<image id="image5422" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,154)">
+  <use xlink:href="#image5422"/>
+</pattern>
+<clipPath id="clip15">
+  <path d="M 0 164 L 145 164 L 145 200 L 0 200 Z "/>
+</clipPath>
+<image id="image5427" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip16">
+  <path d="M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+</clipPath>
+<clipPath id="clip17">
+  <path d="M 0 218 L 145 218 L 145 219 L 0 219 Z "/>
+</clipPath>
+<clipPath id="clip18">
+  <path d="M 0 219 L 145 219 L 145 241 L 0 241 Z "/>
+</clipPath>
+<image id="image5430" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip19">
+  <path d="M 0 241 L 145 241 L 145 242 L 0 242 Z "/>
+</clipPath>
+<clipPath id="clip20">
+  <path d="M 0 242 L 145 242 L 145 264 L 0 264 Z "/>
+</clipPath>
+<image id="image5433" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip21">
+  <path d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip22">
+  <path d="M 687 486 L 791 486 L 791 515 L 687 515 Z "/>
+</clipPath>
+<clipPath id="clip23">
+  <path d="M 687 488 C 687 486.894531 687.894531 486 689 486 L 789 486 C 790.105469 486 791 486.449219 791 487 L 791 513 C 791 514.105469 790.105469 515 789 515 L 689 515 C 687.894531 515 687 514.550781 687 514 Z "/>
+</clipPath>
+<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,739,500.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image5437" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern17" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,686,485)">
+  <use xlink:href="#image5437"/>
+</pattern>
+<image id="image5440" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern18" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10,0,0,1,689,485)">
+  <use xlink:href="#image5440"/>
+</pattern>
+<image id="image5445" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern19" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,789,485)">
+  <use xlink:href="#image5445"/>
+</pattern>
+<image id="image5450" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern20" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,686,488)">
+  <use xlink:href="#image5450"/>
+</pattern>
+<image id="image5455" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern21" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,789,488)">
+  <use xlink:href="#image5455"/>
+</pattern>
+<image id="image5460" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern22" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,686,513)">
+  <use xlink:href="#image5460"/>
+</pattern>
+<image id="image5465" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern23" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10,0,0,1,689,513)">
+  <use xlink:href="#image5465"/>
+</pattern>
+<image id="image5470" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern24" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,789,513)">
+  <use xlink:href="#image5470"/>
+</pattern>
+<clipPath id="clip24">
+  <path d="M 375 486 L 482 486 L 482 515 L 375 515 Z "/>
+</clipPath>
+<clipPath id="clip25">
+  <path d="M 375 488 C 375 486.894531 375.894531 486 377 486 L 480 486 C 481.105469 486 482 486.449219 482 487 L 482 513 C 482 514.105469 481.105469 515 480 515 L 377 515 C 375.894531 515 375 514.550781 375 514 Z "/>
+</clipPath>
+<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,428.5,500.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image5476" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern25" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,374,485)">
+  <use xlink:href="#image5476"/>
+</pattern>
+<image id="image5479" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern26" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10.3,0,0,1,377,485)">
+  <use xlink:href="#image5479"/>
+</pattern>
+<image id="image5484" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern27" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,480,485)">
+  <use xlink:href="#image5484"/>
+</pattern>
+<image id="image5489" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern28" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,374,488)">
+  <use xlink:href="#image5489"/>
+</pattern>
+<image id="image5494" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern29" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,480,488)">
+  <use xlink:href="#image5494"/>
+</pattern>
+<image id="image5499" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern30" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,374,513)">
+  <use xlink:href="#image5499"/>
+</pattern>
+<image id="image5504" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern31" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10.3,0,0,1,377,513)">
+  <use xlink:href="#image5504"/>
+</pattern>
+<image id="image5509" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern32" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,480,513)">
+  <use xlink:href="#image5509"/>
+</pattern>
+<clipPath id="clip26">
+  <path d="M 171 150 L 994 150 L 994 179 L 171 179 Z "/>
+</clipPath>
+<clipPath id="clip27">
+  <path d="M 171 152 C 171 150.894531 171.894531 150 173 150 L 992 150 C 993.105469 150 994 150.449219 994 151 L 994 177 C 994 178.105469 993.105469 179 992 179 L 173 179 C 171.894531 179 171 178.550781 171 178 Z "/>
+</clipPath>
+<image id="image5516" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern33" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,170,149)">
+  <use xlink:href="#image5516"/>
+</pattern>
+<image id="image5519" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern34" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(81.9,0,0,1,173,149)">
+  <use xlink:href="#image5519"/>
+</pattern>
+<image id="image5524" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern35" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,992,149)">
+  <use xlink:href="#image5524"/>
+</pattern>
+<image id="image5529" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern36" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,170,152)">
+  <use xlink:href="#image5529"/>
+</pattern>
+<image id="image5534" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern37" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,992,152)">
+  <use xlink:href="#image5534"/>
+</pattern>
+<image id="image5539" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern38" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,170,177)">
+  <use xlink:href="#image5539"/>
+</pattern>
+<image id="image5544" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern39" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(81.9,0,0,1,173,177)">
+  <use xlink:href="#image5544"/>
+</pattern>
+<image id="image5549" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern40" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,992,177)">
+  <use xlink:href="#image5549"/>
+</pattern>
+<clipPath id="clip28">
+  <path d="M 150 43 L 1000 43 L 1000 44 L 150 44 Z "/>
+</clipPath>
+<clipPath id="clip29">
+  <path d="M 150 0 L 1000 0 L 1000 43 L 150 43 Z "/>
+</clipPath>
+</defs>
+<g id="surface5343">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="96"/>
+  <use xlink:href="#glyph0-10" x="58" y="96"/>
+  <use xlink:href="#glyph0-11" x="65" y="96"/>
+  <use xlink:href="#glyph0-12" x="75" y="96"/>
+  <use xlink:href="#glyph0-8" x="82" y="96"/>
+  <use xlink:href="#glyph0-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 101 L 145 101 L 145 119 L 0 119 Z M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="115"/>
+  <use xlink:href="#glyph0-4" x="47" y="115"/>
+  <use xlink:href="#glyph0-2" x="57" y="115"/>
+  <use xlink:href="#glyph0-8" x="67" y="115"/>
+  <use xlink:href="#glyph0-11" x="74" y="115"/>
+  <use xlink:href="#glyph0-15" x="84" y="115"/>
+  <use xlink:href="#glyph0-8" x="93" y="115"/>
+  <use xlink:href="#glyph0-13" x="100" y="115"/>
+</g>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 126 L 26 126 L 26 129 L 23 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 126 L 120 126 L 120 129 L 26 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 126 L 123 126 L 123 129 L 120 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 129 L 26 129 L 26 154 L 23 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 129 L 123 129 L 123 154 L 120 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 154 L 26 154 L 26 158 L 23 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 154 L 120 154 L 120 158 L 26 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 154 L 123 154 L 123 158 L 120 158 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 131 L 115 131 L 115 152 L 31 152 Z M 31 131 L 115 131 L 115 152 L 31 152 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="148"/>
+  <use xlink:href="#glyph1-8" x="69" y="148"/>
+  <use xlink:href="#glyph1-8" x="77" y="148"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="147"/>
+  <use xlink:href="#glyph1-8" x="69" y="147"/>
+  <use xlink:href="#glyph1-8" x="77" y="147"/>
+</g>
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,92.156863%,80.392157%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 165 L 31 165 L 31 182 L 5 182 Z M 5 165 L 31 165 L 31 182 L 5 182 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="179"/>
+  <use xlink:href="#glyph2-2" x="13" y="179"/>
+  <use xlink:href="#glyph2-3" x="22" y="179"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(60%,60%,60%);fill-opacity:1;" d="M 5 184 L 50 184 L 50 199 L 5 199 Z M 5 184 L 50 184 L 50 199 L 5 199 Z "/>
+<g style="fill:rgb(60%,60%,60%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="5" y="196"/>
+  <use xlink:href="#glyph3-2" x="12" y="196"/>
+  <use xlink:href="#glyph3-3" x="19" y="196"/>
+  <use xlink:href="#glyph3-4" x="26" y="196"/>
+  <use xlink:href="#glyph3-5" x="33" y="196"/>
+  <use xlink:href="#glyph3-3" x="36" y="196"/>
+  <use xlink:href="#glyph3-6" x="43" y="196"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 59 184 L 141 184 L 141 199 L 59 199 Z M 59 184 L 141 184 L 141 199 L 59 199 Z "/>
+<use xlink:href="#image5427" transform="matrix(1,0,0,1,140,191)"/>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 200 L 145 200 L 145 218 L 0 218 Z M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="214"/>
+  <use xlink:href="#glyph0-16" x="60" y="214"/>
+  <use xlink:href="#glyph0-17" x="64" y="214"/>
+  <use xlink:href="#glyph0-18" x="68" y="214"/>
+  <use xlink:href="#glyph0-2" x="78" y="214"/>
+  <use xlink:href="#glyph0-8" x="88" y="214"/>
+</g>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 220 L 53 220 L 53 237 L 5 237 Z M 5 220 L 53 220 L 53 237 L 5 237 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-4" x="5" y="234"/>
+  <use xlink:href="#glyph2-5" x="8" y="234"/>
+  <use xlink:href="#glyph2-3" x="17" y="234"/>
+  <use xlink:href="#glyph2-6" x="26" y="234"/>
+  <use xlink:href="#glyph2-7" x="34" y="234"/>
+  <use xlink:href="#glyph2-8" x="38" y="234"/>
+  <use xlink:href="#glyph2-7" x="42" y="234"/>
+  <use xlink:href="#glyph2-9" x="46" y="234"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 239 L 141 239 L 141 240 L 4 240 Z M 4 239 L 141 239 L 141 240 L 4 240 Z "/>
+<use xlink:href="#image5430" transform="matrix(1,0,0,1,140,239)"/>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 243 L 85 243 L 85 260 L 5 260 Z M 5 243 L 85 243 L 85 260 L 5 260 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-10" x="5" y="257"/>
+  <use xlink:href="#glyph2-11" x="16" y="257"/>
+  <use xlink:href="#glyph2-7" x="24" y="257"/>
+  <use xlink:href="#glyph2-8" x="28" y="257"/>
+  <use xlink:href="#glyph2-12" x="32" y="257"/>
+  <use xlink:href="#glyph2-8" x="39" y="257"/>
+  <use xlink:href="#glyph2-7" x="43" y="257"/>
+  <use xlink:href="#glyph2-9" x="47" y="257"/>
+  <use xlink:href="#glyph2-13" x="54" y="257"/>
+  <use xlink:href="#glyph2-14" x="58" y="257"/>
+  <use xlink:href="#glyph2-2" x="67" y="257"/>
+  <use xlink:href="#glyph2-15" x="76" y="257"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 262 L 141 262 L 141 263 L 4 263 Z M 4 262 L 141 262 L 141 263 L 4 263 Z "/>
+<use xlink:href="#image5433" transform="matrix(1,0,0,1,140,262)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 792 485 L 995 485 L 995 517 L 792 517 Z M 792 485 L 995 485 L 995 517 L 792 517 Z "/>
+<g clip-path="url(#clip22)" clip-rule="nonzero">
+<g clip-path="url(#clip23)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 687 486 L 791 486 L 791 515 L 687 515 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern17);" d="M 686 485 L 689 485 L 689 488 L 686 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern18);" d="M 689 485 L 789 485 L 789 488 L 689 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern19);" d="M 789 485 L 792 485 L 792 488 L 789 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern20);" d="M 686 488 L 689 488 L 689 513 L 686 513 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern21);" d="M 789 488 L 792 488 L 792 513 L 789 513 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern22);" d="M 686 513 L 689 513 L 689 517 L 686 517 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern23);" d="M 689 513 L 789 513 L 789 517 L 689 517 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern24);" d="M 789 513 L 792 513 L 792 517 L 789 517 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 694 490 L 784 490 L 784 511 L 694 511 Z M 694 490 L 784 490 L 784 511 L 694 511 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-9" x="694" y="507"/>
+  <use xlink:href="#glyph1-10" x="703" y="507"/>
+  <use xlink:href="#glyph1-11" x="711" y="507"/>
+  <use xlink:href="#glyph1-12" x="718" y="507"/>
+  <use xlink:href="#glyph1-6" x="723" y="507"/>
+  <use xlink:href="#glyph1-8" x="731" y="507"/>
+  <use xlink:href="#glyph1-13" x="739" y="507"/>
+  <use xlink:href="#glyph1-5" x="743" y="507"/>
+  <use xlink:href="#glyph1-6" x="750" y="507"/>
+  <use xlink:href="#glyph1-14" x="758" y="507"/>
+  <use xlink:href="#glyph1-12" x="765" y="507"/>
+  <use xlink:href="#glyph1-6" x="770" y="507"/>
+  <use xlink:href="#glyph1-15" x="778" y="507"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="694" y="506"/>
+  <use xlink:href="#glyph1-10" x="703" y="506"/>
+  <use xlink:href="#glyph1-11" x="711" y="506"/>
+  <use xlink:href="#glyph1-12" x="718" y="506"/>
+  <use xlink:href="#glyph1-6" x="723" y="506"/>
+  <use xlink:href="#glyph1-8" x="731" y="506"/>
+  <use xlink:href="#glyph1-13" x="739" y="506"/>
+  <use xlink:href="#glyph1-5" x="743" y="506"/>
+  <use xlink:href="#glyph1-6" x="750" y="506"/>
+  <use xlink:href="#glyph1-14" x="758" y="506"/>
+  <use xlink:href="#glyph1-12" x="765" y="506"/>
+  <use xlink:href="#glyph1-6" x="770" y="506"/>
+  <use xlink:href="#glyph1-15" x="778" y="506"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 483 485 L 686 485 L 686 517 L 483 517 Z M 483 485 L 686 485 L 686 517 L 483 517 Z "/>
+<g clip-path="url(#clip24)" clip-rule="nonzero">
+<g clip-path="url(#clip25)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear3);" d="M 375 486 L 482 486 L 482 515 L 375 515 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern25);" d="M 374 485 L 377 485 L 377 488 L 374 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern26);" d="M 377 485 L 480 485 L 480 488 L 377 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern27);" d="M 480 485 L 483 485 L 483 488 L 480 488 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern28);" d="M 374 488 L 377 488 L 377 513 L 374 513 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern29);" d="M 480 488 L 483 488 L 483 513 L 480 513 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern30);" d="M 374 513 L 377 513 L 377 517 L 374 517 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern31);" d="M 377 513 L 480 513 L 480 517 L 377 517 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern32);" d="M 480 513 L 483 513 L 483 517 L 480 517 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 382 490 L 475 490 L 475 511 L 382 511 Z M 382 490 L 475 490 L 475 511 L 382 511 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-16" x="382" y="507"/>
+  <use xlink:href="#glyph1-11" x="394" y="507"/>
+  <use xlink:href="#glyph1-17" x="401" y="507"/>
+  <use xlink:href="#glyph1-18" x="409" y="507"/>
+  <use xlink:href="#glyph1-11" x="417" y="507"/>
+  <use xlink:href="#glyph1-19" x="424" y="507"/>
+  <use xlink:href="#glyph1-13" x="428" y="507"/>
+  <use xlink:href="#glyph1-20" x="432" y="507"/>
+  <use xlink:href="#glyph1-6" x="441" y="507"/>
+  <use xlink:href="#glyph1-21" x="449" y="507"/>
+  <use xlink:href="#glyph1-22" x="456" y="507"/>
+  <use xlink:href="#glyph1-17" x="459" y="507"/>
+  <use xlink:href="#glyph1-23" x="467" y="507"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-16" x="382" y="506"/>
+  <use xlink:href="#glyph1-11" x="394" y="506"/>
+  <use xlink:href="#glyph1-17" x="401" y="506"/>
+  <use xlink:href="#glyph1-18" x="409" y="506"/>
+  <use xlink:href="#glyph1-11" x="417" y="506"/>
+  <use xlink:href="#glyph1-19" x="424" y="506"/>
+  <use xlink:href="#glyph1-13" x="428" y="506"/>
+  <use xlink:href="#glyph1-20" x="432" y="506"/>
+  <use xlink:href="#glyph1-6" x="441" y="506"/>
+  <use xlink:href="#glyph1-21" x="449" y="506"/>
+  <use xlink:href="#glyph1-22" x="456" y="506"/>
+  <use xlink:href="#glyph1-17" x="459" y="506"/>
+  <use xlink:href="#glyph1-23" x="467" y="506"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 485 L 374 485 L 374 517 L 170 517 Z M 170 485 L 374 485 L 374 517 L 170 517 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 247 L 995 247 L 995 457 L 170 457 Z M 170 247 L 995 247 L 995 457 L 170 457 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-16" x="170" y="263"/>
+  <use xlink:href="#glyph1-11" x="182" y="263"/>
+  <use xlink:href="#glyph1-17" x="189" y="263"/>
+  <use xlink:href="#glyph1-18" x="197" y="263"/>
+  <use xlink:href="#glyph1-11" x="205" y="263"/>
+  <use xlink:href="#glyph1-19" x="212" y="263"/>
+  <use xlink:href="#glyph1-13" x="216" y="263"/>
+  <use xlink:href="#glyph1-24" x="220" y="263"/>
+  <use xlink:href="#glyph1-6" x="227" y="263"/>
+  <use xlink:href="#glyph1-21" x="235" y="263"/>
+  <use xlink:href="#glyph1-22" x="242" y="263"/>
+  <use xlink:href="#glyph1-17" x="245" y="263"/>
+  <use xlink:href="#glyph1-23" x="253" y="263"/>
+  <use xlink:href="#glyph1-13" x="261" y="263"/>
+  <use xlink:href="#glyph1-22" x="265" y="263"/>
+  <use xlink:href="#glyph1-17" x="268" y="263"/>
+  <use xlink:href="#glyph1-25" x="276" y="263"/>
+  <use xlink:href="#glyph1-2" x="283" y="263"/>
+  <use xlink:href="#glyph1-19" x="292" y="263"/>
+  <use xlink:href="#glyph1-25" x="296" y="263"/>
+  <use xlink:href="#glyph1-6" x="303" y="263"/>
+  <use xlink:href="#glyph1-5" x="311" y="263"/>
+  <use xlink:href="#glyph1-13" x="318" y="263"/>
+  <use xlink:href="#glyph1-6" x="322" y="263"/>
+  <use xlink:href="#glyph1-26" x="330" y="263"/>
+  <use xlink:href="#glyph1-14" x="338" y="263"/>
+  <use xlink:href="#glyph1-10" x="345" y="263"/>
+  <use xlink:href="#glyph1-11" x="353" y="263"/>
+  <use xlink:href="#glyph1-17" x="360" y="263"/>
+  <use xlink:href="#glyph1-23" x="368" y="263"/>
+  <use xlink:href="#glyph1-22" x="376" y="263"/>
+  <use xlink:href="#glyph1-17" x="379" y="263"/>
+  <use xlink:href="#glyph1-23" x="387" y="263"/>
+  <use xlink:href="#glyph1-13" x="395" y="263"/>
+  <use xlink:href="#glyph1-24" x="399" y="263"/>
+  <use xlink:href="#glyph1-6" x="406" y="263"/>
+  <use xlink:href="#glyph1-21" x="414" y="263"/>
+  <use xlink:href="#glyph1-13" x="421" y="263"/>
+  <use xlink:href="#glyph1-3" x="425" y="263"/>
+  <use xlink:href="#glyph1-11" x="436" y="263"/>
+  <use xlink:href="#glyph1-15" x="443" y="263"/>
+  <use xlink:href="#glyph1-6" x="449" y="263"/>
+  <use xlink:href="#glyph1-12" x="457" y="263"/>
+  <use xlink:href="#glyph1-22" x="462" y="263"/>
+  <use xlink:href="#glyph1-11" x="465" y="263"/>
+  <use xlink:href="#glyph1-19" x="472" y="263"/>
+  <use xlink:href="#glyph1-13" x="476" y="263"/>
+  <use xlink:href="#glyph1-27" x="480" y="263"/>
+  <use xlink:href="#glyph1-22" x="492" y="263"/>
+  <use xlink:href="#glyph1-15" x="495" y="263"/>
+  <use xlink:href="#glyph1-10" x="501" y="263"/>
+  <use xlink:href="#glyph1-13" x="509" y="263"/>
+  <use xlink:href="#glyph1-21" x="513" y="263"/>
+  <use xlink:href="#glyph1-2" x="520" y="263"/>
+  <use xlink:href="#glyph1-18" x="529" y="263"/>
+  <use xlink:href="#glyph1-12" x="537" y="263"/>
+  <use xlink:href="#glyph1-13" x="542" y="263"/>
+  <use xlink:href="#glyph1-14" x="546" y="263"/>
+  <use xlink:href="#glyph1-2" x="553" y="263"/>
+  <use xlink:href="#glyph1-17" x="562" y="263"/>
+  <use xlink:href="#glyph1-15" x="570" y="263"/>
+  <use xlink:href="#glyph1-11" x="576" y="263"/>
+  <use xlink:href="#glyph1-14" x="583" y="263"/>
+  <use xlink:href="#glyph1-15" x="590" y="263"/>
+  <use xlink:href="#glyph1-13" x="596" y="263"/>
+  <use xlink:href="#glyph1-22" x="600" y="263"/>
+  <use xlink:href="#glyph1-17" x="603" y="263"/>
+  <use xlink:href="#glyph1-13" x="611" y="263"/>
+  <use xlink:href="#glyph1-11" x="615" y="263"/>
+  <use xlink:href="#glyph1-13" x="622" y="263"/>
+  <use xlink:href="#glyph1-5" x="626" y="263"/>
+  <use xlink:href="#glyph1-6" x="633" y="263"/>
+  <use xlink:href="#glyph1-14" x="641" y="263"/>
+  <use xlink:href="#glyph1-18" x="648" y="263"/>
+  <use xlink:href="#glyph1-12" x="656" y="263"/>
+  <use xlink:href="#glyph1-6" x="661" y="263"/>
+  <use xlink:href="#glyph1-13" x="669" y="263"/>
+  <use xlink:href="#glyph1-11" x="673" y="263"/>
+  <use xlink:href="#glyph1-17" x="680" y="263"/>
+  <use xlink:href="#glyph1-8" x="688" y="263"/>
+  <use xlink:href="#glyph1-13" x="696" y="263"/>
+  <use xlink:href="#glyph1-11" x="700" y="263"/>
+  <use xlink:href="#glyph1-18" x="707" y="263"/>
+  <use xlink:href="#glyph1-15" x="715" y="263"/>
+  <use xlink:href="#glyph1-10" x="721" y="263"/>
+  <use xlink:href="#glyph1-6" x="729" y="263"/>
+  <use xlink:href="#glyph1-17" x="737" y="263"/>
+  <use xlink:href="#glyph1-15" x="745" y="263"/>
+  <use xlink:href="#glyph1-22" x="751" y="263"/>
+  <use xlink:href="#glyph1-14" x="754" y="263"/>
+  <use xlink:href="#glyph1-13" x="761" y="263"/>
+  <use xlink:href="#glyph1-3" x="765" y="263"/>
+  <use xlink:href="#glyph1-11" x="776" y="263"/>
+  <use xlink:href="#glyph1-17" x="783" y="263"/>
+  <use xlink:href="#glyph1-17" x="791" y="263"/>
+  <use xlink:href="#glyph1-6" x="799" y="263"/>
+  <use xlink:href="#glyph1-12" x="807" y="263"/>
+  <use xlink:href="#glyph1-28" x="812" y="263"/>
+  <use xlink:href="#glyph1-13" x="816" y="263"/>
+  <use xlink:href="#glyph1-22" x="820" y="263"/>
+  <use xlink:href="#glyph1-29" x="823" y="263"/>
+  <use xlink:href="#glyph1-6" x="826" y="263"/>
+  <use xlink:href="#glyph1-29" x="834" y="263"/>
+  <use xlink:href="#glyph1-13" x="837" y="263"/>
+  <use xlink:href="#glyph1-30" x="841" y="263"/>
+  <use xlink:href="#glyph1-21" x="849" y="263"/>
+  <use xlink:href="#glyph1-13" x="856" y="263"/>
+  <use xlink:href="#glyph1-18" x="860" y="263"/>
+  <use xlink:href="#glyph1-5" x="868" y="263"/>
+  <use xlink:href="#glyph1-22" x="875" y="263"/>
+  <use xlink:href="#glyph1-17" x="878" y="263"/>
+  <use xlink:href="#glyph1-23" x="886" y="263"/>
+  <use xlink:href="#glyph1-13" x="894" y="263"/>
+  <use xlink:href="#glyph1-31" x="898" y="263"/>
+  <use xlink:href="#glyph1-32" x="907" y="263"/>
+  <use xlink:href="#glyph1-31" x="918" y="263"/>
+  <use xlink:href="#glyph1-29" x="927" y="263"/>
+  <use xlink:href="#glyph1-13" x="930" y="263"/>
+  <use xlink:href="#glyph1-33" x="934" y="263"/>
+  <use xlink:href="#glyph1-10" x="944" y="263"/>
+  <use xlink:href="#glyph1-6" x="952" y="263"/>
+  <use xlink:href="#glyph1-13" x="960" y="263"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-5" x="170" y="284"/>
+  <use xlink:href="#glyph1-6" x="177" y="284"/>
+  <use xlink:href="#glyph1-14" x="185" y="284"/>
+  <use xlink:href="#glyph1-18" x="192" y="284"/>
+  <use xlink:href="#glyph1-12" x="200" y="284"/>
+  <use xlink:href="#glyph1-22" x="205" y="284"/>
+  <use xlink:href="#glyph1-15" x="208" y="284"/>
+  <use xlink:href="#glyph1-21" x="214" y="284"/>
+  <use xlink:href="#glyph1-13" x="221" y="284"/>
+  <use xlink:href="#glyph1-2" x="225" y="284"/>
+  <use xlink:href="#glyph1-34" x="234" y="284"/>
+  <use xlink:href="#glyph1-13" x="240" y="284"/>
+  <use xlink:href="#glyph1-31" x="244" y="284"/>
+  <use xlink:href="#glyph1-2" x="253" y="284"/>
+  <use xlink:href="#glyph1-17" x="262" y="284"/>
+  <use xlink:href="#glyph1-8" x="270" y="284"/>
+  <use xlink:href="#glyph1-13" x="278" y="284"/>
+  <use xlink:href="#glyph1-22" x="282" y="284"/>
+  <use xlink:href="#glyph1-5" x="285" y="284"/>
+  <use xlink:href="#glyph1-13" x="292" y="284"/>
+  <use xlink:href="#glyph1-3" x="296" y="284"/>
+  <use xlink:href="#glyph1-2" x="307" y="284"/>
+  <use xlink:href="#glyph1-2" x="316" y="284"/>
+  <use xlink:href="#glyph1-15" x="325" y="284"/>
+  <use xlink:href="#glyph1-13" x="331" y="284"/>
+  <use xlink:href="#glyph1-22" x="335" y="284"/>
+  <use xlink:href="#glyph1-34" x="338" y="284"/>
+  <use xlink:href="#glyph1-13" x="344" y="284"/>
+  <use xlink:href="#glyph1-21" x="348" y="284"/>
+  <use xlink:href="#glyph1-2" x="355" y="284"/>
+  <use xlink:href="#glyph1-18" x="364" y="284"/>
+  <use xlink:href="#glyph1-13" x="372" y="284"/>
+  <use xlink:href="#glyph1-11" x="376" y="284"/>
+  <use xlink:href="#glyph1-14" x="383" y="284"/>
+  <use xlink:href="#glyph1-15" x="390" y="284"/>
+  <use xlink:href="#glyph1-18" x="396" y="284"/>
+  <use xlink:href="#glyph1-11" x="404" y="284"/>
+  <use xlink:href="#glyph1-19" x="411" y="284"/>
+  <use xlink:href="#glyph1-19" x="415" y="284"/>
+  <use xlink:href="#glyph1-21" x="419" y="284"/>
+  <use xlink:href="#glyph1-13" x="426" y="284"/>
+  <use xlink:href="#glyph1-6" x="430" y="284"/>
+  <use xlink:href="#glyph1-26" x="438" y="284"/>
+  <use xlink:href="#glyph1-14" x="446" y="284"/>
+  <use xlink:href="#glyph1-10" x="453" y="284"/>
+  <use xlink:href="#glyph1-11" x="461" y="284"/>
+  <use xlink:href="#glyph1-17" x="468" y="284"/>
+  <use xlink:href="#glyph1-23" x="476" y="284"/>
+  <use xlink:href="#glyph1-6" x="484" y="284"/>
+  <use xlink:href="#glyph1-13" x="492" y="284"/>
+  <use xlink:href="#glyph1-24" x="496" y="284"/>
+  <use xlink:href="#glyph1-6" x="503" y="284"/>
+  <use xlink:href="#glyph1-21" x="511" y="284"/>
+  <use xlink:href="#glyph1-5" x="518" y="284"/>
+  <use xlink:href="#glyph1-13" x="525" y="284"/>
+  <use xlink:href="#glyph1-27" x="529" y="284"/>
+  <use xlink:href="#glyph1-22" x="541" y="284"/>
+  <use xlink:href="#glyph1-15" x="544" y="284"/>
+  <use xlink:href="#glyph1-10" x="550" y="284"/>
+  <use xlink:href="#glyph1-13" x="558" y="284"/>
+  <use xlink:href="#glyph1-11" x="562" y="284"/>
+  <use xlink:href="#glyph1-17" x="569" y="284"/>
+  <use xlink:href="#glyph1-13" x="577" y="284"/>
+  <use xlink:href="#glyph1-11" x="581" y="284"/>
+  <use xlink:href="#glyph1-15" x="588" y="284"/>
+  <use xlink:href="#glyph1-15" x="594" y="284"/>
+  <use xlink:href="#glyph1-11" x="600" y="284"/>
+  <use xlink:href="#glyph1-14" x="607" y="284"/>
+  <use xlink:href="#glyph1-24" x="614" y="284"/>
+  <use xlink:href="#glyph1-6" x="621" y="284"/>
+  <use xlink:href="#glyph1-12" x="629" y="284"/>
+  <use xlink:href="#glyph1-35" x="634" y="284"/>
+  <use xlink:href="#glyph1-13" x="637" y="284"/>
+  <use xlink:href="#glyph1-15" x="641" y="284"/>
+  <use xlink:href="#glyph1-10" x="647" y="284"/>
+  <use xlink:href="#glyph1-6" x="655" y="284"/>
+  <use xlink:href="#glyph1-21" x="663" y="284"/>
+  <use xlink:href="#glyph1-13" x="670" y="284"/>
+  <use xlink:href="#glyph1-14" x="674" y="284"/>
+  <use xlink:href="#glyph1-11" x="681" y="284"/>
+  <use xlink:href="#glyph1-17" x="688" y="284"/>
+  <use xlink:href="#glyph1-13" x="696" y="284"/>
+  <use xlink:href="#glyph1-3" x="700" y="284"/>
+  <use xlink:href="#glyph1-11" x="711" y="284"/>
+  <use xlink:href="#glyph1-5" x="718" y="284"/>
+  <use xlink:href="#glyph1-36" x="725" y="284"/>
+  <use xlink:href="#glyph1-18" x="733" y="284"/>
+  <use xlink:href="#glyph1-6" x="741" y="284"/>
+  <use xlink:href="#glyph1-12" x="749" y="284"/>
+  <use xlink:href="#glyph1-11" x="754" y="284"/>
+  <use xlink:href="#glyph1-8" x="761" y="284"/>
+  <use xlink:href="#glyph1-6" x="769" y="284"/>
+  <use xlink:href="#glyph1-13" x="777" y="284"/>
+  <use xlink:href="#glyph1-15" x="781" y="284"/>
+  <use xlink:href="#glyph1-10" x="787" y="284"/>
+  <use xlink:href="#glyph1-6" x="795" y="284"/>
+  <use xlink:href="#glyph1-13" x="803" y="284"/>
+  <use xlink:href="#glyph1-22" x="807" y="284"/>
+  <use xlink:href="#glyph1-17" x="810" y="284"/>
+  <use xlink:href="#glyph1-15" x="818" y="284"/>
+  <use xlink:href="#glyph1-6" x="824" y="284"/>
+  <use xlink:href="#glyph1-17" x="832" y="284"/>
+  <use xlink:href="#glyph1-8" x="840" y="284"/>
+  <use xlink:href="#glyph1-6" x="848" y="284"/>
+  <use xlink:href="#glyph1-8" x="856" y="284"/>
+  <use xlink:href="#glyph1-13" x="864" y="284"/>
+  <use xlink:href="#glyph1-14" x="868" y="284"/>
+  <use xlink:href="#glyph1-2" x="875" y="284"/>
+  <use xlink:href="#glyph1-17" x="884" y="284"/>
+  <use xlink:href="#glyph1-15" x="892" y="284"/>
+  <use xlink:href="#glyph1-11" x="898" y="284"/>
+  <use xlink:href="#glyph1-14" x="905" y="284"/>
+  <use xlink:href="#glyph1-15" x="912" y="284"/>
+  <use xlink:href="#glyph1-13" x="918" y="284"/>
+  <use xlink:href="#glyph1-2" x="922" y="284"/>
+  <use xlink:href="#glyph1-12" x="931" y="284"/>
+  <use xlink:href="#glyph1-13" x="936" y="284"/>
+  <use xlink:href="#glyph1-14" x="940" y="284"/>
+  <use xlink:href="#glyph1-2" x="947" y="284"/>
+  <use xlink:href="#glyph1-18" x="956" y="284"/>
+  <use xlink:href="#glyph1-19" x="964" y="284"/>
+  <use xlink:href="#glyph1-8" x="968" y="284"/>
+  <use xlink:href="#glyph1-13" x="976" y="284"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-5" x="170" y="305"/>
+  <use xlink:href="#glyph1-22" x="177" y="305"/>
+  <use xlink:href="#glyph1-3" x="180" y="305"/>
+  <use xlink:href="#glyph1-4" x="191" y="305"/>
+  <use xlink:href="#glyph1-19" x="199" y="305"/>
+  <use xlink:href="#glyph1-21" x="203" y="305"/>
+  <use xlink:href="#glyph1-13" x="210" y="305"/>
+  <use xlink:href="#glyph1-8" x="214" y="305"/>
+  <use xlink:href="#glyph1-2" x="222" y="305"/>
+  <use xlink:href="#glyph1-13" x="231" y="305"/>
+  <use xlink:href="#glyph1-15" x="235" y="305"/>
+  <use xlink:href="#glyph1-10" x="241" y="305"/>
+  <use xlink:href="#glyph1-6" x="249" y="305"/>
+  <use xlink:href="#glyph1-13" x="257" y="305"/>
+  <use xlink:href="#glyph1-5" x="261" y="305"/>
+  <use xlink:href="#glyph1-11" x="268" y="305"/>
+  <use xlink:href="#glyph1-3" x="275" y="305"/>
+  <use xlink:href="#glyph1-6" x="286" y="305"/>
+  <use xlink:href="#glyph1-13" x="294" y="305"/>
+  <use xlink:href="#glyph1-15" x="298" y="305"/>
+  <use xlink:href="#glyph1-2" x="304" y="305"/>
+  <use xlink:href="#glyph1-13" x="313" y="305"/>
+  <use xlink:href="#glyph1-15" x="317" y="305"/>
+  <use xlink:href="#glyph1-10" x="323" y="305"/>
+  <use xlink:href="#glyph1-6" x="331" y="305"/>
+  <use xlink:href="#glyph1-3" x="339" y="305"/>
+  <use xlink:href="#glyph1-13" x="350" y="305"/>
+  <use xlink:href="#glyph1-11" x="354" y="305"/>
+  <use xlink:href="#glyph1-17" x="361" y="305"/>
+  <use xlink:href="#glyph1-8" x="369" y="305"/>
+  <use xlink:href="#glyph1-13" x="377" y="305"/>
+  <use xlink:href="#glyph1-4" x="381" y="305"/>
+  <use xlink:href="#glyph1-11" x="389" y="305"/>
+  <use xlink:href="#glyph1-5" x="396" y="305"/>
+  <use xlink:href="#glyph1-5" x="403" y="305"/>
+  <use xlink:href="#glyph1-13" x="410" y="305"/>
+  <use xlink:href="#glyph1-3" x="414" y="305"/>
+  <use xlink:href="#glyph1-6" x="425" y="305"/>
+  <use xlink:href="#glyph1-5" x="433" y="305"/>
+  <use xlink:href="#glyph1-5" x="440" y="305"/>
+  <use xlink:href="#glyph1-11" x="447" y="305"/>
+  <use xlink:href="#glyph1-23" x="454" y="305"/>
+  <use xlink:href="#glyph1-6" x="462" y="305"/>
+  <use xlink:href="#glyph1-5" x="470" y="305"/>
+  <use xlink:href="#glyph1-13" x="477" y="305"/>
+  <use xlink:href="#glyph1-30" x="481" y="305"/>
+  <use xlink:href="#glyph1-6" x="489" y="305"/>
+  <use xlink:href="#glyph1-15" x="497" y="305"/>
+  <use xlink:href="#glyph1-27" x="503" y="305"/>
+  <use xlink:href="#glyph1-6" x="515" y="305"/>
+  <use xlink:href="#glyph1-6" x="523" y="305"/>
+  <use xlink:href="#glyph1-17" x="531" y="305"/>
+  <use xlink:href="#glyph1-13" x="539" y="305"/>
+  <use xlink:href="#glyph1-21" x="543" y="305"/>
+  <use xlink:href="#glyph1-2" x="550" y="305"/>
+  <use xlink:href="#glyph1-18" x="559" y="305"/>
+  <use xlink:href="#glyph1-28" x="567" y="305"/>
+  <use xlink:href="#glyph1-13" x="571" y="305"/>
+  <use xlink:href="#glyph1-12" x="575" y="305"/>
+  <use xlink:href="#glyph1-6" x="580" y="305"/>
+  <use xlink:href="#glyph1-11" x="588" y="305"/>
+  <use xlink:href="#glyph1-8" x="595" y="305"/>
+  <use xlink:href="#glyph1-22" x="603" y="305"/>
+  <use xlink:href="#glyph1-17" x="606" y="305"/>
+  <use xlink:href="#glyph1-23" x="614" y="305"/>
+  <use xlink:href="#glyph1-13" x="622" y="305"/>
+  <use xlink:href="#glyph1-6" x="626" y="305"/>
+  <use xlink:href="#glyph1-25" x="634" y="305"/>
+  <use xlink:href="#glyph1-6" x="641" y="305"/>
+  <use xlink:href="#glyph1-12" x="649" y="305"/>
+  <use xlink:href="#glyph1-21" x="654" y="305"/>
+  <use xlink:href="#glyph1-15" x="661" y="305"/>
+  <use xlink:href="#glyph1-10" x="667" y="305"/>
+  <use xlink:href="#glyph1-22" x="675" y="305"/>
+  <use xlink:href="#glyph1-17" x="678" y="305"/>
+  <use xlink:href="#glyph1-23" x="686" y="305"/>
+  <use xlink:href="#glyph1-13" x="694" y="305"/>
+  <use xlink:href="#glyph1-22" x="698" y="305"/>
+  <use xlink:href="#glyph1-17" x="701" y="305"/>
+  <use xlink:href="#glyph1-13" x="709" y="305"/>
+  <use xlink:href="#glyph1-15" x="713" y="305"/>
+  <use xlink:href="#glyph1-10" x="719" y="305"/>
+  <use xlink:href="#glyph1-6" x="727" y="305"/>
+  <use xlink:href="#glyph1-13" x="735" y="305"/>
+  <use xlink:href="#glyph1-4" x="739" y="305"/>
+  <use xlink:href="#glyph1-12" x="747" y="305"/>
+  <use xlink:href="#glyph1-2" x="752" y="305"/>
+  <use xlink:href="#glyph1-14" x="761" y="305"/>
+  <use xlink:href="#glyph1-6" x="768" y="305"/>
+  <use xlink:href="#glyph1-5" x="776" y="305"/>
+  <use xlink:href="#glyph1-5" x="783" y="305"/>
+  <use xlink:href="#glyph1-29" x="790" y="305"/>
+  <use xlink:href="#glyph1-13" x="793" y="305"/>
+  <use xlink:href="#glyph1-37" x="797" y="305"/>
+  <use xlink:href="#glyph1-2" x="807" y="305"/>
+  <use xlink:href="#glyph1-15" x="816" y="305"/>
+  <use xlink:href="#glyph1-6" x="822" y="305"/>
+  <use xlink:href="#glyph1-13" x="830" y="305"/>
+  <use xlink:href="#glyph1-15" x="834" y="305"/>
+  <use xlink:href="#glyph1-10" x="840" y="305"/>
+  <use xlink:href="#glyph1-11" x="848" y="305"/>
+  <use xlink:href="#glyph1-15" x="855" y="305"/>
+  <use xlink:href="#glyph1-13" x="861" y="305"/>
+  <use xlink:href="#glyph1-15" x="865" y="305"/>
+  <use xlink:href="#glyph1-10" x="871" y="305"/>
+  <use xlink:href="#glyph1-6" x="879" y="305"/>
+  <use xlink:href="#glyph1-13" x="887" y="305"/>
+  <use xlink:href="#glyph1-24" x="891" y="305"/>
+  <use xlink:href="#glyph1-6" x="898" y="305"/>
+  <use xlink:href="#glyph1-21" x="906" y="305"/>
+  <use xlink:href="#glyph1-13" x="913" y="305"/>
+  <use xlink:href="#glyph1-3" x="917" y="305"/>
+  <use xlink:href="#glyph1-11" x="928" y="305"/>
+  <use xlink:href="#glyph1-15" x="935" y="305"/>
+  <use xlink:href="#glyph1-6" x="941" y="305"/>
+  <use xlink:href="#glyph1-12" x="949" y="305"/>
+  <use xlink:href="#glyph1-22" x="954" y="305"/>
+  <use xlink:href="#glyph1-11" x="957" y="305"/>
+  <use xlink:href="#glyph1-19" x="964" y="305"/>
+  <use xlink:href="#glyph1-13" x="968" y="305"/>
+  <use xlink:href="#glyph1-22" x="972" y="305"/>
+  <use xlink:href="#glyph1-5" x="975" y="305"/>
+  <use xlink:href="#glyph1-13" x="982" y="305"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-11" x="170" y="326"/>
+  <use xlink:href="#glyph1-19" x="177" y="326"/>
+  <use xlink:href="#glyph1-5" x="181" y="326"/>
+  <use xlink:href="#glyph1-2" x="188" y="326"/>
+  <use xlink:href="#glyph1-13" x="197" y="326"/>
+  <use xlink:href="#glyph1-5" x="201" y="326"/>
+  <use xlink:href="#glyph1-6" x="208" y="326"/>
+  <use xlink:href="#glyph1-14" x="216" y="326"/>
+  <use xlink:href="#glyph1-12" x="223" y="326"/>
+  <use xlink:href="#glyph1-6" x="228" y="326"/>
+  <use xlink:href="#glyph1-15" x="236" y="326"/>
+  <use xlink:href="#glyph1-13" x="242" y="326"/>
+  <use xlink:href="#glyph1-38" x="246" y="326"/>
+  <use xlink:href="#glyph1-13" x="252" y="326"/>
+  <use xlink:href="#glyph1-22" x="256" y="326"/>
+  <use xlink:href="#glyph1-15" x="259" y="326"/>
+  <use xlink:href="#glyph1-39" x="265" y="326"/>
+  <use xlink:href="#glyph1-5" x="268" y="326"/>
+  <use xlink:href="#glyph1-13" x="275" y="326"/>
+  <use xlink:href="#glyph1-17" x="279" y="326"/>
+  <use xlink:href="#glyph1-2" x="287" y="326"/>
+  <use xlink:href="#glyph1-15" x="296" y="326"/>
+  <use xlink:href="#glyph1-13" x="302" y="326"/>
+  <use xlink:href="#glyph1-11" x="306" y="326"/>
+  <use xlink:href="#glyph1-13" x="313" y="326"/>
+  <use xlink:href="#glyph1-4" x="317" y="326"/>
+  <use xlink:href="#glyph1-18" x="325" y="326"/>
+  <use xlink:href="#glyph1-30" x="333" y="326"/>
+  <use xlink:href="#glyph1-19" x="341" y="326"/>
+  <use xlink:href="#glyph1-22" x="345" y="326"/>
+  <use xlink:href="#glyph1-14" x="348" y="326"/>
+  <use xlink:href="#glyph1-13" x="355" y="326"/>
+  <use xlink:href="#glyph1-24" x="359" y="326"/>
+  <use xlink:href="#glyph1-6" x="366" y="326"/>
+  <use xlink:href="#glyph1-21" x="374" y="326"/>
+  <use xlink:href="#glyph1-13" x="381" y="326"/>
+  <use xlink:href="#glyph1-11" x="385" y="326"/>
+  <use xlink:href="#glyph1-17" x="392" y="326"/>
+  <use xlink:href="#glyph1-8" x="400" y="326"/>
+  <use xlink:href="#glyph1-13" x="408" y="326"/>
+  <use xlink:href="#glyph1-5" x="412" y="326"/>
+  <use xlink:href="#glyph1-2" x="419" y="326"/>
+  <use xlink:href="#glyph1-13" x="428" y="326"/>
+  <use xlink:href="#glyph1-3" x="432" y="326"/>
+  <use xlink:href="#glyph1-18" x="443" y="326"/>
+  <use xlink:href="#glyph1-5" x="451" y="326"/>
+  <use xlink:href="#glyph1-15" x="458" y="326"/>
+  <use xlink:href="#glyph1-13" x="464" y="326"/>
+  <use xlink:href="#glyph1-30" x="468" y="326"/>
+  <use xlink:href="#glyph1-6" x="476" y="326"/>
+  <use xlink:href="#glyph1-13" x="484" y="326"/>
+  <use xlink:href="#glyph1-6" x="488" y="326"/>
+  <use xlink:href="#glyph1-17" x="496" y="326"/>
+  <use xlink:href="#glyph1-14" x="504" y="326"/>
+  <use xlink:href="#glyph1-12" x="511" y="326"/>
+  <use xlink:href="#glyph1-21" x="516" y="326"/>
+  <use xlink:href="#glyph1-4" x="523" y="326"/>
+  <use xlink:href="#glyph1-15" x="531" y="326"/>
+  <use xlink:href="#glyph1-6" x="537" y="326"/>
+  <use xlink:href="#glyph1-8" x="545" y="326"/>
+  <use xlink:href="#glyph1-13" x="553" y="326"/>
+  <use xlink:href="#glyph1-11" x="557" y="326"/>
+  <use xlink:href="#glyph1-5" x="564" y="326"/>
+  <use xlink:href="#glyph1-13" x="571" y="326"/>
+  <use xlink:href="#glyph1-27" x="575" y="326"/>
+  <use xlink:href="#glyph1-6" x="587" y="326"/>
+  <use xlink:href="#glyph1-19" x="595" y="326"/>
+  <use xlink:href="#glyph1-19" x="599" y="326"/>
+  <use xlink:href="#glyph1-13" x="603" y="326"/>
+  <use xlink:href="#glyph1-11" x="607" y="326"/>
+  <use xlink:href="#glyph1-5" x="614" y="326"/>
+  <use xlink:href="#glyph1-13" x="621" y="326"/>
+  <use xlink:href="#glyph1-5" x="625" y="326"/>
+  <use xlink:href="#glyph1-22" x="632" y="326"/>
+  <use xlink:href="#glyph1-23" x="635" y="326"/>
+  <use xlink:href="#glyph1-17" x="643" y="326"/>
+  <use xlink:href="#glyph1-6" x="651" y="326"/>
+  <use xlink:href="#glyph1-8" x="659" y="326"/>
+  <use xlink:href="#glyph1-29" x="667" y="326"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="170" y="368"/>
+  <use xlink:href="#glyph1-10" x="179" y="368"/>
+  <use xlink:href="#glyph1-11" x="187" y="368"/>
+  <use xlink:href="#glyph1-12" x="194" y="368"/>
+  <use xlink:href="#glyph1-6" x="199" y="368"/>
+  <use xlink:href="#glyph1-8" x="207" y="368"/>
+  <use xlink:href="#glyph1-13" x="215" y="368"/>
+  <use xlink:href="#glyph1-5" x="219" y="368"/>
+  <use xlink:href="#glyph1-6" x="226" y="368"/>
+  <use xlink:href="#glyph1-14" x="234" y="368"/>
+  <use xlink:href="#glyph1-12" x="241" y="368"/>
+  <use xlink:href="#glyph1-6" x="246" y="368"/>
+  <use xlink:href="#glyph1-15" x="254" y="368"/>
+  <use xlink:href="#glyph1-13" x="260" y="368"/>
+  <use xlink:href="#glyph1-24" x="264" y="368"/>
+  <use xlink:href="#glyph1-6" x="271" y="368"/>
+  <use xlink:href="#glyph1-21" x="279" y="368"/>
+  <use xlink:href="#glyph1-22" x="286" y="368"/>
+  <use xlink:href="#glyph1-17" x="289" y="368"/>
+  <use xlink:href="#glyph1-23" x="297" y="368"/>
+  <use xlink:href="#glyph1-13" x="305" y="368"/>
+  <use xlink:href="#glyph1-22" x="309" y="368"/>
+  <use xlink:href="#glyph1-17" x="312" y="368"/>
+  <use xlink:href="#glyph1-25" x="320" y="368"/>
+  <use xlink:href="#glyph1-2" x="327" y="368"/>
+  <use xlink:href="#glyph1-19" x="336" y="368"/>
+  <use xlink:href="#glyph1-25" x="340" y="368"/>
+  <use xlink:href="#glyph1-6" x="347" y="368"/>
+  <use xlink:href="#glyph1-5" x="355" y="368"/>
+  <use xlink:href="#glyph1-13" x="362" y="368"/>
+  <use xlink:href="#glyph1-11" x="366" y="368"/>
+  <use xlink:href="#glyph1-17" x="373" y="368"/>
+  <use xlink:href="#glyph1-2" x="381" y="368"/>
+  <use xlink:href="#glyph1-17" x="390" y="368"/>
+  <use xlink:href="#glyph1-21" x="398" y="368"/>
+  <use xlink:href="#glyph1-3" x="405" y="368"/>
+  <use xlink:href="#glyph1-2" x="416" y="368"/>
+  <use xlink:href="#glyph1-18" x="425" y="368"/>
+  <use xlink:href="#glyph1-5" x="433" y="368"/>
+  <use xlink:href="#glyph1-19" x="440" y="368"/>
+  <use xlink:href="#glyph1-21" x="444" y="368"/>
+  <use xlink:href="#glyph1-13" x="451" y="368"/>
+  <use xlink:href="#glyph1-14" x="455" y="368"/>
+  <use xlink:href="#glyph1-2" x="462" y="368"/>
+  <use xlink:href="#glyph1-17" x="471" y="368"/>
+  <use xlink:href="#glyph1-15" x="479" y="368"/>
+  <use xlink:href="#glyph1-11" x="485" y="368"/>
+  <use xlink:href="#glyph1-14" x="492" y="368"/>
+  <use xlink:href="#glyph1-15" x="499" y="368"/>
+  <use xlink:href="#glyph1-22" x="505" y="368"/>
+  <use xlink:href="#glyph1-17" x="508" y="368"/>
+  <use xlink:href="#glyph1-23" x="516" y="368"/>
+  <use xlink:href="#glyph1-13" x="524" y="368"/>
+  <use xlink:href="#glyph1-11" x="528" y="368"/>
+  <use xlink:href="#glyph1-13" x="535" y="368"/>
+  <use xlink:href="#glyph1-23" x="539" y="368"/>
+  <use xlink:href="#glyph1-19" x="547" y="368"/>
+  <use xlink:href="#glyph1-2" x="551" y="368"/>
+  <use xlink:href="#glyph1-30" x="560" y="368"/>
+  <use xlink:href="#glyph1-11" x="568" y="368"/>
+  <use xlink:href="#glyph1-19" x="575" y="368"/>
+  <use xlink:href="#glyph1-28" x="579" y="368"/>
+  <use xlink:href="#glyph1-13" x="583" y="368"/>
+  <use xlink:href="#glyph1-5" x="587" y="368"/>
+  <use xlink:href="#glyph1-10" x="594" y="368"/>
+  <use xlink:href="#glyph1-11" x="602" y="368"/>
+  <use xlink:href="#glyph1-12" x="609" y="368"/>
+  <use xlink:href="#glyph1-6" x="614" y="368"/>
+  <use xlink:href="#glyph1-8" x="622" y="368"/>
+  <use xlink:href="#glyph1-13" x="630" y="368"/>
+  <use xlink:href="#glyph1-5" x="634" y="368"/>
+  <use xlink:href="#glyph1-6" x="641" y="368"/>
+  <use xlink:href="#glyph1-12" x="649" y="368"/>
+  <use xlink:href="#glyph1-25" x="654" y="368"/>
+  <use xlink:href="#glyph1-22" x="661" y="368"/>
+  <use xlink:href="#glyph1-14" x="664" y="368"/>
+  <use xlink:href="#glyph1-6" x="671" y="368"/>
+  <use xlink:href="#glyph1-13" x="679" y="368"/>
+  <use xlink:href="#glyph1-11" x="683" y="368"/>
+  <use xlink:href="#glyph1-17" x="690" y="368"/>
+  <use xlink:href="#glyph1-8" x="698" y="368"/>
+  <use xlink:href="#glyph1-13" x="706" y="368"/>
+  <use xlink:href="#glyph1-4" x="710" y="368"/>
+  <use xlink:href="#glyph1-6" x="718" y="368"/>
+  <use xlink:href="#glyph1-12" x="726" y="368"/>
+  <use xlink:href="#glyph1-34" x="731" y="368"/>
+  <use xlink:href="#glyph1-2" x="737" y="368"/>
+  <use xlink:href="#glyph1-12" x="746" y="368"/>
+  <use xlink:href="#glyph1-3" x="751" y="368"/>
+  <use xlink:href="#glyph1-22" x="762" y="368"/>
+  <use xlink:href="#glyph1-17" x="765" y="368"/>
+  <use xlink:href="#glyph1-23" x="773" y="368"/>
+  <use xlink:href="#glyph1-13" x="781" y="368"/>
+  <use xlink:href="#glyph1-24" x="785" y="368"/>
+  <use xlink:href="#glyph1-6" x="792" y="368"/>
+  <use xlink:href="#glyph1-21" x="800" y="368"/>
+  <use xlink:href="#glyph1-13" x="807" y="368"/>
+  <use xlink:href="#glyph1-11" x="811" y="368"/>
+  <use xlink:href="#glyph1-23" x="818" y="368"/>
+  <use xlink:href="#glyph1-12" x="826" y="368"/>
+  <use xlink:href="#glyph1-6" x="831" y="368"/>
+  <use xlink:href="#glyph1-6" x="839" y="368"/>
+  <use xlink:href="#glyph1-3" x="847" y="368"/>
+  <use xlink:href="#glyph1-6" x="858" y="368"/>
+  <use xlink:href="#glyph1-17" x="866" y="368"/>
+  <use xlink:href="#glyph1-15" x="874" y="368"/>
+  <use xlink:href="#glyph1-13" x="880" y="368"/>
+  <use xlink:href="#glyph1-27" x="884" y="368"/>
+  <use xlink:href="#glyph1-22" x="896" y="368"/>
+  <use xlink:href="#glyph1-15" x="899" y="368"/>
+  <use xlink:href="#glyph1-10" x="905" y="368"/>
+  <use xlink:href="#glyph1-13" x="913" y="368"/>
+  <use xlink:href="#glyph1-11" x="917" y="368"/>
+  <use xlink:href="#glyph1-17" x="924" y="368"/>
+  <use xlink:href="#glyph1-2" x="932" y="368"/>
+  <use xlink:href="#glyph1-15" x="941" y="368"/>
+  <use xlink:href="#glyph1-10" x="947" y="368"/>
+  <use xlink:href="#glyph1-6" x="955" y="368"/>
+  <use xlink:href="#glyph1-12" x="963" y="368"/>
+  <use xlink:href="#glyph1-13" x="968" y="368"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-4" x="170" y="389"/>
+  <use xlink:href="#glyph1-11" x="178" y="389"/>
+  <use xlink:href="#glyph1-12" x="185" y="389"/>
+  <use xlink:href="#glyph1-15" x="190" y="389"/>
+  <use xlink:href="#glyph1-21" x="196" y="389"/>
+  <use xlink:href="#glyph1-13" x="203" y="389"/>
+  <use xlink:href="#glyph1-27" x="207" y="389"/>
+  <use xlink:href="#glyph1-10" x="219" y="389"/>
+  <use xlink:href="#glyph1-2" x="227" y="389"/>
+  <use xlink:href="#glyph1-13" x="236" y="389"/>
+  <use xlink:href="#glyph1-10" x="240" y="389"/>
+  <use xlink:href="#glyph1-2" x="248" y="389"/>
+  <use xlink:href="#glyph1-19" x="257" y="389"/>
+  <use xlink:href="#glyph1-8" x="261" y="389"/>
+  <use xlink:href="#glyph1-5" x="269" y="389"/>
+  <use xlink:href="#glyph1-13" x="276" y="389"/>
+  <use xlink:href="#glyph1-15" x="280" y="389"/>
+  <use xlink:href="#glyph1-10" x="286" y="389"/>
+  <use xlink:href="#glyph1-6" x="294" y="389"/>
+  <use xlink:href="#glyph1-13" x="302" y="389"/>
+  <use xlink:href="#glyph1-5" x="306" y="389"/>
+  <use xlink:href="#glyph1-11" x="313" y="389"/>
+  <use xlink:href="#glyph1-3" x="320" y="389"/>
+  <use xlink:href="#glyph1-6" x="331" y="389"/>
+  <use xlink:href="#glyph1-13" x="339" y="389"/>
+  <use xlink:href="#glyph1-5" x="343" y="389"/>
+  <use xlink:href="#glyph1-10" x="350" y="389"/>
+  <use xlink:href="#glyph1-11" x="358" y="389"/>
+  <use xlink:href="#glyph1-12" x="365" y="389"/>
+  <use xlink:href="#glyph1-6" x="370" y="389"/>
+  <use xlink:href="#glyph1-8" x="378" y="389"/>
+  <use xlink:href="#glyph1-13" x="386" y="389"/>
+  <use xlink:href="#glyph1-5" x="390" y="389"/>
+  <use xlink:href="#glyph1-6" x="397" y="389"/>
+  <use xlink:href="#glyph1-14" x="405" y="389"/>
+  <use xlink:href="#glyph1-12" x="412" y="389"/>
+  <use xlink:href="#glyph1-6" x="417" y="389"/>
+  <use xlink:href="#glyph1-15" x="425" y="389"/>
+  <use xlink:href="#glyph1-13" x="431" y="389"/>
+  <use xlink:href="#glyph1-11" x="435" y="389"/>
+  <use xlink:href="#glyph1-17" x="442" y="389"/>
+  <use xlink:href="#glyph1-8" x="450" y="389"/>
+  <use xlink:href="#glyph1-13" x="458" y="389"/>
+  <use xlink:href="#glyph1-5" x="462" y="389"/>
+  <use xlink:href="#glyph1-10" x="469" y="389"/>
+  <use xlink:href="#glyph1-11" x="477" y="389"/>
+  <use xlink:href="#glyph1-12" x="484" y="389"/>
+  <use xlink:href="#glyph1-6" x="489" y="389"/>
+  <use xlink:href="#glyph1-8" x="497" y="389"/>
+  <use xlink:href="#glyph1-13" x="505" y="389"/>
+  <use xlink:href="#glyph1-15" x="509" y="389"/>
+  <use xlink:href="#glyph1-22" x="515" y="389"/>
+  <use xlink:href="#glyph1-3" x="518" y="389"/>
+  <use xlink:href="#glyph1-6" x="529" y="389"/>
+  <use xlink:href="#glyph1-13" x="537" y="389"/>
+  <use xlink:href="#glyph1-11" x="541" y="389"/>
+  <use xlink:href="#glyph1-5" x="548" y="389"/>
+  <use xlink:href="#glyph1-13" x="555" y="389"/>
+  <use xlink:href="#glyph1-21" x="559" y="389"/>
+  <use xlink:href="#glyph1-2" x="566" y="389"/>
+  <use xlink:href="#glyph1-18" x="575" y="389"/>
+  <use xlink:href="#glyph1-29" x="583" y="389"/>
+  <use xlink:href="#glyph1-13" x="586" y="389"/>
+  <use xlink:href="#glyph1-40" x="590" y="389"/>
+  <use xlink:href="#glyph1-2" x="597" y="389"/>
+  <use xlink:href="#glyph1-12" x="606" y="389"/>
+  <use xlink:href="#glyph1-13" x="611" y="389"/>
+  <use xlink:href="#glyph1-6" x="615" y="389"/>
+  <use xlink:href="#glyph1-26" x="623" y="389"/>
+  <use xlink:href="#glyph1-11" x="631" y="389"/>
+  <use xlink:href="#glyph1-3" x="638" y="389"/>
+  <use xlink:href="#glyph1-4" x="649" y="389"/>
+  <use xlink:href="#glyph1-19" x="657" y="389"/>
+  <use xlink:href="#glyph1-6" x="661" y="389"/>
+  <use xlink:href="#glyph1-28" x="669" y="389"/>
+  <use xlink:href="#glyph1-13" x="673" y="389"/>
+  <use xlink:href="#glyph1-22" x="677" y="389"/>
+  <use xlink:href="#glyph1-34" x="680" y="389"/>
+  <use xlink:href="#glyph1-13" x="686" y="389"/>
+  <use xlink:href="#glyph1-21" x="690" y="389"/>
+  <use xlink:href="#glyph1-2" x="697" y="389"/>
+  <use xlink:href="#glyph1-18" x="706" y="389"/>
+  <use xlink:href="#glyph1-13" x="714" y="389"/>
+  <use xlink:href="#glyph1-3" x="718" y="389"/>
+  <use xlink:href="#glyph1-6" x="729" y="389"/>
+  <use xlink:href="#glyph1-15" x="737" y="389"/>
+  <use xlink:href="#glyph1-13" x="743" y="389"/>
+  <use xlink:href="#glyph1-21" x="747" y="389"/>
+  <use xlink:href="#glyph1-2" x="754" y="389"/>
+  <use xlink:href="#glyph1-18" x="763" y="389"/>
+  <use xlink:href="#glyph1-12" x="771" y="389"/>
+  <use xlink:href="#glyph1-13" x="776" y="389"/>
+  <use xlink:href="#glyph1-14" x="780" y="389"/>
+  <use xlink:href="#glyph1-2" x="787" y="389"/>
+  <use xlink:href="#glyph1-17" x="796" y="389"/>
+  <use xlink:href="#glyph1-15" x="804" y="389"/>
+  <use xlink:href="#glyph1-11" x="810" y="389"/>
+  <use xlink:href="#glyph1-14" x="817" y="389"/>
+  <use xlink:href="#glyph1-15" x="824" y="389"/>
+  <use xlink:href="#glyph1-13" x="830" y="389"/>
+  <use xlink:href="#glyph1-22" x="834" y="389"/>
+  <use xlink:href="#glyph1-17" x="837" y="389"/>
+  <use xlink:href="#glyph1-13" x="845" y="389"/>
+  <use xlink:href="#glyph1-12" x="849" y="389"/>
+  <use xlink:href="#glyph1-6" x="854" y="389"/>
+  <use xlink:href="#glyph1-11" x="862" y="389"/>
+  <use xlink:href="#glyph1-19" x="869" y="389"/>
+  <use xlink:href="#glyph1-13" x="873" y="389"/>
+  <use xlink:href="#glyph1-19" x="877" y="389"/>
+  <use xlink:href="#glyph1-22" x="881" y="389"/>
+  <use xlink:href="#glyph1-34" x="884" y="389"/>
+  <use xlink:href="#glyph1-6" x="890" y="389"/>
+  <use xlink:href="#glyph1-28" x="898" y="389"/>
+  <use xlink:href="#glyph1-13" x="902" y="389"/>
+  <use xlink:href="#glyph1-21" x="906" y="389"/>
+  <use xlink:href="#glyph1-2" x="913" y="389"/>
+  <use xlink:href="#glyph1-18" x="922" y="389"/>
+  <use xlink:href="#glyph1-13" x="930" y="389"/>
+  <use xlink:href="#glyph1-14" x="934" y="389"/>
+  <use xlink:href="#glyph1-2" x="941" y="389"/>
+  <use xlink:href="#glyph1-18" x="950" y="389"/>
+  <use xlink:href="#glyph1-19" x="958" y="389"/>
+  <use xlink:href="#glyph1-8" x="962" y="389"/>
+  <use xlink:href="#glyph1-13" x="970" y="389"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-11" x="170" y="410"/>
+  <use xlink:href="#glyph1-23" x="177" y="410"/>
+  <use xlink:href="#glyph1-12" x="185" y="410"/>
+  <use xlink:href="#glyph1-6" x="190" y="410"/>
+  <use xlink:href="#glyph1-6" x="198" y="410"/>
+  <use xlink:href="#glyph1-13" x="206" y="410"/>
+  <use xlink:href="#glyph1-2" x="210" y="410"/>
+  <use xlink:href="#glyph1-17" x="219" y="410"/>
+  <use xlink:href="#glyph1-13" x="227" y="410"/>
+  <use xlink:href="#glyph1-11" x="231" y="410"/>
+  <use xlink:href="#glyph1-13" x="238" y="410"/>
+  <use xlink:href="#glyph1-5" x="242" y="410"/>
+  <use xlink:href="#glyph1-10" x="249" y="410"/>
+  <use xlink:href="#glyph1-11" x="257" y="410"/>
+  <use xlink:href="#glyph1-12" x="264" y="410"/>
+  <use xlink:href="#glyph1-6" x="269" y="410"/>
+  <use xlink:href="#glyph1-8" x="277" y="410"/>
+  <use xlink:href="#glyph1-13" x="285" y="410"/>
+  <use xlink:href="#glyph1-5" x="289" y="410"/>
+  <use xlink:href="#glyph1-6" x="296" y="410"/>
+  <use xlink:href="#glyph1-14" x="304" y="410"/>
+  <use xlink:href="#glyph1-12" x="311" y="410"/>
+  <use xlink:href="#glyph1-6" x="316" y="410"/>
+  <use xlink:href="#glyph1-15" x="324" y="410"/>
+  <use xlink:href="#glyph1-13" x="330" y="410"/>
+  <use xlink:href="#glyph1-11" x="334" y="410"/>
+  <use xlink:href="#glyph1-17" x="341" y="410"/>
+  <use xlink:href="#glyph1-8" x="349" y="410"/>
+  <use xlink:href="#glyph1-13" x="357" y="410"/>
+  <use xlink:href="#glyph1-15" x="361" y="410"/>
+  <use xlink:href="#glyph1-10" x="367" y="410"/>
+  <use xlink:href="#glyph1-6" x="375" y="410"/>
+  <use xlink:href="#glyph1-13" x="383" y="410"/>
+  <use xlink:href="#glyph1-15" x="387" y="410"/>
+  <use xlink:href="#glyph1-22" x="393" y="410"/>
+  <use xlink:href="#glyph1-3" x="396" y="410"/>
+  <use xlink:href="#glyph1-6" x="407" y="410"/>
+  <use xlink:href="#glyph1-13" x="415" y="410"/>
+  <use xlink:href="#glyph1-41" x="419" y="410"/>
+  <use xlink:href="#glyph1-15" x="425" y="410"/>
+  <use xlink:href="#glyph1-2" x="431" y="410"/>
+  <use xlink:href="#glyph1-13" x="440" y="410"/>
+  <use xlink:href="#glyph1-15" x="444" y="410"/>
+  <use xlink:href="#glyph1-10" x="450" y="410"/>
+  <use xlink:href="#glyph1-6" x="458" y="410"/>
+  <use xlink:href="#glyph1-13" x="466" y="410"/>
+  <use xlink:href="#glyph1-3" x="470" y="410"/>
+  <use xlink:href="#glyph1-22" x="481" y="410"/>
+  <use xlink:href="#glyph1-17" x="484" y="410"/>
+  <use xlink:href="#glyph1-18" x="492" y="410"/>
+  <use xlink:href="#glyph1-15" x="500" y="410"/>
+  <use xlink:href="#glyph1-6" x="506" y="410"/>
+  <use xlink:href="#glyph1-42" x="514" y="410"/>
+  <use xlink:href="#glyph1-29" x="520" y="410"/>
+  <use xlink:href="#glyph1-13" x="523" y="410"/>
+  <use xlink:href="#glyph1-43" x="527" y="410"/>
+  <use xlink:href="#glyph1-11" x="534" y="410"/>
+  <use xlink:href="#glyph1-15" x="541" y="410"/>
+  <use xlink:href="#glyph1-6" x="547" y="410"/>
+  <use xlink:href="#glyph1-12" x="555" y="410"/>
+  <use xlink:href="#glyph1-13" x="560" y="410"/>
+  <use xlink:href="#glyph1-21" x="564" y="410"/>
+  <use xlink:href="#glyph1-2" x="571" y="410"/>
+  <use xlink:href="#glyph1-18" x="580" y="410"/>
+  <use xlink:href="#glyph1-13" x="588" y="410"/>
+  <use xlink:href="#glyph1-14" x="592" y="410"/>
+  <use xlink:href="#glyph1-11" x="599" y="410"/>
+  <use xlink:href="#glyph1-17" x="606" y="410"/>
+  <use xlink:href="#glyph1-13" x="614" y="410"/>
+  <use xlink:href="#glyph1-30" x="618" y="410"/>
+  <use xlink:href="#glyph1-2" x="626" y="410"/>
+  <use xlink:href="#glyph1-15" x="635" y="410"/>
+  <use xlink:href="#glyph1-10" x="641" y="410"/>
+  <use xlink:href="#glyph1-13" x="649" y="410"/>
+  <use xlink:href="#glyph1-18" x="653" y="410"/>
+  <use xlink:href="#glyph1-5" x="661" y="410"/>
+  <use xlink:href="#glyph1-6" x="668" y="410"/>
+  <use xlink:href="#glyph1-13" x="676" y="410"/>
+  <use xlink:href="#glyph1-15" x="680" y="410"/>
+  <use xlink:href="#glyph1-10" x="686" y="410"/>
+  <use xlink:href="#glyph1-22" x="694" y="410"/>
+  <use xlink:href="#glyph1-5" x="697" y="410"/>
+  <use xlink:href="#glyph1-13" x="704" y="410"/>
+  <use xlink:href="#glyph1-34" x="708" y="410"/>
+  <use xlink:href="#glyph1-18" x="714" y="410"/>
+  <use xlink:href="#glyph1-17" x="722" y="410"/>
+  <use xlink:href="#glyph1-14" x="730" y="410"/>
+  <use xlink:href="#glyph1-15" x="737" y="410"/>
+  <use xlink:href="#glyph1-22" x="743" y="410"/>
+  <use xlink:href="#glyph1-2" x="746" y="410"/>
+  <use xlink:href="#glyph1-17" x="755" y="410"/>
+  <use xlink:href="#glyph1-13" x="763" y="410"/>
+  <use xlink:href="#glyph1-15" x="767" y="410"/>
+  <use xlink:href="#glyph1-2" x="773" y="410"/>
+  <use xlink:href="#glyph1-13" x="782" y="410"/>
+  <use xlink:href="#glyph1-30" x="786" y="410"/>
+  <use xlink:href="#glyph1-2" x="794" y="410"/>
+  <use xlink:href="#glyph1-2" x="803" y="410"/>
+  <use xlink:href="#glyph1-15" x="812" y="410"/>
+  <use xlink:href="#glyph1-5" x="818" y="410"/>
+  <use xlink:href="#glyph1-15" x="825" y="410"/>
+  <use xlink:href="#glyph1-12" x="831" y="410"/>
+  <use xlink:href="#glyph1-11" x="836" y="410"/>
+  <use xlink:href="#glyph1-4" x="843" y="410"/>
+  <use xlink:href="#glyph1-13" x="851" y="410"/>
+  <use xlink:href="#glyph1-31" x="855" y="410"/>
+  <use xlink:href="#glyph1-2" x="864" y="410"/>
+  <use xlink:href="#glyph1-17" x="873" y="410"/>
+  <use xlink:href="#glyph1-8" x="881" y="410"/>
+  <use xlink:href="#glyph1-13" x="889" y="410"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="170" y="431"/>
+  <use xlink:href="#glyph1-2" x="177" y="431"/>
+  <use xlink:href="#glyph1-3" x="186" y="431"/>
+  <use xlink:href="#glyph1-3" x="197" y="431"/>
+  <use xlink:href="#glyph1-18" x="208" y="431"/>
+  <use xlink:href="#glyph1-17" x="216" y="431"/>
+  <use xlink:href="#glyph1-22" x="224" y="431"/>
+  <use xlink:href="#glyph1-14" x="227" y="431"/>
+  <use xlink:href="#glyph1-11" x="234" y="431"/>
+  <use xlink:href="#glyph1-15" x="241" y="431"/>
+  <use xlink:href="#glyph1-22" x="247" y="431"/>
+  <use xlink:href="#glyph1-2" x="250" y="431"/>
+  <use xlink:href="#glyph1-17" x="259" y="431"/>
+  <use xlink:href="#glyph1-29" x="267" y="431"/>
+  <use xlink:href="#glyph1-13" x="270" y="431"/>
+  <use xlink:href="#glyph1-33" x="274" y="431"/>
+  <use xlink:href="#glyph1-10" x="284" y="431"/>
+  <use xlink:href="#glyph1-6" x="292" y="431"/>
+  <use xlink:href="#glyph1-13" x="300" y="431"/>
+  <use xlink:href="#glyph1-5" x="304" y="431"/>
+  <use xlink:href="#glyph1-6" x="311" y="431"/>
+  <use xlink:href="#glyph1-14" x="319" y="431"/>
+  <use xlink:href="#glyph1-18" x="326" y="431"/>
+  <use xlink:href="#glyph1-12" x="334" y="431"/>
+  <use xlink:href="#glyph1-22" x="339" y="431"/>
+  <use xlink:href="#glyph1-15" x="342" y="431"/>
+  <use xlink:href="#glyph1-21" x="348" y="431"/>
+  <use xlink:href="#glyph1-13" x="355" y="431"/>
+  <use xlink:href="#glyph1-2" x="359" y="431"/>
+  <use xlink:href="#glyph1-34" x="368" y="431"/>
+  <use xlink:href="#glyph1-13" x="374" y="431"/>
+  <use xlink:href="#glyph1-15" x="378" y="431"/>
+  <use xlink:href="#glyph1-10" x="384" y="431"/>
+  <use xlink:href="#glyph1-22" x="392" y="431"/>
+  <use xlink:href="#glyph1-5" x="395" y="431"/>
+  <use xlink:href="#glyph1-13" x="402" y="431"/>
+  <use xlink:href="#glyph1-5" x="406" y="431"/>
+  <use xlink:href="#glyph1-14" x="413" y="431"/>
+  <use xlink:href="#glyph1-10" x="420" y="431"/>
+  <use xlink:href="#glyph1-6" x="428" y="431"/>
+  <use xlink:href="#glyph1-3" x="436" y="431"/>
+  <use xlink:href="#glyph1-6" x="447" y="431"/>
+  <use xlink:href="#glyph1-13" x="455" y="431"/>
+  <use xlink:href="#glyph1-12" x="459" y="431"/>
+  <use xlink:href="#glyph1-6" x="464" y="431"/>
+  <use xlink:href="#glyph1-5" x="472" y="431"/>
+  <use xlink:href="#glyph1-15" x="479" y="431"/>
+  <use xlink:href="#glyph1-5" x="485" y="431"/>
+  <use xlink:href="#glyph1-13" x="492" y="431"/>
+  <use xlink:href="#glyph1-2" x="496" y="431"/>
+  <use xlink:href="#glyph1-17" x="505" y="431"/>
+  <use xlink:href="#glyph1-13" x="513" y="431"/>
+  <use xlink:href="#glyph1-15" x="517" y="431"/>
+  <use xlink:href="#glyph1-10" x="523" y="431"/>
+  <use xlink:href="#glyph1-6" x="531" y="431"/>
+  <use xlink:href="#glyph1-13" x="539" y="431"/>
+  <use xlink:href="#glyph1-5" x="543" y="431"/>
+  <use xlink:href="#glyph1-6" x="550" y="431"/>
+  <use xlink:href="#glyph1-14" x="558" y="431"/>
+  <use xlink:href="#glyph1-12" x="565" y="431"/>
+  <use xlink:href="#glyph1-6" x="570" y="431"/>
+  <use xlink:href="#glyph1-15" x="578" y="431"/>
+  <use xlink:href="#glyph1-13" x="584" y="431"/>
+  <use xlink:href="#glyph1-30" x="588" y="431"/>
+  <use xlink:href="#glyph1-6" x="596" y="431"/>
+  <use xlink:href="#glyph1-22" x="604" y="431"/>
+  <use xlink:href="#glyph1-17" x="607" y="431"/>
+  <use xlink:href="#glyph1-23" x="615" y="431"/>
+  <use xlink:href="#glyph1-13" x="623" y="431"/>
+  <use xlink:href="#glyph1-18" x="627" y="431"/>
+  <use xlink:href="#glyph1-17" x="635" y="431"/>
+  <use xlink:href="#glyph1-23" x="643" y="431"/>
+  <use xlink:href="#glyph1-18" x="651" y="431"/>
+  <use xlink:href="#glyph1-6" x="659" y="431"/>
+  <use xlink:href="#glyph1-5" x="667" y="431"/>
+  <use xlink:href="#glyph1-5" x="674" y="431"/>
+  <use xlink:href="#glyph1-11" x="681" y="431"/>
+  <use xlink:href="#glyph1-30" x="688" y="431"/>
+  <use xlink:href="#glyph1-19" x="696" y="431"/>
+  <use xlink:href="#glyph1-6" x="700" y="431"/>
+  <use xlink:href="#glyph1-28" x="708" y="431"/>
+  <use xlink:href="#glyph1-13" x="712" y="431"/>
+  <use xlink:href="#glyph1-27" x="716" y="431"/>
+  <use xlink:href="#glyph1-10" x="728" y="431"/>
+  <use xlink:href="#glyph1-22" x="736" y="431"/>
+  <use xlink:href="#glyph1-14" x="739" y="431"/>
+  <use xlink:href="#glyph1-10" x="746" y="431"/>
+  <use xlink:href="#glyph1-13" x="754" y="431"/>
+  <use xlink:href="#glyph1-22" x="758" y="431"/>
+  <use xlink:href="#glyph1-5" x="761" y="431"/>
+  <use xlink:href="#glyph1-13" x="768" y="431"/>
+  <use xlink:href="#glyph1-25" x="772" y="431"/>
+  <use xlink:href="#glyph1-6" x="779" y="431"/>
+  <use xlink:href="#glyph1-12" x="787" y="431"/>
+  <use xlink:href="#glyph1-21" x="792" y="431"/>
+  <use xlink:href="#glyph1-13" x="799" y="431"/>
+  <use xlink:href="#glyph1-10" x="803" y="431"/>
+  <use xlink:href="#glyph1-11" x="811" y="431"/>
+  <use xlink:href="#glyph1-12" x="818" y="431"/>
+  <use xlink:href="#glyph1-8" x="823" y="431"/>
+  <use xlink:href="#glyph1-13" x="831" y="431"/>
+  <use xlink:href="#glyph1-34" x="835" y="431"/>
+  <use xlink:href="#glyph1-2" x="841" y="431"/>
+  <use xlink:href="#glyph1-12" x="850" y="431"/>
+  <use xlink:href="#glyph1-13" x="855" y="431"/>
+  <use xlink:href="#glyph1-10" x="859" y="431"/>
+  <use xlink:href="#glyph1-18" x="867" y="431"/>
+  <use xlink:href="#glyph1-3" x="875" y="431"/>
+  <use xlink:href="#glyph1-11" x="886" y="431"/>
+  <use xlink:href="#glyph1-17" x="893" y="431"/>
+  <use xlink:href="#glyph1-5" x="901" y="431"/>
+  <use xlink:href="#glyph1-13" x="908" y="431"/>
+  <use xlink:href="#glyph1-15" x="912" y="431"/>
+  <use xlink:href="#glyph1-2" x="918" y="431"/>
+  <use xlink:href="#glyph1-13" x="927" y="431"/>
+  <use xlink:href="#glyph1-3" x="931" y="431"/>
+  <use xlink:href="#glyph1-11" x="942" y="431"/>
+  <use xlink:href="#glyph1-17" x="949" y="431"/>
+  <use xlink:href="#glyph1-11" x="957" y="431"/>
+  <use xlink:href="#glyph1-23" x="964" y="431"/>
+  <use xlink:href="#glyph1-6" x="972" y="431"/>
+  <use xlink:href="#glyph1-29" x="980" y="431"/>
+  <use xlink:href="#glyph1-13" x="983" y="431"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="170" y="452"/>
+  <use xlink:href="#glyph1-2" x="179" y="452"/>
+  <use xlink:href="#glyph1-13" x="188" y="452"/>
+  <use xlink:href="#glyph1-15" x="192" y="452"/>
+  <use xlink:href="#glyph1-10" x="198" y="452"/>
+  <use xlink:href="#glyph1-6" x="206" y="452"/>
+  <use xlink:href="#glyph1-12" x="214" y="452"/>
+  <use xlink:href="#glyph1-6" x="219" y="452"/>
+  <use xlink:href="#glyph1-13" x="227" y="452"/>
+  <use xlink:href="#glyph1-22" x="231" y="452"/>
+  <use xlink:href="#glyph1-5" x="234" y="452"/>
+  <use xlink:href="#glyph1-13" x="241" y="452"/>
+  <use xlink:href="#glyph1-11" x="245" y="452"/>
+  <use xlink:href="#glyph1-19" x="252" y="452"/>
+  <use xlink:href="#glyph1-5" x="256" y="452"/>
+  <use xlink:href="#glyph1-2" x="263" y="452"/>
+  <use xlink:href="#glyph1-13" x="272" y="452"/>
+  <use xlink:href="#glyph1-11" x="276" y="452"/>
+  <use xlink:href="#glyph1-13" x="283" y="452"/>
+  <use xlink:href="#glyph1-5" x="287" y="452"/>
+  <use xlink:href="#glyph1-14" x="294" y="452"/>
+  <use xlink:href="#glyph1-10" x="301" y="452"/>
+  <use xlink:href="#glyph1-6" x="309" y="452"/>
+  <use xlink:href="#glyph1-3" x="317" y="452"/>
+  <use xlink:href="#glyph1-6" x="328" y="452"/>
+  <use xlink:href="#glyph1-13" x="336" y="452"/>
+  <use xlink:href="#glyph1-27" x="340" y="452"/>
+  <use xlink:href="#glyph1-10" x="352" y="452"/>
+  <use xlink:href="#glyph1-6" x="360" y="452"/>
+  <use xlink:href="#glyph1-12" x="368" y="452"/>
+  <use xlink:href="#glyph1-6" x="373" y="452"/>
+  <use xlink:href="#glyph1-30" x="381" y="452"/>
+  <use xlink:href="#glyph1-21" x="389" y="452"/>
+  <use xlink:href="#glyph1-13" x="396" y="452"/>
+  <use xlink:href="#glyph1-11" x="400" y="452"/>
+  <use xlink:href="#glyph1-13" x="407" y="452"/>
+  <use xlink:href="#glyph1-8" x="411" y="452"/>
+  <use xlink:href="#glyph1-6" x="419" y="452"/>
+  <use xlink:href="#glyph1-14" x="427" y="452"/>
+  <use xlink:href="#glyph1-24" x="434" y="452"/>
+  <use xlink:href="#glyph1-13" x="441" y="452"/>
+  <use xlink:href="#glyph1-2" x="445" y="452"/>
+  <use xlink:href="#glyph1-34" x="454" y="452"/>
+  <use xlink:href="#glyph1-13" x="460" y="452"/>
+  <use xlink:href="#glyph1-14" x="464" y="452"/>
+  <use xlink:href="#glyph1-11" x="471" y="452"/>
+  <use xlink:href="#glyph1-12" x="478" y="452"/>
+  <use xlink:href="#glyph1-8" x="483" y="452"/>
+  <use xlink:href="#glyph1-5" x="491" y="452"/>
+  <use xlink:href="#glyph1-13" x="498" y="452"/>
+  <use xlink:href="#glyph1-14" x="502" y="452"/>
+  <use xlink:href="#glyph1-11" x="509" y="452"/>
+  <use xlink:href="#glyph1-17" x="516" y="452"/>
+  <use xlink:href="#glyph1-13" x="524" y="452"/>
+  <use xlink:href="#glyph1-30" x="528" y="452"/>
+  <use xlink:href="#glyph1-6" x="536" y="452"/>
+  <use xlink:href="#glyph1-13" x="544" y="452"/>
+  <use xlink:href="#glyph1-5" x="548" y="452"/>
+  <use xlink:href="#glyph1-10" x="555" y="452"/>
+  <use xlink:href="#glyph1-18" x="563" y="452"/>
+  <use xlink:href="#glyph1-44" x="571" y="452"/>
+  <use xlink:href="#glyph1-6" x="585" y="452"/>
+  <use xlink:href="#glyph1-8" x="593" y="452"/>
+  <use xlink:href="#glyph1-13" x="601" y="452"/>
+  <use xlink:href="#glyph1-11" x="605" y="452"/>
+  <use xlink:href="#glyph1-17" x="612" y="452"/>
+  <use xlink:href="#glyph1-8" x="620" y="452"/>
+  <use xlink:href="#glyph1-13" x="628" y="452"/>
+  <use xlink:href="#glyph1-5" x="632" y="452"/>
+  <use xlink:href="#glyph1-4" x="639" y="452"/>
+  <use xlink:href="#glyph1-19" x="647" y="452"/>
+  <use xlink:href="#glyph1-22" x="651" y="452"/>
+  <use xlink:href="#glyph1-15" x="654" y="452"/>
+  <use xlink:href="#glyph1-13" x="660" y="452"/>
+  <use xlink:href="#glyph1-30" x="664" y="452"/>
+  <use xlink:href="#glyph1-6" x="672" y="452"/>
+  <use xlink:href="#glyph1-15" x="680" y="452"/>
+  <use xlink:href="#glyph1-27" x="686" y="452"/>
+  <use xlink:href="#glyph1-6" x="698" y="452"/>
+  <use xlink:href="#glyph1-6" x="706" y="452"/>
+  <use xlink:href="#glyph1-17" x="714" y="452"/>
+  <use xlink:href="#glyph1-13" x="722" y="452"/>
+  <use xlink:href="#glyph1-21" x="726" y="452"/>
+  <use xlink:href="#glyph1-2" x="733" y="452"/>
+  <use xlink:href="#glyph1-18" x="742" y="452"/>
+  <use xlink:href="#glyph1-29" x="750" y="452"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 218 L 995 218 L 995 239 L 170 239 Z M 170 218 L 995 218 L 995 239 L 170 239 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="170" y="234"/>
+  <use xlink:href="#glyph1-10" x="179" y="234"/>
+  <use xlink:href="#glyph1-2" x="187" y="234"/>
+  <use xlink:href="#glyph1-2" x="196" y="234"/>
+  <use xlink:href="#glyph1-5" x="205" y="234"/>
+  <use xlink:href="#glyph1-6" x="212" y="234"/>
+  <use xlink:href="#glyph1-13" x="220" y="234"/>
+  <use xlink:href="#glyph1-11" x="224" y="234"/>
+  <use xlink:href="#glyph1-13" x="231" y="234"/>
+  <use xlink:href="#glyph1-24" x="235" y="234"/>
+  <use xlink:href="#glyph1-6" x="242" y="234"/>
+  <use xlink:href="#glyph1-21" x="250" y="234"/>
+  <use xlink:href="#glyph1-13" x="257" y="234"/>
+  <use xlink:href="#glyph1-11" x="261" y="234"/>
+  <use xlink:href="#glyph1-23" x="268" y="234"/>
+  <use xlink:href="#glyph1-12" x="276" y="234"/>
+  <use xlink:href="#glyph1-6" x="281" y="234"/>
+  <use xlink:href="#glyph1-6" x="289" y="234"/>
+  <use xlink:href="#glyph1-3" x="297" y="234"/>
+  <use xlink:href="#glyph1-6" x="308" y="234"/>
+  <use xlink:href="#glyph1-17" x="316" y="234"/>
+  <use xlink:href="#glyph1-15" x="324" y="234"/>
+  <use xlink:href="#glyph1-13" x="330" y="234"/>
+  <use xlink:href="#glyph1-3" x="334" y="234"/>
+  <use xlink:href="#glyph1-6" x="345" y="234"/>
+  <use xlink:href="#glyph1-15" x="353" y="234"/>
+  <use xlink:href="#glyph1-10" x="359" y="234"/>
+  <use xlink:href="#glyph1-2" x="367" y="234"/>
+  <use xlink:href="#glyph1-8" x="376" y="234"/>
+  <use xlink:href="#glyph1-29" x="384" y="234"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 218 L 167 218 L 167 239 L 155 239 Z M 155 218 L 167 218 L 167 239 L 155 239 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-45" x="155" y="234"/>
+  <use xlink:href="#glyph1-29" x="164" y="234"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,0%,0%);fill-opacity:1;" d="M 170 189 L 995 189 L 995 210 L 170 210 Z M 170 189 L 995 189 L 995 210 L 170 210 Z "/>
+<g clip-path="url(#clip26)" clip-rule="nonzero">
+<g clip-path="url(#clip27)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern33);" d="M 170 149 L 173 149 L 173 152 L 170 152 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern34);" d="M 173 149 L 992 149 L 992 152 L 173 152 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern35);" d="M 992 149 L 995 149 L 995 152 L 992 152 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern36);" d="M 170 152 L 173 152 L 173 177 L 170 177 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern37);" d="M 992 152 L 995 152 L 995 177 L 992 177 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern38);" d="M 170 177 L 173 177 L 173 181 L 170 181 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern39);" d="M 173 177 L 992 177 L 992 181 L 173 181 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern40);" d="M 992 177 L 995 177 L 995 181 L 992 181 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph1-46" x="175" y="170"/>
+  <use xlink:href="#glyph1-2" x="181" y="170"/>
+  <use xlink:href="#glyph1-6" x="190" y="170"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 99 L 995 99 L 995 141 L 170 141 Z M 170 99 L 995 99 L 995 141 L 170 141 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-47" x="170" y="115"/>
+  <use xlink:href="#glyph1-2" x="179" y="115"/>
+  <use xlink:href="#glyph1-18" x="188" y="115"/>
+  <use xlink:href="#glyph1-13" x="196" y="115"/>
+  <use xlink:href="#glyph1-14" x="200" y="115"/>
+  <use xlink:href="#glyph1-11" x="207" y="115"/>
+  <use xlink:href="#glyph1-17" x="214" y="115"/>
+  <use xlink:href="#glyph1-13" x="222" y="115"/>
+  <use xlink:href="#glyph1-14" x="226" y="115"/>
+  <use xlink:href="#glyph1-10" x="233" y="115"/>
+  <use xlink:href="#glyph1-2" x="241" y="115"/>
+  <use xlink:href="#glyph1-2" x="250" y="115"/>
+  <use xlink:href="#glyph1-5" x="259" y="115"/>
+  <use xlink:href="#glyph1-6" x="266" y="115"/>
+  <use xlink:href="#glyph1-13" x="274" y="115"/>
+  <use xlink:href="#glyph1-11" x="278" y="115"/>
+  <use xlink:href="#glyph1-17" x="285" y="115"/>
+  <use xlink:href="#glyph1-21" x="293" y="115"/>
+  <use xlink:href="#glyph1-13" x="300" y="115"/>
+  <use xlink:href="#glyph1-17" x="304" y="115"/>
+  <use xlink:href="#glyph1-11" x="312" y="115"/>
+  <use xlink:href="#glyph1-3" x="319" y="115"/>
+  <use xlink:href="#glyph1-6" x="330" y="115"/>
+  <use xlink:href="#glyph1-13" x="338" y="115"/>
+  <use xlink:href="#glyph1-34" x="342" y="115"/>
+  <use xlink:href="#glyph1-2" x="348" y="115"/>
+  <use xlink:href="#glyph1-12" x="357" y="115"/>
+  <use xlink:href="#glyph1-13" x="362" y="115"/>
+  <use xlink:href="#glyph1-15" x="366" y="115"/>
+  <use xlink:href="#glyph1-10" x="372" y="115"/>
+  <use xlink:href="#glyph1-22" x="380" y="115"/>
+  <use xlink:href="#glyph1-5" x="383" y="115"/>
+  <use xlink:href="#glyph1-13" x="390" y="115"/>
+  <use xlink:href="#glyph1-14" x="394" y="115"/>
+  <use xlink:href="#glyph1-2" x="401" y="115"/>
+  <use xlink:href="#glyph1-17" x="410" y="115"/>
+  <use xlink:href="#glyph1-15" x="418" y="115"/>
+  <use xlink:href="#glyph1-11" x="424" y="115"/>
+  <use xlink:href="#glyph1-14" x="431" y="115"/>
+  <use xlink:href="#glyph1-15" x="438" y="115"/>
+  <use xlink:href="#glyph1-29" x="444" y="115"/>
+  <use xlink:href="#glyph1-13" x="447" y="115"/>
+  <use xlink:href="#glyph1-48" x="451" y="115"/>
+  <use xlink:href="#glyph1-15" x="454" y="115"/>
+  <use xlink:href="#glyph1-13" x="460" y="115"/>
+  <use xlink:href="#glyph1-27" x="464" y="115"/>
+  <use xlink:href="#glyph1-22" x="476" y="115"/>
+  <use xlink:href="#glyph1-19" x="479" y="115"/>
+  <use xlink:href="#glyph1-19" x="483" y="115"/>
+  <use xlink:href="#glyph1-13" x="487" y="115"/>
+  <use xlink:href="#glyph1-30" x="491" y="115"/>
+  <use xlink:href="#glyph1-6" x="499" y="115"/>
+  <use xlink:href="#glyph1-13" x="507" y="115"/>
+  <use xlink:href="#glyph1-18" x="511" y="115"/>
+  <use xlink:href="#glyph1-5" x="519" y="115"/>
+  <use xlink:href="#glyph1-6" x="526" y="115"/>
+  <use xlink:href="#glyph1-8" x="534" y="115"/>
+  <use xlink:href="#glyph1-13" x="542" y="115"/>
+  <use xlink:href="#glyph1-15" x="546" y="115"/>
+  <use xlink:href="#glyph1-2" x="552" y="115"/>
+  <use xlink:href="#glyph1-13" x="561" y="115"/>
+  <use xlink:href="#glyph1-22" x="565" y="115"/>
+  <use xlink:href="#glyph1-8" x="568" y="115"/>
+  <use xlink:href="#glyph1-6" x="576" y="115"/>
+  <use xlink:href="#glyph1-17" x="584" y="115"/>
+  <use xlink:href="#glyph1-15" x="592" y="115"/>
+  <use xlink:href="#glyph1-22" x="598" y="115"/>
+  <use xlink:href="#glyph1-34" x="601" y="115"/>
+  <use xlink:href="#glyph1-21" x="607" y="115"/>
+  <use xlink:href="#glyph1-13" x="614" y="115"/>
+  <use xlink:href="#glyph1-15" x="618" y="115"/>
+  <use xlink:href="#glyph1-10" x="624" y="115"/>
+  <use xlink:href="#glyph1-6" x="632" y="115"/>
+  <use xlink:href="#glyph1-13" x="640" y="115"/>
+  <use xlink:href="#glyph1-14" x="644" y="115"/>
+  <use xlink:href="#glyph1-2" x="651" y="115"/>
+  <use xlink:href="#glyph1-17" x="660" y="115"/>
+  <use xlink:href="#glyph1-15" x="668" y="115"/>
+  <use xlink:href="#glyph1-11" x="674" y="115"/>
+  <use xlink:href="#glyph1-14" x="681" y="115"/>
+  <use xlink:href="#glyph1-15" x="688" y="115"/>
+  <use xlink:href="#glyph1-13" x="694" y="115"/>
+  <use xlink:href="#glyph1-15" x="698" y="115"/>
+  <use xlink:href="#glyph1-2" x="704" y="115"/>
+  <use xlink:href="#glyph1-13" x="713" y="115"/>
+  <use xlink:href="#glyph1-21" x="717" y="115"/>
+  <use xlink:href="#glyph1-2" x="724" y="115"/>
+  <use xlink:href="#glyph1-18" x="733" y="115"/>
+  <use xlink:href="#glyph1-13" x="741" y="115"/>
+  <use xlink:href="#glyph1-11" x="745" y="115"/>
+  <use xlink:href="#glyph1-17" x="752" y="115"/>
+  <use xlink:href="#glyph1-8" x="760" y="115"/>
+  <use xlink:href="#glyph1-13" x="768" y="115"/>
+  <use xlink:href="#glyph1-3" x="772" y="115"/>
+  <use xlink:href="#glyph1-18" x="783" y="115"/>
+  <use xlink:href="#glyph1-5" x="791" y="115"/>
+  <use xlink:href="#glyph1-15" x="798" y="115"/>
+  <use xlink:href="#glyph1-13" x="804" y="115"/>
+  <use xlink:href="#glyph1-30" x="808" y="115"/>
+  <use xlink:href="#glyph1-6" x="816" y="115"/>
+  <use xlink:href="#glyph1-13" x="824" y="115"/>
+  <use xlink:href="#glyph1-18" x="828" y="115"/>
+  <use xlink:href="#glyph1-17" x="836" y="115"/>
+  <use xlink:href="#glyph1-22" x="844" y="115"/>
+  <use xlink:href="#glyph1-36" x="847" y="115"/>
+  <use xlink:href="#glyph1-18" x="855" y="115"/>
+  <use xlink:href="#glyph1-6" x="863" y="115"/>
+  <use xlink:href="#glyph1-13" x="871" y="115"/>
+  <use xlink:href="#glyph1-11" x="875" y="115"/>
+  <use xlink:href="#glyph1-3" x="882" y="115"/>
+  <use xlink:href="#glyph1-2" x="893" y="115"/>
+  <use xlink:href="#glyph1-17" x="902" y="115"/>
+  <use xlink:href="#glyph1-23" x="910" y="115"/>
+  <use xlink:href="#glyph1-5" x="918" y="115"/>
+  <use xlink:href="#glyph1-15" x="925" y="115"/>
+  <use xlink:href="#glyph1-13" x="931" y="115"/>
+  <use xlink:href="#glyph1-11" x="935" y="115"/>
+  <use xlink:href="#glyph1-19" x="942" y="115"/>
+  <use xlink:href="#glyph1-19" x="946" y="115"/>
+  <use xlink:href="#glyph1-13" x="950" y="115"/>
+  <use xlink:href="#glyph1-21" x="954" y="115"/>
+  <use xlink:href="#glyph1-2" x="961" y="115"/>
+  <use xlink:href="#glyph1-18" x="970" y="115"/>
+  <use xlink:href="#glyph1-12" x="978" y="115"/>
+  <use xlink:href="#glyph1-13" x="983" y="115"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="170" y="136"/>
+  <use xlink:href="#glyph1-2" x="177" y="136"/>
+  <use xlink:href="#glyph1-17" x="186" y="136"/>
+  <use xlink:href="#glyph1-15" x="194" y="136"/>
+  <use xlink:href="#glyph1-11" x="200" y="136"/>
+  <use xlink:href="#glyph1-14" x="207" y="136"/>
+  <use xlink:href="#glyph1-15" x="214" y="136"/>
+  <use xlink:href="#glyph1-5" x="220" y="136"/>
+  <use xlink:href="#glyph1-29" x="227" y="136"/>
+  <use xlink:href="#glyph1-13" x="230" y="136"/>
+  <use xlink:href="#glyph1-49" x="234" y="136"/>
+  <use xlink:href="#glyph1-2" x="244" y="136"/>
+  <use xlink:href="#glyph1-27" x="253" y="136"/>
+  <use xlink:href="#glyph1-6" x="265" y="136"/>
+  <use xlink:href="#glyph1-25" x="273" y="136"/>
+  <use xlink:href="#glyph1-6" x="280" y="136"/>
+  <use xlink:href="#glyph1-12" x="288" y="136"/>
+  <use xlink:href="#glyph1-28" x="293" y="136"/>
+  <use xlink:href="#glyph1-13" x="297" y="136"/>
+  <use xlink:href="#glyph1-22" x="301" y="136"/>
+  <use xlink:href="#glyph1-15" x="304" y="136"/>
+  <use xlink:href="#glyph1-13" x="310" y="136"/>
+  <use xlink:href="#glyph1-27" x="314" y="136"/>
+  <use xlink:href="#glyph1-22" x="326" y="136"/>
+  <use xlink:href="#glyph1-19" x="329" y="136"/>
+  <use xlink:href="#glyph1-19" x="333" y="136"/>
+  <use xlink:href="#glyph1-13" x="337" y="136"/>
+  <use xlink:href="#glyph1-17" x="341" y="136"/>
+  <use xlink:href="#glyph1-2" x="349" y="136"/>
+  <use xlink:href="#glyph1-15" x="358" y="136"/>
+  <use xlink:href="#glyph1-13" x="364" y="136"/>
+  <use xlink:href="#glyph1-30" x="368" y="136"/>
+  <use xlink:href="#glyph1-6" x="376" y="136"/>
+  <use xlink:href="#glyph1-13" x="384" y="136"/>
+  <use xlink:href="#glyph1-12" x="388" y="136"/>
+  <use xlink:href="#glyph1-6" x="393" y="136"/>
+  <use xlink:href="#glyph1-25" x="401" y="136"/>
+  <use xlink:href="#glyph1-6" x="408" y="136"/>
+  <use xlink:href="#glyph1-11" x="416" y="136"/>
+  <use xlink:href="#glyph1-19" x="423" y="136"/>
+  <use xlink:href="#glyph1-6" x="427" y="136"/>
+  <use xlink:href="#glyph1-8" x="435" y="136"/>
+  <use xlink:href="#glyph1-13" x="443" y="136"/>
+  <use xlink:href="#glyph1-15" x="447" y="136"/>
+  <use xlink:href="#glyph1-2" x="453" y="136"/>
+  <use xlink:href="#glyph1-13" x="462" y="136"/>
+  <use xlink:href="#glyph1-11" x="466" y="136"/>
+  <use xlink:href="#glyph1-17" x="473" y="136"/>
+  <use xlink:href="#glyph1-21" x="481" y="136"/>
+  <use xlink:href="#glyph1-2" x="488" y="136"/>
+  <use xlink:href="#glyph1-17" x="497" y="136"/>
+  <use xlink:href="#glyph1-6" x="505" y="136"/>
+  <use xlink:href="#glyph1-13" x="513" y="136"/>
+  <use xlink:href="#glyph1-6" x="517" y="136"/>
+  <use xlink:href="#glyph1-19" x="525" y="136"/>
+  <use xlink:href="#glyph1-5" x="529" y="136"/>
+  <use xlink:href="#glyph1-6" x="536" y="136"/>
+  <use xlink:href="#glyph1-13" x="544" y="136"/>
+  <use xlink:href="#glyph1-17" x="548" y="136"/>
+  <use xlink:href="#glyph1-2" x="556" y="136"/>
+  <use xlink:href="#glyph1-12" x="565" y="136"/>
+  <use xlink:href="#glyph1-13" x="570" y="136"/>
+  <use xlink:href="#glyph1-18" x="574" y="136"/>
+  <use xlink:href="#glyph1-5" x="582" y="136"/>
+  <use xlink:href="#glyph1-6" x="589" y="136"/>
+  <use xlink:href="#glyph1-8" x="597" y="136"/>
+  <use xlink:href="#glyph1-13" x="605" y="136"/>
+  <use xlink:href="#glyph1-11" x="609" y="136"/>
+  <use xlink:href="#glyph1-18" x="616" y="136"/>
+  <use xlink:href="#glyph1-15" x="624" y="136"/>
+  <use xlink:href="#glyph1-2" x="630" y="136"/>
+  <use xlink:href="#glyph1-3" x="639" y="136"/>
+  <use xlink:href="#glyph1-11" x="650" y="136"/>
+  <use xlink:href="#glyph1-15" x="657" y="136"/>
+  <use xlink:href="#glyph1-22" x="663" y="136"/>
+  <use xlink:href="#glyph1-14" x="666" y="136"/>
+  <use xlink:href="#glyph1-11" x="673" y="136"/>
+  <use xlink:href="#glyph1-19" x="680" y="136"/>
+  <use xlink:href="#glyph1-19" x="684" y="136"/>
+  <use xlink:href="#glyph1-21" x="688" y="136"/>
+  <use xlink:href="#glyph1-13" x="695" y="136"/>
+  <use xlink:href="#glyph1-22" x="699" y="136"/>
+  <use xlink:href="#glyph1-17" x="702" y="136"/>
+  <use xlink:href="#glyph1-13" x="710" y="136"/>
+  <use xlink:href="#glyph1-3" x="714" y="136"/>
+  <use xlink:href="#glyph1-6" x="725" y="136"/>
+  <use xlink:href="#glyph1-5" x="733" y="136"/>
+  <use xlink:href="#glyph1-5" x="740" y="136"/>
+  <use xlink:href="#glyph1-11" x="747" y="136"/>
+  <use xlink:href="#glyph1-23" x="754" y="136"/>
+  <use xlink:href="#glyph1-6" x="762" y="136"/>
+  <use xlink:href="#glyph1-5" x="770" y="136"/>
+  <use xlink:href="#glyph1-29" x="777" y="136"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 70 L 995 70 L 995 91 L 170 91 Z M 170 70 L 995 70 L 995 91 L 170 91 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="170" y="86"/>
+  <use xlink:href="#glyph1-10" x="179" y="86"/>
+  <use xlink:href="#glyph1-2" x="187" y="86"/>
+  <use xlink:href="#glyph1-2" x="196" y="86"/>
+  <use xlink:href="#glyph1-5" x="205" y="86"/>
+  <use xlink:href="#glyph1-6" x="212" y="86"/>
+  <use xlink:href="#glyph1-13" x="220" y="86"/>
+  <use xlink:href="#glyph1-11" x="224" y="86"/>
+  <use xlink:href="#glyph1-13" x="231" y="86"/>
+  <use xlink:href="#glyph1-17" x="235" y="86"/>
+  <use xlink:href="#glyph1-11" x="243" y="86"/>
+  <use xlink:href="#glyph1-3" x="250" y="86"/>
+  <use xlink:href="#glyph1-6" x="261" y="86"/>
+  <use xlink:href="#glyph1-13" x="269" y="86"/>
+  <use xlink:href="#glyph1-34" x="273" y="86"/>
+  <use xlink:href="#glyph1-2" x="279" y="86"/>
+  <use xlink:href="#glyph1-12" x="288" y="86"/>
+  <use xlink:href="#glyph1-13" x="293" y="86"/>
+  <use xlink:href="#glyph1-15" x="297" y="86"/>
+  <use xlink:href="#glyph1-10" x="303" y="86"/>
+  <use xlink:href="#glyph1-22" x="311" y="86"/>
+  <use xlink:href="#glyph1-5" x="314" y="86"/>
+  <use xlink:href="#glyph1-13" x="321" y="86"/>
+  <use xlink:href="#glyph1-14" x="325" y="86"/>
+  <use xlink:href="#glyph1-2" x="332" y="86"/>
+  <use xlink:href="#glyph1-17" x="341" y="86"/>
+  <use xlink:href="#glyph1-15" x="349" y="86"/>
+  <use xlink:href="#glyph1-11" x="355" y="86"/>
+  <use xlink:href="#glyph1-14" x="362" y="86"/>
+  <use xlink:href="#glyph1-15" x="369" y="86"/>
+  <use xlink:href="#glyph1-29" x="375" y="86"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 70 L 167 70 L 167 91 L 155 91 Z M 155 70 L 167 70 L 167 91 L 155 91 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-50" x="155" y="86"/>
+  <use xlink:href="#glyph1-29" x="164" y="86"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 150 44 L 1000 44 L 1000 65 L 150 65 Z M 150 44 L 1000 44 L 1000 65 L 150 65 Z "/>
+<g clip-path="url(#clip28)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip29)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 160 10 L 990 10 L 990 33 L 160 33 Z M 160 10 L 990 10 L 990 33 L 160 33 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="160" y="29"/>
+  <use xlink:href="#glyph4-2" x="175" y="29"/>
+  <use xlink:href="#glyph4-3" x="190" y="29"/>
+  <use xlink:href="#glyph4-4" x="204" y="29"/>
+  <use xlink:href="#glyph4-5" x="215" y="29"/>
+  <use xlink:href="#glyph4-3" x="227" y="29"/>
+  <use xlink:href="#glyph4-6" x="241" y="29"/>
+  <use xlink:href="#glyph4-1" x="247" y="29"/>
+  <use xlink:href="#glyph4-7" x="262" y="29"/>
+  <use xlink:href="#glyph4-8" x="278" y="29"/>
+  <use xlink:href="#glyph4-5" x="292" y="29"/>
+  <use xlink:href="#glyph4-4" x="302" y="29"/>
+  <use xlink:href="#glyph4-1" x="315" y="29"/>
+  <use xlink:href="#glyph4-5" x="330" y="29"/>
+</g>
+</g>
+</svg>
diff --git a/doc/images/compose.svg b/doc/images/compose.svg
new file mode 100644
index 0000000..6944f43
--- /dev/null
+++ b/doc/images/compose.svg
@@ -0,0 +1,4580 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 3.796875 -10 L 3.796875 -2.9375 C 3.796875 -2.609375 3.765625 -2.359375 3.71875 -2.1875 C 3.515625 -1.375 2.75 -0.921875 1.703125 -0.921875 C 1.375 -0.921875 1.03125 -0.953125 0.671875 -1.046875 L 0.484375 -0.140625 C 0.96875 -0.03125 1.421875 0 1.875 0 C 2.953125 0 3.75 -0.265625 4.3125 -0.859375 C 4.859375 -1.40625 5.015625 -2.015625 5.015625 -3.078125 L 5.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 6.609375 -4.90625 C 6.5625 -4.515625 6.515625 -4.203125 6.5 -4 C 6.125 -1.984375 4.828125 -0.921875 2.515625 -0.921875 C 2.234375 -0.921875 1.90625 -0.921875 1.609375 -0.953125 L 1.515625 -0.03125 C 1.734375 0 1.953125 0 2.1875 0 L 2.421875 0 C 4.21875 0 5.59375 -0.484375 6.5625 -1.4375 C 7.53125 -2.359375 8.015625 -4.015625 8.015625 -5.75 C 8.015625 -6.59375 7.921875 -7.359375 7.703125 -7.921875 C 7.28125 -9.078125 6.15625 -10 4.4375 -10 C 3.515625 -10 2. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 4.8125 -10 C 3.890625 -10 2.90625 -9.78125 1.890625 -9.390625 L 2.28125 -8.5 C 3.1875 -8.890625 3.984375 -9.078125 4.640625 -9.078125 C 5.734375 -9.078125 6.796875 -8.578125 6.796875 -7.6875 C 6.796875 -7.328125 6.6875 -7.015625 6.4375 -6.734375 C 5.96875 -6.21875 5.078125 -5.953125 3.796875 -5.953125 L 3.796875 -5.046875 L 3.921875 -5.046875 C 4.796875 -5.046875 5.453125 -4.890625 5.9375 -4.5625 C 6.515625 -4.171875 6.796875 -3.640625 6.796875 -3 C 6.7968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 3.859375 -5.046875 C 4.921875 -5.046875 5.609375 -4.828125 6.171875 -4.328125 C 6.59375 -3.953125 6.796875 -3.578125 6.796875 -2.96875 C 6.796875 -2.203125 6.390625 -1.75 5.921875 -1.421875 C 5.359375 -1.03125 4.671875 -0.921875 3.6875 -0.921875 C 2.921875 -0.921875 2.265625 -1 1.578125 -1.125 L 1.34375 -0.203125 C 2.203125 -0.046875 3.015625 0 3.765625 0 C 4.34375 0 4.921875 -0.046875 5.421875 -0.140625 C 6 -0.25 6.46875 -0.5 6.90625 -0.828125 C 7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 1.8125 -9.296875 L 2.09375 -8.40625 L 3.25 -8.78125 C 3.890625 -8.984375 4.3125 -9.078125 4.796875 -9.078125 C 5.5 -9.078125 6.0625 -8.859375 6.53125 -8.40625 C 6.875 -8.078125 7.046875 -7.703125 7.046875 -7.3125 C 7.046875 -7.171875 7.015625 -7.03125 7 -6.90625 C 6.921875 -6.609375 6.65625 -6.265625 6.234375 -5.90625 L 5.625 -5.40625 C 4.90625 -4.84375 4.203125 -4.21875 3.546875 -3.40625 C 2.84375 -2.546875 2.328125 -1.5625 2 -0.5625 L 2 0 L 9 0 L 9 -0.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 4.5625 -9.078125 C 4.890625 -9.078125 5.25 -9.015625 5.703125 -8.90625 L 5.890625 -9.75 C 5.390625 -9.890625 4.78125 -10 4.171875 -10 C 3.1875 -10 2.453125 -9.65625 2.015625 -8.953125 C 1.875 -8.703125 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.765625 -7 L 0.765625 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.375 -6.078125 L 5.375 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 6.015625 -10 L 4.515625 -10 L 1.703125 -9 L 2.171875 -7.984375 L 4.796875 -8.84375 L 4.796875 -1.046875 L 2 -1.046875 L 2 0 L 8 0 L 8 -1.046875 L 6.015625 -1.046875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 4.265625 -9.078125 C 4.59375 -9.078125 4.859375 -9.03125 5.078125 -8.921875 C 5.453125 -8.71875 5.796875 -8.296875 5.796875 -7.65625 C 5.796875 -7.375 5.71875 -7.125 5.59375 -6.890625 C 5.46875 -6.65625 5.15625 -6.359375 4.671875 -5.96875 L 4.546875 -6.03125 C 4.390625 -6.109375 4.25 -6.140625 4.125 -6.203125 C 3.390625 -6.546875 3.015625 -7.046875 3.015625 -7.6875 C 3.015625 -8.453125 3.671875 -9.078125 4.265625 -9.078125 Z M 4.453125 -0.921875 C 3.203125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 4.984375 -9.078125 C 5.46875 -9.078125 5.890625 -8.9375 6.28125 -8.671875 C 7.28125 -7.96875 7.796875 -6.796875 7.796875 -5.125 C 7.796875 -3.296875 7.265625 -2 6.21875 -1.296875 C 5.828125 -1.046875 5.421875 -0.921875 4.9375 -0.921875 C 4.484375 -0.921875 4.03125 -1.046875 3.640625 -1.265625 C 2.578125 -1.9375 2.015625 -3.28125 2.015625 -5.21875 C 2.015625 -7.234375 2.953125 -9.078125 4.984375 -9.078125 Z M 0.796875 -5.140625 C 0.796875 -2.84375 1.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 3.5625 -0.921875 C 2.859375 -0.921875 2.5 -1.078125 2.015625 -1.34375 L 2.015625 -5.765625 C 2.515625 -5.984375 3.015625 -6.078125 3.546875 -6.078125 C 5.046875 -6.078125 5.796875 -5 5.796875 -3.5 C 5.796875 -1.984375 5.078125 -0.921875 3.5625 -0.921875 Z M 3.828125 0 C 5.9375 0 7.015625 -1.40625 7.015625 -3.40625 C 7.015625 -4.5625 6.6875 -5.46875 6.03125 -6.109375 C 5.40625 -6.703125 4.609375 -7 3.671875 -7 C 3.109375 -7 2.5625 -6.890625 2.015625 -6.6718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 5.9375 -7 L 3.734375 -0.921875 L 1.515625 -7 L 0.328125 -7 L 3.21875 0.4375 L 1.765625 4 L 3 4 L 7.0625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d="M 4.125 -0.921875 C 3.34375 -0.921875 2.296875 -1.15625 1 -1.609375 L 0.59375 -0.53125 C 1.703125 -0.21875 2.484375 0 3.859375 0 C 5.53125 0 6.734375 -0.484375 7.421875 -1.34375 C 7.8125 -1.828125 8.015625 -2.359375 8.015625 -2.90625 C 8.015625 -3.6875 7.703125 -4.265625 7.09375 -4.6875 C 6.359375 -5.15625 5.78125 -5.40625 4.703125 -5.703125 C 4.09375 -5.859375 3.5 -6.078125 2.9375 -6.328125 C 2.328125 -6.609375 2.015625 -7 2.015625 -7.5 C 2.015625 -8.5625 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.65625 C 7.015625 -6.09375 6.15625 -7 4.546875 -7 C 3.765625 -7 2.828125 -6.796875 1.875 -6.421875 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.796875 -5.90625 3.546875 -6.078125 4.140625 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 9.015625 -5 C 9.015625 -8.21875 7.21875 -10 4.046875 -10 L 0.796875 -10 L 0.796875 0 L 3.59375 0 C 7 0 9.015625 -1.640625 9.015625 -5 Z M 7.796875 -5.109375 C 7.796875 -2.3125 6.5 -0.921875 3.734375 -0.921875 L 2.015625 -0.921875 L 2.015625 -9.078125 L 3.71875 -9.078125 C 6.390625 -9.078125 7.796875 -7.78125 7.796875 -5.109375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-25">
+<path style="stroke:none;" d="M 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-26">
+<path style="stroke:none;" d="M 4.1875 0 L 4.25 0 C 4.890625 0 5.515625 -0.125 6.203125 -0.375 L 5.921875 -1.140625 C 5.46875 -1 5.03125 -0.921875 4.640625 -0.921875 C 4.515625 -0.921875 4.421875 -0.921875 4.3125 -0.9375 C 2.75 -1.125 2.015625 -1.953125 2.015625 -3.609375 C 2.015625 -5.1875 2.828125 -6.078125 4.515625 -6.078125 C 4.953125 -6.078125 5.453125 -5.984375 6 -5.8125 L 6.296875 -6.609375 C 5.640625 -6.859375 5.015625 -7 4.4375 -7 C 3.1875 -7 2.265625 -6.65625 1.671875 -5.96875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-27">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-28">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-29">
+<path style="stroke:none;" d="M 2.015625 -9.078125 L 6.6875 -9.078125 L 6.6875 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.046875 L 6.25 -5.046875 L 6.25 -5.953125 L 2.015625 -5.953125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-30">
+<path style="stroke:none;" d="M 1 -10 L 1 -9.078125 L 4.796875 -9.078125 L 4.796875 0 L 6.015625 0 L 6.015625 -9.078125 L 9 -9.078125 L 9 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-31">
+<path style="stroke:none;" d="M 0.796875 0 L 6.75 0 L 6.75 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 6.359375 -5.046875 L 6.359375 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 6.75 -9.078125 L 6.75 -10 L 0.796875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-32">
+<path style="stroke:none;" d="M 8.015625 -7.203125 C 8.015625 -8.0625 7.734375 -8.75 7.203125 -9.28125 C 6.640625 -9.84375 5.96875 -10 4.8125 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 3.21875 -4.046875 C 3.71875 -4.046875 4.03125 -4.046875 4.203125 -4.046875 L 7.234375 0 L 8.609375 0 L 5.59375 -4.15625 C 7.109375 -4.453125 8.015625 -5.5625 8.015625 -7.203125 Z M 2.015625 -4.953125 L 2.015625 -9.078125 L 4.09375 -9.078125 C 4.59375 -9.078125 4.96875 -9.046875 5.2 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-33">
+<path style="stroke:none;" d="M 2.015625 -2.625 L 2.015625 -7 L 0.796875 -7 L 0.796875 -2.34375 C 0.796875 -0.90625 1.671875 0 3.28125 0 C 4.078125 0 4.984375 -0.21875 5.9375 -0.625 L 6.171875 0 L 7.015625 0 L 7.015625 -7 L 5.796875 -7 L 5.796875 -1.484375 C 5.015625 -1.15625 4.3125 -0.984375 3.6875 -0.984375 C 2.453125 -0.984375 2.015625 -1.5 2.015625 -2.625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-34">
+<path style="stroke:none;" d="M 5.796875 -5.65625 L 5.796875 -1.234375 C 5.296875 -1.03125 4.78125 -0.921875 4.25 -0.921875 C 2.78125 -0.921875 2.015625 -2.03125 2.015625 -3.515625 C 2.015625 -5.015625 2.75 -6.078125 4.234375 -6.078125 C 4.9375 -6.078125 5.3125 -5.921875 5.796875 -5.65625 Z M 4.140625 0 C 4.6875 0 5.25 -0.109375 5.796875 -0.34375 L 5.796875 4 L 7.015625 4 L 7.015625 -7 L 6.15625 -7 L 5.921875 -6.46875 C 5.3125 -6.8125 4.65625 -7 3.984375 -7 C 3.296875 -7 2.734375 -6.8437 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-35">
+<path style="stroke:none;" d="M 6.890625 -7 L 5.65625 -7 L 3.703125 -1.515625 L 3.640625 -1.140625 L 3.5625 -1.515625 L 1.609375 -7 L 0.328125 -7 L 2.96875 0 L 4.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-36">
+<path style="stroke:none;" d="M 2.953125 -1.0625 C 2.015625 -1.0625 2.015625 -1.546875 2.015625 -2.09375 L 2.015625 -10 L 0.796875 -10 L 0.796875 -1.6875 C 0.796875 -0.6875 1.40625 0 2.34375 0 C 3.03125 0 3.53125 -0.25 3.78125 -0.34375 L 3.78125 -1.21875 C 3.453125 -1.125 3.21875 -1.0625 2.953125 -1.0625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-37">
+<path style="stroke:none;" d="M 5.75 -7 L 3.828125 -4.21875 L 1.828125 -7 L 0.46875 -7 L 3.03125 -3.4375 L 0.5625 0 L 1.796875 0 L 3.609375 -2.625 L 5.5 0 L 6.859375 0 L 4.40625 -3.421875 L 7.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-38">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.640625 C 7.015625 -6.078125 6.140625 -7 4.546875 -7 C 3.78125 -7 2.9375 -6.796875 2.015625 -6.40625 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.5625 C 2.796875 -5.921875 3.5 -6.078125 4.09375 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-39">
+<path style="stroke:none;" d="M 3.015625 -6.078125 L 5.796875 -6.078125 L 5.796875 0 L 7.015625 0 L 7.015625 -6.078125 L 10.796875 -6.078125 L 10.796875 0 L 12.015625 0 L 12.015625 -7 L 7.015625 -7 L 7.015625 -7.640625 C 7.015625 -7.8125 7.015625 -7.96875 7.03125 -8.0625 C 7.15625 -8.625 7.9375 -9.078125 9.03125 -9.078125 C 9.4375 -9.078125 10.484375 -9.078125 10.796875 -9.046875 L 10.859375 -8.546875 L 12 -8.546875 L 12.125 -9.59375 C 11.53125 -9.734375 10.296875 -10 8.5625 -10 C 7.3906 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-40">
+<path style="stroke:none;" d="M 5.796875 -0.453125 L 5.796875 -0.21875 C 5.796875 0.265625 5.796875 0.609375 5.765625 0.84375 C 5.625 2.234375 4.78125 3.078125 3.390625 3.078125 C 2.875 3.078125 2.328125 2.953125 1.734375 2.703125 L 1.375 3.5625 C 1.953125 3.8125 2.84375 4 3.53125 4 C 4.59375 4 5.515625 3.625 6.078125 3.09375 C 6.78125 2.421875 7.015625 1.765625 7.015625 0.4375 L 7.015625 -7 L 6.15625 -7 L 6.015625 -6.546875 L 5.6875 -6.671875 C 5.09375 -6.890625 4.546875 -7 4.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-41">
+<path style="stroke:none;" d="M 1.4375 -0.84375 L 0.3125 2 L 1.578125 2 L 2.734375 -0.84375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-42">
+<path style="stroke:none;" d="M 0.390625 -7 L 2.984375 0 L 4.09375 0 L 5.984375 -5.671875 L 7.828125 0 L 9.015625 0 L 11.609375 -7 L 10.359375 -7 L 8.4375 -1.125 L 6.609375 -7 L 5.453125 -7 L 3.5625 -1.125 L 1.640625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-43">
+<path style="stroke:none;" d="M 9.015625 -3.3125 C 9.015625 -3.4375 9.015625 -3.640625 9.015625 -3.890625 L 9.015625 -10 L 7.796875 -10 L 7.796875 -3.53125 C 7.796875 -3.125 7.765625 -2.78125 7.671875 -2.5 C 7.390625 -1.46875 6.296875 -0.921875 4.890625 -0.921875 C 3.90625 -0.921875 3.109375 -1.1875 2.625 -1.671875 C 2.140625 -2.171875 2.015625 -2.640625 2.015625 -3.53125 L 2.015625 -10 L 0.796875 -10 L 0.796875 -4.4375 C 0.796875 -4.34375 0.796875 -4.171875 0.796875 -3.890625 L 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-44">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-45">
+<path style="stroke:none;" d="M 0.796875 1 C 0.796875 1.828125 0.40625 2.421875 -0.34375 2.78125 L 0.09375 3.65625 C 0.75 3.421875 1.375 3.046875 1.65625 2.46875 C 1.921875 1.9375 2.015625 1.78125 2.015625 0.8125 L 2.015625 -7 L 0.796875 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-46">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 5.25 -7 L 2.125 -3.875 L 5.328125 0 L 6.734375 0 L 3.46875 -4 L 6.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-47">
+<path style="stroke:none;" d="M 0.796875 -7 L 0.796875 -6.078125 L 2.015625 -6.078125 L 2.015625 -7 Z M 0.921875 -1.84375 L -0.1875 1 L 1.03125 1 L 1.96875 -1.84375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-48">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.390625 L 7.484375 0 L 9.015625 0 L 9.015625 -10 L 7.796875 -10 L 7.796875 -1.625 L 2.328125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-49">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-50">
+<path style="stroke:none;" d="M 2.015625 -5 C 2.015625 -5.796875 2.171875 -6.5 2.4375 -7.109375 C 2.953125 -8.1875 3.921875 -9.078125 5.40625 -9.078125 C 6.046875 -9.078125 6.65625 -8.921875 7.15625 -8.5625 C 8.140625 -7.90625 8.796875 -6.609375 8.796875 -5 C 8.796875 -4.21875 8.640625 -3.515625 8.359375 -2.90625 C 7.859375 -1.828125 6.890625 -0.921875 5.40625 -0.921875 C 4.765625 -0.921875 4.15625 -1.09375 3.640625 -1.453125 C 2.65625 -2.09375 2.015625 -3.390625 2.015625 -5 Z M 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-51">
+<path style="stroke:none;" d="M 7.9375 -0.921875 C 7.015625 -0.921875 7.015625 -1.390625 7.015625 -1.921875 L 7.015625 -8.625 C 7.015625 -9.75 5.5 -10 3.96875 -10 C 3.0625 -10 2.40625 -9.65625 2 -8.953125 C 1.875 -8.703125 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.765625 -7 L 0.765625 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.015625 -6.078125 L 5.015625 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3.04687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-52">
+<path style="stroke:none;" d="M 7.796875 -10 L 7.796875 -4.953125 L 2.015625 -4.953125 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 7.796875 -4.046875 L 7.796875 0 L 9.015625 0 L 9.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-53">
+<path style="stroke:none;" d="M 5.796875 -7.59375 C 5.796875 -6.515625 4.953125 -5.953125 3.25 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 3.875 -9.078125 C 5.046875 -9.078125 5.796875 -8.59375 5.796875 -7.59375 Z M 6.796875 -2.921875 C 6.796875 -1.484375 5.625 -0.921875 4.265625 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 3.796875 -5.046875 C 3.890625 -5.046875 4 -5.046875 4.09375 -5.046875 C 5.5625 -5.046875 6.796875 -4.375 6.796875 -2.921875 Z M 5.65625 -5.78125 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-54">
+<path style="stroke:none;" d="M 8.5625 -9.078125 C 8.875 -9.078125 9.265625 -9.015625 9.71875 -8.90625 L 9.890625 -9.75 C 9.390625 -9.890625 8.78125 -10 8.171875 -10 C 7.171875 -10 6.4375 -9.65625 6.015625 -8.953125 C 5.875 -8.703125 5.796875 -8.265625 5.796875 -7.6875 L 5.796875 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3.046875 -8.0625 C 3.125 -8.640625 3.625 -9.078125 4.359375 -9.078125 C 4.640625 -9.078125 4.953125 -9.015625 5.34375 -8.90625 L 5.5 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-55">
+<path style="stroke:none;" d="M 1 -7 L 1 -6.078125 L 4.9375 -6.078125 L 1 -0.609375 L 1 0 L 6.671875 0 L 6.671875 -0.921875 L 2.546875 -0.921875 L 6.5 -6.390625 L 6.5 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-56">
+<path style="stroke:none;" d="M 3.015625 -4 C 3.015625 -5.015625 3.1875 -6.078125 3.5 -7.15625 C 3.828125 -8.25 4.296875 -9.296875 4.921875 -10.3125 L 3.984375 -10.796875 C 2.890625 -9 1.796875 -6.65625 1.796875 -4.015625 C 1.796875 -2.921875 2.015625 -1.765625 2.390625 -0.578125 C 2.78125 0.59375 3.328125 1.75 4 2.84375 L 4.921875 2.25 C 3.875 0.578125 3.015625 -1.578125 3.015625 -4 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-57">
+<path style="stroke:none;" d="M 4.015625 -4.015625 C 4.015625 -5.109375 3.8125 -6.265625 3.4375 -7.4375 C 3.046875 -8.609375 2.5 -9.734375 1.84375 -10.796875 L 0.890625 -10.3125 C 1.515625 -9.296875 1.984375 -8.25 2.3125 -7.15625 C 2.625 -6.078125 2.796875 -5.03125 2.796875 -4.015625 C 2.796875 -1.875 2.15625 0.21875 0.890625 2.25 L 1.8125 2.84375 C 2.484375 1.75 3.03125 0.59375 3.4375 -0.578125 C 3.828125 -1.765625 4.015625 -2.921875 4.015625 -4.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-58">
+<path style="stroke:none;" d="M 0.8125 -4.96875 L 0.8125 -4.046875 L 5.0625 -4.046875 L 5.0625 -4.96875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-59">
+<path style="stroke:none;" d="M 4.78125 -9.078125 C 5.125 -9.078125 5.546875 -9.046875 5.78125 -9.015625 L 5.859375 -8.515625 L 7 -8.515625 L 7.140625 -9.59375 C 6.59375 -9.734375 5.90625 -10 4.34375 -10 C 3.265625 -10 2.5 -9.65625 2.03125 -8.953125 C 1.875 -8.6875 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.78125 -7 L 0.78125 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.796875 -6.078125 L 5.796875 0 L 7.015625 0 L 7.015625 -7 L 3.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.578125 0 C 1.710938 0 0.601562 -0.921875 0.25 -2.765625 L 1.71875 -3 C 1.8125 -2.4375 2.019531 -2 2.34375 -1.6875 C 2.675781 -1.375 3.085938 -1.21875 3.578125 -1.21875 C 4.117188 -1.21875 4.546875 -1.421875 4.859375 -1.828125 C 5.171875 -2.234375 5.328125 -2.832031 5.328125 -3.625 L 5.328125 -10.78125 L 3.203125 -10.78125 L 3.203125 -12 L 6.8125 -12 L 6.8125 -3.6875 C 6.8125 -2.539062 6.519531 -1.640625 5.9375 -0.984375 C 5.363281 -0.328125 4.578125 0 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.328125 -10 L 8.65625 -10 L 8.65625 0 L 1.328125 0 Z M 1.8125 -9 L 1.8125 -1 L 8.171875 -1 L 8.171875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 2.671875 0 C 1.273438 0 0.445312 -0.613281 0.1875 -1.84375 L 1.375 -2 C 1.4375 -1.675781 1.582031 -1.425781 1.8125 -1.25 C 2.039062 -1.070312 2.332031 -0.984375 2.6875 -0.984375 C 3.0625 -0.984375 3.359375 -1.15625 3.578125 -1.5 C 3.796875 -1.84375 3.90625 -2.34375 3.90625 -3 L 3.90625 -9.015625 L 2.40625 -9.015625 L 2.40625 -10 L 5.109375 -10 L 5.109375 -3.078125 C 5.109375 -2.117188 4.890625 -1.363281 4.453125 -0.8125 C 4.023438 -0.269531 3.429688 0 2.67 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 1.96875 -7 L 1.96875 -2.640625 C 1.96875 -2.179688 2.007812 -1.828125 2.09375 -1.578125 C 2.175781 -1.328125 2.304688 -1.144531 2.484375 -1.03125 C 2.671875 -0.925781 2.945312 -0.875 3.3125 -0.875 C 3.820312 -0.875 4.226562 -1.0625 4.53125 -1.4375 C 4.832031 -1.8125 4.984375 -2.335938 4.984375 -3.015625 L 4.984375 -7 L 6.125 -7 L 6.125 -1.5 C 6.125 -0.675781 6.132812 -0.175781 6.15625 0 L 5.078125 0 C 5.078125 -0.0195312 5.070312 -0.0820312 5.0625 -0.1875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 5.03125 0 L 5.03125 -4.359375 C 5.03125 -4.816406 4.988281 -5.171875 4.90625 -5.421875 C 4.820312 -5.671875 4.6875 -5.847656 4.5 -5.953125 C 4.320312 -6.066406 4.050781 -6.125 3.6875 -6.125 C 3.175781 -6.125 2.769531 -5.9375 2.46875 -5.5625 C 2.164062 -5.1875 2.015625 -4.660156 2.015625 -3.984375 L 2.015625 0 L 0.875 0 L 0.875 -5.5 C 0.875 -6.320312 0.859375 -6.820312 0.828125 -7 L 1.921875 -7 C 1.921875 -6.976562 1.921875 -6.914062 1.921875 -6.8125 C 1.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 6.453125 -3.046875 C 6.453125 -2.078125 6.195312 -1.328125 5.6875 -0.796875 C 5.175781 -0.265625 4.453125 0 3.515625 0 C 2.640625 0 1.9375 -0.203125 1.40625 -0.609375 C 0.882812 -1.015625 0.578125 -1.617188 0.484375 -2.421875 L 1.65625 -2.53125 C 1.800781 -1.476562 2.421875 -0.953125 3.515625 -0.953125 C 4.054688 -0.953125 4.484375 -1.128906 4.796875 -1.484375 C 5.109375 -1.835938 5.265625 -2.367188 5.265625 -3.078125 C 5.265625 -3.679688 5.082031 -4.15625 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 6.515625 -5 C 6.515625 -3.375 6.257812 -2.132812 5.75 -1.28125 C 5.238281 -0.425781 4.484375 0 3.484375 0 C 2.484375 0 1.734375 -0.421875 1.234375 -1.265625 C 0.734375 -2.117188 0.484375 -3.363281 0.484375 -5 C 0.484375 -6.664062 0.722656 -7.914062 1.203125 -8.75 C 1.691406 -9.582031 2.460938 -10 3.515625 -10 C 4.546875 -10 5.300781 -9.578125 5.78125 -8.734375 C 6.269531 -7.890625 6.515625 -6.644531 6.515625 -5 Z M 5.359375 -5 C 5.359375 -6.4375 5.210938 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 0.890625 0 L 0.890625 -0.96875 L 3.171875 -0.96875 L 3.171875 -8.921875 L 1.15625 -7 L 1.15625 -8.078125 L 3.265625 -10 L 4.328125 -10 L 4.328125 -0.96875 L 6.5 -0.96875 L 6.5 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 1.3125 -6 L 1.3125 -7 L 2.546875 -7 L 2.546875 -6 Z M 1.3125 0 L 1.3125 -1 L 2.546875 -1 L 2.546875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 6.46875 -3.125 C 6.46875 -2.15625 6.195312 -1.390625 5.65625 -0.828125 C 5.113281 -0.273438 4.359375 0 3.390625 0 C 2.585938 0 1.9375 -0.179688 1.4375 -0.546875 C 0.945312 -0.910156 0.632812 -1.4375 0.5 -2.125 L 1.65625 -2.265625 C 1.882812 -1.378906 2.472656 -0.9375 3.421875 -0.9375 C 4.003906 -0.9375 4.457031 -1.128906 4.78125 -1.515625 C 5.113281 -1.898438 5.28125 -2.429688 5.28125 -3.109375 C 5.28125 -3.691406 5.113281 -4.160156 4.78125 -4.515625 C 4.4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 2.140625 -14 L 13.84375 -14 L 13.84375 0 L 2.140625 0 Z M 2.90625 -13 L 2.90625 -1 L 13.0625 -1 L 13.0625 -13 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 8.03125 -12.40625 C 6.46875 -12.40625 5.25 -11.925781 4.375 -10.96875 C 3.5 -10.019531 3.0625 -8.71875 3.0625 -7.0625 C 3.0625 -5.414062 3.515625 -4.09375 4.421875 -3.09375 C 5.335938 -2.101562 6.570312 -1.609375 8.125 -1.609375 C 10.113281 -1.609375 11.609375 -2.40625 12.609375 -4 L 14.203125 -3.3125 C 13.617188 -2.226562 12.789062 -1.40625 11.71875 -0.84375 C 10.65625 -0.28125 9.421875 0 8.015625 0 C 6.578125 0 5.332031 -0.28125 4.28125 -0.84375 C 3.2382 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-2">
+<path style="stroke:none;" d="M 15.015625 -7.0625 C 15.015625 -5.632812 14.726562 -4.382812 14.15625 -3.3125 C 13.59375 -2.25 12.78125 -1.429688 11.71875 -0.859375 C 10.664062 -0.285156 9.421875 0 7.984375 0 C 6.523438 0 5.269531 -0.28125 4.21875 -0.84375 C 3.164062 -1.414062 2.359375 -2.238281 1.796875 -3.3125 C 1.242188 -4.382812 0.96875 -5.632812 0.96875 -7.0625 C 0.96875 -9.238281 1.585938 -10.9375 2.828125 -12.15625 C 4.066406 -13.382812 5.789062 -14 8 -14 C 9.4375 -14 10.6875 -13.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-3">
+<path style="stroke:none;" d="M 13.5625 0 L 13.5625 -9.296875 C 13.5625 -10.328125 13.59375 -11.316406 13.65625 -12.265625 C 13.332031 -11.085938 13.039062 -10.164062 12.78125 -9.5 L 9.1875 0 L 7.875 0 L 4.234375 -9.5 L 3.671875 -11.171875 L 3.34375 -12.265625 L 3.375 -11.171875 L 3.421875 -9.296875 L 3.421875 0 L 1.671875 0 L 1.671875 -14 L 4.25 -14 L 7.9375 -4.359375 C 8.0625 -3.960938 8.179688 -3.539062 8.296875 -3.09375 C 8.421875 -2.65625 8.503906 -2.335938 8.546875 -2.140625 C 8.59 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-4">
+<path style="stroke:none;" d="M 12.890625 -9.78125 C 12.890625 -8.457031 12.441406 -7.40625 11.546875 -6.625 C 10.660156 -5.84375 9.453125 -5.453125 7.921875 -5.453125 L 3.6875 -5.453125 L 3.6875 0 L 1.71875 0 L 1.71875 -14 L 7.796875 -14 C 9.410156 -14 10.660156 -13.628906 11.546875 -12.890625 C 12.441406 -12.160156 12.890625 -11.125 12.890625 -9.78125 Z M 10.921875 -9.765625 C 10.921875 -11.546875 9.800781 -12.4375 7.5625 -12.4375 L 3.6875 -12.4375 L 3.6875 -7 L 7.640625 -7 C 9.828125  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-5">
+<path style="stroke:none;" d="M 13.03125 -3.859375 C 13.03125 -2.628906 12.507812 -1.675781 11.46875 -1 C 10.425781 -0.332031 8.957031 0 7.0625 0 C 3.550781 0 1.515625 -1.222656 0.953125 -3.671875 L 2.84375 -4.046875 C 3.0625 -3.179688 3.523438 -2.546875 4.234375 -2.140625 C 4.941406 -1.734375 5.910156 -1.53125 7.140625 -1.53125 C 8.398438 -1.53125 9.375 -1.75 10.0625 -2.1875 C 10.75 -2.625 11.09375 -3.265625 11.09375 -4.109375 C 11.09375 -4.546875 10.984375 -4.894531 10.765625 -5.15625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-6">
+<path style="stroke:none;" d="M 1.71875 0 L 1.71875 -14 L 12.671875 -14 L 12.671875 -12.40625 L 3.6875 -12.40625 L 3.6875 -8 L 12.0625 -8 L 12.0625 -6.421875 L 3.6875 -6.421875 L 3.6875 -1.59375 L 13.09375 -1.59375 L 13.09375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-0">
+<path style="stroke:none;" d="M 1.203125 -9 L 7.796875 -9 L 7.796875 0 L 1.203125 0 Z M 1.640625 -8 L 1.640625 -1 L 7.34375 -1 L 7.34375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-1">
+<path style="stroke:none;" d="M 4.40625 -7.65625 L 4.40625 0 L 2.671875 0 L 2.671875 -7.65625 L 0.125 -7.65625 L 0.125 -9 L 6.875 -9 L 6.875 -7.65625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-2">
+<path style="stroke:none;" d="M 8.515625 -4.53125 C 8.515625 -3.625 8.347656 -2.820312 8.015625 -2.125 C 7.691406 -1.4375 7.222656 -0.910156 6.609375 -0.546875 C 6.003906 -0.179688 5.296875 0 4.484375 0 C 3.222656 0 2.238281 -0.398438 1.53125 -1.203125 C 0.820312 -2.015625 0.46875 -3.125 0.46875 -4.53125 C 0.46875 -5.9375 0.820312 -7.03125 1.53125 -7.8125 C 2.238281 -8.601562 3.222656 -9 4.484375 -9 C 5.753906 -9 6.742188 -8.597656 7.453125 -7.796875 C 8.160156 -7.003906 8.515625 -5.9140 [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-3">
+<path style="stroke:none;" d="M 7.53125 -2.640625 C 7.53125 -1.785156 7.226562 -1.128906 6.625 -0.671875 C 6.03125 -0.222656 5.15625 0 4 0 C 2.9375 0 2.101562 -0.144531 1.5 -0.4375 C 0.894531 -0.738281 0.507812 -1.1875 0.34375 -1.78125 L 2.015625 -2 C 2.128906 -1.75 2.347656 -1.566406 2.671875 -1.453125 C 3.003906 -1.347656 3.460938 -1.296875 4.046875 -1.296875 C 5.253906 -1.296875 5.859375 -1.707031 5.859375 -2.53125 C 5.859375 -2.78125 5.785156 -2.984375 5.640625 -3.140625 C 5.503906 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-4">
+<path style="stroke:none;" d="M 0.71875 0 L 0.71875 -9 L 2.453125 -9 L 2.453125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-5">
+<path style="stroke:none;" d="M 6.671875 0 L 0.34375 0 L 0.34375 -1.21875 L 4.515625 -7.640625 L 0.765625 -7.640625 L 0.765625 -9 L 6.4375 -9 L 6.4375 -7.796875 L 2.265625 -1.359375 L 6.671875 -1.359375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-6">
+<path style="stroke:none;" d="M 0.703125 0 L 0.703125 -9 L 6.375 -9 L 6.375 -7.65625 L 2.4375 -7.65625 L 2.4375 -5.34375 L 6.0625 -5.34375 L 6.0625 -4 L 2.4375 -4 L 2.4375 -1.34375 L 6.59375 -1.34375 L 6.59375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-7">
+<path style="stroke:none;" d="M 6 0 L 5.359375 -2.703125 L 2.640625 -2.703125 L 2.015625 0 L 0.28125 0 L 2.984375 -9 L 5.015625 -9 L 7.703125 0 Z M 4 -7.6875 L 3.96875 -7.546875 C 3.9375 -7.410156 3.894531 -7.25 3.84375 -7.0625 C 3.800781 -6.875 3.515625 -5.851562 2.984375 -4 L 5.03125 -4 L 4.328125 -6.453125 L 4.109375 -7.265625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-8">
+<path style="stroke:none;" d="M 4.296875 -1.359375 C 5.203125 -1.359375 5.832031 -1.90625 6.1875 -3 L 7.703125 -2.421875 C 7.398438 -1.597656 6.957031 -0.988281 6.375 -0.59375 C 5.800781 -0.195312 5.109375 0 4.296875 0 C 3.078125 0 2.128906 -0.394531 1.453125 -1.1875 C 0.785156 -1.988281 0.453125 -3.101562 0.453125 -4.53125 C 0.453125 -5.96875 0.773438 -7.070312 1.421875 -7.84375 C 2.066406 -8.613281 3 -9 4.21875 -9 C 5.113281 -9 5.84375 -8.78125 6.40625 -8.34375 C 6.96875 -7.914062 7.36 [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-9">
+<path style="stroke:none;" d="M 5.515625 0 L 5.515625 -3.9375 L 2.46875 -3.9375 L 2.46875 0 L 0.734375 0 L 0.734375 -9 L 2.46875 -9 L 2.46875 -5.375 L 5.515625 -5.375 L 5.515625 -9 L 7.25 -9 L 7.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-10">
+<path style="stroke:none;" d="M 7.671875 0 L 7.671875 -5.453125 C 7.671875 -5.578125 7.671875 -5.703125 7.671875 -5.828125 C 7.679688 -5.953125 7.703125 -6.484375 7.734375 -7.421875 C 7.453125 -6.273438 7.242188 -5.476562 7.109375 -5.03125 L 5.625 0 L 4.390625 0 L 2.90625 -5.03125 L 2.265625 -7.421875 C 2.316406 -6.429688 2.34375 -5.773438 2.34375 -5.453125 L 2.34375 0 L 0.796875 0 L 0.796875 -9 L 3.125 -9 L 4.609375 -3.96875 L 4.734375 -3.484375 L 5.015625 -2.28125 L 5.390625 -3.71875 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-11">
+<path style="stroke:none;" d="M 5.21875 0 L 2.171875 -6.9375 C 2.242188 -6.257812 2.28125 -5.71875 2.28125 -5.3125 L 2.28125 0 L 0.734375 0 L 0.734375 -9 L 2.71875 -9 L 5.8125 -2.015625 C 5.75 -2.660156 5.71875 -3.242188 5.71875 -3.765625 L 5.71875 -9 L 7.25 -9 L 7.25 0 Z "/>
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image11059" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image11059"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11063" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image11063"/>
+</pattern>
+<image id="image11066" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image11066"/>
+</pattern>
+<image id="image11071" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image11071"/>
+</pattern>
+<image id="image11076" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image11076"/>
+</pattern>
+<image id="image11081" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image11081"/>
+</pattern>
+<image id="image11086" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image11086"/>
+</pattern>
+<image id="image11091" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image11091"/>
+</pattern>
+<image id="image11096" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image11096"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip10">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 101 L 145 101 L 145 137 L 0 137 Z "/>
+</clipPath>
+<image id="image11101" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip12">
+  <path d="M 0 137 L 145 137 L 145 155 L 0 155 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 0 155 L 145 155 L 145 156 L 0 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 163 L 122 163 L 122 192 L 24 192 Z "/>
+</clipPath>
+<clipPath id="clip15">
+  <path d="M 24 165 C 24 163.894531 24.894531 163 26 163 L 120 163 C 121.105469 163 122 163.449219 122 164 L 122 190 C 122 191.105469 121.105469 192 120 192 L 26 192 C 24.894531 192 24 191.550781 24 191 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,177.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11105" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,162)">
+  <use xlink:href="#image11105"/>
+</pattern>
+<image id="image11108" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,162)">
+  <use xlink:href="#image11108"/>
+</pattern>
+<image id="image11113" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,162)">
+  <use xlink:href="#image11113"/>
+</pattern>
+<image id="image11118" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,165)">
+  <use xlink:href="#image11118"/>
+</pattern>
+<image id="image11123" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,165)">
+  <use xlink:href="#image11123"/>
+</pattern>
+<image id="image11128" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,190)">
+  <use xlink:href="#image11128"/>
+</pattern>
+<image id="image11133" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,190)">
+  <use xlink:href="#image11133"/>
+</pattern>
+<image id="image11138" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,190)">
+  <use xlink:href="#image11138"/>
+</pattern>
+<clipPath id="clip16">
+  <path d="M 0 200 L 145 200 L 145 222 L 0 222 Z "/>
+</clipPath>
+<image id="image11143" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip17">
+  <path d="M 0 222 L 145 222 L 145 240 L 0 240 Z "/>
+</clipPath>
+<clipPath id="clip18">
+  <path d="M 0 240 L 145 240 L 145 241 L 0 241 Z "/>
+</clipPath>
+<clipPath id="clip19">
+  <path d="M 0 241 L 145 241 L 145 263 L 0 263 Z "/>
+</clipPath>
+<image id="image11146" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip20">
+  <path d="M 0 263 L 145 263 L 145 264 L 0 264 Z "/>
+</clipPath>
+<clipPath id="clip21">
+  <path d="M 0 264 L 145 264 L 145 286 L 0 286 Z "/>
+</clipPath>
+<image id="image11149" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip22">
+  <path d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip23">
+  <path d="M 150 0 L 1000 0 L 1000 43 L 150 43 Z "/>
+</clipPath>
+<clipPath id="clip24">
+  <path d="M 150 43 L 1000 43 L 1000 44 L 150 44 Z "/>
+</clipPath>
+<clipPath id="clip25">
+  <path d="M 187 47 L 239 47 L 239 76 L 187 76 Z "/>
+</clipPath>
+<clipPath id="clip26">
+  <path d="M 187 49 C 187 47.894531 187.894531 47 189 47 L 237 47 C 238.105469 47 239 47.449219 239 48 L 239 74 C 239 75.105469 238.105469 76 237 76 L 189 76 C 187.894531 76 187 75.550781 187 75 Z "/>
+</clipPath>
+<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,213,61.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11153" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern17" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,186,46)">
+  <use xlink:href="#image11153"/>
+</pattern>
+<image id="image11156" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern18" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.8,0,0,1,189,46)">
+  <use xlink:href="#image11156"/>
+</pattern>
+<image id="image11161" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern19" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,237,46)">
+  <use xlink:href="#image11161"/>
+</pattern>
+<image id="image11166" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern20" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,186,49)">
+  <use xlink:href="#image11166"/>
+</pattern>
+<image id="image11171" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern21" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,237,49)">
+  <use xlink:href="#image11171"/>
+</pattern>
+<image id="image11176" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern22" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,186,74)">
+  <use xlink:href="#image11176"/>
+</pattern>
+<image id="image11181" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern23" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.8,0,0,1,189,74)">
+  <use xlink:href="#image11181"/>
+</pattern>
+<image id="image11186" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern24" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,237,74)">
+  <use xlink:href="#image11186"/>
+</pattern>
+<clipPath id="clip27">
+  <path d="M 255 106 L 279 106 L 279 124 L 255 124 Z "/>
+</clipPath>
+<clipPath id="clip28">
+  <path d="M 255 108 C 255 106.894531 255.894531 106 257 106 L 277 106 C 278.105469 106 279 106.449219 279 107 L 279 122 C 279 123.105469 278.105469 124 277 124 L 257 124 C 255.894531 124 255 123.550781 255 123 Z "/>
+</clipPath>
+<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="0" y1="-9" x2="0" y2="9" gradientTransform="matrix(1,0,0,1,267,115)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11192" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern25" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,254,105)">
+  <use xlink:href="#image11192"/>
+</pattern>
+<image id="image11195" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern26" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(2,0,0,1,257,105)">
+  <use xlink:href="#image11195"/>
+</pattern>
+<image id="image11200" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern27" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,277,105)">
+  <use xlink:href="#image11200"/>
+</pattern>
+<image id="image11205" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern28" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,1.555556,254,108)">
+  <use xlink:href="#image11205"/>
+</pattern>
+<image id="image11210" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern29" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,1.555556,277,108)">
+  <use xlink:href="#image11210"/>
+</pattern>
+<image id="image11215" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern30" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,254,122)">
+  <use xlink:href="#image11215"/>
+</pattern>
+<image id="image11220" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern31" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(2,0,0,1,257,122)">
+  <use xlink:href="#image11220"/>
+</pattern>
+<image id="image11225" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern32" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,277,122)">
+  <use xlink:href="#image11225"/>
+</pattern>
+<image id="image11230" width="10" height="10" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAoUlEQVQYlY2PMQrCUBBEZ9YQ0hjT2AjKEkIq8Sy2nslDeKBgZyM2YqGtaSz/2ETJDyq+cvfNwIzQw92zoij2eZ43bdve+j9DTAZgZWbzwT0WQwgcCi+SsizrEMIMAEiOJYHk0t3v7zazK939CKD+1tRxSiRtSC4kkeQEwE7S1swaAJREAOcoVlXV1N3l7uufY7r0R/5eHYlpmj4kHSRdhuITYG01cPxRl2AAAAAASUVORK5CYII="/>
+<clipPath id="clip29">
+  <path d="M 933 47 L 994 47 L 994 76 L 933 76 Z "/>
+</clipPath>
+<clipPath id="clip30">
+  <path d="M 933 49 C 933 47.894531 933.894531 47 935 47 L 992 47 C 993.105469 47 994 47.449219 994 48 L 994 74 C 994 75.105469 993.105469 76 992 76 L 935 76 C 933.894531 76 933 75.550781 933 75 Z "/>
+</clipPath>
+<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,963.5,61.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11234" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern33" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,932,46)">
+  <use xlink:href="#image11234"/>
+</pattern>
+<image id="image11237" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern34" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(5.7,0,0,1,935,46)">
+  <use xlink:href="#image11237"/>
+</pattern>
+<image id="image11242" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern35" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,992,46)">
+  <use xlink:href="#image11242"/>
+</pattern>
+<image id="image11247" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern36" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,932,49)">
+  <use xlink:href="#image11247"/>
+</pattern>
+<image id="image11252" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern37" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,992,49)">
+  <use xlink:href="#image11252"/>
+</pattern>
+<image id="image11257" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern38" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,932,74)">
+  <use xlink:href="#image11257"/>
+</pattern>
+<image id="image11262" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern39" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(5.7,0,0,1,935,74)">
+  <use xlink:href="#image11262"/>
+</pattern>
+<image id="image11267" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern40" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,992,74)">
+  <use xlink:href="#image11267"/>
+</pattern>
+<clipPath id="clip31">
+  <path d="M 933 83 L 994 83 L 994 112 L 933 112 Z "/>
+</clipPath>
+<clipPath id="clip32">
+  <path d="M 933 85 C 933 83.894531 933.894531 83 935 83 L 992 83 C 993.105469 83 994 83.449219 994 84 L 994 110 C 994 111.105469 993.105469 112 992 112 L 935 112 C 933.894531 112 933 111.550781 933 111 Z "/>
+</clipPath>
+<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,963.5,97.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image11273" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern41" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,932,82)">
+  <use xlink:href="#image11273"/>
+</pattern>
+<image id="image11276" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern42" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(5.7,0,0,1,935,82)">
+  <use xlink:href="#image11276"/>
+</pattern>
+<image id="image11281" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern43" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,992,82)">
+  <use xlink:href="#image11281"/>
+</pattern>
+<image id="image11286" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern44" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,932,85)">
+  <use xlink:href="#image11286"/>
+</pattern>
+<image id="image11291" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern45" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,992,85)">
+  <use xlink:href="#image11291"/>
+</pattern>
+<image id="image11296" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern46" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,932,110)">
+  <use xlink:href="#image11296"/>
+</pattern>
+<image id="image11301" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern47" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(5.7,0,0,1,935,110)">
+  <use xlink:href="#image11301"/>
+</pattern>
+<image id="image11306" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern48" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,992,110)">
+  <use xlink:href="#image11306"/>
+</pattern>
+<clipPath id="clip33">
+  <path d="M 150 126 L 987 126 L 987 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip34">
+  <path d="M 987 126 L 1000 126 L 1000 800 L 987 800 Z "/>
+</clipPath>
+<clipPath id="clip35">
+  <path d="M 990 129 L 997 129 L 997 376 L 990 376 Z "/>
+</clipPath>
+<clipPath id="clip36">
+  <path d="M 990 132.5 C 990 130.566406 991.566406 129 993.5 129 C 995.433594 129 997 130.566406 997 132.5 L 997 372.5 C 997 374.433594 995.433594 376 993.5 376 C 991.566406 376 990 374.433594 990 372.5 Z "/>
+</clipPath>
+</defs>
+<g id="surface11056">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="96"/>
+  <use xlink:href="#glyph0-10" x="58" y="96"/>
+  <use xlink:href="#glyph0-11" x="65" y="96"/>
+  <use xlink:href="#glyph0-12" x="75" y="96"/>
+  <use xlink:href="#glyph0-8" x="82" y="96"/>
+  <use xlink:href="#glyph0-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,92.156863%,80.392157%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 102 L 31 102 L 31 119 L 5 119 Z M 5 102 L 31 102 L 31 119 L 5 119 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="116"/>
+  <use xlink:href="#glyph2-2" x="13" y="116"/>
+  <use xlink:href="#glyph2-3" x="22" y="116"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(60%,60%,60%);fill-opacity:1;" d="M 5 121 L 78 121 L 78 136 L 5 136 Z M 5 121 L 78 121 L 78 136 L 5 136 Z "/>
+<g style="fill:rgb(60%,60%,60%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="5" y="133"/>
+  <use xlink:href="#glyph3-2" x="11" y="133"/>
+  <use xlink:href="#glyph3-3" x="18" y="133"/>
+  <use xlink:href="#glyph3-4" x="25" y="133"/>
+  <use xlink:href="#glyph3-5" x="29" y="133"/>
+  <use xlink:href="#glyph3-6" x="36" y="133"/>
+  <use xlink:href="#glyph3-4" x="43" y="133"/>
+  <use xlink:href="#glyph3-7" x="47" y="133"/>
+  <use xlink:href="#glyph3-7" x="53" y="133"/>
+  <use xlink:href="#glyph3-8" x="60" y="133"/>
+  <use xlink:href="#glyph3-9" x="64" y="133"/>
+  <use xlink:href="#glyph3-6" x="71" y="133"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 87 121 L 141 121 L 141 136 L 87 136 Z M 87 121 L 141 121 L 141 136 L 87 136 Z "/>
+<use xlink:href="#image11101" transform="matrix(1,0,0,1,140,128)"/>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 137 L 145 137 L 145 155 L 0 155 Z M 0 137 L 145 137 L 145 155 L 0 155 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="151"/>
+  <use xlink:href="#glyph0-4" x="47" y="151"/>
+  <use xlink:href="#glyph0-2" x="57" y="151"/>
+  <use xlink:href="#glyph0-8" x="67" y="151"/>
+  <use xlink:href="#glyph0-11" x="74" y="151"/>
+  <use xlink:href="#glyph0-15" x="84" y="151"/>
+  <use xlink:href="#glyph0-8" x="93" y="151"/>
+  <use xlink:href="#glyph0-13" x="100" y="151"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 163 L 122 163 L 122 192 L 24 192 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 162 L 26 162 L 26 165 L 23 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 162 L 120 162 L 120 165 L 26 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 162 L 123 162 L 123 165 L 120 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 165 L 26 165 L 26 190 L 23 190 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 165 L 123 165 L 123 190 L 120 190 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 190 L 26 190 L 26 194 L 23 194 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 190 L 120 190 L 120 194 L 26 194 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 190 L 123 190 L 123 194 L 120 194 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 167 L 115 167 L 115 188 L 31 188 Z M 31 167 L 115 167 L 115 188 L 31 188 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="184"/>
+  <use xlink:href="#glyph1-8" x="69" y="184"/>
+  <use xlink:href="#glyph1-8" x="77" y="184"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="183"/>
+  <use xlink:href="#glyph1-8" x="69" y="183"/>
+  <use xlink:href="#glyph1-8" x="77" y="183"/>
+</g>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 201 L 31 201 L 31 218 L 5 218 Z M 5 201 L 31 201 L 31 218 L 5 218 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="215"/>
+  <use xlink:href="#glyph2-2" x="13" y="215"/>
+  <use xlink:href="#glyph2-3" x="22" y="215"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 220 L 141 220 L 141 221 L 4 221 Z M 4 220 L 141 220 L 141 221 L 4 221 Z "/>
+<use xlink:href="#image11143" transform="matrix(1,0,0,1,140,220)"/>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 222 L 145 222 L 145 240 L 0 240 Z M 0 222 L 145 222 L 145 240 L 0 240 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="236"/>
+  <use xlink:href="#glyph0-16" x="60" y="236"/>
+  <use xlink:href="#glyph0-17" x="64" y="236"/>
+  <use xlink:href="#glyph0-18" x="68" y="236"/>
+  <use xlink:href="#glyph0-2" x="78" y="236"/>
+  <use xlink:href="#glyph0-8" x="88" y="236"/>
+</g>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 242 L 53 242 L 53 259 L 5 259 Z M 5 242 L 53 242 L 53 259 L 5 259 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-4" x="5" y="256"/>
+  <use xlink:href="#glyph2-5" x="8" y="256"/>
+  <use xlink:href="#glyph2-3" x="17" y="256"/>
+  <use xlink:href="#glyph2-6" x="26" y="256"/>
+  <use xlink:href="#glyph2-7" x="34" y="256"/>
+  <use xlink:href="#glyph2-8" x="38" y="256"/>
+  <use xlink:href="#glyph2-7" x="42" y="256"/>
+  <use xlink:href="#glyph2-9" x="46" y="256"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 261 L 141 261 L 141 262 L 4 262 Z M 4 261 L 141 261 L 141 262 L 4 262 Z "/>
+<use xlink:href="#image11146" transform="matrix(1,0,0,1,140,261)"/>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 265 L 85 265 L 85 282 L 5 282 Z M 5 265 L 85 265 L 85 282 L 5 282 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-10" x="5" y="279"/>
+  <use xlink:href="#glyph2-11" x="16" y="279"/>
+  <use xlink:href="#glyph2-7" x="24" y="279"/>
+  <use xlink:href="#glyph2-8" x="28" y="279"/>
+  <use xlink:href="#glyph2-12" x="32" y="279"/>
+  <use xlink:href="#glyph2-8" x="39" y="279"/>
+  <use xlink:href="#glyph2-7" x="43" y="279"/>
+  <use xlink:href="#glyph2-9" x="47" y="279"/>
+  <use xlink:href="#glyph2-13" x="54" y="279"/>
+  <use xlink:href="#glyph2-14" x="58" y="279"/>
+  <use xlink:href="#glyph2-2" x="67" y="279"/>
+  <use xlink:href="#glyph2-15" x="76" y="279"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 284 L 141 284 L 141 285 L 4 285 Z M 4 284 L 141 284 L 141 285 L 4 285 Z "/>
+<use xlink:href="#image11149" transform="matrix(1,0,0,1,140,284)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+<g clip-path="url(#clip22)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip23)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 160 10 L 266 10 L 266 33 L 160 33 Z M 160 10 L 266 10 L 266 33 L 160 33 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="160" y="29"/>
+  <use xlink:href="#glyph4-2" x="175" y="29"/>
+  <use xlink:href="#glyph4-3" x="191" y="29"/>
+  <use xlink:href="#glyph4-4" x="208" y="29"/>
+  <use xlink:href="#glyph4-2" x="222" y="29"/>
+  <use xlink:href="#glyph4-5" x="238" y="29"/>
+  <use xlink:href="#glyph4-6" x="252" y="29"/>
+</g>
+<g clip-path="url(#clip24)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 160 46 L 176 46 L 176 78 L 160 78 Z M 160 46 L 176 46 L 176 78 L 160 78 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="160" y="66"/>
+  <use xlink:href="#glyph5-2" x="167" y="66"/>
+</g>
+<g clip-path="url(#clip25)" clip-rule="nonzero">
+<g clip-path="url(#clip26)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 187 47 L 239 47 L 239 76 L 187 76 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern17);" d="M 186 46 L 189 46 L 189 49 L 186 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern18);" d="M 189 46 L 237 46 L 237 49 L 189 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern19);" d="M 237 46 L 240 46 L 240 49 L 237 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern20);" d="M 186 49 L 189 49 L 189 74 L 186 74 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern21);" d="M 237 49 L 240 49 L 240 74 L 237 74 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern22);" d="M 186 74 L 189 74 L 189 78 L 186 78 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern23);" d="M 189 74 L 237 74 L 237 78 L 189 78 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern24);" d="M 237 74 L 240 74 L 240 78 L 237 78 Z "/>
+<path style="fill:none;stroke-width:2.357023;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(53.333333%,54.117647%,52.156863%);stroke-opacity:1;stroke-miterlimit:10;" d="M -5.000733 -5.000733 L 0 0 L -5.000733 5.000733 " transform="matrix(0.00000000000000005,0.809256,-0.809256,0.00000000000000005,227.5,64)"/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-9" x="194" y="68"/>
+  <use xlink:href="#glyph1-2" x="200" y="68"/>
+  <use xlink:href="#glyph1-6" x="209" y="68"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="194" y="67"/>
+  <use xlink:href="#glyph1-2" x="200" y="67"/>
+  <use xlink:href="#glyph1-6" x="209" y="67"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 160 82 L 185 82 L 185 103 L 160 103 Z M 160 82 L 185 82 L 185 103 L 160 103 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="160" y="96"/>
+  <use xlink:href="#glyph5-4" x="168" y="96"/>
+  <use xlink:href="#glyph5-5" x="171" y="96"/>
+  <use xlink:href="#glyph5-6" x="178" y="96"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 195 82 L 339 82 L 339 103 L 195 103 Z M 195 82 L 339 82 L 339 103 L 195 103 Z "/>
+<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph1-10" x="195" y="98"/>
+  <use xlink:href="#glyph1-11" x="204" y="98"/>
+  <use xlink:href="#glyph1-12" x="213" y="98"/>
+  <use xlink:href="#glyph1-13" x="222" y="98"/>
+  <use xlink:href="#glyph1-14" x="231" y="98"/>
+  <use xlink:href="#glyph1-2" x="235" y="98"/>
+  <use xlink:href="#glyph1-15" x="244" y="98"/>
+  <use xlink:href="#glyph1-14" x="250" y="98"/>
+  <use xlink:href="#glyph1-16" x="254" y="98"/>
+  <use xlink:href="#glyph1-12" x="263" y="98"/>
+  <use xlink:href="#glyph1-17" x="272" y="98"/>
+  <use xlink:href="#glyph1-16" x="281" y="98"/>
+  <use xlink:href="#glyph1-18" x="290" y="98"/>
+  <use xlink:href="#glyph1-14" x="299" y="98"/>
+  <use xlink:href="#glyph1-19" x="303" y="98"/>
+  <use xlink:href="#glyph1-20" x="311" y="98"/>
+  <use xlink:href="#glyph1-21" x="318" y="98"/>
+  <use xlink:href="#glyph1-6" x="324" y="98"/>
+  <use xlink:href="#glyph1-5" x="332" y="98"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 160 105 L 244 105 L 244 126 L 160 126 Z M 160 105 L 244 105 L 244 126 L 160 126 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph5-7" x="160" y="119"/>
+  <use xlink:href="#glyph5-1" x="167" y="119"/>
+  <use xlink:href="#glyph5-1" x="174" y="119"/>
+  <use xlink:href="#glyph5-7" x="180" y="119"/>
+  <use xlink:href="#glyph5-8" x="188" y="119"/>
+  <use xlink:href="#glyph5-9" x="196" y="119"/>
+  <use xlink:href="#glyph5-10" x="204" y="119"/>
+  <use xlink:href="#glyph5-6" x="214" y="119"/>
+  <use xlink:href="#glyph5-11" x="221" y="119"/>
+  <use xlink:href="#glyph5-1" x="229" y="119"/>
+  <use xlink:href="#glyph5-3" x="236" y="119"/>
+</g>
+<g clip-path="url(#clip27)" clip-rule="nonzero">
+<g clip-path="url(#clip28)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear3);" d="M 255 106 L 279 106 L 279 124 L 255 124 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern25);" d="M 254 105 L 257 105 L 257 108 L 254 108 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern26);" d="M 257 105 L 277 105 L 277 108 L 257 108 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern27);" d="M 277 105 L 280 105 L 280 108 L 277 108 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern28);" d="M 254 108 L 257 108 L 257 122 L 254 122 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern29);" d="M 277 108 L 280 108 L 280 122 L 277 122 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern30);" d="M 254 122 L 257 122 L 257 126 L 254 126 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern31);" d="M 257 122 L 277 122 L 277 126 L 257 126 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern32);" d="M 277 122 L 280 122 L 280 126 L 277 126 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 262 110 L 272 110 L 272 120 L 262 120 Z M 262 110 L 272 110 L 272 120 L 262 120 Z "/>
+<use xlink:href="#image11230" transform="matrix(1,0,0,1,262,110)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 339 44 L 927 44 L 927 126 L 339 126 Z M 339 44 L 927 44 L 927 126 L 339 126 Z "/>
+<g clip-path="url(#clip29)" clip-rule="nonzero">
+<g clip-path="url(#clip30)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear4);" d="M 933 47 L 994 47 L 994 76 L 933 76 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern33);" d="M 932 46 L 935 46 L 935 49 L 932 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern34);" d="M 935 46 L 992 46 L 992 49 L 935 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern35);" d="M 992 46 L 995 46 L 995 49 L 992 49 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern36);" d="M 932 49 L 935 49 L 935 74 L 932 74 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern37);" d="M 992 49 L 995 49 L 995 74 L 992 74 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern38);" d="M 932 74 L 935 74 L 935 78 L 932 78 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern39);" d="M 935 74 L 992 74 L 992 78 L 935 78 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern40);" d="M 992 74 L 995 74 L 995 78 L 992 78 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 940 51 L 987 51 L 987 72 L 940 72 Z M 940 51 L 987 51 L 987 72 L 940 72 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-22" x="947" y="68"/>
+  <use xlink:href="#glyph1-6" x="956" y="68"/>
+  <use xlink:href="#glyph1-23" x="964" y="68"/>
+  <use xlink:href="#glyph1-8" x="972" y="68"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-22" x="947" y="67"/>
+  <use xlink:href="#glyph1-6" x="956" y="67"/>
+  <use xlink:href="#glyph1-23" x="964" y="67"/>
+  <use xlink:href="#glyph1-8" x="972" y="67"/>
+</g>
+<g clip-path="url(#clip31)" clip-rule="nonzero">
+<g clip-path="url(#clip32)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear5);" d="M 933 83 L 994 83 L 994 112 L 933 112 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern41);" d="M 932 82 L 935 82 L 935 85 L 932 85 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern42);" d="M 935 82 L 992 82 L 992 85 L 935 85 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern43);" d="M 992 82 L 995 82 L 995 85 L 992 85 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern44);" d="M 932 85 L 935 85 L 935 110 L 932 110 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern45);" d="M 992 85 L 995 85 L 995 110 L 992 110 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern46);" d="M 932 110 L 935 110 L 935 114 L 932 114 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern47);" d="M 935 110 L 992 110 L 992 114 L 935 114 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern48);" d="M 992 110 L 995 110 L 995 114 L 992 114 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 940 87 L 987 87 L 987 108 L 940 108 Z M 940 87 L 987 87 L 987 108 L 940 108 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-24" x="940" y="104"/>
+  <use xlink:href="#glyph1-25" x="950" y="104"/>
+  <use xlink:href="#glyph1-5" x="953" y="104"/>
+  <use xlink:href="#glyph1-26" x="960" y="104"/>
+  <use xlink:href="#glyph1-27" x="967" y="104"/>
+  <use xlink:href="#glyph1-28" x="974" y="104"/>
+  <use xlink:href="#glyph1-8" x="979" y="104"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="940" y="103"/>
+  <use xlink:href="#glyph1-25" x="950" y="103"/>
+  <use xlink:href="#glyph1-5" x="953" y="103"/>
+  <use xlink:href="#glyph1-26" x="960" y="103"/>
+  <use xlink:href="#glyph1-27" x="967" y="103"/>
+  <use xlink:href="#glyph1-28" x="974" y="103"/>
+  <use xlink:href="#glyph1-8" x="979" y="103"/>
+</g>
+<g clip-path="url(#clip33)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="151" y="143"/>
+  <use xlink:href="#glyph1-29" x="160" y="143"/>
+  <use xlink:href="#glyph1-30" x="167" y="143"/>
+  <use xlink:href="#glyph1-31" x="177" y="143"/>
+  <use xlink:href="#glyph1-32" x="184" y="143"/>
+  <use xlink:href="#glyph1-14" x="193" y="143"/>
+  <use xlink:href="#glyph1-27" x="197" y="143"/>
+  <use xlink:href="#glyph1-23" x="204" y="143"/>
+  <use xlink:href="#glyph1-14" x="212" y="143"/>
+  <use xlink:href="#glyph1-33" x="216" y="143"/>
+  <use xlink:href="#glyph1-23" x="224" y="143"/>
+  <use xlink:href="#glyph1-6" x="232" y="143"/>
+  <use xlink:href="#glyph1-34" x="240" y="143"/>
+  <use xlink:href="#glyph1-33" x="248" y="143"/>
+  <use xlink:href="#glyph1-25" x="256" y="143"/>
+  <use xlink:href="#glyph1-35" x="259" y="143"/>
+  <use xlink:href="#glyph1-2" x="266" y="143"/>
+  <use xlink:href="#glyph1-26" x="275" y="143"/>
+  <use xlink:href="#glyph1-27" x="282" y="143"/>
+  <use xlink:href="#glyph1-36" x="289" y="143"/>
+  <use xlink:href="#glyph1-14" x="293" y="143"/>
+  <use xlink:href="#glyph1-6" x="297" y="143"/>
+  <use xlink:href="#glyph1-37" x="305" y="143"/>
+  <use xlink:href="#glyph1-4" x="313" y="143"/>
+  <use xlink:href="#glyph1-6" x="321" y="143"/>
+  <use xlink:href="#glyph1-28" x="329" y="143"/>
+  <use xlink:href="#glyph1-25" x="334" y="143"/>
+  <use xlink:href="#glyph1-6" x="337" y="143"/>
+  <use xlink:href="#glyph1-23" x="345" y="143"/>
+  <use xlink:href="#glyph1-26" x="353" y="143"/>
+  <use xlink:href="#glyph1-6" x="360" y="143"/>
+  <use xlink:href="#glyph1-14" x="368" y="143"/>
+  <use xlink:href="#glyph1-2" x="372" y="143"/>
+  <use xlink:href="#glyph1-15" x="381" y="143"/>
+  <use xlink:href="#glyph1-14" x="387" y="143"/>
+  <use xlink:href="#glyph1-21" x="391" y="143"/>
+  <use xlink:href="#glyph1-38" x="397" y="143"/>
+  <use xlink:href="#glyph1-6" x="405" y="143"/>
+  <use xlink:href="#glyph1-14" x="413" y="143"/>
+  <use xlink:href="#glyph1-25" x="417" y="143"/>
+  <use xlink:href="#glyph1-23" x="420" y="143"/>
+  <use xlink:href="#glyph1-6" x="428" y="143"/>
+  <use xlink:href="#glyph1-39" x="436" y="143"/>
+  <use xlink:href="#glyph1-26" x="449" y="143"/>
+  <use xlink:href="#glyph1-25" x="456" y="143"/>
+  <use xlink:href="#glyph1-6" x="459" y="143"/>
+  <use xlink:href="#glyph1-23" x="467" y="143"/>
+  <use xlink:href="#glyph1-26" x="475" y="143"/>
+  <use xlink:href="#glyph1-20" x="482" y="143"/>
+  <use xlink:href="#glyph1-14" x="489" y="143"/>
+  <use xlink:href="#glyph1-2" x="493" y="143"/>
+  <use xlink:href="#glyph1-15" x="502" y="143"/>
+  <use xlink:href="#glyph1-14" x="508" y="143"/>
+  <use xlink:href="#glyph1-21" x="512" y="143"/>
+  <use xlink:href="#glyph1-38" x="518" y="143"/>
+  <use xlink:href="#glyph1-6" x="526" y="143"/>
+  <use xlink:href="#glyph1-14" x="534" y="143"/>
+  <use xlink:href="#glyph1-5" x="538" y="143"/>
+  <use xlink:href="#glyph1-33" x="545" y="143"/>
+  <use xlink:href="#glyph1-19" x="553" y="143"/>
+  <use xlink:href="#glyph1-5" x="561" y="143"/>
+  <use xlink:href="#glyph1-25" x="568" y="143"/>
+  <use xlink:href="#glyph1-5" x="571" y="143"/>
+  <use xlink:href="#glyph1-21" x="578" y="143"/>
+  <use xlink:href="#glyph1-25" x="584" y="143"/>
+  <use xlink:href="#glyph1-23" x="587" y="143"/>
+  <use xlink:href="#glyph1-40" x="595" y="143"/>
+  <use xlink:href="#glyph1-14" x="603" y="143"/>
+  <use xlink:href="#glyph1-15" x="607" y="143"/>
+  <use xlink:href="#glyph1-6" x="613" y="143"/>
+  <use xlink:href="#glyph1-8" x="621" y="143"/>
+  <use xlink:href="#glyph1-6" x="629" y="143"/>
+  <use xlink:href="#glyph1-28" x="637" y="143"/>
+  <use xlink:href="#glyph1-27" x="642" y="143"/>
+  <use xlink:href="#glyph1-36" x="649" y="143"/>
+  <use xlink:href="#glyph1-14" x="653" y="143"/>
+  <use xlink:href="#glyph1-40" x="657" y="143"/>
+  <use xlink:href="#glyph1-2" x="665" y="143"/>
+  <use xlink:href="#glyph1-35" x="674" y="143"/>
+  <use xlink:href="#glyph1-6" x="681" y="143"/>
+  <use xlink:href="#glyph1-28" x="689" y="143"/>
+  <use xlink:href="#glyph1-23" x="694" y="143"/>
+  <use xlink:href="#glyph1-3" x="702" y="143"/>
+  <use xlink:href="#glyph1-6" x="713" y="143"/>
+  <use xlink:href="#glyph1-23" x="721" y="143"/>
+  <use xlink:href="#glyph1-21" x="729" y="143"/>
+  <use xlink:href="#glyph1-41" x="735" y="143"/>
+  <use xlink:href="#glyph1-14" x="739" y="143"/>
+  <use xlink:href="#glyph1-20" x="743" y="143"/>
+  <use xlink:href="#glyph1-2" x="750" y="143"/>
+  <use xlink:href="#glyph1-33" x="759" y="143"/>
+  <use xlink:href="#glyph1-14" x="767" y="143"/>
+  <use xlink:href="#glyph1-27" x="771" y="143"/>
+  <use xlink:href="#glyph1-28" x="778" y="143"/>
+  <use xlink:href="#glyph1-6" x="783" y="143"/>
+  <use xlink:href="#glyph1-14" x="791" y="143"/>
+  <use xlink:href="#glyph1-26" x="795" y="143"/>
+  <use xlink:href="#glyph1-27" x="802" y="143"/>
+  <use xlink:href="#glyph1-36" x="809" y="143"/>
+  <use xlink:href="#glyph1-36" x="813" y="143"/>
+  <use xlink:href="#glyph1-6" x="817" y="143"/>
+  <use xlink:href="#glyph1-8" x="825" y="143"/>
+  <use xlink:href="#glyph1-14" x="833" y="143"/>
+  <use xlink:href="#glyph1-33" x="837" y="143"/>
+  <use xlink:href="#glyph1-4" x="845" y="143"/>
+  <use xlink:href="#glyph1-2" x="853" y="143"/>
+  <use xlink:href="#glyph1-23" x="862" y="143"/>
+  <use xlink:href="#glyph1-14" x="870" y="143"/>
+  <use xlink:href="#glyph1-21" x="874" y="143"/>
+  <use xlink:href="#glyph1-2" x="880" y="143"/>
+  <use xlink:href="#glyph1-14" x="889" y="143"/>
+  <use xlink:href="#glyph1-8" x="893" y="143"/>
+  <use xlink:href="#glyph1-6" x="901" y="143"/>
+  <use xlink:href="#glyph1-36" x="909" y="143"/>
+  <use xlink:href="#glyph1-25" x="913" y="143"/>
+  <use xlink:href="#glyph1-19" x="916" y="143"/>
+  <use xlink:href="#glyph1-6" x="924" y="143"/>
+  <use xlink:href="#glyph1-28" x="932" y="143"/>
+  <use xlink:href="#glyph1-27" x="937" y="143"/>
+  <use xlink:href="#glyph1-21" x="944" y="143"/>
+  <use xlink:href="#glyph1-6" x="950" y="143"/>
+  <use xlink:href="#glyph1-14" x="958" y="143"/>
+  <use xlink:href="#glyph1-2" x="962" y="143"/>
+  <use xlink:href="#glyph1-23" x="971" y="143"/>
+  <use xlink:href="#glyph1-14" x="979" y="143"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="151" y="164"/>
+  <use xlink:href="#glyph1-14" x="158" y="164"/>
+  <use xlink:href="#glyph1-23" x="162" y="164"/>
+  <use xlink:href="#glyph1-6" x="170" y="164"/>
+  <use xlink:href="#glyph1-42" x="178" y="164"/>
+  <use xlink:href="#glyph1-14" x="190" y="164"/>
+  <use xlink:href="#glyph1-1" x="194" y="164"/>
+  <use xlink:href="#glyph1-2" x="203" y="164"/>
+  <use xlink:href="#glyph1-23" x="212" y="164"/>
+  <use xlink:href="#glyph1-5" x="220" y="164"/>
+  <use xlink:href="#glyph1-21" x="227" y="164"/>
+  <use xlink:href="#glyph1-25" x="233" y="164"/>
+  <use xlink:href="#glyph1-21" x="236" y="164"/>
+  <use xlink:href="#glyph1-33" x="242" y="164"/>
+  <use xlink:href="#glyph1-21" x="250" y="164"/>
+  <use xlink:href="#glyph1-25" x="256" y="164"/>
+  <use xlink:href="#glyph1-2" x="259" y="164"/>
+  <use xlink:href="#glyph1-23" x="268" y="164"/>
+  <use xlink:href="#glyph1-14" x="276" y="164"/>
+  <use xlink:href="#glyph1-15" x="280" y="164"/>
+  <use xlink:href="#glyph1-2" x="286" y="164"/>
+  <use xlink:href="#glyph1-28" x="295" y="164"/>
+  <use xlink:href="#glyph1-14" x="300" y="164"/>
+  <use xlink:href="#glyph1-21" x="304" y="164"/>
+  <use xlink:href="#glyph1-38" x="310" y="164"/>
+  <use xlink:href="#glyph1-6" x="318" y="164"/>
+  <use xlink:href="#glyph1-14" x="326" y="164"/>
+  <use xlink:href="#glyph1-43" x="330" y="164"/>
+  <use xlink:href="#glyph1-23" x="340" y="164"/>
+  <use xlink:href="#glyph1-25" x="348" y="164"/>
+  <use xlink:href="#glyph1-21" x="351" y="164"/>
+  <use xlink:href="#glyph1-6" x="357" y="164"/>
+  <use xlink:href="#glyph1-8" x="365" y="164"/>
+  <use xlink:href="#glyph1-14" x="373" y="164"/>
+  <use xlink:href="#glyph1-22" x="377" y="164"/>
+  <use xlink:href="#glyph1-21" x="386" y="164"/>
+  <use xlink:href="#glyph1-27" x="392" y="164"/>
+  <use xlink:href="#glyph1-21" x="399" y="164"/>
+  <use xlink:href="#glyph1-6" x="405" y="164"/>
+  <use xlink:href="#glyph1-5" x="413" y="164"/>
+  <use xlink:href="#glyph1-14" x="420" y="164"/>
+  <use xlink:href="#glyph1-2" x="424" y="164"/>
+  <use xlink:href="#glyph1-15" x="433" y="164"/>
+  <use xlink:href="#glyph1-14" x="439" y="164"/>
+  <use xlink:href="#glyph1-7" x="443" y="164"/>
+  <use xlink:href="#glyph1-3" x="452" y="164"/>
+  <use xlink:href="#glyph1-6" x="463" y="164"/>
+  <use xlink:href="#glyph1-28" x="471" y="164"/>
+  <use xlink:href="#glyph1-25" x="476" y="164"/>
+  <use xlink:href="#glyph1-26" x="479" y="164"/>
+  <use xlink:href="#glyph1-27" x="486" y="164"/>
+  <use xlink:href="#glyph1-44" x="493" y="164"/>
+  <use xlink:href="#glyph1-14" x="496" y="164"/>
+  <use xlink:href="#glyph1-30" x="500" y="164"/>
+  <use xlink:href="#glyph1-38" x="510" y="164"/>
+  <use xlink:href="#glyph1-6" x="518" y="164"/>
+  <use xlink:href="#glyph1-14" x="526" y="164"/>
+  <use xlink:href="#glyph1-5" x="530" y="164"/>
+  <use xlink:href="#glyph1-33" x="537" y="164"/>
+  <use xlink:href="#glyph1-19" x="545" y="164"/>
+  <use xlink:href="#glyph1-45" x="553" y="164"/>
+  <use xlink:href="#glyph1-6" x="556" y="164"/>
+  <use xlink:href="#glyph1-26" x="564" y="164"/>
+  <use xlink:href="#glyph1-21" x="571" y="164"/>
+  <use xlink:href="#glyph1-14" x="577" y="164"/>
+  <use xlink:href="#glyph1-5" x="581" y="164"/>
+  <use xlink:href="#glyph1-4" x="588" y="164"/>
+  <use xlink:href="#glyph1-6" x="596" y="164"/>
+  <use xlink:href="#glyph1-27" x="604" y="164"/>
+  <use xlink:href="#glyph1-46" x="611" y="164"/>
+  <use xlink:href="#glyph1-5" x="618" y="164"/>
+  <use xlink:href="#glyph1-14" x="625" y="164"/>
+  <use xlink:href="#glyph1-25" x="629" y="164"/>
+  <use xlink:href="#glyph1-21" x="632" y="164"/>
+  <use xlink:href="#glyph1-5" x="638" y="164"/>
+  <use xlink:href="#glyph1-14" x="645" y="164"/>
+  <use xlink:href="#glyph1-2" x="649" y="164"/>
+  <use xlink:href="#glyph1-42" x="658" y="164"/>
+  <use xlink:href="#glyph1-23" x="670" y="164"/>
+  <use xlink:href="#glyph1-14" x="678" y="164"/>
+  <use xlink:href="#glyph1-25" x="682" y="164"/>
+  <use xlink:href="#glyph1-3" x="685" y="164"/>
+  <use xlink:href="#glyph1-4" x="696" y="164"/>
+  <use xlink:href="#glyph1-2" x="704" y="164"/>
+  <use xlink:href="#glyph1-28" x="713" y="164"/>
+  <use xlink:href="#glyph1-21" x="718" y="164"/>
+  <use xlink:href="#glyph1-27" x="724" y="164"/>
+  <use xlink:href="#glyph1-23" x="731" y="164"/>
+  <use xlink:href="#glyph1-26" x="739" y="164"/>
+  <use xlink:href="#glyph1-6" x="746" y="164"/>
+  <use xlink:href="#glyph1-47" x="754" y="164"/>
+  <use xlink:href="#glyph1-14" x="757" y="164"/>
+  <use xlink:href="#glyph1-26" x="761" y="164"/>
+  <use xlink:href="#glyph1-2" x="768" y="164"/>
+  <use xlink:href="#glyph1-3" x="777" y="164"/>
+  <use xlink:href="#glyph1-4" x="788" y="164"/>
+  <use xlink:href="#glyph1-28" x="796" y="164"/>
+  <use xlink:href="#glyph1-6" x="801" y="164"/>
+  <use xlink:href="#glyph1-38" x="809" y="164"/>
+  <use xlink:href="#glyph1-6" x="817" y="164"/>
+  <use xlink:href="#glyph1-23" x="825" y="164"/>
+  <use xlink:href="#glyph1-8" x="833" y="164"/>
+  <use xlink:href="#glyph1-25" x="841" y="164"/>
+  <use xlink:href="#glyph1-23" x="844" y="164"/>
+  <use xlink:href="#glyph1-40" x="852" y="164"/>
+  <use xlink:href="#glyph1-14" x="860" y="164"/>
+  <use xlink:href="#glyph1-25" x="864" y="164"/>
+  <use xlink:href="#glyph1-23" x="867" y="164"/>
+  <use xlink:href="#glyph1-14" x="875" y="164"/>
+  <use xlink:href="#glyph1-25" x="879" y="164"/>
+  <use xlink:href="#glyph1-21" x="882" y="164"/>
+  <use xlink:href="#glyph1-5" x="888" y="164"/>
+  <use xlink:href="#glyph1-14" x="895" y="164"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="151" y="185"/>
+  <use xlink:href="#glyph1-2" x="158" y="185"/>
+  <use xlink:href="#glyph1-23" x="167" y="185"/>
+  <use xlink:href="#glyph1-5" x="175" y="185"/>
+  <use xlink:href="#glyph1-6" x="182" y="185"/>
+  <use xlink:href="#glyph1-34" x="190" y="185"/>
+  <use xlink:href="#glyph1-33" x="198" y="185"/>
+  <use xlink:href="#glyph1-6" x="206" y="185"/>
+  <use xlink:href="#glyph1-23" x="214" y="185"/>
+  <use xlink:href="#glyph1-26" x="222" y="185"/>
+  <use xlink:href="#glyph1-6" x="229" y="185"/>
+  <use xlink:href="#glyph1-5" x="237" y="185"/>
+  <use xlink:href="#glyph1-14" x="244" y="185"/>
+  <use xlink:href="#glyph1-23" x="248" y="185"/>
+  <use xlink:href="#glyph1-2" x="256" y="185"/>
+  <use xlink:href="#glyph1-21" x="265" y="185"/>
+  <use xlink:href="#glyph1-38" x="271" y="185"/>
+  <use xlink:href="#glyph1-25" x="279" y="185"/>
+  <use xlink:href="#glyph1-23" x="282" y="185"/>
+  <use xlink:href="#glyph1-40" x="290" y="185"/>
+  <use xlink:href="#glyph1-14" x="298" y="185"/>
+  <use xlink:href="#glyph1-36" x="302" y="185"/>
+  <use xlink:href="#glyph1-6" x="306" y="185"/>
+  <use xlink:href="#glyph1-5" x="314" y="185"/>
+  <use xlink:href="#glyph1-5" x="321" y="185"/>
+  <use xlink:href="#glyph1-14" x="328" y="185"/>
+  <use xlink:href="#glyph1-21" x="332" y="185"/>
+  <use xlink:href="#glyph1-38" x="338" y="185"/>
+  <use xlink:href="#glyph1-27" x="346" y="185"/>
+  <use xlink:href="#glyph1-23" x="353" y="185"/>
+  <use xlink:href="#glyph1-14" x="361" y="185"/>
+  <use xlink:href="#glyph1-21" x="365" y="185"/>
+  <use xlink:href="#glyph1-38" x="371" y="185"/>
+  <use xlink:href="#glyph1-6" x="379" y="185"/>
+  <use xlink:href="#glyph1-14" x="387" y="185"/>
+  <use xlink:href="#glyph1-6" x="391" y="185"/>
+  <use xlink:href="#glyph1-37" x="399" y="185"/>
+  <use xlink:href="#glyph1-25" x="407" y="185"/>
+  <use xlink:href="#glyph1-5" x="410" y="185"/>
+  <use xlink:href="#glyph1-21" x="417" y="185"/>
+  <use xlink:href="#glyph1-6" x="423" y="185"/>
+  <use xlink:href="#glyph1-23" x="431" y="185"/>
+  <use xlink:href="#glyph1-26" x="439" y="185"/>
+  <use xlink:href="#glyph1-6" x="446" y="185"/>
+  <use xlink:href="#glyph1-14" x="454" y="185"/>
+  <use xlink:href="#glyph1-2" x="458" y="185"/>
+  <use xlink:href="#glyph1-15" x="467" y="185"/>
+  <use xlink:href="#glyph1-14" x="473" y="185"/>
+  <use xlink:href="#glyph1-21" x="477" y="185"/>
+  <use xlink:href="#glyph1-38" x="483" y="185"/>
+  <use xlink:href="#glyph1-6" x="491" y="185"/>
+  <use xlink:href="#glyph1-14" x="499" y="185"/>
+  <use xlink:href="#glyph1-43" x="503" y="185"/>
+  <use xlink:href="#glyph1-48" x="513" y="185"/>
+  <use xlink:href="#glyph1-49" x="523" y="185"/>
+  <use xlink:href="#glyph1-50" x="526" y="185"/>
+  <use xlink:href="#glyph1-48" x="537" y="185"/>
+  <use xlink:href="#glyph1-41" x="547" y="185"/>
+  <use xlink:href="#glyph1-14" x="551" y="185"/>
+  <use xlink:href="#glyph1-21" x="555" y="185"/>
+  <use xlink:href="#glyph1-38" x="561" y="185"/>
+  <use xlink:href="#glyph1-6" x="569" y="185"/>
+  <use xlink:href="#glyph1-14" x="577" y="185"/>
+  <use xlink:href="#glyph1-5" x="581" y="185"/>
+  <use xlink:href="#glyph1-27" x="588" y="185"/>
+  <use xlink:href="#glyph1-15" x="595" y="185"/>
+  <use xlink:href="#glyph1-6" x="601" y="185"/>
+  <use xlink:href="#glyph1-21" x="609" y="185"/>
+  <use xlink:href="#glyph1-20" x="615" y="185"/>
+  <use xlink:href="#glyph1-14" x="622" y="185"/>
+  <use xlink:href="#glyph1-27" x="626" y="185"/>
+  <use xlink:href="#glyph1-23" x="633" y="185"/>
+  <use xlink:href="#glyph1-8" x="641" y="185"/>
+  <use xlink:href="#glyph1-14" x="649" y="185"/>
+  <use xlink:href="#glyph1-42" x="653" y="185"/>
+  <use xlink:href="#glyph1-6" x="665" y="185"/>
+  <use xlink:href="#glyph1-36" x="673" y="185"/>
+  <use xlink:href="#glyph1-15" x="677" y="185"/>
+  <use xlink:href="#glyph1-27" x="683" y="185"/>
+  <use xlink:href="#glyph1-28" x="690" y="185"/>
+  <use xlink:href="#glyph1-6" x="695" y="185"/>
+  <use xlink:href="#glyph1-14" x="703" y="185"/>
+  <use xlink:href="#glyph1-2" x="707" y="185"/>
+  <use xlink:href="#glyph1-15" x="716" y="185"/>
+  <use xlink:href="#glyph1-14" x="722" y="185"/>
+  <use xlink:href="#glyph1-21" x="726" y="185"/>
+  <use xlink:href="#glyph1-38" x="732" y="185"/>
+  <use xlink:href="#glyph1-6" x="740" y="185"/>
+  <use xlink:href="#glyph1-14" x="748" y="185"/>
+  <use xlink:href="#glyph1-4" x="752" y="185"/>
+  <use xlink:href="#glyph1-27" x="760" y="185"/>
+  <use xlink:href="#glyph1-28" x="767" y="185"/>
+  <use xlink:href="#glyph1-21" x="772" y="185"/>
+  <use xlink:href="#glyph1-5" x="778" y="185"/>
+  <use xlink:href="#glyph1-14" x="785" y="185"/>
+  <use xlink:href="#glyph1-2" x="789" y="185"/>
+  <use xlink:href="#glyph1-15" x="798" y="185"/>
+  <use xlink:href="#glyph1-14" x="804" y="185"/>
+  <use xlink:href="#glyph1-42" x="808" y="185"/>
+  <use xlink:href="#glyph1-38" x="820" y="185"/>
+  <use xlink:href="#glyph1-25" x="828" y="185"/>
+  <use xlink:href="#glyph1-26" x="831" y="185"/>
+  <use xlink:href="#glyph1-38" x="838" y="185"/>
+  <use xlink:href="#glyph1-14" x="846" y="185"/>
+  <use xlink:href="#glyph1-25" x="850" y="185"/>
+  <use xlink:href="#glyph1-21" x="853" y="185"/>
+  <use xlink:href="#glyph1-14" x="859" y="185"/>
+  <use xlink:href="#glyph1-25" x="863" y="185"/>
+  <use xlink:href="#glyph1-5" x="866" y="185"/>
+  <use xlink:href="#glyph1-14" x="873" y="185"/>
+  <use xlink:href="#glyph1-26" x="877" y="185"/>
+  <use xlink:href="#glyph1-2" x="884" y="185"/>
+  <use xlink:href="#glyph1-3" x="893" y="185"/>
+  <use xlink:href="#glyph1-4" x="904" y="185"/>
+  <use xlink:href="#glyph1-2" x="912" y="185"/>
+  <use xlink:href="#glyph1-5" x="921" y="185"/>
+  <use xlink:href="#glyph1-6" x="928" y="185"/>
+  <use xlink:href="#glyph1-8" x="936" y="185"/>
+  <use xlink:href="#glyph1-41" x="944" y="185"/>
+  <use xlink:href="#glyph1-14" x="948" y="185"/>
+  <use xlink:href="#glyph1-21" x="952" y="185"/>
+  <use xlink:href="#glyph1-38" x="958" y="185"/>
+  <use xlink:href="#glyph1-6" x="966" y="185"/>
+  <use xlink:href="#glyph1-14" x="974" y="185"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-15" x="151" y="206"/>
+  <use xlink:href="#glyph1-27" x="157" y="206"/>
+  <use xlink:href="#glyph1-21" x="164" y="206"/>
+  <use xlink:href="#glyph1-6" x="170" y="206"/>
+  <use xlink:href="#glyph1-14" x="178" y="206"/>
+  <use xlink:href="#glyph1-2" x="182" y="206"/>
+  <use xlink:href="#glyph1-15" x="191" y="206"/>
+  <use xlink:href="#glyph1-14" x="197" y="206"/>
+  <use xlink:href="#glyph1-27" x="201" y="206"/>
+  <use xlink:href="#glyph1-23" x="208" y="206"/>
+  <use xlink:href="#glyph1-14" x="216" y="206"/>
+  <use xlink:href="#glyph1-6" x="220" y="206"/>
+  <use xlink:href="#glyph1-3" x="228" y="206"/>
+  <use xlink:href="#glyph1-4" x="239" y="206"/>
+  <use xlink:href="#glyph1-25" x="247" y="206"/>
+  <use xlink:href="#glyph1-28" x="250" y="206"/>
+  <use xlink:href="#glyph1-6" x="255" y="206"/>
+  <use xlink:href="#glyph1-14" x="263" y="206"/>
+  <use xlink:href="#glyph1-25" x="267" y="206"/>
+  <use xlink:href="#glyph1-23" x="270" y="206"/>
+  <use xlink:href="#glyph1-14" x="278" y="206"/>
+  <use xlink:href="#glyph1-3" x="282" y="206"/>
+  <use xlink:href="#glyph1-27" x="293" y="206"/>
+  <use xlink:href="#glyph1-23" x="300" y="206"/>
+  <use xlink:href="#glyph1-20" x="308" y="206"/>
+  <use xlink:href="#glyph1-14" x="315" y="206"/>
+  <use xlink:href="#glyph1-28" x="319" y="206"/>
+  <use xlink:href="#glyph1-6" x="324" y="206"/>
+  <use xlink:href="#glyph1-5" x="332" y="206"/>
+  <use xlink:href="#glyph1-4" x="339" y="206"/>
+  <use xlink:href="#glyph1-6" x="347" y="206"/>
+  <use xlink:href="#glyph1-26" x="355" y="206"/>
+  <use xlink:href="#glyph1-21" x="362" y="206"/>
+  <use xlink:href="#glyph1-5" x="368" y="206"/>
+  <use xlink:href="#glyph1-14" x="375" y="206"/>
+  <use xlink:href="#glyph1-21" x="379" y="206"/>
+  <use xlink:href="#glyph1-38" x="385" y="206"/>
+  <use xlink:href="#glyph1-6" x="393" y="206"/>
+  <use xlink:href="#glyph1-14" x="401" y="206"/>
+  <use xlink:href="#glyph1-3" x="405" y="206"/>
+  <use xlink:href="#glyph1-2" x="416" y="206"/>
+  <use xlink:href="#glyph1-5" x="425" y="206"/>
+  <use xlink:href="#glyph1-21" x="432" y="206"/>
+  <use xlink:href="#glyph1-14" x="438" y="206"/>
+  <use xlink:href="#glyph1-25" x="442" y="206"/>
+  <use xlink:href="#glyph1-23" x="445" y="206"/>
+  <use xlink:href="#glyph1-21" x="453" y="206"/>
+  <use xlink:href="#glyph1-6" x="459" y="206"/>
+  <use xlink:href="#glyph1-28" x="467" y="206"/>
+  <use xlink:href="#glyph1-6" x="472" y="206"/>
+  <use xlink:href="#glyph1-5" x="480" y="206"/>
+  <use xlink:href="#glyph1-21" x="487" y="206"/>
+  <use xlink:href="#glyph1-25" x="493" y="206"/>
+  <use xlink:href="#glyph1-23" x="496" y="206"/>
+  <use xlink:href="#glyph1-40" x="504" y="206"/>
+  <use xlink:href="#glyph1-14" x="512" y="206"/>
+  <use xlink:href="#glyph1-25" x="516" y="206"/>
+  <use xlink:href="#glyph1-23" x="519" y="206"/>
+  <use xlink:href="#glyph1-14" x="527" y="206"/>
+  <use xlink:href="#glyph1-21" x="531" y="206"/>
+  <use xlink:href="#glyph1-38" x="537" y="206"/>
+  <use xlink:href="#glyph1-6" x="545" y="206"/>
+  <use xlink:href="#glyph1-14" x="553" y="206"/>
+  <use xlink:href="#glyph1-42" x="557" y="206"/>
+  <use xlink:href="#glyph1-2" x="569" y="206"/>
+  <use xlink:href="#glyph1-28" x="578" y="206"/>
+  <use xlink:href="#glyph1-36" x="583" y="206"/>
+  <use xlink:href="#glyph1-8" x="587" y="206"/>
+  <use xlink:href="#glyph1-44" x="595" y="206"/>
+  <use xlink:href="#glyph1-14" x="598" y="206"/>
+  <use xlink:href="#glyph1-49" x="602" y="206"/>
+  <use xlink:href="#glyph1-21" x="605" y="206"/>
+  <use xlink:href="#glyph1-14" x="611" y="206"/>
+  <use xlink:href="#glyph1-38" x="615" y="206"/>
+  <use xlink:href="#glyph1-27" x="623" y="206"/>
+  <use xlink:href="#glyph1-5" x="630" y="206"/>
+  <use xlink:href="#glyph1-14" x="637" y="206"/>
+  <use xlink:href="#glyph1-19" x="641" y="206"/>
+  <use xlink:href="#glyph1-6" x="649" y="206"/>
+  <use xlink:href="#glyph1-6" x="657" y="206"/>
+  <use xlink:href="#glyph1-23" x="665" y="206"/>
+  <use xlink:href="#glyph1-14" x="673" y="206"/>
+  <use xlink:href="#glyph1-15" x="677" y="206"/>
+  <use xlink:href="#glyph1-28" x="683" y="206"/>
+  <use xlink:href="#glyph1-6" x="688" y="206"/>
+  <use xlink:href="#glyph1-34" x="696" y="206"/>
+  <use xlink:href="#glyph1-33" x="704" y="206"/>
+  <use xlink:href="#glyph1-6" x="712" y="206"/>
+  <use xlink:href="#glyph1-23" x="720" y="206"/>
+  <use xlink:href="#glyph1-21" x="728" y="206"/>
+  <use xlink:href="#glyph1-36" x="734" y="206"/>
+  <use xlink:href="#glyph1-20" x="738" y="206"/>
+  <use xlink:href="#glyph1-14" x="745" y="206"/>
+  <use xlink:href="#glyph1-28" x="749" y="206"/>
+  <use xlink:href="#glyph1-6" x="754" y="206"/>
+  <use xlink:href="#glyph1-3" x="762" y="206"/>
+  <use xlink:href="#glyph1-27" x="773" y="206"/>
+  <use xlink:href="#glyph1-28" x="780" y="206"/>
+  <use xlink:href="#glyph1-46" x="785" y="206"/>
+  <use xlink:href="#glyph1-6" x="792" y="206"/>
+  <use xlink:href="#glyph1-8" x="800" y="206"/>
+  <use xlink:href="#glyph1-14" x="808" y="206"/>
+  <use xlink:href="#glyph1-21" x="812" y="206"/>
+  <use xlink:href="#glyph1-38" x="818" y="206"/>
+  <use xlink:href="#glyph1-27" x="826" y="206"/>
+  <use xlink:href="#glyph1-21" x="833" y="206"/>
+  <use xlink:href="#glyph1-14" x="839" y="206"/>
+  <use xlink:href="#glyph1-25" x="843" y="206"/>
+  <use xlink:href="#glyph1-21" x="846" y="206"/>
+  <use xlink:href="#glyph1-14" x="852" y="206"/>
+  <use xlink:href="#glyph1-5" x="856" y="206"/>
+  <use xlink:href="#glyph1-6" x="863" y="206"/>
+  <use xlink:href="#glyph1-6" x="871" y="206"/>
+  <use xlink:href="#glyph1-3" x="879" y="206"/>
+  <use xlink:href="#glyph1-5" x="890" y="206"/>
+  <use xlink:href="#glyph1-14" x="897" y="206"/>
+  <use xlink:href="#glyph1-21" x="901" y="206"/>
+  <use xlink:href="#glyph1-2" x="907" y="206"/>
+  <use xlink:href="#glyph1-14" x="916" y="206"/>
+  <use xlink:href="#glyph1-38" x="920" y="206"/>
+  <use xlink:href="#glyph1-27" x="928" y="206"/>
+  <use xlink:href="#glyph1-35" x="935" y="206"/>
+  <use xlink:href="#glyph1-6" x="942" y="206"/>
+  <use xlink:href="#glyph1-14" x="950" y="206"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-19" x="151" y="227"/>
+  <use xlink:href="#glyph1-6" x="159" y="227"/>
+  <use xlink:href="#glyph1-6" x="167" y="227"/>
+  <use xlink:href="#glyph1-23" x="175" y="227"/>
+  <use xlink:href="#glyph1-14" x="183" y="227"/>
+  <use xlink:href="#glyph1-28" x="187" y="227"/>
+  <use xlink:href="#glyph1-6" x="192" y="227"/>
+  <use xlink:href="#glyph1-5" x="200" y="227"/>
+  <use xlink:href="#glyph1-6" x="207" y="227"/>
+  <use xlink:href="#glyph1-28" x="215" y="227"/>
+  <use xlink:href="#glyph1-35" x="220" y="227"/>
+  <use xlink:href="#glyph1-6" x="227" y="227"/>
+  <use xlink:href="#glyph1-8" x="235" y="227"/>
+  <use xlink:href="#glyph1-14" x="243" y="227"/>
+  <use xlink:href="#glyph1-21" x="247" y="227"/>
+  <use xlink:href="#glyph1-2" x="253" y="227"/>
+  <use xlink:href="#glyph1-14" x="262" y="227"/>
+  <use xlink:href="#glyph1-21" x="266" y="227"/>
+  <use xlink:href="#glyph1-38" x="272" y="227"/>
+  <use xlink:href="#glyph1-6" x="280" y="227"/>
+  <use xlink:href="#glyph1-14" x="288" y="227"/>
+  <use xlink:href="#glyph1-4" x="292" y="227"/>
+  <use xlink:href="#glyph1-6" x="300" y="227"/>
+  <use xlink:href="#glyph1-2" x="308" y="227"/>
+  <use xlink:href="#glyph1-4" x="317" y="227"/>
+  <use xlink:href="#glyph1-36" x="325" y="227"/>
+  <use xlink:href="#glyph1-6" x="329" y="227"/>
+  <use xlink:href="#glyph1-14" x="337" y="227"/>
+  <use xlink:href="#glyph1-2" x="341" y="227"/>
+  <use xlink:href="#glyph1-15" x="350" y="227"/>
+  <use xlink:href="#glyph1-14" x="356" y="227"/>
+  <use xlink:href="#glyph1-21" x="360" y="227"/>
+  <use xlink:href="#glyph1-38" x="366" y="227"/>
+  <use xlink:href="#glyph1-25" x="374" y="227"/>
+  <use xlink:href="#glyph1-5" x="377" y="227"/>
+  <use xlink:href="#glyph1-14" x="384" y="227"/>
+  <use xlink:href="#glyph1-26" x="388" y="227"/>
+  <use xlink:href="#glyph1-2" x="395" y="227"/>
+  <use xlink:href="#glyph1-33" x="404" y="227"/>
+  <use xlink:href="#glyph1-23" x="412" y="227"/>
+  <use xlink:href="#glyph1-21" x="420" y="227"/>
+  <use xlink:href="#glyph1-28" x="426" y="227"/>
+  <use xlink:href="#glyph1-20" x="431" y="227"/>
+  <use xlink:href="#glyph1-41" x="438" y="227"/>
+  <use xlink:href="#glyph1-14" x="442" y="227"/>
+  <use xlink:href="#glyph1-19" x="446" y="227"/>
+  <use xlink:href="#glyph1-20" x="454" y="227"/>
+  <use xlink:href="#glyph1-14" x="461" y="227"/>
+  <use xlink:href="#glyph1-21" x="465" y="227"/>
+  <use xlink:href="#glyph1-38" x="471" y="227"/>
+  <use xlink:href="#glyph1-6" x="479" y="227"/>
+  <use xlink:href="#glyph1-25" x="487" y="227"/>
+  <use xlink:href="#glyph1-28" x="490" y="227"/>
+  <use xlink:href="#glyph1-14" x="495" y="227"/>
+  <use xlink:href="#glyph1-26" x="499" y="227"/>
+  <use xlink:href="#glyph1-2" x="506" y="227"/>
+  <use xlink:href="#glyph1-23" x="515" y="227"/>
+  <use xlink:href="#glyph1-8" x="523" y="227"/>
+  <use xlink:href="#glyph1-33" x="531" y="227"/>
+  <use xlink:href="#glyph1-26" x="539" y="227"/>
+  <use xlink:href="#glyph1-21" x="546" y="227"/>
+  <use xlink:href="#glyph1-14" x="552" y="227"/>
+  <use xlink:href="#glyph1-27" x="556" y="227"/>
+  <use xlink:href="#glyph1-23" x="563" y="227"/>
+  <use xlink:href="#glyph1-8" x="571" y="227"/>
+  <use xlink:href="#glyph1-14" x="579" y="227"/>
+  <use xlink:href="#glyph1-6" x="583" y="227"/>
+  <use xlink:href="#glyph1-37" x="591" y="227"/>
+  <use xlink:href="#glyph1-27" x="599" y="227"/>
+  <use xlink:href="#glyph1-3" x="606" y="227"/>
+  <use xlink:href="#glyph1-4" x="617" y="227"/>
+  <use xlink:href="#glyph1-36" x="625" y="227"/>
+  <use xlink:href="#glyph1-6" x="629" y="227"/>
+  <use xlink:href="#glyph1-41" x="637" y="227"/>
+  <use xlink:href="#glyph1-14" x="641" y="227"/>
+  <use xlink:href="#glyph1-21" x="645" y="227"/>
+  <use xlink:href="#glyph1-2" x="651" y="227"/>
+  <use xlink:href="#glyph1-14" x="660" y="227"/>
+  <use xlink:href="#glyph1-8" x="664" y="227"/>
+  <use xlink:href="#glyph1-6" x="672" y="227"/>
+  <use xlink:href="#glyph1-26" x="680" y="227"/>
+  <use xlink:href="#glyph1-25" x="687" y="227"/>
+  <use xlink:href="#glyph1-8" x="690" y="227"/>
+  <use xlink:href="#glyph1-6" x="698" y="227"/>
+  <use xlink:href="#glyph1-14" x="706" y="227"/>
+  <use xlink:href="#glyph1-21" x="710" y="227"/>
+  <use xlink:href="#glyph1-38" x="716" y="227"/>
+  <use xlink:href="#glyph1-6" x="724" y="227"/>
+  <use xlink:href="#glyph1-14" x="732" y="227"/>
+  <use xlink:href="#glyph1-25" x="736" y="227"/>
+  <use xlink:href="#glyph1-3" x="739" y="227"/>
+  <use xlink:href="#glyph1-4" x="750" y="227"/>
+  <use xlink:href="#glyph1-2" x="758" y="227"/>
+  <use xlink:href="#glyph1-28" x="767" y="227"/>
+  <use xlink:href="#glyph1-21" x="772" y="227"/>
+  <use xlink:href="#glyph1-27" x="778" y="227"/>
+  <use xlink:href="#glyph1-23" x="785" y="227"/>
+  <use xlink:href="#glyph1-21" x="793" y="227"/>
+  <use xlink:href="#glyph1-14" x="799" y="227"/>
+  <use xlink:href="#glyph1-34" x="803" y="227"/>
+  <use xlink:href="#glyph1-33" x="811" y="227"/>
+  <use xlink:href="#glyph1-6" x="819" y="227"/>
+  <use xlink:href="#glyph1-5" x="827" y="227"/>
+  <use xlink:href="#glyph1-21" x="834" y="227"/>
+  <use xlink:href="#glyph1-25" x="840" y="227"/>
+  <use xlink:href="#glyph1-2" x="843" y="227"/>
+  <use xlink:href="#glyph1-23" x="852" y="227"/>
+  <use xlink:href="#glyph1-41" x="860" y="227"/>
+  <use xlink:href="#glyph1-14" x="864" y="227"/>
+  <use xlink:href="#glyph1-42" x="868" y="227"/>
+  <use xlink:href="#glyph1-38" x="880" y="227"/>
+  <use xlink:href="#glyph1-6" x="888" y="227"/>
+  <use xlink:href="#glyph1-21" x="896" y="227"/>
+  <use xlink:href="#glyph1-38" x="902" y="227"/>
+  <use xlink:href="#glyph1-6" x="910" y="227"/>
+  <use xlink:href="#glyph1-28" x="918" y="227"/>
+  <use xlink:href="#glyph1-14" x="923" y="227"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-5" x="151" y="248"/>
+  <use xlink:href="#glyph1-2" x="158" y="248"/>
+  <use xlink:href="#glyph1-26" x="167" y="248"/>
+  <use xlink:href="#glyph1-25" x="174" y="248"/>
+  <use xlink:href="#glyph1-6" x="177" y="248"/>
+  <use xlink:href="#glyph1-21" x="185" y="248"/>
+  <use xlink:href="#glyph1-25" x="191" y="248"/>
+  <use xlink:href="#glyph1-6" x="194" y="248"/>
+  <use xlink:href="#glyph1-5" x="202" y="248"/>
+  <use xlink:href="#glyph1-14" x="209" y="248"/>
+  <use xlink:href="#glyph1-2" x="213" y="248"/>
+  <use xlink:href="#glyph1-15" x="222" y="248"/>
+  <use xlink:href="#glyph1-14" x="228" y="248"/>
+  <use xlink:href="#glyph1-3" x="232" y="248"/>
+  <use xlink:href="#glyph1-6" x="243" y="248"/>
+  <use xlink:href="#glyph1-23" x="251" y="248"/>
+  <use xlink:href="#glyph1-14" x="259" y="248"/>
+  <use xlink:href="#glyph1-27" x="263" y="248"/>
+  <use xlink:href="#glyph1-28" x="270" y="248"/>
+  <use xlink:href="#glyph1-6" x="275" y="248"/>
+  <use xlink:href="#glyph1-14" x="283" y="248"/>
+  <use xlink:href="#glyph1-28" x="287" y="248"/>
+  <use xlink:href="#glyph1-6" x="292" y="248"/>
+  <use xlink:href="#glyph1-27" x="300" y="248"/>
+  <use xlink:href="#glyph1-36" x="307" y="248"/>
+  <use xlink:href="#glyph1-36" x="311" y="248"/>
+  <use xlink:href="#glyph1-20" x="315" y="248"/>
+  <use xlink:href="#glyph1-14" x="322" y="248"/>
+  <use xlink:href="#glyph1-26" x="326" y="248"/>
+  <use xlink:href="#glyph1-27" x="333" y="248"/>
+  <use xlink:href="#glyph1-4" x="340" y="248"/>
+  <use xlink:href="#glyph1-27" x="348" y="248"/>
+  <use xlink:href="#glyph1-19" x="355" y="248"/>
+  <use xlink:href="#glyph1-36" x="363" y="248"/>
+  <use xlink:href="#glyph1-6" x="367" y="248"/>
+  <use xlink:href="#glyph1-14" x="375" y="248"/>
+  <use xlink:href="#glyph1-2" x="379" y="248"/>
+  <use xlink:href="#glyph1-28" x="388" y="248"/>
+  <use xlink:href="#glyph1-14" x="393" y="248"/>
+  <use xlink:href="#glyph1-23" x="397" y="248"/>
+  <use xlink:href="#glyph1-2" x="405" y="248"/>
+  <use xlink:href="#glyph1-21" x="414" y="248"/>
+  <use xlink:href="#glyph1-14" x="420" y="248"/>
+  <use xlink:href="#glyph1-2" x="424" y="248"/>
+  <use xlink:href="#glyph1-15" x="433" y="248"/>
+  <use xlink:href="#glyph1-14" x="439" y="248"/>
+  <use xlink:href="#glyph1-6" x="443" y="248"/>
+  <use xlink:href="#glyph1-5" x="451" y="248"/>
+  <use xlink:href="#glyph1-21" x="458" y="248"/>
+  <use xlink:href="#glyph1-27" x="464" y="248"/>
+  <use xlink:href="#glyph1-19" x="471" y="248"/>
+  <use xlink:href="#glyph1-36" x="479" y="248"/>
+  <use xlink:href="#glyph1-25" x="483" y="248"/>
+  <use xlink:href="#glyph1-5" x="486" y="248"/>
+  <use xlink:href="#glyph1-38" x="493" y="248"/>
+  <use xlink:href="#glyph1-25" x="501" y="248"/>
+  <use xlink:href="#glyph1-23" x="504" y="248"/>
+  <use xlink:href="#glyph1-40" x="512" y="248"/>
+  <use xlink:href="#glyph1-14" x="520" y="248"/>
+  <use xlink:href="#glyph1-40" x="524" y="248"/>
+  <use xlink:href="#glyph1-2" x="532" y="248"/>
+  <use xlink:href="#glyph1-2" x="541" y="248"/>
+  <use xlink:href="#glyph1-8" x="550" y="248"/>
+  <use xlink:href="#glyph1-14" x="558" y="248"/>
+  <use xlink:href="#glyph1-40" x="562" y="248"/>
+  <use xlink:href="#glyph1-2" x="570" y="248"/>
+  <use xlink:href="#glyph1-35" x="579" y="248"/>
+  <use xlink:href="#glyph1-6" x="586" y="248"/>
+  <use xlink:href="#glyph1-28" x="594" y="248"/>
+  <use xlink:href="#glyph1-23" x="599" y="248"/>
+  <use xlink:href="#glyph1-3" x="607" y="248"/>
+  <use xlink:href="#glyph1-6" x="618" y="248"/>
+  <use xlink:href="#glyph1-23" x="626" y="248"/>
+  <use xlink:href="#glyph1-21" x="634" y="248"/>
+  <use xlink:href="#glyph1-14" x="640" y="248"/>
+  <use xlink:href="#glyph1-15" x="644" y="248"/>
+  <use xlink:href="#glyph1-28" x="650" y="248"/>
+  <use xlink:href="#glyph1-2" x="655" y="248"/>
+  <use xlink:href="#glyph1-3" x="664" y="248"/>
+  <use xlink:href="#glyph1-14" x="675" y="248"/>
+  <use xlink:href="#glyph1-28" x="679" y="248"/>
+  <use xlink:href="#glyph1-6" x="684" y="248"/>
+  <use xlink:href="#glyph1-51" x="692" y="248"/>
+  <use xlink:href="#glyph1-6" x="701" y="248"/>
+  <use xlink:href="#glyph1-26" x="709" y="248"/>
+  <use xlink:href="#glyph1-21" x="716" y="248"/>
+  <use xlink:href="#glyph1-25" x="722" y="248"/>
+  <use xlink:href="#glyph1-2" x="725" y="248"/>
+  <use xlink:href="#glyph1-23" x="734" y="248"/>
+  <use xlink:href="#glyph1-14" x="742" y="248"/>
+  <use xlink:href="#glyph1-27" x="746" y="248"/>
+  <use xlink:href="#glyph1-23" x="753" y="248"/>
+  <use xlink:href="#glyph1-8" x="761" y="248"/>
+  <use xlink:href="#glyph1-14" x="769" y="248"/>
+  <use xlink:href="#glyph1-26" x="773" y="248"/>
+  <use xlink:href="#glyph1-38" x="780" y="248"/>
+  <use xlink:href="#glyph1-2" x="788" y="248"/>
+  <use xlink:href="#glyph1-25" x="797" y="248"/>
+  <use xlink:href="#glyph1-26" x="800" y="248"/>
+  <use xlink:href="#glyph1-6" x="807" y="248"/>
+  <use xlink:href="#glyph1-41" x="815" y="248"/>
+  <use xlink:href="#glyph1-14" x="819" y="248"/>
+  <use xlink:href="#glyph1-2" x="823" y="248"/>
+  <use xlink:href="#glyph1-28" x="832" y="248"/>
+  <use xlink:href="#glyph1-14" x="837" y="248"/>
+  <use xlink:href="#glyph1-42" x="841" y="248"/>
+  <use xlink:href="#glyph1-38" x="853" y="248"/>
+  <use xlink:href="#glyph1-6" x="861" y="248"/>
+  <use xlink:href="#glyph1-21" x="869" y="248"/>
+  <use xlink:href="#glyph1-38" x="875" y="248"/>
+  <use xlink:href="#glyph1-6" x="883" y="248"/>
+  <use xlink:href="#glyph1-28" x="891" y="248"/>
+  <use xlink:href="#glyph1-14" x="896" y="248"/>
+  <use xlink:href="#glyph1-21" x="900" y="248"/>
+  <use xlink:href="#glyph1-38" x="906" y="248"/>
+  <use xlink:href="#glyph1-6" x="914" y="248"/>
+  <use xlink:href="#glyph1-20" x="922" y="248"/>
+  <use xlink:href="#glyph1-14" x="929" y="248"/>
+  <use xlink:href="#glyph1-27" x="933" y="248"/>
+  <use xlink:href="#glyph1-28" x="940" y="248"/>
+  <use xlink:href="#glyph1-6" x="945" y="248"/>
+  <use xlink:href="#glyph1-14" x="953" y="248"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-15" x="151" y="269"/>
+  <use xlink:href="#glyph1-2" x="157" y="269"/>
+  <use xlink:href="#glyph1-28" x="166" y="269"/>
+  <use xlink:href="#glyph1-6" x="171" y="269"/>
+  <use xlink:href="#glyph1-35" x="179" y="269"/>
+  <use xlink:href="#glyph1-6" x="186" y="269"/>
+  <use xlink:href="#glyph1-28" x="194" y="269"/>
+  <use xlink:href="#glyph1-14" x="199" y="269"/>
+  <use xlink:href="#glyph1-8" x="203" y="269"/>
+  <use xlink:href="#glyph1-6" x="211" y="269"/>
+  <use xlink:href="#glyph1-5" x="219" y="269"/>
+  <use xlink:href="#glyph1-21" x="226" y="269"/>
+  <use xlink:href="#glyph1-25" x="232" y="269"/>
+  <use xlink:href="#glyph1-23" x="235" y="269"/>
+  <use xlink:href="#glyph1-6" x="243" y="269"/>
+  <use xlink:href="#glyph1-8" x="251" y="269"/>
+  <use xlink:href="#glyph1-14" x="259" y="269"/>
+  <use xlink:href="#glyph1-21" x="263" y="269"/>
+  <use xlink:href="#glyph1-2" x="269" y="269"/>
+  <use xlink:href="#glyph1-14" x="278" y="269"/>
+  <use xlink:href="#glyph1-8" x="282" y="269"/>
+  <use xlink:href="#glyph1-6" x="290" y="269"/>
+  <use xlink:href="#glyph1-4" x="298" y="269"/>
+  <use xlink:href="#glyph1-6" x="306" y="269"/>
+  <use xlink:href="#glyph1-23" x="314" y="269"/>
+  <use xlink:href="#glyph1-8" x="322" y="269"/>
+  <use xlink:href="#glyph1-14" x="330" y="269"/>
+  <use xlink:href="#glyph1-15" x="334" y="269"/>
+  <use xlink:href="#glyph1-2" x="340" y="269"/>
+  <use xlink:href="#glyph1-28" x="349" y="269"/>
+  <use xlink:href="#glyph1-14" x="354" y="269"/>
+  <use xlink:href="#glyph1-21" x="358" y="269"/>
+  <use xlink:href="#glyph1-38" x="364" y="269"/>
+  <use xlink:href="#glyph1-6" x="372" y="269"/>
+  <use xlink:href="#glyph1-25" x="380" y="269"/>
+  <use xlink:href="#glyph1-28" x="383" y="269"/>
+  <use xlink:href="#glyph1-14" x="388" y="269"/>
+  <use xlink:href="#glyph1-4" x="392" y="269"/>
+  <use xlink:href="#glyph1-2" x="400" y="269"/>
+  <use xlink:href="#glyph1-36" x="409" y="269"/>
+  <use xlink:href="#glyph1-25" x="413" y="269"/>
+  <use xlink:href="#glyph1-21" x="416" y="269"/>
+  <use xlink:href="#glyph1-25" x="422" y="269"/>
+  <use xlink:href="#glyph1-26" x="425" y="269"/>
+  <use xlink:href="#glyph1-27" x="432" y="269"/>
+  <use xlink:href="#glyph1-36" x="439" y="269"/>
+  <use xlink:href="#glyph1-14" x="443" y="269"/>
+  <use xlink:href="#glyph1-26" x="447" y="269"/>
+  <use xlink:href="#glyph1-2" x="454" y="269"/>
+  <use xlink:href="#glyph1-23" x="463" y="269"/>
+  <use xlink:href="#glyph1-5" x="471" y="269"/>
+  <use xlink:href="#glyph1-21" x="478" y="269"/>
+  <use xlink:href="#glyph1-25" x="484" y="269"/>
+  <use xlink:href="#glyph1-21" x="487" y="269"/>
+  <use xlink:href="#glyph1-33" x="493" y="269"/>
+  <use xlink:href="#glyph1-21" x="501" y="269"/>
+  <use xlink:href="#glyph1-25" x="507" y="269"/>
+  <use xlink:href="#glyph1-2" x="510" y="269"/>
+  <use xlink:href="#glyph1-23" x="519" y="269"/>
+  <use xlink:href="#glyph1-5" x="527" y="269"/>
+  <use xlink:href="#glyph1-14" x="534" y="269"/>
+  <use xlink:href="#glyph1-2" x="538" y="269"/>
+  <use xlink:href="#glyph1-23" x="547" y="269"/>
+  <use xlink:href="#glyph1-14" x="555" y="269"/>
+  <use xlink:href="#glyph1-27" x="559" y="269"/>
+  <use xlink:href="#glyph1-26" x="566" y="269"/>
+  <use xlink:href="#glyph1-26" x="573" y="269"/>
+  <use xlink:href="#glyph1-25" x="580" y="269"/>
+  <use xlink:href="#glyph1-8" x="583" y="269"/>
+  <use xlink:href="#glyph1-6" x="591" y="269"/>
+  <use xlink:href="#glyph1-23" x="599" y="269"/>
+  <use xlink:href="#glyph1-21" x="607" y="269"/>
+  <use xlink:href="#glyph1-14" x="613" y="269"/>
+  <use xlink:href="#glyph1-27" x="617" y="269"/>
+  <use xlink:href="#glyph1-23" x="624" y="269"/>
+  <use xlink:href="#glyph1-8" x="632" y="269"/>
+  <use xlink:href="#glyph1-14" x="640" y="269"/>
+  <use xlink:href="#glyph1-15" x="644" y="269"/>
+  <use xlink:href="#glyph1-2" x="650" y="269"/>
+  <use xlink:href="#glyph1-28" x="659" y="269"/>
+  <use xlink:href="#glyph1-26" x="664" y="269"/>
+  <use xlink:href="#glyph1-6" x="671" y="269"/>
+  <use xlink:href="#glyph1-44" x="679" y="269"/>
+  <use xlink:href="#glyph1-14" x="682" y="269"/>
+  <use xlink:href="#glyph1-49" x="686" y="269"/>
+  <use xlink:href="#glyph1-15" x="689" y="269"/>
+  <use xlink:href="#glyph1-14" x="695" y="269"/>
+  <use xlink:href="#glyph1-21" x="699" y="269"/>
+  <use xlink:href="#glyph1-38" x="705" y="269"/>
+  <use xlink:href="#glyph1-6" x="713" y="269"/>
+  <use xlink:href="#glyph1-28" x="721" y="269"/>
+  <use xlink:href="#glyph1-6" x="726" y="269"/>
+  <use xlink:href="#glyph1-14" x="734" y="269"/>
+  <use xlink:href="#glyph1-19" x="738" y="269"/>
+  <use xlink:href="#glyph1-6" x="746" y="269"/>
+  <use xlink:href="#glyph1-14" x="754" y="269"/>
+  <use xlink:href="#glyph1-27" x="758" y="269"/>
+  <use xlink:href="#glyph1-23" x="765" y="269"/>
+  <use xlink:href="#glyph1-20" x="773" y="269"/>
+  <use xlink:href="#glyph1-14" x="780" y="269"/>
+  <use xlink:href="#glyph1-21" x="784" y="269"/>
+  <use xlink:href="#glyph1-28" x="790" y="269"/>
+  <use xlink:href="#glyph1-33" x="795" y="269"/>
+  <use xlink:href="#glyph1-21" x="803" y="269"/>
+  <use xlink:href="#glyph1-38" x="809" y="269"/>
+  <use xlink:href="#glyph1-14" x="817" y="269"/>
+  <use xlink:href="#glyph1-25" x="821" y="269"/>
+  <use xlink:href="#glyph1-23" x="824" y="269"/>
+  <use xlink:href="#glyph1-14" x="832" y="269"/>
+  <use xlink:href="#glyph1-21" x="836" y="269"/>
+  <use xlink:href="#glyph1-38" x="842" y="269"/>
+  <use xlink:href="#glyph1-6" x="850" y="269"/>
+  <use xlink:href="#glyph1-14" x="858" y="269"/>
+  <use xlink:href="#glyph1-28" x="862" y="269"/>
+  <use xlink:href="#glyph1-6" x="867" y="269"/>
+  <use xlink:href="#glyph1-3" x="875" y="269"/>
+  <use xlink:href="#glyph1-27" x="886" y="269"/>
+  <use xlink:href="#glyph1-28" x="893" y="269"/>
+  <use xlink:href="#glyph1-46" x="898" y="269"/>
+  <use xlink:href="#glyph1-41" x="905" y="269"/>
+  <use xlink:href="#glyph1-14" x="909" y="269"/>
+  <use xlink:href="#glyph1-21" x="913" y="269"/>
+  <use xlink:href="#glyph1-38" x="919" y="269"/>
+  <use xlink:href="#glyph1-6" x="927" y="269"/>
+  <use xlink:href="#glyph1-14" x="935" y="269"/>
+  <use xlink:href="#glyph1-26" x="939" y="269"/>
+  <use xlink:href="#glyph1-28" x="946" y="269"/>
+  <use xlink:href="#glyph1-25" x="951" y="269"/>
+  <use xlink:href="#glyph1-5" x="954" y="269"/>
+  <use xlink:href="#glyph1-25" x="961" y="269"/>
+  <use xlink:href="#glyph1-5" x="964" y="269"/>
+  <use xlink:href="#glyph1-14" x="971" y="269"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="151" y="290"/>
+  <use xlink:href="#glyph1-21" x="158" y="290"/>
+  <use xlink:href="#glyph1-14" x="164" y="290"/>
+  <use xlink:href="#glyph1-42" x="168" y="290"/>
+  <use xlink:href="#glyph1-38" x="180" y="290"/>
+  <use xlink:href="#glyph1-25" x="188" y="290"/>
+  <use xlink:href="#glyph1-26" x="191" y="290"/>
+  <use xlink:href="#glyph1-38" x="198" y="290"/>
+  <use xlink:href="#glyph1-14" x="206" y="290"/>
+  <use xlink:href="#glyph1-42" x="210" y="290"/>
+  <use xlink:href="#glyph1-6" x="222" y="290"/>
+  <use xlink:href="#glyph1-14" x="230" y="290"/>
+  <use xlink:href="#glyph1-27" x="234" y="290"/>
+  <use xlink:href="#glyph1-28" x="241" y="290"/>
+  <use xlink:href="#glyph1-6" x="246" y="290"/>
+  <use xlink:href="#glyph1-14" x="254" y="290"/>
+  <use xlink:href="#glyph1-27" x="258" y="290"/>
+  <use xlink:href="#glyph1-28" x="265" y="290"/>
+  <use xlink:href="#glyph1-28" x="270" y="290"/>
+  <use xlink:href="#glyph1-25" x="275" y="290"/>
+  <use xlink:href="#glyph1-35" x="278" y="290"/>
+  <use xlink:href="#glyph1-6" x="285" y="290"/>
+  <use xlink:href="#glyph1-8" x="293" y="290"/>
+  <use xlink:href="#glyph1-14" x="301" y="290"/>
+  <use xlink:href="#glyph1-3" x="305" y="290"/>
+  <use xlink:href="#glyph1-27" x="316" y="290"/>
+  <use xlink:href="#glyph1-20" x="323" y="290"/>
+  <use xlink:href="#glyph1-14" x="330" y="290"/>
+  <use xlink:href="#glyph1-42" x="334" y="290"/>
+  <use xlink:href="#glyph1-25" x="346" y="290"/>
+  <use xlink:href="#glyph1-21" x="349" y="290"/>
+  <use xlink:href="#glyph1-38" x="355" y="290"/>
+  <use xlink:href="#glyph1-14" x="363" y="290"/>
+  <use xlink:href="#glyph1-4" x="367" y="290"/>
+  <use xlink:href="#glyph1-28" x="375" y="290"/>
+  <use xlink:href="#glyph1-2" x="380" y="290"/>
+  <use xlink:href="#glyph1-4" x="389" y="290"/>
+  <use xlink:href="#glyph1-28" x="397" y="290"/>
+  <use xlink:href="#glyph1-25" x="402" y="290"/>
+  <use xlink:href="#glyph1-6" x="405" y="290"/>
+  <use xlink:href="#glyph1-21" x="413" y="290"/>
+  <use xlink:href="#glyph1-20" x="419" y="290"/>
+  <use xlink:href="#glyph1-14" x="426" y="290"/>
+  <use xlink:href="#glyph1-19" x="430" y="290"/>
+  <use xlink:href="#glyph1-6" x="438" y="290"/>
+  <use xlink:href="#glyph1-14" x="446" y="290"/>
+  <use xlink:href="#glyph1-28" x="450" y="290"/>
+  <use xlink:href="#glyph1-6" x="455" y="290"/>
+  <use xlink:href="#glyph1-40" x="463" y="290"/>
+  <use xlink:href="#glyph1-27" x="471" y="290"/>
+  <use xlink:href="#glyph1-28" x="478" y="290"/>
+  <use xlink:href="#glyph1-8" x="483" y="290"/>
+  <use xlink:href="#glyph1-6" x="491" y="290"/>
+  <use xlink:href="#glyph1-8" x="499" y="290"/>
+  <use xlink:href="#glyph1-14" x="507" y="290"/>
+  <use xlink:href="#glyph1-27" x="511" y="290"/>
+  <use xlink:href="#glyph1-5" x="518" y="290"/>
+  <use xlink:href="#glyph1-14" x="525" y="290"/>
+  <use xlink:href="#glyph1-21" x="529" y="290"/>
+  <use xlink:href="#glyph1-38" x="535" y="290"/>
+  <use xlink:href="#glyph1-6" x="543" y="290"/>
+  <use xlink:href="#glyph1-14" x="551" y="290"/>
+  <use xlink:href="#glyph1-6" x="555" y="290"/>
+  <use xlink:href="#glyph1-28" x="563" y="290"/>
+  <use xlink:href="#glyph1-27" x="568" y="290"/>
+  <use xlink:href="#glyph1-14" x="575" y="290"/>
+  <use xlink:href="#glyph1-25" x="579" y="290"/>
+  <use xlink:href="#glyph1-23" x="582" y="290"/>
+  <use xlink:href="#glyph1-14" x="590" y="290"/>
+  <use xlink:href="#glyph1-42" x="594" y="290"/>
+  <use xlink:href="#glyph1-38" x="606" y="290"/>
+  <use xlink:href="#glyph1-25" x="614" y="290"/>
+  <use xlink:href="#glyph1-26" x="617" y="290"/>
+  <use xlink:href="#glyph1-38" x="624" y="290"/>
+  <use xlink:href="#glyph1-14" x="632" y="290"/>
+  <use xlink:href="#glyph1-21" x="636" y="290"/>
+  <use xlink:href="#glyph1-38" x="642" y="290"/>
+  <use xlink:href="#glyph1-27" x="650" y="290"/>
+  <use xlink:href="#glyph1-21" x="657" y="290"/>
+  <use xlink:href="#glyph1-14" x="663" y="290"/>
+  <use xlink:href="#glyph1-8" x="667" y="290"/>
+  <use xlink:href="#glyph1-6" x="675" y="290"/>
+  <use xlink:href="#glyph1-26" x="683" y="290"/>
+  <use xlink:href="#glyph1-25" x="690" y="290"/>
+  <use xlink:href="#glyph1-5" x="693" y="290"/>
+  <use xlink:href="#glyph1-25" x="700" y="290"/>
+  <use xlink:href="#glyph1-2" x="703" y="290"/>
+  <use xlink:href="#glyph1-23" x="712" y="290"/>
+  <use xlink:href="#glyph1-14" x="720" y="290"/>
+  <use xlink:href="#glyph1-25" x="724" y="290"/>
+  <use xlink:href="#glyph1-5" x="727" y="290"/>
+  <use xlink:href="#glyph1-14" x="734" y="290"/>
+  <use xlink:href="#glyph1-21" x="738" y="290"/>
+  <use xlink:href="#glyph1-2" x="744" y="290"/>
+  <use xlink:href="#glyph1-14" x="753" y="290"/>
+  <use xlink:href="#glyph1-19" x="757" y="290"/>
+  <use xlink:href="#glyph1-6" x="765" y="290"/>
+  <use xlink:href="#glyph1-14" x="773" y="290"/>
+  <use xlink:href="#glyph1-3" x="777" y="290"/>
+  <use xlink:href="#glyph1-27" x="788" y="290"/>
+  <use xlink:href="#glyph1-8" x="795" y="290"/>
+  <use xlink:href="#glyph1-6" x="803" y="290"/>
+  <use xlink:href="#glyph1-47" x="811" y="290"/>
+  <use xlink:href="#glyph1-14" x="814" y="290"/>
+  <use xlink:href="#glyph1-27" x="818" y="290"/>
+  <use xlink:href="#glyph1-23" x="825" y="290"/>
+  <use xlink:href="#glyph1-8" x="833" y="290"/>
+  <use xlink:href="#glyph1-14" x="841" y="290"/>
+  <use xlink:href="#glyph1-27" x="845" y="290"/>
+  <use xlink:href="#glyph1-14" x="852" y="290"/>
+  <use xlink:href="#glyph1-42" x="856" y="290"/>
+  <use xlink:href="#glyph1-28" x="868" y="290"/>
+  <use xlink:href="#glyph1-2" x="873" y="290"/>
+  <use xlink:href="#glyph1-23" x="882" y="290"/>
+  <use xlink:href="#glyph1-40" x="890" y="290"/>
+  <use xlink:href="#glyph1-14" x="898" y="290"/>
+  <use xlink:href="#glyph1-6" x="902" y="290"/>
+  <use xlink:href="#glyph1-36" x="910" y="290"/>
+  <use xlink:href="#glyph1-6" x="914" y="290"/>
+  <use xlink:href="#glyph1-26" x="922" y="290"/>
+  <use xlink:href="#glyph1-21" x="929" y="290"/>
+  <use xlink:href="#glyph1-25" x="935" y="290"/>
+  <use xlink:href="#glyph1-2" x="938" y="290"/>
+  <use xlink:href="#glyph1-23" x="947" y="290"/>
+  <use xlink:href="#glyph1-14" x="955" y="290"/>
+  <use xlink:href="#glyph1-2" x="959" y="290"/>
+  <use xlink:href="#glyph1-15" x="968" y="290"/>
+  <use xlink:href="#glyph1-14" x="974" y="290"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="151" y="311"/>
+  <use xlink:href="#glyph1-38" x="157" y="311"/>
+  <use xlink:href="#glyph1-6" x="165" y="311"/>
+  <use xlink:href="#glyph1-14" x="173" y="311"/>
+  <use xlink:href="#glyph1-4" x="177" y="311"/>
+  <use xlink:href="#glyph1-27" x="185" y="311"/>
+  <use xlink:href="#glyph1-28" x="192" y="311"/>
+  <use xlink:href="#glyph1-21" x="197" y="311"/>
+  <use xlink:href="#glyph1-14" x="203" y="311"/>
+  <use xlink:href="#glyph1-42" x="207" y="311"/>
+  <use xlink:href="#glyph1-6" x="219" y="311"/>
+  <use xlink:href="#glyph1-14" x="227" y="311"/>
+  <use xlink:href="#glyph1-5" x="231" y="311"/>
+  <use xlink:href="#glyph1-38" x="238" y="311"/>
+  <use xlink:href="#glyph1-27" x="246" y="311"/>
+  <use xlink:href="#glyph1-36" x="253" y="311"/>
+  <use xlink:href="#glyph1-36" x="257" y="311"/>
+  <use xlink:href="#glyph1-14" x="261" y="311"/>
+  <use xlink:href="#glyph1-27" x="265" y="311"/>
+  <use xlink:href="#glyph1-26" x="272" y="311"/>
+  <use xlink:href="#glyph1-21" x="279" y="311"/>
+  <use xlink:href="#glyph1-14" x="285" y="311"/>
+  <use xlink:href="#glyph1-3" x="289" y="311"/>
+  <use xlink:href="#glyph1-27" x="300" y="311"/>
+  <use xlink:href="#glyph1-20" x="307" y="311"/>
+  <use xlink:href="#glyph1-41" x="314" y="311"/>
+  <use xlink:href="#glyph1-14" x="318" y="311"/>
+  <use xlink:href="#glyph1-25" x="322" y="311"/>
+  <use xlink:href="#glyph1-23" x="325" y="311"/>
+  <use xlink:href="#glyph1-14" x="333" y="311"/>
+  <use xlink:href="#glyph1-21" x="337" y="311"/>
+  <use xlink:href="#glyph1-38" x="343" y="311"/>
+  <use xlink:href="#glyph1-25" x="351" y="311"/>
+  <use xlink:href="#glyph1-5" x="354" y="311"/>
+  <use xlink:href="#glyph1-14" x="361" y="311"/>
+  <use xlink:href="#glyph1-35" x="365" y="311"/>
+  <use xlink:href="#glyph1-25" x="372" y="311"/>
+  <use xlink:href="#glyph1-6" x="375" y="311"/>
+  <use xlink:href="#glyph1-42" x="383" y="311"/>
+  <use xlink:href="#glyph1-41" x="395" y="311"/>
+  <use xlink:href="#glyph1-14" x="399" y="311"/>
+  <use xlink:href="#glyph1-8" x="403" y="311"/>
+  <use xlink:href="#glyph1-6" x="411" y="311"/>
+  <use xlink:href="#glyph1-5" x="419" y="311"/>
+  <use xlink:href="#glyph1-6" x="426" y="311"/>
+  <use xlink:href="#glyph1-28" x="434" y="311"/>
+  <use xlink:href="#glyph1-35" x="439" y="311"/>
+  <use xlink:href="#glyph1-6" x="446" y="311"/>
+  <use xlink:href="#glyph1-14" x="454" y="311"/>
+  <use xlink:href="#glyph1-21" x="458" y="311"/>
+  <use xlink:href="#glyph1-2" x="464" y="311"/>
+  <use xlink:href="#glyph1-14" x="473" y="311"/>
+  <use xlink:href="#glyph1-19" x="477" y="311"/>
+  <use xlink:href="#glyph1-6" x="485" y="311"/>
+  <use xlink:href="#glyph1-14" x="493" y="311"/>
+  <use xlink:href="#glyph1-26" x="497" y="311"/>
+  <use xlink:href="#glyph1-2" x="504" y="311"/>
+  <use xlink:href="#glyph1-23" x="513" y="311"/>
+  <use xlink:href="#glyph1-5" x="521" y="311"/>
+  <use xlink:href="#glyph1-25" x="528" y="311"/>
+  <use xlink:href="#glyph1-8" x="531" y="311"/>
+  <use xlink:href="#glyph1-6" x="539" y="311"/>
+  <use xlink:href="#glyph1-28" x="547" y="311"/>
+  <use xlink:href="#glyph1-6" x="552" y="311"/>
+  <use xlink:href="#glyph1-8" x="560" y="311"/>
+  <use xlink:href="#glyph1-14" x="568" y="311"/>
+  <use xlink:href="#glyph1-27" x="572" y="311"/>
+  <use xlink:href="#glyph1-5" x="579" y="311"/>
+  <use xlink:href="#glyph1-14" x="586" y="311"/>
+  <use xlink:href="#glyph1-21" x="590" y="311"/>
+  <use xlink:href="#glyph1-38" x="596" y="311"/>
+  <use xlink:href="#glyph1-6" x="604" y="311"/>
+  <use xlink:href="#glyph1-14" x="612" y="311"/>
+  <use xlink:href="#glyph1-40" x="616" y="311"/>
+  <use xlink:href="#glyph1-6" x="624" y="311"/>
+  <use xlink:href="#glyph1-23" x="632" y="311"/>
+  <use xlink:href="#glyph1-6" x="640" y="311"/>
+  <use xlink:href="#glyph1-28" x="648" y="311"/>
+  <use xlink:href="#glyph1-27" x="653" y="311"/>
+  <use xlink:href="#glyph1-36" x="660" y="311"/>
+  <use xlink:href="#glyph1-14" x="664" y="311"/>
+  <use xlink:href="#glyph1-3" x="668" y="311"/>
+  <use xlink:href="#glyph1-25" x="679" y="311"/>
+  <use xlink:href="#glyph1-5" x="682" y="311"/>
+  <use xlink:href="#glyph1-15" x="689" y="311"/>
+  <use xlink:href="#glyph1-2" x="695" y="311"/>
+  <use xlink:href="#glyph1-28" x="704" y="311"/>
+  <use xlink:href="#glyph1-21" x="709" y="311"/>
+  <use xlink:href="#glyph1-33" x="715" y="311"/>
+  <use xlink:href="#glyph1-23" x="723" y="311"/>
+  <use xlink:href="#glyph1-6" x="731" y="311"/>
+  <use xlink:href="#glyph1-14" x="739" y="311"/>
+  <use xlink:href="#glyph1-2" x="743" y="311"/>
+  <use xlink:href="#glyph1-15" x="752" y="311"/>
+  <use xlink:href="#glyph1-14" x="758" y="311"/>
+  <use xlink:href="#glyph1-3" x="762" y="311"/>
+  <use xlink:href="#glyph1-27" x="773" y="311"/>
+  <use xlink:href="#glyph1-23" x="780" y="311"/>
+  <use xlink:href="#glyph1-46" x="788" y="311"/>
+  <use xlink:href="#glyph1-25" x="795" y="311"/>
+  <use xlink:href="#glyph1-23" x="798" y="311"/>
+  <use xlink:href="#glyph1-8" x="806" y="311"/>
+  <use xlink:href="#glyph1-44" x="814" y="311"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-30" x="151" y="353"/>
+  <use xlink:href="#glyph1-38" x="161" y="353"/>
+  <use xlink:href="#glyph1-25" x="169" y="353"/>
+  <use xlink:href="#glyph1-5" x="172" y="353"/>
+  <use xlink:href="#glyph1-14" x="179" y="353"/>
+  <use xlink:href="#glyph1-25" x="183" y="353"/>
+  <use xlink:href="#glyph1-8" x="186" y="353"/>
+  <use xlink:href="#glyph1-6" x="194" y="353"/>
+  <use xlink:href="#glyph1-27" x="202" y="353"/>
+  <use xlink:href="#glyph1-14" x="209" y="353"/>
+  <use xlink:href="#glyph1-42" x="213" y="353"/>
+  <use xlink:href="#glyph1-25" x="225" y="353"/>
+  <use xlink:href="#glyph1-36" x="228" y="353"/>
+  <use xlink:href="#glyph1-36" x="232" y="353"/>
+  <use xlink:href="#glyph1-14" x="236" y="353"/>
+  <use xlink:href="#glyph1-27" x="240" y="353"/>
+  <use xlink:href="#glyph1-8" x="247" y="353"/>
+  <use xlink:href="#glyph1-8" x="255" y="353"/>
+  <use xlink:href="#glyph1-14" x="263" y="353"/>
+  <use xlink:href="#glyph1-21" x="267" y="353"/>
+  <use xlink:href="#glyph1-38" x="273" y="353"/>
+  <use xlink:href="#glyph1-6" x="281" y="353"/>
+  <use xlink:href="#glyph1-14" x="289" y="353"/>
+  <use xlink:href="#glyph1-25" x="293" y="353"/>
+  <use xlink:href="#glyph1-23" x="296" y="353"/>
+  <use xlink:href="#glyph1-8" x="304" y="353"/>
+  <use xlink:href="#glyph1-33" x="312" y="353"/>
+  <use xlink:href="#glyph1-26" x="320" y="353"/>
+  <use xlink:href="#glyph1-6" x="327" y="353"/>
+  <use xlink:href="#glyph1-3" x="335" y="353"/>
+  <use xlink:href="#glyph1-6" x="346" y="353"/>
+  <use xlink:href="#glyph1-23" x="354" y="353"/>
+  <use xlink:href="#glyph1-21" x="362" y="353"/>
+  <use xlink:href="#glyph1-5" x="368" y="353"/>
+  <use xlink:href="#glyph1-14" x="375" y="353"/>
+  <use xlink:href="#glyph1-2" x="379" y="353"/>
+  <use xlink:href="#glyph1-15" x="388" y="353"/>
+  <use xlink:href="#glyph1-14" x="394" y="353"/>
+  <use xlink:href="#glyph1-4" x="398" y="353"/>
+  <use xlink:href="#glyph1-38" x="406" y="353"/>
+  <use xlink:href="#glyph1-25" x="414" y="353"/>
+  <use xlink:href="#glyph1-36" x="417" y="353"/>
+  <use xlink:href="#glyph1-27" x="421" y="353"/>
+  <use xlink:href="#glyph1-23" x="428" y="353"/>
+  <use xlink:href="#glyph1-21" x="436" y="353"/>
+  <use xlink:href="#glyph1-38" x="442" y="353"/>
+  <use xlink:href="#glyph1-28" x="450" y="353"/>
+  <use xlink:href="#glyph1-2" x="455" y="353"/>
+  <use xlink:href="#glyph1-4" x="464" y="353"/>
+  <use xlink:href="#glyph1-20" x="472" y="353"/>
+  <use xlink:href="#glyph1-14" x="479" y="353"/>
+  <use xlink:href="#glyph1-21" x="483" y="353"/>
+  <use xlink:href="#glyph1-2" x="489" y="353"/>
+  <use xlink:href="#glyph1-14" x="498" y="353"/>
+  <use xlink:href="#glyph1-21" x="502" y="353"/>
+  <use xlink:href="#glyph1-38" x="508" y="353"/>
+  <use xlink:href="#glyph1-2" x="516" y="353"/>
+  <use xlink:href="#glyph1-5" x="525" y="353"/>
+  <use xlink:href="#glyph1-6" x="532" y="353"/>
+  <use xlink:href="#glyph1-14" x="540" y="353"/>
+  <use xlink:href="#glyph1-2" x="544" y="353"/>
+  <use xlink:href="#glyph1-15" x="553" y="353"/>
+  <use xlink:href="#glyph1-14" x="559" y="353"/>
+  <use xlink:href="#glyph1-4" x="563" y="353"/>
+  <use xlink:href="#glyph1-27" x="571" y="353"/>
+  <use xlink:href="#glyph1-21" x="578" y="353"/>
+  <use xlink:href="#glyph1-28" x="584" y="353"/>
+  <use xlink:href="#glyph1-25" x="589" y="353"/>
+  <use xlink:href="#glyph1-2" x="592" y="353"/>
+  <use xlink:href="#glyph1-21" x="601" y="353"/>
+  <use xlink:href="#glyph1-25" x="607" y="353"/>
+  <use xlink:href="#glyph1-5" x="610" y="353"/>
+  <use xlink:href="#glyph1-3" x="617" y="353"/>
+  <use xlink:href="#glyph1-41" x="628" y="353"/>
+  <use xlink:href="#glyph1-14" x="632" y="353"/>
+  <use xlink:href="#glyph1-21" x="636" y="353"/>
+  <use xlink:href="#glyph1-2" x="642" y="353"/>
+  <use xlink:href="#glyph1-14" x="651" y="353"/>
+  <use xlink:href="#glyph1-38" x="655" y="353"/>
+  <use xlink:href="#glyph1-6" x="663" y="353"/>
+  <use xlink:href="#glyph1-25" x="671" y="353"/>
+  <use xlink:href="#glyph1-40" x="674" y="353"/>
+  <use xlink:href="#glyph1-38" x="682" y="353"/>
+  <use xlink:href="#glyph1-21" x="690" y="353"/>
+  <use xlink:href="#glyph1-6" x="696" y="353"/>
+  <use xlink:href="#glyph1-23" x="704" y="353"/>
+  <use xlink:href="#glyph1-14" x="712" y="353"/>
+  <use xlink:href="#glyph1-21" x="716" y="353"/>
+  <use xlink:href="#glyph1-38" x="722" y="353"/>
+  <use xlink:href="#glyph1-6" x="730" y="353"/>
+  <use xlink:href="#glyph1-14" x="738" y="353"/>
+  <use xlink:href="#glyph1-5" x="742" y="353"/>
+  <use xlink:href="#glyph1-2" x="749" y="353"/>
+  <use xlink:href="#glyph1-36" x="758" y="353"/>
+  <use xlink:href="#glyph1-25" x="762" y="353"/>
+  <use xlink:href="#glyph1-26" x="765" y="353"/>
+  <use xlink:href="#glyph1-25" x="772" y="353"/>
+  <use xlink:href="#glyph1-21" x="775" y="353"/>
+  <use xlink:href="#glyph1-33" x="781" y="353"/>
+  <use xlink:href="#glyph1-8" x="789" y="353"/>
+  <use xlink:href="#glyph1-6" x="797" y="353"/>
+  <use xlink:href="#glyph1-14" x="805" y="353"/>
+  <use xlink:href="#glyph1-42" x="809" y="353"/>
+  <use xlink:href="#glyph1-38" x="821" y="353"/>
+  <use xlink:href="#glyph1-25" x="829" y="353"/>
+  <use xlink:href="#glyph1-26" x="832" y="353"/>
+  <use xlink:href="#glyph1-38" x="839" y="353"/>
+  <use xlink:href="#glyph1-14" x="847" y="353"/>
+  <use xlink:href="#glyph1-27" x="851" y="353"/>
+  <use xlink:href="#glyph1-36" x="858" y="353"/>
+  <use xlink:href="#glyph1-36" x="862" y="353"/>
+  <use xlink:href="#glyph1-14" x="866" y="353"/>
+  <use xlink:href="#glyph1-26" x="870" y="353"/>
+  <use xlink:href="#glyph1-2" x="877" y="353"/>
+  <use xlink:href="#glyph1-23" x="886" y="353"/>
+  <use xlink:href="#glyph1-5" x="894" y="353"/>
+  <use xlink:href="#glyph1-25" x="901" y="353"/>
+  <use xlink:href="#glyph1-8" x="904" y="353"/>
+  <use xlink:href="#glyph1-6" x="912" y="353"/>
+  <use xlink:href="#glyph1-28" x="920" y="353"/>
+  <use xlink:href="#glyph1-27" x="925" y="353"/>
+  <use xlink:href="#glyph1-21" x="932" y="353"/>
+  <use xlink:href="#glyph1-6" x="938" y="353"/>
+  <use xlink:href="#glyph1-14" x="946" y="353"/>
+  <use xlink:href="#glyph1-27" x="950" y="353"/>
+  <use xlink:href="#glyph1-23" x="957" y="353"/>
+  <use xlink:href="#glyph1-8" x="965" y="353"/>
+  <use xlink:href="#glyph1-14" x="973" y="353"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-40" x="151" y="374"/>
+  <use xlink:href="#glyph1-2" x="159" y="374"/>
+  <use xlink:href="#glyph1-2" x="168" y="374"/>
+  <use xlink:href="#glyph1-8" x="177" y="374"/>
+  <use xlink:href="#glyph1-14" x="185" y="374"/>
+  <use xlink:href="#glyph1-3" x="189" y="374"/>
+  <use xlink:href="#glyph1-6" x="200" y="374"/>
+  <use xlink:href="#glyph1-23" x="208" y="374"/>
+  <use xlink:href="#glyph1-14" x="216" y="374"/>
+  <use xlink:href="#glyph1-3" x="220" y="374"/>
+  <use xlink:href="#glyph1-33" x="231" y="374"/>
+  <use xlink:href="#glyph1-5" x="239" y="374"/>
+  <use xlink:href="#glyph1-21" x="246" y="374"/>
+  <use xlink:href="#glyph1-14" x="252" y="374"/>
+  <use xlink:href="#glyph1-15" x="256" y="374"/>
+  <use xlink:href="#glyph1-6" x="262" y="374"/>
+  <use xlink:href="#glyph1-6" x="270" y="374"/>
+  <use xlink:href="#glyph1-36" x="278" y="374"/>
+  <use xlink:href="#glyph1-14" x="282" y="374"/>
+  <use xlink:href="#glyph1-15" x="286" y="374"/>
+  <use xlink:href="#glyph1-2" x="292" y="374"/>
+  <use xlink:href="#glyph1-28" x="301" y="374"/>
+  <use xlink:href="#glyph1-14" x="306" y="374"/>
+  <use xlink:href="#glyph1-21" x="310" y="374"/>
+  <use xlink:href="#glyph1-38" x="316" y="374"/>
+  <use xlink:href="#glyph1-6" x="324" y="374"/>
+  <use xlink:href="#glyph1-14" x="332" y="374"/>
+  <use xlink:href="#glyph1-6" x="336" y="374"/>
+  <use xlink:href="#glyph1-35" x="344" y="374"/>
+  <use xlink:href="#glyph1-6" x="351" y="374"/>
+  <use xlink:href="#glyph1-23" x="359" y="374"/>
+  <use xlink:href="#glyph1-21" x="367" y="374"/>
+  <use xlink:href="#glyph1-44" x="373" y="374"/>
+  <use xlink:href="#glyph1-14" x="376" y="374"/>
+  <use xlink:href="#glyph1-52" x="380" y="374"/>
+  <use xlink:href="#glyph1-27" x="390" y="374"/>
+  <use xlink:href="#glyph1-4" x="397" y="374"/>
+  <use xlink:href="#glyph1-4" x="405" y="374"/>
+  <use xlink:href="#glyph1-20" x="413" y="374"/>
+  <use xlink:href="#glyph1-14" x="420" y="374"/>
+  <use xlink:href="#glyph1-42" x="424" y="374"/>
+  <use xlink:href="#glyph1-25" x="436" y="374"/>
+  <use xlink:href="#glyph1-36" x="439" y="374"/>
+  <use xlink:href="#glyph1-36" x="443" y="374"/>
+  <use xlink:href="#glyph1-14" x="447" y="374"/>
+  <use xlink:href="#glyph1-25" x="451" y="374"/>
+  <use xlink:href="#glyph1-21" x="454" y="374"/>
+  <use xlink:href="#glyph1-14" x="460" y="374"/>
+  <use xlink:href="#glyph1-19" x="464" y="374"/>
+  <use xlink:href="#glyph1-6" x="472" y="374"/>
+  <use xlink:href="#glyph1-14" x="480" y="374"/>
+  <use xlink:href="#glyph1-25" x="484" y="374"/>
+  <use xlink:href="#glyph1-15" x="487" y="374"/>
+  <use xlink:href="#glyph1-14" x="493" y="374"/>
+  <use xlink:href="#glyph1-2" x="497" y="374"/>
+  <use xlink:href="#glyph1-33" x="506" y="374"/>
+  <use xlink:href="#glyph1-28" x="514" y="374"/>
+  <use xlink:href="#glyph1-14" x="519" y="374"/>
+  <use xlink:href="#glyph1-26" x="523" y="374"/>
+  <use xlink:href="#glyph1-38" x="530" y="374"/>
+  <use xlink:href="#glyph1-2" x="538" y="374"/>
+  <use xlink:href="#glyph1-25" x="547" y="374"/>
+  <use xlink:href="#glyph1-26" x="550" y="374"/>
+  <use xlink:href="#glyph1-6" x="557" y="374"/>
+  <use xlink:href="#glyph1-14" x="565" y="374"/>
+  <use xlink:href="#glyph1-5" x="569" y="374"/>
+  <use xlink:href="#glyph1-38" x="576" y="374"/>
+  <use xlink:href="#glyph1-2" x="584" y="374"/>
+  <use xlink:href="#glyph1-33" x="593" y="374"/>
+  <use xlink:href="#glyph1-36" x="601" y="374"/>
+  <use xlink:href="#glyph1-8" x="605" y="374"/>
+  <use xlink:href="#glyph1-14" x="613" y="374"/>
+  <use xlink:href="#glyph1-19" x="617" y="374"/>
+  <use xlink:href="#glyph1-6" x="625" y="374"/>
+  <use xlink:href="#glyph1-14" x="633" y="374"/>
+  <use xlink:href="#glyph1-8" x="637" y="374"/>
+  <use xlink:href="#glyph1-25" x="645" y="374"/>
+  <use xlink:href="#glyph1-28" x="648" y="374"/>
+  <use xlink:href="#glyph1-6" x="653" y="374"/>
+  <use xlink:href="#glyph1-26" x="661" y="374"/>
+  <use xlink:href="#glyph1-21" x="668" y="374"/>
+  <use xlink:href="#glyph1-6" x="674" y="374"/>
+  <use xlink:href="#glyph1-8" x="682" y="374"/>
+  <use xlink:href="#glyph1-14" x="690" y="374"/>
+  <use xlink:href="#glyph1-19" x="694" y="374"/>
+  <use xlink:href="#glyph1-20" x="702" y="374"/>
+  <use xlink:href="#glyph1-14" x="709" y="374"/>
+  <use xlink:href="#glyph1-27" x="713" y="374"/>
+  <use xlink:href="#glyph1-14" x="720" y="374"/>
+  <use xlink:href="#glyph1-45" x="724" y="374"/>
+  <use xlink:href="#glyph1-33" x="727" y="374"/>
+  <use xlink:href="#glyph1-8" x="735" y="374"/>
+  <use xlink:href="#glyph1-25" x="743" y="374"/>
+  <use xlink:href="#glyph1-26" x="746" y="374"/>
+  <use xlink:href="#glyph1-25" x="753" y="374"/>
+  <use xlink:href="#glyph1-2" x="756" y="374"/>
+  <use xlink:href="#glyph1-33" x="765" y="374"/>
+  <use xlink:href="#glyph1-5" x="773" y="374"/>
+  <use xlink:href="#glyph1-14" x="780" y="374"/>
+  <use xlink:href="#glyph1-6" x="784" y="374"/>
+  <use xlink:href="#glyph1-5" x="792" y="374"/>
+  <use xlink:href="#glyph1-21" x="799" y="374"/>
+  <use xlink:href="#glyph1-25" x="805" y="374"/>
+  <use xlink:href="#glyph1-3" x="808" y="374"/>
+  <use xlink:href="#glyph1-27" x="819" y="374"/>
+  <use xlink:href="#glyph1-21" x="826" y="374"/>
+  <use xlink:href="#glyph1-6" x="832" y="374"/>
+  <use xlink:href="#glyph1-14" x="840" y="374"/>
+  <use xlink:href="#glyph1-2" x="844" y="374"/>
+  <use xlink:href="#glyph1-15" x="853" y="374"/>
+  <use xlink:href="#glyph1-14" x="859" y="374"/>
+  <use xlink:href="#glyph1-2" x="863" y="374"/>
+  <use xlink:href="#glyph1-33" x="872" y="374"/>
+  <use xlink:href="#glyph1-28" x="880" y="374"/>
+  <use xlink:href="#glyph1-14" x="885" y="374"/>
+  <use xlink:href="#glyph1-21" x="889" y="374"/>
+  <use xlink:href="#glyph1-28" x="895" y="374"/>
+  <use xlink:href="#glyph1-33" x="900" y="374"/>
+  <use xlink:href="#glyph1-6" x="908" y="374"/>
+  <use xlink:href="#glyph1-14" x="916" y="374"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-25" x="151" y="395"/>
+  <use xlink:href="#glyph1-23" x="154" y="395"/>
+  <use xlink:href="#glyph1-21" x="162" y="395"/>
+  <use xlink:href="#glyph1-6" x="168" y="395"/>
+  <use xlink:href="#glyph1-28" x="176" y="395"/>
+  <use xlink:href="#glyph1-6" x="181" y="395"/>
+  <use xlink:href="#glyph1-5" x="189" y="395"/>
+  <use xlink:href="#glyph1-21" x="196" y="395"/>
+  <use xlink:href="#glyph1-5" x="202" y="395"/>
+  <use xlink:href="#glyph1-41" x="209" y="395"/>
+  <use xlink:href="#glyph1-14" x="213" y="395"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-33" x="217" y="395"/>
+  <use xlink:href="#glyph1-23" x="225" y="395"/>
+  <use xlink:href="#glyph1-4" x="233" y="395"/>
+  <use xlink:href="#glyph1-6" x="241" y="395"/>
+  <use xlink:href="#glyph1-28" x="249" y="395"/>
+  <use xlink:href="#glyph1-4" x="254" y="395"/>
+  <use xlink:href="#glyph1-36" x="262" y="395"/>
+  <use xlink:href="#glyph1-6" x="266" y="395"/>
+  <use xlink:href="#glyph1-37" x="274" y="395"/>
+  <use xlink:href="#glyph1-6" x="282" y="395"/>
+  <use xlink:href="#glyph1-8" x="290" y="395"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80%,0%,0%);fill-opacity:1;" d="M 216.398438 397.601562 L 218.800781 400 L 220.601562 398.199219 L 222.398438 400 L 224.199219 398.199219 L 226 400 L 227.800781 398.199219 L 229.601562 400 L 231.398438 398.199219 L 233.199219 400 L 235 398.199219 L 236.800781 400 L 238.601562 398.199219 L 240.398438 400 L 242.199219 398.199219 L 244 400 L 245.800781 398.199219 L 247.601562 400 L 249.398438 398.199219 L 251.199219 400 L 253 398.199219 L  [...]
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="298" y="395"/>
+  <use xlink:href="#glyph1-27" x="302" y="395"/>
+  <use xlink:href="#glyph1-23" x="309" y="395"/>
+  <use xlink:href="#glyph1-8" x="317" y="395"/>
+  <use xlink:href="#glyph1-14" x="325" y="395"/>
+  <use xlink:href="#glyph1-33" x="329" y="395"/>
+  <use xlink:href="#glyph1-23" x="337" y="395"/>
+  <use xlink:href="#glyph1-19" x="345" y="395"/>
+  <use xlink:href="#glyph1-25" x="353" y="395"/>
+  <use xlink:href="#glyph1-27" x="356" y="395"/>
+  <use xlink:href="#glyph1-5" x="363" y="395"/>
+  <use xlink:href="#glyph1-6" x="370" y="395"/>
+  <use xlink:href="#glyph1-8" x="378" y="395"/>
+  <use xlink:href="#glyph1-14" x="386" y="395"/>
+  <use xlink:href="#glyph1-19" x="390" y="395"/>
+  <use xlink:href="#glyph1-20" x="398" y="395"/>
+  <use xlink:href="#glyph1-14" x="405" y="395"/>
+  <use xlink:href="#glyph1-26" x="409" y="395"/>
+  <use xlink:href="#glyph1-2" x="416" y="395"/>
+  <use xlink:href="#glyph1-23" x="425" y="395"/>
+  <use xlink:href="#glyph1-5" x="433" y="395"/>
+  <use xlink:href="#glyph1-25" x="440" y="395"/>
+  <use xlink:href="#glyph1-8" x="443" y="395"/>
+  <use xlink:href="#glyph1-6" x="451" y="395"/>
+  <use xlink:href="#glyph1-28" x="459" y="395"/>
+  <use xlink:href="#glyph1-27" x="464" y="395"/>
+  <use xlink:href="#glyph1-21" x="471" y="395"/>
+  <use xlink:href="#glyph1-25" x="477" y="395"/>
+  <use xlink:href="#glyph1-2" x="480" y="395"/>
+  <use xlink:href="#glyph1-23" x="489" y="395"/>
+  <use xlink:href="#glyph1-5" x="497" y="395"/>
+  <use xlink:href="#glyph1-14" x="504" y="395"/>
+  <use xlink:href="#glyph1-23" x="508" y="395"/>
+  <use xlink:href="#glyph1-2" x="516" y="395"/>
+  <use xlink:href="#glyph1-21" x="525" y="395"/>
+  <use xlink:href="#glyph1-14" x="531" y="395"/>
+  <use xlink:href="#glyph1-26" x="535" y="395"/>
+  <use xlink:href="#glyph1-2" x="542" y="395"/>
+  <use xlink:href="#glyph1-23" x="551" y="395"/>
+  <use xlink:href="#glyph1-23" x="559" y="395"/>
+  <use xlink:href="#glyph1-6" x="567" y="395"/>
+  <use xlink:href="#glyph1-26" x="575" y="395"/>
+  <use xlink:href="#glyph1-21" x="582" y="395"/>
+  <use xlink:href="#glyph1-6" x="588" y="395"/>
+  <use xlink:href="#glyph1-8" x="596" y="395"/>
+  <use xlink:href="#glyph1-14" x="604" y="395"/>
+  <use xlink:href="#glyph1-42" x="608" y="395"/>
+  <use xlink:href="#glyph1-25" x="620" y="395"/>
+  <use xlink:href="#glyph1-21" x="623" y="395"/>
+  <use xlink:href="#glyph1-38" x="629" y="395"/>
+  <use xlink:href="#glyph1-14" x="637" y="395"/>
+  <use xlink:href="#glyph1-21" x="641" y="395"/>
+  <use xlink:href="#glyph1-38" x="647" y="395"/>
+  <use xlink:href="#glyph1-6" x="655" y="395"/>
+  <use xlink:href="#glyph1-14" x="663" y="395"/>
+  <use xlink:href="#glyph1-4" x="667" y="395"/>
+  <use xlink:href="#glyph1-33" x="675" y="395"/>
+  <use xlink:href="#glyph1-19" x="683" y="395"/>
+  <use xlink:href="#glyph1-36" x="691" y="395"/>
+  <use xlink:href="#glyph1-25" x="695" y="395"/>
+  <use xlink:href="#glyph1-26" x="698" y="395"/>
+  <use xlink:href="#glyph1-14" x="705" y="395"/>
+  <use xlink:href="#glyph1-40" x="709" y="395"/>
+  <use xlink:href="#glyph1-2" x="717" y="395"/>
+  <use xlink:href="#glyph1-2" x="726" y="395"/>
+  <use xlink:href="#glyph1-8" x="735" y="395"/>
+  <use xlink:href="#glyph1-44" x="743" y="395"/>
+  <use xlink:href="#glyph1-14" x="746" y="395"/>
+  <use xlink:href="#glyph1-53" x="750" y="395"/>
+  <use xlink:href="#glyph1-33" x="759" y="395"/>
+  <use xlink:href="#glyph1-21" x="767" y="395"/>
+  <use xlink:href="#glyph1-14" x="773" y="395"/>
+  <use xlink:href="#glyph1-21" x="777" y="395"/>
+  <use xlink:href="#glyph1-38" x="783" y="395"/>
+  <use xlink:href="#glyph1-25" x="791" y="395"/>
+  <use xlink:href="#glyph1-5" x="794" y="395"/>
+  <use xlink:href="#glyph1-14" x="801" y="395"/>
+  <use xlink:href="#glyph1-25" x="805" y="395"/>
+  <use xlink:href="#glyph1-5" x="808" y="395"/>
+  <use xlink:href="#glyph1-14" x="815" y="395"/>
+  <use xlink:href="#glyph1-27" x="819" y="395"/>
+  <use xlink:href="#glyph1-14" x="826" y="395"/>
+  <use xlink:href="#glyph1-21" x="830" y="395"/>
+  <use xlink:href="#glyph1-38" x="836" y="395"/>
+  <use xlink:href="#glyph1-25" x="844" y="395"/>
+  <use xlink:href="#glyph1-23" x="847" y="395"/>
+  <use xlink:href="#glyph1-40" x="855" y="395"/>
+  <use xlink:href="#glyph1-14" x="863" y="395"/>
+  <use xlink:href="#glyph1-3" x="867" y="395"/>
+  <use xlink:href="#glyph1-2" x="878" y="395"/>
+  <use xlink:href="#glyph1-28" x="887" y="395"/>
+  <use xlink:href="#glyph1-6" x="892" y="395"/>
+  <use xlink:href="#glyph1-14" x="900" y="395"/>
+  <use xlink:href="#glyph1-27" x="904" y="395"/>
+  <use xlink:href="#glyph1-28" x="911" y="395"/>
+  <use xlink:href="#glyph1-8" x="916" y="395"/>
+  <use xlink:href="#glyph1-6" x="924" y="395"/>
+  <use xlink:href="#glyph1-23" x="932" y="395"/>
+  <use xlink:href="#glyph1-21" x="940" y="395"/>
+  <use xlink:href="#glyph1-36" x="946" y="395"/>
+  <use xlink:href="#glyph1-20" x="950" y="395"/>
+  <use xlink:href="#glyph1-14" x="957" y="395"/>
+  <use xlink:href="#glyph1-21" x="961" y="395"/>
+  <use xlink:href="#glyph1-2" x="967" y="395"/>
+  <use xlink:href="#glyph1-14" x="976" y="395"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-19" x="151" y="416"/>
+  <use xlink:href="#glyph1-6" x="159" y="416"/>
+  <use xlink:href="#glyph1-14" x="167" y="416"/>
+  <use xlink:href="#glyph1-42" x="171" y="416"/>
+  <use xlink:href="#glyph1-25" x="183" y="416"/>
+  <use xlink:href="#glyph1-5" x="186" y="416"/>
+  <use xlink:href="#glyph1-38" x="193" y="416"/>
+  <use xlink:href="#glyph1-6" x="201" y="416"/>
+  <use xlink:href="#glyph1-8" x="209" y="416"/>
+  <use xlink:href="#glyph1-14" x="217" y="416"/>
+  <use xlink:href="#glyph1-21" x="221" y="416"/>
+  <use xlink:href="#glyph1-38" x="227" y="416"/>
+  <use xlink:href="#glyph1-27" x="235" y="416"/>
+  <use xlink:href="#glyph1-23" x="242" y="416"/>
+  <use xlink:href="#glyph1-14" x="250" y="416"/>
+  <use xlink:href="#glyph1-5" x="254" y="416"/>
+  <use xlink:href="#glyph1-6" x="261" y="416"/>
+  <use xlink:href="#glyph1-28" x="269" y="416"/>
+  <use xlink:href="#glyph1-25" x="274" y="416"/>
+  <use xlink:href="#glyph1-2" x="277" y="416"/>
+  <use xlink:href="#glyph1-33" x="286" y="416"/>
+  <use xlink:href="#glyph1-5" x="294" y="416"/>
+  <use xlink:href="#glyph1-36" x="301" y="416"/>
+  <use xlink:href="#glyph1-20" x="305" y="416"/>
+  <use xlink:href="#glyph1-14" x="312" y="416"/>
+  <use xlink:href="#glyph1-21" x="316" y="416"/>
+  <use xlink:href="#glyph1-2" x="322" y="416"/>
+  <use xlink:href="#glyph1-14" x="331" y="416"/>
+  <use xlink:href="#glyph1-19" x="335" y="416"/>
+  <use xlink:href="#glyph1-6" x="343" y="416"/>
+  <use xlink:href="#glyph1-14" x="351" y="416"/>
+  <use xlink:href="#glyph1-6" x="355" y="416"/>
+  <use xlink:href="#glyph1-37" x="363" y="416"/>
+  <use xlink:href="#glyph1-4" x="371" y="416"/>
+  <use xlink:href="#glyph1-6" x="379" y="416"/>
+  <use xlink:href="#glyph1-26" x="387" y="416"/>
+  <use xlink:href="#glyph1-21" x="394" y="416"/>
+  <use xlink:href="#glyph1-6" x="400" y="416"/>
+  <use xlink:href="#glyph1-8" x="408" y="416"/>
+  <use xlink:href="#glyph1-44" x="416" y="416"/>
+  <use xlink:href="#glyph1-14" x="419" y="416"/>
+  <use xlink:href="#glyph1-30" x="423" y="416"/>
+  <use xlink:href="#glyph1-38" x="433" y="416"/>
+  <use xlink:href="#glyph1-6" x="441" y="416"/>
+  <use xlink:href="#glyph1-14" x="449" y="416"/>
+  <use xlink:href="#glyph1-4" x="453" y="416"/>
+  <use xlink:href="#glyph1-36" x="461" y="416"/>
+  <use xlink:href="#glyph1-27" x="465" y="416"/>
+  <use xlink:href="#glyph1-23" x="472" y="416"/>
+  <use xlink:href="#glyph1-14" x="480" y="416"/>
+  <use xlink:href="#glyph1-2" x="484" y="416"/>
+  <use xlink:href="#glyph1-54" x="493" y="416"/>
+  <use xlink:href="#glyph1-6" x="503" y="416"/>
+  <use xlink:href="#glyph1-28" x="511" y="416"/>
+  <use xlink:href="#glyph1-6" x="516" y="416"/>
+  <use xlink:href="#glyph1-8" x="524" y="416"/>
+  <use xlink:href="#glyph1-14" x="532" y="416"/>
+  <use xlink:href="#glyph1-21" x="536" y="416"/>
+  <use xlink:href="#glyph1-2" x="542" y="416"/>
+  <use xlink:href="#glyph1-14" x="551" y="416"/>
+  <use xlink:href="#glyph1-2" x="555" y="416"/>
+  <use xlink:href="#glyph1-33" x="564" y="416"/>
+  <use xlink:href="#glyph1-28" x="572" y="416"/>
+  <use xlink:href="#glyph1-14" x="577" y="416"/>
+  <use xlink:href="#glyph1-8" x="581" y="416"/>
+  <use xlink:href="#glyph1-6" x="589" y="416"/>
+  <use xlink:href="#glyph1-36" x="597" y="416"/>
+  <use xlink:href="#glyph1-25" x="601" y="416"/>
+  <use xlink:href="#glyph1-19" x="604" y="416"/>
+  <use xlink:href="#glyph1-6" x="612" y="416"/>
+  <use xlink:href="#glyph1-28" x="620" y="416"/>
+  <use xlink:href="#glyph1-27" x="625" y="416"/>
+  <use xlink:href="#glyph1-21" x="632" y="416"/>
+  <use xlink:href="#glyph1-25" x="638" y="416"/>
+  <use xlink:href="#glyph1-2" x="641" y="416"/>
+  <use xlink:href="#glyph1-23" x="650" y="416"/>
+  <use xlink:href="#glyph1-5" x="658" y="416"/>
+  <use xlink:href="#glyph1-14" x="665" y="416"/>
+  <use xlink:href="#glyph1-27" x="669" y="416"/>
+  <use xlink:href="#glyph1-54" x="676" y="416"/>
+  <use xlink:href="#glyph1-6" x="686" y="416"/>
+  <use xlink:href="#glyph1-26" x="694" y="416"/>
+  <use xlink:href="#glyph1-21" x="701" y="416"/>
+  <use xlink:href="#glyph1-5" x="707" y="416"/>
+  <use xlink:href="#glyph1-14" x="714" y="416"/>
+  <use xlink:href="#glyph1-21" x="718" y="416"/>
+  <use xlink:href="#glyph1-2" x="724" y="416"/>
+  <use xlink:href="#glyph1-2" x="733" y="416"/>
+  <use xlink:href="#glyph1-14" x="742" y="416"/>
+  <use xlink:href="#glyph1-3" x="746" y="416"/>
+  <use xlink:href="#glyph1-27" x="757" y="416"/>
+  <use xlink:href="#glyph1-23" x="764" y="416"/>
+  <use xlink:href="#glyph1-20" x="772" y="416"/>
+  <use xlink:href="#glyph1-14" x="779" y="416"/>
+  <use xlink:href="#glyph1-4" x="783" y="416"/>
+  <use xlink:href="#glyph1-27" x="791" y="416"/>
+  <use xlink:href="#glyph1-28" x="798" y="416"/>
+  <use xlink:href="#glyph1-21" x="803" y="416"/>
+  <use xlink:href="#glyph1-25" x="809" y="416"/>
+  <use xlink:href="#glyph1-26" x="812" y="416"/>
+  <use xlink:href="#glyph1-33" x="819" y="416"/>
+  <use xlink:href="#glyph1-36" x="827" y="416"/>
+  <use xlink:href="#glyph1-27" x="831" y="416"/>
+  <use xlink:href="#glyph1-28" x="838" y="416"/>
+  <use xlink:href="#glyph1-14" x="843" y="416"/>
+  <use xlink:href="#glyph1-25" x="847" y="416"/>
+  <use xlink:href="#glyph1-23" x="850" y="416"/>
+  <use xlink:href="#glyph1-21" x="858" y="416"/>
+  <use xlink:href="#glyph1-6" x="864" y="416"/>
+  <use xlink:href="#glyph1-28" x="872" y="416"/>
+  <use xlink:href="#glyph1-6" x="877" y="416"/>
+  <use xlink:href="#glyph1-5" x="885" y="416"/>
+  <use xlink:href="#glyph1-21" x="892" y="416"/>
+  <use xlink:href="#glyph1-5" x="898" y="416"/>
+  <use xlink:href="#glyph1-41" x="905" y="416"/>
+  <use xlink:href="#glyph1-14" x="909" y="416"/>
+  <use xlink:href="#glyph1-25" x="913" y="416"/>
+  <use xlink:href="#glyph1-23" x="916" y="416"/>
+  <use xlink:href="#glyph1-23" x="924" y="416"/>
+  <use xlink:href="#glyph1-2" x="932" y="416"/>
+  <use xlink:href="#glyph1-35" x="941" y="416"/>
+  <use xlink:href="#glyph1-27" x="948" y="416"/>
+  <use xlink:href="#glyph1-21" x="955" y="416"/>
+  <use xlink:href="#glyph1-6" x="961" y="416"/>
+  <use xlink:href="#glyph1-5" x="969" y="416"/>
+  <use xlink:href="#glyph1-14" x="976" y="416"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-33" x="151" y="437"/>
+  <use xlink:href="#glyph1-4" x="159" y="437"/>
+  <use xlink:href="#glyph1-2" x="167" y="437"/>
+  <use xlink:href="#glyph1-23" x="176" y="437"/>
+  <use xlink:href="#glyph1-14" x="184" y="437"/>
+  <use xlink:href="#glyph1-21" x="188" y="437"/>
+  <use xlink:href="#glyph1-2" x="194" y="437"/>
+  <use xlink:href="#glyph1-2" x="203" y="437"/>
+  <use xlink:href="#glyph1-14" x="212" y="437"/>
+  <use xlink:href="#glyph1-3" x="216" y="437"/>
+  <use xlink:href="#glyph1-27" x="227" y="437"/>
+  <use xlink:href="#glyph1-23" x="234" y="437"/>
+  <use xlink:href="#glyph1-20" x="242" y="437"/>
+  <use xlink:href="#glyph1-14" x="249" y="437"/>
+  <use xlink:href="#glyph1-36" x="253" y="437"/>
+  <use xlink:href="#glyph1-2" x="257" y="437"/>
+  <use xlink:href="#glyph1-26" x="266" y="437"/>
+  <use xlink:href="#glyph1-27" x="273" y="437"/>
+  <use xlink:href="#glyph1-36" x="280" y="437"/>
+  <use xlink:href="#glyph1-14" x="284" y="437"/>
+  <use xlink:href="#glyph1-25" x="288" y="437"/>
+  <use xlink:href="#glyph1-23" x="291" y="437"/>
+  <use xlink:href="#glyph1-5" x="299" y="437"/>
+  <use xlink:href="#glyph1-21" x="306" y="437"/>
+  <use xlink:href="#glyph1-25" x="312" y="437"/>
+  <use xlink:href="#glyph1-21" x="315" y="437"/>
+  <use xlink:href="#glyph1-33" x="321" y="437"/>
+  <use xlink:href="#glyph1-21" x="329" y="437"/>
+  <use xlink:href="#glyph1-25" x="335" y="437"/>
+  <use xlink:href="#glyph1-2" x="338" y="437"/>
+  <use xlink:href="#glyph1-23" x="347" y="437"/>
+  <use xlink:href="#glyph1-5" x="355" y="437"/>
+  <use xlink:href="#glyph1-41" x="362" y="437"/>
+  <use xlink:href="#glyph1-14" x="366" y="437"/>
+  <use xlink:href="#glyph1-23" x="370" y="437"/>
+  <use xlink:href="#glyph1-2" x="378" y="437"/>
+  <use xlink:href="#glyph1-21" x="387" y="437"/>
+  <use xlink:href="#glyph1-14" x="393" y="437"/>
+  <use xlink:href="#glyph1-21" x="397" y="437"/>
+  <use xlink:href="#glyph1-2" x="403" y="437"/>
+  <use xlink:href="#glyph1-14" x="412" y="437"/>
+  <use xlink:href="#glyph1-25" x="416" y="437"/>
+  <use xlink:href="#glyph1-23" x="419" y="437"/>
+  <use xlink:href="#glyph1-35" x="427" y="437"/>
+  <use xlink:href="#glyph1-2" x="434" y="437"/>
+  <use xlink:href="#glyph1-36" x="443" y="437"/>
+  <use xlink:href="#glyph1-35" x="447" y="437"/>
+  <use xlink:href="#glyph1-6" x="454" y="437"/>
+  <use xlink:href="#glyph1-14" x="462" y="437"/>
+  <use xlink:href="#glyph1-25" x="466" y="437"/>
+  <use xlink:href="#glyph1-23" x="469" y="437"/>
+  <use xlink:href="#glyph1-14" x="477" y="437"/>
+  <use xlink:href="#glyph1-25" x="481" y="437"/>
+  <use xlink:href="#glyph1-21" x="484" y="437"/>
+  <use xlink:href="#glyph1-5" x="490" y="437"/>
+  <use xlink:href="#glyph1-14" x="497" y="437"/>
+  <use xlink:href="#glyph1-8" x="501" y="437"/>
+  <use xlink:href="#glyph1-25" x="509" y="437"/>
+  <use xlink:href="#glyph1-5" x="512" y="437"/>
+  <use xlink:href="#glyph1-26" x="519" y="437"/>
+  <use xlink:href="#glyph1-33" x="526" y="437"/>
+  <use xlink:href="#glyph1-5" x="534" y="437"/>
+  <use xlink:href="#glyph1-5" x="541" y="437"/>
+  <use xlink:href="#glyph1-25" x="548" y="437"/>
+  <use xlink:href="#glyph1-2" x="551" y="437"/>
+  <use xlink:href="#glyph1-23" x="560" y="437"/>
+  <use xlink:href="#glyph1-14" x="568" y="437"/>
+  <use xlink:href="#glyph1-27" x="572" y="437"/>
+  <use xlink:href="#glyph1-14" x="579" y="437"/>
+  <use xlink:href="#glyph1-35" x="583" y="437"/>
+  <use xlink:href="#glyph1-27" x="590" y="437"/>
+  <use xlink:href="#glyph1-28" x="597" y="437"/>
+  <use xlink:href="#glyph1-25" x="602" y="437"/>
+  <use xlink:href="#glyph1-6" x="605" y="437"/>
+  <use xlink:href="#glyph1-21" x="613" y="437"/>
+  <use xlink:href="#glyph1-20" x="619" y="437"/>
+  <use xlink:href="#glyph1-14" x="626" y="437"/>
+  <use xlink:href="#glyph1-2" x="630" y="437"/>
+  <use xlink:href="#glyph1-15" x="639" y="437"/>
+  <use xlink:href="#glyph1-14" x="645" y="437"/>
+  <use xlink:href="#glyph1-2" x="649" y="437"/>
+  <use xlink:href="#glyph1-19" x="658" y="437"/>
+  <use xlink:href="#glyph1-45" x="666" y="437"/>
+  <use xlink:href="#glyph1-6" x="669" y="437"/>
+  <use xlink:href="#glyph1-26" x="677" y="437"/>
+  <use xlink:href="#glyph1-21" x="684" y="437"/>
+  <use xlink:href="#glyph1-5" x="690" y="437"/>
+  <use xlink:href="#glyph1-14" x="697" y="437"/>
+  <use xlink:href="#glyph1-15" x="701" y="437"/>
+  <use xlink:href="#glyph1-2" x="707" y="437"/>
+  <use xlink:href="#glyph1-28" x="716" y="437"/>
+  <use xlink:href="#glyph1-6" x="721" y="437"/>
+  <use xlink:href="#glyph1-25" x="729" y="437"/>
+  <use xlink:href="#glyph1-40" x="732" y="437"/>
+  <use xlink:href="#glyph1-23" x="740" y="437"/>
+  <use xlink:href="#glyph1-14" x="748" y="437"/>
+  <use xlink:href="#glyph1-21" x="752" y="437"/>
+  <use xlink:href="#glyph1-2" x="758" y="437"/>
+  <use xlink:href="#glyph1-14" x="767" y="437"/>
+  <use xlink:href="#glyph1-25" x="771" y="437"/>
+  <use xlink:href="#glyph1-21" x="774" y="437"/>
+  <use xlink:href="#glyph1-5" x="780" y="437"/>
+  <use xlink:href="#glyph1-14" x="787" y="437"/>
+  <use xlink:href="#glyph1-3" x="791" y="437"/>
+  <use xlink:href="#glyph1-6" x="802" y="437"/>
+  <use xlink:href="#glyph1-28" x="810" y="437"/>
+  <use xlink:href="#glyph1-25" x="815" y="437"/>
+  <use xlink:href="#glyph1-21" x="818" y="437"/>
+  <use xlink:href="#glyph1-5" x="824" y="437"/>
+  <use xlink:href="#glyph1-41" x="831" y="437"/>
+  <use xlink:href="#glyph1-14" x="835" y="437"/>
+  <use xlink:href="#glyph1-27" x="839" y="437"/>
+  <use xlink:href="#glyph1-23" x="846" y="437"/>
+  <use xlink:href="#glyph1-8" x="854" y="437"/>
+  <use xlink:href="#glyph1-14" x="862" y="437"/>
+  <use xlink:href="#glyph1-2" x="866" y="437"/>
+  <use xlink:href="#glyph1-15" x="875" y="437"/>
+  <use xlink:href="#glyph1-14" x="881" y="437"/>
+  <use xlink:href="#glyph1-35" x="885" y="437"/>
+  <use xlink:href="#glyph1-25" x="892" y="437"/>
+  <use xlink:href="#glyph1-6" x="895" y="437"/>
+  <use xlink:href="#glyph1-42" x="903" y="437"/>
+  <use xlink:href="#glyph1-5" x="915" y="437"/>
+  <use xlink:href="#glyph1-41" x="922" y="437"/>
+  <use xlink:href="#glyph1-14" x="926" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-4" x="151" y="458"/>
+  <use xlink:href="#glyph1-27" x="159" y="458"/>
+  <use xlink:href="#glyph1-5" x="166" y="458"/>
+  <use xlink:href="#glyph1-5" x="173" y="458"/>
+  <use xlink:href="#glyph1-25" x="180" y="458"/>
+  <use xlink:href="#glyph1-2" x="183" y="458"/>
+  <use xlink:href="#glyph1-23" x="192" y="458"/>
+  <use xlink:href="#glyph1-5" x="200" y="458"/>
+  <use xlink:href="#glyph1-14" x="207" y="458"/>
+  <use xlink:href="#glyph1-27" x="211" y="458"/>
+  <use xlink:href="#glyph1-23" x="218" y="458"/>
+  <use xlink:href="#glyph1-8" x="226" y="458"/>
+  <use xlink:href="#glyph1-14" x="234" y="458"/>
+  <use xlink:href="#glyph1-4" x="238" y="458"/>
+  <use xlink:href="#glyph1-28" x="246" y="458"/>
+  <use xlink:href="#glyph1-6" x="251" y="458"/>
+  <use xlink:href="#glyph1-45" x="259" y="458"/>
+  <use xlink:href="#glyph1-33" x="262" y="458"/>
+  <use xlink:href="#glyph1-8" x="270" y="458"/>
+  <use xlink:href="#glyph1-25" x="278" y="458"/>
+  <use xlink:href="#glyph1-26" x="281" y="458"/>
+  <use xlink:href="#glyph1-6" x="288" y="458"/>
+  <use xlink:href="#glyph1-5" x="296" y="458"/>
+  <use xlink:href="#glyph1-14" x="303" y="458"/>
+  <use xlink:href="#glyph1-36" x="307" y="458"/>
+  <use xlink:href="#glyph1-25" x="311" y="458"/>
+  <use xlink:href="#glyph1-21" x="314" y="458"/>
+  <use xlink:href="#glyph1-21" x="320" y="458"/>
+  <use xlink:href="#glyph1-36" x="326" y="458"/>
+  <use xlink:href="#glyph1-6" x="330" y="458"/>
+  <use xlink:href="#glyph1-14" x="338" y="458"/>
+  <use xlink:href="#glyph1-15" x="342" y="458"/>
+  <use xlink:href="#glyph1-27" x="348" y="458"/>
+  <use xlink:href="#glyph1-35" x="355" y="458"/>
+  <use xlink:href="#glyph1-2" x="362" y="458"/>
+  <use xlink:href="#glyph1-28" x="371" y="458"/>
+  <use xlink:href="#glyph1-27" x="376" y="458"/>
+  <use xlink:href="#glyph1-19" x="383" y="458"/>
+  <use xlink:href="#glyph1-36" x="391" y="458"/>
+  <use xlink:href="#glyph1-6" x="395" y="458"/>
+  <use xlink:href="#glyph1-14" x="403" y="458"/>
+  <use xlink:href="#glyph1-21" x="407" y="458"/>
+  <use xlink:href="#glyph1-2" x="413" y="458"/>
+  <use xlink:href="#glyph1-14" x="422" y="458"/>
+  <use xlink:href="#glyph1-21" x="426" y="458"/>
+  <use xlink:href="#glyph1-38" x="432" y="458"/>
+  <use xlink:href="#glyph1-6" x="440" y="458"/>
+  <use xlink:href="#glyph1-14" x="448" y="458"/>
+  <use xlink:href="#glyph1-8" x="452" y="458"/>
+  <use xlink:href="#glyph1-25" x="460" y="458"/>
+  <use xlink:href="#glyph1-5" x="463" y="458"/>
+  <use xlink:href="#glyph1-26" x="470" y="458"/>
+  <use xlink:href="#glyph1-2" x="477" y="458"/>
+  <use xlink:href="#glyph1-35" x="486" y="458"/>
+  <use xlink:href="#glyph1-6" x="493" y="458"/>
+  <use xlink:href="#glyph1-28" x="501" y="458"/>
+  <use xlink:href="#glyph1-20" x="506" y="458"/>
+  <use xlink:href="#glyph1-14" x="513" y="458"/>
+  <use xlink:href="#glyph1-2" x="517" y="458"/>
+  <use xlink:href="#glyph1-15" x="526" y="458"/>
+  <use xlink:href="#glyph1-14" x="532" y="458"/>
+  <use xlink:href="#glyph1-21" x="536" y="458"/>
+  <use xlink:href="#glyph1-28" x="542" y="458"/>
+  <use xlink:href="#glyph1-33" x="547" y="458"/>
+  <use xlink:href="#glyph1-21" x="555" y="458"/>
+  <use xlink:href="#glyph1-38" x="561" y="458"/>
+  <use xlink:href="#glyph1-44" x="569" y="458"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="151" y="500"/>
+  <use xlink:href="#glyph1-3" x="160" y="500"/>
+  <use xlink:href="#glyph1-2" x="171" y="500"/>
+  <use xlink:href="#glyph1-23" x="180" y="500"/>
+  <use xlink:href="#glyph1-40" x="188" y="500"/>
+  <use xlink:href="#glyph1-14" x="196" y="500"/>
+  <use xlink:href="#glyph1-21" x="200" y="500"/>
+  <use xlink:href="#glyph1-38" x="206" y="500"/>
+  <use xlink:href="#glyph1-6" x="214" y="500"/>
+  <use xlink:href="#glyph1-14" x="222" y="500"/>
+  <use xlink:href="#glyph1-3" x="226" y="500"/>
+  <use xlink:href="#glyph1-2" x="237" y="500"/>
+  <use xlink:href="#glyph1-5" x="246" y="500"/>
+  <use xlink:href="#glyph1-21" x="253" y="500"/>
+  <use xlink:href="#glyph1-14" x="259" y="500"/>
+  <use xlink:href="#glyph1-15" x="263" y="500"/>
+  <use xlink:href="#glyph1-2" x="269" y="500"/>
+  <use xlink:href="#glyph1-28" x="278" y="500"/>
+  <use xlink:href="#glyph1-3" x="283" y="500"/>
+  <use xlink:href="#glyph1-25" x="294" y="500"/>
+  <use xlink:href="#glyph1-8" x="297" y="500"/>
+  <use xlink:href="#glyph1-27" x="305" y="500"/>
+  <use xlink:href="#glyph1-19" x="312" y="500"/>
+  <use xlink:href="#glyph1-36" x="320" y="500"/>
+  <use xlink:href="#glyph1-6" x="324" y="500"/>
+  <use xlink:href="#glyph1-14" x="332" y="500"/>
+  <use xlink:href="#glyph1-2" x="336" y="500"/>
+  <use xlink:href="#glyph1-15" x="345" y="500"/>
+  <use xlink:href="#glyph1-14" x="351" y="500"/>
+  <use xlink:href="#glyph1-21" x="355" y="500"/>
+  <use xlink:href="#glyph1-38" x="361" y="500"/>
+  <use xlink:href="#glyph1-6" x="369" y="500"/>
+  <use xlink:href="#glyph1-14" x="377" y="500"/>
+  <use xlink:href="#glyph1-2" x="381" y="500"/>
+  <use xlink:href="#glyph1-19" x="390" y="500"/>
+  <use xlink:href="#glyph1-5" x="398" y="500"/>
+  <use xlink:href="#glyph1-21" x="405" y="500"/>
+  <use xlink:href="#glyph1-27" x="411" y="500"/>
+  <use xlink:href="#glyph1-26" x="418" y="500"/>
+  <use xlink:href="#glyph1-36" x="425" y="500"/>
+  <use xlink:href="#glyph1-6" x="429" y="500"/>
+  <use xlink:href="#glyph1-5" x="437" y="500"/>
+  <use xlink:href="#glyph1-14" x="444" y="500"/>
+  <use xlink:href="#glyph1-42" x="448" y="500"/>
+  <use xlink:href="#glyph1-38" x="460" y="500"/>
+  <use xlink:href="#glyph1-25" x="468" y="500"/>
+  <use xlink:href="#glyph1-26" x="471" y="500"/>
+  <use xlink:href="#glyph1-38" x="478" y="500"/>
+  <use xlink:href="#glyph1-14" x="486" y="500"/>
+  <use xlink:href="#glyph1-21" x="490" y="500"/>
+  <use xlink:href="#glyph1-38" x="496" y="500"/>
+  <use xlink:href="#glyph1-6" x="504" y="500"/>
+  <use xlink:href="#glyph1-14" x="512" y="500"/>
+  <use xlink:href="#glyph1-23" x="516" y="500"/>
+  <use xlink:href="#glyph1-6" x="524" y="500"/>
+  <use xlink:href="#glyph1-42" x="532" y="500"/>
+  <use xlink:href="#glyph1-14" x="544" y="500"/>
+  <use xlink:href="#glyph1-1" x="548" y="500"/>
+  <use xlink:href="#glyph1-2" x="557" y="500"/>
+  <use xlink:href="#glyph1-23" x="566" y="500"/>
+  <use xlink:href="#glyph1-5" x="574" y="500"/>
+  <use xlink:href="#glyph1-21" x="581" y="500"/>
+  <use xlink:href="#glyph1-25" x="587" y="500"/>
+  <use xlink:href="#glyph1-21" x="590" y="500"/>
+  <use xlink:href="#glyph1-33" x="596" y="500"/>
+  <use xlink:href="#glyph1-21" x="604" y="500"/>
+  <use xlink:href="#glyph1-25" x="610" y="500"/>
+  <use xlink:href="#glyph1-2" x="613" y="500"/>
+  <use xlink:href="#glyph1-23" x="622" y="500"/>
+  <use xlink:href="#glyph1-14" x="630" y="500"/>
+  <use xlink:href="#glyph1-42" x="634" y="500"/>
+  <use xlink:href="#glyph1-25" x="646" y="500"/>
+  <use xlink:href="#glyph1-36" x="649" y="500"/>
+  <use xlink:href="#glyph1-36" x="653" y="500"/>
+  <use xlink:href="#glyph1-14" x="657" y="500"/>
+  <use xlink:href="#glyph1-38" x="661" y="500"/>
+  <use xlink:href="#glyph1-27" x="669" y="500"/>
+  <use xlink:href="#glyph1-35" x="676" y="500"/>
+  <use xlink:href="#glyph1-6" x="683" y="500"/>
+  <use xlink:href="#glyph1-14" x="691" y="500"/>
+  <use xlink:href="#glyph1-21" x="695" y="500"/>
+  <use xlink:href="#glyph1-2" x="701" y="500"/>
+  <use xlink:href="#glyph1-14" x="710" y="500"/>
+  <use xlink:href="#glyph1-6" x="714" y="500"/>
+  <use xlink:href="#glyph1-23" x="722" y="500"/>
+  <use xlink:href="#glyph1-26" x="730" y="500"/>
+  <use xlink:href="#glyph1-2" x="737" y="500"/>
+  <use xlink:href="#glyph1-33" x="746" y="500"/>
+  <use xlink:href="#glyph1-23" x="754" y="500"/>
+  <use xlink:href="#glyph1-21" x="762" y="500"/>
+  <use xlink:href="#glyph1-6" x="768" y="500"/>
+  <use xlink:href="#glyph1-28" x="776" y="500"/>
+  <use xlink:href="#glyph1-14" x="781" y="500"/>
+  <use xlink:href="#glyph1-3" x="785" y="500"/>
+  <use xlink:href="#glyph1-27" x="796" y="500"/>
+  <use xlink:href="#glyph1-20" x="803" y="500"/>
+  <use xlink:href="#glyph1-14" x="810" y="500"/>
+  <use xlink:href="#glyph1-28" x="814" y="500"/>
+  <use xlink:href="#glyph1-6" x="819" y="500"/>
+  <use xlink:href="#glyph1-27" x="827" y="500"/>
+  <use xlink:href="#glyph1-8" x="834" y="500"/>
+  <use xlink:href="#glyph1-25" x="842" y="500"/>
+  <use xlink:href="#glyph1-36" x="845" y="500"/>
+  <use xlink:href="#glyph1-20" x="849" y="500"/>
+  <use xlink:href="#glyph1-14" x="856" y="500"/>
+  <use xlink:href="#glyph1-19" x="860" y="500"/>
+  <use xlink:href="#glyph1-6" x="868" y="500"/>
+  <use xlink:href="#glyph1-14" x="876" y="500"/>
+  <use xlink:href="#glyph1-8" x="880" y="500"/>
+  <use xlink:href="#glyph1-25" x="888" y="500"/>
+  <use xlink:href="#glyph1-5" x="891" y="500"/>
+  <use xlink:href="#glyph1-21" x="898" y="500"/>
+  <use xlink:href="#glyph1-25" x="904" y="500"/>
+  <use xlink:href="#glyph1-23" x="907" y="500"/>
+  <use xlink:href="#glyph1-40" x="915" y="500"/>
+  <use xlink:href="#glyph1-33" x="923" y="500"/>
+  <use xlink:href="#glyph1-25" x="931" y="500"/>
+  <use xlink:href="#glyph1-5" x="934" y="500"/>
+  <use xlink:href="#glyph1-38" x="941" y="500"/>
+  <use xlink:href="#glyph1-6" x="949" y="500"/>
+  <use xlink:href="#glyph1-8" x="957" y="500"/>
+  <use xlink:href="#glyph1-14" x="965" y="500"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="151" y="521"/>
+  <use xlink:href="#glyph1-38" x="157" y="521"/>
+  <use xlink:href="#glyph1-6" x="165" y="521"/>
+  <use xlink:href="#glyph1-14" x="173" y="521"/>
+  <use xlink:href="#glyph1-2" x="177" y="521"/>
+  <use xlink:href="#glyph1-19" x="186" y="521"/>
+  <use xlink:href="#glyph1-35" x="194" y="521"/>
+  <use xlink:href="#glyph1-25" x="201" y="521"/>
+  <use xlink:href="#glyph1-2" x="204" y="521"/>
+  <use xlink:href="#glyph1-33" x="213" y="521"/>
+  <use xlink:href="#glyph1-5" x="221" y="521"/>
+  <use xlink:href="#glyph1-14" x="228" y="521"/>
+  <use xlink:href="#glyph1-25" x="232" y="521"/>
+  <use xlink:href="#glyph1-23" x="235" y="521"/>
+  <use xlink:href="#glyph1-21" x="243" y="521"/>
+  <use xlink:href="#glyph1-6" x="249" y="521"/>
+  <use xlink:href="#glyph1-28" x="257" y="521"/>
+  <use xlink:href="#glyph1-6" x="262" y="521"/>
+  <use xlink:href="#glyph1-5" x="270" y="521"/>
+  <use xlink:href="#glyph1-21" x="277" y="521"/>
+  <use xlink:href="#glyph1-14" x="283" y="521"/>
+  <use xlink:href="#glyph1-2" x="287" y="521"/>
+  <use xlink:href="#glyph1-15" x="296" y="521"/>
+  <use xlink:href="#glyph1-14" x="302" y="521"/>
+  <use xlink:href="#glyph1-27" x="306" y="521"/>
+  <use xlink:href="#glyph1-14" x="313" y="521"/>
+  <use xlink:href="#glyph1-26" x="317" y="521"/>
+  <use xlink:href="#glyph1-6" x="324" y="521"/>
+  <use xlink:href="#glyph1-28" x="332" y="521"/>
+  <use xlink:href="#glyph1-21" x="337" y="521"/>
+  <use xlink:href="#glyph1-27" x="343" y="521"/>
+  <use xlink:href="#glyph1-25" x="350" y="521"/>
+  <use xlink:href="#glyph1-23" x="353" y="521"/>
+  <use xlink:href="#glyph1-14" x="361" y="521"/>
+  <use xlink:href="#glyph1-26" x="365" y="521"/>
+  <use xlink:href="#glyph1-36" x="372" y="521"/>
+  <use xlink:href="#glyph1-27" x="376" y="521"/>
+  <use xlink:href="#glyph1-5" x="383" y="521"/>
+  <use xlink:href="#glyph1-5" x="390" y="521"/>
+  <use xlink:href="#glyph1-14" x="397" y="521"/>
+  <use xlink:href="#glyph1-2" x="401" y="521"/>
+  <use xlink:href="#glyph1-15" x="410" y="521"/>
+  <use xlink:href="#glyph1-14" x="416" y="521"/>
+  <use xlink:href="#glyph1-3" x="420" y="521"/>
+  <use xlink:href="#glyph1-6" x="431" y="521"/>
+  <use xlink:href="#glyph1-23" x="439" y="521"/>
+  <use xlink:href="#glyph1-14" x="447" y="521"/>
+  <use xlink:href="#glyph1-25" x="451" y="521"/>
+  <use xlink:href="#glyph1-23" x="454" y="521"/>
+  <use xlink:href="#glyph1-14" x="462" y="521"/>
+  <use xlink:href="#glyph1-6" x="466" y="521"/>
+  <use xlink:href="#glyph1-35" x="474" y="521"/>
+  <use xlink:href="#glyph1-6" x="481" y="521"/>
+  <use xlink:href="#glyph1-28" x="489" y="521"/>
+  <use xlink:href="#glyph1-20" x="494" y="521"/>
+  <use xlink:href="#glyph1-14" x="501" y="521"/>
+  <use xlink:href="#glyph1-22" x="505" y="521"/>
+  <use xlink:href="#glyph1-21" x="514" y="521"/>
+  <use xlink:href="#glyph1-27" x="520" y="521"/>
+  <use xlink:href="#glyph1-21" x="527" y="521"/>
+  <use xlink:href="#glyph1-6" x="533" y="521"/>
+  <use xlink:href="#glyph1-14" x="541" y="521"/>
+  <use xlink:href="#glyph1-21" x="545" y="521"/>
+  <use xlink:href="#glyph1-2" x="551" y="521"/>
+  <use xlink:href="#glyph1-14" x="560" y="521"/>
+  <use xlink:href="#glyph1-28" x="564" y="521"/>
+  <use xlink:href="#glyph1-6" x="569" y="521"/>
+  <use xlink:href="#glyph1-5" x="577" y="521"/>
+  <use xlink:href="#glyph1-25" x="584" y="521"/>
+  <use xlink:href="#glyph1-5" x="587" y="521"/>
+  <use xlink:href="#glyph1-21" x="594" y="521"/>
+  <use xlink:href="#glyph1-14" x="600" y="521"/>
+  <use xlink:href="#glyph1-27" x="604" y="521"/>
+  <use xlink:href="#glyph1-36" x="611" y="521"/>
+  <use xlink:href="#glyph1-36" x="615" y="521"/>
+  <use xlink:href="#glyph1-14" x="619" y="521"/>
+  <use xlink:href="#glyph1-26" x="623" y="521"/>
+  <use xlink:href="#glyph1-38" x="630" y="521"/>
+  <use xlink:href="#glyph1-27" x="638" y="521"/>
+  <use xlink:href="#glyph1-23" x="645" y="521"/>
+  <use xlink:href="#glyph1-40" x="653" y="521"/>
+  <use xlink:href="#glyph1-6" x="661" y="521"/>
+  <use xlink:href="#glyph1-5" x="669" y="521"/>
+  <use xlink:href="#glyph1-14" x="676" y="521"/>
+  <use xlink:href="#glyph1-42" x="680" y="521"/>
+  <use xlink:href="#glyph1-38" x="692" y="521"/>
+  <use xlink:href="#glyph1-25" x="700" y="521"/>
+  <use xlink:href="#glyph1-26" x="703" y="521"/>
+  <use xlink:href="#glyph1-38" x="710" y="521"/>
+  <use xlink:href="#glyph1-14" x="718" y="521"/>
+  <use xlink:href="#glyph1-3" x="722" y="521"/>
+  <use xlink:href="#glyph1-27" x="733" y="521"/>
+  <use xlink:href="#glyph1-20" x="740" y="521"/>
+  <use xlink:href="#glyph1-14" x="747" y="521"/>
+  <use xlink:href="#glyph1-38" x="751" y="521"/>
+  <use xlink:href="#glyph1-27" x="759" y="521"/>
+  <use xlink:href="#glyph1-55" x="766" y="521"/>
+  <use xlink:href="#glyph1-27" x="774" y="521"/>
+  <use xlink:href="#glyph1-28" x="781" y="521"/>
+  <use xlink:href="#glyph1-8" x="786" y="521"/>
+  <use xlink:href="#glyph1-14" x="794" y="521"/>
+  <use xlink:href="#glyph1-27" x="798" y="521"/>
+  <use xlink:href="#glyph1-14" x="805" y="521"/>
+  <use xlink:href="#glyph1-8" x="809" y="521"/>
+  <use xlink:href="#glyph1-25" x="817" y="521"/>
+  <use xlink:href="#glyph1-3" x="820" y="521"/>
+  <use xlink:href="#glyph1-25" x="831" y="521"/>
+  <use xlink:href="#glyph1-23" x="834" y="521"/>
+  <use xlink:href="#glyph1-33" x="842" y="521"/>
+  <use xlink:href="#glyph1-21" x="850" y="521"/>
+  <use xlink:href="#glyph1-25" x="856" y="521"/>
+  <use xlink:href="#glyph1-2" x="859" y="521"/>
+  <use xlink:href="#glyph1-23" x="868" y="521"/>
+  <use xlink:href="#glyph1-14" x="876" y="521"/>
+  <use xlink:href="#glyph1-2" x="880" y="521"/>
+  <use xlink:href="#glyph1-15" x="889" y="521"/>
+  <use xlink:href="#glyph1-14" x="895" y="521"/>
+  <use xlink:href="#glyph1-21" x="899" y="521"/>
+  <use xlink:href="#glyph1-38" x="905" y="521"/>
+  <use xlink:href="#glyph1-6" x="913" y="521"/>
+  <use xlink:href="#glyph1-14" x="921" y="521"/>
+  <use xlink:href="#glyph1-4" x="925" y="521"/>
+  <use xlink:href="#glyph1-2" x="933" y="521"/>
+  <use xlink:href="#glyph1-42" x="942" y="521"/>
+  <use xlink:href="#glyph1-6" x="954" y="521"/>
+  <use xlink:href="#glyph1-28" x="962" y="521"/>
+  <use xlink:href="#glyph1-41" x="967" y="521"/>
+  <use xlink:href="#glyph1-14" x="971" y="521"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-6" x="151" y="542"/>
+  <use xlink:href="#glyph1-3" x="159" y="542"/>
+  <use xlink:href="#glyph1-2" x="170" y="542"/>
+  <use xlink:href="#glyph1-36" x="179" y="542"/>
+  <use xlink:href="#glyph1-33" x="183" y="542"/>
+  <use xlink:href="#glyph1-3" x="191" y="542"/>
+  <use xlink:href="#glyph1-6" x="202" y="542"/>
+  <use xlink:href="#glyph1-23" x="210" y="542"/>
+  <use xlink:href="#glyph1-21" x="218" y="542"/>
+  <use xlink:href="#glyph1-41" x="224" y="542"/>
+  <use xlink:href="#glyph1-14" x="228" y="542"/>
+  <use xlink:href="#glyph1-27" x="232" y="542"/>
+  <use xlink:href="#glyph1-23" x="239" y="542"/>
+  <use xlink:href="#glyph1-8" x="247" y="542"/>
+  <use xlink:href="#glyph1-14" x="255" y="542"/>
+  <use xlink:href="#glyph1-26" x="259" y="542"/>
+  <use xlink:href="#glyph1-2" x="266" y="542"/>
+  <use xlink:href="#glyph1-23" x="275" y="542"/>
+  <use xlink:href="#glyph1-5" x="283" y="542"/>
+  <use xlink:href="#glyph1-6" x="290" y="542"/>
+  <use xlink:href="#glyph1-34" x="298" y="542"/>
+  <use xlink:href="#glyph1-33" x="306" y="542"/>
+  <use xlink:href="#glyph1-6" x="314" y="542"/>
+  <use xlink:href="#glyph1-23" x="322" y="542"/>
+  <use xlink:href="#glyph1-26" x="330" y="542"/>
+  <use xlink:href="#glyph1-6" x="337" y="542"/>
+  <use xlink:href="#glyph1-14" x="345" y="542"/>
+  <use xlink:href="#glyph1-2" x="349" y="542"/>
+  <use xlink:href="#glyph1-15" x="358" y="542"/>
+  <use xlink:href="#glyph1-14" x="364" y="542"/>
+  <use xlink:href="#glyph1-21" x="368" y="542"/>
+  <use xlink:href="#glyph1-38" x="374" y="542"/>
+  <use xlink:href="#glyph1-6" x="382" y="542"/>
+  <use xlink:href="#glyph1-14" x="390" y="542"/>
+  <use xlink:href="#glyph1-2" x="394" y="542"/>
+  <use xlink:href="#glyph1-39" x="403" y="542"/>
+  <use xlink:href="#glyph1-26" x="416" y="542"/>
+  <use xlink:href="#glyph1-6" x="423" y="542"/>
+  <use xlink:href="#glyph1-5" x="431" y="542"/>
+  <use xlink:href="#glyph1-14" x="438" y="542"/>
+  <use xlink:href="#glyph1-21" x="442" y="542"/>
+  <use xlink:href="#glyph1-38" x="448" y="542"/>
+  <use xlink:href="#glyph1-6" x="456" y="542"/>
+  <use xlink:href="#glyph1-20" x="464" y="542"/>
+  <use xlink:href="#glyph1-14" x="471" y="542"/>
+  <use xlink:href="#glyph1-38" x="475" y="542"/>
+  <use xlink:href="#glyph1-2" x="483" y="542"/>
+  <use xlink:href="#glyph1-36" x="492" y="542"/>
+  <use xlink:href="#glyph1-8" x="496" y="542"/>
+  <use xlink:href="#glyph1-14" x="504" y="542"/>
+  <use xlink:href="#glyph1-33" x="508" y="542"/>
+  <use xlink:href="#glyph1-23" x="516" y="542"/>
+  <use xlink:href="#glyph1-8" x="524" y="542"/>
+  <use xlink:href="#glyph1-6" x="532" y="542"/>
+  <use xlink:href="#glyph1-28" x="540" y="542"/>
+  <use xlink:href="#glyph1-14" x="545" y="542"/>
+  <use xlink:href="#glyph1-21" x="549" y="542"/>
+  <use xlink:href="#glyph1-38" x="555" y="542"/>
+  <use xlink:href="#glyph1-6" x="563" y="542"/>
+  <use xlink:href="#glyph1-14" x="571" y="542"/>
+  <use xlink:href="#glyph1-22" x="575" y="542"/>
+  <use xlink:href="#glyph1-21" x="584" y="542"/>
+  <use xlink:href="#glyph1-27" x="590" y="542"/>
+  <use xlink:href="#glyph1-21" x="597" y="542"/>
+  <use xlink:href="#glyph1-6" x="603" y="542"/>
+  <use xlink:href="#glyph1-14" x="611" y="542"/>
+  <use xlink:href="#glyph1-6" x="615" y="542"/>
+  <use xlink:href="#glyph1-5" x="623" y="542"/>
+  <use xlink:href="#glyph1-21" x="630" y="542"/>
+  <use xlink:href="#glyph1-27" x="636" y="542"/>
+  <use xlink:href="#glyph1-19" x="643" y="542"/>
+  <use xlink:href="#glyph1-36" x="651" y="542"/>
+  <use xlink:href="#glyph1-25" x="655" y="542"/>
+  <use xlink:href="#glyph1-5" x="658" y="542"/>
+  <use xlink:href="#glyph1-38" x="665" y="542"/>
+  <use xlink:href="#glyph1-3" x="673" y="542"/>
+  <use xlink:href="#glyph1-6" x="684" y="542"/>
+  <use xlink:href="#glyph1-23" x="692" y="542"/>
+  <use xlink:href="#glyph1-21" x="700" y="542"/>
+  <use xlink:href="#glyph1-5" x="706" y="542"/>
+  <use xlink:href="#glyph1-47" x="713" y="542"/>
+  <use xlink:href="#glyph1-14" x="716" y="542"/>
+  <use xlink:href="#glyph1-27" x="720" y="542"/>
+  <use xlink:href="#glyph1-23" x="727" y="542"/>
+  <use xlink:href="#glyph1-8" x="735" y="542"/>
+  <use xlink:href="#glyph1-14" x="743" y="542"/>
+  <use xlink:href="#glyph1-21" x="747" y="542"/>
+  <use xlink:href="#glyph1-38" x="753" y="542"/>
+  <use xlink:href="#glyph1-6" x="761" y="542"/>
+  <use xlink:href="#glyph1-14" x="769" y="542"/>
+  <use xlink:href="#glyph1-4" x="773" y="542"/>
+  <use xlink:href="#glyph1-6" x="781" y="542"/>
+  <use xlink:href="#glyph1-28" x="789" y="542"/>
+  <use xlink:href="#glyph1-35" x="794" y="542"/>
+  <use xlink:href="#glyph1-6" x="801" y="542"/>
+  <use xlink:href="#glyph1-28" x="809" y="542"/>
+  <use xlink:href="#glyph1-21" x="814" y="542"/>
+  <use xlink:href="#glyph1-6" x="820" y="542"/>
+  <use xlink:href="#glyph1-8" x="828" y="542"/>
+  <use xlink:href="#glyph1-14" x="836" y="542"/>
+  <use xlink:href="#glyph1-27" x="840" y="542"/>
+  <use xlink:href="#glyph1-3" x="847" y="542"/>
+  <use xlink:href="#glyph1-19" x="858" y="542"/>
+  <use xlink:href="#glyph1-25" x="866" y="542"/>
+  <use xlink:href="#glyph1-21" x="869" y="542"/>
+  <use xlink:href="#glyph1-25" x="875" y="542"/>
+  <use xlink:href="#glyph1-2" x="878" y="542"/>
+  <use xlink:href="#glyph1-23" x="887" y="542"/>
+  <use xlink:href="#glyph1-14" x="895" y="542"/>
+  <use xlink:href="#glyph1-2" x="899" y="542"/>
+  <use xlink:href="#glyph1-15" x="908" y="542"/>
+  <use xlink:href="#glyph1-14" x="914" y="542"/>
+  <use xlink:href="#glyph1-27" x="918" y="542"/>
+  <use xlink:href="#glyph1-23" x="925" y="542"/>
+  <use xlink:href="#glyph1-2" x="933" y="542"/>
+  <use xlink:href="#glyph1-21" x="942" y="542"/>
+  <use xlink:href="#glyph1-38" x="948" y="542"/>
+  <use xlink:href="#glyph1-6" x="956" y="542"/>
+  <use xlink:href="#glyph1-28" x="964" y="542"/>
+  <use xlink:href="#glyph1-14" x="969" y="542"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="151" y="563"/>
+  <use xlink:href="#glyph1-36" x="158" y="563"/>
+  <use xlink:href="#glyph1-27" x="162" y="563"/>
+  <use xlink:href="#glyph1-5" x="169" y="563"/>
+  <use xlink:href="#glyph1-5" x="176" y="563"/>
+  <use xlink:href="#glyph1-14" x="183" y="563"/>
+  <use xlink:href="#glyph1-2" x="187" y="563"/>
+  <use xlink:href="#glyph1-15" x="196" y="563"/>
+  <use xlink:href="#glyph1-14" x="202" y="563"/>
+  <use xlink:href="#glyph1-3" x="206" y="563"/>
+  <use xlink:href="#glyph1-6" x="217" y="563"/>
+  <use xlink:href="#glyph1-23" x="225" y="563"/>
+  <use xlink:href="#glyph1-41" x="233" y="563"/>
+  <use xlink:href="#glyph1-14" x="237" y="563"/>
+  <use xlink:href="#glyph1-42" x="241" y="563"/>
+  <use xlink:href="#glyph1-38" x="253" y="563"/>
+  <use xlink:href="#glyph1-2" x="261" y="563"/>
+  <use xlink:href="#glyph1-14" x="270" y="563"/>
+  <use xlink:href="#glyph1-42" x="274" y="563"/>
+  <use xlink:href="#glyph1-25" x="286" y="563"/>
+  <use xlink:href="#glyph1-36" x="289" y="563"/>
+  <use xlink:href="#glyph1-36" x="293" y="563"/>
+  <use xlink:href="#glyph1-14" x="297" y="563"/>
+  <use xlink:href="#glyph1-6" x="301" y="563"/>
+  <use xlink:href="#glyph1-25" x="309" y="563"/>
+  <use xlink:href="#glyph1-21" x="312" y="563"/>
+  <use xlink:href="#glyph1-38" x="318" y="563"/>
+  <use xlink:href="#glyph1-6" x="326" y="563"/>
+  <use xlink:href="#glyph1-28" x="334" y="563"/>
+  <use xlink:href="#glyph1-14" x="339" y="563"/>
+  <use xlink:href="#glyph1-38" x="343" y="563"/>
+  <use xlink:href="#glyph1-2" x="351" y="563"/>
+  <use xlink:href="#glyph1-4" x="360" y="563"/>
+  <use xlink:href="#glyph1-6" x="368" y="563"/>
+  <use xlink:href="#glyph1-14" x="376" y="563"/>
+  <use xlink:href="#glyph1-21" x="380" y="563"/>
+  <use xlink:href="#glyph1-2" x="386" y="563"/>
+  <use xlink:href="#glyph1-14" x="395" y="563"/>
+  <use xlink:href="#glyph1-27" x="399" y="563"/>
+  <use xlink:href="#glyph1-40" x="406" y="563"/>
+  <use xlink:href="#glyph1-40" x="414" y="563"/>
+  <use xlink:href="#glyph1-28" x="422" y="563"/>
+  <use xlink:href="#glyph1-27" x="427" y="563"/>
+  <use xlink:href="#glyph1-23" x="434" y="563"/>
+  <use xlink:href="#glyph1-8" x="442" y="563"/>
+  <use xlink:href="#glyph1-25" x="450" y="563"/>
+  <use xlink:href="#glyph1-55" x="453" y="563"/>
+  <use xlink:href="#glyph1-6" x="461" y="563"/>
+  <use xlink:href="#glyph1-14" x="469" y="563"/>
+  <use xlink:href="#glyph1-21" x="473" y="563"/>
+  <use xlink:href="#glyph1-38" x="479" y="563"/>
+  <use xlink:href="#glyph1-6" x="487" y="563"/>
+  <use xlink:href="#glyph1-3" x="495" y="563"/>
+  <use xlink:href="#glyph1-5" x="506" y="563"/>
+  <use xlink:href="#glyph1-6" x="513" y="563"/>
+  <use xlink:href="#glyph1-36" x="521" y="563"/>
+  <use xlink:href="#glyph1-35" x="525" y="563"/>
+  <use xlink:href="#glyph1-6" x="532" y="563"/>
+  <use xlink:href="#glyph1-5" x="540" y="563"/>
+  <use xlink:href="#glyph1-14" x="547" y="563"/>
+  <use xlink:href="#glyph1-19" x="551" y="563"/>
+  <use xlink:href="#glyph1-20" x="559" y="563"/>
+  <use xlink:href="#glyph1-14" x="566" y="563"/>
+  <use xlink:href="#glyph1-21" x="570" y="563"/>
+  <use xlink:href="#glyph1-38" x="576" y="563"/>
+  <use xlink:href="#glyph1-6" x="584" y="563"/>
+  <use xlink:href="#glyph1-14" x="592" y="563"/>
+  <use xlink:href="#glyph1-26" x="596" y="563"/>
+  <use xlink:href="#glyph1-2" x="603" y="563"/>
+  <use xlink:href="#glyph1-23" x="612" y="563"/>
+  <use xlink:href="#glyph1-15" x="620" y="563"/>
+  <use xlink:href="#glyph1-33" x="626" y="563"/>
+  <use xlink:href="#glyph1-5" x="634" y="563"/>
+  <use xlink:href="#glyph1-25" x="641" y="563"/>
+  <use xlink:href="#glyph1-2" x="644" y="563"/>
+  <use xlink:href="#glyph1-23" x="653" y="563"/>
+  <use xlink:href="#glyph1-5" x="661" y="563"/>
+  <use xlink:href="#glyph1-14" x="668" y="563"/>
+  <use xlink:href="#glyph1-2" x="672" y="563"/>
+  <use xlink:href="#glyph1-15" x="681" y="563"/>
+  <use xlink:href="#glyph1-14" x="687" y="563"/>
+  <use xlink:href="#glyph1-21" x="691" y="563"/>
+  <use xlink:href="#glyph1-38" x="697" y="563"/>
+  <use xlink:href="#glyph1-6" x="705" y="563"/>
+  <use xlink:href="#glyph1-25" x="713" y="563"/>
+  <use xlink:href="#glyph1-28" x="716" y="563"/>
+  <use xlink:href="#glyph1-14" x="721" y="563"/>
+  <use xlink:href="#glyph1-26" x="725" y="563"/>
+  <use xlink:href="#glyph1-2" x="732" y="563"/>
+  <use xlink:href="#glyph1-33" x="741" y="563"/>
+  <use xlink:href="#glyph1-23" x="749" y="563"/>
+  <use xlink:href="#glyph1-21" x="757" y="563"/>
+  <use xlink:href="#glyph1-28" x="763" y="563"/>
+  <use xlink:href="#glyph1-20" x="768" y="563"/>
+  <use xlink:href="#glyph1-41" x="775" y="563"/>
+  <use xlink:href="#glyph1-14" x="779" y="563"/>
+  <use xlink:href="#glyph1-2" x="783" y="563"/>
+  <use xlink:href="#glyph1-28" x="792" y="563"/>
+  <use xlink:href="#glyph1-14" x="797" y="563"/>
+  <use xlink:href="#glyph1-42" x="801" y="563"/>
+  <use xlink:href="#glyph1-25" x="813" y="563"/>
+  <use xlink:href="#glyph1-36" x="816" y="563"/>
+  <use xlink:href="#glyph1-36" x="820" y="563"/>
+  <use xlink:href="#glyph1-14" x="824" y="563"/>
+  <use xlink:href="#glyph1-51" x="828" y="563"/>
+  <use xlink:href="#glyph1-27" x="837" y="563"/>
+  <use xlink:href="#glyph1-21" x="844" y="563"/>
+  <use xlink:href="#glyph1-21" x="850" y="563"/>
+  <use xlink:href="#glyph1-6" x="856" y="563"/>
+  <use xlink:href="#glyph1-28" x="864" y="563"/>
+  <use xlink:href="#glyph1-14" x="869" y="563"/>
+  <use xlink:href="#glyph1-21" x="873" y="563"/>
+  <use xlink:href="#glyph1-38" x="879" y="563"/>
+  <use xlink:href="#glyph1-6" x="887" y="563"/>
+  <use xlink:href="#glyph1-3" x="895" y="563"/>
+  <use xlink:href="#glyph1-5" x="906" y="563"/>
+  <use xlink:href="#glyph1-6" x="913" y="563"/>
+  <use xlink:href="#glyph1-36" x="921" y="563"/>
+  <use xlink:href="#glyph1-35" x="925" y="563"/>
+  <use xlink:href="#glyph1-6" x="932" y="563"/>
+  <use xlink:href="#glyph1-5" x="940" y="563"/>
+  <use xlink:href="#glyph1-14" x="947" y="563"/>
+  <use xlink:href="#glyph1-42" x="951" y="563"/>
+  <use xlink:href="#glyph1-25" x="963" y="563"/>
+  <use xlink:href="#glyph1-21" x="966" y="563"/>
+  <use xlink:href="#glyph1-38" x="972" y="563"/>
+  <use xlink:href="#glyph1-14" x="980" y="563"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-15" x="151" y="584"/>
+  <use xlink:href="#glyph1-27" x="157" y="584"/>
+  <use xlink:href="#glyph1-25" x="164" y="584"/>
+  <use xlink:href="#glyph1-28" x="167" y="584"/>
+  <use xlink:href="#glyph1-6" x="172" y="584"/>
+  <use xlink:href="#glyph1-28" x="180" y="584"/>
+  <use xlink:href="#glyph1-14" x="185" y="584"/>
+  <use xlink:href="#glyph1-4" x="189" y="584"/>
+  <use xlink:href="#glyph1-28" x="197" y="584"/>
+  <use xlink:href="#glyph1-2" x="202" y="584"/>
+  <use xlink:href="#glyph1-5" x="211" y="584"/>
+  <use xlink:href="#glyph1-4" x="218" y="584"/>
+  <use xlink:href="#glyph1-6" x="226" y="584"/>
+  <use xlink:href="#glyph1-26" x="234" y="584"/>
+  <use xlink:href="#glyph1-21" x="241" y="584"/>
+  <use xlink:href="#glyph1-5" x="247" y="584"/>
+  <use xlink:href="#glyph1-14" x="254" y="584"/>
+  <use xlink:href="#glyph1-2" x="258" y="584"/>
+  <use xlink:href="#glyph1-15" x="267" y="584"/>
+  <use xlink:href="#glyph1-14" x="273" y="584"/>
+  <use xlink:href="#glyph1-6" x="277" y="584"/>
+  <use xlink:href="#glyph1-36" x="285" y="584"/>
+  <use xlink:href="#glyph1-6" x="289" y="584"/>
+  <use xlink:href="#glyph1-35" x="297" y="584"/>
+  <use xlink:href="#glyph1-27" x="304" y="584"/>
+  <use xlink:href="#glyph1-21" x="311" y="584"/>
+  <use xlink:href="#glyph1-25" x="317" y="584"/>
+  <use xlink:href="#glyph1-2" x="320" y="584"/>
+  <use xlink:href="#glyph1-23" x="329" y="584"/>
+  <use xlink:href="#glyph1-14" x="337" y="584"/>
+  <use xlink:href="#glyph1-15" x="341" y="584"/>
+  <use xlink:href="#glyph1-28" x="347" y="584"/>
+  <use xlink:href="#glyph1-2" x="352" y="584"/>
+  <use xlink:href="#glyph1-3" x="361" y="584"/>
+  <use xlink:href="#glyph1-14" x="372" y="584"/>
+  <use xlink:href="#glyph1-21" x="376" y="584"/>
+  <use xlink:href="#glyph1-38" x="382" y="584"/>
+  <use xlink:href="#glyph1-6" x="390" y="584"/>
+  <use xlink:href="#glyph1-14" x="398" y="584"/>
+  <use xlink:href="#glyph1-5" x="402" y="584"/>
+  <use xlink:href="#glyph1-33" x="409" y="584"/>
+  <use xlink:href="#glyph1-19" x="417" y="584"/>
+  <use xlink:href="#glyph1-8" x="425" y="584"/>
+  <use xlink:href="#glyph1-25" x="433" y="584"/>
+  <use xlink:href="#glyph1-35" x="436" y="584"/>
+  <use xlink:href="#glyph1-25" x="443" y="584"/>
+  <use xlink:href="#glyph1-5" x="446" y="584"/>
+  <use xlink:href="#glyph1-25" x="453" y="584"/>
+  <use xlink:href="#glyph1-2" x="456" y="584"/>
+  <use xlink:href="#glyph1-23" x="465" y="584"/>
+  <use xlink:href="#glyph1-14" x="473" y="584"/>
+  <use xlink:href="#glyph1-2" x="477" y="584"/>
+  <use xlink:href="#glyph1-15" x="486" y="584"/>
+  <use xlink:href="#glyph1-14" x="492" y="584"/>
+  <use xlink:href="#glyph1-21" x="496" y="584"/>
+  <use xlink:href="#glyph1-38" x="502" y="584"/>
+  <use xlink:href="#glyph1-6" x="510" y="584"/>
+  <use xlink:href="#glyph1-14" x="518" y="584"/>
+  <use xlink:href="#glyph1-6" x="522" y="584"/>
+  <use xlink:href="#glyph1-3" x="530" y="584"/>
+  <use xlink:href="#glyph1-4" x="541" y="584"/>
+  <use xlink:href="#glyph1-25" x="549" y="584"/>
+  <use xlink:href="#glyph1-28" x="552" y="584"/>
+  <use xlink:href="#glyph1-6" x="557" y="584"/>
+  <use xlink:href="#glyph1-14" x="565" y="584"/>
+  <use xlink:href="#glyph1-25" x="569" y="584"/>
+  <use xlink:href="#glyph1-23" x="572" y="584"/>
+  <use xlink:href="#glyph1-21" x="580" y="584"/>
+  <use xlink:href="#glyph1-2" x="586" y="584"/>
+  <use xlink:href="#glyph1-14" x="595" y="584"/>
+  <use xlink:href="#glyph1-5" x="599" y="584"/>
+  <use xlink:href="#glyph1-6" x="606" y="584"/>
+  <use xlink:href="#glyph1-35" x="614" y="584"/>
+  <use xlink:href="#glyph1-6" x="621" y="584"/>
+  <use xlink:href="#glyph1-28" x="629" y="584"/>
+  <use xlink:href="#glyph1-27" x="634" y="584"/>
+  <use xlink:href="#glyph1-36" x="641" y="584"/>
+  <use xlink:href="#glyph1-14" x="645" y="584"/>
+  <use xlink:href="#glyph1-4" x="649" y="584"/>
+  <use xlink:href="#glyph1-27" x="657" y="584"/>
+  <use xlink:href="#glyph1-28" x="664" y="584"/>
+  <use xlink:href="#glyph1-21" x="669" y="584"/>
+  <use xlink:href="#glyph1-25" x="675" y="584"/>
+  <use xlink:href="#glyph1-27" x="678" y="584"/>
+  <use xlink:href="#glyph1-36" x="685" y="584"/>
+  <use xlink:href="#glyph1-14" x="689" y="584"/>
+  <use xlink:href="#glyph1-26" x="693" y="584"/>
+  <use xlink:href="#glyph1-2" x="700" y="584"/>
+  <use xlink:href="#glyph1-23" x="709" y="584"/>
+  <use xlink:href="#glyph1-15" x="717" y="584"/>
+  <use xlink:href="#glyph1-6" x="723" y="584"/>
+  <use xlink:href="#glyph1-8" x="731" y="584"/>
+  <use xlink:href="#glyph1-6" x="739" y="584"/>
+  <use xlink:href="#glyph1-28" x="747" y="584"/>
+  <use xlink:href="#glyph1-27" x="752" y="584"/>
+  <use xlink:href="#glyph1-26" x="759" y="584"/>
+  <use xlink:href="#glyph1-25" x="766" y="584"/>
+  <use xlink:href="#glyph1-6" x="769" y="584"/>
+  <use xlink:href="#glyph1-5" x="777" y="584"/>
+  <use xlink:href="#glyph1-14" x="784" y="584"/>
+  <use xlink:href="#glyph1-21" x="788" y="584"/>
+  <use xlink:href="#glyph1-38" x="794" y="584"/>
+  <use xlink:href="#glyph1-27" x="802" y="584"/>
+  <use xlink:href="#glyph1-23" x="809" y="584"/>
+  <use xlink:href="#glyph1-14" x="817" y="584"/>
+  <use xlink:href="#glyph1-15" x="821" y="584"/>
+  <use xlink:href="#glyph1-28" x="827" y="584"/>
+  <use xlink:href="#glyph1-2" x="832" y="584"/>
+  <use xlink:href="#glyph1-3" x="841" y="584"/>
+  <use xlink:href="#glyph1-14" x="852" y="584"/>
+  <use xlink:href="#glyph1-25" x="856" y="584"/>
+  <use xlink:href="#glyph1-21" x="859" y="584"/>
+  <use xlink:href="#glyph1-5" x="865" y="584"/>
+  <use xlink:href="#glyph1-14" x="872" y="584"/>
+  <use xlink:href="#glyph1-33" x="876" y="584"/>
+  <use xlink:href="#glyph1-23" x="884" y="584"/>
+  <use xlink:href="#glyph1-25" x="892" y="584"/>
+  <use xlink:href="#glyph1-2" x="895" y="584"/>
+  <use xlink:href="#glyph1-23" x="904" y="584"/>
+  <use xlink:href="#glyph1-14" x="912" y="584"/>
+  <use xlink:href="#glyph1-33" x="916" y="584"/>
+  <use xlink:href="#glyph1-23" x="924" y="584"/>
+  <use xlink:href="#glyph1-8" x="932" y="584"/>
+  <use xlink:href="#glyph1-6" x="940" y="584"/>
+  <use xlink:href="#glyph1-28" x="948" y="584"/>
+  <use xlink:href="#glyph1-14" x="953" y="584"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-2" x="151" y="605"/>
+  <use xlink:href="#glyph1-23" x="160" y="605"/>
+  <use xlink:href="#glyph1-6" x="168" y="605"/>
+  <use xlink:href="#glyph1-14" x="176" y="605"/>
+  <use xlink:href="#glyph1-40" x="180" y="605"/>
+  <use xlink:href="#glyph1-2" x="188" y="605"/>
+  <use xlink:href="#glyph1-35" x="197" y="605"/>
+  <use xlink:href="#glyph1-6" x="204" y="605"/>
+  <use xlink:href="#glyph1-28" x="212" y="605"/>
+  <use xlink:href="#glyph1-23" x="217" y="605"/>
+  <use xlink:href="#glyph1-3" x="225" y="605"/>
+  <use xlink:href="#glyph1-6" x="236" y="605"/>
+  <use xlink:href="#glyph1-23" x="244" y="605"/>
+  <use xlink:href="#glyph1-21" x="252" y="605"/>
+  <use xlink:href="#glyph1-44" x="258" y="605"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-49" x="151" y="647"/>
+  <use xlink:href="#glyph1-21" x="154" y="647"/>
+  <use xlink:href="#glyph1-14" x="160" y="647"/>
+  <use xlink:href="#glyph1-25" x="164" y="647"/>
+  <use xlink:href="#glyph1-5" x="167" y="647"/>
+  <use xlink:href="#glyph1-14" x="174" y="647"/>
+  <use xlink:href="#glyph1-23" x="178" y="647"/>
+  <use xlink:href="#glyph1-2" x="186" y="647"/>
+  <use xlink:href="#glyph1-21" x="195" y="647"/>
+  <use xlink:href="#glyph1-41" x="201" y="647"/>
+  <use xlink:href="#glyph1-14" x="205" y="647"/>
+  <use xlink:href="#glyph1-38" x="209" y="647"/>
+  <use xlink:href="#glyph1-2" x="217" y="647"/>
+  <use xlink:href="#glyph1-42" x="226" y="647"/>
+  <use xlink:href="#glyph1-6" x="238" y="647"/>
+  <use xlink:href="#glyph1-35" x="246" y="647"/>
+  <use xlink:href="#glyph1-6" x="253" y="647"/>
+  <use xlink:href="#glyph1-28" x="261" y="647"/>
+  <use xlink:href="#glyph1-41" x="266" y="647"/>
+  <use xlink:href="#glyph1-14" x="270" y="647"/>
+  <use xlink:href="#glyph1-3" x="274" y="647"/>
+  <use xlink:href="#glyph1-20" x="285" y="647"/>
+  <use xlink:href="#glyph1-14" x="292" y="647"/>
+  <use xlink:href="#glyph1-8" x="296" y="647"/>
+  <use xlink:href="#glyph1-6" x="304" y="647"/>
+  <use xlink:href="#glyph1-5" x="312" y="647"/>
+  <use xlink:href="#glyph1-25" x="319" y="647"/>
+  <use xlink:href="#glyph1-40" x="322" y="647"/>
+  <use xlink:href="#glyph1-23" x="330" y="647"/>
+  <use xlink:href="#glyph1-14" x="338" y="647"/>
+  <use xlink:href="#glyph1-21" x="342" y="647"/>
+  <use xlink:href="#glyph1-2" x="348" y="647"/>
+  <use xlink:href="#glyph1-14" x="357" y="647"/>
+  <use xlink:href="#glyph1-8" x="361" y="647"/>
+  <use xlink:href="#glyph1-42" x="369" y="647"/>
+  <use xlink:href="#glyph1-6" x="381" y="647"/>
+  <use xlink:href="#glyph1-36" x="389" y="647"/>
+  <use xlink:href="#glyph1-36" x="393" y="647"/>
+  <use xlink:href="#glyph1-14" x="397" y="647"/>
+  <use xlink:href="#glyph1-33" x="401" y="647"/>
+  <use xlink:href="#glyph1-4" x="409" y="647"/>
+  <use xlink:href="#glyph1-2" x="417" y="647"/>
+  <use xlink:href="#glyph1-23" x="426" y="647"/>
+  <use xlink:href="#glyph1-14" x="434" y="647"/>
+  <use xlink:href="#glyph1-2" x="438" y="647"/>
+  <use xlink:href="#glyph1-19" x="447" y="647"/>
+  <use xlink:href="#glyph1-5" x="455" y="647"/>
+  <use xlink:href="#glyph1-6" x="462" y="647"/>
+  <use xlink:href="#glyph1-28" x="470" y="647"/>
+  <use xlink:href="#glyph1-35" x="475" y="647"/>
+  <use xlink:href="#glyph1-27" x="482" y="647"/>
+  <use xlink:href="#glyph1-21" x="489" y="647"/>
+  <use xlink:href="#glyph1-25" x="495" y="647"/>
+  <use xlink:href="#glyph1-2" x="498" y="647"/>
+  <use xlink:href="#glyph1-23" x="507" y="647"/>
+  <use xlink:href="#glyph1-5" x="515" y="647"/>
+  <use xlink:href="#glyph1-14" x="522" y="647"/>
+  <use xlink:href="#glyph1-2" x="526" y="647"/>
+  <use xlink:href="#glyph1-15" x="535" y="647"/>
+  <use xlink:href="#glyph1-14" x="541" y="647"/>
+  <use xlink:href="#glyph1-21" x="545" y="647"/>
+  <use xlink:href="#glyph1-38" x="551" y="647"/>
+  <use xlink:href="#glyph1-25" x="559" y="647"/>
+  <use xlink:href="#glyph1-5" x="562" y="647"/>
+  <use xlink:href="#glyph1-14" x="569" y="647"/>
+  <use xlink:href="#glyph1-23" x="573" y="647"/>
+  <use xlink:href="#glyph1-27" x="581" y="647"/>
+  <use xlink:href="#glyph1-21" x="588" y="647"/>
+  <use xlink:href="#glyph1-33" x="594" y="647"/>
+  <use xlink:href="#glyph1-28" x="602" y="647"/>
+  <use xlink:href="#glyph1-6" x="607" y="647"/>
+  <use xlink:href="#glyph1-44" x="615" y="647"/>
+  <use xlink:href="#glyph1-14" x="618" y="647"/>
+  <use xlink:href="#glyph1-49" x="622" y="647"/>
+  <use xlink:href="#glyph1-14" x="625" y="647"/>
+  <use xlink:href="#glyph1-27" x="629" y="647"/>
+  <use xlink:href="#glyph1-3" x="636" y="647"/>
+  <use xlink:href="#glyph1-14" x="647" y="647"/>
+  <use xlink:href="#glyph1-42" x="651" y="647"/>
+  <use xlink:href="#glyph1-6" x="663" y="647"/>
+  <use xlink:href="#glyph1-36" x="671" y="647"/>
+  <use xlink:href="#glyph1-36" x="675" y="647"/>
+  <use xlink:href="#glyph1-14" x="679" y="647"/>
+  <use xlink:href="#glyph1-27" x="683" y="647"/>
+  <use xlink:href="#glyph1-42" x="690" y="647"/>
+  <use xlink:href="#glyph1-27" x="702" y="647"/>
+  <use xlink:href="#glyph1-28" x="709" y="647"/>
+  <use xlink:href="#glyph1-6" x="714" y="647"/>
+  <use xlink:href="#glyph1-14" x="722" y="647"/>
+  <use xlink:href="#glyph1-21" x="726" y="647"/>
+  <use xlink:href="#glyph1-38" x="732" y="647"/>
+  <use xlink:href="#glyph1-27" x="740" y="647"/>
+  <use xlink:href="#glyph1-21" x="747" y="647"/>
+  <use xlink:href="#glyph1-14" x="753" y="647"/>
+  <use xlink:href="#glyph1-25" x="757" y="647"/>
+  <use xlink:href="#glyph1-21" x="760" y="647"/>
+  <use xlink:href="#glyph1-14" x="766" y="647"/>
+  <use xlink:href="#glyph1-42" x="770" y="647"/>
+  <use xlink:href="#glyph1-2" x="782" y="647"/>
+  <use xlink:href="#glyph1-33" x="791" y="647"/>
+  <use xlink:href="#glyph1-36" x="799" y="647"/>
+  <use xlink:href="#glyph1-8" x="803" y="647"/>
+  <use xlink:href="#glyph1-14" x="811" y="647"/>
+  <use xlink:href="#glyph1-19" x="815" y="647"/>
+  <use xlink:href="#glyph1-6" x="823" y="647"/>
+  <use xlink:href="#glyph1-14" x="831" y="647"/>
+  <use xlink:href="#glyph1-8" x="835" y="647"/>
+  <use xlink:href="#glyph1-25" x="843" y="647"/>
+  <use xlink:href="#glyph1-5" x="846" y="647"/>
+  <use xlink:href="#glyph1-25" x="853" y="647"/>
+  <use xlink:href="#glyph1-23" x="856" y="647"/>
+  <use xlink:href="#glyph1-40" x="864" y="647"/>
+  <use xlink:href="#glyph1-6" x="872" y="647"/>
+  <use xlink:href="#glyph1-23" x="880" y="647"/>
+  <use xlink:href="#glyph1-33" x="888" y="647"/>
+  <use xlink:href="#glyph1-2" x="896" y="647"/>
+  <use xlink:href="#glyph1-33" x="905" y="647"/>
+  <use xlink:href="#glyph1-5" x="913" y="647"/>
+  <use xlink:href="#glyph1-14" x="920" y="647"/>
+  <use xlink:href="#glyph1-21" x="924" y="647"/>
+  <use xlink:href="#glyph1-2" x="930" y="647"/>
+  <use xlink:href="#glyph1-14" x="939" y="647"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-28" x="151" y="668"/>
+  <use xlink:href="#glyph1-6" x="156" y="668"/>
+  <use xlink:href="#glyph1-5" x="164" y="668"/>
+  <use xlink:href="#glyph1-2" x="171" y="668"/>
+  <use xlink:href="#glyph1-36" x="180" y="668"/>
+  <use xlink:href="#glyph1-35" x="184" y="668"/>
+  <use xlink:href="#glyph1-6" x="191" y="668"/>
+  <use xlink:href="#glyph1-14" x="199" y="668"/>
+  <use xlink:href="#glyph1-25" x="203" y="668"/>
+  <use xlink:href="#glyph1-23" x="206" y="668"/>
+  <use xlink:href="#glyph1-8" x="214" y="668"/>
+  <use xlink:href="#glyph1-25" x="222" y="668"/>
+  <use xlink:href="#glyph1-5" x="225" y="668"/>
+  <use xlink:href="#glyph1-26" x="232" y="668"/>
+  <use xlink:href="#glyph1-28" x="239" y="668"/>
+  <use xlink:href="#glyph1-25" x="244" y="668"/>
+  <use xlink:href="#glyph1-3" x="247" y="668"/>
+  <use xlink:href="#glyph1-25" x="258" y="668"/>
+  <use xlink:href="#glyph1-23" x="261" y="668"/>
+  <use xlink:href="#glyph1-27" x="269" y="668"/>
+  <use xlink:href="#glyph1-21" x="276" y="668"/>
+  <use xlink:href="#glyph1-6" x="282" y="668"/>
+  <use xlink:href="#glyph1-36" x="290" y="668"/>
+  <use xlink:href="#glyph1-20" x="294" y="668"/>
+  <use xlink:href="#glyph1-14" x="301" y="668"/>
+  <use xlink:href="#glyph1-21" x="305" y="668"/>
+  <use xlink:href="#glyph1-38" x="311" y="668"/>
+  <use xlink:href="#glyph1-6" x="319" y="668"/>
+  <use xlink:href="#glyph1-14" x="327" y="668"/>
+  <use xlink:href="#glyph1-2" x="331" y="668"/>
+  <use xlink:href="#glyph1-4" x="340" y="668"/>
+  <use xlink:href="#glyph1-4" x="348" y="668"/>
+  <use xlink:href="#glyph1-2" x="356" y="668"/>
+  <use xlink:href="#glyph1-5" x="365" y="668"/>
+  <use xlink:href="#glyph1-25" x="372" y="668"/>
+  <use xlink:href="#glyph1-21" x="375" y="668"/>
+  <use xlink:href="#glyph1-25" x="381" y="668"/>
+  <use xlink:href="#glyph1-2" x="384" y="668"/>
+  <use xlink:href="#glyph1-23" x="393" y="668"/>
+  <use xlink:href="#glyph1-14" x="401" y="668"/>
+  <use xlink:href="#glyph1-2" x="405" y="668"/>
+  <use xlink:href="#glyph1-15" x="414" y="668"/>
+  <use xlink:href="#glyph1-14" x="420" y="668"/>
+  <use xlink:href="#glyph1-27" x="424" y="668"/>
+  <use xlink:href="#glyph1-23" x="431" y="668"/>
+  <use xlink:href="#glyph1-20" x="439" y="668"/>
+  <use xlink:href="#glyph1-14" x="446" y="668"/>
+  <use xlink:href="#glyph1-5" x="450" y="668"/>
+  <use xlink:href="#glyph1-6" x="457" y="668"/>
+  <use xlink:href="#glyph1-21" x="465" y="668"/>
+  <use xlink:href="#glyph1-14" x="471" y="668"/>
+  <use xlink:href="#glyph1-2" x="475" y="668"/>
+  <use xlink:href="#glyph1-15" x="484" y="668"/>
+  <use xlink:href="#glyph1-14" x="490" y="668"/>
+  <use xlink:href="#glyph1-3" x="494" y="668"/>
+  <use xlink:href="#glyph1-6" x="505" y="668"/>
+  <use xlink:href="#glyph1-23" x="513" y="668"/>
+  <use xlink:href="#glyph1-14" x="521" y="668"/>
+  <use xlink:href="#glyph1-56" x="525" y="668"/>
+  <use xlink:href="#glyph1-3" x="531" y="668"/>
+  <use xlink:href="#glyph1-6" x="542" y="668"/>
+  <use xlink:href="#glyph1-28" x="550" y="668"/>
+  <use xlink:href="#glyph1-6" x="555" y="668"/>
+  <use xlink:href="#glyph1-36" x="563" y="668"/>
+  <use xlink:href="#glyph1-20" x="567" y="668"/>
+  <use xlink:href="#glyph1-14" x="574" y="668"/>
+  <use xlink:href="#glyph1-19" x="578" y="668"/>
+  <use xlink:href="#glyph1-6" x="586" y="668"/>
+  <use xlink:href="#glyph1-26" x="594" y="668"/>
+  <use xlink:href="#glyph1-27" x="601" y="668"/>
+  <use xlink:href="#glyph1-33" x="608" y="668"/>
+  <use xlink:href="#glyph1-5" x="616" y="668"/>
+  <use xlink:href="#glyph1-6" x="623" y="668"/>
+  <use xlink:href="#glyph1-14" x="631" y="668"/>
+  <use xlink:href="#glyph1-21" x="635" y="668"/>
+  <use xlink:href="#glyph1-38" x="641" y="668"/>
+  <use xlink:href="#glyph1-6" x="649" y="668"/>
+  <use xlink:href="#glyph1-25" x="657" y="668"/>
+  <use xlink:href="#glyph1-28" x="660" y="668"/>
+  <use xlink:href="#glyph1-14" x="665" y="668"/>
+  <use xlink:href="#glyph1-5" x="669" y="668"/>
+  <use xlink:href="#glyph1-25" x="676" y="668"/>
+  <use xlink:href="#glyph1-21" x="679" y="668"/>
+  <use xlink:href="#glyph1-33" x="685" y="668"/>
+  <use xlink:href="#glyph1-27" x="693" y="668"/>
+  <use xlink:href="#glyph1-21" x="700" y="668"/>
+  <use xlink:href="#glyph1-25" x="706" y="668"/>
+  <use xlink:href="#glyph1-2" x="709" y="668"/>
+  <use xlink:href="#glyph1-23" x="718" y="668"/>
+  <use xlink:href="#glyph1-5" x="726" y="668"/>
+  <use xlink:href="#glyph1-14" x="733" y="668"/>
+  <use xlink:href="#glyph1-3" x="737" y="668"/>
+  <use xlink:href="#glyph1-25" x="748" y="668"/>
+  <use xlink:href="#glyph1-40" x="751" y="668"/>
+  <use xlink:href="#glyph1-38" x="759" y="668"/>
+  <use xlink:href="#glyph1-21" x="767" y="668"/>
+  <use xlink:href="#glyph1-14" x="773" y="668"/>
+  <use xlink:href="#glyph1-5" x="777" y="668"/>
+  <use xlink:href="#glyph1-33" x="784" y="668"/>
+  <use xlink:href="#glyph1-19" x="792" y="668"/>
+  <use xlink:href="#glyph1-45" x="800" y="668"/>
+  <use xlink:href="#glyph1-6" x="803" y="668"/>
+  <use xlink:href="#glyph1-26" x="811" y="668"/>
+  <use xlink:href="#glyph1-21" x="818" y="668"/>
+  <use xlink:href="#glyph1-14" x="824" y="668"/>
+  <use xlink:href="#glyph1-21" x="828" y="668"/>
+  <use xlink:href="#glyph1-38" x="834" y="668"/>
+  <use xlink:href="#glyph1-6" x="842" y="668"/>
+  <use xlink:href="#glyph1-3" x="850" y="668"/>
+  <use xlink:href="#glyph1-14" x="861" y="668"/>
+  <use xlink:href="#glyph1-21" x="865" y="668"/>
+  <use xlink:href="#glyph1-2" x="871" y="668"/>
+  <use xlink:href="#glyph1-14" x="880" y="668"/>
+  <use xlink:href="#glyph1-5" x="884" y="668"/>
+  <use xlink:href="#glyph1-33" x="891" y="668"/>
+  <use xlink:href="#glyph1-5" x="899" y="668"/>
+  <use xlink:href="#glyph1-4" x="906" y="668"/>
+  <use xlink:href="#glyph1-25" x="914" y="668"/>
+  <use xlink:href="#glyph1-26" x="917" y="668"/>
+  <use xlink:href="#glyph1-25" x="924" y="668"/>
+  <use xlink:href="#glyph1-2" x="927" y="668"/>
+  <use xlink:href="#glyph1-23" x="936" y="668"/>
+  <use xlink:href="#glyph1-57" x="944" y="668"/>
+  <use xlink:href="#glyph1-14" x="950" y="668"/>
+  <use xlink:href="#glyph1-25" x="954" y="668"/>
+  <use xlink:href="#glyph1-23" x="957" y="668"/>
+  <use xlink:href="#glyph1-21" x="965" y="668"/>
+  <use xlink:href="#glyph1-2" x="971" y="668"/>
+  <use xlink:href="#glyph1-14" x="980" y="668"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-25" x="151" y="689"/>
+  <use xlink:href="#glyph1-23" x="154" y="689"/>
+  <use xlink:href="#glyph1-21" x="162" y="689"/>
+  <use xlink:href="#glyph1-6" x="168" y="689"/>
+  <use xlink:href="#glyph1-28" x="176" y="689"/>
+  <use xlink:href="#glyph1-6" x="181" y="689"/>
+  <use xlink:href="#glyph1-5" x="189" y="689"/>
+  <use xlink:href="#glyph1-21" x="196" y="689"/>
+  <use xlink:href="#glyph1-6" x="202" y="689"/>
+  <use xlink:href="#glyph1-8" x="210" y="689"/>
+  <use xlink:href="#glyph1-14" x="218" y="689"/>
+  <use xlink:href="#glyph1-2" x="222" y="689"/>
+  <use xlink:href="#glyph1-28" x="231" y="689"/>
+  <use xlink:href="#glyph1-14" x="236" y="689"/>
+  <use xlink:href="#glyph1-27" x="240" y="689"/>
+  <use xlink:href="#glyph1-3" x="247" y="689"/>
+  <use xlink:href="#glyph1-19" x="258" y="689"/>
+  <use xlink:href="#glyph1-25" x="266" y="689"/>
+  <use xlink:href="#glyph1-21" x="269" y="689"/>
+  <use xlink:href="#glyph1-25" x="275" y="689"/>
+  <use xlink:href="#glyph1-2" x="278" y="689"/>
+  <use xlink:href="#glyph1-33" x="287" y="689"/>
+  <use xlink:href="#glyph1-5" x="295" y="689"/>
+  <use xlink:href="#glyph1-14" x="302" y="689"/>
+  <use xlink:href="#glyph1-35" x="306" y="689"/>
+  <use xlink:href="#glyph1-25" x="313" y="689"/>
+  <use xlink:href="#glyph1-6" x="316" y="689"/>
+  <use xlink:href="#glyph1-42" x="324" y="689"/>
+  <use xlink:href="#glyph1-5" x="336" y="689"/>
+  <use xlink:href="#glyph1-44" x="343" y="689"/>
+  <use xlink:href="#glyph1-14" x="346" y="689"/>
+  <use xlink:href="#glyph1-1" x="350" y="689"/>
+  <use xlink:href="#glyph1-27" x="359" y="689"/>
+  <use xlink:href="#glyph1-23" x="366" y="689"/>
+  <use xlink:href="#glyph1-8" x="374" y="689"/>
+  <use xlink:href="#glyph1-2" x="382" y="689"/>
+  <use xlink:href="#glyph1-28" x="391" y="689"/>
+  <use xlink:href="#glyph1-14" x="396" y="689"/>
+  <use xlink:href="#glyph1-42" x="400" y="689"/>
+  <use xlink:href="#glyph1-25" x="412" y="689"/>
+  <use xlink:href="#glyph1-36" x="415" y="689"/>
+  <use xlink:href="#glyph1-36" x="419" y="689"/>
+  <use xlink:href="#glyph1-14" x="423" y="689"/>
+  <use xlink:href="#glyph1-2" x="427" y="689"/>
+  <use xlink:href="#glyph1-19" x="436" y="689"/>
+  <use xlink:href="#glyph1-36" x="444" y="689"/>
+  <use xlink:href="#glyph1-25" x="448" y="689"/>
+  <use xlink:href="#glyph1-40" x="451" y="689"/>
+  <use xlink:href="#glyph1-6" x="459" y="689"/>
+  <use xlink:href="#glyph1-14" x="467" y="689"/>
+  <use xlink:href="#glyph1-33" x="471" y="689"/>
+  <use xlink:href="#glyph1-5" x="479" y="689"/>
+  <use xlink:href="#glyph1-14" x="486" y="689"/>
+  <use xlink:href="#glyph1-21" x="490" y="689"/>
+  <use xlink:href="#glyph1-2" x="496" y="689"/>
+  <use xlink:href="#glyph1-14" x="505" y="689"/>
+  <use xlink:href="#glyph1-27" x="509" y="689"/>
+  <use xlink:href="#glyph1-8" x="516" y="689"/>
+  <use xlink:href="#glyph1-3" x="524" y="689"/>
+  <use xlink:href="#glyph1-25" x="535" y="689"/>
+  <use xlink:href="#glyph1-21" x="538" y="689"/>
+  <use xlink:href="#glyph1-14" x="544" y="689"/>
+  <use xlink:href="#glyph1-21" x="548" y="689"/>
+  <use xlink:href="#glyph1-38" x="554" y="689"/>
+  <use xlink:href="#glyph1-27" x="562" y="689"/>
+  <use xlink:href="#glyph1-21" x="569" y="689"/>
+  <use xlink:href="#glyph1-14" x="575" y="689"/>
+  <use xlink:href="#glyph1-6" x="579" y="689"/>
+  <use xlink:href="#glyph1-35" x="587" y="689"/>
+  <use xlink:href="#glyph1-6" x="594" y="689"/>
+  <use xlink:href="#glyph1-23" x="602" y="689"/>
+  <use xlink:href="#glyph1-14" x="610" y="689"/>
+  <use xlink:href="#glyph1-5" x="614" y="689"/>
+  <use xlink:href="#glyph1-33" x="621" y="689"/>
+  <use xlink:href="#glyph1-26" x="629" y="689"/>
+  <use xlink:href="#glyph1-38" x="636" y="689"/>
+  <use xlink:href="#glyph1-14" x="644" y="689"/>
+  <use xlink:href="#glyph1-3" x="648" y="689"/>
+  <use xlink:href="#glyph1-6" x="659" y="689"/>
+  <use xlink:href="#glyph1-23" x="667" y="689"/>
+  <use xlink:href="#glyph1-14" x="675" y="689"/>
+  <use xlink:href="#glyph1-3" x="679" y="689"/>
+  <use xlink:href="#glyph1-27" x="690" y="689"/>
+  <use xlink:href="#glyph1-20" x="697" y="689"/>
+  <use xlink:href="#glyph1-14" x="704" y="689"/>
+  <use xlink:href="#glyph1-19" x="708" y="689"/>
+  <use xlink:href="#glyph1-6" x="716" y="689"/>
+  <use xlink:href="#glyph1-14" x="724" y="689"/>
+  <use xlink:href="#glyph1-27" x="728" y="689"/>
+  <use xlink:href="#glyph1-26" x="735" y="689"/>
+  <use xlink:href="#glyph1-21" x="742" y="689"/>
+  <use xlink:href="#glyph1-33" x="748" y="689"/>
+  <use xlink:href="#glyph1-27" x="756" y="689"/>
+  <use xlink:href="#glyph1-21" x="763" y="689"/>
+  <use xlink:href="#glyph1-6" x="769" y="689"/>
+  <use xlink:href="#glyph1-8" x="777" y="689"/>
+  <use xlink:href="#glyph1-14" x="785" y="689"/>
+  <use xlink:href="#glyph1-19" x="789" y="689"/>
+  <use xlink:href="#glyph1-20" x="797" y="689"/>
+  <use xlink:href="#glyph1-14" x="804" y="689"/>
+  <use xlink:href="#glyph1-33" x="808" y="689"/>
+  <use xlink:href="#glyph1-4" x="816" y="689"/>
+  <use xlink:href="#glyph1-28" x="824" y="689"/>
+  <use xlink:href="#glyph1-25" x="829" y="689"/>
+  <use xlink:href="#glyph1-40" x="832" y="689"/>
+  <use xlink:href="#glyph1-38" x="840" y="689"/>
+  <use xlink:href="#glyph1-21" x="848" y="689"/>
+  <use xlink:href="#glyph1-14" x="854" y="689"/>
+  <use xlink:href="#glyph1-25" x="858" y="689"/>
+  <use xlink:href="#glyph1-23" x="861" y="689"/>
+  <use xlink:href="#glyph1-21" x="869" y="689"/>
+  <use xlink:href="#glyph1-6" x="875" y="689"/>
+  <use xlink:href="#glyph1-23" x="883" y="689"/>
+  <use xlink:href="#glyph1-21" x="891" y="689"/>
+  <use xlink:href="#glyph1-25" x="897" y="689"/>
+  <use xlink:href="#glyph1-2" x="900" y="689"/>
+  <use xlink:href="#glyph1-23" x="909" y="689"/>
+  <use xlink:href="#glyph1-5" x="917" y="689"/>
+  <use xlink:href="#glyph1-47" x="924" y="689"/>
+  <use xlink:href="#glyph1-14" x="927" y="689"/>
+  <use xlink:href="#glyph1-27" x="931" y="689"/>
+  <use xlink:href="#glyph1-23" x="938" y="689"/>
+  <use xlink:href="#glyph1-8" x="946" y="689"/>
+  <use xlink:href="#glyph1-14" x="954" y="689"/>
+  <use xlink:href="#glyph1-25" x="958" y="689"/>
+  <use xlink:href="#glyph1-21" x="961" y="689"/>
+  <use xlink:href="#glyph1-14" x="967" y="689"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="151" y="710"/>
+  <use xlink:href="#glyph1-27" x="158" y="710"/>
+  <use xlink:href="#glyph1-23" x="165" y="710"/>
+  <use xlink:href="#glyph1-23" x="173" y="710"/>
+  <use xlink:href="#glyph1-2" x="181" y="710"/>
+  <use xlink:href="#glyph1-21" x="190" y="710"/>
+  <use xlink:href="#glyph1-14" x="196" y="710"/>
+  <use xlink:href="#glyph1-19" x="200" y="710"/>
+  <use xlink:href="#glyph1-6" x="208" y="710"/>
+  <use xlink:href="#glyph1-14" x="216" y="710"/>
+  <use xlink:href="#glyph1-8" x="220" y="710"/>
+  <use xlink:href="#glyph1-2" x="228" y="710"/>
+  <use xlink:href="#glyph1-33" x="237" y="710"/>
+  <use xlink:href="#glyph1-19" x="245" y="710"/>
+  <use xlink:href="#glyph1-21" x="253" y="710"/>
+  <use xlink:href="#glyph1-6" x="259" y="710"/>
+  <use xlink:href="#glyph1-8" x="267" y="710"/>
+  <use xlink:href="#glyph1-14" x="275" y="710"/>
+  <use xlink:href="#glyph1-21" x="279" y="710"/>
+  <use xlink:href="#glyph1-38" x="285" y="710"/>
+  <use xlink:href="#glyph1-27" x="293" y="710"/>
+  <use xlink:href="#glyph1-21" x="300" y="710"/>
+  <use xlink:href="#glyph1-14" x="306" y="710"/>
+  <use xlink:href="#glyph1-3" x="310" y="710"/>
+  <use xlink:href="#glyph1-33" x="321" y="710"/>
+  <use xlink:href="#glyph1-26" x="329" y="710"/>
+  <use xlink:href="#glyph1-38" x="336" y="710"/>
+  <use xlink:href="#glyph1-14" x="344" y="710"/>
+  <use xlink:href="#glyph1-2" x="348" y="710"/>
+  <use xlink:href="#glyph1-15" x="357" y="710"/>
+  <use xlink:href="#glyph1-14" x="363" y="710"/>
+  <use xlink:href="#glyph1-21" x="367" y="710"/>
+  <use xlink:href="#glyph1-38" x="373" y="710"/>
+  <use xlink:href="#glyph1-6" x="381" y="710"/>
+  <use xlink:href="#glyph1-14" x="389" y="710"/>
+  <use xlink:href="#glyph1-2" x="393" y="710"/>
+  <use xlink:href="#glyph1-4" x="402" y="710"/>
+  <use xlink:href="#glyph1-4" x="410" y="710"/>
+  <use xlink:href="#glyph1-2" x="418" y="710"/>
+  <use xlink:href="#glyph1-5" x="427" y="710"/>
+  <use xlink:href="#glyph1-25" x="434" y="710"/>
+  <use xlink:href="#glyph1-21" x="437" y="710"/>
+  <use xlink:href="#glyph1-25" x="443" y="710"/>
+  <use xlink:href="#glyph1-2" x="446" y="710"/>
+  <use xlink:href="#glyph1-23" x="455" y="710"/>
+  <use xlink:href="#glyph1-14" x="463" y="710"/>
+  <use xlink:href="#glyph1-42" x="467" y="710"/>
+  <use xlink:href="#glyph1-38" x="479" y="710"/>
+  <use xlink:href="#glyph1-25" x="487" y="710"/>
+  <use xlink:href="#glyph1-26" x="490" y="710"/>
+  <use xlink:href="#glyph1-38" x="497" y="710"/>
+  <use xlink:href="#glyph1-14" x="505" y="710"/>
+  <use xlink:href="#glyph1-38" x="509" y="710"/>
+  <use xlink:href="#glyph1-27" x="517" y="710"/>
+  <use xlink:href="#glyph1-5" x="524" y="710"/>
+  <use xlink:href="#glyph1-14" x="531" y="710"/>
+  <use xlink:href="#glyph1-3" x="535" y="710"/>
+  <use xlink:href="#glyph1-27" x="546" y="710"/>
+  <use xlink:href="#glyph1-8" x="553" y="710"/>
+  <use xlink:href="#glyph1-6" x="561" y="710"/>
+  <use xlink:href="#glyph1-14" x="569" y="710"/>
+  <use xlink:href="#glyph1-25" x="573" y="710"/>
+  <use xlink:href="#glyph1-21" x="576" y="710"/>
+  <use xlink:href="#glyph1-5" x="582" y="710"/>
+  <use xlink:href="#glyph1-14" x="589" y="710"/>
+  <use xlink:href="#glyph1-27" x="593" y="710"/>
+  <use xlink:href="#glyph1-4" x="600" y="710"/>
+  <use xlink:href="#glyph1-4" x="608" y="710"/>
+  <use xlink:href="#glyph1-6" x="616" y="710"/>
+  <use xlink:href="#glyph1-27" x="624" y="710"/>
+  <use xlink:href="#glyph1-28" x="631" y="710"/>
+  <use xlink:href="#glyph1-27" x="636" y="710"/>
+  <use xlink:href="#glyph1-23" x="643" y="710"/>
+  <use xlink:href="#glyph1-26" x="651" y="710"/>
+  <use xlink:href="#glyph1-6" x="658" y="710"/>
+  <use xlink:href="#glyph1-41" x="666" y="710"/>
+  <use xlink:href="#glyph1-14" x="670" y="710"/>
+  <use xlink:href="#glyph1-2" x="674" y="710"/>
+  <use xlink:href="#glyph1-28" x="683" y="710"/>
+  <use xlink:href="#glyph1-14" x="688" y="710"/>
+  <use xlink:href="#glyph1-3" x="692" y="710"/>
+  <use xlink:href="#glyph1-27" x="703" y="710"/>
+  <use xlink:href="#glyph1-20" x="710" y="710"/>
+  <use xlink:href="#glyph1-14" x="717" y="710"/>
+  <use xlink:href="#glyph1-38" x="721" y="710"/>
+  <use xlink:href="#glyph1-6" x="729" y="710"/>
+  <use xlink:href="#glyph1-28" x="737" y="710"/>
+  <use xlink:href="#glyph1-6" x="742" y="710"/>
+  <use xlink:href="#glyph1-27" x="750" y="710"/>
+  <use xlink:href="#glyph1-15" x="757" y="710"/>
+  <use xlink:href="#glyph1-21" x="763" y="710"/>
+  <use xlink:href="#glyph1-6" x="769" y="710"/>
+  <use xlink:href="#glyph1-28" x="777" y="710"/>
+  <use xlink:href="#glyph1-14" x="782" y="710"/>
+  <use xlink:href="#glyph1-3" x="786" y="710"/>
+  <use xlink:href="#glyph1-27" x="797" y="710"/>
+  <use xlink:href="#glyph1-46" x="804" y="710"/>
+  <use xlink:href="#glyph1-6" x="811" y="710"/>
+  <use xlink:href="#glyph1-14" x="819" y="710"/>
+  <use xlink:href="#glyph1-25" x="823" y="710"/>
+  <use xlink:href="#glyph1-21" x="826" y="710"/>
+  <use xlink:href="#glyph1-5" x="832" y="710"/>
+  <use xlink:href="#glyph1-14" x="839" y="710"/>
+  <use xlink:href="#glyph1-27" x="843" y="710"/>
+  <use xlink:href="#glyph1-4" x="850" y="710"/>
+  <use xlink:href="#glyph1-4" x="858" y="710"/>
+  <use xlink:href="#glyph1-6" x="866" y="710"/>
+  <use xlink:href="#glyph1-27" x="874" y="710"/>
+  <use xlink:href="#glyph1-28" x="881" y="710"/>
+  <use xlink:href="#glyph1-27" x="886" y="710"/>
+  <use xlink:href="#glyph1-23" x="893" y="710"/>
+  <use xlink:href="#glyph1-26" x="901" y="710"/>
+  <use xlink:href="#glyph1-6" x="908" y="710"/>
+  <use xlink:href="#glyph1-41" x="916" y="710"/>
+  <use xlink:href="#glyph1-14" x="920" y="710"/>
+  <use xlink:href="#glyph1-42" x="924" y="710"/>
+  <use xlink:href="#glyph1-25" x="936" y="710"/>
+  <use xlink:href="#glyph1-36" x="939" y="710"/>
+  <use xlink:href="#glyph1-36" x="943" y="710"/>
+  <use xlink:href="#glyph1-14" x="947" y="710"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-5" x="151" y="731"/>
+  <use xlink:href="#glyph1-4" x="158" y="731"/>
+  <use xlink:href="#glyph1-28" x="166" y="731"/>
+  <use xlink:href="#glyph1-25" x="171" y="731"/>
+  <use xlink:href="#glyph1-23" x="174" y="731"/>
+  <use xlink:href="#glyph1-40" x="182" y="731"/>
+  <use xlink:href="#glyph1-14" x="190" y="731"/>
+  <use xlink:href="#glyph1-15" x="194" y="731"/>
+  <use xlink:href="#glyph1-28" x="200" y="731"/>
+  <use xlink:href="#glyph1-2" x="205" y="731"/>
+  <use xlink:href="#glyph1-3" x="214" y="731"/>
+  <use xlink:href="#glyph1-14" x="225" y="731"/>
+  <use xlink:href="#glyph1-5" x="229" y="731"/>
+  <use xlink:href="#glyph1-2" x="236" y="731"/>
+  <use xlink:href="#glyph1-33" x="245" y="731"/>
+  <use xlink:href="#glyph1-28" x="253" y="731"/>
+  <use xlink:href="#glyph1-26" x="258" y="731"/>
+  <use xlink:href="#glyph1-6" x="265" y="731"/>
+  <use xlink:href="#glyph1-5" x="273" y="731"/>
+  <use xlink:href="#glyph1-41" x="280" y="731"/>
+  <use xlink:href="#glyph1-14" x="284" y="731"/>
+  <use xlink:href="#glyph1-19" x="288" y="731"/>
+  <use xlink:href="#glyph1-36" x="296" y="731"/>
+  <use xlink:href="#glyph1-27" x="300" y="731"/>
+  <use xlink:href="#glyph1-3" x="307" y="731"/>
+  <use xlink:href="#glyph1-6" x="318" y="731"/>
+  <use xlink:href="#glyph1-36" x="326" y="731"/>
+  <use xlink:href="#glyph1-6" x="330" y="731"/>
+  <use xlink:href="#glyph1-5" x="338" y="731"/>
+  <use xlink:href="#glyph1-5" x="345" y="731"/>
+  <use xlink:href="#glyph1-14" x="352" y="731"/>
+  <use xlink:href="#glyph1-27" x="356" y="731"/>
+  <use xlink:href="#glyph1-21" x="363" y="731"/>
+  <use xlink:href="#glyph1-14" x="369" y="731"/>
+  <use xlink:href="#glyph1-36" x="373" y="731"/>
+  <use xlink:href="#glyph1-6" x="377" y="731"/>
+  <use xlink:href="#glyph1-27" x="385" y="731"/>
+  <use xlink:href="#glyph1-5" x="392" y="731"/>
+  <use xlink:href="#glyph1-21" x="399" y="731"/>
+  <use xlink:href="#glyph1-41" x="405" y="731"/>
+  <use xlink:href="#glyph1-14" x="409" y="731"/>
+  <use xlink:href="#glyph1-25" x="413" y="731"/>
+  <use xlink:href="#glyph1-15" x="416" y="731"/>
+  <use xlink:href="#glyph1-14" x="422" y="731"/>
+  <use xlink:href="#glyph1-23" x="426" y="731"/>
+  <use xlink:href="#glyph1-2" x="434" y="731"/>
+  <use xlink:href="#glyph1-21" x="443" y="731"/>
+  <use xlink:href="#glyph1-14" x="449" y="731"/>
+  <use xlink:href="#glyph1-28" x="453" y="731"/>
+  <use xlink:href="#glyph1-6" x="458" y="731"/>
+  <use xlink:href="#glyph1-5" x="466" y="731"/>
+  <use xlink:href="#glyph1-4" x="473" y="731"/>
+  <use xlink:href="#glyph1-6" x="481" y="731"/>
+  <use xlink:href="#glyph1-26" x="489" y="731"/>
+  <use xlink:href="#glyph1-21" x="496" y="731"/>
+  <use xlink:href="#glyph1-27" x="502" y="731"/>
+  <use xlink:href="#glyph1-19" x="509" y="731"/>
+  <use xlink:href="#glyph1-36" x="517" y="731"/>
+  <use xlink:href="#glyph1-6" x="521" y="731"/>
+  <use xlink:href="#glyph1-58" x="529" y="731"/>
+  <use xlink:href="#glyph1-58" x="535" y="731"/>
+  <use xlink:href="#glyph1-21" x="541" y="731"/>
+  <use xlink:href="#glyph1-38" x="547" y="731"/>
+  <use xlink:href="#glyph1-6" x="555" y="731"/>
+  <use xlink:href="#glyph1-14" x="563" y="731"/>
+  <use xlink:href="#glyph1-38" x="567" y="731"/>
+  <use xlink:href="#glyph1-2" x="575" y="731"/>
+  <use xlink:href="#glyph1-23" x="584" y="731"/>
+  <use xlink:href="#glyph1-6" x="592" y="731"/>
+  <use xlink:href="#glyph1-5" x="600" y="731"/>
+  <use xlink:href="#glyph1-21" x="607" y="731"/>
+  <use xlink:href="#glyph1-14" x="613" y="731"/>
+  <use xlink:href="#glyph1-6" x="617" y="731"/>
+  <use xlink:href="#glyph1-28" x="625" y="731"/>
+  <use xlink:href="#glyph1-28" x="630" y="731"/>
+  <use xlink:href="#glyph1-2" x="635" y="731"/>
+  <use xlink:href="#glyph1-28" x="644" y="731"/>
+  <use xlink:href="#glyph1-5" x="649" y="731"/>
+  <use xlink:href="#glyph1-14" x="656" y="731"/>
+  <use xlink:href="#glyph1-2" x="660" y="731"/>
+  <use xlink:href="#glyph1-15" x="669" y="731"/>
+  <use xlink:href="#glyph1-14" x="675" y="731"/>
+  <use xlink:href="#glyph1-3" x="679" y="731"/>
+  <use xlink:href="#glyph1-25" x="690" y="731"/>
+  <use xlink:href="#glyph1-23" x="693" y="731"/>
+  <use xlink:href="#glyph1-8" x="701" y="731"/>
+  <use xlink:href="#glyph1-5" x="709" y="731"/>
+  <use xlink:href="#glyph1-14" x="716" y="731"/>
+  <use xlink:href="#glyph1-36" x="720" y="731"/>
+  <use xlink:href="#glyph1-6" x="724" y="731"/>
+  <use xlink:href="#glyph1-8" x="732" y="731"/>
+  <use xlink:href="#glyph1-14" x="740" y="731"/>
+  <use xlink:href="#glyph1-27" x="744" y="731"/>
+  <use xlink:href="#glyph1-5" x="751" y="731"/>
+  <use xlink:href="#glyph1-21" x="758" y="731"/>
+  <use xlink:href="#glyph1-28" x="764" y="731"/>
+  <use xlink:href="#glyph1-27" x="769" y="731"/>
+  <use xlink:href="#glyph1-20" x="776" y="731"/>
+  <use xlink:href="#glyph1-14" x="783" y="731"/>
+  <use xlink:href="#glyph1-19" x="787" y="731"/>
+  <use xlink:href="#glyph1-20" x="795" y="731"/>
+  <use xlink:href="#glyph1-14" x="802" y="731"/>
+  <use xlink:href="#glyph1-4" x="806" y="731"/>
+  <use xlink:href="#glyph1-28" x="814" y="731"/>
+  <use xlink:href="#glyph1-6" x="819" y="731"/>
+  <use xlink:href="#glyph1-26" x="827" y="731"/>
+  <use xlink:href="#glyph1-2" x="834" y="731"/>
+  <use xlink:href="#glyph1-23" x="843" y="731"/>
+  <use xlink:href="#glyph1-26" x="851" y="731"/>
+  <use xlink:href="#glyph1-6" x="858" y="731"/>
+  <use xlink:href="#glyph1-25" x="866" y="731"/>
+  <use xlink:href="#glyph1-35" x="869" y="731"/>
+  <use xlink:href="#glyph1-6" x="876" y="731"/>
+  <use xlink:href="#glyph1-8" x="884" y="731"/>
+  <use xlink:href="#glyph1-14" x="892" y="731"/>
+  <use xlink:href="#glyph1-45" x="896" y="731"/>
+  <use xlink:href="#glyph1-6" x="899" y="731"/>
+  <use xlink:href="#glyph1-27" x="907" y="731"/>
+  <use xlink:href="#glyph1-36" x="914" y="731"/>
+  <use xlink:href="#glyph1-2" x="918" y="731"/>
+  <use xlink:href="#glyph1-33" x="927" y="731"/>
+  <use xlink:href="#glyph1-5" x="935" y="731"/>
+  <use xlink:href="#glyph1-25" x="942" y="731"/>
+  <use xlink:href="#glyph1-6" x="945" y="731"/>
+  <use xlink:href="#glyph1-5" x="953" y="731"/>
+  <use xlink:href="#glyph1-14" x="960" y="731"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="151" y="752"/>
+  <use xlink:href="#glyph1-23" x="158" y="752"/>
+  <use xlink:href="#glyph1-8" x="166" y="752"/>
+  <use xlink:href="#glyph1-14" x="174" y="752"/>
+  <use xlink:href="#glyph1-15" x="178" y="752"/>
+  <use xlink:href="#glyph1-6" x="184" y="752"/>
+  <use xlink:href="#glyph1-27" x="192" y="752"/>
+  <use xlink:href="#glyph1-28" x="199" y="752"/>
+  <use xlink:href="#glyph1-5" x="204" y="752"/>
+  <use xlink:href="#glyph1-44" x="211" y="752"/>
+  <use xlink:href="#glyph1-14" x="214" y="752"/>
+  <use xlink:href="#glyph1-22" x="218" y="752"/>
+  <use xlink:href="#glyph1-2" x="227" y="752"/>
+  <use xlink:href="#glyph1-14" x="236" y="752"/>
+  <use xlink:href="#glyph1-23" x="240" y="752"/>
+  <use xlink:href="#glyph1-33" x="248" y="752"/>
+  <use xlink:href="#glyph1-3" x="256" y="752"/>
+  <use xlink:href="#glyph1-6" x="267" y="752"/>
+  <use xlink:href="#glyph1-28" x="275" y="752"/>
+  <use xlink:href="#glyph1-2" x="280" y="752"/>
+  <use xlink:href="#glyph1-33" x="289" y="752"/>
+  <use xlink:href="#glyph1-5" x="297" y="752"/>
+  <use xlink:href="#glyph1-14" x="304" y="752"/>
+  <use xlink:href="#glyph1-25" x="308" y="752"/>
+  <use xlink:href="#glyph1-23" x="311" y="752"/>
+  <use xlink:href="#glyph1-8" x="319" y="752"/>
+  <use xlink:href="#glyph1-6" x="327" y="752"/>
+  <use xlink:href="#glyph1-6" x="335" y="752"/>
+  <use xlink:href="#glyph1-8" x="343" y="752"/>
+  <use xlink:href="#glyph1-14" x="351" y="752"/>
+  <use xlink:href="#glyph1-27" x="355" y="752"/>
+  <use xlink:href="#glyph1-23" x="362" y="752"/>
+  <use xlink:href="#glyph1-8" x="370" y="752"/>
+  <use xlink:href="#glyph1-14" x="378" y="752"/>
+  <use xlink:href="#glyph1-5" x="382" y="752"/>
+  <use xlink:href="#glyph1-2" x="389" y="752"/>
+  <use xlink:href="#glyph1-14" x="398" y="752"/>
+  <use xlink:href="#glyph1-4" x="402" y="752"/>
+  <use xlink:href="#glyph1-2" x="410" y="752"/>
+  <use xlink:href="#glyph1-42" x="419" y="752"/>
+  <use xlink:href="#glyph1-6" x="431" y="752"/>
+  <use xlink:href="#glyph1-28" x="439" y="752"/>
+  <use xlink:href="#glyph1-15" x="444" y="752"/>
+  <use xlink:href="#glyph1-33" x="450" y="752"/>
+  <use xlink:href="#glyph1-36" x="458" y="752"/>
+  <use xlink:href="#glyph1-14" x="462" y="752"/>
+  <use xlink:href="#glyph1-27" x="466" y="752"/>
+  <use xlink:href="#glyph1-28" x="473" y="752"/>
+  <use xlink:href="#glyph1-6" x="478" y="752"/>
+  <use xlink:href="#glyph1-14" x="486" y="752"/>
+  <use xlink:href="#glyph1-21" x="490" y="752"/>
+  <use xlink:href="#glyph1-38" x="496" y="752"/>
+  <use xlink:href="#glyph1-6" x="504" y="752"/>
+  <use xlink:href="#glyph1-14" x="512" y="752"/>
+  <use xlink:href="#glyph1-26" x="516" y="752"/>
+  <use xlink:href="#glyph1-27" x="523" y="752"/>
+  <use xlink:href="#glyph1-33" x="530" y="752"/>
+  <use xlink:href="#glyph1-5" x="538" y="752"/>
+  <use xlink:href="#glyph1-6" x="545" y="752"/>
+  <use xlink:href="#glyph1-5" x="553" y="752"/>
+  <use xlink:href="#glyph1-14" x="560" y="752"/>
+  <use xlink:href="#glyph1-42" x="564" y="752"/>
+  <use xlink:href="#glyph1-38" x="576" y="752"/>
+  <use xlink:href="#glyph1-25" x="584" y="752"/>
+  <use xlink:href="#glyph1-26" x="587" y="752"/>
+  <use xlink:href="#glyph1-38" x="594" y="752"/>
+  <use xlink:href="#glyph1-14" x="602" y="752"/>
+  <use xlink:href="#glyph1-5" x="606" y="752"/>
+  <use xlink:href="#glyph1-6" x="613" y="752"/>
+  <use xlink:href="#glyph1-28" x="621" y="752"/>
+  <use xlink:href="#glyph1-35" x="626" y="752"/>
+  <use xlink:href="#glyph1-6" x="633" y="752"/>
+  <use xlink:href="#glyph1-14" x="641" y="752"/>
+  <use xlink:href="#glyph1-21" x="645" y="752"/>
+  <use xlink:href="#glyph1-2" x="651" y="752"/>
+  <use xlink:href="#glyph1-14" x="660" y="752"/>
+  <use xlink:href="#glyph1-40" x="664" y="752"/>
+  <use xlink:href="#glyph1-25" x="672" y="752"/>
+  <use xlink:href="#glyph1-35" x="675" y="752"/>
+  <use xlink:href="#glyph1-6" x="682" y="752"/>
+  <use xlink:href="#glyph1-14" x="690" y="752"/>
+  <use xlink:href="#glyph1-27" x="694" y="752"/>
+  <use xlink:href="#glyph1-14" x="701" y="752"/>
+  <use xlink:href="#glyph1-15" x="705" y="752"/>
+  <use xlink:href="#glyph1-27" x="711" y="752"/>
+  <use xlink:href="#glyph1-36" x="718" y="752"/>
+  <use xlink:href="#glyph1-5" x="722" y="752"/>
+  <use xlink:href="#glyph1-6" x="729" y="752"/>
+  <use xlink:href="#glyph1-14" x="737" y="752"/>
+  <use xlink:href="#glyph1-19" x="741" y="752"/>
+  <use xlink:href="#glyph1-25" x="749" y="752"/>
+  <use xlink:href="#glyph1-27" x="752" y="752"/>
+  <use xlink:href="#glyph1-5" x="759" y="752"/>
+  <use xlink:href="#glyph1-14" x="766" y="752"/>
+  <use xlink:href="#glyph1-21" x="770" y="752"/>
+  <use xlink:href="#glyph1-2" x="776" y="752"/>
+  <use xlink:href="#glyph1-14" x="785" y="752"/>
+  <use xlink:href="#glyph1-21" x="789" y="752"/>
+  <use xlink:href="#glyph1-38" x="795" y="752"/>
+  <use xlink:href="#glyph1-6" x="803" y="752"/>
+  <use xlink:href="#glyph1-14" x="811" y="752"/>
+  <use xlink:href="#glyph1-45" x="815" y="752"/>
+  <use xlink:href="#glyph1-33" x="818" y="752"/>
+  <use xlink:href="#glyph1-8" x="826" y="752"/>
+  <use xlink:href="#glyph1-40" x="834" y="752"/>
+  <use xlink:href="#glyph1-3" x="842" y="752"/>
+  <use xlink:href="#glyph1-6" x="853" y="752"/>
+  <use xlink:href="#glyph1-23" x="861" y="752"/>
+  <use xlink:href="#glyph1-21" x="869" y="752"/>
+  <use xlink:href="#glyph1-41" x="875" y="752"/>
+  <use xlink:href="#glyph1-14" x="879" y="752"/>
+  <use xlink:href="#glyph1-21" x="883" y="752"/>
+  <use xlink:href="#glyph1-38" x="889" y="752"/>
+  <use xlink:href="#glyph1-27" x="897" y="752"/>
+  <use xlink:href="#glyph1-21" x="904" y="752"/>
+  <use xlink:href="#glyph1-14" x="910" y="752"/>
+  <use xlink:href="#glyph1-42" x="914" y="752"/>
+  <use xlink:href="#glyph1-6" x="926" y="752"/>
+  <use xlink:href="#glyph1-41" x="934" y="752"/>
+  <use xlink:href="#glyph1-14" x="938" y="752"/>
+  <use xlink:href="#glyph1-33" x="942" y="752"/>
+  <use xlink:href="#glyph1-4" x="950" y="752"/>
+  <use xlink:href="#glyph1-2" x="958" y="752"/>
+  <use xlink:href="#glyph1-23" x="967" y="752"/>
+  <use xlink:href="#glyph1-14" x="975" y="752"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-3" x="151" y="773"/>
+  <use xlink:href="#glyph1-27" x="162" y="773"/>
+  <use xlink:href="#glyph1-23" x="169" y="773"/>
+  <use xlink:href="#glyph1-20" x="177" y="773"/>
+  <use xlink:href="#glyph1-14" x="184" y="773"/>
+  <use xlink:href="#glyph1-2" x="188" y="773"/>
+  <use xlink:href="#glyph1-26" x="197" y="773"/>
+  <use xlink:href="#glyph1-26" x="204" y="773"/>
+  <use xlink:href="#glyph1-27" x="211" y="773"/>
+  <use xlink:href="#glyph1-5" x="218" y="773"/>
+  <use xlink:href="#glyph1-25" x="225" y="773"/>
+  <use xlink:href="#glyph1-2" x="228" y="773"/>
+  <use xlink:href="#glyph1-23" x="237" y="773"/>
+  <use xlink:href="#glyph1-5" x="245" y="773"/>
+  <use xlink:href="#glyph1-41" x="252" y="773"/>
+  <use xlink:href="#glyph1-14" x="256" y="773"/>
+  <use xlink:href="#glyph1-5" x="260" y="773"/>
+  <use xlink:href="#glyph1-6" x="267" y="773"/>
+  <use xlink:href="#glyph1-6" x="275" y="773"/>
+  <use xlink:href="#glyph1-14" x="283" y="773"/>
+  <use xlink:href="#glyph1-42" x="287" y="773"/>
+  <use xlink:href="#glyph1-25" x="299" y="773"/>
+  <use xlink:href="#glyph1-5" x="302" y="773"/>
+  <use xlink:href="#glyph1-6" x="309" y="773"/>
+  <use xlink:href="#glyph1-14" x="317" y="773"/>
+  <use xlink:href="#glyph1-27" x="321" y="773"/>
+  <use xlink:href="#glyph1-23" x="328" y="773"/>
+  <use xlink:href="#glyph1-8" x="336" y="773"/>
+  <use xlink:href="#glyph1-14" x="344" y="773"/>
+  <use xlink:href="#glyph1-40" x="348" y="773"/>
+  <use xlink:href="#glyph1-2" x="356" y="773"/>
+  <use xlink:href="#glyph1-2" x="365" y="773"/>
+  <use xlink:href="#glyph1-8" x="374" y="773"/>
+  <use xlink:href="#glyph1-14" x="382" y="773"/>
+  <use xlink:href="#glyph1-3" x="386" y="773"/>
+  <use xlink:href="#glyph1-6" x="397" y="773"/>
+  <use xlink:href="#glyph1-23" x="405" y="773"/>
+  <use xlink:href="#glyph1-14" x="413" y="773"/>
+  <use xlink:href="#glyph1-2" x="417" y="773"/>
+  <use xlink:href="#glyph1-23" x="426" y="773"/>
+  <use xlink:href="#glyph1-14" x="434" y="773"/>
+  <use xlink:href="#glyph1-21" x="438" y="773"/>
+  <use xlink:href="#glyph1-38" x="444" y="773"/>
+  <use xlink:href="#glyph1-6" x="452" y="773"/>
+  <use xlink:href="#glyph1-14" x="460" y="773"/>
+  <use xlink:href="#glyph1-42" x="464" y="773"/>
+  <use xlink:href="#glyph1-28" x="476" y="773"/>
+  <use xlink:href="#glyph1-2" x="481" y="773"/>
+  <use xlink:href="#glyph1-23" x="490" y="773"/>
+  <use xlink:href="#glyph1-40" x="498" y="773"/>
+  <use xlink:href="#glyph1-14" x="506" y="773"/>
+  <use xlink:href="#glyph1-27" x="510" y="773"/>
+  <use xlink:href="#glyph1-5" x="517" y="773"/>
+  <use xlink:href="#glyph1-14" x="524" y="773"/>
+  <use xlink:href="#glyph1-42" x="528" y="773"/>
+  <use xlink:href="#glyph1-6" x="540" y="773"/>
+  <use xlink:href="#glyph1-36" x="548" y="773"/>
+  <use xlink:href="#glyph1-36" x="552" y="773"/>
+  <use xlink:href="#glyph1-14" x="556" y="773"/>
+  <use xlink:href="#glyph1-27" x="560" y="773"/>
+  <use xlink:href="#glyph1-5" x="567" y="773"/>
+  <use xlink:href="#glyph1-14" x="574" y="773"/>
+  <use xlink:href="#glyph1-2" x="578" y="773"/>
+  <use xlink:href="#glyph1-23" x="587" y="773"/>
+  <use xlink:href="#glyph1-14" x="595" y="773"/>
+  <use xlink:href="#glyph1-21" x="599" y="773"/>
+  <use xlink:href="#glyph1-38" x="605" y="773"/>
+  <use xlink:href="#glyph1-6" x="613" y="773"/>
+  <use xlink:href="#glyph1-14" x="621" y="773"/>
+  <use xlink:href="#glyph1-28" x="625" y="773"/>
+  <use xlink:href="#glyph1-25" x="630" y="773"/>
+  <use xlink:href="#glyph1-40" x="633" y="773"/>
+  <use xlink:href="#glyph1-38" x="641" y="773"/>
+  <use xlink:href="#glyph1-21" x="649" y="773"/>
+  <use xlink:href="#glyph1-14" x="655" y="773"/>
+  <use xlink:href="#glyph1-5" x="659" y="773"/>
+  <use xlink:href="#glyph1-25" x="666" y="773"/>
+  <use xlink:href="#glyph1-8" x="669" y="773"/>
+  <use xlink:href="#glyph1-6" x="677" y="773"/>
+  <use xlink:href="#glyph1-14" x="685" y="773"/>
+  <use xlink:href="#glyph1-2" x="689" y="773"/>
+  <use xlink:href="#glyph1-15" x="698" y="773"/>
+  <use xlink:href="#glyph1-14" x="704" y="773"/>
+  <use xlink:href="#glyph1-34" x="708" y="773"/>
+  <use xlink:href="#glyph1-33" x="716" y="773"/>
+  <use xlink:href="#glyph1-6" x="724" y="773"/>
+  <use xlink:href="#glyph1-5" x="732" y="773"/>
+  <use xlink:href="#glyph1-21" x="739" y="773"/>
+  <use xlink:href="#glyph1-25" x="745" y="773"/>
+  <use xlink:href="#glyph1-2" x="748" y="773"/>
+  <use xlink:href="#glyph1-23" x="757" y="773"/>
+  <use xlink:href="#glyph1-5" x="765" y="773"/>
+  <use xlink:href="#glyph1-14" x="772" y="773"/>
+  <use xlink:href="#glyph1-2" x="776" y="773"/>
+  <use xlink:href="#glyph1-15" x="785" y="773"/>
+  <use xlink:href="#glyph1-14" x="791" y="773"/>
+  <use xlink:href="#glyph1-21" x="795" y="773"/>
+  <use xlink:href="#glyph1-38" x="801" y="773"/>
+  <use xlink:href="#glyph1-6" x="809" y="773"/>
+  <use xlink:href="#glyph1-14" x="817" y="773"/>
+  <use xlink:href="#glyph1-59" x="821" y="773"/>
+  <use xlink:href="#glyph1-28" x="829" y="773"/>
+  <use xlink:href="#glyph1-5" x="834" y="773"/>
+  <use xlink:href="#glyph1-21" x="841" y="773"/>
+  <use xlink:href="#glyph1-14" x="847" y="773"/>
+  <use xlink:href="#glyph1-3" x="851" y="773"/>
+  <use xlink:href="#glyph1-27" x="862" y="773"/>
+  <use xlink:href="#glyph1-40" x="869" y="773"/>
+  <use xlink:href="#glyph1-23" x="877" y="773"/>
+  <use xlink:href="#glyph1-25" x="885" y="773"/>
+  <use xlink:href="#glyph1-21" x="888" y="773"/>
+  <use xlink:href="#glyph1-33" x="894" y="773"/>
+  <use xlink:href="#glyph1-8" x="902" y="773"/>
+  <use xlink:href="#glyph1-6" x="910" y="773"/>
+  <use xlink:href="#glyph1-14" x="918" y="773"/>
+  <use xlink:href="#glyph1-21" x="922" y="773"/>
+  <use xlink:href="#glyph1-2" x="928" y="773"/>
+  <use xlink:href="#glyph1-14" x="937" y="773"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-5" x="151" y="794"/>
+  <use xlink:href="#glyph1-2" x="158" y="794"/>
+  <use xlink:href="#glyph1-26" x="167" y="794"/>
+  <use xlink:href="#glyph1-25" x="174" y="794"/>
+  <use xlink:href="#glyph1-6" x="177" y="794"/>
+  <use xlink:href="#glyph1-21" x="185" y="794"/>
+  <use xlink:href="#glyph1-20" x="191" y="794"/>
+  <use xlink:href="#glyph1-44" x="198" y="794"/>
+  <use xlink:href="#glyph1-14" x="201" y="794"/>
+  <use xlink:href="#glyph1-30" x="205" y="794"/>
+  <use xlink:href="#glyph1-38" x="215" y="794"/>
+  <use xlink:href="#glyph1-25" x="223" y="794"/>
+  <use xlink:href="#glyph1-5" x="226" y="794"/>
+  <use xlink:href="#glyph1-14" x="233" y="794"/>
+  <use xlink:href="#glyph1-26" x="237" y="794"/>
+  <use xlink:href="#glyph1-25" x="244" y="794"/>
+  <use xlink:href="#glyph1-28" x="247" y="794"/>
+  <use xlink:href="#glyph1-26" x="252" y="794"/>
+  <use xlink:href="#glyph1-33" x="259" y="794"/>
+  <use xlink:href="#glyph1-3" x="267" y="794"/>
+  <use xlink:href="#glyph1-5" x="278" y="794"/>
+  <use xlink:href="#glyph1-21" x="285" y="794"/>
+  <use xlink:href="#glyph1-27" x="291" y="794"/>
+  <use xlink:href="#glyph1-23" x="298" y="794"/>
+  <use xlink:href="#glyph1-26" x="306" y="794"/>
+  <use xlink:href="#glyph1-6" x="313" y="794"/>
+  <use xlink:href="#glyph1-41" x="321" y="794"/>
+  <use xlink:href="#glyph1-14" x="325" y="794"/>
+  <use xlink:href="#glyph1-25" x="329" y="794"/>
+  <use xlink:href="#glyph1-15" x="332" y="794"/>
+  <use xlink:href="#glyph1-14" x="338" y="794"/>
+  <use xlink:href="#glyph1-8" x="342" y="794"/>
+  <use xlink:href="#glyph1-33" x="350" y="794"/>
+  <use xlink:href="#glyph1-36" x="358" y="794"/>
+  <use xlink:href="#glyph1-20" x="362" y="794"/>
+  <use xlink:href="#glyph1-14" x="369" y="794"/>
+  <use xlink:href="#glyph1-27" x="373" y="794"/>
+  <use xlink:href="#glyph1-21" x="380" y="794"/>
+  <use xlink:href="#glyph1-21" x="386" y="794"/>
+  <use xlink:href="#glyph1-6" x="392" y="794"/>
+  <use xlink:href="#glyph1-23" x="400" y="794"/>
+  <use xlink:href="#glyph1-8" x="408" y="794"/>
+  <use xlink:href="#glyph1-6" x="416" y="794"/>
+  <use xlink:href="#glyph1-8" x="424" y="794"/>
+  <use xlink:href="#glyph1-14" x="432" y="794"/>
+  <use xlink:href="#glyph1-21" x="436" y="794"/>
+  <use xlink:href="#glyph1-2" x="442" y="794"/>
+  <use xlink:href="#glyph1-41" x="451" y="794"/>
+  <use xlink:href="#glyph1-14" x="455" y="794"/>
+  <use xlink:href="#glyph1-42" x="459" y="794"/>
+  <use xlink:href="#glyph1-2" x="471" y="794"/>
+  <use xlink:href="#glyph1-33" x="480" y="794"/>
+  <use xlink:href="#glyph1-36" x="488" y="794"/>
+  <use xlink:href="#glyph1-8" x="492" y="794"/>
+  <use xlink:href="#glyph1-14" x="500" y="794"/>
+  <use xlink:href="#glyph1-15" x="504" y="794"/>
+  <use xlink:href="#glyph1-33" x="510" y="794"/>
+  <use xlink:href="#glyph1-28" x="518" y="794"/>
+  <use xlink:href="#glyph1-23" x="523" y="794"/>
+  <use xlink:href="#glyph1-25" x="531" y="794"/>
+  <use xlink:href="#glyph1-5" x="534" y="794"/>
+  <use xlink:href="#glyph1-38" x="541" y="794"/>
+  <use xlink:href="#glyph1-14" x="549" y="794"/>
+  <use xlink:href="#glyph1-27" x="553" y="794"/>
+  <use xlink:href="#glyph1-14" x="560" y="794"/>
+  <use xlink:href="#glyph1-36" x="564" y="794"/>
+  <use xlink:href="#glyph1-6" x="568" y="794"/>
+  <use xlink:href="#glyph1-5" x="576" y="794"/>
+  <use xlink:href="#glyph1-5" x="583" y="794"/>
+  <use xlink:href="#glyph1-2" x="590" y="794"/>
+  <use xlink:href="#glyph1-23" x="599" y="794"/>
+  <use xlink:href="#glyph1-14" x="607" y="794"/>
+  <use xlink:href="#glyph1-2" x="611" y="794"/>
+  <use xlink:href="#glyph1-15" x="620" y="794"/>
+  <use xlink:href="#glyph1-14" x="626" y="794"/>
+  <use xlink:href="#glyph1-3" x="630" y="794"/>
+  <use xlink:href="#glyph1-2" x="641" y="794"/>
+  <use xlink:href="#glyph1-8" x="650" y="794"/>
+  <use xlink:href="#glyph1-6" x="658" y="794"/>
+  <use xlink:href="#glyph1-28" x="666" y="794"/>
+  <use xlink:href="#glyph1-27" x="671" y="794"/>
+  <use xlink:href="#glyph1-21" x="678" y="794"/>
+  <use xlink:href="#glyph1-25" x="684" y="794"/>
+  <use xlink:href="#glyph1-2" x="687" y="794"/>
+  <use xlink:href="#glyph1-23" x="696" y="794"/>
+  <use xlink:href="#glyph1-14" x="704" y="794"/>
+  <use xlink:href="#glyph1-21" x="708" y="794"/>
+  <use xlink:href="#glyph1-2" x="714" y="794"/>
+  <use xlink:href="#glyph1-14" x="723" y="794"/>
+  <use xlink:href="#glyph1-21" x="727" y="794"/>
+  <use xlink:href="#glyph1-38" x="733" y="794"/>
+  <use xlink:href="#glyph1-2" x="741" y="794"/>
+  <use xlink:href="#glyph1-5" x="750" y="794"/>
+  <use xlink:href="#glyph1-6" x="757" y="794"/>
+  <use xlink:href="#glyph1-14" x="765" y="794"/>
+  <use xlink:href="#glyph1-42" x="769" y="794"/>
+  <use xlink:href="#glyph1-38" x="781" y="794"/>
+  <use xlink:href="#glyph1-2" x="789" y="794"/>
+  <use xlink:href="#glyph1-14" x="798" y="794"/>
+  <use xlink:href="#glyph1-27" x="802" y="794"/>
+  <use xlink:href="#glyph1-28" x="809" y="794"/>
+  <use xlink:href="#glyph1-6" x="814" y="794"/>
+  <use xlink:href="#glyph1-14" x="822" y="794"/>
+  <use xlink:href="#glyph1-6" x="826" y="794"/>
+  <use xlink:href="#glyph1-35" x="834" y="794"/>
+  <use xlink:href="#glyph1-6" x="841" y="794"/>
+  <use xlink:href="#glyph1-28" x="849" y="794"/>
+  <use xlink:href="#glyph1-14" x="854" y="794"/>
+  <use xlink:href="#glyph1-5" x="858" y="794"/>
+  <use xlink:href="#glyph1-2" x="865" y="794"/>
+  <use xlink:href="#glyph1-14" x="874" y="794"/>
+  <use xlink:href="#glyph1-3" x="878" y="794"/>
+  <use xlink:href="#glyph1-33" x="889" y="794"/>
+  <use xlink:href="#glyph1-26" x="897" y="794"/>
+  <use xlink:href="#glyph1-38" x="904" y="794"/>
+  <use xlink:href="#glyph1-14" x="912" y="794"/>
+</g>
+<g clip-path="url(#clip34)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(83.647059%,83.647059%,83.647059%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip35)" clip-rule="nonzero">
+<g clip-path="url(#clip36)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(60.684314%,61.507843%,61.782353%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+</g>
+</svg>
diff --git a/doc/images/create-account.svg b/doc/images/create-account.svg
new file mode 100644
index 0000000..3236495
--- /dev/null
+++ b/doc/images/create-account.svg
@@ -0,0 +1,786 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="818pt" height="468pt" viewBox="0 0 818 468" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 2 7 L 2 -28 L 22 -28 L 22 7 Z M 4 5 L 20 5 L 20 -26 L 4 -26 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 10 -15 L 15.6875 -15 C 17.738281 -15 19.300781 -15.515625 20.375 -16.546875 C 21.457031 -17.578125 22 -19.0625 22 -21 C 22 -22.957031 21.457031 -24.445312 20.375 -25.46875 C 19.300781 -26.488281 17.738281 -27 15.6875 -27 L 10 -27 Z M 2 0 L 2 -2 L 6 -2 L 6 -27 L 2 -27 L 2 -29 L 16.703125 -29 C 19.554688 -29 21.816406 -28.273438 23.484375 -26.828125 C 25.160156 -25.390625 26 -23.445312 26 -21 C 26 -18.5625 25.160156 -16.617188 23.484375 -15.171875 C 21.81640 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 12 -2 C 13.976562 -2 15.472656 -2.757812 16.484375 -4.28125 C 17.492188 -5.800781 18 -8.046875 18 -11.015625 C 18 -13.972656 17.492188 -16.207031 16.484375 -17.71875 C 15.472656 -19.238281 13.976562 -20 12 -20 C 10.019531 -20 8.523438 -19.238281 7.515625 -17.71875 C 6.503906 -16.207031 6 -13.972656 6 -11.015625 C 6 -8.046875 6.503906 -5.800781 7.515625 -4.28125 C 8.535156 -2.757812 10.03125 -2 12 -2 Z M 12 0 C 8.988281 0 6.566406 -1.003906 4.734375 -3.0156 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 2 0 L 2 -2 L 5 -2 L 5 -19 L 2 -19 L 2 -21 L 9 -21 L 9 -17.359375 C 9.664062 -18.890625 10.53125 -20.046875 11.59375 -20.828125 C 12.65625 -21.609375 13.890625 -22 15.296875 -22 C 17.597656 -22 19.289062 -21.300781 20.375 -19.90625 C 21.457031 -18.519531 22 -16.351562 22 -13.40625 L 22 -2 L 25 -2 L 25 0 L 15 0 L 15 -2 L 18 -2 L 18 -12.234375 C 18 -15.203125 17.695312 -17.238281 17.09375 -18.34375 C 16.5 -19.445312 15.441406 -20 13.921875 -20 C 12.316406 -20 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 21 -2 L 24 -2 L 24 0 L 17 0 L 17 -3.234375 C 16.3125 -2.128906 15.4375 -1.3125 14.375 -0.78125 C 13.320312 -0.257812 12.015625 0 10.453125 0 C 7.972656 0 5.941406 -1.015625 4.359375 -3.046875 C 2.785156 -5.085938 2 -7.742188 2 -11.015625 C 2 -14.285156 2.785156 -16.929688 4.359375 -18.953125 C 5.929688 -20.984375 7.960938 -22 10.453125 -22 C 12.015625 -22 13.320312 -21.703125 14.375 -21.109375 C 15.4375 -20.515625 16.3125 -19.59375 17 -18.34375 L 17 -28 L  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 2 7 L 2 -28 L 22 -28 L 22 7 Z M 4 5 L 20 5 L 20 -26 L 4 -26 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 26 -27 L 26 -23 C 24.625 -24.34375 23.160156 -25.34375 21.609375 -26 C 20.054688 -26.664062 18.40625 -27 16.65625 -27 C 13.207031 -27 10.566406 -25.96875 8.734375 -23.90625 C 6.910156 -21.851562 6 -18.878906 6 -14.984375 C 6 -11.109375 6.910156 -8.140625 8.734375 -6.078125 C 10.566406 -4.023438 13.207031 -3 16.65625 -3 C 18.40625 -3 20.054688 -3.328125 21.609375 -3.984375 C 23.160156 -4.648438 24.625 -5.65625 26 -7 L 26 -3 C 24.59375 -2 23.097656 -1.25 21. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 17 -19 C 16.601562 -19.34375 16.171875 -19.59375 15.703125 -19.75 C 15.242188 -19.914062 14.734375 -20 14.171875 -20 C 12.179688 -20 10.65625 -19.296875 9.59375 -17.890625 C 8.53125 -16.484375 8 -14.46875 8 -11.84375 L 8 0 L 4 0 L 4 -22 L 8 -22 L 8 -19 C 8.738281 -20.351562 9.695312 -21.359375 10.875 -22.015625 C 12.0625 -22.671875 13.503906 -23 15.203125 -23 C 15.441406 -23 15.707031 -23 16 -23 C 16.300781 -23 16.628906 -23 16.984375 -23 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 22 -12.875 L 22 -11 L 6 -11 C 6.144531 -8.394531 6.851562 -6.410156 8.125 -5.046875 C 9.40625 -3.679688 11.1875 -3 13.46875 -3 C 14.789062 -3 16.070312 -3.164062 17.3125 -3.5 C 18.550781 -3.832031 19.78125 -4.332031 21 -5 L 21 -2 C 19.738281 -1.34375 18.445312 -0.84375 17.125 -0.5 C 15.800781 -0.164062 14.457031 0 13.09375 0 C 9.6875 0 6.984375 -1.015625 4.984375 -3.046875 C 2.992188 -5.085938 2 -7.835938 2 -11.296875 C 2 -14.890625 2.953125 -17.738281 4.8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 12.828125 -11 C 10.253906 -11 8.472656 -10.6875 7.484375 -10.0625 C 6.492188 -9.445312 6 -8.390625 6 -6.890625 C 6 -5.691406 6.367188 -4.742188 7.109375 -4.046875 C 7.859375 -3.347656 8.875 -3 10.15625 -3 C 11.914062 -3 13.328125 -3.660156 14.390625 -4.984375 C 15.460938 -6.304688 16 -8.066406 16 -10.265625 L 16 -11 Z M 20 -12.578125 L 20 0 L 16 0 L 16 -4 C 15.226562 -2.632812 14.265625 -1.625 13.109375 -0.96875 C 11.960938 -0.320312 10.554688 0 8.890625 0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 8 -28 L 8 -22 L 15 -22 L 15 -19 L 8 -19 L 8 -7.1875 C 8 -5.40625 8.226562 -4.257812 8.6875 -3.75 C 9.15625 -3.25 10.097656 -3 11.515625 -3 L 15 -3 L 15 0 L 11.515625 0 C 8.671875 0 6.707031 -0.515625 5.625 -1.546875 C 4.539062 -2.578125 4 -4.457031 4 -7.1875 L 4 -19 L 1 -19 L 1 -22 L 4 -22 L 4 -28 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 13.5 -23.75 L 8.5625 -11 L 18.453125 -11 Z M 11.25 -29 L 15.765625 -29 L 27 0 L 22.703125 0 L 19.625 -8 L 7.390625 -8 L 4.28125 0 L 0 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 19 -21 L 19 -18 C 18.019531 -18.664062 17.035156 -19.164062 16.046875 -19.5 C 15.066406 -19.832031 14.078125 -20 13.078125 -20 C 10.835938 -20 9.097656 -19.253906 7.859375 -17.765625 C 6.617188 -16.273438 6 -14.1875 6 -11.5 C 6 -8.8125 6.617188 -6.722656 7.859375 -5.234375 C 9.097656 -3.742188 10.835938 -3 13.078125 -3 C 14.078125 -3 15.066406 -3.164062 16.046875 -3.5 C 17.035156 -3.832031 18.019531 -4.332031 19 -5 L 19 -2 C 18.007812 -1.332031 16.988281 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 12.015625 -20 C 10.160156 -20 8.691406 -19.238281 7.609375 -17.71875 C 6.535156 -16.207031 6 -14.132812 6 -11.5 C 6 -8.863281 6.535156 -6.785156 7.609375 -5.265625 C 8.679688 -3.753906 10.148438 -3 12.015625 -3 C 13.847656 -3 15.300781 -3.757812 16.375 -5.28125 C 17.457031 -6.800781 18 -8.875 18 -11.5 C 18 -14.113281 17.457031 -16.179688 16.375 -17.703125 C 15.300781 -19.234375 13.847656 -20 12.015625 -20 Z M 12 -23 C 15.113281 -23 17.554688 -21.976562 19. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 4 -9.125 L 4 -22 L 8 -22 L 8 -9.265625 C 8 -7.171875 8.359375 -5.601562 9.078125 -4.5625 C 9.804688 -3.519531 10.894531 -3 12.34375 -3 C 14.09375 -3 15.472656 -3.617188 16.484375 -4.859375 C 17.492188 -6.097656 18 -7.789062 18 -9.9375 L 18 -22 L 22 -22 L 22 0 L 18 0 L 18 -4 C 17.164062 -2.644531 16.203125 -1.640625 15.109375 -0.984375 C 14.015625 -0.328125 12.742188 0 11.296875 0 C 8.910156 0 7.097656 -0.773438 5.859375 -2.328125 C 4.617188 -3.878906 4 -6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 22 -13.578125 L 22 0 L 18 0 L 18 -13.453125 C 18 -15.640625 17.632812 -17.273438 16.90625 -18.359375 C 16.1875 -19.453125 15.097656 -20 13.640625 -20 C 11.890625 -20 10.507812 -19.347656 9.5 -18.046875 C 8.5 -16.742188 8 -14.96875 8 -12.71875 L 8 0 L 4 0 L 4 -22 L 8 -22 L 8 -19 C 8.820312 -20.34375 9.785156 -21.34375 10.890625 -22 C 12.003906 -22.664062 13.285156 -23 14.734375 -23 C 17.117188 -23 18.925781 -22.203125 20.15625 -20.609375 C 21.382812 -19.015 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1 4 L 1 -13 L 11 -13 L 11 4 Z M 2 3 L 10 3 L 10 -12 L 2 -12 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 11 -5.71875 L 11 0 L 9 0 L 9 -5.671875 C 9 -6.453125 8.816406 -7.035156 8.453125 -7.421875 C 8.085938 -7.804688 7.546875 -8 6.828125 -8 C 5.953125 -8 5.257812 -7.757812 4.75 -7.28125 C 4.25 -6.8125 4 -6.171875 4 -5.359375 L 4 0 L 2 0 L 2 -10 L 4 -10 L 4 -8 C 4.40625 -8.664062 4.882812 -9.164062 5.4375 -9.5 C 6 -9.832031 6.640625 -10 7.359375 -10 C 8.554688 -10 9.460938 -9.632812 10.078125 -8.90625 C 10.691406 -8.1875 11 -7.125 11 -5.71875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 6 -8 C 5.070312 -8 4.335938 -7.726562 3.796875 -7.1875 C 3.265625 -6.65625 3 -5.925781 3 -5 C 3 -4.070312 3.265625 -3.335938 3.796875 -2.796875 C 4.335938 -2.265625 5.070312 -2 6 -2 C 6.925781 -2 7.65625 -2.265625 8.1875 -2.796875 C 8.726562 -3.335938 9 -4.070312 9 -5 C 9 -5.914062 8.726562 -6.644531 8.1875 -7.1875 C 7.65625 -7.726562 6.925781 -8 6 -8 Z M 6 -10 C 7.550781 -10 8.769531 -9.554688 9.65625 -8.671875 C 10.550781 -7.785156 11 -6.5625 11 -5 C 11  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 8 -8 C 7.820312 -8 7.628906 -8 7.421875 -8 C 7.210938 -8 6.988281 -8 6.75 -8 C 5.863281 -8 5.179688 -7.738281 4.703125 -7.21875 C 4.234375 -6.695312 4 -5.953125 4 -4.984375 L 4 0 L 2 0 L 2 -10 L 4 -10 L 4 -8 C 4.332031 -8.675781 4.757812 -9.175781 5.28125 -9.5 C 5.8125 -9.832031 6.453125 -10 7.203125 -10 C 7.304688 -10 7.421875 -10 7.546875 -10 C 7.679688 -10 7.828125 -10 7.984375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 8 -8 L 8 -14 L 10 -14 L 10 0 L 8 0 L 8 -2 C 7.664062 -1.320312 7.242188 -0.816406 6.734375 -0.484375 C 6.234375 -0.160156 5.628906 0 4.921875 0 C 3.765625 0 2.820312 -0.457031 2.09375 -1.375 C 1.363281 -2.289062 1 -3.5 1 -5 C 1 -6.5 1.363281 -7.707031 2.09375 -8.625 C 2.820312 -9.539062 3.765625 -10 4.921875 -10 C 5.628906 -10 6.234375 -9.832031 6.734375 -9.5 C 7.242188 -9.175781 7.664062 -8.675781 8 -8 Z M 3 -5 C 3 -4.0625 3.21875 -3.328125 3.65625 -2.796 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 11 -5.25 L 11 -4 L 3 -4 C 3.082031 -3.34375 3.460938 -2.84375 4.140625 -2.5 C 4.816406 -2.164062 5.765625 -2 6.984375 -2 C 7.691406 -2 8.375 -2.082031 9.03125 -2.25 C 9.695312 -2.414062 10.351562 -2.664062 11 -3 L 11 -1 C 10.332031 -0.675781 9.648438 -0.425781 8.953125 -0.25 C 8.265625 -0.0820312 7.5625 0 6.84375 0 C 5.039062 0 3.613281 -0.441406 2.5625 -1.328125 C 1.519531 -2.210938 1 -3.410156 1 -4.921875 C 1 -6.472656 1.472656 -7.707031 2.421875 -8.625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 4 -13 L 4 -10 L 8 -10 L 8 -8 L 4 -8 L 4 -3.5625 C 4 -2.894531 4.128906 -2.46875 4.390625 -2.28125 C 4.660156 -2.09375 5.195312 -2 6 -2 L 8 -2 L 8 0 L 6 0 C 4.488281 0 3.441406 -0.253906 2.859375 -0.765625 C 2.285156 -1.273438 2 -2.207031 2 -3.5625 L 2 -8 L 1 -8 L 1 -10 L 2 -10 L 2 -13 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 2 -4.28125 L 2 -10 L 4 -10 L 4 -4.34375 C 4 -3.5625 4.179688 -2.972656 4.546875 -2.578125 C 4.910156 -2.191406 5.453125 -2 6.171875 -2 C 7.046875 -2 7.734375 -2.234375 8.234375 -2.703125 C 8.742188 -3.179688 9 -3.828125 9 -4.640625 L 9 -10 L 11 -10 L 11 0 L 9 0 L 9 -2 C 8.582031 -1.320312 8.097656 -0.816406 7.546875 -0.484375 C 7.003906 -0.160156 6.375 0 5.65625 0 C 4.457031 0 3.546875 -0.363281 2.921875 -1.09375 C 2.304688 -1.820312 2 -2.882812 2 -4.28125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9 -9 L 9 -7 C 8.488281 -7.332031 7.957031 -7.582031 7.40625 -7.75 C 6.851562 -7.914062 6.28125 -8 5.6875 -8 C 4.789062 -8 4.117188 -7.894531 3.671875 -7.6875 C 3.222656 -7.476562 3 -7.164062 3 -6.75 C 3.0625 -6.769531 3.238281 -6.757812 3.53125 -6.71875 C 3.820312 -6.675781 4.382812 -6.582031 5.21875 -6.4375 L 5.734375 -6.359375 C 6.960938 -6.085938 7.828125 -5.671875 8.328125 -5.109375 C 8.828125 -4.554688 9.050781 -3.765625 9 -2.734375 C 9 -1.890625 8.61 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 4 -12 L 4 -8 L 6.3125 -8 C 7.164062 -8 7.828125 -8.171875 8.296875 -8.515625 C 8.765625 -8.867188 9 -9.363281 9 -10 C 9 -10.632812 8.765625 -11.125 8.296875 -11.46875 C 7.828125 -11.820312 7.164062 -12 6.3125 -12 Z M 2 -14 L 6.3125 -14 C 7.851562 -14 9.019531 -13.660156 9.8125 -12.984375 C 10.601562 -12.304688 11 -11.3125 11 -10 C 11 -8.6875 10.601562 -7.691406 9.8125 -7.015625 C 9.019531 -6.335938 7.851562 -6 6.3125 -6 L 4 -6 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 6.515625 0.546875 C 6.046875 1.972656 5.585938 2.90625 5.140625 3.34375 C 4.691406 3.78125 4.09375 4 3.34375 4 L 2 4 L 2 2 L 2.984375 2 C 3.328125 2 3.625 1.910156 3.875 1.734375 C 4.132812 1.554688 4.296875 1.140625 4.359375 0.484375 L 4.953125 -0.859375 L 0.5 -10 L 2.6875 -10 L 6.03125 -3.421875 L 9.328125 -10 L 11.5 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d="M 11 -5.71875 L 11 0 L 9 0 L 9 -5.671875 C 9 -6.453125 8.816406 -7.035156 8.453125 -7.421875 C 8.085938 -7.804688 7.546875 -8 6.828125 -8 C 5.953125 -8 5.257812 -7.757812 4.75 -7.28125 C 4.25 -6.8125 4 -6.171875 4 -5.359375 L 4 0 L 2 0 L 2 -14 L 4 -14 L 4 -8 C 4.40625 -8.664062 4.882812 -9.164062 5.4375 -9.5 C 6 -9.832031 6.640625 -10 7.359375 -10 C 8.554688 -10 9.460938 -9.632812 10.078125 -8.90625 C 10.691406 -8.1875 11 -7.125 11 -5.71875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 6.421875 -5 C 5.128906 -5 4.234375 -4.878906 3.734375 -4.640625 C 3.242188 -4.410156 3 -4.015625 3 -3.453125 C 3 -3.003906 3.179688 -2.648438 3.546875 -2.390625 C 3.921875 -2.128906 4.429688 -2 5.078125 -2 C 5.960938 -2 6.671875 -2.242188 7.203125 -2.734375 C 7.734375 -3.222656 8 -3.875 8 -4.6875 L 8 -5 Z M 10 -6.0625 L 10 0 L 8 0 L 8 -2 C 7.613281 -1.3125 7.128906 -0.804688 6.546875 -0.484375 C 5.972656 -0.160156 5.269531 0 4.4375 0 C 3.382812 0 2.546875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 1 -10 L 3.15625 -10 L 6 -2.09375 L 8.84375 -10 L 11 -10 L 7.265625 0 L 4.734375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-16">
+<path style="stroke:none;" d="M 9 -9 L 9 -7 C 8.550781 -7.332031 8.097656 -7.582031 7.640625 -7.75 C 7.191406 -7.914062 6.734375 -8 6.265625 -8 C 5.234375 -8 4.429688 -7.734375 3.859375 -7.203125 C 3.285156 -6.679688 3 -5.945312 3 -5 C 3 -4.050781 3.285156 -3.3125 3.859375 -2.78125 C 4.429688 -2.257812 5.234375 -2 6.265625 -2 C 6.734375 -2 7.191406 -2.082031 7.640625 -2.25 C 8.097656 -2.414062 8.550781 -2.664062 9 -3 L 9 -1 C 8.539062 -0.664062 8.0625 -0.414062 7.5625 -0.25 C 7.0625 -0.0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-17">
+<path style="stroke:none;" d="M 2 -2 L 4 -2 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-18">
+<path style="stroke:none;" d="M 10 -13 L 10 -11 C 9.289062 -11.332031 8.617188 -11.582031 7.984375 -11.75 C 7.359375 -11.914062 6.753906 -12 6.171875 -12 C 5.160156 -12 4.378906 -11.816406 3.828125 -11.453125 C 3.273438 -11.097656 3 -10.585938 3 -9.921875 C 3.019531 -9.503906 3.222656 -9.179688 3.609375 -8.953125 C 3.992188 -8.722656 4.707031 -8.507812 5.75 -8.3125 L 6.890625 -8.109375 C 8.304688 -7.835938 9.347656 -7.351562 10.015625 -6.65625 C 10.691406 -5.96875 11.019531 -5.039062 11  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-19">
+<path style="stroke:none;" d="M 9.671875 -7.65625 C 10.054688 -8.457031 10.515625 -9.046875 11.046875 -9.421875 C 11.585938 -9.804688 12.21875 -10 12.9375 -10 C 13.914062 -10 14.671875 -9.625 15.203125 -8.875 C 15.734375 -8.132812 16 -7.082031 16 -5.71875 L 16 0 L 14 0 L 14 -5.671875 C 14 -6.460938 13.859375 -7.046875 13.578125 -7.421875 C 13.296875 -7.804688 12.863281 -8 12.28125 -8 C 11.582031 -8 11.023438 -7.757812 10.609375 -7.28125 C 10.203125 -6.8125 10 -6.171875 10 -5.359375 L 10  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-20">
+<path style="stroke:none;" d="M 2 -10 L 4 -10 L 4 0 L 2 0 Z M 2 -14 L 4 -14 L 4 -12 L 2 -12 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-21">
+<path style="stroke:none;" d="M 1.75 -10 L 3.828125 -10 L 5.75 -2 L 7.953125 -10 L 10.046875 -10 L 12.25 -1.96875 L 14.171875 -10 L 16.25 -10 L 13.765625 0 L 11.25 0 L 9 -8.203125 L 6.75 0 L 4.234375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-22">
+<path style="stroke:none;" d="M 4 -2 L 4 4 L 2 4 L 2 -10 L 4 -10 L 4 -8 C 4.332031 -8.675781 4.75 -9.175781 5.25 -9.5 C 5.757812 -9.832031 6.363281 -10 7.0625 -10 C 8.226562 -10 9.175781 -9.539062 9.90625 -8.625 C 10.632812 -7.707031 11 -6.5 11 -5 C 11 -3.5 10.632812 -2.289062 9.90625 -1.375 C 9.175781 -0.457031 8.226562 0 7.0625 0 C 6.363281 0 5.757812 -0.160156 5.25 -0.484375 C 4.75 -0.816406 4.332031 -1.320312 4 -2 Z M 9 -5 C 9 -5.9375 8.773438 -6.671875 8.328125 -7.203125 C 7.890625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-23">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-24">
+<path style="stroke:none;" d="M 2 -2 L 4 -2 L 4 -0.25 L 2 3 L 1 3 L 2 -0.25 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-25">
+<path style="stroke:none;" d="M 9 -5 C 9 -5.9375 8.773438 -6.671875 8.328125 -7.203125 C 7.890625 -7.734375 7.28125 -8 6.5 -8 C 5.71875 -8 5.101562 -7.734375 4.65625 -7.203125 C 4.21875 -6.671875 4 -5.9375 4 -5 C 4 -4.0625 4.21875 -3.328125 4.65625 -2.796875 C 5.101562 -2.265625 5.71875 -2 6.5 -2 C 7.28125 -2 7.890625 -2.265625 8.328125 -2.796875 C 8.773438 -3.328125 9 -4.0625 9 -5 Z M 4 -8 C 4.332031 -8.675781 4.75 -9.175781 5.25 -9.5 C 5.757812 -9.832031 6.363281 -10 7.0625 -10 C 8.226 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-26">
+<path style="stroke:none;" d="M 7 -14 L 7 -12 L 5.75 -12 C 5.09375 -12 4.632812 -11.90625 4.375 -11.71875 C 4.125 -11.53125 4 -11.191406 4 -10.703125 L 4 -10 L 7 -10 L 7 -8 L 4 -8 L 4 0 L 2 0 L 2 -8 L 0 -8 L 0 -10 L 2 -10 L 2 -10.546875 C 2 -11.742188 2.300781 -12.617188 2.90625 -13.171875 C 3.507812 -13.722656 4.460938 -14 5.765625 -14 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-27">
+<path style="stroke:none;" d="M 2 -10 L 4 -10 L 4 -0.15625 C 4 1.300781 3.726562 2.359375 3.1875 3.015625 C 2.65625 3.671875 1.796875 4 0.609375 4 L 0 4 L 0 2 L 0.125 2 C 0.851562 2 1.347656 1.859375 1.609375 1.578125 C 1.867188 1.296875 2 0.71875 2 -0.15625 Z M 2 -14 L 4 -14 L 4 -12 L 2 -12 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-28">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 -5.875 L 8.359375 -10 L 11 -10 L 5.578125 -5.328125 L 11 0 L 8.171875 0 L 4 -4.203125 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-29">
+<path style="stroke:none;" d="M 3 -14 L 3 -9 L 1 -9 L 1 -14 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-30">
+<path style="stroke:none;" d="M 12 -13 L 12 -11 C 11.382812 -11.332031 10.722656 -11.582031 10.015625 -11.75 C 9.316406 -11.914062 8.578125 -12 7.796875 -12 C 6.242188 -12 5.054688 -11.566406 4.234375 -10.703125 C 3.410156 -9.847656 3 -8.613281 3 -7 C 3 -5.382812 3.410156 -4.144531 4.234375 -3.28125 C 5.054688 -2.425781 6.242188 -2 7.796875 -2 C 8.578125 -2 9.316406 -2.082031 10.015625 -2.25 C 10.722656 -2.414062 11.382812 -2.664062 12 -3 L 12 -1 C 11.351562 -0.664062 10.664062 -0.414062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 4.125 -0.921875 C 3.34375 -0.921875 2.296875 -1.15625 1 -1.609375 L 0.59375 -0.53125 C 1.703125 -0.21875 2.484375 0 3.859375 0 C 5.53125 0 6.734375 -0.484375 7.421875 -1.34375 C 7.8125 -1.828125 8.015625 -2.359375 8.015625 -2.90625 C 8.015625 -3.6875 7.703125 -4.265625 7.09375 -4.6875 C 6.359375 -5.15625 5.78125 -5.40625 4.703125 -5.703125 C 4.09375 -5.859375 3.5 -6.078125 2.9375 -6.328125 C 2.328125 -6.609375 2.015625 -7 2.015625 -7.5 C 2.015625 -8.5625 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 6.890625 -7 L 5.65625 -7 L 3.703125 -1.515625 L 3.640625 -1.140625 L 3.5625 -1.515625 L 1.609375 -7 L 0.328125 -7 L 2.96875 0 L 4.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z M 0.796875 -7 L 0.796875 -6.078125 L 2.015625 -6.078125 L 2.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.65625 C 7.015625 -6.09375 6.15625 -7 4.546875 -7 C 3.765625 -7 2.828125 -6.796875 1.875 -6.421875 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.796875 -5.90625 3.546875 -6.078125 4.140625 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-10">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-11">
+<path style="stroke:none;" d="M 3.84375 -10 L 0.296875 0.5 L 1.515625 0.5 L 5.0625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-12">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-13">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-14">
+<path style="stroke:none;" d="M 5.015625 0 L 5.015625 -4.734375 L 8.484375 -10 L 7.125 -10 L 4.46875 -5.859375 L 1.875 -10 L 0.4375 -10 L 3.796875 -4.734375 L 3.796875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-15">
+<path style="stroke:none;" d="M 9.015625 -3.3125 C 9.015625 -3.4375 9.015625 -3.640625 9.015625 -3.890625 L 9.015625 -10 L 7.796875 -10 L 7.796875 -3.53125 C 7.796875 -3.125 7.765625 -2.78125 7.671875 -2.5 C 7.390625 -1.46875 6.296875 -0.921875 4.890625 -0.921875 C 3.90625 -0.921875 3.109375 -1.1875 2.625 -1.671875 C 2.140625 -2.171875 2.015625 -2.640625 2.015625 -3.53125 L 2.015625 -10 L 0.796875 -10 L 0.796875 -4.4375 C 0.796875 -4.34375 0.796875 -4.171875 0.796875 -3.890625 L 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-16">
+<path style="stroke:none;" d="M 7.796875 -10 L 7.796875 -4.953125 L 2.015625 -4.953125 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 7.796875 -4.046875 L 7.796875 0 L 9.015625 0 L 9.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-17">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-18">
+<path style="stroke:none;" d="M 9.046875 -8.296875 L 9.546875 -9.25 C 8.515625 -9.71875 7.453125 -10 6.03125 -10 C 5.03125 -10 4.140625 -9.796875 3.328125 -9.359375 C 1.859375 -8.578125 0.796875 -7 0.796875 -4.953125 C 0.796875 -4.03125 1.03125 -3.203125 1.46875 -2.4375 C 2.328125 -1 3.78125 0 6.0625 0 C 7.90625 0 9.171875 -0.515625 10.015625 -1.328125 L 10.015625 -4.953125 L 5.71875 -4.953125 L 5.71875 -4.046875 L 8.796875 -4.046875 L 8.796875 -1.6875 C 8.203125 -1.171875 7.4375 -0.9218 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-19">
+<path style="stroke:none;" d="M 7.140625 -10 L 4.640625 -6.234375 L 2.046875 -10 L 0.578125 -10 L 3.8125 -5.21875 L 0.140625 0 L 1.640625 0 L 4.5 -4.203125 L 7.359375 0 L 8.9375 0 L 5.328125 -5.25 L 8.53125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-20">
+<path style="stroke:none;" d="M 1 -10 L 1 -9.078125 L 4.796875 -9.078125 L 4.796875 0 L 6.015625 0 L 6.015625 -9.078125 L 9 -9.078125 L 9 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-21">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 6.484375 -10 L 2.171875 -5.125 L 6.71875 0 L 8.296875 0 L 3.71875 -5.234375 L 8.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-22">
+<path style="stroke:none;" d="M 5.796875 -7.59375 C 5.796875 -6.515625 4.953125 -5.953125 3.25 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 3.875 -9.078125 C 5.046875 -9.078125 5.796875 -8.59375 5.796875 -7.59375 Z M 6.796875 -2.921875 C 6.796875 -1.484375 5.625 -0.921875 4.265625 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 3.796875 -5.046875 C 3.890625 -5.046875 4 -5.046875 4.09375 -5.046875 C 5.5625 -5.046875 6.796875 -4.375 6.796875 -2.921875 Z M 5.65625 -5.78125 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-23">
+<path style="stroke:none;" d="M 0.140625 -10 L 3.34375 0 L 4.640625 0 L 7.125 -8.359375 L 9.8125 0 L 11.109375 0 L 14.15625 -10 L 12.953125 -10 L 10.46875 -1.59375 L 7.8125 -10 L 6.59375 -10 L 4.015625 -1.59375 L 1.453125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-24">
+<path style="stroke:none;" d="M 0.796875 0 L 6.75 0 L 6.75 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 6.359375 -5.046875 L 6.359375 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 6.75 -9.078125 L 6.75 -10 L 0.796875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-25">
+<path style="stroke:none;" d="M 0.796875 -5 C 0.796875 -3.453125 1.328125 -2.109375 2.125 -1.296875 C 2.90625 -0.515625 3.984375 0 5.421875 0 C 6.53125 0 7.484375 -0.265625 8.296875 -0.84375 L 9.59375 0.296875 L 10.234375 -0.34375 L 8.96875 -1.53125 C 9.671875 -2.421875 10.015625 -3.5625 10.015625 -4.9375 C 10.015625 -6.4375 9.609375 -7.65625 8.796875 -8.578125 C 8.09375 -9.375 6.90625 -10 5.515625 -10 L 5.4375 -10 C 2.59375 -10 0.796875 -7.921875 0.796875 -5 Z M 5.4375 -9.078125 C 5.968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-26">
+<path style="stroke:none;" d="M 2.015625 -9.078125 L 6.6875 -9.078125 L 6.6875 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.046875 L 6.25 -5.046875 L 6.25 -5.953125 L 2.015625 -5.953125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-27">
+<path style="stroke:none;" d="M 1.8125 -9.296875 L 2.09375 -8.40625 L 3.25 -8.78125 C 3.890625 -8.984375 4.3125 -9.078125 4.796875 -9.078125 C 5.5 -9.078125 6.0625 -8.859375 6.53125 -8.40625 C 6.875 -8.078125 7.046875 -7.703125 7.046875 -7.3125 C 7.046875 -7.171875 7.015625 -7.03125 7 -6.90625 C 6.921875 -6.609375 6.65625 -6.265625 6.234375 -5.90625 L 5.625 -5.40625 C 4.90625 -4.84375 4.203125 -4.21875 3.546875 -3.40625 C 2.84375 -2.546875 2.328125 -1.5625 2 -0.5625 L 2 0 L 9 0 L 9 -0.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-28">
+<path style="stroke:none;" d="M 8.015625 -3.703125 C 8.015625 -4.59375 7.75 -5.328125 7.234375 -5.90625 C 6.59375 -6.609375 5.734375 -6.953125 4.6875 -6.953125 C 3.578125 -6.953125 2.703125 -6.578125 2.15625 -6.0625 C 2.203125 -6.328125 2.25 -6.53125 2.3125 -6.703125 C 2.71875 -8.203125 4.09375 -9.078125 6.359375 -9.078125 C 6.640625 -9.078125 6.921875 -9.078125 7.21875 -9.046875 L 7.296875 -9.96875 C 7 -10 6.6875 -10 6.375 -10 C 5.625 -10 4.9375 -9.90625 4.265625 -9.71875 C 1.953125 -9. [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-29">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 C 2.46875 -4.046875 2.9375 -4.046875 3.34375 -4.046875 C 4.25 -4.046875 5.390625 -4.15625 5.96875 -4.328125 C 7.25 -4.71875 8.015625 -5.78125 8.015625 -7.328125 C 8.015625 -8.140625 7.734375 -8.78125 7.203125 -9.28125 C 6.5 -9.90625 5.71875 -10 4.21875 -10 Z M 3.46875 -4.953125 C 3.046875 -4.953125 2.546875 -4.953125 2.015625 -5.015625 L 2.015625 -9.078125 L 3.5 -9.078125 C 4.21875 -9.078125 4.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-30">
+<path style="stroke:none;" d="M 2.015625 -5 C 2.015625 -5.796875 2.171875 -6.5 2.4375 -7.109375 C 2.953125 -8.1875 3.921875 -9.078125 5.40625 -9.078125 C 6.046875 -9.078125 6.65625 -8.921875 7.15625 -8.5625 C 8.140625 -7.90625 8.796875 -6.609375 8.796875 -5 C 8.796875 -4.21875 8.640625 -3.515625 8.359375 -2.90625 C 7.859375 -1.828125 6.890625 -0.921875 5.40625 -0.921875 C 4.765625 -0.921875 4.15625 -1.09375 3.640625 -1.453125 C 2.65625 -2.09375 2.015625 -3.390625 2.015625 -5 Z M 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-31">
+<path style="stroke:none;" d="M 0.140625 -10 L 3.703125 0 L 5.203125 0 L 8.765625 -10 L 7.40625 -10 L 4.5 -1.265625 L 1.59375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-32">
+<path style="stroke:none;" d="M 8 -10 L 1 -10 L 1 -9.078125 L 6.59375 -9.078125 L 2.1875 0 L 3.53125 0 L 8 -9.390625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-33">
+<path style="stroke:none;" d="M 7.015625 -10 L 5.25 -10 L 1 -3.671875 L 1 -2.890625 L 5.796875 -2.890625 L 5.796875 0 L 7.015625 0 L 7.015625 -2.890625 L 9 -2.890625 L 9 -3.921875 L 7.015625 -3.921875 Z M 5.796875 -3.921875 L 2.4375 -3.921875 L 5.796875 -8.9375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-34">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 6.578125 0 L 6.578125 -1.046875 L 2.015625 -1.046875 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-35">
+<path style="stroke:none;" d="M 3.796875 -10 L 3.796875 -2.9375 C 3.796875 -2.609375 3.765625 -2.359375 3.71875 -2.1875 C 3.515625 -1.375 2.75 -0.921875 1.703125 -0.921875 C 1.375 -0.921875 1.03125 -0.953125 0.671875 -1.046875 L 0.484375 -0.140625 C 0.96875 -0.03125 1.421875 0 1.875 0 C 2.953125 0 3.75 -0.265625 4.3125 -0.859375 C 4.859375 -1.40625 5.015625 -2.015625 5.015625 -3.078125 L 5.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-36">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.28125 L 5.265625 -2.859375 L 6.546875 -2.859375 L 9.796875 -8.28125 L 9.796875 0 L 11.015625 0 L 11.015625 -10 L 9.40625 -10 L 5.921875 -3.921875 L 2.53125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-37">
+<path style="stroke:none;" d="M 10.015625 -2.234375 L 10.015625 -7 L 9.1875 -7 L 9.0625 -6.6875 C 8.4375 -6.90625 7.828125 -7 7.296875 -7 C 6.3125 -7 5.46875 -6.6875 4.828125 -6.0625 C 4.125 -5.40625 3.796875 -4.5 3.796875 -3.359375 C 3.796875 -1.984375 4.28125 -1.03125 5.234375 -0.4375 C 5.703125 -0.15625 6.265625 0 6.890625 0 C 7.765625 0 8.484375 -0.296875 9.03125 -0.890625 C 9.390625 -0.296875 10 0 10.859375 0 C 11.5 0 12.09375 -0.234375 12.625 -0.703125 C 13.59375 -1.53125 14.015625 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-38">
+<path style="stroke:none;" d="M 0.796875 1 C 0.796875 1.828125 0.40625 2.421875 -0.34375 2.78125 L 0.09375 3.65625 C 0.75 3.421875 1.375 3.046875 1.65625 2.46875 C 1.921875 1.9375 2.015625 1.78125 2.015625 0.8125 L 2.015625 -7 L 0.796875 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-39">
+<path style="stroke:none;" d="M 3.5625 -0.921875 C 2.859375 -0.921875 2.5 -1.078125 2.015625 -1.34375 L 2.015625 -5.765625 C 2.515625 -5.984375 3.015625 -6.078125 3.546875 -6.078125 C 5.046875 -6.078125 5.796875 -5 5.796875 -3.5 C 5.796875 -1.984375 5.078125 -0.921875 3.5625 -0.921875 Z M 3.828125 0 C 5.9375 0 7.015625 -1.40625 7.015625 -3.40625 C 7.015625 -4.5625 6.6875 -5.46875 6.03125 -6.109375 C 5.40625 -6.703125 4.609375 -7 3.671875 -7 C 3.109375 -7 2.5625 -6.890625 2.015625 -6.6718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-40">
+<path style="stroke:none;" d="M 1 -7 L 1 -6.078125 L 4.9375 -6.078125 L 1 -0.609375 L 1 0 L 6.671875 0 L 6.671875 -0.921875 L 2.546875 -0.921875 L 6.5 -6.390625 L 6.5 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-41">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-42">
+<path style="stroke:none;" d="M 3.859375 -5.046875 C 4.921875 -5.046875 5.609375 -4.828125 6.171875 -4.328125 C 6.59375 -3.953125 6.796875 -3.578125 6.796875 -2.96875 C 6.796875 -2.203125 6.390625 -1.75 5.921875 -1.421875 C 5.359375 -1.03125 4.671875 -0.921875 3.6875 -0.921875 C 2.921875 -0.921875 2.265625 -1 1.578125 -1.125 L 1.34375 -0.203125 C 2.203125 -0.046875 3.015625 0 3.765625 0 C 4.34375 0 4.921875 -0.046875 5.421875 -0.140625 C 6 -0.25 6.46875 -0.5 6.90625 -0.828125 C 7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-43">
+<path style="stroke:none;" d="M 5.796875 -0.453125 L 5.796875 -0.21875 C 5.796875 0.265625 5.796875 0.609375 5.765625 0.84375 C 5.625 2.234375 4.78125 3.078125 3.390625 3.078125 C 2.875 3.078125 2.328125 2.953125 1.734375 2.703125 L 1.375 3.5625 C 1.953125 3.8125 2.84375 4 3.53125 4 C 4.59375 4 5.515625 3.625 6.078125 3.09375 C 6.78125 2.421875 7.015625 1.765625 7.015625 0.4375 L 7.015625 -7 L 6.15625 -7 L 6.015625 -6.546875 L 5.6875 -6.671875 C 5.09375 -6.890625 4.546875 -7 4.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-44">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 5.25 -7 L 2.125 -3.875 L 5.328125 0 L 6.734375 0 L 3.46875 -4 L 6.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-45">
+<path style="stroke:none;" d="M 4.8125 -10 C 3.890625 -10 2.90625 -9.78125 1.890625 -9.390625 L 2.28125 -8.5 C 3.1875 -8.890625 3.984375 -9.078125 4.640625 -9.078125 C 5.734375 -9.078125 6.796875 -8.578125 6.796875 -7.6875 C 6.796875 -7.328125 6.6875 -7.015625 6.4375 -6.734375 C 5.96875 -6.21875 5.078125 -5.953125 3.796875 -5.953125 L 3.796875 -5.046875 L 3.921875 -5.046875 C 4.796875 -5.046875 5.453125 -4.890625 5.9375 -4.5625 C 6.515625 -4.171875 6.796875 -3.640625 6.796875 -3 C 6.7968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-46">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 0 0 L 818 0 L 818 46 L 0 46 Z "/>
+</clipPath>
+<clipPath id="clip2">
+  <path d="M 91 229 L 639 229 L 639 258 L 91 258 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 91 231 C 91 229.894531 91.894531 229 93 229 L 637 229 C 638.105469 229 639 229.449219 639 230 L 639 256 C 639 257.105469 638.105469 258 637 258 L 93 258 C 91.894531 258 91 257.550781 91 257 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,365,243.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image20274" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,90,228)">
+  <use xlink:href="#image20274"/>
+</pattern>
+<image id="image20277" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(54.4,0,0,1,93,228)">
+  <use xlink:href="#image20277"/>
+</pattern>
+<image id="image20282" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,637,228)">
+  <use xlink:href="#image20282"/>
+</pattern>
+<image id="image20287" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,90,231)">
+  <use xlink:href="#image20287"/>
+</pattern>
+<image id="image20292" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,637,231)">
+  <use xlink:href="#image20292"/>
+</pattern>
+<image id="image20297" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,90,256)">
+  <use xlink:href="#image20297"/>
+</pattern>
+<image id="image20302" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(54.4,0,0,1,93,256)">
+  <use xlink:href="#image20302"/>
+</pattern>
+<image id="image20307" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,637,256)">
+  <use xlink:href="#image20307"/>
+</pattern>
+<clipPath id="clip4">
+  <path d="M 95 239 L 635 239 L 635 253 L 95 253 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 41 301 L 98 301 L 98 330 L 41 330 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 41 303 C 41 301.894531 41.894531 301 43 301 L 96 301 C 97.105469 301 98 301.449219 98 302 L 98 328 C 98 329.105469 97.105469 330 96 330 L 43 330 C 41.894531 330 41 329.550781 41 329 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,69.5,315.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image20313" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,40,300)">
+  <use xlink:href="#image20313"/>
+</pattern>
+<image id="image20316" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(5.3,0,0,1,43,300)">
+  <use xlink:href="#image20316"/>
+</pattern>
+<image id="image20321" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,96,300)">
+  <use xlink:href="#image20321"/>
+</pattern>
+<image id="image20326" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,40,303)">
+  <use xlink:href="#image20326"/>
+</pattern>
+<image id="image20331" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,96,303)">
+  <use xlink:href="#image20331"/>
+</pattern>
+<image id="image20336" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,40,328)">
+  <use xlink:href="#image20336"/>
+</pattern>
+<image id="image20341" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(5.3,0,0,1,43,328)">
+  <use xlink:href="#image20341"/>
+</pattern>
+<image id="image20346" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,96,328)">
+  <use xlink:href="#image20346"/>
+</pattern>
+</defs>
+<g id="surface20269">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(20%,20%,33.333333%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 10 0 L 111 0 L 111 46 L 10 46 Z M 10 0 L 111 0 L 111 46 L 10 46 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="10" y="37"/>
+  <use xlink:href="#glyph0-2" x="35" y="37"/>
+  <use xlink:href="#glyph0-3" x="59" y="37"/>
+  <use xlink:href="#glyph0-4" x="85" y="37"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 76 L 778 76 L 778 122 L 40 122 Z M 40 76 L 778 76 L 778 122 L 40 122 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="40" y="113"/>
+  <use xlink:href="#glyph1-2" x="68" y="113"/>
+  <use xlink:href="#glyph1-3" x="83" y="113"/>
+  <use xlink:href="#glyph1-4" x="108" y="113"/>
+  <use xlink:href="#glyph1-5" x="133" y="113"/>
+  <use xlink:href="#glyph1-3" x="149" y="113"/>
+  <use xlink:href="#glyph1-6" x="174" y="113"/>
+  <use xlink:href="#glyph1-7" x="187" y="113"/>
+  <use xlink:href="#glyph1-8" x="213" y="113"/>
+  <use xlink:href="#glyph1-8" x="235" y="113"/>
+  <use xlink:href="#glyph1-9" x="257" y="113"/>
+  <use xlink:href="#glyph1-10" x="281" y="113"/>
+  <use xlink:href="#glyph1-11" x="306" y="113"/>
+  <use xlink:href="#glyph1-5" x="331" y="113"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 142 L 778 142 L 778 208 L 40 208 Z M 40 142 L 778 142 L 778 208 L 40 208 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="40" y="160"/>
+  <use xlink:href="#glyph2-2" x="46" y="160"/>
+  <use xlink:href="#glyph2-3" x="58" y="160"/>
+  <use xlink:href="#glyph2-4" x="64" y="160"/>
+  <use xlink:href="#glyph2-5" x="75" y="160"/>
+  <use xlink:href="#glyph2-6" x="83" y="160"/>
+  <use xlink:href="#glyph2-7" x="94" y="160"/>
+  <use xlink:href="#glyph2-5" x="105" y="160"/>
+  <use xlink:href="#glyph2-3" x="113" y="160"/>
+  <use xlink:href="#glyph2-8" x="119" y="160"/>
+  <use xlink:href="#glyph2-4" x="127" y="160"/>
+  <use xlink:href="#glyph2-3" x="138" y="160"/>
+  <use xlink:href="#glyph2-9" x="144" y="160"/>
+  <use xlink:href="#glyph2-10" x="156" y="160"/>
+  <use xlink:href="#glyph2-7" x="165" y="160"/>
+  <use xlink:href="#glyph2-3" x="176" y="160"/>
+  <use xlink:href="#glyph2-11" x="182" y="160"/>
+  <use xlink:href="#glyph2-4" x="193" y="160"/>
+  <use xlink:href="#glyph2-2" x="204" y="160"/>
+  <use xlink:href="#glyph2-6" x="216" y="160"/>
+  <use xlink:href="#glyph2-3" x="227" y="160"/>
+  <use xlink:href="#glyph2-12" x="233" y="160"/>
+  <use xlink:href="#glyph2-4" x="244" y="160"/>
+  <use xlink:href="#glyph2-9" x="255" y="160"/>
+  <use xlink:href="#glyph2-3" x="267" y="160"/>
+  <use xlink:href="#glyph2-13" x="273" y="160"/>
+  <use xlink:href="#glyph2-14" x="285" y="160"/>
+  <use xlink:href="#glyph2-15" x="296" y="160"/>
+  <use xlink:href="#glyph2-7" x="307" y="160"/>
+  <use xlink:href="#glyph2-3" x="318" y="160"/>
+  <use xlink:href="#glyph2-8" x="324" y="160"/>
+  <use xlink:href="#glyph2-4" x="332" y="160"/>
+  <use xlink:href="#glyph2-3" x="343" y="160"/>
+  <use xlink:href="#glyph2-13" x="349" y="160"/>
+  <use xlink:href="#glyph2-14" x="361" y="160"/>
+  <use xlink:href="#glyph2-15" x="372" y="160"/>
+  <use xlink:href="#glyph2-7" x="383" y="160"/>
+  <use xlink:href="#glyph2-3" x="394" y="160"/>
+  <use xlink:href="#glyph2-14" x="400" y="160"/>
+  <use xlink:href="#glyph2-2" x="411" y="160"/>
+  <use xlink:href="#glyph2-3" x="423" y="160"/>
+  <use xlink:href="#glyph2-14" x="429" y="160"/>
+  <use xlink:href="#glyph2-16" x="440" y="160"/>
+  <use xlink:href="#glyph2-16" x="449" y="160"/>
+  <use xlink:href="#glyph2-4" x="458" y="160"/>
+  <use xlink:href="#glyph2-9" x="469" y="160"/>
+  <use xlink:href="#glyph2-2" x="481" y="160"/>
+  <use xlink:href="#glyph2-8" x="493" y="160"/>
+  <use xlink:href="#glyph2-3" x="501" y="160"/>
+  <use xlink:href="#glyph2-4" x="507" y="160"/>
+  <use xlink:href="#glyph2-2" x="518" y="160"/>
+  <use xlink:href="#glyph2-3" x="530" y="160"/>
+  <use xlink:href="#glyph2-14" x="536" y="160"/>
+  <use xlink:href="#glyph2-3" x="547" y="160"/>
+  <use xlink:href="#glyph2-10" x="553" y="160"/>
+  <use xlink:href="#glyph2-7" x="562" y="160"/>
+  <use xlink:href="#glyph2-5" x="573" y="160"/>
+  <use xlink:href="#glyph2-15" x="581" y="160"/>
+  <use xlink:href="#glyph2-7" x="592" y="160"/>
+  <use xlink:href="#glyph2-5" x="603" y="160"/>
+  <use xlink:href="#glyph2-17" x="609" y="160"/>
+  <use xlink:href="#glyph2-3" x="615" y="160"/>
+  <use xlink:href="#glyph2-18" x="621" y="160"/>
+  <use xlink:href="#glyph2-7" x="633" y="160"/>
+  <use xlink:href="#glyph2-5" x="644" y="160"/>
+  <use xlink:href="#glyph2-15" x="652" y="160"/>
+  <use xlink:href="#glyph2-7" x="663" y="160"/>
+  <use xlink:href="#glyph2-5" x="674" y="160"/>
+  <use xlink:href="#glyph2-10" x="682" y="160"/>
+  <use xlink:href="#glyph2-3" x="691" y="160"/>
+  <use xlink:href="#glyph2-19" x="697" y="160"/>
+  <use xlink:href="#glyph2-14" x="714" y="160"/>
+  <use xlink:href="#glyph2-12" x="725" y="160"/>
+  <use xlink:href="#glyph2-3" x="736" y="160"/>
+  <use xlink:href="#glyph2-10" x="742" y="160"/>
+  <use xlink:href="#glyph2-7" x="751" y="160"/>
+  <use xlink:href="#glyph2-8" x="762" y="160"/>
+  <use xlink:href="#glyph2-3" x="770" y="160"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-8" x="40" y="182"/>
+  <use xlink:href="#glyph2-13" x="48" y="182"/>
+  <use xlink:href="#glyph2-7" x="60" y="182"/>
+  <use xlink:href="#glyph2-20" x="71" y="182"/>
+  <use xlink:href="#glyph2-5" x="76" y="182"/>
+  <use xlink:href="#glyph2-3" x="84" y="182"/>
+  <use xlink:href="#glyph2-4" x="90" y="182"/>
+  <use xlink:href="#glyph2-21" x="101" y="182"/>
+  <use xlink:href="#glyph2-2" x="118" y="182"/>
+  <use xlink:href="#glyph2-3" x="130" y="182"/>
+  <use xlink:href="#glyph2-14" x="136" y="182"/>
+  <use xlink:href="#glyph2-16" x="147" y="182"/>
+  <use xlink:href="#glyph2-16" x="156" y="182"/>
+  <use xlink:href="#glyph2-4" x="165" y="182"/>
+  <use xlink:href="#glyph2-9" x="176" y="182"/>
+  <use xlink:href="#glyph2-2" x="188" y="182"/>
+  <use xlink:href="#glyph2-8" x="200" y="182"/>
+  <use xlink:href="#glyph2-3" x="208" y="182"/>
+  <use xlink:href="#glyph2-22" x="214" y="182"/>
+  <use xlink:href="#glyph2-4" x="225" y="182"/>
+  <use xlink:href="#glyph2-23" x="236" y="182"/>
+  <use xlink:href="#glyph2-20" x="241" y="182"/>
+  <use xlink:href="#glyph2-16" x="246" y="182"/>
+  <use xlink:href="#glyph2-20" x="255" y="182"/>
+  <use xlink:href="#glyph2-7" x="260" y="182"/>
+  <use xlink:href="#glyph2-10" x="271" y="182"/>
+  <use xlink:href="#glyph2-24" x="280" y="182"/>
+  <use xlink:href="#glyph2-3" x="286" y="182"/>
+  <use xlink:href="#glyph2-25" x="292" y="182"/>
+  <use xlink:href="#glyph2-9" x="303" y="182"/>
+  <use xlink:href="#glyph2-8" x="315" y="182"/>
+  <use xlink:href="#glyph2-3" x="323" y="182"/>
+  <use xlink:href="#glyph2-8" x="329" y="182"/>
+  <use xlink:href="#glyph2-13" x="337" y="182"/>
+  <use xlink:href="#glyph2-7" x="349" y="182"/>
+  <use xlink:href="#glyph2-3" x="360" y="182"/>
+  <use xlink:href="#glyph2-6" x="366" y="182"/>
+  <use xlink:href="#glyph2-7" x="377" y="182"/>
+  <use xlink:href="#glyph2-26" x="388" y="182"/>
+  <use xlink:href="#glyph2-14" x="394" y="182"/>
+  <use xlink:href="#glyph2-9" x="405" y="182"/>
+  <use xlink:href="#glyph2-23" x="417" y="182"/>
+  <use xlink:href="#glyph2-8" x="422" y="182"/>
+  <use xlink:href="#glyph2-3" x="430" y="182"/>
+  <use xlink:href="#glyph2-10" x="436" y="182"/>
+  <use xlink:href="#glyph2-7" x="445" y="182"/>
+  <use xlink:href="#glyph2-5" x="456" y="182"/>
+  <use xlink:href="#glyph2-15" x="464" y="182"/>
+  <use xlink:href="#glyph2-7" x="475" y="182"/>
+  <use xlink:href="#glyph2-5" x="486" y="182"/>
+  <use xlink:href="#glyph2-3" x="494" y="182"/>
+  <use xlink:href="#glyph2-14" x="500" y="182"/>
+  <use xlink:href="#glyph2-23" x="511" y="182"/>
+  <use xlink:href="#glyph2-23" x="516" y="182"/>
+  <use xlink:href="#glyph2-4" x="521" y="182"/>
+  <use xlink:href="#glyph2-21" x="532" y="182"/>
+  <use xlink:href="#glyph2-10" x="549" y="182"/>
+  <use xlink:href="#glyph2-3" x="558" y="182"/>
+  <use xlink:href="#glyph2-14" x="564" y="182"/>
+  <use xlink:href="#glyph2-2" x="575" y="182"/>
+  <use xlink:href="#glyph2-12" x="587" y="182"/>
+  <use xlink:href="#glyph2-4" x="598" y="182"/>
+  <use xlink:href="#glyph2-2" x="609" y="182"/>
+  <use xlink:href="#glyph2-7" x="621" y="182"/>
+  <use xlink:href="#glyph2-3" x="632" y="182"/>
+  <use xlink:href="#glyph2-8" x="638" y="182"/>
+  <use xlink:href="#glyph2-4" x="646" y="182"/>
+  <use xlink:href="#glyph2-3" x="657" y="182"/>
+  <use xlink:href="#glyph2-16" x="663" y="182"/>
+  <use xlink:href="#glyph2-5" x="672" y="182"/>
+  <use xlink:href="#glyph2-7" x="680" y="182"/>
+  <use xlink:href="#glyph2-14" x="691" y="182"/>
+  <use xlink:href="#glyph2-8" x="702" y="182"/>
+  <use xlink:href="#glyph2-7" x="710" y="182"/>
+  <use xlink:href="#glyph2-3" x="721" y="182"/>
+  <use xlink:href="#glyph2-14" x="727" y="182"/>
+  <use xlink:href="#glyph2-2" x="738" y="182"/>
+  <use xlink:href="#glyph2-3" x="750" y="182"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-14" x="40" y="204"/>
+  <use xlink:href="#glyph2-16" x="51" y="204"/>
+  <use xlink:href="#glyph2-16" x="60" y="204"/>
+  <use xlink:href="#glyph2-4" x="69" y="204"/>
+  <use xlink:href="#glyph2-9" x="80" y="204"/>
+  <use xlink:href="#glyph2-2" x="92" y="204"/>
+  <use xlink:href="#glyph2-8" x="104" y="204"/>
+  <use xlink:href="#glyph2-17" x="112" y="204"/>
+  <use xlink:href="#glyph2-3" x="118" y="204"/>
+  <use xlink:href="#glyph2-1" x="124" y="204"/>
+  <use xlink:href="#glyph2-26" x="130" y="204"/>
+  <use xlink:href="#glyph2-3" x="136" y="204"/>
+  <use xlink:href="#glyph2-12" x="142" y="204"/>
+  <use xlink:href="#glyph2-4" x="153" y="204"/>
+  <use xlink:href="#glyph2-9" x="164" y="204"/>
+  <use xlink:href="#glyph2-3" x="176" y="204"/>
+  <use xlink:href="#glyph2-21" x="182" y="204"/>
+  <use xlink:href="#glyph2-14" x="199" y="204"/>
+  <use xlink:href="#glyph2-2" x="210" y="204"/>
+  <use xlink:href="#glyph2-8" x="222" y="204"/>
+  <use xlink:href="#glyph2-3" x="230" y="204"/>
+  <use xlink:href="#glyph2-8" x="236" y="204"/>
+  <use xlink:href="#glyph2-4" x="244" y="204"/>
+  <use xlink:href="#glyph2-3" x="255" y="204"/>
+  <use xlink:href="#glyph2-9" x="261" y="204"/>
+  <use xlink:href="#glyph2-10" x="273" y="204"/>
+  <use xlink:href="#glyph2-7" x="282" y="204"/>
+  <use xlink:href="#glyph2-3" x="293" y="204"/>
+  <use xlink:href="#glyph2-8" x="299" y="204"/>
+  <use xlink:href="#glyph2-13" x="307" y="204"/>
+  <use xlink:href="#glyph2-7" x="319" y="204"/>
+  <use xlink:href="#glyph2-3" x="330" y="204"/>
+  <use xlink:href="#glyph2-6" x="336" y="204"/>
+  <use xlink:href="#glyph2-7" x="347" y="204"/>
+  <use xlink:href="#glyph2-26" x="358" y="204"/>
+  <use xlink:href="#glyph2-14" x="364" y="204"/>
+  <use xlink:href="#glyph2-9" x="375" y="204"/>
+  <use xlink:href="#glyph2-23" x="387" y="204"/>
+  <use xlink:href="#glyph2-8" x="392" y="204"/>
+  <use xlink:href="#glyph2-3" x="400" y="204"/>
+  <use xlink:href="#glyph2-10" x="406" y="204"/>
+  <use xlink:href="#glyph2-7" x="415" y="204"/>
+  <use xlink:href="#glyph2-5" x="426" y="204"/>
+  <use xlink:href="#glyph2-15" x="434" y="204"/>
+  <use xlink:href="#glyph2-7" x="445" y="204"/>
+  <use xlink:href="#glyph2-5" x="456" y="204"/>
+  <use xlink:href="#glyph2-24" x="464" y="204"/>
+  <use xlink:href="#glyph2-3" x="470" y="204"/>
+  <use xlink:href="#glyph2-27" x="476" y="204"/>
+  <use xlink:href="#glyph2-9" x="481" y="204"/>
+  <use xlink:href="#glyph2-10" x="493" y="204"/>
+  <use xlink:href="#glyph2-8" x="502" y="204"/>
+  <use xlink:href="#glyph2-3" x="510" y="204"/>
+  <use xlink:href="#glyph2-16" x="516" y="204"/>
+  <use xlink:href="#glyph2-23" x="525" y="204"/>
+  <use xlink:href="#glyph2-20" x="530" y="204"/>
+  <use xlink:href="#glyph2-16" x="535" y="204"/>
+  <use xlink:href="#glyph2-28" x="544" y="204"/>
+  <use xlink:href="#glyph2-3" x="555" y="204"/>
+  <use xlink:href="#glyph2-29" x="561" y="204"/>
+  <use xlink:href="#glyph2-30" x="565" y="204"/>
+  <use xlink:href="#glyph2-5" x="578" y="204"/>
+  <use xlink:href="#glyph2-7" x="586" y="204"/>
+  <use xlink:href="#glyph2-14" x="597" y="204"/>
+  <use xlink:href="#glyph2-8" x="608" y="204"/>
+  <use xlink:href="#glyph2-7" x="616" y="204"/>
+  <use xlink:href="#glyph2-29" x="627" y="204"/>
+  <use xlink:href="#glyph2-17" x="631" y="204"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 228 L 85 228 L 85 260 L 40 260 Z M 40 228 L 85 228 L 85 260 L 40 260 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="40" y="249"/>
+  <use xlink:href="#glyph3-2" x="49" y="249"/>
+  <use xlink:href="#glyph3-3" x="57" y="249"/>
+  <use xlink:href="#glyph3-4" x="62" y="249"/>
+  <use xlink:href="#glyph3-2" x="69" y="249"/>
+  <use xlink:href="#glyph3-3" x="77" y="249"/>
+  <use xlink:href="#glyph3-5" x="82" y="249"/>
+</g>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 91 229 L 639 229 L 639 258 L 91 258 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 91 232 C 91 230.894531 91.894531 230 93 230 L 637 230 C 638.105469 230 639 230.449219 639 231 L 639 257 C 639 258.105469 638.105469 259 637 259 L 93 259 C 91.894531 259 91 258.550781 91 258 Z M 91 229 L 639 229 L 639 258 L 91 258 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 91 233 C 91 231.894531 91.894531 231 93 231 L 637 231 C 638.105469 231 639 231.449219 639 232 L 639 258 C 639 259.105469 638.105469 260 637 260 L 93 260 C 91.894531 260 91 259.550781 91 259 Z M 91 229 L 639 229 L 639 258 L 91 258 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 90 228 L 93 228 L 93 231 L 90 231 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 93 228 L 637 228 L 637 231 L 93 231 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 637 228 L 640 228 L 640 231 L 637 231 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 90 231 L 93 231 L 93 256 L 90 256 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 637 231 L 640 231 L 640 256 L 637 256 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 90 256 L 93 256 L 93 260 L 90 260 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 93 256 L 637 256 L 637 260 L 93 260 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 637 256 L 640 256 L 640 260 L 637 260 Z "/>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph3-6" x="95" y="249"/>
+  <use xlink:href="#glyph3-7" x="103" y="249"/>
+  <use xlink:href="#glyph3-8" x="112" y="249"/>
+  <use xlink:href="#glyph3-9" x="120" y="249"/>
+  <use xlink:href="#glyph3-10" x="128" y="249"/>
+  <use xlink:href="#glyph3-2" x="135" y="249"/>
+  <use xlink:href="#glyph3-3" x="143" y="249"/>
+  <use xlink:href="#glyph3-4" x="148" y="249"/>
+  <use xlink:href="#glyph3-2" x="155" y="249"/>
+  <use xlink:href="#glyph3-3" x="163" y="249"/>
+  <use xlink:href="#glyph3-5" x="168" y="249"/>
+  <use xlink:href="#glyph3-11" x="171" y="249"/>
+  <use xlink:href="#glyph3-11" x="176" y="249"/>
+  <use xlink:href="#glyph3-12" x="181" y="249"/>
+  <use xlink:href="#glyph3-13" x="184" y="249"/>
+  <use xlink:href="#glyph3-14" x="193" y="249"/>
+  <use xlink:href="#glyph3-15" x="202" y="249"/>
+  <use xlink:href="#glyph3-16" x="212" y="249"/>
+  <use xlink:href="#glyph3-1" x="222" y="249"/>
+  <use xlink:href="#glyph3-17" x="231" y="249"/>
+  <use xlink:href="#glyph3-14" x="240" y="249"/>
+  <use xlink:href="#glyph3-18" x="249" y="249"/>
+  <use xlink:href="#glyph3-12" x="260" y="249"/>
+  <use xlink:href="#glyph3-19" x="263" y="249"/>
+  <use xlink:href="#glyph3-20" x="272" y="249"/>
+  <use xlink:href="#glyph3-21" x="282" y="249"/>
+  <use xlink:href="#glyph3-14" x="291" y="249"/>
+  <use xlink:href="#glyph3-21" x="300" y="249"/>
+  <use xlink:href="#glyph3-19" x="309" y="249"/>
+  <use xlink:href="#glyph3-1" x="318" y="249"/>
+  <use xlink:href="#glyph3-17" x="327" y="249"/>
+  <use xlink:href="#glyph3-16" x="336" y="249"/>
+  <use xlink:href="#glyph3-12" x="346" y="249"/>
+  <use xlink:href="#glyph3-22" x="349" y="249"/>
+  <use xlink:href="#glyph3-23" x="358" y="249"/>
+  <use xlink:href="#glyph3-24" x="372" y="249"/>
+  <use xlink:href="#glyph3-17" x="379" y="249"/>
+  <use xlink:href="#glyph3-25" x="388" y="249"/>
+  <use xlink:href="#glyph3-13" x="399" y="249"/>
+  <use xlink:href="#glyph3-20" x="408" y="249"/>
+  <use xlink:href="#glyph3-24" x="418" y="249"/>
+  <use xlink:href="#glyph3-26" x="425" y="249"/>
+  <use xlink:href="#glyph3-27" x="432" y="249"/>
+  <use xlink:href="#glyph3-28" x="441" y="249"/>
+  <use xlink:href="#glyph3-23" x="450" y="249"/>
+  <use xlink:href="#glyph3-15" x="464" y="249"/>
+  <use xlink:href="#glyph3-23" x="474" y="249"/>
+  <use xlink:href="#glyph3-24" x="488" y="249"/>
+  <use xlink:href="#glyph3-29" x="495" y="249"/>
+  <use xlink:href="#glyph3-30" x="504" y="249"/>
+  <use xlink:href="#glyph3-31" x="515" y="249"/>
+  <use xlink:href="#glyph3-13" x="524" y="249"/>
+  <use xlink:href="#glyph3-32" x="533" y="249"/>
+  <use xlink:href="#glyph3-28" x="542" y="249"/>
+  <use xlink:href="#glyph3-33" x="551" y="249"/>
+  <use xlink:href="#glyph3-23" x="560" y="249"/>
+  <use xlink:href="#glyph3-14" x="574" y="249"/>
+  <use xlink:href="#glyph3-24" x="583" y="249"/>
+  <use xlink:href="#glyph3-34" x="590" y="249"/>
+  <use xlink:href="#glyph3-13" x="597" y="249"/>
+  <use xlink:href="#glyph3-35" x="606" y="249"/>
+  <use xlink:href="#glyph3-36" x="612" y="249"/>
+  <use xlink:href="#glyph3-15" x="624" y="249"/>
+  <use xlink:href="#glyph3-29" x="634" y="249"/>
+  <use xlink:href="#glyph3-17" x="643" y="249"/>
+  <use xlink:href="#glyph3-37" x="652" y="249"/>
+  <use xlink:href="#glyph3-38" x="667" y="249"/>
+  <use xlink:href="#glyph3-39" x="670" y="249"/>
+  <use xlink:href="#glyph3-28" x="678" y="249"/>
+  <use xlink:href="#glyph3-33" x="687" y="249"/>
+  <use xlink:href="#glyph3-33" x="696" y="249"/>
+  <use xlink:href="#glyph3-40" x="705" y="249"/>
+  <use xlink:href="#glyph3-41" x="713" y="249"/>
+  <use xlink:href="#glyph3-6" x="720" y="249"/>
+  <use xlink:href="#glyph3-38" x="728" y="249"/>
+  <use xlink:href="#glyph3-2" x="731" y="249"/>
+  <use xlink:href="#glyph3-42" x="739" y="249"/>
+  <use xlink:href="#glyph3-9" x="748" y="249"/>
+  <use xlink:href="#glyph3-4" x="756" y="249"/>
+  <use xlink:href="#glyph3-43" x="763" y="249"/>
+  <use xlink:href="#glyph3-44" x="771" y="249"/>
+  <use xlink:href="#glyph3-45" x="778" y="249"/>
+</g>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 41 301 L 98 301 L 98 330 L 41 330 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 40 300 L 43 300 L 43 303 L 40 303 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 43 300 L 96 300 L 96 303 L 43 303 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 96 300 L 99 300 L 99 303 L 96 303 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 40 303 L 43 303 L 43 328 L 40 328 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 96 303 L 99 303 L 99 328 L 96 328 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 40 328 L 43 328 L 43 332 L 40 332 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 43 328 L 96 328 L 96 332 L 43 332 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 96 328 L 99 328 L 99 332 L 96 332 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 48 305 L 91 305 L 91 326 L 48 326 Z M 48 305 L 91 305 L 91 326 L 48 326 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph3-13" x="48" y="322"/>
+  <use xlink:href="#glyph3-3" x="57" y="322"/>
+  <use xlink:href="#glyph3-2" x="62" y="322"/>
+  <use xlink:href="#glyph3-41" x="70" y="322"/>
+  <use xlink:href="#glyph3-46" x="77" y="322"/>
+  <use xlink:href="#glyph3-2" x="83" y="322"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph3-13" x="48" y="321"/>
+  <use xlink:href="#glyph3-3" x="57" y="321"/>
+  <use xlink:href="#glyph3-2" x="62" y="321"/>
+  <use xlink:href="#glyph3-41" x="70" y="321"/>
+  <use xlink:href="#glyph3-46" x="77" y="321"/>
+  <use xlink:href="#glyph3-2" x="83" y="321"/>
+</g>
+</g>
+</svg>
diff --git a/doc/images/main.svg b/doc/images/main.svg
new file mode 100644
index 0000000..fe32285
--- /dev/null
+++ b/doc/images/main.svg
@@ -0,0 +1,485 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="705pt" height="560pt" viewBox="0 0 705 560" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 4 -28 L 25.984375 -28 L 25.984375 0 L 4 0 Z M 5.484375 -27 L 5.484375 -1 L 24.5 -1 L 24.5 -27 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 25.609375 -19.203125 C 25.609375 -17.421875 25.195312 -15.828125 24.375 -14.421875 C 23.5625 -13.015625 22.390625 -11.925781 20.859375 -11.15625 C 19.328125 -10.382812 17.507812 -10 15.40625 -10 L 8.46875 -10 L 8.46875 0 L 2.703125 0 L 2.703125 -28 L 15.21875 -28 C 18.550781 -28 21.113281 -27.234375 22.90625 -25.703125 C 24.707031 -24.171875 25.609375 -22.003906 25.609375 -19.203125 Z M 19.8125 -19.109375 C 19.8125 -22.054688 18.066406 -23.53125 14.578125  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 22.46875 -11.015625 C 22.46875 -7.578125 21.53125 -4.878906 19.65625 -2.921875 C 17.789062 -0.972656 15.207031 0 11.90625 0 C 8.675781 0 6.140625 -0.976562 4.296875 -2.9375 C 2.453125 -4.894531 1.53125 -7.585938 1.53125 -11.015625 C 1.53125 -14.429688 2.453125 -17.113281 4.296875 -19.0625 C 6.140625 -21.019531 8.71875 -22 12.03125 -22 C 15.414062 -22 18 -21.050781 19.78125 -19.15625 C 21.570312 -17.269531 22.46875 -14.554688 22.46875 -11.015625 Z M 16.7187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 15.203125 0 L 15.203125 -12.15625 C 15.203125 -15.96875 14.113281 -17.875 11.9375 -17.875 C 10.789062 -17.875 9.863281 -17.289062 9.15625 -16.125 C 8.457031 -14.957031 8.109375 -13.457031 8.109375 -11.625 L 8.109375 0 L 2.625 0 L 2.625 -17.078125 C 2.625 -18.253906 2.609375 -19.21875 2.578125 -19.96875 C 2.546875 -20.726562 2.507812 -21.40625 2.46875 -22 L 7.703125 -22 C 7.742188 -21.726562 7.796875 -21.003906 7.859375 -19.828125 C 7.921875 -18.648438 7.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 16.09375 0 C 16.039062 -0.21875 15.976562 -0.765625 15.90625 -1.640625 C 15.832031 -2.515625 15.796875 -3.242188 15.796875 -3.828125 L 15.71875 -3.828125 C 14.5625 -1.273438 12.363281 0 9.125 0 C 6.726562 0 4.875 -0.960938 3.5625 -2.890625 C 2.257812 -4.816406 1.609375 -7.515625 1.609375 -10.984375 C 1.609375 -14.492188 2.296875 -17.207031 3.671875 -19.125 C 5.054688 -21.039062 7.007812 -22 9.53125 -22 C 10.988281 -22 12.25 -21.6875 13.3125 -21.0625 C 14.3 [...]
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 560 L 145 560 Z "/>
+</clipPath>
+<image id="image37356" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,268)">
+  <use xlink:href="#image37356"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 560 L 0 560 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image37359" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image37359"/>
+</pattern>
+<image id="image37362" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image37362"/>
+</pattern>
+<image id="image37367" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image37367"/>
+</pattern>
+<image id="image37372" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image37372"/>
+</pattern>
+<image id="image37377" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image37377"/>
+</pattern>
+<image id="image37382" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image37382"/>
+</pattern>
+<image id="image37387" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image37387"/>
+</pattern>
+<image id="image37392" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image37392"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip10">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+</clipPath>
+<clipPath id="clip12">
+  <path d="M 0 119 L 145 119 L 145 120 L 0 120 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 129 C 24 127.894531 24.894531 127 26 127 L 120 127 C 121.105469 127 122 127.449219 122 128 L 122 154 C 122 155.105469 121.105469 156 120 156 L 26 156 C 24.894531 156 24 155.550781 24 155 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,141.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image37398" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,126)">
+  <use xlink:href="#image37398"/>
+</pattern>
+<image id="image37401" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,126)">
+  <use xlink:href="#image37401"/>
+</pattern>
+<image id="image37406" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,126)">
+  <use xlink:href="#image37406"/>
+</pattern>
+<image id="image37411" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,129)">
+  <use xlink:href="#image37411"/>
+</pattern>
+<image id="image37416" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,129)">
+  <use xlink:href="#image37416"/>
+</pattern>
+<image id="image37421" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,154)">
+  <use xlink:href="#image37421"/>
+</pattern>
+<image id="image37426" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,154)">
+  <use xlink:href="#image37426"/>
+</pattern>
+<image id="image37431" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,154)">
+  <use xlink:href="#image37431"/>
+</pattern>
+<clipPath id="clip15">
+  <path d="M 0 164 L 145 164 L 145 182 L 0 182 Z "/>
+</clipPath>
+<clipPath id="clip16">
+  <path d="M 0 182 L 145 182 L 145 183 L 0 183 Z "/>
+</clipPath>
+<clipPath id="clip17">
+  <path d="M 0 183 L 145 183 L 145 205 L 0 205 Z "/>
+</clipPath>
+<image id="image37436" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip18">
+  <path d="M 0 205 L 145 205 L 145 206 L 0 206 Z "/>
+</clipPath>
+<clipPath id="clip19">
+  <path d="M 0 206 L 145 206 L 145 228 L 0 228 Z "/>
+</clipPath>
+<image id="image37439" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip20">
+  <path d="M 150 0 L 705 0 L 705 560 L 150 560 Z "/>
+</clipPath>
+</defs>
+<g id="surface37353">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 268 L 148.5 268 L 148.5 292 L 146.5 292 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 560 L 145 560 Z M 145 0 L 150 0 L 150 560 L 145 560 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 560 L 0 560 Z M 0 0 L 145 0 L 145 560 L 0 560 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="96"/>
+  <use xlink:href="#glyph0-10" x="58" y="96"/>
+  <use xlink:href="#glyph0-11" x="65" y="96"/>
+  <use xlink:href="#glyph0-12" x="75" y="96"/>
+  <use xlink:href="#glyph0-8" x="82" y="96"/>
+  <use xlink:href="#glyph0-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 101 L 145 101 L 145 119 L 0 119 Z M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="115"/>
+  <use xlink:href="#glyph0-4" x="47" y="115"/>
+  <use xlink:href="#glyph0-2" x="57" y="115"/>
+  <use xlink:href="#glyph0-8" x="67" y="115"/>
+  <use xlink:href="#glyph0-11" x="74" y="115"/>
+  <use xlink:href="#glyph0-15" x="84" y="115"/>
+  <use xlink:href="#glyph0-8" x="93" y="115"/>
+  <use xlink:href="#glyph0-13" x="100" y="115"/>
+</g>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 126 L 26 126 L 26 129 L 23 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 126 L 120 126 L 120 129 L 26 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 126 L 123 126 L 123 129 L 120 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 129 L 26 129 L 26 154 L 23 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 129 L 123 129 L 123 154 L 120 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 154 L 26 154 L 26 158 L 23 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 154 L 120 154 L 120 158 L 26 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 154 L 123 154 L 123 158 L 120 158 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 131 L 115 131 L 115 152 L 31 152 Z M 31 131 L 115 131 L 115 152 L 31 152 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="148"/>
+  <use xlink:href="#glyph1-8" x="69" y="148"/>
+  <use xlink:href="#glyph1-8" x="77" y="148"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="147"/>
+  <use xlink:href="#glyph1-8" x="69" y="147"/>
+  <use xlink:href="#glyph1-8" x="77" y="147"/>
+</g>
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 164 L 145 164 L 145 182 L 0 182 Z M 0 164 L 145 164 L 145 182 L 0 182 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="178"/>
+  <use xlink:href="#glyph0-16" x="60" y="178"/>
+  <use xlink:href="#glyph0-17" x="64" y="178"/>
+  <use xlink:href="#glyph0-18" x="68" y="178"/>
+  <use xlink:href="#glyph0-2" x="78" y="178"/>
+  <use xlink:href="#glyph0-8" x="88" y="178"/>
+</g>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 184 L 53 184 L 53 201 L 5 201 Z M 5 184 L 53 184 L 53 201 L 5 201 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="198"/>
+  <use xlink:href="#glyph2-2" x="8" y="198"/>
+  <use xlink:href="#glyph2-3" x="17" y="198"/>
+  <use xlink:href="#glyph2-4" x="26" y="198"/>
+  <use xlink:href="#glyph2-5" x="34" y="198"/>
+  <use xlink:href="#glyph2-6" x="38" y="198"/>
+  <use xlink:href="#glyph2-5" x="42" y="198"/>
+  <use xlink:href="#glyph2-7" x="46" y="198"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 203 L 141 203 L 141 204 L 4 204 Z M 4 203 L 141 203 L 141 204 L 4 204 Z "/>
+<use xlink:href="#image37436" transform="matrix(1,0,0,1,140,203)"/>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 207 L 85 207 L 85 224 L 5 224 Z M 5 207 L 85 207 L 85 224 L 5 224 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-8" x="5" y="221"/>
+  <use xlink:href="#glyph2-9" x="16" y="221"/>
+  <use xlink:href="#glyph2-5" x="24" y="221"/>
+  <use xlink:href="#glyph2-6" x="28" y="221"/>
+  <use xlink:href="#glyph2-10" x="32" y="221"/>
+  <use xlink:href="#glyph2-6" x="39" y="221"/>
+  <use xlink:href="#glyph2-5" x="43" y="221"/>
+  <use xlink:href="#glyph2-7" x="47" y="221"/>
+  <use xlink:href="#glyph2-11" x="54" y="221"/>
+  <use xlink:href="#glyph2-12" x="58" y="221"/>
+  <use xlink:href="#glyph2-13" x="67" y="221"/>
+  <use xlink:href="#glyph2-14" x="76" y="221"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 226 L 141 226 L 141 227 L 4 227 Z M 4 226 L 141 226 L 141 227 L 4 227 Z "/>
+<use xlink:href="#image37439" transform="matrix(1,0,0,1,140,226)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 705 0 L 705 560 L 150 560 Z M 150 0 L 705 0 L 705 560 L 150 560 Z "/>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="705" height="560" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(86.666667%,86.666667%,86.666667%);fill-opacity:1;" d="M 150 0 L 705 0 L 705 560 L 150 560 Z M 150 0 L 705 0 L 705 560 L 150 560 Z "/>
+<g style="fill:rgb(86.666667%,86.666667%,86.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="378" y="294"/>
+  <use xlink:href="#glyph3-2" x="405" y="294"/>
+  <use xlink:href="#glyph3-3" x="429" y="294"/>
+  <use xlink:href="#glyph3-4" x="452" y="294"/>
+</g>
+</g>
+</svg>
diff --git a/doc/images/manual-keying.svg b/doc/images/manual-keying.svg
new file mode 100644
index 0000000..b35e10f
--- /dev/null
+++ b/doc/images/manual-keying.svg
@@ -0,0 +1,2844 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 C 2.46875 -4.046875 2.9375 -4.046875 3.34375 -4.046875 C 4.25 -4.046875 5.390625 -4.15625 5.96875 -4.328125 C 7.25 -4.71875 8.015625 -5.78125 8.015625 -7.328125 C 8.015625 -8.140625 7.734375 -8.78125 7.203125 -9.28125 C 6.5 -9.90625 5.71875 -10 4.21875 -10 Z M 3.46875 -4.953125 C 3.046875 -4.953125 2.546875 -4.953125 2.015625 -5.015625 L 2.015625 -9.078125 L 3.5 -9.078125 C 4.21875 -9.078125 4.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 4.1875 0 L 4.25 0 C 4.890625 0 5.515625 -0.125 6.203125 -0.375 L 5.921875 -1.140625 C 5.46875 -1 5.03125 -0.921875 4.640625 -0.921875 C 4.515625 -0.921875 4.421875 -0.921875 4.3125 -0.9375 C 2.75 -1.125 2.015625 -1.953125 2.015625 -3.609375 C 2.015625 -5.1875 2.828125 -6.078125 4.515625 -6.078125 C 4.953125 -6.078125 5.453125 -5.984375 6 -5.8125 L 6.296875 -6.609375 C 5.640625 -6.859375 5.015625 -7 4.4375 -7 C 3.1875 -7 2.265625 -6.65625 1.671875 -5.96875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 5.015625 0 L 5.015625 -4.734375 L 8.484375 -10 L 7.125 -10 L 4.46875 -5.859375 L 1.875 -10 L 0.4375 -10 L 3.796875 -4.734375 L 3.796875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 2.015625 -2.625 L 2.015625 -7 L 0.796875 -7 L 0.796875 -2.34375 C 0.796875 -0.90625 1.671875 0 3.28125 0 C 4.078125 0 4.984375 -0.21875 5.9375 -0.625 L 6.171875 0 L 7.015625 0 L 7.015625 -7 L 5.796875 -7 L 5.796875 -1.484375 C 5.015625 -1.15625 4.3125 -0.984375 3.6875 -0.984375 C 2.453125 -0.984375 2.015625 -1.5 2.015625 -2.625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 0.390625 -7 L 2.984375 0 L 4.09375 0 L 5.984375 -5.671875 L 7.828125 0 L 9.015625 0 L 11.609375 -7 L 10.359375 -7 L 8.4375 -1.125 L 6.609375 -7 L 5.453125 -7 L 3.5625 -1.125 L 1.640625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.65625 C 7.015625 -6.09375 6.15625 -7 4.546875 -7 C 3.765625 -7 2.828125 -6.796875 1.875 -6.421875 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.796875 -5.90625 3.546875 -6.078125 4.140625 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 0.796875 -10.984375 L 0.796875 -8 L 2.015625 -8 L 2.015625 -10.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 3.5625 -0.921875 C 2.859375 -0.921875 2.5 -1.078125 2.015625 -1.34375 L 2.015625 -5.765625 C 2.515625 -5.984375 3.015625 -6.078125 3.546875 -6.078125 C 5.046875 -6.078125 5.796875 -5 5.796875 -3.5 C 5.796875 -1.984375 5.078125 -0.921875 3.5625 -0.921875 Z M 3.828125 0 C 5.9375 0 7.015625 -1.40625 7.015625 -3.40625 C 7.015625 -4.5625 6.6875 -5.46875 6.03125 -6.109375 C 5.40625 -6.703125 4.609375 -7 3.671875 -7 C 3.109375 -7 2.5625 -6.890625 2.015625 -6.6718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 2.953125 -1.0625 C 2.015625 -1.0625 2.015625 -1.546875 2.015625 -2.09375 L 2.015625 -10 L 0.796875 -10 L 0.796875 -1.6875 C 0.796875 -0.6875 1.40625 0 2.34375 0 C 3.03125 0 3.53125 -0.25 3.78125 -0.34375 L 3.78125 -1.21875 C 3.453125 -1.125 3.21875 -1.0625 2.953125 -1.0625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d="M 5.75 -7 L 3.828125 -4.21875 L 1.828125 -7 L 0.46875 -7 L 3.03125 -3.4375 L 0.5625 0 L 1.796875 0 L 3.609375 -2.625 L 5.5 0 L 6.859375 0 L 4.40625 -3.421875 L 7.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.640625 C 7.015625 -6.078125 6.140625 -7 4.546875 -7 C 3.78125 -7 2.9375 -6.796875 2.015625 -6.40625 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.5625 C 2.796875 -5.921875 3.5 -6.078125 4.09375 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 5.796875 -0.453125 L 5.796875 -0.21875 C 5.796875 0.265625 5.796875 0.609375 5.765625 0.84375 C 5.625 2.234375 4.78125 3.078125 3.390625 3.078125 C 2.875 3.078125 2.328125 2.953125 1.734375 2.703125 L 1.375 3.5625 C 1.953125 3.8125 2.84375 4 3.53125 4 C 4.59375 4 5.515625 3.625 6.078125 3.09375 C 6.78125 2.421875 7.015625 1.765625 7.015625 0.4375 L 7.015625 -7 L 6.15625 -7 L 6.015625 -6.546875 L 5.6875 -6.671875 C 5.09375 -6.890625 4.546875 -7 4.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-25">
+<path style="stroke:none;" d="M 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-26">
+<path style="stroke:none;" d="M 5.9375 -7 L 3.734375 -0.921875 L 1.515625 -7 L 0.328125 -7 L 3.21875 0.4375 L 1.765625 4 L 3 4 L 7.0625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-27">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 5.25 -7 L 2.125 -3.875 L 5.328125 0 L 6.734375 0 L 3.46875 -4 L 6.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-28">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-29">
+<path style="stroke:none;" d="M 0.796875 0 L 6.75 0 L 6.75 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 6.359375 -5.046875 L 6.359375 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 6.75 -9.078125 L 6.75 -10 L 0.796875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-30">
+<path style="stroke:none;" d="M 4.5625 -9.078125 C 4.890625 -9.078125 5.25 -9.015625 5.703125 -8.90625 L 5.890625 -9.75 C 5.390625 -9.890625 4.78125 -10 4.171875 -10 C 3.1875 -10 2.453125 -9.65625 2.015625 -8.953125 C 1.875 -8.703125 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.765625 -7 L 0.765625 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.375 -6.078125 L 5.375 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-31">
+<path style="stroke:none;" d="M 7.015625 -10 L 5.25 -10 L 1 -3.671875 L 1 -2.890625 L 5.796875 -2.890625 L 5.796875 0 L 7.015625 0 L 7.015625 -2.890625 L 9 -2.890625 L 9 -3.921875 L 7.015625 -3.921875 Z M 5.796875 -3.921875 L 2.4375 -3.921875 L 5.796875 -8.9375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-32">
+<path style="stroke:none;" d="M 9.015625 -5 C 9.015625 -8.21875 7.21875 -10 4.046875 -10 L 0.796875 -10 L 0.796875 0 L 3.59375 0 C 7 0 9.015625 -1.640625 9.015625 -5 Z M 7.796875 -5.109375 C 7.796875 -2.3125 6.5 -0.921875 3.734375 -0.921875 L 2.015625 -0.921875 L 2.015625 -9.078125 L 3.71875 -9.078125 C 6.390625 -9.078125 7.796875 -7.78125 7.796875 -5.109375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-33">
+<path style="stroke:none;" d="M 6.890625 -7 L 5.65625 -7 L 3.703125 -1.515625 L 3.640625 -1.140625 L 3.5625 -1.515625 L 1.609375 -7 L 0.328125 -7 L 2.96875 0 L 4.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-34">
+<path style="stroke:none;" d="M 1.796875 -10 L 1.796875 -3 L 3.015625 -3 L 3.015625 -10 Z M 1.796875 -0.921875 L 1.796875 0 L 3.015625 0 L 3.015625 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-35">
+<path style="stroke:none;" d="M 2.015625 -9.078125 L 6.6875 -9.078125 L 6.6875 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.046875 L 6.25 -5.046875 L 6.25 -5.953125 L 2.015625 -5.953125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-36">
+<path style="stroke:none;" d="M 1.4375 -0.84375 L 0.3125 2 L 1.578125 2 L 2.734375 -0.84375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-37">
+<path style="stroke:none;" d="M 9.046875 -8.296875 L 9.546875 -9.25 C 8.515625 -9.71875 7.453125 -10 6.03125 -10 C 5.03125 -10 4.140625 -9.796875 3.328125 -9.359375 C 1.859375 -8.578125 0.796875 -7 0.796875 -4.953125 C 0.796875 -4.03125 1.03125 -3.203125 1.46875 -2.4375 C 2.328125 -1 3.78125 0 6.0625 0 C 7.90625 0 9.171875 -0.515625 10.015625 -1.328125 L 10.015625 -4.953125 L 5.71875 -4.953125 L 5.71875 -4.046875 L 8.796875 -4.046875 L 8.796875 -1.6875 C 8.203125 -1.171875 7.4375 -0.9218 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-38">
+<path style="stroke:none;" d="M 2.015625 -5 C 2.015625 -5.796875 2.171875 -6.5 2.4375 -7.109375 C 2.953125 -8.1875 3.921875 -9.078125 5.40625 -9.078125 C 6.046875 -9.078125 6.65625 -8.921875 7.15625 -8.5625 C 8.140625 -7.90625 8.796875 -6.609375 8.796875 -5 C 8.796875 -4.21875 8.640625 -3.515625 8.359375 -2.90625 C 7.859375 -1.828125 6.890625 -0.921875 5.40625 -0.921875 C 4.765625 -0.921875 4.15625 -1.09375 3.640625 -1.453125 C 2.65625 -2.09375 2.015625 -3.390625 2.015625 -5 Z M 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-39">
+<path style="stroke:none;" d="M 1 -10 L 1 -9.078125 L 4.796875 -9.078125 L 4.796875 0 L 6.015625 0 L 6.015625 -9.078125 L 9 -9.078125 L 9 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-40">
+<path style="stroke:none;" d="M 8.015625 -7.203125 C 8.015625 -8.0625 7.734375 -8.75 7.203125 -9.28125 C 6.640625 -9.84375 5.96875 -10 4.8125 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 3.21875 -4.046875 C 3.71875 -4.046875 4.03125 -4.046875 4.203125 -4.046875 L 7.234375 0 L 8.609375 0 L 5.59375 -4.15625 C 7.109375 -4.453125 8.015625 -5.5625 8.015625 -7.203125 Z M 2.015625 -4.953125 L 2.015625 -9.078125 L 4.09375 -9.078125 C 4.59375 -9.078125 4.96875 -9.046875 5.2 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-41">
+<path style="stroke:none;" d="M 4.8125 -10 C 3.890625 -10 2.90625 -9.78125 1.890625 -9.390625 L 2.28125 -8.5 C 3.1875 -8.890625 3.984375 -9.078125 4.640625 -9.078125 C 5.734375 -9.078125 6.796875 -8.578125 6.796875 -7.6875 C 6.796875 -7.328125 6.6875 -7.015625 6.4375 -6.734375 C 5.96875 -6.21875 5.078125 -5.953125 3.796875 -5.953125 L 3.796875 -5.046875 L 3.921875 -5.046875 C 4.796875 -5.046875 5.453125 -4.890625 5.9375 -4.5625 C 6.515625 -4.171875 6.796875 -3.640625 6.796875 -3 C 6.7968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-42">
+<path style="stroke:none;" d="M 4.125 -0.921875 C 3.34375 -0.921875 2.296875 -1.15625 1 -1.609375 L 0.59375 -0.53125 C 1.703125 -0.21875 2.484375 0 3.859375 0 C 5.53125 0 6.734375 -0.484375 7.421875 -1.34375 C 7.8125 -1.828125 8.015625 -2.359375 8.015625 -2.90625 C 8.015625 -3.6875 7.703125 -4.265625 7.09375 -4.6875 C 6.359375 -5.15625 5.78125 -5.40625 4.703125 -5.703125 C 4.09375 -5.859375 3.5 -6.078125 2.9375 -6.328125 C 2.328125 -6.609375 2.015625 -7 2.015625 -7.5 C 2.015625 -8.5625 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-43">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.28125 L 5.265625 -2.859375 L 6.546875 -2.859375 L 9.796875 -8.28125 L 9.796875 0 L 11.015625 0 L 11.015625 -10 L 9.40625 -10 L 5.921875 -3.921875 L 2.53125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-44">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 6.484375 -10 L 2.171875 -5.125 L 6.71875 0 L 8.296875 0 L 3.71875 -5.234375 L 8.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-45">
+<path style="stroke:none;" d="M 9.359375 -9.078125 C 10.109375 -9.078125 10.796875 -8.984375 10.796875 -8.734375 L 10.796875 -1.625 C 10.796875 -0.671875 11.40625 0 12.34375 0 C 13.046875 0 13.546875 -0.21875 13.796875 -0.296875 L 13.796875 -1.078125 C 13.46875 -0.984375 13.21875 -0.921875 12.953125 -0.921875 C 12.015625 -0.921875 12.015625 -1.390625 12.015625 -1.921875 L 12.015625 -8.90625 C 12.015625 -9.71875 10.640625 -10 9.015625 -10 C 8.078125 -10 7.40625 -9.65625 7 -8.953125 C 6.85 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.578125 0 C 1.710938 0 0.601562 -0.921875 0.25 -2.765625 L 1.71875 -3 C 1.8125 -2.4375 2.019531 -2 2.34375 -1.6875 C 2.675781 -1.375 3.085938 -1.21875 3.578125 -1.21875 C 4.117188 -1.21875 4.546875 -1.421875 4.859375 -1.828125 C 5.171875 -2.234375 5.328125 -2.832031 5.328125 -3.625 L 5.328125 -10.78125 L 3.203125 -10.78125 L 3.203125 -12 L 6.8125 -12 L 6.8125 -3.6875 C 6.8125 -2.539062 6.519531 -1.640625 5.9375 -0.984375 C 5.363281 -0.328125 4.578125 0 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.328125 -10 L 8.65625 -10 L 8.65625 0 L 1.328125 0 Z M 1.8125 -9 L 1.8125 -1 L 8.171875 -1 L 8.171875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 6.46875 -3.53125 C 6.46875 -1.175781 5.660156 0 4.046875 0 C 3.023438 0 2.335938 -0.390625 1.984375 -1.171875 L 1.96875 -1.171875 C 1.976562 -1.128906 1.984375 -0.726562 1.984375 0.03125 L 1.984375 3 L 0.84375 3 L 0.84375 -5.53125 C 0.84375 -6.269531 0.832031 -6.757812 0.8125 -7 L 1.90625 -7 C 1.90625 -6.976562 1.910156 -6.910156 1.921875 -6.796875 C 1.929688 -6.691406 1.941406 -6.519531 1.953125 -6.28125 C 1.960938 -6.039062 1.96875 -5.878906 1.96875 -5.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 1.734375 -3.125 C 1.734375 -2.394531 1.882812 -1.832031 2.1875 -1.4375 C 2.5 -1.050781 2.957031 -0.859375 3.5625 -0.859375 C 4.03125 -0.859375 4.40625 -0.960938 4.6875 -1.171875 C 4.96875 -1.390625 5.160156 -1.664062 5.265625 -2 L 6.265625 -1.703125 C 5.867188 -0.566406 4.960938 0 3.546875 0 C 2.566406 0 1.816406 -0.296875 1.296875 -0.890625 C 0.785156 -1.484375 0.53125 -2.367188 0.53125 -3.546875 C 0.53125 -4.660156 0.785156 -5.515625 1.296875 -6.109375 C [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 5.03125 0 L 5.03125 -4.359375 C 5.03125 -4.816406 4.988281 -5.171875 4.90625 -5.421875 C 4.820312 -5.671875 4.6875 -5.847656 4.5 -5.953125 C 4.320312 -6.066406 4.050781 -6.125 3.6875 -6.125 C 3.175781 -6.125 2.769531 -5.9375 2.46875 -5.5625 C 2.164062 -5.1875 2.015625 -4.660156 2.015625 -3.984375 L 2.015625 0 L 0.875 0 L 0.875 -5.5 C 0.875 -6.320312 0.859375 -6.820312 0.828125 -7 L 1.921875 -7 C 1.921875 -6.976562 1.921875 -6.914062 1.921875 -6.8125 C 1.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 5.015625 -1.203125 C 4.804688 -0.773438 4.535156 -0.46875 4.203125 -0.28125 C 3.867188 -0.09375 3.453125 0 2.953125 0 C 2.117188 0 1.503906 -0.285156 1.109375 -0.859375 C 0.722656 -1.429688 0.53125 -2.300781 0.53125 -3.46875 C 0.53125 -5.820312 1.335938 -7 2.953125 -7 C 3.453125 -7 3.867188 -6.90625 4.203125 -6.71875 C 4.535156 -6.53125 4.804688 -6.234375 5.015625 -5.828125 L 5.015625 -10 L 6.15625 -10 L 6.15625 -1.5 C 6.15625 -0.738281 6.164062 -0.238281  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 0.90625 -8.90625 L 0.90625 -10 L 2.046875 -10 L 2.046875 -8.90625 Z M 0.90625 0 L 0.90625 -7 L 2.046875 -7 L 2.046875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.375 3 C 2.644531 3 2.066406 2.851562 1.640625 2.5625 C 1.210938 2.269531 0.9375 1.851562 0.8125 1.3125 L 1.96875 1.140625 C 2.039062 1.453125 2.195312 1.691406 2.4375 1.859375 C 2.6875 2.035156 3.007812 2.125 3.40625 2.125 C 4.476562 2.125 5.015625 1.382812 5.015625 -0.09375 L 5.015625 -1.328125 L 5 -1.328125 C 4.789062 -0.890625 4.503906 -0.554688 4.140625 -0.328125 C 3.785156 -0.109375 3.367188 0 2.890625 0 C 2.078125 0 1.476562 -0.273438 1.09375 -0.82 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 0.828125 0 L 0.828125 -5 L 5.84375 -5 L 5.84375 0 Z M 5.03125 -4 L 1.640625 -4 L 1.640625 -1 L 5.03125 -1 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 2.171875 -2.984375 L 2.171875 -4 L 5.8125 -4 L 5.8125 -2.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-2">
+<path style="stroke:none;" d="M 7.5 -2.4375 C 7.5 -1.664062 7.203125 -1.066406 6.609375 -0.640625 C 6.015625 -0.210938 5.1875 0 4.125 0 L 1.046875 0 L 1.046875 -9 L 3.734375 -9 C 5.890625 -9 6.96875 -8.238281 6.96875 -6.71875 C 6.96875 -6.15625 6.804688 -5.679688 6.484375 -5.296875 C 6.171875 -4.921875 5.742188 -4.675781 5.203125 -4.5625 C 5.929688 -4.488281 6.492188 -4.257812 6.890625 -3.875 C 7.296875 -3.5 7.5 -3.019531 7.5 -2.4375 Z M 5.75 -6.59375 C 5.75 -7.113281 5.582031 -7.484375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-3">
+<path style="stroke:none;" d="M 1.046875 0 L 1.046875 -9 L 7.03125 -9 L 7.03125 -8.015625 L 2.25 -8.015625 L 2.25 -5 L 6.640625 -5 L 6.640625 -4.015625 L 2.25 -4.015625 L 2.25 -0.984375 L 7.296875 -0.984375 L 7.296875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-4">
+<path style="stroke:none;" d="M 7.171875 -1.0625 C 6.179688 -0.351562 5.175781 0 4.15625 0 C 3.070312 0 2.226562 -0.382812 1.625 -1.15625 C 1.03125 -1.9375 0.734375 -3.019531 0.734375 -4.40625 C 0.734375 -5.863281 1.019531 -6.953125 1.59375 -7.671875 C 2.164062 -8.390625 3.03125 -8.75 4.1875 -8.75 C 5.6875 -8.75 6.6875 -8.25 7.1875 -7.25 L 6.109375 -7 C 5.753906 -7.675781 5.117188 -8.015625 4.203125 -8.015625 C 3.453125 -8.015625 2.898438 -7.738281 2.546875 -7.1875 C 2.191406 -6.644531 2 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-5">
+<path style="stroke:none;" d="M 1.375 -9 L 6.59375 -9 L 6.59375 -8.015625 L 4.59375 -8.015625 L 4.59375 -0.984375 L 6.59375 -0.984375 L 6.59375 0 L 1.375 0 L 1.375 -0.984375 L 3.375 -0.984375 L 3.375 -8.015625 L 1.375 -8.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-6">
+<path style="stroke:none;" d="M 5.484375 0 L 2.015625 -7.609375 C 2.085938 -6.835938 2.125 -6.269531 2.125 -5.90625 L 2.125 0 L 1.046875 0 L 1.046875 -9 L 2.453125 -9 L 5.96875 -1.34375 C 5.882812 -1.988281 5.84375 -2.601562 5.84375 -3.1875 L 5.84375 -9 L 6.9375 -9 L 6.9375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-7">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph4-8">
+<path style="stroke:none;" d="M 7.28125 -6.09375 C 7.28125 -5.5 7.148438 -4.96875 6.890625 -4.5 C 6.628906 -4.03125 6.253906 -3.660156 5.765625 -3.390625 C 5.285156 -3.128906 4.726562 -3 4.09375 -3 L 2.25 -3 L 2.25 0 L 1.046875 0 L 1.046875 -9 L 4.046875 -9 C 5.078125 -9 5.875 -8.742188 6.4375 -8.234375 C 7 -7.722656 7.28125 -7.007812 7.28125 -6.09375 Z M 6.0625 -6.078125 C 6.0625 -7.378906 5.335938 -8.03125 3.890625 -8.03125 L 2.25 -8.03125 L 2.25 -3.953125 L 3.9375 -3.953125 C 4.59375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-9">
+<path style="stroke:none;" d="M 7.328125 -4.53125 C 7.328125 -3.082031 7.035156 -1.960938 6.453125 -1.171875 C 5.878906 -0.390625 5.054688 0 3.984375 0 C 2.898438 0 2.070312 -0.382812 1.5 -1.15625 C 0.9375 -1.925781 0.65625 -3.050781 0.65625 -4.53125 C 0.65625 -5.988281 0.9375 -7.097656 1.5 -7.859375 C 2.0625 -8.617188 2.894531 -9 4 -9 C 5.070312 -9 5.894531 -8.625 6.46875 -7.875 C 7.039062 -7.125 7.328125 -6.007812 7.328125 -4.53125 Z M 6.0625 -4.546875 C 6.0625 -6.859375 5.375 -8.01562 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-10">
+<path style="stroke:none;" d="M 7.328125 -4.59375 C 7.328125 -3.113281 6.992188 -1.976562 6.328125 -1.1875 C 5.660156 -0.394531 4.703125 0 3.453125 0 L 1.046875 0 L 1.046875 -9 L 3.078125 -9 C 4.503906 -9 5.566406 -8.632812 6.265625 -7.90625 C 6.972656 -7.175781 7.328125 -6.070312 7.328125 -4.59375 Z M 6.109375 -4.59375 C 6.109375 -5.78125 5.863281 -6.644531 5.375 -7.1875 C 4.882812 -7.738281 4.113281 -8.015625 3.0625 -8.015625 L 2.25 -8.015625 L 2.25 -0.984375 L 3.328125 -0.984375 C 4.2 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-11">
+<path style="stroke:none;" d="M 6.5625 0 L 3.3125 -4.75 L 2.25 -3.203125 L 2.25 0 L 1.046875 0 L 1.046875 -9 L 2.25 -9 L 2.25 -4.515625 L 6.078125 -9 L 7.5 -9 L 4.171875 -5.140625 L 7.984375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-12">
+<path style="stroke:none;" d="M 4.59375 -3 L 4.59375 0 L 3.390625 0 L 3.390625 -3 L 0.328125 -9 L 1.625 -9 L 4 -3.984375 L 6.359375 -9 L 7.65625 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-13">
+<path style="stroke:none;" d="M 4 -5.578125 L 6.203125 -9 L 7.5 -9 L 4.671875 -4.703125 L 7.765625 0 L 6.453125 0 L 4 -3.828125 L 1.53125 0 L 0.234375 0 L 3.328125 -4.703125 L 0.5 -9 L 1.8125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-14">
+<path style="stroke:none;" d="M 2.015625 -4.546875 C 2.015625 -3.359375 2.203125 -2.46875 2.578125 -1.875 C 2.953125 -1.28125 3.523438 -0.984375 4.296875 -0.984375 C 4.742188 -0.984375 5.144531 -1.144531 5.5 -1.46875 C 5.863281 -1.800781 6.171875 -2.3125 6.421875 -3 L 7.4375 -2.59375 C 6.789062 -1.03125 5.742188 -0.25 4.296875 -0.25 C 3.148438 -0.25 2.269531 -0.617188 1.65625 -1.359375 C 1.039062 -2.097656 0.734375 -3.15625 0.734375 -4.53125 C 0.734375 -7.34375 1.898438 -8.75 4.234375 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-15">
+<path style="stroke:none;" d="M 5.71875 0 L 5.71875 -3.984375 L 2.25 -3.984375 L 2.25 0 L 1.046875 0 L 1.046875 -9 L 2.25 -9 L 2.25 -5 L 5.71875 -5 L 5.71875 -9 L 6.9375 -9 L 6.9375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-16">
+<path style="stroke:none;" d="M 6.765625 0 L 5.859375 -3.046875 L 2.15625 -3.046875 L 1.25 0 L 0 0 L 3.34375 -9 L 4.71875 -9 L 8 0 Z M 4.015625 -8.59375 L 3.9375 -8.328125 L 3.484375 -6.890625 L 2.484375 -4 L 5.53125 -4 L 4.390625 -7.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-17">
+<path style="stroke:none;" d="M 6.796875 -5.828125 C 6.304688 -5.910156 5.84375 -5.953125 5.40625 -5.953125 C 4.707031 -5.953125 4.140625 -5.695312 3.703125 -5.1875 C 3.273438 -4.675781 3.0625 -4.023438 3.0625 -3.234375 L 3.0625 0 L 1.90625 0 L 1.90625 -4.53125 C 1.90625 -4.863281 1.875 -5.25 1.8125 -5.6875 C 1.757812 -6.132812 1.679688 -6.570312 1.578125 -7 L 2.65625 -7 C 2.832031 -6.363281 2.9375 -5.789062 2.96875 -5.28125 L 3 -5.28125 C 3.21875 -5.757812 3.429688 -6.109375 3.640625 -6 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-18">
+<path style="stroke:none;" d="M 4.8125 -0.90625 L 7.21875 -0.90625 L 7.21875 0 L 0.984375 0 L 0.984375 -0.90625 L 3.671875 -0.90625 L 3.671875 -6.09375 L 1.640625 -6.09375 L 1.640625 -7 L 4.8125 -7 Z M 3.53125 -8.78125 L 3.53125 -10 L 4.8125 -10 L 4.8125 -8.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-19">
+<path style="stroke:none;" d="M 7.15625 -3.125 C 7.15625 -2.5 7.023438 -1.953125 6.765625 -1.484375 C 6.515625 -1.015625 6.140625 -0.648438 5.640625 -0.390625 C 5.148438 -0.128906 4.566406 0 3.890625 0 C 3.035156 0 2.34375 -0.160156 1.8125 -0.484375 C 1.289062 -0.804688 0.960938 -1.269531 0.828125 -1.875 L 1.984375 -2 C 2.234375 -1.289062 2.882812 -0.9375 3.9375 -0.9375 C 4.5625 -0.9375 5.054688 -1.128906 5.421875 -1.515625 C 5.796875 -1.910156 5.984375 -2.441406 5.984375 -3.109375 C 5.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-20">
+<path style="stroke:none;" d="M 4.640625 0 L 3.296875 0 L 0.453125 -7 L 1.734375 -7 L 3.515625 -2.0625 L 3.625 -1.6875 L 3.96875 -0.390625 L 4.203125 -1.21875 L 4.453125 -2.046875 L 6.265625 -7 L 7.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-21">
+<path style="stroke:none;" d="M 5.640625 -1.28125 C 5.421875 -0.832031 5.132812 -0.503906 4.78125 -0.296875 C 4.425781 -0.0976562 3.988281 0 3.46875 0 C 2.582031 0 1.929688 -0.285156 1.515625 -0.859375 C 1.097656 -1.441406 0.890625 -2.3125 0.890625 -3.46875 C 0.890625 -5.820312 1.75 -7 3.46875 -7 C 4 -7 4.441406 -6.90625 4.796875 -6.71875 C 5.148438 -6.539062 5.4375 -6.242188 5.65625 -5.828125 L 5.65625 -10 L 6.796875 -10 L 6.796875 -1.5 C 6.796875 -0.738281 6.804688 -0.238281 6.828125 0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-22">
+<path style="stroke:none;" d="M 7.515625 0 L 0.46875 0 L 0.46875 -0.90625 L 5.84375 -8.015625 L 0.921875 -8.015625 L 0.921875 -9 L 7.21875 -9 L 7.21875 -8.125 L 1.84375 -0.984375 L 7.515625 -0.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-23">
+<path style="stroke:none;" d="M 0.734375 0 L 6.125 -10 L 7.25 -10 L 1.890625 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-24">
+<path style="stroke:none;" d="M 7.09375 -3.53125 C 7.09375 -1.175781 6.238281 0 4.53125 0 C 3.457031 0 2.734375 -0.390625 2.359375 -1.171875 L 2.328125 -1.171875 C 2.347656 -1.128906 2.359375 -0.738281 2.359375 0 L 2.359375 3 L 1.203125 3 L 1.203125 -5.515625 C 1.203125 -6.265625 1.191406 -6.757812 1.171875 -7 L 2.28125 -7 C 2.28125 -6.976562 2.285156 -6.90625 2.296875 -6.78125 C 2.304688 -6.664062 2.316406 -6.488281 2.328125 -6.25 C 2.335938 -6.007812 2.34375 -5.832031 2.34375 -5.71875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-25">
+<path style="stroke:none;" d="M 7.15625 -2.484375 C 7.15625 -1.691406 6.878906 -1.078125 6.328125 -0.640625 C 5.785156 -0.210938 5.023438 0 4.046875 0 C 3.109375 0 2.363281 -0.160156 1.8125 -0.484375 C 1.257812 -0.804688 0.929688 -1.285156 0.828125 -1.921875 L 2.015625 -2 C 2.171875 -1.300781 2.847656 -0.953125 4.046875 -0.953125 C 4.648438 -0.953125 5.125 -1.082031 5.46875 -1.34375 C 5.8125 -1.613281 5.984375 -2.007812 5.984375 -2.53125 C 5.984375 -2.84375 5.878906 -3.109375 5.671875 -3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-26">
+<path style="stroke:none;" d="M 0.9375 0 L 0.9375 -0.75 C 1.15625 -1.226562 1.488281 -1.710938 1.9375 -2.203125 C 2.382812 -2.691406 3 -3.25 3.78125 -3.875 C 4.46875 -4.4375 4.960938 -4.921875 5.265625 -5.328125 C 5.578125 -5.742188 5.734375 -6.144531 5.734375 -6.53125 C 5.734375 -7.019531 5.578125 -7.394531 5.265625 -7.65625 C 4.960938 -7.925781 4.53125 -8.0625 3.96875 -8.0625 C 3.457031 -8.0625 3.046875 -7.96875 2.734375 -7.78125 C 2.429688 -7.59375 2.25 -7.332031 2.1875 -7 L 1.03125 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-27">
+<path style="stroke:none;" d="M 6.09375 -2.09375 L 6.09375 0 L 4.953125 0 L 4.953125 -2.09375 L 0.671875 -2.09375 L 0.671875 -2.984375 L 4.828125 -9 L 6.09375 -9 L 6.09375 -3 L 7.28125 -3 L 7.28125 -2.09375 Z M 4.953125 -7.765625 L 1.640625 -3 L 4.953125 -3 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-28">
+<path style="stroke:none;" d="M 7.328125 -4.53125 C 7.328125 -3.269531 7.109375 -2.257812 6.671875 -1.5 C 6.242188 -0.738281 5.625 -0.265625 4.8125 -0.078125 C 4.988281 0.328125 5.222656 0.625 5.515625 0.8125 C 5.816406 1 6.191406 1.09375 6.640625 1.09375 C 6.890625 1.09375 7.144531 1.066406 7.40625 1.015625 L 7.40625 1.859375 C 7 1.953125 6.613281 2 6.25 2 C 5.59375 2 5.050781 1.847656 4.625 1.546875 C 4.195312 1.242188 3.847656 0.726562 3.578125 0 C 2.628906 -0.09375 1.90625 -0.523438  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-29">
+<path style="stroke:none;" d="M 6.609375 0 L 5.28125 0 C 4.957031 -1.4375 4.710938 -2.523438 4.546875 -3.265625 C 4.378906 -4.015625 4.203125 -4.890625 4.015625 -5.890625 C 3.890625 -5.242188 3.769531 -4.65625 3.65625 -4.125 C 3.550781 -3.601562 3.238281 -2.226562 2.71875 0 L 1.40625 0 L 0 -9 L 1.203125 -9 L 1.9375 -3.390625 C 2.007812 -2.796875 2.082031 -2.019531 2.15625 -1.0625 C 2.300781 -1.78125 2.421875 -2.367188 2.515625 -2.828125 C 2.609375 -3.296875 2.925781 -4.6875 3.46875 -7 L  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-30">
+<path style="stroke:none;" d="M 7.34375 -2.53125 C 7.34375 -1.726562 7.050781 -1.101562 6.46875 -0.65625 C 5.882812 -0.21875 5.050781 0 3.96875 0 C 1.988281 0 0.835938 -0.601562 0.515625 -1.8125 L 1.6875 -2 C 1.8125 -1.632812 2.066406 -1.367188 2.453125 -1.203125 C 2.835938 -1.035156 3.351562 -0.953125 4 -0.953125 C 4.695312 -0.953125 5.226562 -1.085938 5.59375 -1.359375 C 5.957031 -1.628906 6.140625 -2.007812 6.140625 -2.5 C 6.140625 -2.800781 6.066406 -3.046875 5.921875 -3.234375 C 5.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-31">
+<path style="stroke:none;" d="M 7.09375 -3.53125 C 7.09375 -2.34375 6.867188 -1.457031 6.421875 -0.875 C 5.984375 -0.289062 5.351562 0 4.53125 0 C 3.46875 0 2.738281 -0.390625 2.34375 -1.171875 L 2.328125 -1.171875 C 2.328125 -0.941406 2.316406 -0.703125 2.296875 -0.453125 C 2.285156 -0.203125 2.28125 -0.0507812 2.28125 0 L 1.171875 0 C 1.191406 -0.238281 1.203125 -0.738281 1.203125 -1.5 L 1.203125 -10 L 2.34375 -10 L 2.34375 -6.875 C 2.34375 -6.550781 2.335938 -6.164062 2.328125 -5.7187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-32">
+<path style="stroke:none;" d="M 6.421875 -2.890625 C 6.421875 -1.972656 6.191406 -1.257812 5.734375 -0.75 C 5.273438 -0.25 4.632812 0 3.8125 0 C 3.070312 0 2.476562 -0.21875 2.03125 -0.65625 C 1.59375 -1.101562 1.296875 -1.804688 1.140625 -2.765625 L 2.3125 -3 C 2.394531 -2.351562 2.566406 -1.851562 2.828125 -1.5 C 3.085938 -1.15625 3.414062 -0.984375 3.8125 -0.984375 C 4.738281 -0.984375 5.203125 -1.609375 5.203125 -2.859375 L 5.203125 -8.015625 L 3.15625 -8.015625 L 3.15625 -9 L 6.4218 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-33">
+<path style="stroke:none;" d="M 7.125 -2.484375 C 7.125 -1.722656 6.851562 -1.117188 6.3125 -0.671875 C 5.769531 -0.222656 5 0 4 0 C 3.007812 0 2.238281 -0.21875 1.6875 -0.65625 C 1.132812 -1.09375 0.859375 -1.695312 0.859375 -2.46875 C 0.859375 -3.007812 1.03125 -3.46875 1.375 -3.84375 C 1.71875 -4.21875 2.15625 -4.445312 2.6875 -4.53125 L 2.6875 -4.5625 C 2.195312 -4.6875 1.800781 -4.941406 1.5 -5.328125 C 1.207031 -5.722656 1.0625 -6.171875 1.0625 -6.671875 C 1.0625 -7.109375 1.179688 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-34">
+<path style="stroke:none;" d="M 2.0625 -3.125 C 2.0625 -2.414062 2.238281 -1.859375 2.59375 -1.453125 C 2.945312 -1.054688 3.429688 -0.859375 4.046875 -0.859375 C 4.503906 -0.859375 4.898438 -0.957031 5.234375 -1.15625 C 5.578125 -1.363281 5.804688 -1.644531 5.921875 -2 L 6.9375 -1.703125 C 6.75 -1.148438 6.398438 -0.726562 5.890625 -0.4375 C 5.378906 -0.144531 4.769531 0 4.0625 0 C 3.03125 0 2.238281 -0.300781 1.6875 -0.90625 C 1.132812 -1.519531 0.859375 -2.398438 0.859375 -3.546875 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-35">
+<path style="stroke:none;" d="M 4 3 C 3.269531 3 2.679688 2.84375 2.234375 2.53125 C 1.796875 2.21875 1.515625 1.765625 1.390625 1.171875 L 2.5625 1 C 2.632812 1.363281 2.796875 1.644531 3.046875 1.84375 C 3.296875 2.039062 3.625 2.140625 4.03125 2.140625 C 5.132812 2.140625 5.6875 1.425781 5.6875 0 L 5.6875 -1.328125 L 5.671875 -1.328125 C 5.460938 -0.890625 5.164062 -0.554688 4.78125 -0.328125 C 4.40625 -0.109375 3.957031 0 3.4375 0 C 2.570312 0 1.9375 -0.273438 1.53125 -0.828125 C 1.1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-36">
+<path style="stroke:none;" d="M 2.34375 -7 L 2.34375 -2.640625 C 2.34375 -1.972656 2.453125 -1.507812 2.671875 -1.25 C 2.890625 -1 3.273438 -0.875 3.828125 -0.875 C 4.398438 -0.875 4.851562 -1.0625 5.1875 -1.4375 C 5.519531 -1.8125 5.6875 -2.335938 5.6875 -3.015625 L 5.6875 -7 L 6.828125 -7 L 6.828125 -1.5 C 6.828125 -0.675781 6.84375 -0.175781 6.875 0 L 5.78125 0 C 5.78125 -0.0195312 5.773438 -0.0820312 5.765625 -0.1875 C 5.765625 -0.289062 5.757812 -0.410156 5.75 -0.546875 C 5.75 -0.67 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-37">
+<path style="stroke:none;" d="M 4.453125 -4.078125 L 4.453125 -1.359375 L 3.515625 -1.359375 L 3.515625 -4.078125 L 0.828125 -4.078125 L 0.828125 -5 L 3.515625 -5 L 3.515625 -7.71875 L 4.453125 -7.71875 L 4.453125 -5 L 7.140625 -5 L 7.140625 -4.078125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-38">
+<path style="stroke:none;" d="M 5.984375 0 L 3.546875 -3.234375 L 2.671875 -2.625 L 2.671875 0 L 1.53125 0 L 1.53125 -10 L 2.671875 -10 L 2.671875 -3.609375 L 5.84375 -7 L 7.1875 -7 L 4.296875 -3.984375 L 7.328125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-39">
+<path style="stroke:none;" d="M 1.09375 0 L 1.09375 -0.921875 L 3.875 -0.921875 L 3.875 -7.84375 C 3.71875 -7.632812 3.34375 -7.453125 2.75 -7.296875 C 2.164062 -7.140625 1.59375 -7.0625 1.03125 -7.0625 L 1.03125 -8 C 1.65625 -8 2.242188 -8.09375 2.796875 -8.28125 C 3.359375 -8.46875 3.75 -8.707031 3.96875 -9 L 5.03125 -9 L 5.03125 -0.921875 L 7.265625 -0.921875 L 7.265625 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-40">
+<path style="stroke:none;" d="M 6.265625 0 L 3.84375 -4.046875 L 2.25 -4.046875 L 2.25 0 L 1.046875 0 L 1.046875 -9 L 4.1875 -9 C 5.195312 -9 5.96875 -8.789062 6.5 -8.375 C 7.03125 -7.96875 7.296875 -7.378906 7.296875 -6.609375 C 7.296875 -5.972656 7.085938 -5.4375 6.671875 -5 C 6.265625 -4.570312 5.71875 -4.300781 5.03125 -4.1875 L 7.65625 0 Z M 6.078125 -6.59375 C 6.078125 -7.550781 5.40625 -8.03125 4.0625 -8.03125 L 2.25 -8.03125 L 2.25 -5 L 4.109375 -5 C 4.742188 -5 5.226562 -5.13281 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-41">
+<path style="stroke:none;" d="M 6.109375 0 L 3.96875 -2.875 L 1.84375 0 L 0.609375 0 L 3.3125 -3.59375 L 0.734375 -7 L 1.984375 -7 L 3.96875 -4.28125 L 5.953125 -7 L 7.234375 -7 L 4.640625 -3.609375 L 7.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-42">
+<path style="stroke:none;" d="M 3.453125 -7 C 4.023438 -7 4.476562 -6.90625 4.8125 -6.71875 C 5.144531 -6.53125 5.421875 -6.234375 5.640625 -5.828125 L 5.65625 -5.828125 C 5.65625 -5.960938 5.660156 -6.160156 5.671875 -6.421875 C 5.691406 -6.691406 5.710938 -6.851562 5.734375 -6.90625 L 6.84375 -6.90625 C 6.8125 -6.675781 6.796875 -6.066406 6.796875 -5.078125 L 6.796875 3 L 5.65625 3 L 5.65625 -0.125 L 5.671875 -1.328125 L 5.65625 -1.328125 C 5.4375 -0.867188 5.148438 -0.53125 4.796875 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-43">
+<path style="stroke:none;" d="M 4.578125 -8.015625 L 4.578125 0 L 3.375 0 L 3.375 -8.015625 L 0.5625 -8.015625 L 0.5625 -9 L 7.390625 -9 L 7.390625 -8.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-44">
+<path style="stroke:none;" d="M 1.546875 0 L 1.546875 -9 L 2.765625 -9 L 2.765625 -0.984375 L 7.15625 -0.984375 L 7.15625 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-45">
+<path style="stroke:none;" d="M 1.203125 -10 L 2.359375 -10 L 2.359375 -7.140625 C 2.359375 -6.847656 2.335938 -6.363281 2.296875 -5.6875 L 2.3125 -5.6875 C 2.769531 -6.5625 3.503906 -7 4.515625 -7 C 6.035156 -7 6.796875 -6.191406 6.796875 -4.578125 L 6.796875 0 L 5.65625 0 L 5.65625 -4.421875 C 5.65625 -4.992188 5.539062 -5.421875 5.3125 -5.703125 C 5.082031 -5.984375 4.710938 -6.125 4.203125 -6.125 C 3.660156 -6.125 3.210938 -5.929688 2.859375 -5.546875 C 2.515625 -5.160156 2.34375 -4. [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-46">
+<path style="stroke:none;" d="M 3.46875 0 L 3.46875 -4.359375 C 3.46875 -5.015625 3.410156 -5.472656 3.296875 -5.734375 C 3.191406 -5.992188 2.992188 -6.125 2.703125 -6.125 C 2.421875 -6.125 2.191406 -5.921875 2.015625 -5.515625 C 1.835938 -5.109375 1.75 -4.554688 1.75 -3.859375 L 1.75 0 L 0.6875 0 L 0.6875 -5.5 C 0.6875 -6.320312 0.671875 -6.820312 0.640625 -7 L 1.59375 -7 L 1.625 -6.09375 L 1.625 -5.75 L 1.640625 -5.75 C 1.785156 -6.1875 1.972656 -6.503906 2.203125 -6.703125 C 2.429688 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-47">
+<path style="stroke:none;" d="M 2.46875 -8.015625 L 2.46875 -5 L 6.90625 -5 L 6.90625 -4 L 2.46875 -4 L 2.46875 0 L 1.265625 0 L 1.265625 -9 L 7.0625 -9 L 7.0625 -8.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-48">
+<path style="stroke:none;" d="M 1.265625 -6.09375 L 1.265625 -7 L 2.34375 -7 L 2.71875 -9 L 3.484375 -9 L 3.484375 -7 L 6.21875 -7 L 6.21875 -6.09375 L 3.484375 -6.09375 L 3.484375 -1.9375 C 3.484375 -1.601562 3.578125 -1.351562 3.765625 -1.1875 C 3.953125 -1.03125 4.253906 -0.953125 4.671875 -0.953125 C 5.265625 -0.953125 5.914062 -1.023438 6.625 -1.171875 L 6.625 -0.296875 C 5.882812 -0.0976562 5.15625 0 4.4375 0 C 3.738281 0 3.210938 -0.144531 2.859375 -0.4375 C 2.503906 -0.726562 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-49">
+<path style="stroke:none;" d="M 7.15625 -0.765625 C 7.269531 -0.765625 7.394531 -0.78125 7.53125 -0.8125 L 7.53125 -0.09375 C 7.25 -0.03125 6.957031 0 6.65625 0 C 6.226562 0 5.914062 -0.113281 5.71875 -0.34375 C 5.53125 -0.582031 5.425781 -0.945312 5.40625 -1.4375 L 5.359375 -1.4375 C 5.078125 -0.925781 4.742188 -0.554688 4.359375 -0.328125 C 3.972656 -0.109375 3.492188 0 2.921875 0 C 2.222656 0 1.695312 -0.164062 1.34375 -0.5 C 1 -0.84375 0.828125 -1.304688 0.828125 -1.890625 C 0.828125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-50">
+<path style="stroke:none;" d="M 1.890625 3 C 1.578125 3 1.3125 2.976562 1.09375 2.9375 L 1.09375 2.0625 C 1.257812 2.09375 1.441406 2.109375 1.640625 2.109375 C 1.984375 2.109375 2.304688 1.96875 2.609375 1.6875 C 2.910156 1.40625 3.164062 0.957031 3.375 0.34375 L 3.5 0 L 0.421875 -7 L 1.640625 -7 L 3.390625 -2.796875 C 3.785156 -1.816406 4 -1.257812 4.03125 -1.125 L 4.296875 -1.84375 L 6.34375 -7 L 7.5625 -7 L 4.5625 0.1875 C 4.175781 1.21875 3.773438 1.941406 3.359375 2.359375 C 2.9531 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-51">
+<path style="stroke:none;" d="M 6.140625 0 L 6.140625 -5.828125 C 6.140625 -6.441406 6.144531 -6.894531 6.15625 -7.1875 L 6.171875 -7.859375 C 5.890625 -6.941406 5.679688 -6.296875 5.546875 -5.921875 L 4.453125 -3 L 3.578125 -3 L 2.46875 -5.921875 C 2.394531 -6.117188 2.1875 -6.765625 1.84375 -7.859375 L 1.859375 -5.828125 L 1.859375 0 L 0.84375 0 L 0.84375 -9 L 2.359375 -9 L 3.578125 -5.734375 C 3.671875 -5.503906 3.820312 -4.992188 4.03125 -4.203125 L 4.203125 -4.796875 L 4.5 -5.734375 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-52">
+<path style="stroke:none;" d="M 5.6875 0 L 5.6875 -4.421875 C 5.6875 -4.992188 5.566406 -5.421875 5.328125 -5.703125 C 5.097656 -5.984375 4.726562 -6.125 4.21875 -6.125 C 3.675781 -6.125 3.226562 -5.929688 2.875 -5.546875 C 2.519531 -5.160156 2.34375 -4.640625 2.34375 -3.984375 L 2.34375 0 L 1.203125 0 L 1.203125 -5.5 C 1.203125 -6.320312 1.191406 -6.820312 1.171875 -7 L 2.25 -7 C 2.25 -6.976562 2.25 -6.914062 2.25 -6.8125 C 2.257812 -6.707031 2.265625 -6.585938 2.265625 -6.453125 C 2.27 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-53">
+<path style="stroke:none;" d="M 0.953125 0 L 0.953125 -0.875 L 5.421875 -6.125 L 1.203125 -6.125 L 1.203125 -7 L 6.71875 -7 L 6.71875 -6.140625 L 2.234375 -0.875 L 6.953125 -0.875 L 6.953125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-54">
+<path style="stroke:none;" d="M 7.140625 -3.109375 C 7.140625 -2.160156 6.875 -1.40625 6.34375 -0.84375 C 5.820312 -0.28125 5.097656 0 4.171875 0 C 3.148438 0 2.363281 -0.367188 1.8125 -1.109375 C 1.257812 -1.859375 0.984375 -2.914062 0.984375 -4.28125 C 0.984375 -5.789062 1.269531 -6.953125 1.84375 -7.765625 C 2.414062 -8.585938 3.222656 -9 4.265625 -9 C 5.648438 -9 6.523438 -8.394531 6.890625 -7.1875 L 5.8125 -7 C 5.570312 -7.71875 5.054688 -8.078125 4.265625 -8.078125 C 3.585938 -8.07 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-55">
+<path style="stroke:none;" d="M 7.078125 -4.6875 C 7.078125 -3.1875 6.785156 -2.03125 6.203125 -1.21875 C 5.628906 -0.40625 4.816406 0 3.765625 0 C 3.046875 0 2.46875 -0.140625 2.03125 -0.421875 C 1.601562 -0.710938 1.296875 -1.179688 1.109375 -1.828125 L 2.203125 -2 C 2.441406 -1.28125 2.960938 -0.921875 3.765625 -0.921875 C 4.441406 -0.921875 4.96875 -1.21875 5.34375 -1.8125 C 5.726562 -2.40625 5.925781 -3.222656 5.9375 -4.265625 C 5.757812 -3.878906 5.457031 -3.570312 5.03125 -3.34375 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-56">
+<path style="stroke:none;" d="M 4.765625 -0.90625 L 7.171875 -0.90625 L 7.171875 0 L 0.9375 0 L 0.9375 -0.90625 L 3.625 -0.90625 L 3.625 -9.09375 L 1.78125 -9.09375 L 1.78125 -10 L 4.765625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-57">
+<path style="stroke:none;" d="M 4.625 0 L 3.359375 0 L 0.0625 -9 L 1.34375 -9 L 3.453125 -2.5625 C 3.585938 -2.144531 3.769531 -1.476562 4 -0.5625 C 4.175781 -1.269531 4.359375 -1.9375 4.546875 -2.5625 L 6.640625 -9 L 7.921875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-58">
+<path style="stroke:none;" d="M 7.0625 -3.359375 C 7.0625 -2.179688 6.8125 -1.328125 6.3125 -0.796875 C 5.820312 -0.265625 5.03125 0 3.9375 0 C 2.875 0 2.101562 -0.253906 1.625 -0.765625 C 1.15625 -1.285156 0.921875 -2.109375 0.921875 -3.234375 L 0.921875 -9 L 2.125 -9 L 2.125 -3.375 C 2.125 -2.476562 2.253906 -1.851562 2.515625 -1.5 C 2.773438 -1.15625 3.242188 -0.984375 3.921875 -0.984375 C 4.640625 -0.984375 5.140625 -1.160156 5.421875 -1.515625 C 5.710938 -1.878906 5.859375 -2.53125  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-59">
+<path style="stroke:none;" d="M 7.1875 -4.5 C 7.1875 -3.039062 6.914062 -1.925781 6.375 -1.15625 C 5.832031 -0.382812 5.035156 0 3.984375 0 C 2.929688 0 2.140625 -0.378906 1.609375 -1.140625 C 1.078125 -1.910156 0.8125 -3.03125 0.8125 -4.5 C 0.8125 -6.007812 1.066406 -7.132812 1.578125 -7.875 C 2.097656 -8.625 2.910156 -9 4.015625 -9 C 5.097656 -9 5.894531 -8.617188 6.40625 -7.859375 C 6.925781 -7.109375 7.1875 -5.988281 7.1875 -4.5 Z M 6.03125 -4.5 C 6.03125 -5.757812 5.875 -6.671875 5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-60">
+<path style="stroke:none;" d="M 5.40625 0.359375 C 5.40625 1.191406 5.160156 1.835938 4.671875 2.296875 C 4.191406 2.765625 3.507812 3 2.625 3 C 2.28125 3 1.929688 2.96875 1.578125 2.90625 C 1.234375 2.851562 0.960938 2.789062 0.765625 2.71875 L 0.765625 1.828125 C 1.410156 1.972656 2 2.046875 2.53125 2.046875 C 3.09375 2.046875 3.519531 1.894531 3.8125 1.59375 C 4.113281 1.300781 4.265625 0.890625 4.265625 0.359375 L 4.265625 -6.09375 L 1.671875 -6.09375 L 1.671875 -7 L 5.40625 -7 Z M 4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-61">
+<path style="stroke:none;" d="M 6.609375 0 L 5.3125 0 L 4.375 -2.984375 L 4 -4.265625 L 3.75 -3.390625 L 2.640625 0 L 1.359375 0 L 0.140625 -7 L 1.265625 -7 L 1.90625 -3.0625 C 2.050781 -1.925781 2.125 -1.222656 2.125 -0.953125 C 2.289062 -1.628906 2.414062 -2.082031 2.5 -2.3125 L 3.390625 -5 L 4.625 -5 L 5.46875 -2.296875 C 5.601562 -1.859375 5.722656 -1.410156 5.828125 -0.953125 C 5.828125 -1.078125 5.832031 -1.238281 5.84375 -1.4375 C 5.863281 -1.632812 5.890625 -1.832031 5.921875 -2. [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-62">
+<path style="stroke:none;" d="M 7.140625 -3.5 C 7.140625 -2.363281 6.863281 -1.492188 6.3125 -0.890625 C 5.769531 -0.296875 4.988281 0 3.96875 0 C 2.957031 0 2.179688 -0.300781 1.640625 -0.90625 C 1.109375 -1.519531 0.84375 -2.382812 0.84375 -3.5 C 0.84375 -4.664062 1.113281 -5.539062 1.65625 -6.125 C 2.207031 -6.707031 2.988281 -7 4 -7 C 5.0625 -7 5.847656 -6.707031 6.359375 -6.125 C 6.878906 -5.550781 7.140625 -4.675781 7.140625 -3.5 Z M 5.9375 -3.5 C 5.9375 -4.394531 5.785156 -5.0625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-63">
+<path style="stroke:none;" d="M 6.953125 -8.125 C 4.878906 -5.082031 3.84375 -2.375 3.84375 0 L 2.65625 0 C 2.65625 -1.175781 2.921875 -2.441406 3.453125 -3.796875 C 3.992188 -5.160156 4.796875 -6.585938 5.859375 -8.078125 L 1.03125 -8.078125 L 1.03125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-64">
+<path style="stroke:none;" d="M 0.84375 -3.5 C 0.84375 -4.625 1.125 -5.488281 1.6875 -6.09375 C 2.25 -6.695312 3.054688 -7 4.109375 -7 C 4.898438 -7 5.550781 -6.828125 6.0625 -6.484375 C 6.570312 -6.140625 6.890625 -5.671875 7.015625 -5.078125 L 5.796875 -5 C 5.722656 -5.34375 5.546875 -5.613281 5.265625 -5.8125 C 4.984375 -6.007812 4.582031 -6.109375 4.0625 -6.109375 C 3.363281 -6.109375 2.851562 -5.90625 2.53125 -5.5 C 2.207031 -5.09375 2.046875 -4.4375 2.046875 -3.53125 C 2.046875 -2. [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-65">
+<path style="stroke:none;" d="M 6.90625 -2.0625 C 6.90625 -1.414062 6.648438 -0.910156 6.140625 -0.546875 C 5.640625 -0.179688 4.941406 0 4.046875 0 C 3.148438 0 2.46875 -0.140625 2 -0.421875 C 1.539062 -0.710938 1.238281 -1.171875 1.09375 -1.796875 L 2.09375 -2 C 2.175781 -1.59375 2.351562 -1.296875 2.625 -1.109375 C 2.90625 -0.929688 3.378906 -0.84375 4.046875 -0.84375 C 5.234375 -0.84375 5.828125 -1.195312 5.828125 -1.90625 C 5.828125 -2.175781 5.71875 -2.390625 5.5 -2.546875 C 5.2890 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-66">
+<path style="stroke:none;" d="M 3.75 -6.09375 L 3.75 0 L 2.609375 0 L 2.609375 -6.09375 L 0.9375 -6.09375 L 0.9375 -7 L 2.609375 -7 L 2.609375 -7.1875 C 2.609375 -8.207031 2.816406 -8.929688 3.234375 -9.359375 C 3.648438 -9.785156 4.347656 -10 5.328125 -10 C 5.640625 -10 5.976562 -9.984375 6.34375 -9.953125 C 6.707031 -9.929688 6.976562 -9.898438 7.15625 -9.859375 L 7.15625 -8.9375 C 7.019531 -8.957031 6.753906 -8.976562 6.359375 -9 C 5.960938 -9.03125 5.660156 -9.046875 5.453125 -9.0468 [...]
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image6167" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image6167"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image6171" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image6171"/>
+</pattern>
+<image id="image6174" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image6174"/>
+</pattern>
+<image id="image6179" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image6179"/>
+</pattern>
+<image id="image6184" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image6184"/>
+</pattern>
+<image id="image6189" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image6189"/>
+</pattern>
+<image id="image6194" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image6194"/>
+</pattern>
+<image id="image6199" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image6199"/>
+</pattern>
+<image id="image6204" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image6204"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip10">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+</clipPath>
+<clipPath id="clip12">
+  <path d="M 0 119 L 145 119 L 145 120 L 0 120 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 129 C 24 127.894531 24.894531 127 26 127 L 120 127 C 121.105469 127 122 127.449219 122 128 L 122 154 C 122 155.105469 121.105469 156 120 156 L 26 156 C 24.894531 156 24 155.550781 24 155 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,141.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image6210" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,126)">
+  <use xlink:href="#image6210"/>
+</pattern>
+<image id="image6213" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,126)">
+  <use xlink:href="#image6213"/>
+</pattern>
+<image id="image6218" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,126)">
+  <use xlink:href="#image6218"/>
+</pattern>
+<image id="image6223" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,129)">
+  <use xlink:href="#image6223"/>
+</pattern>
+<image id="image6228" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,129)">
+  <use xlink:href="#image6228"/>
+</pattern>
+<image id="image6233" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,154)">
+  <use xlink:href="#image6233"/>
+</pattern>
+<image id="image6238" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,154)">
+  <use xlink:href="#image6238"/>
+</pattern>
+<image id="image6243" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,154)">
+  <use xlink:href="#image6243"/>
+</pattern>
+<clipPath id="clip15">
+  <path d="M 0 164 L 145 164 L 145 200 L 0 200 Z "/>
+</clipPath>
+<image id="image6248" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip16">
+  <path d="M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+</clipPath>
+<clipPath id="clip17">
+  <path d="M 0 218 L 145 218 L 145 219 L 0 219 Z "/>
+</clipPath>
+<clipPath id="clip18">
+  <path d="M 0 219 L 145 219 L 145 241 L 0 241 Z "/>
+</clipPath>
+<image id="image6251" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip19">
+  <path d="M 0 241 L 145 241 L 145 242 L 0 242 Z "/>
+</clipPath>
+<clipPath id="clip20">
+  <path d="M 0 242 L 145 242 L 145 264 L 0 264 Z "/>
+</clipPath>
+<image id="image6254" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip21">
+  <path d="M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip22">
+  <path d="M 171 735 L 237 735 L 237 764 L 171 764 Z "/>
+</clipPath>
+<clipPath id="clip23">
+  <path d="M 171 737 C 171 735.894531 171.894531 735 173 735 L 235 735 C 236.105469 735 237 735.449219 237 736 L 237 762 C 237 763.105469 236.105469 764 235 764 L 173 764 C 171.894531 764 171 763.550781 171 763 Z "/>
+</clipPath>
+<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,204,749.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image6258" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern17" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,170,734)">
+  <use xlink:href="#image6258"/>
+</pattern>
+<image id="image6261" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern18" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(6.2,0,0,1,173,734)">
+  <use xlink:href="#image6261"/>
+</pattern>
+<image id="image6266" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern19" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,235,734)">
+  <use xlink:href="#image6266"/>
+</pattern>
+<image id="image6271" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern20" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,170,737)">
+  <use xlink:href="#image6271"/>
+</pattern>
+<image id="image6276" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern21" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,235,737)">
+  <use xlink:href="#image6276"/>
+</pattern>
+<image id="image6281" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern22" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,170,762)">
+  <use xlink:href="#image6281"/>
+</pattern>
+<image id="image6286" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern23" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(6.2,0,0,1,173,762)">
+  <use xlink:href="#image6286"/>
+</pattern>
+<image id="image6291" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern24" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,235,762)">
+  <use xlink:href="#image6291"/>
+</pattern>
+<clipPath id="clip24">
+  <path d="M 170 556 L 982 556 L 982 706 L 170 706 Z "/>
+</clipPath>
+<clipPath id="clip25">
+  <path d="M 170 158 L 982 158 L 982 490 L 170 490 Z "/>
+</clipPath>
+<clipPath id="clip26">
+  <path d="M 678 40 L 782 40 L 782 69 L 678 69 Z "/>
+</clipPath>
+<clipPath id="clip27">
+  <path d="M 678 42 C 678 40.894531 678.894531 40 680 40 L 780 40 C 781.105469 40 782 40.449219 782 41 L 782 67 C 782 68.105469 781.105469 69 780 69 L 680 69 C 678.894531 69 678 68.550781 678 68 Z "/>
+</clipPath>
+<image id="image6298" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern25" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,677,39)">
+  <use xlink:href="#image6298"/>
+</pattern>
+<image id="image6301" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern26" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10,0,0,1,680,39)">
+  <use xlink:href="#image6301"/>
+</pattern>
+<image id="image6306" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern27" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,780,39)">
+  <use xlink:href="#image6306"/>
+</pattern>
+<image id="image6311" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern28" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,677,42)">
+  <use xlink:href="#image6311"/>
+</pattern>
+<image id="image6316" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern29" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,780,42)">
+  <use xlink:href="#image6316"/>
+</pattern>
+<image id="image6321" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern30" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,677,67)">
+  <use xlink:href="#image6321"/>
+</pattern>
+<image id="image6326" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern31" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10,0,0,1,680,67)">
+  <use xlink:href="#image6326"/>
+</pattern>
+<image id="image6331" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern32" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,780,67)">
+  <use xlink:href="#image6331"/>
+</pattern>
+<clipPath id="clip28">
+  <path d="M 370 40 L 477 40 L 477 69 L 370 69 Z "/>
+</clipPath>
+<clipPath id="clip29">
+  <path d="M 370 42 C 370 40.894531 370.894531 40 372 40 L 475 40 C 476.105469 40 477 40.449219 477 41 L 477 67 C 477 68.105469 476.105469 69 475 69 L 372 69 C 370.894531 69 370 68.550781 370 68 Z "/>
+</clipPath>
+<image id="image6337" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern33" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,369,39)">
+  <use xlink:href="#image6337"/>
+</pattern>
+<image id="image6340" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern34" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10.3,0,0,1,372,39)">
+  <use xlink:href="#image6340"/>
+</pattern>
+<image id="image6345" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern35" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,475,39)">
+  <use xlink:href="#image6345"/>
+</pattern>
+<image id="image6350" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern36" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,369,42)">
+  <use xlink:href="#image6350"/>
+</pattern>
+<image id="image6355" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern37" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,475,42)">
+  <use xlink:href="#image6355"/>
+</pattern>
+<image id="image6360" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern38" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,369,67)">
+  <use xlink:href="#image6360"/>
+</pattern>
+<image id="image6365" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern39" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10.3,0,0,1,372,67)">
+  <use xlink:href="#image6365"/>
+</pattern>
+<image id="image6370" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern40" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,475,67)">
+  <use xlink:href="#image6370"/>
+</pattern>
+<clipPath id="clip30">
+  <path d="M 987 0 L 1000 0 L 1000 800 L 987 800 Z "/>
+</clipPath>
+<clipPath id="clip31">
+  <path d="M 990 290 L 997 290 L 997 797 L 990 797 Z "/>
+</clipPath>
+<clipPath id="clip32">
+  <path d="M 990 293.5 C 990 291.566406 991.566406 290 993.5 290 C 995.433594 290 997 291.566406 997 293.5 L 997 793.5 C 997 795.433594 995.433594 797 993.5 797 C 991.566406 797 990 795.433594 990 793.5 Z "/>
+</clipPath>
+</defs>
+<g id="surface6164">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="96"/>
+  <use xlink:href="#glyph0-10" x="58" y="96"/>
+  <use xlink:href="#glyph0-11" x="65" y="96"/>
+  <use xlink:href="#glyph0-12" x="75" y="96"/>
+  <use xlink:href="#glyph0-8" x="82" y="96"/>
+  <use xlink:href="#glyph0-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 101 L 145 101 L 145 119 L 0 119 Z M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="115"/>
+  <use xlink:href="#glyph0-4" x="47" y="115"/>
+  <use xlink:href="#glyph0-2" x="57" y="115"/>
+  <use xlink:href="#glyph0-8" x="67" y="115"/>
+  <use xlink:href="#glyph0-11" x="74" y="115"/>
+  <use xlink:href="#glyph0-15" x="84" y="115"/>
+  <use xlink:href="#glyph0-8" x="93" y="115"/>
+  <use xlink:href="#glyph0-13" x="100" y="115"/>
+</g>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 126 L 26 126 L 26 129 L 23 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 126 L 120 126 L 120 129 L 26 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 126 L 123 126 L 123 129 L 120 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 129 L 26 129 L 26 154 L 23 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 129 L 123 129 L 123 154 L 120 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 154 L 26 154 L 26 158 L 23 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 154 L 120 154 L 120 158 L 26 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 154 L 123 154 L 123 158 L 120 158 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 131 L 115 131 L 115 152 L 31 152 Z M 31 131 L 115 131 L 115 152 L 31 152 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="148"/>
+  <use xlink:href="#glyph1-8" x="69" y="148"/>
+  <use xlink:href="#glyph1-8" x="77" y="148"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="147"/>
+  <use xlink:href="#glyph1-8" x="69" y="147"/>
+  <use xlink:href="#glyph1-8" x="77" y="147"/>
+</g>
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,92.156863%,80.392157%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 165 L 31 165 L 31 182 L 5 182 Z M 5 165 L 31 165 L 31 182 L 5 182 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="179"/>
+  <use xlink:href="#glyph2-2" x="13" y="179"/>
+  <use xlink:href="#glyph2-3" x="22" y="179"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(60%,60%,60%);fill-opacity:1;" d="M 5 184 L 50 184 L 50 199 L 5 199 Z M 5 184 L 50 184 L 50 199 L 5 199 Z "/>
+<g style="fill:rgb(60%,60%,60%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="5" y="196"/>
+  <use xlink:href="#glyph3-2" x="12" y="196"/>
+  <use xlink:href="#glyph3-3" x="19" y="196"/>
+  <use xlink:href="#glyph3-4" x="26" y="196"/>
+  <use xlink:href="#glyph3-5" x="33" y="196"/>
+  <use xlink:href="#glyph3-3" x="36" y="196"/>
+  <use xlink:href="#glyph3-6" x="43" y="196"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 59 184 L 141 184 L 141 199 L 59 199 Z M 59 184 L 141 184 L 141 199 L 59 199 Z "/>
+<use xlink:href="#image6248" transform="matrix(1,0,0,1,140,191)"/>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 200 L 145 200 L 145 218 L 0 218 Z M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="214"/>
+  <use xlink:href="#glyph0-16" x="60" y="214"/>
+  <use xlink:href="#glyph0-17" x="64" y="214"/>
+  <use xlink:href="#glyph0-18" x="68" y="214"/>
+  <use xlink:href="#glyph0-2" x="78" y="214"/>
+  <use xlink:href="#glyph0-8" x="88" y="214"/>
+</g>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 220 L 53 220 L 53 237 L 5 237 Z M 5 220 L 53 220 L 53 237 L 5 237 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-4" x="5" y="234"/>
+  <use xlink:href="#glyph2-5" x="8" y="234"/>
+  <use xlink:href="#glyph2-3" x="17" y="234"/>
+  <use xlink:href="#glyph2-6" x="26" y="234"/>
+  <use xlink:href="#glyph2-7" x="34" y="234"/>
+  <use xlink:href="#glyph2-8" x="38" y="234"/>
+  <use xlink:href="#glyph2-7" x="42" y="234"/>
+  <use xlink:href="#glyph2-9" x="46" y="234"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 239 L 141 239 L 141 240 L 4 240 Z M 4 239 L 141 239 L 141 240 L 4 240 Z "/>
+<use xlink:href="#image6251" transform="matrix(1,0,0,1,140,239)"/>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 243 L 85 243 L 85 260 L 5 260 Z M 5 243 L 85 243 L 85 260 L 5 260 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-10" x="5" y="257"/>
+  <use xlink:href="#glyph2-11" x="16" y="257"/>
+  <use xlink:href="#glyph2-7" x="24" y="257"/>
+  <use xlink:href="#glyph2-8" x="28" y="257"/>
+  <use xlink:href="#glyph2-12" x="32" y="257"/>
+  <use xlink:href="#glyph2-8" x="39" y="257"/>
+  <use xlink:href="#glyph2-7" x="43" y="257"/>
+  <use xlink:href="#glyph2-9" x="47" y="257"/>
+  <use xlink:href="#glyph2-13" x="54" y="257"/>
+  <use xlink:href="#glyph2-14" x="58" y="257"/>
+  <use xlink:href="#glyph2-2" x="67" y="257"/>
+  <use xlink:href="#glyph2-15" x="76" y="257"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 262 L 141 262 L 141 263 L 4 263 Z M 4 262 L 141 262 L 141 263 L 4 263 Z "/>
+<use xlink:href="#image6254" transform="matrix(1,0,0,1,140,262)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 987 0 L 987 800 L 150 800 Z M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,0%,0%);fill-opacity:1;" d="M 170 774 L 982 774 L 982 795 L 170 795 Z M 170 774 L 982 774 L 982 795 L 170 795 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 238 734 L 982 734 L 982 766 L 238 766 Z M 238 734 L 982 734 L 982 766 L 238 766 Z "/>
+<g clip-path="url(#clip22)" clip-rule="nonzero">
+<g clip-path="url(#clip23)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 171 735 L 237 735 L 237 764 L 171 764 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern17);" d="M 170 734 L 173 734 L 173 737 L 170 737 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern18);" d="M 173 734 L 235 734 L 235 737 L 173 737 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern19);" d="M 235 734 L 238 734 L 238 737 L 235 737 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern20);" d="M 170 737 L 173 737 L 173 762 L 170 762 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern21);" d="M 235 737 L 238 737 L 238 762 L 235 762 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern22);" d="M 170 762 L 173 762 L 173 766 L 170 766 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern23);" d="M 173 762 L 235 762 L 235 766 L 173 766 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern24);" d="M 235 762 L 238 762 L 238 766 L 235 766 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 178 739 L 230 739 L 230 760 L 178 760 Z M 178 739 L 230 739 L 230 760 L 178 760 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-9" x="178" y="756"/>
+  <use xlink:href="#glyph1-10" x="187" y="756"/>
+  <use xlink:href="#glyph1-2" x="192" y="756"/>
+  <use xlink:href="#glyph1-11" x="201" y="756"/>
+  <use xlink:href="#glyph1-6" x="208" y="756"/>
+  <use xlink:href="#glyph1-5" x="216" y="756"/>
+  <use xlink:href="#glyph1-5" x="223" y="756"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="178" y="755"/>
+  <use xlink:href="#glyph1-10" x="187" y="755"/>
+  <use xlink:href="#glyph1-2" x="192" y="755"/>
+  <use xlink:href="#glyph1-11" x="201" y="755"/>
+  <use xlink:href="#glyph1-6" x="208" y="755"/>
+  <use xlink:href="#glyph1-5" x="216" y="755"/>
+  <use xlink:href="#glyph1-5" x="223" y="755"/>
+</g>
+<g clip-path="url(#clip24)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 527 L 982 527 L 982 548 L 170 548 Z M 170 527 L 982 527 L 982 548 L 170 548 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-12" x="170" y="543"/>
+  <use xlink:href="#glyph1-2" x="179" y="543"/>
+  <use xlink:href="#glyph1-13" x="188" y="543"/>
+  <use xlink:href="#glyph1-14" x="196" y="543"/>
+  <use xlink:href="#glyph1-15" x="200" y="543"/>
+  <use xlink:href="#glyph1-2" x="212" y="543"/>
+  <use xlink:href="#glyph1-16" x="221" y="543"/>
+  <use xlink:href="#glyph1-17" x="229" y="543"/>
+  <use xlink:href="#glyph1-18" x="232" y="543"/>
+  <use xlink:href="#glyph1-14" x="238" y="543"/>
+  <use xlink:href="#glyph1-19" x="242" y="543"/>
+  <use xlink:href="#glyph1-6" x="250" y="543"/>
+  <use xlink:href="#glyph1-14" x="258" y="543"/>
+  <use xlink:href="#glyph1-20" x="262" y="543"/>
+  <use xlink:href="#glyph1-19" x="269" y="543"/>
+  <use xlink:href="#glyph1-21" x="277" y="543"/>
+  <use xlink:href="#glyph1-6" x="281" y="543"/>
+  <use xlink:href="#glyph1-14" x="289" y="543"/>
+  <use xlink:href="#glyph1-18" x="293" y="543"/>
+  <use xlink:href="#glyph1-2" x="299" y="543"/>
+  <use xlink:href="#glyph1-14" x="308" y="543"/>
+  <use xlink:href="#glyph1-6" x="312" y="543"/>
+  <use xlink:href="#glyph1-22" x="320" y="543"/>
+  <use xlink:href="#glyph1-11" x="328" y="543"/>
+  <use xlink:href="#glyph1-23" x="335" y="543"/>
+  <use xlink:href="#glyph1-20" x="343" y="543"/>
+  <use xlink:href="#glyph1-16" x="350" y="543"/>
+  <use xlink:href="#glyph1-24" x="358" y="543"/>
+  <use xlink:href="#glyph1-6" x="366" y="543"/>
+  <use xlink:href="#glyph1-14" x="374" y="543"/>
+  <use xlink:href="#glyph1-3" x="378" y="543"/>
+  <use xlink:href="#glyph1-6" x="389" y="543"/>
+  <use xlink:href="#glyph1-5" x="397" y="543"/>
+  <use xlink:href="#glyph1-5" x="404" y="543"/>
+  <use xlink:href="#glyph1-20" x="411" y="543"/>
+  <use xlink:href="#glyph1-24" x="418" y="543"/>
+  <use xlink:href="#glyph1-6" x="426" y="543"/>
+  <use xlink:href="#glyph1-5" x="434" y="543"/>
+  <use xlink:href="#glyph1-14" x="441" y="543"/>
+  <use xlink:href="#glyph1-15" x="445" y="543"/>
+  <use xlink:href="#glyph1-25" x="457" y="543"/>
+  <use xlink:href="#glyph1-18" x="460" y="543"/>
+  <use xlink:href="#glyph1-23" x="466" y="543"/>
+  <use xlink:href="#glyph1-14" x="474" y="543"/>
+  <use xlink:href="#glyph1-18" x="478" y="543"/>
+  <use xlink:href="#glyph1-23" x="484" y="543"/>
+  <use xlink:href="#glyph1-6" x="492" y="543"/>
+  <use xlink:href="#glyph1-3" x="500" y="543"/>
+  <use xlink:href="#glyph1-14" x="511" y="543"/>
+  <use xlink:href="#glyph1-13" x="515" y="543"/>
+  <use xlink:href="#glyph1-16" x="523" y="543"/>
+  <use xlink:href="#glyph1-18" x="531" y="543"/>
+  <use xlink:href="#glyph1-25" x="537" y="543"/>
+  <use xlink:href="#glyph1-21" x="540" y="543"/>
+  <use xlink:href="#glyph1-14" x="544" y="543"/>
+  <use xlink:href="#glyph1-18" x="548" y="543"/>
+  <use xlink:href="#glyph1-23" x="554" y="543"/>
+  <use xlink:href="#glyph1-6" x="562" y="543"/>
+  <use xlink:href="#glyph1-26" x="570" y="543"/>
+  <use xlink:href="#glyph1-14" x="577" y="543"/>
+  <use xlink:href="#glyph1-11" x="581" y="543"/>
+  <use xlink:href="#glyph1-2" x="588" y="543"/>
+  <use xlink:href="#glyph1-3" x="597" y="543"/>
+  <use xlink:href="#glyph1-4" x="608" y="543"/>
+  <use xlink:href="#glyph1-21" x="616" y="543"/>
+  <use xlink:href="#glyph1-6" x="620" y="543"/>
+  <use xlink:href="#glyph1-18" x="628" y="543"/>
+  <use xlink:href="#glyph1-6" x="634" y="543"/>
+  <use xlink:href="#glyph1-14" x="642" y="543"/>
+  <use xlink:href="#glyph1-18" x="646" y="543"/>
+  <use xlink:href="#glyph1-23" x="652" y="543"/>
+  <use xlink:href="#glyph1-6" x="660" y="543"/>
+  <use xlink:href="#glyph1-14" x="668" y="543"/>
+  <use xlink:href="#glyph1-23" x="672" y="543"/>
+  <use xlink:href="#glyph1-20" x="680" y="543"/>
+  <use xlink:href="#glyph1-16" x="687" y="543"/>
+  <use xlink:href="#glyph1-8" x="695" y="543"/>
+  <use xlink:href="#glyph1-5" x="703" y="543"/>
+  <use xlink:href="#glyph1-23" x="710" y="543"/>
+  <use xlink:href="#glyph1-20" x="718" y="543"/>
+  <use xlink:href="#glyph1-27" x="725" y="543"/>
+  <use xlink:href="#glyph1-6" x="732" y="543"/>
+  <use xlink:href="#glyph1-28" x="740" y="543"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 498 L 982 498 L 982 519 L 170 519 Z M 170 498 L 982 498 L 982 519 L 170 519 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-29" x="170" y="514"/>
+  <use xlink:href="#glyph1-16" x="177" y="514"/>
+  <use xlink:href="#glyph1-18" x="185" y="514"/>
+  <use xlink:href="#glyph1-6" x="191" y="514"/>
+  <use xlink:href="#glyph1-10" x="199" y="514"/>
+  <use xlink:href="#glyph1-14" x="204" y="514"/>
+  <use xlink:href="#glyph1-18" x="208" y="514"/>
+  <use xlink:href="#glyph1-23" x="214" y="514"/>
+  <use xlink:href="#glyph1-6" x="222" y="514"/>
+  <use xlink:href="#glyph1-14" x="230" y="514"/>
+  <use xlink:href="#glyph1-23" x="234" y="514"/>
+  <use xlink:href="#glyph1-20" x="242" y="514"/>
+  <use xlink:href="#glyph1-16" x="249" y="514"/>
+  <use xlink:href="#glyph1-8" x="257" y="514"/>
+  <use xlink:href="#glyph1-5" x="265" y="514"/>
+  <use xlink:href="#glyph1-23" x="272" y="514"/>
+  <use xlink:href="#glyph1-20" x="280" y="514"/>
+  <use xlink:href="#glyph1-27" x="287" y="514"/>
+  <use xlink:href="#glyph1-6" x="294" y="514"/>
+  <use xlink:href="#glyph1-14" x="302" y="514"/>
+  <use xlink:href="#glyph1-3" x="306" y="514"/>
+  <use xlink:href="#glyph1-6" x="317" y="514"/>
+  <use xlink:href="#glyph1-5" x="325" y="514"/>
+  <use xlink:href="#glyph1-5" x="332" y="514"/>
+  <use xlink:href="#glyph1-20" x="339" y="514"/>
+  <use xlink:href="#glyph1-24" x="346" y="514"/>
+  <use xlink:href="#glyph1-6" x="354" y="514"/>
+  <use xlink:href="#glyph1-14" x="362" y="514"/>
+  <use xlink:href="#glyph1-30" x="366" y="514"/>
+  <use xlink:href="#glyph1-10" x="372" y="514"/>
+  <use xlink:href="#glyph1-2" x="377" y="514"/>
+  <use xlink:href="#glyph1-3" x="386" y="514"/>
+  <use xlink:href="#glyph1-14" x="397" y="514"/>
+  <use xlink:href="#glyph1-18" x="401" y="514"/>
+  <use xlink:href="#glyph1-23" x="407" y="514"/>
+  <use xlink:href="#glyph1-6" x="415" y="514"/>
+  <use xlink:href="#glyph1-3" x="423" y="514"/>
+  <use xlink:href="#glyph1-28" x="434" y="514"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 498 L 167 498 L 167 519 L 155 519 Z M 155 498 L 167 498 L 167 519 L 155 519 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-31" x="155" y="514"/>
+  <use xlink:href="#glyph1-28" x="164" y="514"/>
+</g>
+<g clip-path="url(#clip25)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="171" y="170"/>
+  <use xlink:href="#glyph4-1" x="179" y="170"/>
+  <use xlink:href="#glyph4-1" x="187" y="170"/>
+  <use xlink:href="#glyph4-1" x="195" y="170"/>
+  <use xlink:href="#glyph4-1" x="203" y="170"/>
+  <use xlink:href="#glyph4-2" x="211" y="170"/>
+  <use xlink:href="#glyph4-3" x="219" y="170"/>
+  <use xlink:href="#glyph4-4" x="227" y="170"/>
+  <use xlink:href="#glyph4-5" x="235" y="170"/>
+  <use xlink:href="#glyph4-6" x="243" y="170"/>
+  <use xlink:href="#glyph4-7" x="251" y="170"/>
+  <use xlink:href="#glyph4-8" x="259" y="170"/>
+  <use xlink:href="#glyph4-9" x="267" y="170"/>
+  <use xlink:href="#glyph4-6" x="275" y="170"/>
+  <use xlink:href="#glyph4-10" x="283" y="170"/>
+  <use xlink:href="#glyph4-7" x="291" y="170"/>
+  <use xlink:href="#glyph4-11" x="299" y="170"/>
+  <use xlink:href="#glyph4-3" x="307" y="170"/>
+  <use xlink:href="#glyph4-12" x="315" y="170"/>
+  <use xlink:href="#glyph4-7" x="323" y="170"/>
+  <use xlink:href="#glyph4-3" x="331" y="170"/>
+  <use xlink:href="#glyph4-13" x="339" y="170"/>
+  <use xlink:href="#glyph4-14" x="347" y="170"/>
+  <use xlink:href="#glyph4-15" x="355" y="170"/>
+  <use xlink:href="#glyph4-16" x="363" y="170"/>
+  <use xlink:href="#glyph4-6" x="371" y="170"/>
+  <use xlink:href="#glyph4-4" x="379" y="170"/>
+  <use xlink:href="#glyph4-3" x="387" y="170"/>
+  <use xlink:href="#glyph4-1" x="395" y="170"/>
+  <use xlink:href="#glyph4-1" x="403" y="170"/>
+  <use xlink:href="#glyph4-1" x="411" y="170"/>
+  <use xlink:href="#glyph4-1" x="419" y="170"/>
+  <use xlink:href="#glyph4-1" x="427" y="170"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-14" x="171" y="185"/>
+  <use xlink:href="#glyph4-17" x="179" y="185"/>
+  <use xlink:href="#glyph4-16" x="187" y="185"/>
+  <use xlink:href="#glyph4-4" x="195" y="185"/>
+  <use xlink:href="#glyph4-14" x="203" y="185"/>
+  <use xlink:href="#glyph4-18" x="211" y="185"/>
+  <use xlink:href="#glyph4-2" x="219" y="185"/>
+  <use xlink:href="#glyph4-19" x="227" y="185"/>
+  <use xlink:href="#glyph4-3" x="235" y="185"/>
+  <use xlink:href="#glyph4-20" x="243" y="185"/>
+  <use xlink:href="#glyph4-21" x="251" y="185"/>
+  <use xlink:href="#glyph4-22" x="259" y="185"/>
+  <use xlink:href="#glyph4-23" x="267" y="185"/>
+  <use xlink:href="#glyph4-24" x="275" y="185"/>
+  <use xlink:href="#glyph4-2" x="283" y="185"/>
+  <use xlink:href="#glyph4-20" x="291" y="185"/>
+  <use xlink:href="#glyph4-25" x="299" y="185"/>
+  <use xlink:href="#glyph4-6" x="307" y="185"/>
+  <use xlink:href="#glyph4-26" x="315" y="185"/>
+  <use xlink:href="#glyph4-27" x="323" y="185"/>
+  <use xlink:href="#glyph4-28" x="331" y="185"/>
+  <use xlink:href="#glyph4-29" x="339" y="185"/>
+  <use xlink:href="#glyph4-30" x="347" y="185"/>
+  <use xlink:href="#glyph4-16" x="355" y="185"/>
+  <use xlink:href="#glyph4-19" x="363" y="185"/>
+  <use xlink:href="#glyph4-31" x="371" y="185"/>
+  <use xlink:href="#glyph4-32" x="379" y="185"/>
+  <use xlink:href="#glyph4-23" x="387" y="185"/>
+  <use xlink:href="#glyph4-3" x="395" y="185"/>
+  <use xlink:href="#glyph4-22" x="403" y="185"/>
+  <use xlink:href="#glyph4-5" x="411" y="185"/>
+  <use xlink:href="#glyph4-27" x="419" y="185"/>
+  <use xlink:href="#glyph4-33" x="427" y="185"/>
+  <use xlink:href="#glyph4-34" x="435" y="185"/>
+  <use xlink:href="#glyph4-35" x="443" y="185"/>
+  <use xlink:href="#glyph4-36" x="451" y="185"/>
+  <use xlink:href="#glyph4-15" x="459" y="185"/>
+  <use xlink:href="#glyph4-35" x="467" y="185"/>
+  <use xlink:href="#glyph4-2" x="475" y="185"/>
+  <use xlink:href="#glyph4-37" x="483" y="185"/>
+  <use xlink:href="#glyph4-6" x="491" y="185"/>
+  <use xlink:href="#glyph4-13" x="499" y="185"/>
+  <use xlink:href="#glyph4-38" x="507" y="185"/>
+  <use xlink:href="#glyph4-38" x="515" y="185"/>
+  <use xlink:href="#glyph4-14" x="523" y="185"/>
+  <use xlink:href="#glyph4-39" x="531" y="185"/>
+  <use xlink:href="#glyph4-6" x="539" y="185"/>
+  <use xlink:href="#glyph4-18" x="547" y="185"/>
+  <use xlink:href="#glyph4-15" x="555" y="185"/>
+  <use xlink:href="#glyph4-2" x="563" y="185"/>
+  <use xlink:href="#glyph4-5" x="571" y="185"/>
+  <use xlink:href="#glyph4-35" x="579" y="185"/>
+  <use xlink:href="#glyph4-40" x="587" y="185"/>
+  <use xlink:href="#glyph4-35" x="595" y="185"/>
+  <use xlink:href="#glyph4-41" x="603" y="185"/>
+  <use xlink:href="#glyph4-42" x="611" y="185"/>
+  <use xlink:href="#glyph4-43" x="619" y="185"/>
+  <use xlink:href="#glyph4-38" x="627" y="185"/>
+  <use xlink:href="#glyph4-43" x="635" y="185"/>
+  <use xlink:href="#glyph4-32" x="643" y="185"/>
+  <use xlink:href="#glyph4-16" x="651" y="185"/>
+  <use xlink:href="#glyph4-25" x="659" y="185"/>
+  <use xlink:href="#glyph4-13" x="667" y="185"/>
+  <use xlink:href="#glyph4-44" x="675" y="185"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-45" x="171" y="200"/>
+  <use xlink:href="#glyph4-12" x="179" y="200"/>
+  <use xlink:href="#glyph4-37" x="187" y="200"/>
+  <use xlink:href="#glyph4-21" x="195" y="200"/>
+  <use xlink:href="#glyph4-46" x="203" y="200"/>
+  <use xlink:href="#glyph4-42" x="211" y="200"/>
+  <use xlink:href="#glyph4-45" x="219" y="200"/>
+  <use xlink:href="#glyph4-4" x="227" y="200"/>
+  <use xlink:href="#glyph4-47" x="235" y="200"/>
+  <use xlink:href="#glyph4-48" x="243" y="200"/>
+  <use xlink:href="#glyph4-29" x="251" y="200"/>
+  <use xlink:href="#glyph4-34" x="259" y="200"/>
+  <use xlink:href="#glyph4-48" x="267" y="200"/>
+  <use xlink:href="#glyph4-6" x="275" y="200"/>
+  <use xlink:href="#glyph4-14" x="283" y="200"/>
+  <use xlink:href="#glyph4-42" x="291" y="200"/>
+  <use xlink:href="#glyph4-40" x="299" y="200"/>
+  <use xlink:href="#glyph4-9" x="307" y="200"/>
+  <use xlink:href="#glyph4-18" x="315" y="200"/>
+  <use xlink:href="#glyph4-15" x="323" y="200"/>
+  <use xlink:href="#glyph4-49" x="331" y="200"/>
+  <use xlink:href="#glyph4-13" x="339" y="200"/>
+  <use xlink:href="#glyph4-40" x="347" y="200"/>
+  <use xlink:href="#glyph4-37" x="355" y="200"/>
+  <use xlink:href="#glyph4-50" x="363" y="200"/>
+  <use xlink:href="#glyph4-51" x="371" y="200"/>
+  <use xlink:href="#glyph4-12" x="379" y="200"/>
+  <use xlink:href="#glyph4-52" x="387" y="200"/>
+  <use xlink:href="#glyph4-18" x="395" y="200"/>
+  <use xlink:href="#glyph4-28" x="403" y="200"/>
+  <use xlink:href="#glyph4-16" x="411" y="200"/>
+  <use xlink:href="#glyph4-49" x="419" y="200"/>
+  <use xlink:href="#glyph4-29" x="427" y="200"/>
+  <use xlink:href="#glyph4-15" x="435" y="200"/>
+  <use xlink:href="#glyph4-2" x="443" y="200"/>
+  <use xlink:href="#glyph4-20" x="451" y="200"/>
+  <use xlink:href="#glyph4-31" x="459" y="200"/>
+  <use xlink:href="#glyph4-46" x="467" y="200"/>
+  <use xlink:href="#glyph4-40" x="475" y="200"/>
+  <use xlink:href="#glyph4-53" x="483" y="200"/>
+  <use xlink:href="#glyph4-22" x="491" y="200"/>
+  <use xlink:href="#glyph4-13" x="499" y="200"/>
+  <use xlink:href="#glyph4-32" x="507" y="200"/>
+  <use xlink:href="#glyph4-26" x="515" y="200"/>
+  <use xlink:href="#glyph4-22" x="523" y="200"/>
+  <use xlink:href="#glyph4-13" x="531" y="200"/>
+  <use xlink:href="#glyph4-5" x="539" y="200"/>
+  <use xlink:href="#glyph4-54" x="547" y="200"/>
+  <use xlink:href="#glyph4-44" x="555" y="200"/>
+  <use xlink:href="#glyph4-50" x="563" y="200"/>
+  <use xlink:href="#glyph4-55" x="571" y="200"/>
+  <use xlink:href="#glyph4-32" x="579" y="200"/>
+  <use xlink:href="#glyph4-28" x="587" y="200"/>
+  <use xlink:href="#glyph4-39" x="595" y="200"/>
+  <use xlink:href="#glyph4-56" x="603" y="200"/>
+  <use xlink:href="#glyph4-57" x="611" y="200"/>
+  <use xlink:href="#glyph4-30" x="619" y="200"/>
+  <use xlink:href="#glyph4-47" x="627" y="200"/>
+  <use xlink:href="#glyph4-6" x="635" y="200"/>
+  <use xlink:href="#glyph4-2" x="643" y="200"/>
+  <use xlink:href="#glyph4-29" x="651" y="200"/>
+  <use xlink:href="#glyph4-58" x="659" y="200"/>
+  <use xlink:href="#glyph4-21" x="667" y="200"/>
+  <use xlink:href="#glyph4-32" x="675" y="200"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-29" x="171" y="215"/>
+  <use xlink:href="#glyph4-47" x="179" y="215"/>
+  <use xlink:href="#glyph4-40" x="187" y="215"/>
+  <use xlink:href="#glyph4-44" x="195" y="215"/>
+  <use xlink:href="#glyph4-29" x="203" y="215"/>
+  <use xlink:href="#glyph4-58" x="211" y="215"/>
+  <use xlink:href="#glyph4-48" x="219" y="215"/>
+  <use xlink:href="#glyph4-12" x="227" y="215"/>
+  <use xlink:href="#glyph4-58" x="235" y="215"/>
+  <use xlink:href="#glyph4-59" x="243" y="215"/>
+  <use xlink:href="#glyph4-47" x="251" y="215"/>
+  <use xlink:href="#glyph4-5" x="259" y="215"/>
+  <use xlink:href="#glyph4-30" x="267" y="215"/>
+  <use xlink:href="#glyph4-58" x="275" y="215"/>
+  <use xlink:href="#glyph4-32" x="283" y="215"/>
+  <use xlink:href="#glyph4-13" x="291" y="215"/>
+  <use xlink:href="#glyph4-40" x="299" y="215"/>
+  <use xlink:href="#glyph4-58" x="307" y="215"/>
+  <use xlink:href="#glyph4-47" x="315" y="215"/>
+  <use xlink:href="#glyph4-40" x="323" y="215"/>
+  <use xlink:href="#glyph4-28" x="331" y="215"/>
+  <use xlink:href="#glyph4-39" x="339" y="215"/>
+  <use xlink:href="#glyph4-40" x="347" y="215"/>
+  <use xlink:href="#glyph4-47" x="355" y="215"/>
+  <use xlink:href="#glyph4-40" x="363" y="215"/>
+  <use xlink:href="#glyph4-60" x="371" y="215"/>
+  <use xlink:href="#glyph4-5" x="379" y="215"/>
+  <use xlink:href="#glyph4-26" x="387" y="215"/>
+  <use xlink:href="#glyph4-57" x="395" y="215"/>
+  <use xlink:href="#glyph4-39" x="403" y="215"/>
+  <use xlink:href="#glyph4-57" x="411" y="215"/>
+  <use xlink:href="#glyph4-13" x="419" y="215"/>
+  <use xlink:href="#glyph4-40" x="427" y="215"/>
+  <use xlink:href="#glyph4-57" x="435" y="215"/>
+  <use xlink:href="#glyph4-2" x="443" y="215"/>
+  <use xlink:href="#glyph4-8" x="451" y="215"/>
+  <use xlink:href="#glyph4-57" x="459" y="215"/>
+  <use xlink:href="#glyph4-38" x="467" y="215"/>
+  <use xlink:href="#glyph4-51" x="475" y="215"/>
+  <use xlink:href="#glyph4-25" x="483" y="215"/>
+  <use xlink:href="#glyph4-6" x="491" y="215"/>
+  <use xlink:href="#glyph4-60" x="499" y="215"/>
+  <use xlink:href="#glyph4-40" x="507" y="215"/>
+  <use xlink:href="#glyph4-13" x="515" y="215"/>
+  <use xlink:href="#glyph4-29" x="523" y="215"/>
+  <use xlink:href="#glyph4-58" x="531" y="215"/>
+  <use xlink:href="#glyph4-57" x="539" y="215"/>
+  <use xlink:href="#glyph4-51" x="547" y="215"/>
+  <use xlink:href="#glyph4-28" x="555" y="215"/>
+  <use xlink:href="#glyph4-59" x="563" y="215"/>
+  <use xlink:href="#glyph4-24" x="571" y="215"/>
+  <use xlink:href="#glyph4-6" x="579" y="215"/>
+  <use xlink:href="#glyph4-57" x="587" y="215"/>
+  <use xlink:href="#glyph4-57" x="595" y="215"/>
+  <use xlink:href="#glyph4-2" x="603" y="215"/>
+  <use xlink:href="#glyph4-2" x="611" y="215"/>
+  <use xlink:href="#glyph4-28" x="619" y="215"/>
+  <use xlink:href="#glyph4-4" x="627" y="215"/>
+  <use xlink:href="#glyph4-24" x="635" y="215"/>
+  <use xlink:href="#glyph4-18" x="643" y="215"/>
+  <use xlink:href="#glyph4-6" x="651" y="215"/>
+  <use xlink:href="#glyph4-60" x="659" y="215"/>
+  <use xlink:href="#glyph4-28" x="667" y="215"/>
+  <use xlink:href="#glyph4-59" x="675" y="215"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-34" x="171" y="230"/>
+  <use xlink:href="#glyph4-46" x="179" y="230"/>
+  <use xlink:href="#glyph4-47" x="187" y="230"/>
+  <use xlink:href="#glyph4-61" x="195" y="230"/>
+  <use xlink:href="#glyph4-49" x="203" y="230"/>
+  <use xlink:href="#glyph4-46" x="211" y="230"/>
+  <use xlink:href="#glyph4-58" x="219" y="230"/>
+  <use xlink:href="#glyph4-39" x="227" y="230"/>
+  <use xlink:href="#glyph4-22" x="235" y="230"/>
+  <use xlink:href="#glyph4-15" x="243" y="230"/>
+  <use xlink:href="#glyph4-22" x="251" y="230"/>
+  <use xlink:href="#glyph4-52" x="259" y="230"/>
+  <use xlink:href="#glyph4-49" x="267" y="230"/>
+  <use xlink:href="#glyph4-53" x="275" y="230"/>
+  <use xlink:href="#glyph4-51" x="283" y="230"/>
+  <use xlink:href="#glyph4-36" x="291" y="230"/>
+  <use xlink:href="#glyph4-31" x="299" y="230"/>
+  <use xlink:href="#glyph4-26" x="307" y="230"/>
+  <use xlink:href="#glyph4-19" x="315" y="230"/>
+  <use xlink:href="#glyph4-24" x="323" y="230"/>
+  <use xlink:href="#glyph4-31" x="331" y="230"/>
+  <use xlink:href="#glyph4-26" x="339" y="230"/>
+  <use xlink:href="#glyph4-27" x="347" y="230"/>
+  <use xlink:href="#glyph4-18" x="355" y="230"/>
+  <use xlink:href="#glyph4-5" x="363" y="230"/>
+  <use xlink:href="#glyph4-8" x="371" y="230"/>
+  <use xlink:href="#glyph4-21" x="379" y="230"/>
+  <use xlink:href="#glyph4-35" x="387" y="230"/>
+  <use xlink:href="#glyph4-55" x="395" y="230"/>
+  <use xlink:href="#glyph4-23" x="403" y="230"/>
+  <use xlink:href="#glyph4-16" x="411" y="230"/>
+  <use xlink:href="#glyph4-58" x="419" y="230"/>
+  <use xlink:href="#glyph4-16" x="427" y="230"/>
+  <use xlink:href="#glyph4-22" x="435" y="230"/>
+  <use xlink:href="#glyph4-34" x="443" y="230"/>
+  <use xlink:href="#glyph4-35" x="451" y="230"/>
+  <use xlink:href="#glyph4-37" x="459" y="230"/>
+  <use xlink:href="#glyph4-62" x="467" y="230"/>
+  <use xlink:href="#glyph4-37" x="475" y="230"/>
+  <use xlink:href="#glyph4-34" x="483" y="230"/>
+  <use xlink:href="#glyph4-22" x="491" y="230"/>
+  <use xlink:href="#glyph4-36" x="499" y="230"/>
+  <use xlink:href="#glyph4-52" x="507" y="230"/>
+  <use xlink:href="#glyph4-53" x="515" y="230"/>
+  <use xlink:href="#glyph4-63" x="523" y="230"/>
+  <use xlink:href="#glyph4-38" x="531" y="230"/>
+  <use xlink:href="#glyph4-55" x="539" y="230"/>
+  <use xlink:href="#glyph4-3" x="547" y="230"/>
+  <use xlink:href="#glyph4-60" x="555" y="230"/>
+  <use xlink:href="#glyph4-47" x="563" y="230"/>
+  <use xlink:href="#glyph4-32" x="571" y="230"/>
+  <use xlink:href="#glyph4-64" x="579" y="230"/>
+  <use xlink:href="#glyph4-24" x="587" y="230"/>
+  <use xlink:href="#glyph4-16" x="595" y="230"/>
+  <use xlink:href="#glyph4-35" x="603" y="230"/>
+  <use xlink:href="#glyph4-55" x="611" y="230"/>
+  <use xlink:href="#glyph4-51" x="619" y="230"/>
+  <use xlink:href="#glyph4-32" x="627" y="230"/>
+  <use xlink:href="#glyph4-57" x="635" y="230"/>
+  <use xlink:href="#glyph4-17" x="643" y="230"/>
+  <use xlink:href="#glyph4-34" x="651" y="230"/>
+  <use xlink:href="#glyph4-25" x="659" y="230"/>
+  <use xlink:href="#glyph4-48" x="667" y="230"/>
+  <use xlink:href="#glyph4-37" x="675" y="230"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-19" x="171" y="245"/>
+  <use xlink:href="#glyph4-25" x="179" y="245"/>
+  <use xlink:href="#glyph4-48" x="187" y="245"/>
+  <use xlink:href="#glyph4-57" x="195" y="245"/>
+  <use xlink:href="#glyph4-11" x="203" y="245"/>
+  <use xlink:href="#glyph4-62" x="211" y="245"/>
+  <use xlink:href="#glyph4-16" x="219" y="245"/>
+  <use xlink:href="#glyph4-3" x="227" y="245"/>
+  <use xlink:href="#glyph4-64" x="235" y="245"/>
+  <use xlink:href="#glyph4-51" x="243" y="245"/>
+  <use xlink:href="#glyph4-24" x="251" y="245"/>
+  <use xlink:href="#glyph4-42" x="259" y="245"/>
+  <use xlink:href="#glyph4-39" x="267" y="245"/>
+  <use xlink:href="#glyph4-15" x="275" y="245"/>
+  <use xlink:href="#glyph4-61" x="283" y="245"/>
+  <use xlink:href="#glyph4-45" x="291" y="245"/>
+  <use xlink:href="#glyph4-14" x="299" y="245"/>
+  <use xlink:href="#glyph4-35" x="307" y="245"/>
+  <use xlink:href="#glyph4-63" x="315" y="245"/>
+  <use xlink:href="#glyph4-38" x="323" y="245"/>
+  <use xlink:href="#glyph4-14" x="331" y="245"/>
+  <use xlink:href="#glyph4-65" x="339" y="245"/>
+  <use xlink:href="#glyph4-22" x="347" y="245"/>
+  <use xlink:href="#glyph4-41" x="355" y="245"/>
+  <use xlink:href="#glyph4-18" x="363" y="245"/>
+  <use xlink:href="#glyph4-53" x="371" y="245"/>
+  <use xlink:href="#glyph4-64" x="379" y="245"/>
+  <use xlink:href="#glyph4-36" x="387" y="245"/>
+  <use xlink:href="#glyph4-44" x="395" y="245"/>
+  <use xlink:href="#glyph4-53" x="403" y="245"/>
+  <use xlink:href="#glyph4-43" x="411" y="245"/>
+  <use xlink:href="#glyph4-44" x="419" y="245"/>
+  <use xlink:href="#glyph4-4" x="427" y="245"/>
+  <use xlink:href="#glyph4-53" x="435" y="245"/>
+  <use xlink:href="#glyph4-36" x="443" y="245"/>
+  <use xlink:href="#glyph4-25" x="451" y="245"/>
+  <use xlink:href="#glyph4-10" x="459" y="245"/>
+  <use xlink:href="#glyph4-49" x="467" y="245"/>
+  <use xlink:href="#glyph4-12" x="475" y="245"/>
+  <use xlink:href="#glyph4-30" x="483" y="245"/>
+  <use xlink:href="#glyph4-66" x="491" y="245"/>
+  <use xlink:href="#glyph4-39" x="499" y="245"/>
+  <use xlink:href="#glyph4-38" x="507" y="245"/>
+  <use xlink:href="#glyph4-65" x="515" y="245"/>
+  <use xlink:href="#glyph4-51" x="523" y="245"/>
+  <use xlink:href="#glyph4-59" x="531" y="245"/>
+  <use xlink:href="#glyph4-3" x="539" y="245"/>
+  <use xlink:href="#glyph4-46" x="547" y="245"/>
+  <use xlink:href="#glyph4-8" x="555" y="245"/>
+  <use xlink:href="#glyph4-56" x="563" y="245"/>
+  <use xlink:href="#glyph4-39" x="571" y="245"/>
+  <use xlink:href="#glyph4-15" x="579" y="245"/>
+  <use xlink:href="#glyph4-49" x="587" y="245"/>
+  <use xlink:href="#glyph4-18" x="595" y="245"/>
+  <use xlink:href="#glyph4-56" x="603" y="245"/>
+  <use xlink:href="#glyph4-52" x="611" y="245"/>
+  <use xlink:href="#glyph4-28" x="619" y="245"/>
+  <use xlink:href="#glyph4-5" x="627" y="245"/>
+  <use xlink:href="#glyph4-17" x="635" y="245"/>
+  <use xlink:href="#glyph4-35" x="643" y="245"/>
+  <use xlink:href="#glyph4-3" x="651" y="245"/>
+  <use xlink:href="#glyph4-14" x="659" y="245"/>
+  <use xlink:href="#glyph4-12" x="667" y="245"/>
+  <use xlink:href="#glyph4-58" x="675" y="245"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-37" x="171" y="260"/>
+  <use xlink:href="#glyph4-21" x="179" y="260"/>
+  <use xlink:href="#glyph4-27" x="187" y="260"/>
+  <use xlink:href="#glyph4-61" x="195" y="260"/>
+  <use xlink:href="#glyph4-36" x="203" y="260"/>
+  <use xlink:href="#glyph4-66" x="211" y="260"/>
+  <use xlink:href="#glyph4-39" x="219" y="260"/>
+  <use xlink:href="#glyph4-61" x="227" y="260"/>
+  <use xlink:href="#glyph4-58" x="235" y="260"/>
+  <use xlink:href="#glyph4-47" x="243" y="260"/>
+  <use xlink:href="#glyph4-14" x="251" y="260"/>
+  <use xlink:href="#glyph4-43" x="259" y="260"/>
+  <use xlink:href="#glyph4-47" x="267" y="260"/>
+  <use xlink:href="#glyph4-22" x="275" y="260"/>
+  <use xlink:href="#glyph4-54" x="283" y="260"/>
+  <use xlink:href="#glyph4-26" x="291" y="260"/>
+  <use xlink:href="#glyph4-12" x="299" y="260"/>
+  <use xlink:href="#glyph4-17" x="307" y="260"/>
+  <use xlink:href="#glyph4-30" x="315" y="260"/>
+  <use xlink:href="#glyph4-63" x="323" y="260"/>
+  <use xlink:href="#glyph4-65" x="331" y="260"/>
+  <use xlink:href="#glyph4-16" x="339" y="260"/>
+  <use xlink:href="#glyph4-30" x="347" y="260"/>
+  <use xlink:href="#glyph4-34" x="355" y="260"/>
+  <use xlink:href="#glyph4-10" x="363" y="260"/>
+  <use xlink:href="#glyph4-32" x="371" y="260"/>
+  <use xlink:href="#glyph4-49" x="379" y="260"/>
+  <use xlink:href="#glyph4-58" x="387" y="260"/>
+  <use xlink:href="#glyph4-56" x="395" y="260"/>
+  <use xlink:href="#glyph4-5" x="403" y="260"/>
+  <use xlink:href="#glyph4-12" x="411" y="260"/>
+  <use xlink:href="#glyph4-61" x="419" y="260"/>
+  <use xlink:href="#glyph4-51" x="427" y="260"/>
+  <use xlink:href="#glyph4-57" x="435" y="260"/>
+  <use xlink:href="#glyph4-11" x="443" y="260"/>
+  <use xlink:href="#glyph4-32" x="451" y="260"/>
+  <use xlink:href="#glyph4-52" x="459" y="260"/>
+  <use xlink:href="#glyph4-37" x="467" y="260"/>
+  <use xlink:href="#glyph4-61" x="475" y="260"/>
+  <use xlink:href="#glyph4-33" x="483" y="260"/>
+  <use xlink:href="#glyph4-62" x="491" y="260"/>
+  <use xlink:href="#glyph4-32" x="499" y="260"/>
+  <use xlink:href="#glyph4-11" x="507" y="260"/>
+  <use xlink:href="#glyph4-27" x="515" y="260"/>
+  <use xlink:href="#glyph4-23" x="523" y="260"/>
+  <use xlink:href="#glyph4-51" x="531" y="260"/>
+  <use xlink:href="#glyph4-18" x="539" y="260"/>
+  <use xlink:href="#glyph4-21" x="547" y="260"/>
+  <use xlink:href="#glyph4-24" x="555" y="260"/>
+  <use xlink:href="#glyph4-35" x="563" y="260"/>
+  <use xlink:href="#glyph4-41" x="571" y="260"/>
+  <use xlink:href="#glyph4-20" x="579" y="260"/>
+  <use xlink:href="#glyph4-56" x="587" y="260"/>
+  <use xlink:href="#glyph4-50" x="595" y="260"/>
+  <use xlink:href="#glyph4-5" x="603" y="260"/>
+  <use xlink:href="#glyph4-43" x="611" y="260"/>
+  <use xlink:href="#glyph4-36" x="619" y="260"/>
+  <use xlink:href="#glyph4-30" x="627" y="260"/>
+  <use xlink:href="#glyph4-29" x="635" y="260"/>
+  <use xlink:href="#glyph4-58" x="643" y="260"/>
+  <use xlink:href="#glyph4-52" x="651" y="260"/>
+  <use xlink:href="#glyph4-61" x="659" y="260"/>
+  <use xlink:href="#glyph4-4" x="667" y="260"/>
+  <use xlink:href="#glyph4-32" x="675" y="260"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-21" x="171" y="275"/>
+  <use xlink:href="#glyph4-31" x="179" y="275"/>
+  <use xlink:href="#glyph4-40" x="187" y="275"/>
+  <use xlink:href="#glyph4-4" x="195" y="275"/>
+  <use xlink:href="#glyph4-30" x="203" y="275"/>
+  <use xlink:href="#glyph4-26" x="211" y="275"/>
+  <use xlink:href="#glyph4-55" x="219" y="275"/>
+  <use xlink:href="#glyph4-42" x="227" y="275"/>
+  <use xlink:href="#glyph4-57" x="235" y="275"/>
+  <use xlink:href="#glyph4-40" x="243" y="275"/>
+  <use xlink:href="#glyph4-8" x="251" y="275"/>
+  <use xlink:href="#glyph4-30" x="259" y="275"/>
+  <use xlink:href="#glyph4-51" x="267" y="275"/>
+  <use xlink:href="#glyph4-23" x="275" y="275"/>
+  <use xlink:href="#glyph4-52" x="283" y="275"/>
+  <use xlink:href="#glyph4-49" x="291" y="275"/>
+  <use xlink:href="#glyph4-13" x="299" y="275"/>
+  <use xlink:href="#glyph4-26" x="307" y="275"/>
+  <use xlink:href="#glyph4-5" x="315" y="275"/>
+  <use xlink:href="#glyph4-46" x="323" y="275"/>
+  <use xlink:href="#glyph4-38" x="331" y="275"/>
+  <use xlink:href="#glyph4-45" x="339" y="275"/>
+  <use xlink:href="#glyph4-63" x="347" y="275"/>
+  <use xlink:href="#glyph4-42" x="355" y="275"/>
+  <use xlink:href="#glyph4-57" x="363" y="275"/>
+  <use xlink:href="#glyph4-23" x="371" y="275"/>
+  <use xlink:href="#glyph4-42" x="379" y="275"/>
+  <use xlink:href="#glyph4-38" x="387" y="275"/>
+  <use xlink:href="#glyph4-63" x="395" y="275"/>
+  <use xlink:href="#glyph4-35" x="403" y="275"/>
+  <use xlink:href="#glyph4-15" x="411" y="275"/>
+  <use xlink:href="#glyph4-39" x="419" y="275"/>
+  <use xlink:href="#glyph4-12" x="427" y="275"/>
+  <use xlink:href="#glyph4-16" x="435" y="275"/>
+  <use xlink:href="#glyph4-22" x="443" y="275"/>
+  <use xlink:href="#glyph4-28" x="451" y="275"/>
+  <use xlink:href="#glyph4-28" x="459" y="275"/>
+  <use xlink:href="#glyph4-39" x="467" y="275"/>
+  <use xlink:href="#glyph4-58" x="475" y="275"/>
+  <use xlink:href="#glyph4-46" x="483" y="275"/>
+  <use xlink:href="#glyph4-55" x="491" y="275"/>
+  <use xlink:href="#glyph4-39" x="499" y="275"/>
+  <use xlink:href="#glyph4-11" x="507" y="275"/>
+  <use xlink:href="#glyph4-44" x="515" y="275"/>
+  <use xlink:href="#glyph4-47" x="523" y="275"/>
+  <use xlink:href="#glyph4-56" x="531" y="275"/>
+  <use xlink:href="#glyph4-43" x="539" y="275"/>
+  <use xlink:href="#glyph4-66" x="547" y="275"/>
+  <use xlink:href="#glyph4-40" x="555" y="275"/>
+  <use xlink:href="#glyph4-19" x="563" y="275"/>
+  <use xlink:href="#glyph4-2" x="571" y="275"/>
+  <use xlink:href="#glyph4-11" x="579" y="275"/>
+  <use xlink:href="#glyph4-22" x="587" y="275"/>
+  <use xlink:href="#glyph4-22" x="595" y="275"/>
+  <use xlink:href="#glyph4-26" x="603" y="275"/>
+  <use xlink:href="#glyph4-58" x="611" y="275"/>
+  <use xlink:href="#glyph4-30" x="619" y="275"/>
+  <use xlink:href="#glyph4-53" x="627" y="275"/>
+  <use xlink:href="#glyph4-4" x="635" y="275"/>
+  <use xlink:href="#glyph4-34" x="643" y="275"/>
+  <use xlink:href="#glyph4-53" x="651" y="275"/>
+  <use xlink:href="#glyph4-29" x="659" y="275"/>
+  <use xlink:href="#glyph4-2" x="667" y="275"/>
+  <use xlink:href="#glyph4-47" x="675" y="275"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-65" x="171" y="290"/>
+  <use xlink:href="#glyph4-19" x="179" y="290"/>
+  <use xlink:href="#glyph4-61" x="187" y="290"/>
+  <use xlink:href="#glyph4-66" x="195" y="290"/>
+  <use xlink:href="#glyph4-27" x="203" y="290"/>
+  <use xlink:href="#glyph4-9" x="211" y="290"/>
+  <use xlink:href="#glyph4-28" x="219" y="290"/>
+  <use xlink:href="#glyph4-12" x="227" y="290"/>
+  <use xlink:href="#glyph4-16" x="235" y="290"/>
+  <use xlink:href="#glyph4-57" x="243" y="290"/>
+  <use xlink:href="#glyph4-13" x="251" y="290"/>
+  <use xlink:href="#glyph4-36" x="259" y="290"/>
+  <use xlink:href="#glyph4-37" x="267" y="290"/>
+  <use xlink:href="#glyph4-8" x="275" y="290"/>
+  <use xlink:href="#glyph4-49" x="283" y="290"/>
+  <use xlink:href="#glyph4-22" x="291" y="290"/>
+  <use xlink:href="#glyph4-27" x="299" y="290"/>
+  <use xlink:href="#glyph4-33" x="307" y="290"/>
+  <use xlink:href="#glyph4-56" x="315" y="290"/>
+  <use xlink:href="#glyph4-21" x="323" y="290"/>
+  <use xlink:href="#glyph4-48" x="331" y="290"/>
+  <use xlink:href="#glyph4-25" x="339" y="290"/>
+  <use xlink:href="#glyph4-41" x="347" y="290"/>
+  <use xlink:href="#glyph4-5" x="355" y="290"/>
+  <use xlink:href="#glyph4-53" x="363" y="290"/>
+  <use xlink:href="#glyph4-55" x="371" y="290"/>
+  <use xlink:href="#glyph4-56" x="379" y="290"/>
+  <use xlink:href="#glyph4-11" x="387" y="290"/>
+  <use xlink:href="#glyph4-31" x="395" y="290"/>
+  <use xlink:href="#glyph4-53" x="403" y="290"/>
+  <use xlink:href="#glyph4-64" x="411" y="290"/>
+  <use xlink:href="#glyph4-32" x="419" y="290"/>
+  <use xlink:href="#glyph4-24" x="427" y="290"/>
+  <use xlink:href="#glyph4-18" x="435" y="290"/>
+  <use xlink:href="#glyph4-24" x="443" y="290"/>
+  <use xlink:href="#glyph4-11" x="451" y="290"/>
+  <use xlink:href="#glyph4-25" x="459" y="290"/>
+  <use xlink:href="#glyph4-66" x="467" y="290"/>
+  <use xlink:href="#glyph4-24" x="475" y="290"/>
+  <use xlink:href="#glyph4-2" x="483" y="290"/>
+  <use xlink:href="#glyph4-61" x="491" y="290"/>
+  <use xlink:href="#glyph4-46" x="499" y="290"/>
+  <use xlink:href="#glyph4-11" x="507" y="290"/>
+  <use xlink:href="#glyph4-58" x="515" y="290"/>
+  <use xlink:href="#glyph4-26" x="523" y="290"/>
+  <use xlink:href="#glyph4-3" x="531" y="290"/>
+  <use xlink:href="#glyph4-39" x="539" y="290"/>
+  <use xlink:href="#glyph4-26" x="547" y="290"/>
+  <use xlink:href="#glyph4-12" x="555" y="290"/>
+  <use xlink:href="#glyph4-47" x="563" y="290"/>
+  <use xlink:href="#glyph4-57" x="571" y="290"/>
+  <use xlink:href="#glyph4-57" x="579" y="290"/>
+  <use xlink:href="#glyph4-15" x="587" y="290"/>
+  <use xlink:href="#glyph4-22" x="595" y="290"/>
+  <use xlink:href="#glyph4-50" x="603" y="290"/>
+  <use xlink:href="#glyph4-59" x="611" y="290"/>
+  <use xlink:href="#glyph4-58" x="619" y="290"/>
+  <use xlink:href="#glyph4-32" x="627" y="290"/>
+  <use xlink:href="#glyph4-23" x="635" y="290"/>
+  <use xlink:href="#glyph4-8" x="643" y="290"/>
+  <use xlink:href="#glyph4-8" x="651" y="290"/>
+  <use xlink:href="#glyph4-15" x="659" y="290"/>
+  <use xlink:href="#glyph4-52" x="667" y="290"/>
+  <use xlink:href="#glyph4-38" x="675" y="290"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-3" x="171" y="305"/>
+  <use xlink:href="#glyph4-12" x="179" y="305"/>
+  <use xlink:href="#glyph4-59" x="187" y="305"/>
+  <use xlink:href="#glyph4-53" x="195" y="305"/>
+  <use xlink:href="#glyph4-30" x="203" y="305"/>
+  <use xlink:href="#glyph4-51" x="211" y="305"/>
+  <use xlink:href="#glyph4-20" x="219" y="305"/>
+  <use xlink:href="#glyph4-38" x="227" y="305"/>
+  <use xlink:href="#glyph4-40" x="235" y="305"/>
+  <use xlink:href="#glyph4-60" x="243" y="305"/>
+  <use xlink:href="#glyph4-38" x="251" y="305"/>
+  <use xlink:href="#glyph4-33" x="259" y="305"/>
+  <use xlink:href="#glyph4-16" x="267" y="305"/>
+  <use xlink:href="#glyph4-12" x="275" y="305"/>
+  <use xlink:href="#glyph4-63" x="283" y="305"/>
+  <use xlink:href="#glyph4-62" x="291" y="305"/>
+  <use xlink:href="#glyph4-38" x="299" y="305"/>
+  <use xlink:href="#glyph4-53" x="307" y="305"/>
+  <use xlink:href="#glyph4-59" x="315" y="305"/>
+  <use xlink:href="#glyph4-54" x="323" y="305"/>
+  <use xlink:href="#glyph4-17" x="331" y="305"/>
+  <use xlink:href="#glyph4-8" x="339" y="305"/>
+  <use xlink:href="#glyph4-56" x="347" y="305"/>
+  <use xlink:href="#glyph4-40" x="355" y="305"/>
+  <use xlink:href="#glyph4-62" x="363" y="305"/>
+  <use xlink:href="#glyph4-10" x="371" y="305"/>
+  <use xlink:href="#glyph4-37" x="379" y="305"/>
+  <use xlink:href="#glyph4-20" x="387" y="305"/>
+  <use xlink:href="#glyph4-26" x="395" y="305"/>
+  <use xlink:href="#glyph4-62" x="403" y="305"/>
+  <use xlink:href="#glyph4-38" x="411" y="305"/>
+  <use xlink:href="#glyph4-53" x="419" y="305"/>
+  <use xlink:href="#glyph4-35" x="427" y="305"/>
+  <use xlink:href="#glyph4-38" x="435" y="305"/>
+  <use xlink:href="#glyph4-37" x="443" y="305"/>
+  <use xlink:href="#glyph4-64" x="451" y="305"/>
+  <use xlink:href="#glyph4-58" x="459" y="305"/>
+  <use xlink:href="#glyph4-24" x="467" y="305"/>
+  <use xlink:href="#glyph4-12" x="475" y="305"/>
+  <use xlink:href="#glyph4-65" x="483" y="305"/>
+  <use xlink:href="#glyph4-31" x="491" y="305"/>
+  <use xlink:href="#glyph4-52" x="499" y="305"/>
+  <use xlink:href="#glyph4-40" x="507" y="305"/>
+  <use xlink:href="#glyph4-45" x="515" y="305"/>
+  <use xlink:href="#glyph4-48" x="523" y="305"/>
+  <use xlink:href="#glyph4-53" x="531" y="305"/>
+  <use xlink:href="#glyph4-22" x="539" y="305"/>
+  <use xlink:href="#glyph4-33" x="547" y="305"/>
+  <use xlink:href="#glyph4-18" x="555" y="305"/>
+  <use xlink:href="#glyph4-43" x="563" y="305"/>
+  <use xlink:href="#glyph4-45" x="571" y="305"/>
+  <use xlink:href="#glyph4-17" x="579" y="305"/>
+  <use xlink:href="#glyph4-8" x="587" y="305"/>
+  <use xlink:href="#glyph4-47" x="595" y="305"/>
+  <use xlink:href="#glyph4-12" x="603" y="305"/>
+  <use xlink:href="#glyph4-5" x="611" y="305"/>
+  <use xlink:href="#glyph4-39" x="619" y="305"/>
+  <use xlink:href="#glyph4-30" x="627" y="305"/>
+  <use xlink:href="#glyph4-66" x="635" y="305"/>
+  <use xlink:href="#glyph4-27" x="643" y="305"/>
+  <use xlink:href="#glyph4-17" x="651" y="305"/>
+  <use xlink:href="#glyph4-18" x="659" y="305"/>
+  <use xlink:href="#glyph4-29" x="667" y="305"/>
+  <use xlink:href="#glyph4-66" x="675" y="305"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-50" x="171" y="320"/>
+  <use xlink:href="#glyph4-63" x="179" y="320"/>
+  <use xlink:href="#glyph4-31" x="187" y="320"/>
+  <use xlink:href="#glyph4-30" x="195" y="320"/>
+  <use xlink:href="#glyph4-52" x="203" y="320"/>
+  <use xlink:href="#glyph4-63" x="211" y="320"/>
+  <use xlink:href="#glyph4-27" x="219" y="320"/>
+  <use xlink:href="#glyph4-45" x="227" y="320"/>
+  <use xlink:href="#glyph4-61" x="235" y="320"/>
+  <use xlink:href="#glyph4-19" x="243" y="320"/>
+  <use xlink:href="#glyph4-2" x="251" y="320"/>
+  <use xlink:href="#glyph4-6" x="259" y="320"/>
+  <use xlink:href="#glyph4-44" x="267" y="320"/>
+  <use xlink:href="#glyph4-8" x="275" y="320"/>
+  <use xlink:href="#glyph4-40" x="283" y="320"/>
+  <use xlink:href="#glyph4-15" x="291" y="320"/>
+  <use xlink:href="#glyph4-35" x="299" y="320"/>
+  <use xlink:href="#glyph4-55" x="307" y="320"/>
+  <use xlink:href="#glyph4-5" x="315" y="320"/>
+  <use xlink:href="#glyph4-2" x="323" y="320"/>
+  <use xlink:href="#glyph4-21" x="331" y="320"/>
+  <use xlink:href="#glyph4-6" x="339" y="320"/>
+  <use xlink:href="#glyph4-57" x="347" y="320"/>
+  <use xlink:href="#glyph4-20" x="355" y="320"/>
+  <use xlink:href="#glyph4-19" x="363" y="320"/>
+  <use xlink:href="#glyph4-10" x="371" y="320"/>
+  <use xlink:href="#glyph4-45" x="379" y="320"/>
+  <use xlink:href="#glyph4-18" x="387" y="320"/>
+  <use xlink:href="#glyph4-9" x="395" y="320"/>
+  <use xlink:href="#glyph4-38" x="403" y="320"/>
+  <use xlink:href="#glyph4-3" x="411" y="320"/>
+  <use xlink:href="#glyph4-61" x="419" y="320"/>
+  <use xlink:href="#glyph4-48" x="427" y="320"/>
+  <use xlink:href="#glyph4-2" x="435" y="320"/>
+  <use xlink:href="#glyph4-14" x="443" y="320"/>
+  <use xlink:href="#glyph4-18" x="451" y="320"/>
+  <use xlink:href="#glyph4-40" x="459" y="320"/>
+  <use xlink:href="#glyph4-39" x="467" y="320"/>
+  <use xlink:href="#glyph4-34" x="475" y="320"/>
+  <use xlink:href="#glyph4-17" x="483" y="320"/>
+  <use xlink:href="#glyph4-8" x="491" y="320"/>
+  <use xlink:href="#glyph4-22" x="499" y="320"/>
+  <use xlink:href="#glyph4-17" x="507" y="320"/>
+  <use xlink:href="#glyph4-55" x="515" y="320"/>
+  <use xlink:href="#glyph4-58" x="523" y="320"/>
+  <use xlink:href="#glyph4-39" x="531" y="320"/>
+  <use xlink:href="#glyph4-23" x="539" y="320"/>
+  <use xlink:href="#glyph4-59" x="547" y="320"/>
+  <use xlink:href="#glyph4-66" x="555" y="320"/>
+  <use xlink:href="#glyph4-21" x="563" y="320"/>
+  <use xlink:href="#glyph4-32" x="571" y="320"/>
+  <use xlink:href="#glyph4-11" x="579" y="320"/>
+  <use xlink:href="#glyph4-23" x="587" y="320"/>
+  <use xlink:href="#glyph4-9" x="595" y="320"/>
+  <use xlink:href="#glyph4-15" x="603" y="320"/>
+  <use xlink:href="#glyph4-42" x="611" y="320"/>
+  <use xlink:href="#glyph4-35" x="619" y="320"/>
+  <use xlink:href="#glyph4-29" x="627" y="320"/>
+  <use xlink:href="#glyph4-27" x="635" y="320"/>
+  <use xlink:href="#glyph4-31" x="643" y="320"/>
+  <use xlink:href="#glyph4-4" x="651" y="320"/>
+  <use xlink:href="#glyph4-20" x="659" y="320"/>
+  <use xlink:href="#glyph4-59" x="667" y="320"/>
+  <use xlink:href="#glyph4-16" x="675" y="320"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-53" x="171" y="335"/>
+  <use xlink:href="#glyph4-5" x="179" y="335"/>
+  <use xlink:href="#glyph4-30" x="187" y="335"/>
+  <use xlink:href="#glyph4-22" x="195" y="335"/>
+  <use xlink:href="#glyph4-14" x="203" y="335"/>
+  <use xlink:href="#glyph4-39" x="211" y="335"/>
+  <use xlink:href="#glyph4-64" x="219" y="335"/>
+  <use xlink:href="#glyph4-5" x="227" y="335"/>
+  <use xlink:href="#glyph4-4" x="235" y="335"/>
+  <use xlink:href="#glyph4-18" x="243" y="335"/>
+  <use xlink:href="#glyph4-58" x="251" y="335"/>
+  <use xlink:href="#glyph4-32" x="259" y="335"/>
+  <use xlink:href="#glyph4-9" x="267" y="335"/>
+  <use xlink:href="#glyph4-49" x="275" y="335"/>
+  <use xlink:href="#glyph4-58" x="283" y="335"/>
+  <use xlink:href="#glyph4-38" x="291" y="335"/>
+  <use xlink:href="#glyph4-54" x="299" y="335"/>
+  <use xlink:href="#glyph4-20" x="307" y="335"/>
+  <use xlink:href="#glyph4-20" x="315" y="335"/>
+  <use xlink:href="#glyph4-41" x="323" y="335"/>
+  <use xlink:href="#glyph4-28" x="331" y="335"/>
+  <use xlink:href="#glyph4-66" x="339" y="335"/>
+  <use xlink:href="#glyph4-59" x="347" y="335"/>
+  <use xlink:href="#glyph4-61" x="355" y="335"/>
+  <use xlink:href="#glyph4-55" x="363" y="335"/>
+  <use xlink:href="#glyph4-34" x="371" y="335"/>
+  <use xlink:href="#glyph4-41" x="379" y="335"/>
+  <use xlink:href="#glyph4-34" x="387" y="335"/>
+  <use xlink:href="#glyph4-42" x="395" y="335"/>
+  <use xlink:href="#glyph4-51" x="403" y="335"/>
+  <use xlink:href="#glyph4-24" x="411" y="335"/>
+  <use xlink:href="#glyph4-43" x="419" y="335"/>
+  <use xlink:href="#glyph4-43" x="427" y="335"/>
+  <use xlink:href="#glyph4-33" x="435" y="335"/>
+  <use xlink:href="#glyph4-56" x="443" y="335"/>
+  <use xlink:href="#glyph4-50" x="451" y="335"/>
+  <use xlink:href="#glyph4-46" x="459" y="335"/>
+  <use xlink:href="#glyph4-15" x="467" y="335"/>
+  <use xlink:href="#glyph4-17" x="475" y="335"/>
+  <use xlink:href="#glyph4-47" x="483" y="335"/>
+  <use xlink:href="#glyph4-12" x="491" y="335"/>
+  <use xlink:href="#glyph4-8" x="499" y="335"/>
+  <use xlink:href="#glyph4-29" x="507" y="335"/>
+  <use xlink:href="#glyph4-37" x="515" y="335"/>
+  <use xlink:href="#glyph4-25" x="523" y="335"/>
+  <use xlink:href="#glyph4-40" x="531" y="335"/>
+  <use xlink:href="#glyph4-31" x="539" y="335"/>
+  <use xlink:href="#glyph4-66" x="547" y="335"/>
+  <use xlink:href="#glyph4-17" x="555" y="335"/>
+  <use xlink:href="#glyph4-43" x="563" y="335"/>
+  <use xlink:href="#glyph4-56" x="571" y="335"/>
+  <use xlink:href="#glyph4-41" x="579" y="335"/>
+  <use xlink:href="#glyph4-35" x="587" y="335"/>
+  <use xlink:href="#glyph4-4" x="595" y="335"/>
+  <use xlink:href="#glyph4-18" x="603" y="335"/>
+  <use xlink:href="#glyph4-44" x="611" y="335"/>
+  <use xlink:href="#glyph4-31" x="619" y="335"/>
+  <use xlink:href="#glyph4-27" x="627" y="335"/>
+  <use xlink:href="#glyph4-44" x="635" y="335"/>
+  <use xlink:href="#glyph4-12" x="643" y="335"/>
+  <use xlink:href="#glyph4-10" x="651" y="335"/>
+  <use xlink:href="#glyph4-33" x="659" y="335"/>
+  <use xlink:href="#glyph4-36" x="667" y="335"/>
+  <use xlink:href="#glyph4-45" x="675" y="335"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-53" x="171" y="350"/>
+  <use xlink:href="#glyph4-33" x="179" y="350"/>
+  <use xlink:href="#glyph4-9" x="187" y="350"/>
+  <use xlink:href="#glyph4-43" x="195" y="350"/>
+  <use xlink:href="#glyph4-53" x="203" y="350"/>
+  <use xlink:href="#glyph4-59" x="211" y="350"/>
+  <use xlink:href="#glyph4-39" x="219" y="350"/>
+  <use xlink:href="#glyph4-20" x="227" y="350"/>
+  <use xlink:href="#glyph4-37" x="235" y="350"/>
+  <use xlink:href="#glyph4-17" x="243" y="350"/>
+  <use xlink:href="#glyph4-27" x="251" y="350"/>
+  <use xlink:href="#glyph4-47" x="259" y="350"/>
+  <use xlink:href="#glyph4-23" x="267" y="350"/>
+  <use xlink:href="#glyph4-52" x="275" y="350"/>
+  <use xlink:href="#glyph4-32" x="283" y="350"/>
+  <use xlink:href="#glyph4-59" x="291" y="350"/>
+  <use xlink:href="#glyph4-49" x="299" y="350"/>
+  <use xlink:href="#glyph4-15" x="307" y="350"/>
+  <use xlink:href="#glyph4-62" x="315" y="350"/>
+  <use xlink:href="#glyph4-30" x="323" y="350"/>
+  <use xlink:href="#glyph4-5" x="331" y="350"/>
+  <use xlink:href="#glyph4-56" x="339" y="350"/>
+  <use xlink:href="#glyph4-36" x="347" y="350"/>
+  <use xlink:href="#glyph4-4" x="355" y="350"/>
+  <use xlink:href="#glyph4-60" x="363" y="350"/>
+  <use xlink:href="#glyph4-42" x="371" y="350"/>
+  <use xlink:href="#glyph4-11" x="379" y="350"/>
+  <use xlink:href="#glyph4-34" x="387" y="350"/>
+  <use xlink:href="#glyph4-14" x="395" y="350"/>
+  <use xlink:href="#glyph4-56" x="403" y="350"/>
+  <use xlink:href="#glyph4-42" x="411" y="350"/>
+  <use xlink:href="#glyph4-20" x="419" y="350"/>
+  <use xlink:href="#glyph4-6" x="427" y="350"/>
+  <use xlink:href="#glyph4-35" x="435" y="350"/>
+  <use xlink:href="#glyph4-8" x="443" y="350"/>
+  <use xlink:href="#glyph4-37" x="451" y="350"/>
+  <use xlink:href="#glyph4-57" x="459" y="350"/>
+  <use xlink:href="#glyph4-35" x="467" y="350"/>
+  <use xlink:href="#glyph4-24" x="475" y="350"/>
+  <use xlink:href="#glyph4-40" x="483" y="350"/>
+  <use xlink:href="#glyph4-65" x="491" y="350"/>
+  <use xlink:href="#glyph4-26" x="499" y="350"/>
+  <use xlink:href="#glyph4-56" x="507" y="350"/>
+  <use xlink:href="#glyph4-29" x="515" y="350"/>
+  <use xlink:href="#glyph4-14" x="523" y="350"/>
+  <use xlink:href="#glyph4-22" x="531" y="350"/>
+  <use xlink:href="#glyph4-28" x="539" y="350"/>
+  <use xlink:href="#glyph4-26" x="547" y="350"/>
+  <use xlink:href="#glyph4-65" x="555" y="350"/>
+  <use xlink:href="#glyph4-48" x="563" y="350"/>
+  <use xlink:href="#glyph4-55" x="571" y="350"/>
+  <use xlink:href="#glyph4-63" x="579" y="350"/>
+  <use xlink:href="#glyph4-23" x="587" y="350"/>
+  <use xlink:href="#glyph4-51" x="595" y="350"/>
+  <use xlink:href="#glyph4-44" x="603" y="350"/>
+  <use xlink:href="#glyph4-19" x="611" y="350"/>
+  <use xlink:href="#glyph4-57" x="619" y="350"/>
+  <use xlink:href="#glyph4-52" x="627" y="350"/>
+  <use xlink:href="#glyph4-25" x="635" y="350"/>
+  <use xlink:href="#glyph4-4" x="643" y="350"/>
+  <use xlink:href="#glyph4-41" x="651" y="350"/>
+  <use xlink:href="#glyph4-26" x="659" y="350"/>
+  <use xlink:href="#glyph4-13" x="667" y="350"/>
+  <use xlink:href="#glyph4-54" x="675" y="350"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-31" x="171" y="365"/>
+  <use xlink:href="#glyph4-33" x="179" y="365"/>
+  <use xlink:href="#glyph4-12" x="187" y="365"/>
+  <use xlink:href="#glyph4-5" x="195" y="365"/>
+  <use xlink:href="#glyph4-31" x="203" y="365"/>
+  <use xlink:href="#glyph4-26" x="211" y="365"/>
+  <use xlink:href="#glyph4-28" x="219" y="365"/>
+  <use xlink:href="#glyph4-5" x="227" y="365"/>
+  <use xlink:href="#glyph4-16" x="235" y="365"/>
+  <use xlink:href="#glyph4-39" x="243" y="365"/>
+  <use xlink:href="#glyph4-26" x="251" y="365"/>
+  <use xlink:href="#glyph4-41" x="259" y="365"/>
+  <use xlink:href="#glyph4-41" x="267" y="365"/>
+  <use xlink:href="#glyph4-32" x="275" y="365"/>
+  <use xlink:href="#glyph4-49" x="283" y="365"/>
+  <use xlink:href="#glyph4-45" x="291" y="365"/>
+  <use xlink:href="#glyph4-35" x="299" y="365"/>
+  <use xlink:href="#glyph4-28" x="307" y="365"/>
+  <use xlink:href="#glyph4-6" x="315" y="365"/>
+  <use xlink:href="#glyph4-28" x="323" y="365"/>
+  <use xlink:href="#glyph4-32" x="331" y="365"/>
+  <use xlink:href="#glyph4-52" x="339" y="365"/>
+  <use xlink:href="#glyph4-28" x="347" y="365"/>
+  <use xlink:href="#glyph4-4" x="355" y="365"/>
+  <use xlink:href="#glyph4-57" x="363" y="365"/>
+  <use xlink:href="#glyph4-22" x="371" y="365"/>
+  <use xlink:href="#glyph4-44" x="379" y="365"/>
+  <use xlink:href="#glyph4-55" x="387" y="365"/>
+  <use xlink:href="#glyph4-12" x="395" y="365"/>
+  <use xlink:href="#glyph4-56" x="403" y="365"/>
+  <use xlink:href="#glyph4-25" x="411" y="365"/>
+  <use xlink:href="#glyph4-59" x="419" y="365"/>
+  <use xlink:href="#glyph4-64" x="427" y="365"/>
+  <use xlink:href="#glyph4-16" x="435" y="365"/>
+  <use xlink:href="#glyph4-4" x="443" y="365"/>
+  <use xlink:href="#glyph4-65" x="451" y="365"/>
+  <use xlink:href="#glyph4-41" x="459" y="365"/>
+  <use xlink:href="#glyph4-53" x="467" y="365"/>
+  <use xlink:href="#glyph4-9" x="475" y="365"/>
+  <use xlink:href="#glyph4-62" x="483" y="365"/>
+  <use xlink:href="#glyph4-3" x="491" y="365"/>
+  <use xlink:href="#glyph4-47" x="499" y="365"/>
+  <use xlink:href="#glyph4-3" x="507" y="365"/>
+  <use xlink:href="#glyph4-50" x="515" y="365"/>
+  <use xlink:href="#glyph4-31" x="523" y="365"/>
+  <use xlink:href="#glyph4-4" x="531" y="365"/>
+  <use xlink:href="#glyph4-12" x="539" y="365"/>
+  <use xlink:href="#glyph4-23" x="547" y="365"/>
+  <use xlink:href="#glyph4-24" x="555" y="365"/>
+  <use xlink:href="#glyph4-25" x="563" y="365"/>
+  <use xlink:href="#glyph4-46" x="571" y="365"/>
+  <use xlink:href="#glyph4-6" x="579" y="365"/>
+  <use xlink:href="#glyph4-22" x="587" y="365"/>
+  <use xlink:href="#glyph4-33" x="595" y="365"/>
+  <use xlink:href="#glyph4-41" x="603" y="365"/>
+  <use xlink:href="#glyph4-19" x="611" y="365"/>
+  <use xlink:href="#glyph4-27" x="619" y="365"/>
+  <use xlink:href="#glyph4-58" x="627" y="365"/>
+  <use xlink:href="#glyph4-49" x="635" y="365"/>
+  <use xlink:href="#glyph4-10" x="643" y="365"/>
+  <use xlink:href="#glyph4-38" x="651" y="365"/>
+  <use xlink:href="#glyph4-9" x="659" y="365"/>
+  <use xlink:href="#glyph4-45" x="667" y="365"/>
+  <use xlink:href="#glyph4-35" x="675" y="365"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-52" x="171" y="380"/>
+  <use xlink:href="#glyph4-10" x="179" y="380"/>
+  <use xlink:href="#glyph4-55" x="187" y="380"/>
+  <use xlink:href="#glyph4-51" x="195" y="380"/>
+  <use xlink:href="#glyph4-22" x="203" y="380"/>
+  <use xlink:href="#glyph4-64" x="211" y="380"/>
+  <use xlink:href="#glyph4-45" x="219" y="380"/>
+  <use xlink:href="#glyph4-16" x="227" y="380"/>
+  <use xlink:href="#glyph4-40" x="235" y="380"/>
+  <use xlink:href="#glyph4-4" x="243" y="380"/>
+  <use xlink:href="#glyph4-9" x="251" y="380"/>
+  <use xlink:href="#glyph4-8" x="259" y="380"/>
+  <use xlink:href="#glyph4-46" x="267" y="380"/>
+  <use xlink:href="#glyph4-32" x="275" y="380"/>
+  <use xlink:href="#glyph4-54" x="283" y="380"/>
+  <use xlink:href="#glyph4-50" x="291" y="380"/>
+  <use xlink:href="#glyph4-56" x="299" y="380"/>
+  <use xlink:href="#glyph4-62" x="307" y="380"/>
+  <use xlink:href="#glyph4-21" x="315" y="380"/>
+  <use xlink:href="#glyph4-9" x="323" y="380"/>
+  <use xlink:href="#glyph4-51" x="331" y="380"/>
+  <use xlink:href="#glyph4-4" x="339" y="380"/>
+  <use xlink:href="#glyph4-16" x="347" y="380"/>
+  <use xlink:href="#glyph4-23" x="355" y="380"/>
+  <use xlink:href="#glyph4-36" x="363" y="380"/>
+  <use xlink:href="#glyph4-8" x="371" y="380"/>
+  <use xlink:href="#glyph4-2" x="379" y="380"/>
+  <use xlink:href="#glyph4-45" x="387" y="380"/>
+  <use xlink:href="#glyph4-22" x="395" y="380"/>
+  <use xlink:href="#glyph4-2" x="403" y="380"/>
+  <use xlink:href="#glyph4-57" x="411" y="380"/>
+  <use xlink:href="#glyph4-65" x="419" y="380"/>
+  <use xlink:href="#glyph4-63" x="427" y="380"/>
+  <use xlink:href="#glyph4-12" x="435" y="380"/>
+  <use xlink:href="#glyph4-43" x="443" y="380"/>
+  <use xlink:href="#glyph4-37" x="451" y="380"/>
+  <use xlink:href="#glyph4-65" x="459" y="380"/>
+  <use xlink:href="#glyph4-52" x="467" y="380"/>
+  <use xlink:href="#glyph4-3" x="475" y="380"/>
+  <use xlink:href="#glyph4-42" x="483" y="380"/>
+  <use xlink:href="#glyph4-45" x="491" y="380"/>
+  <use xlink:href="#glyph4-22" x="499" y="380"/>
+  <use xlink:href="#glyph4-8" x="507" y="380"/>
+  <use xlink:href="#glyph4-42" x="515" y="380"/>
+  <use xlink:href="#glyph4-18" x="523" y="380"/>
+  <use xlink:href="#glyph4-29" x="531" y="380"/>
+  <use xlink:href="#glyph4-31" x="539" y="380"/>
+  <use xlink:href="#glyph4-36" x="547" y="380"/>
+  <use xlink:href="#glyph4-18" x="555" y="380"/>
+  <use xlink:href="#glyph4-36" x="563" y="380"/>
+  <use xlink:href="#glyph4-27" x="571" y="380"/>
+  <use xlink:href="#glyph4-59" x="579" y="380"/>
+  <use xlink:href="#glyph4-43" x="587" y="380"/>
+  <use xlink:href="#glyph4-23" x="595" y="380"/>
+  <use xlink:href="#glyph4-25" x="603" y="380"/>
+  <use xlink:href="#glyph4-45" x="611" y="380"/>
+  <use xlink:href="#glyph4-47" x="619" y="380"/>
+  <use xlink:href="#glyph4-34" x="627" y="380"/>
+  <use xlink:href="#glyph4-22" x="635" y="380"/>
+  <use xlink:href="#glyph4-43" x="643" y="380"/>
+  <use xlink:href="#glyph4-55" x="651" y="380"/>
+  <use xlink:href="#glyph4-29" x="659" y="380"/>
+  <use xlink:href="#glyph4-27" x="667" y="380"/>
+  <use xlink:href="#glyph4-14" x="675" y="380"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-33" x="171" y="395"/>
+  <use xlink:href="#glyph4-52" x="179" y="395"/>
+  <use xlink:href="#glyph4-54" x="187" y="395"/>
+  <use xlink:href="#glyph4-44" x="195" y="395"/>
+  <use xlink:href="#glyph4-4" x="203" y="395"/>
+  <use xlink:href="#glyph4-11" x="211" y="395"/>
+  <use xlink:href="#glyph4-25" x="219" y="395"/>
+  <use xlink:href="#glyph4-13" x="227" y="395"/>
+  <use xlink:href="#glyph4-34" x="235" y="395"/>
+  <use xlink:href="#glyph4-37" x="243" y="395"/>
+  <use xlink:href="#glyph4-50" x="251" y="395"/>
+  <use xlink:href="#glyph4-4" x="259" y="395"/>
+  <use xlink:href="#glyph4-28" x="267" y="395"/>
+  <use xlink:href="#glyph4-33" x="275" y="395"/>
+  <use xlink:href="#glyph4-52" x="283" y="395"/>
+  <use xlink:href="#glyph4-17" x="291" y="395"/>
+  <use xlink:href="#glyph4-57" x="299" y="395"/>
+  <use xlink:href="#glyph4-36" x="307" y="395"/>
+  <use xlink:href="#glyph4-64" x="315" y="395"/>
+  <use xlink:href="#glyph4-46" x="323" y="395"/>
+  <use xlink:href="#glyph4-60" x="331" y="395"/>
+  <use xlink:href="#glyph4-36" x="339" y="395"/>
+  <use xlink:href="#glyph4-39" x="347" y="395"/>
+  <use xlink:href="#glyph4-58" x="355" y="395"/>
+  <use xlink:href="#glyph4-13" x="363" y="395"/>
+  <use xlink:href="#glyph4-17" x="371" y="395"/>
+  <use xlink:href="#glyph4-62" x="379" y="395"/>
+  <use xlink:href="#glyph4-25" x="387" y="395"/>
+  <use xlink:href="#glyph4-36" x="395" y="395"/>
+  <use xlink:href="#glyph4-27" x="403" y="395"/>
+  <use xlink:href="#glyph4-12" x="411" y="395"/>
+  <use xlink:href="#glyph4-32" x="419" y="395"/>
+  <use xlink:href="#glyph4-34" x="427" y="395"/>
+  <use xlink:href="#glyph4-58" x="435" y="395"/>
+  <use xlink:href="#glyph4-13" x="443" y="395"/>
+  <use xlink:href="#glyph4-32" x="451" y="395"/>
+  <use xlink:href="#glyph4-20" x="459" y="395"/>
+  <use xlink:href="#glyph4-31" x="467" y="395"/>
+  <use xlink:href="#glyph4-36" x="475" y="395"/>
+  <use xlink:href="#glyph4-37" x="483" y="395"/>
+  <use xlink:href="#glyph4-50" x="491" y="395"/>
+  <use xlink:href="#glyph4-8" x="499" y="395"/>
+  <use xlink:href="#glyph4-32" x="507" y="395"/>
+  <use xlink:href="#glyph4-6" x="515" y="395"/>
+  <use xlink:href="#glyph4-8" x="523" y="395"/>
+  <use xlink:href="#glyph4-4" x="531" y="395"/>
+  <use xlink:href="#glyph4-35" x="539" y="395"/>
+  <use xlink:href="#glyph4-28" x="547" y="395"/>
+  <use xlink:href="#glyph4-20" x="555" y="395"/>
+  <use xlink:href="#glyph4-18" x="563" y="395"/>
+  <use xlink:href="#glyph4-38" x="571" y="395"/>
+  <use xlink:href="#glyph4-50" x="579" y="395"/>
+  <use xlink:href="#glyph4-12" x="587" y="395"/>
+  <use xlink:href="#glyph4-2" x="595" y="395"/>
+  <use xlink:href="#glyph4-40" x="603" y="395"/>
+  <use xlink:href="#glyph4-49" x="611" y="395"/>
+  <use xlink:href="#glyph4-43" x="619" y="395"/>
+  <use xlink:href="#glyph4-51" x="627" y="395"/>
+  <use xlink:href="#glyph4-24" x="635" y="395"/>
+  <use xlink:href="#glyph4-16" x="643" y="395"/>
+  <use xlink:href="#glyph4-44" x="651" y="395"/>
+  <use xlink:href="#glyph4-8" x="659" y="395"/>
+  <use xlink:href="#glyph4-2" x="667" y="395"/>
+  <use xlink:href="#glyph4-28" x="675" y="395"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-56" x="171" y="410"/>
+  <use xlink:href="#glyph4-16" x="179" y="410"/>
+  <use xlink:href="#glyph4-9" x="187" y="410"/>
+  <use xlink:href="#glyph4-2" x="195" y="410"/>
+  <use xlink:href="#glyph4-31" x="203" y="410"/>
+  <use xlink:href="#glyph4-14" x="211" y="410"/>
+  <use xlink:href="#glyph4-38" x="219" y="410"/>
+  <use xlink:href="#glyph4-54" x="227" y="410"/>
+  <use xlink:href="#glyph4-66" x="235" y="410"/>
+  <use xlink:href="#glyph4-40" x="243" y="410"/>
+  <use xlink:href="#glyph4-20" x="251" y="410"/>
+  <use xlink:href="#glyph4-45" x="259" y="410"/>
+  <use xlink:href="#glyph4-60" x="267" y="410"/>
+  <use xlink:href="#glyph4-65" x="275" y="410"/>
+  <use xlink:href="#glyph4-17" x="283" y="410"/>
+  <use xlink:href="#glyph4-45" x="291" y="410"/>
+  <use xlink:href="#glyph4-19" x="299" y="410"/>
+  <use xlink:href="#glyph4-49" x="307" y="410"/>
+  <use xlink:href="#glyph4-49" x="315" y="410"/>
+  <use xlink:href="#glyph4-44" x="323" y="410"/>
+  <use xlink:href="#glyph4-43" x="331" y="410"/>
+  <use xlink:href="#glyph4-16" x="339" y="410"/>
+  <use xlink:href="#glyph4-19" x="347" y="410"/>
+  <use xlink:href="#glyph4-27" x="355" y="410"/>
+  <use xlink:href="#glyph4-65" x="363" y="410"/>
+  <use xlink:href="#glyph4-64" x="371" y="410"/>
+  <use xlink:href="#glyph4-8" x="379" y="410"/>
+  <use xlink:href="#glyph4-50" x="387" y="410"/>
+  <use xlink:href="#glyph4-60" x="395" y="410"/>
+  <use xlink:href="#glyph4-48" x="403" y="410"/>
+  <use xlink:href="#glyph4-24" x="411" y="410"/>
+  <use xlink:href="#glyph4-29" x="419" y="410"/>
+  <use xlink:href="#glyph4-64" x="427" y="410"/>
+  <use xlink:href="#glyph4-3" x="435" y="410"/>
+  <use xlink:href="#glyph4-20" x="443" y="410"/>
+  <use xlink:href="#glyph4-66" x="451" y="410"/>
+  <use xlink:href="#glyph4-18" x="459" y="410"/>
+  <use xlink:href="#glyph4-31" x="467" y="410"/>
+  <use xlink:href="#glyph4-18" x="475" y="410"/>
+  <use xlink:href="#glyph4-55" x="483" y="410"/>
+  <use xlink:href="#glyph4-40" x="491" y="410"/>
+  <use xlink:href="#glyph4-10" x="499" y="410"/>
+  <use xlink:href="#glyph4-32" x="507" y="410"/>
+  <use xlink:href="#glyph4-36" x="515" y="410"/>
+  <use xlink:href="#glyph4-66" x="523" y="410"/>
+  <use xlink:href="#glyph4-56" x="531" y="410"/>
+  <use xlink:href="#glyph4-16" x="539" y="410"/>
+  <use xlink:href="#glyph4-38" x="547" y="410"/>
+  <use xlink:href="#glyph4-32" x="555" y="410"/>
+  <use xlink:href="#glyph4-38" x="563" y="410"/>
+  <use xlink:href="#glyph4-2" x="571" y="410"/>
+  <use xlink:href="#glyph4-47" x="579" y="410"/>
+  <use xlink:href="#glyph4-8" x="587" y="410"/>
+  <use xlink:href="#glyph4-48" x="595" y="410"/>
+  <use xlink:href="#glyph4-57" x="603" y="410"/>
+  <use xlink:href="#glyph4-64" x="611" y="410"/>
+  <use xlink:href="#glyph4-13" x="619" y="410"/>
+  <use xlink:href="#glyph4-28" x="627" y="410"/>
+  <use xlink:href="#glyph4-57" x="635" y="410"/>
+  <use xlink:href="#glyph4-36" x="643" y="410"/>
+  <use xlink:href="#glyph4-11" x="651" y="410"/>
+  <use xlink:href="#glyph4-51" x="659" y="410"/>
+  <use xlink:href="#glyph4-50" x="667" y="410"/>
+  <use xlink:href="#glyph4-33" x="675" y="410"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-59" x="171" y="425"/>
+  <use xlink:href="#glyph4-47" x="179" y="425"/>
+  <use xlink:href="#glyph4-11" x="187" y="425"/>
+  <use xlink:href="#glyph4-53" x="195" y="425"/>
+  <use xlink:href="#glyph4-58" x="203" y="425"/>
+  <use xlink:href="#glyph4-29" x="211" y="425"/>
+  <use xlink:href="#glyph4-28" x="219" y="425"/>
+  <use xlink:href="#glyph4-11" x="227" y="425"/>
+  <use xlink:href="#glyph4-65" x="235" y="425"/>
+  <use xlink:href="#glyph4-59" x="243" y="425"/>
+  <use xlink:href="#glyph4-65" x="251" y="425"/>
+  <use xlink:href="#glyph4-58" x="259" y="425"/>
+  <use xlink:href="#glyph4-42" x="267" y="425"/>
+  <use xlink:href="#glyph4-40" x="275" y="425"/>
+  <use xlink:href="#glyph4-38" x="283" y="425"/>
+  <use xlink:href="#glyph4-14" x="291" y="425"/>
+  <use xlink:href="#glyph4-11" x="299" y="425"/>
+  <use xlink:href="#glyph4-53" x="307" y="425"/>
+  <use xlink:href="#glyph4-54" x="315" y="425"/>
+  <use xlink:href="#glyph4-9" x="323" y="425"/>
+  <use xlink:href="#glyph4-61" x="331" y="425"/>
+  <use xlink:href="#glyph4-3" x="339" y="425"/>
+  <use xlink:href="#glyph4-64" x="347" y="425"/>
+  <use xlink:href="#glyph4-66" x="355" y="425"/>
+  <use xlink:href="#glyph4-13" x="363" y="425"/>
+  <use xlink:href="#glyph4-29" x="371" y="425"/>
+  <use xlink:href="#glyph4-66" x="379" y="425"/>
+  <use xlink:href="#glyph4-53" x="387" y="425"/>
+  <use xlink:href="#glyph4-44" x="395" y="425"/>
+  <use xlink:href="#glyph4-42" x="403" y="425"/>
+  <use xlink:href="#glyph4-62" x="411" y="425"/>
+  <use xlink:href="#glyph4-15" x="419" y="425"/>
+  <use xlink:href="#glyph4-52" x="427" y="425"/>
+  <use xlink:href="#glyph4-10" x="435" y="425"/>
+  <use xlink:href="#glyph4-13" x="443" y="425"/>
+  <use xlink:href="#glyph4-3" x="451" y="425"/>
+  <use xlink:href="#glyph4-13" x="459" y="425"/>
+  <use xlink:href="#glyph4-2" x="467" y="425"/>
+  <use xlink:href="#glyph4-3" x="475" y="425"/>
+  <use xlink:href="#glyph4-34" x="483" y="425"/>
+  <use xlink:href="#glyph4-17" x="491" y="425"/>
+  <use xlink:href="#glyph4-41" x="499" y="425"/>
+  <use xlink:href="#glyph4-25" x="507" y="425"/>
+  <use xlink:href="#glyph4-44" x="515" y="425"/>
+  <use xlink:href="#glyph4-57" x="523" y="425"/>
+  <use xlink:href="#glyph4-35" x="531" y="425"/>
+  <use xlink:href="#glyph4-17" x="539" y="425"/>
+  <use xlink:href="#glyph4-48" x="547" y="425"/>
+  <use xlink:href="#glyph4-22" x="555" y="425"/>
+  <use xlink:href="#glyph4-22" x="563" y="425"/>
+  <use xlink:href="#glyph4-35" x="571" y="425"/>
+  <use xlink:href="#glyph4-42" x="579" y="425"/>
+  <use xlink:href="#glyph4-21" x="587" y="425"/>
+  <use xlink:href="#glyph4-60" x="595" y="425"/>
+  <use xlink:href="#glyph4-18" x="603" y="425"/>
+  <use xlink:href="#glyph4-25" x="611" y="425"/>
+  <use xlink:href="#glyph4-18" x="619" y="425"/>
+  <use xlink:href="#glyph4-63" x="627" y="425"/>
+  <use xlink:href="#glyph4-52" x="635" y="425"/>
+  <use xlink:href="#glyph4-8" x="643" y="425"/>
+  <use xlink:href="#glyph4-23" x="651" y="425"/>
+  <use xlink:href="#glyph4-23" x="659" y="425"/>
+  <use xlink:href="#glyph4-23" x="667" y="425"/>
+  <use xlink:href="#glyph4-23" x="675" y="425"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-23" x="171" y="440"/>
+  <use xlink:href="#glyph4-23" x="179" y="440"/>
+  <use xlink:href="#glyph4-33" x="187" y="440"/>
+  <use xlink:href="#glyph4-2" x="195" y="440"/>
+  <use xlink:href="#glyph4-3" x="203" y="440"/>
+  <use xlink:href="#glyph4-38" x="211" y="440"/>
+  <use xlink:href="#glyph4-10" x="219" y="440"/>
+  <use xlink:href="#glyph4-32" x="227" y="440"/>
+  <use xlink:href="#glyph4-35" x="235" y="440"/>
+  <use xlink:href="#glyph4-16" x="243" y="440"/>
+  <use xlink:href="#glyph4-62" x="251" y="440"/>
+  <use xlink:href="#glyph4-33" x="259" y="440"/>
+  <use xlink:href="#glyph4-32" x="267" y="440"/>
+  <use xlink:href="#glyph4-27" x="275" y="440"/>
+  <use xlink:href="#glyph4-28" x="283" y="440"/>
+  <use xlink:href="#glyph4-49" x="291" y="440"/>
+  <use xlink:href="#glyph4-62" x="299" y="440"/>
+  <use xlink:href="#glyph4-62" x="307" y="440"/>
+  <use xlink:href="#glyph4-24" x="315" y="440"/>
+  <use xlink:href="#glyph4-55" x="323" y="440"/>
+  <use xlink:href="#glyph4-36" x="331" y="440"/>
+  <use xlink:href="#glyph4-52" x="339" y="440"/>
+  <use xlink:href="#glyph4-15" x="347" y="440"/>
+  <use xlink:href="#glyph4-51" x="355" y="440"/>
+  <use xlink:href="#glyph4-63" x="363" y="440"/>
+  <use xlink:href="#glyph4-47" x="371" y="440"/>
+  <use xlink:href="#glyph4-6" x="379" y="440"/>
+  <use xlink:href="#glyph4-13" x="387" y="440"/>
+  <use xlink:href="#glyph4-11" x="395" y="440"/>
+  <use xlink:href="#glyph4-16" x="403" y="440"/>
+  <use xlink:href="#glyph4-52" x="411" y="440"/>
+  <use xlink:href="#glyph4-48" x="419" y="440"/>
+  <use xlink:href="#glyph4-17" x="427" y="440"/>
+  <use xlink:href="#glyph4-20" x="435" y="440"/>
+  <use xlink:href="#glyph4-55" x="443" y="440"/>
+  <use xlink:href="#glyph4-50" x="451" y="440"/>
+  <use xlink:href="#glyph4-62" x="459" y="440"/>
+  <use xlink:href="#glyph4-60" x="467" y="440"/>
+  <use xlink:href="#glyph4-39" x="475" y="440"/>
+  <use xlink:href="#glyph4-22" x="483" y="440"/>
+  <use xlink:href="#glyph4-16" x="491" y="440"/>
+  <use xlink:href="#glyph4-18" x="499" y="440"/>
+  <use xlink:href="#glyph4-2" x="507" y="440"/>
+  <use xlink:href="#glyph4-4" x="515" y="440"/>
+  <use xlink:href="#glyph4-53" x="523" y="440"/>
+  <use xlink:href="#glyph4-49" x="531" y="440"/>
+  <use xlink:href="#glyph4-25" x="539" y="440"/>
+  <use xlink:href="#glyph4-64" x="547" y="440"/>
+  <use xlink:href="#glyph4-47" x="555" y="440"/>
+  <use xlink:href="#glyph4-54" x="563" y="440"/>
+  <use xlink:href="#glyph4-24" x="571" y="440"/>
+  <use xlink:href="#glyph4-31" x="579" y="440"/>
+  <use xlink:href="#glyph4-9" x="587" y="440"/>
+  <use xlink:href="#glyph4-23" x="595" y="440"/>
+  <use xlink:href="#glyph4-64" x="603" y="440"/>
+  <use xlink:href="#glyph4-65" x="611" y="440"/>
+  <use xlink:href="#glyph4-48" x="619" y="440"/>
+  <use xlink:href="#glyph4-15" x="627" y="440"/>
+  <use xlink:href="#glyph4-18" x="635" y="440"/>
+  <use xlink:href="#glyph4-3" x="643" y="440"/>
+  <use xlink:href="#glyph4-34" x="651" y="440"/>
+  <use xlink:href="#glyph4-9" x="659" y="440"/>
+  <use xlink:href="#glyph4-63" x="667" y="440"/>
+  <use xlink:href="#glyph4-47" x="675" y="440"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-13" x="171" y="455"/>
+  <use xlink:href="#glyph4-28" x="179" y="455"/>
+  <use xlink:href="#glyph4-66" x="187" y="455"/>
+  <use xlink:href="#glyph4-13" x="195" y="455"/>
+  <use xlink:href="#glyph4-40" x="203" y="455"/>
+  <use xlink:href="#glyph4-9" x="211" y="455"/>
+  <use xlink:href="#glyph4-30" x="219" y="455"/>
+  <use xlink:href="#glyph4-36" x="227" y="455"/>
+  <use xlink:href="#glyph4-62" x="235" y="455"/>
+  <use xlink:href="#glyph4-4" x="243" y="455"/>
+  <use xlink:href="#glyph4-28" x="251" y="455"/>
+  <use xlink:href="#glyph4-29" x="259" y="455"/>
+  <use xlink:href="#glyph4-48" x="267" y="455"/>
+  <use xlink:href="#glyph4-21" x="275" y="455"/>
+  <use xlink:href="#glyph4-66" x="283" y="455"/>
+  <use xlink:href="#glyph4-2" x="291" y="455"/>
+  <use xlink:href="#glyph4-20" x="299" y="455"/>
+  <use xlink:href="#glyph4-49" x="307" y="455"/>
+  <use xlink:href="#glyph4-39" x="315" y="455"/>
+  <use xlink:href="#glyph4-29" x="323" y="455"/>
+  <use xlink:href="#glyph4-43" x="331" y="455"/>
+  <use xlink:href="#glyph4-38" x="339" y="455"/>
+  <use xlink:href="#glyph4-49" x="347" y="455"/>
+  <use xlink:href="#glyph4-47" x="355" y="455"/>
+  <use xlink:href="#glyph4-40" x="363" y="455"/>
+  <use xlink:href="#glyph4-19" x="371" y="455"/>
+  <use xlink:href="#glyph4-65" x="379" y="455"/>
+  <use xlink:href="#glyph4-44" x="387" y="455"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="171" y="470"/>
+  <use xlink:href="#glyph4-1" x="179" y="470"/>
+  <use xlink:href="#glyph4-1" x="187" y="470"/>
+  <use xlink:href="#glyph4-1" x="195" y="470"/>
+  <use xlink:href="#glyph4-1" x="203" y="470"/>
+  <use xlink:href="#glyph4-3" x="211" y="470"/>
+  <use xlink:href="#glyph4-6" x="219" y="470"/>
+  <use xlink:href="#glyph4-10" x="227" y="470"/>
+  <use xlink:href="#glyph4-7" x="235" y="470"/>
+  <use xlink:href="#glyph4-8" x="243" y="470"/>
+  <use xlink:href="#glyph4-9" x="251" y="470"/>
+  <use xlink:href="#glyph4-6" x="259" y="470"/>
+  <use xlink:href="#glyph4-10" x="267" y="470"/>
+  <use xlink:href="#glyph4-7" x="275" y="470"/>
+  <use xlink:href="#glyph4-11" x="283" y="470"/>
+  <use xlink:href="#glyph4-3" x="291" y="470"/>
+  <use xlink:href="#glyph4-12" x="299" y="470"/>
+  <use xlink:href="#glyph4-7" x="307" y="470"/>
+  <use xlink:href="#glyph4-3" x="315" y="470"/>
+  <use xlink:href="#glyph4-13" x="323" y="470"/>
+  <use xlink:href="#glyph4-14" x="331" y="470"/>
+  <use xlink:href="#glyph4-15" x="339" y="470"/>
+  <use xlink:href="#glyph4-16" x="347" y="470"/>
+  <use xlink:href="#glyph4-6" x="355" y="470"/>
+  <use xlink:href="#glyph4-4" x="363" y="470"/>
+  <use xlink:href="#glyph4-3" x="371" y="470"/>
+  <use xlink:href="#glyph4-1" x="379" y="470"/>
+  <use xlink:href="#glyph4-1" x="387" y="470"/>
+  <use xlink:href="#glyph4-1" x="395" y="470"/>
+  <use xlink:href="#glyph4-1" x="403" y="470"/>
+  <use xlink:href="#glyph4-1" x="411" y="470"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 108 L 982 108 L 982 150 L 170 150 Z M 170 108 L 982 108 L 982 150 L 170 150 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="170" y="124"/>
+  <use xlink:href="#glyph1-14" x="179" y="124"/>
+  <use xlink:href="#glyph1-23" x="183" y="124"/>
+  <use xlink:href="#glyph1-20" x="191" y="124"/>
+  <use xlink:href="#glyph1-16" x="198" y="124"/>
+  <use xlink:href="#glyph1-8" x="206" y="124"/>
+  <use xlink:href="#glyph1-5" x="214" y="124"/>
+  <use xlink:href="#glyph1-23" x="221" y="124"/>
+  <use xlink:href="#glyph1-20" x="229" y="124"/>
+  <use xlink:href="#glyph1-27" x="236" y="124"/>
+  <use xlink:href="#glyph1-6" x="243" y="124"/>
+  <use xlink:href="#glyph1-14" x="251" y="124"/>
+  <use xlink:href="#glyph1-25" x="255" y="124"/>
+  <use xlink:href="#glyph1-5" x="258" y="124"/>
+  <use xlink:href="#glyph1-14" x="265" y="124"/>
+  <use xlink:href="#glyph1-30" x="269" y="124"/>
+  <use xlink:href="#glyph1-2" x="275" y="124"/>
+  <use xlink:href="#glyph1-10" x="284" y="124"/>
+  <use xlink:href="#glyph1-14" x="289" y="124"/>
+  <use xlink:href="#glyph1-20" x="293" y="124"/>
+  <use xlink:href="#glyph1-14" x="300" y="124"/>
+  <use xlink:href="#glyph1-5" x="304" y="124"/>
+  <use xlink:href="#glyph1-25" x="311" y="124"/>
+  <use xlink:href="#glyph1-16" x="314" y="124"/>
+  <use xlink:href="#glyph1-24" x="322" y="124"/>
+  <use xlink:href="#glyph1-21" x="330" y="124"/>
+  <use xlink:href="#glyph1-6" x="334" y="124"/>
+  <use xlink:href="#glyph1-14" x="342" y="124"/>
+  <use xlink:href="#glyph1-4" x="346" y="124"/>
+  <use xlink:href="#glyph1-6" x="354" y="124"/>
+  <use xlink:href="#glyph1-10" x="362" y="124"/>
+  <use xlink:href="#glyph1-5" x="367" y="124"/>
+  <use xlink:href="#glyph1-2" x="374" y="124"/>
+  <use xlink:href="#glyph1-16" x="383" y="124"/>
+  <use xlink:href="#glyph1-28" x="391" y="124"/>
+  <use xlink:href="#glyph1-14" x="394" y="124"/>
+  <use xlink:href="#glyph1-32" x="398" y="124"/>
+  <use xlink:href="#glyph1-2" x="408" y="124"/>
+  <use xlink:href="#glyph1-16" x="417" y="124"/>
+  <use xlink:href="#glyph1-17" x="425" y="124"/>
+  <use xlink:href="#glyph1-18" x="428" y="124"/>
+  <use xlink:href="#glyph1-14" x="434" y="124"/>
+  <use xlink:href="#glyph1-24" x="438" y="124"/>
+  <use xlink:href="#glyph1-25" x="446" y="124"/>
+  <use xlink:href="#glyph1-33" x="449" y="124"/>
+  <use xlink:href="#glyph1-6" x="456" y="124"/>
+  <use xlink:href="#glyph1-14" x="464" y="124"/>
+  <use xlink:href="#glyph1-25" x="468" y="124"/>
+  <use xlink:href="#glyph1-18" x="471" y="124"/>
+  <use xlink:href="#glyph1-14" x="477" y="124"/>
+  <use xlink:href="#glyph1-18" x="481" y="124"/>
+  <use xlink:href="#glyph1-2" x="487" y="124"/>
+  <use xlink:href="#glyph1-14" x="496" y="124"/>
+  <use xlink:href="#glyph1-20" x="500" y="124"/>
+  <use xlink:href="#glyph1-16" x="507" y="124"/>
+  <use xlink:href="#glyph1-26" x="515" y="124"/>
+  <use xlink:href="#glyph1-2" x="522" y="124"/>
+  <use xlink:href="#glyph1-16" x="531" y="124"/>
+  <use xlink:href="#glyph1-6" x="539" y="124"/>
+  <use xlink:href="#glyph1-14" x="547" y="124"/>
+  <use xlink:href="#glyph1-6" x="551" y="124"/>
+  <use xlink:href="#glyph1-21" x="559" y="124"/>
+  <use xlink:href="#glyph1-5" x="563" y="124"/>
+  <use xlink:href="#glyph1-6" x="570" y="124"/>
+  <use xlink:href="#glyph1-14" x="578" y="124"/>
+  <use xlink:href="#glyph1-20" x="582" y="124"/>
+  <use xlink:href="#glyph1-16" x="589" y="124"/>
+  <use xlink:href="#glyph1-8" x="597" y="124"/>
+  <use xlink:href="#glyph1-14" x="605" y="124"/>
+  <use xlink:href="#glyph1-6" x="609" y="124"/>
+  <use xlink:href="#glyph1-16" x="617" y="124"/>
+  <use xlink:href="#glyph1-5" x="625" y="124"/>
+  <use xlink:href="#glyph1-13" x="632" y="124"/>
+  <use xlink:href="#glyph1-10" x="640" y="124"/>
+  <use xlink:href="#glyph1-6" x="645" y="124"/>
+  <use xlink:href="#glyph1-14" x="653" y="124"/>
+  <use xlink:href="#glyph1-18" x="657" y="124"/>
+  <use xlink:href="#glyph1-23" x="663" y="124"/>
+  <use xlink:href="#glyph1-20" x="671" y="124"/>
+  <use xlink:href="#glyph1-18" x="678" y="124"/>
+  <use xlink:href="#glyph1-14" x="684" y="124"/>
+  <use xlink:href="#glyph1-25" x="688" y="124"/>
+  <use xlink:href="#glyph1-18" x="691" y="124"/>
+  <use xlink:href="#glyph1-14" x="697" y="124"/>
+  <use xlink:href="#glyph1-11" x="701" y="124"/>
+  <use xlink:href="#glyph1-20" x="708" y="124"/>
+  <use xlink:href="#glyph1-3" x="715" y="124"/>
+  <use xlink:href="#glyph1-6" x="726" y="124"/>
+  <use xlink:href="#glyph1-14" x="734" y="124"/>
+  <use xlink:href="#glyph1-30" x="738" y="124"/>
+  <use xlink:href="#glyph1-10" x="744" y="124"/>
+  <use xlink:href="#glyph1-2" x="749" y="124"/>
+  <use xlink:href="#glyph1-3" x="758" y="124"/>
+  <use xlink:href="#glyph1-14" x="769" y="124"/>
+  <use xlink:href="#glyph1-18" x="773" y="124"/>
+  <use xlink:href="#glyph1-23" x="779" y="124"/>
+  <use xlink:href="#glyph1-6" x="787" y="124"/>
+  <use xlink:href="#glyph1-14" x="795" y="124"/>
+  <use xlink:href="#glyph1-4" x="799" y="124"/>
+  <use xlink:href="#glyph1-6" x="807" y="124"/>
+  <use xlink:href="#glyph1-10" x="815" y="124"/>
+  <use xlink:href="#glyph1-5" x="820" y="124"/>
+  <use xlink:href="#glyph1-2" x="827" y="124"/>
+  <use xlink:href="#glyph1-16" x="836" y="124"/>
+  <use xlink:href="#glyph1-14" x="844" y="124"/>
+  <use xlink:href="#glyph1-26" x="848" y="124"/>
+  <use xlink:href="#glyph1-2" x="855" y="124"/>
+  <use xlink:href="#glyph1-13" x="864" y="124"/>
+  <use xlink:href="#glyph1-14" x="872" y="124"/>
+  <use xlink:href="#glyph1-25" x="876" y="124"/>
+  <use xlink:href="#glyph1-16" x="879" y="124"/>
+  <use xlink:href="#glyph1-18" x="887" y="124"/>
+  <use xlink:href="#glyph1-6" x="893" y="124"/>
+  <use xlink:href="#glyph1-16" x="901" y="124"/>
+  <use xlink:href="#glyph1-8" x="909" y="124"/>
+  <use xlink:href="#glyph1-6" x="917" y="124"/>
+  <use xlink:href="#glyph1-8" x="925" y="124"/>
+  <use xlink:href="#glyph1-34" x="933" y="124"/>
+  <use xlink:href="#glyph1-14" x="938" y="124"/>
+  <use xlink:href="#glyph1-35" x="942" y="124"/>
+  <use xlink:href="#glyph1-2" x="949" y="124"/>
+  <use xlink:href="#glyph1-10" x="958" y="124"/>
+  <use xlink:href="#glyph1-14" x="963" y="124"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-6" x="170" y="145"/>
+  <use xlink:href="#glyph1-22" x="178" y="145"/>
+  <use xlink:href="#glyph1-20" x="186" y="145"/>
+  <use xlink:href="#glyph1-3" x="193" y="145"/>
+  <use xlink:href="#glyph1-4" x="204" y="145"/>
+  <use xlink:href="#glyph1-21" x="212" y="145"/>
+  <use xlink:href="#glyph1-6" x="216" y="145"/>
+  <use xlink:href="#glyph1-36" x="224" y="145"/>
+  <use xlink:href="#glyph1-14" x="228" y="145"/>
+  <use xlink:href="#glyph1-26" x="232" y="145"/>
+  <use xlink:href="#glyph1-2" x="239" y="145"/>
+  <use xlink:href="#glyph1-13" x="248" y="145"/>
+  <use xlink:href="#glyph1-14" x="256" y="145"/>
+  <use xlink:href="#glyph1-11" x="260" y="145"/>
+  <use xlink:href="#glyph1-2" x="267" y="145"/>
+  <use xlink:href="#glyph1-13" x="276" y="145"/>
+  <use xlink:href="#glyph1-21" x="284" y="145"/>
+  <use xlink:href="#glyph1-8" x="288" y="145"/>
+  <use xlink:href="#glyph1-14" x="296" y="145"/>
+  <use xlink:href="#glyph1-5" x="300" y="145"/>
+  <use xlink:href="#glyph1-6" x="307" y="145"/>
+  <use xlink:href="#glyph1-16" x="315" y="145"/>
+  <use xlink:href="#glyph1-8" x="323" y="145"/>
+  <use xlink:href="#glyph1-14" x="331" y="145"/>
+  <use xlink:href="#glyph1-25" x="335" y="145"/>
+  <use xlink:href="#glyph1-18" x="338" y="145"/>
+  <use xlink:href="#glyph1-14" x="344" y="145"/>
+  <use xlink:href="#glyph1-25" x="348" y="145"/>
+  <use xlink:href="#glyph1-16" x="351" y="145"/>
+  <use xlink:href="#glyph1-14" x="359" y="145"/>
+  <use xlink:href="#glyph1-20" x="363" y="145"/>
+  <use xlink:href="#glyph1-14" x="370" y="145"/>
+  <use xlink:href="#glyph1-9" x="374" y="145"/>
+  <use xlink:href="#glyph1-37" x="383" y="145"/>
+  <use xlink:href="#glyph1-9" x="394" y="145"/>
+  <use xlink:href="#glyph1-14" x="403" y="145"/>
+  <use xlink:href="#glyph1-5" x="407" y="145"/>
+  <use xlink:href="#glyph1-25" x="414" y="145"/>
+  <use xlink:href="#glyph1-24" x="417" y="145"/>
+  <use xlink:href="#glyph1-16" x="425" y="145"/>
+  <use xlink:href="#glyph1-6" x="433" y="145"/>
+  <use xlink:href="#glyph1-8" x="441" y="145"/>
+  <use xlink:href="#glyph1-14" x="449" y="145"/>
+  <use xlink:href="#glyph1-20" x="453" y="145"/>
+  <use xlink:href="#glyph1-16" x="460" y="145"/>
+  <use xlink:href="#glyph1-8" x="468" y="145"/>
+  <use xlink:href="#glyph1-14" x="476" y="145"/>
+  <use xlink:href="#glyph1-6" x="480" y="145"/>
+  <use xlink:href="#glyph1-16" x="488" y="145"/>
+  <use xlink:href="#glyph1-11" x="496" y="145"/>
+  <use xlink:href="#glyph1-10" x="503" y="145"/>
+  <use xlink:href="#glyph1-26" x="508" y="145"/>
+  <use xlink:href="#glyph1-4" x="515" y="145"/>
+  <use xlink:href="#glyph1-18" x="523" y="145"/>
+  <use xlink:href="#glyph1-6" x="529" y="145"/>
+  <use xlink:href="#glyph1-8" x="537" y="145"/>
+  <use xlink:href="#glyph1-14" x="545" y="145"/>
+  <use xlink:href="#glyph1-6" x="549" y="145"/>
+  <use xlink:href="#glyph1-3" x="557" y="145"/>
+  <use xlink:href="#glyph1-20" x="568" y="145"/>
+  <use xlink:href="#glyph1-25" x="575" y="145"/>
+  <use xlink:href="#glyph1-21" x="578" y="145"/>
+  <use xlink:href="#glyph1-36" x="582" y="145"/>
+  <use xlink:href="#glyph1-14" x="586" y="145"/>
+  <use xlink:href="#glyph1-2" x="590" y="145"/>
+  <use xlink:href="#glyph1-10" x="599" y="145"/>
+  <use xlink:href="#glyph1-14" x="604" y="145"/>
+  <use xlink:href="#glyph1-6" x="608" y="145"/>
+  <use xlink:href="#glyph1-22" x="616" y="145"/>
+  <use xlink:href="#glyph1-11" x="624" y="145"/>
+  <use xlink:href="#glyph1-23" x="631" y="145"/>
+  <use xlink:href="#glyph1-20" x="639" y="145"/>
+  <use xlink:href="#glyph1-16" x="646" y="145"/>
+  <use xlink:href="#glyph1-24" x="654" y="145"/>
+  <use xlink:href="#glyph1-6" x="662" y="145"/>
+  <use xlink:href="#glyph1-14" x="670" y="145"/>
+  <use xlink:href="#glyph1-25" x="674" y="145"/>
+  <use xlink:href="#glyph1-18" x="677" y="145"/>
+  <use xlink:href="#glyph1-14" x="683" y="145"/>
+  <use xlink:href="#glyph1-2" x="687" y="145"/>
+  <use xlink:href="#glyph1-33" x="696" y="145"/>
+  <use xlink:href="#glyph1-6" x="703" y="145"/>
+  <use xlink:href="#glyph1-10" x="711" y="145"/>
+  <use xlink:href="#glyph1-14" x="716" y="145"/>
+  <use xlink:href="#glyph1-20" x="720" y="145"/>
+  <use xlink:href="#glyph1-16" x="727" y="145"/>
+  <use xlink:href="#glyph1-14" x="735" y="145"/>
+  <use xlink:href="#glyph1-38" x="739" y="145"/>
+  <use xlink:href="#glyph1-39" x="750" y="145"/>
+  <use xlink:href="#glyph1-40" x="760" y="145"/>
+  <use xlink:href="#glyph1-14" x="769" y="145"/>
+  <use xlink:href="#glyph1-11" x="773" y="145"/>
+  <use xlink:href="#glyph1-23" x="780" y="145"/>
+  <use xlink:href="#glyph1-20" x="788" y="145"/>
+  <use xlink:href="#glyph1-18" x="795" y="145"/>
+  <use xlink:href="#glyph1-28" x="801" y="145"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 79 L 982 79 L 982 100 L 170 100 Z M 170 79 L 982 79 L 982 100 L 170 100 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-37" x="170" y="95"/>
+  <use xlink:href="#glyph1-25" x="181" y="95"/>
+  <use xlink:href="#glyph1-33" x="184" y="95"/>
+  <use xlink:href="#glyph1-6" x="191" y="95"/>
+  <use xlink:href="#glyph1-14" x="199" y="95"/>
+  <use xlink:href="#glyph1-18" x="203" y="95"/>
+  <use xlink:href="#glyph1-23" x="209" y="95"/>
+  <use xlink:href="#glyph1-6" x="217" y="95"/>
+  <use xlink:href="#glyph1-3" x="225" y="95"/>
+  <use xlink:href="#glyph1-14" x="236" y="95"/>
+  <use xlink:href="#glyph1-20" x="240" y="95"/>
+  <use xlink:href="#glyph1-14" x="247" y="95"/>
+  <use xlink:href="#glyph1-23" x="251" y="95"/>
+  <use xlink:href="#glyph1-20" x="259" y="95"/>
+  <use xlink:href="#glyph1-16" x="266" y="95"/>
+  <use xlink:href="#glyph1-8" x="274" y="95"/>
+  <use xlink:href="#glyph1-5" x="282" y="95"/>
+  <use xlink:href="#glyph1-23" x="289" y="95"/>
+  <use xlink:href="#glyph1-20" x="297" y="95"/>
+  <use xlink:href="#glyph1-27" x="304" y="95"/>
+  <use xlink:href="#glyph1-6" x="311" y="95"/>
+  <use xlink:href="#glyph1-14" x="319" y="95"/>
+  <use xlink:href="#glyph1-3" x="323" y="95"/>
+  <use xlink:href="#glyph1-6" x="334" y="95"/>
+  <use xlink:href="#glyph1-5" x="342" y="95"/>
+  <use xlink:href="#glyph1-5" x="349" y="95"/>
+  <use xlink:href="#glyph1-20" x="356" y="95"/>
+  <use xlink:href="#glyph1-24" x="363" y="95"/>
+  <use xlink:href="#glyph1-6" x="371" y="95"/>
+  <use xlink:href="#glyph1-28" x="379" y="95"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 79 L 167 79 L 167 100 L 155 100 Z M 155 79 L 167 79 L 167 100 L 155 100 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-41" x="155" y="95"/>
+  <use xlink:href="#glyph1-28" x="164" y="95"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 783 39 L 982 39 L 982 71 L 783 71 Z M 783 39 L 982 39 L 982 71 L 783 71 Z "/>
+<g clip-path="url(#clip26)" clip-rule="nonzero">
+<g clip-path="url(#clip27)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern25);" d="M 677 39 L 680 39 L 680 42 L 677 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern26);" d="M 680 39 L 780 39 L 780 42 L 680 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern27);" d="M 780 39 L 783 39 L 783 42 L 780 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern28);" d="M 677 42 L 680 42 L 680 67 L 677 67 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern29);" d="M 780 42 L 783 42 L 783 67 L 780 67 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern30);" d="M 677 67 L 680 67 L 680 71 L 677 71 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern31);" d="M 680 67 L 780 67 L 780 71 L 680 71 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern32);" d="M 780 67 L 783 67 L 783 71 L 780 71 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 685 44 L 775 44 L 775 65 L 685 65 Z M 685 44 L 775 44 L 775 65 L 685 65 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph1-42" x="685" y="60"/>
+  <use xlink:href="#glyph1-23" x="694" y="60"/>
+  <use xlink:href="#glyph1-20" x="702" y="60"/>
+  <use xlink:href="#glyph1-10" x="709" y="60"/>
+  <use xlink:href="#glyph1-6" x="714" y="60"/>
+  <use xlink:href="#glyph1-8" x="722" y="60"/>
+  <use xlink:href="#glyph1-14" x="730" y="60"/>
+  <use xlink:href="#glyph1-5" x="734" y="60"/>
+  <use xlink:href="#glyph1-6" x="741" y="60"/>
+  <use xlink:href="#glyph1-11" x="749" y="60"/>
+  <use xlink:href="#glyph1-10" x="756" y="60"/>
+  <use xlink:href="#glyph1-6" x="761" y="60"/>
+  <use xlink:href="#glyph1-18" x="769" y="60"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 478 39 L 677 39 L 677 71 L 478 71 Z M 478 39 L 677 39 L 677 71 L 478 71 Z "/>
+<g clip-path="url(#clip28)" clip-rule="nonzero">
+<g clip-path="url(#clip29)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern33);" d="M 369 39 L 372 39 L 372 42 L 369 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern34);" d="M 372 39 L 475 39 L 475 42 L 372 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern35);" d="M 475 39 L 478 39 L 478 42 L 475 42 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern36);" d="M 369 42 L 372 42 L 372 67 L 369 67 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern37);" d="M 475 42 L 478 42 L 478 67 L 475 67 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern38);" d="M 369 67 L 372 67 L 372 71 L 369 71 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern39);" d="M 372 67 L 475 67 L 475 71 L 372 71 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern40);" d="M 475 67 L 478 67 L 478 71 L 475 71 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 377 44 L 470 44 L 470 65 L 377 65 Z M 377 44 L 470 44 L 470 65 L 377 65 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph1-43" x="377" y="60"/>
+  <use xlink:href="#glyph1-20" x="389" y="60"/>
+  <use xlink:href="#glyph1-16" x="396" y="60"/>
+  <use xlink:href="#glyph1-13" x="404" y="60"/>
+  <use xlink:href="#glyph1-20" x="412" y="60"/>
+  <use xlink:href="#glyph1-21" x="419" y="60"/>
+  <use xlink:href="#glyph1-14" x="423" y="60"/>
+  <use xlink:href="#glyph1-44" x="427" y="60"/>
+  <use xlink:href="#glyph1-6" x="436" y="60"/>
+  <use xlink:href="#glyph1-26" x="444" y="60"/>
+  <use xlink:href="#glyph1-25" x="451" y="60"/>
+  <use xlink:href="#glyph1-16" x="454" y="60"/>
+  <use xlink:href="#glyph1-24" x="462" y="60"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 39 L 369 39 L 369 71 L 170 71 Z M 170 39 L 369 39 L 369 71 L 170 71 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 -199 L 982 -199 L 982 11 L 170 11 Z M 170 -199 L 982 -199 L 982 11 L 170 11 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-3" x="170" y="6"/>
+  <use xlink:href="#glyph1-20" x="181" y="6"/>
+  <use xlink:href="#glyph1-16" x="188" y="6"/>
+  <use xlink:href="#glyph1-20" x="196" y="6"/>
+  <use xlink:href="#glyph1-24" x="203" y="6"/>
+  <use xlink:href="#glyph1-6" x="211" y="6"/>
+  <use xlink:href="#glyph1-28" x="219" y="6"/>
+  <use xlink:href="#glyph1-14" x="222" y="6"/>
+  <use xlink:href="#glyph1-42" x="226" y="6"/>
+  <use xlink:href="#glyph1-2" x="235" y="6"/>
+  <use xlink:href="#glyph1-14" x="244" y="6"/>
+  <use xlink:href="#glyph1-18" x="248" y="6"/>
+  <use xlink:href="#glyph1-23" x="254" y="6"/>
+  <use xlink:href="#glyph1-6" x="262" y="6"/>
+  <use xlink:href="#glyph1-10" x="270" y="6"/>
+  <use xlink:href="#glyph1-6" x="275" y="6"/>
+  <use xlink:href="#glyph1-14" x="283" y="6"/>
+  <use xlink:href="#glyph1-25" x="287" y="6"/>
+  <use xlink:href="#glyph1-5" x="290" y="6"/>
+  <use xlink:href="#glyph1-14" x="297" y="6"/>
+  <use xlink:href="#glyph1-20" x="301" y="6"/>
+  <use xlink:href="#glyph1-21" x="308" y="6"/>
+  <use xlink:href="#glyph1-5" x="312" y="6"/>
+  <use xlink:href="#glyph1-2" x="319" y="6"/>
+  <use xlink:href="#glyph1-14" x="328" y="6"/>
+  <use xlink:href="#glyph1-20" x="332" y="6"/>
+  <use xlink:href="#glyph1-14" x="339" y="6"/>
+  <use xlink:href="#glyph1-5" x="343" y="6"/>
+  <use xlink:href="#glyph1-11" x="350" y="6"/>
+  <use xlink:href="#glyph1-23" x="357" y="6"/>
+  <use xlink:href="#glyph1-6" x="365" y="6"/>
+  <use xlink:href="#glyph1-3" x="373" y="6"/>
+  <use xlink:href="#glyph1-6" x="384" y="6"/>
+  <use xlink:href="#glyph1-14" x="392" y="6"/>
+  <use xlink:href="#glyph1-15" x="396" y="6"/>
+  <use xlink:href="#glyph1-23" x="408" y="6"/>
+  <use xlink:href="#glyph1-6" x="416" y="6"/>
+  <use xlink:href="#glyph1-10" x="424" y="6"/>
+  <use xlink:href="#glyph1-6" x="429" y="6"/>
+  <use xlink:href="#glyph1-19" x="437" y="6"/>
+  <use xlink:href="#glyph1-26" x="445" y="6"/>
+  <use xlink:href="#glyph1-14" x="452" y="6"/>
+  <use xlink:href="#glyph1-20" x="456" y="6"/>
+  <use xlink:href="#glyph1-14" x="463" y="6"/>
+  <use xlink:href="#glyph1-8" x="467" y="6"/>
+  <use xlink:href="#glyph1-6" x="475" y="6"/>
+  <use xlink:href="#glyph1-11" x="483" y="6"/>
+  <use xlink:href="#glyph1-27" x="490" y="6"/>
+  <use xlink:href="#glyph1-14" x="497" y="6"/>
+  <use xlink:href="#glyph1-2" x="501" y="6"/>
+  <use xlink:href="#glyph1-30" x="510" y="6"/>
+  <use xlink:href="#glyph1-14" x="516" y="6"/>
+  <use xlink:href="#glyph1-11" x="520" y="6"/>
+  <use xlink:href="#glyph1-20" x="527" y="6"/>
+  <use xlink:href="#glyph1-10" x="534" y="6"/>
+  <use xlink:href="#glyph1-8" x="539" y="6"/>
+  <use xlink:href="#glyph1-5" x="547" y="6"/>
+  <use xlink:href="#glyph1-14" x="554" y="6"/>
+  <use xlink:href="#glyph1-11" x="558" y="6"/>
+  <use xlink:href="#glyph1-20" x="565" y="6"/>
+  <use xlink:href="#glyph1-16" x="572" y="6"/>
+  <use xlink:href="#glyph1-14" x="580" y="6"/>
+  <use xlink:href="#glyph1-19" x="584" y="6"/>
+  <use xlink:href="#glyph1-6" x="592" y="6"/>
+  <use xlink:href="#glyph1-14" x="600" y="6"/>
+  <use xlink:href="#glyph1-5" x="604" y="6"/>
+  <use xlink:href="#glyph1-23" x="611" y="6"/>
+  <use xlink:href="#glyph1-13" x="619" y="6"/>
+  <use xlink:href="#glyph1-45" x="627" y="6"/>
+  <use xlink:href="#glyph1-6" x="641" y="6"/>
+  <use xlink:href="#glyph1-8" x="649" y="6"/>
+  <use xlink:href="#glyph1-14" x="657" y="6"/>
+  <use xlink:href="#glyph1-20" x="661" y="6"/>
+  <use xlink:href="#glyph1-16" x="668" y="6"/>
+  <use xlink:href="#glyph1-8" x="676" y="6"/>
+  <use xlink:href="#glyph1-14" x="684" y="6"/>
+  <use xlink:href="#glyph1-5" x="688" y="6"/>
+  <use xlink:href="#glyph1-4" x="695" y="6"/>
+  <use xlink:href="#glyph1-21" x="703" y="6"/>
+  <use xlink:href="#glyph1-25" x="707" y="6"/>
+  <use xlink:href="#glyph1-18" x="710" y="6"/>
+  <use xlink:href="#glyph1-14" x="716" y="6"/>
+  <use xlink:href="#glyph1-19" x="720" y="6"/>
+  <use xlink:href="#glyph1-6" x="728" y="6"/>
+  <use xlink:href="#glyph1-18" x="736" y="6"/>
+  <use xlink:href="#glyph1-15" x="742" y="6"/>
+  <use xlink:href="#glyph1-6" x="754" y="6"/>
+  <use xlink:href="#glyph1-6" x="762" y="6"/>
+  <use xlink:href="#glyph1-16" x="770" y="6"/>
+  <use xlink:href="#glyph1-14" x="778" y="6"/>
+  <use xlink:href="#glyph1-26" x="782" y="6"/>
+  <use xlink:href="#glyph1-2" x="789" y="6"/>
+  <use xlink:href="#glyph1-13" x="798" y="6"/>
+  <use xlink:href="#glyph1-28" x="806" y="6"/>
+</g>
+<g clip-path="url(#clip30)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(83.647059%,83.647059%,83.647059%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip31)" clip-rule="nonzero">
+<g clip-path="url(#clip32)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(60.684314%,61.507843%,61.782353%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+</g>
+</svg>
diff --git a/doc/images/outbox.svg b/doc/images/outbox.svg
new file mode 100644
index 0000000..25baafb
--- /dev/null
+++ b/doc/images/outbox.svg
@@ -0,0 +1,566 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.578125 0 C 1.710938 0 0.601562 -0.921875 0.25 -2.765625 L 1.71875 -3 C 1.8125 -2.4375 2.019531 -2 2.34375 -1.6875 C 2.675781 -1.375 3.085938 -1.21875 3.578125 -1.21875 C 4.117188 -1.21875 4.546875 -1.421875 4.859375 -1.828125 C 5.171875 -2.234375 5.328125 -2.832031 5.328125 -3.625 L 5.328125 -10.78125 L 3.203125 -10.78125 L 3.203125 -12 L 6.8125 -12 L 6.8125 -3.6875 C 6.8125 -2.539062 6.519531 -1.640625 5.9375 -0.984375 C 5.363281 -0.328125 4.578125 0 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.328125 -10 L 8.65625 -10 L 8.65625 0 L 1.328125 0 Z M 1.8125 -9 L 1.8125 -1 L 8.171875 -1 L 8.171875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 2.671875 0 C 1.273438 0 0.445312 -0.613281 0.1875 -1.84375 L 1.375 -2 C 1.4375 -1.675781 1.582031 -1.425781 1.8125 -1.25 C 2.039062 -1.070312 2.332031 -0.984375 2.6875 -0.984375 C 3.0625 -0.984375 3.359375 -1.15625 3.578125 -1.5 C 3.796875 -1.84375 3.90625 -2.34375 3.90625 -3 L 3.90625 -9.015625 L 2.40625 -9.015625 L 2.40625 -10 L 5.109375 -10 L 5.109375 -3.078125 C 5.109375 -2.117188 4.890625 -1.363281 4.453125 -0.8125 C 4.023438 -0.269531 3.429688 0 2.67 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 1.96875 -7 L 1.96875 -2.640625 C 1.96875 -2.179688 2.007812 -1.828125 2.09375 -1.578125 C 2.175781 -1.328125 2.304688 -1.144531 2.484375 -1.03125 C 2.671875 -0.925781 2.945312 -0.875 3.3125 -0.875 C 3.820312 -0.875 4.226562 -1.0625 4.53125 -1.4375 C 4.832031 -1.8125 4.984375 -2.335938 4.984375 -3.015625 L 4.984375 -7 L 6.125 -7 L 6.125 -1.5 C 6.125 -0.675781 6.132812 -0.175781 6.15625 0 L 5.078125 0 C 5.078125 -0.0195312 5.070312 -0.0820312 5.0625 -0.1875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 0.90625 0 L 0.90625 -10 L 2.046875 -10 L 2.046875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 5.421875 -2.09375 L 5.421875 0 L 4.34375 0 L 4.34375 -2.09375 L 0.28125 -2.09375 L 0.28125 -3.109375 L 4.25 -10 L 5.421875 -10 L 5.421875 -3 L 6.671875 -3 L 6.671875 -2.09375 Z M 4.34375 -8.71875 C 4.332031 -8.6875 4.273438 -8.550781 4.171875 -8.3125 C 4.066406 -8.070312 3.988281 -7.90625 3.9375 -7.8125 L 1.765625 -3.71875 L 1.4375 -3.15625 L 1.34375 -3 L 4.34375 -3 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 0.890625 0 L 0.890625 -0.96875 L 3.171875 -0.96875 L 3.171875 -8.921875 L 1.15625 -7 L 1.15625 -8.078125 L 3.265625 -10 L 4.328125 -10 L 4.328125 -0.96875 L 6.5 -0.96875 L 6.5 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 6.515625 -5 C 6.515625 -3.375 6.257812 -2.132812 5.75 -1.28125 C 5.238281 -0.425781 4.484375 0 3.484375 0 C 2.484375 0 1.734375 -0.421875 1.234375 -1.265625 C 0.734375 -2.117188 0.484375 -3.363281 0.484375 -5 C 0.484375 -6.664062 0.722656 -7.914062 1.203125 -8.75 C 1.691406 -9.582031 2.460938 -10 3.515625 -10 C 4.546875 -10 5.300781 -9.578125 5.78125 -8.734375 C 6.269531 -7.890625 6.515625 -6.644531 6.515625 -5 Z M 5.359375 -5 C 5.359375 -6.4375 5.210938 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 1.3125 -6 L 1.3125 -7 L 2.546875 -7 L 2.546875 -6 Z M 1.3125 0 L 1.3125 -1 L 2.546875 -1 L 2.546875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 6.46875 -3.125 C 6.46875 -2.15625 6.195312 -1.390625 5.65625 -0.828125 C 5.113281 -0.273438 4.359375 0 3.390625 0 C 2.585938 0 1.9375 -0.179688 1.4375 -0.546875 C 0.945312 -0.910156 0.632812 -1.4375 0.5 -2.125 L 1.65625 -2.265625 C 1.882812 -1.378906 2.472656 -0.9375 3.421875 -0.9375 C 4.003906 -0.9375 4.457031 -1.128906 4.78125 -1.515625 C 5.113281 -1.898438 5.28125 -2.429688 5.28125 -3.109375 C 5.28125 -3.691406 5.113281 -4.160156 4.78125 -4.515625 C 4.4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-10">
+<path style="stroke:none;" d="M 6.453125 -3.015625 C 6.453125 -2.066406 6.195312 -1.328125 5.6875 -0.796875 C 5.175781 -0.265625 4.445312 0 3.5 0 C 2.570312 0 1.847656 -0.257812 1.328125 -0.78125 C 0.804688 -1.300781 0.546875 -2.046875 0.546875 -3.015625 C 0.546875 -3.679688 0.707031 -4.242188 1.03125 -4.703125 C 1.351562 -5.171875 1.769531 -5.453125 2.28125 -5.546875 L 2.28125 -5.578125 C 1.8125 -5.691406 1.4375 -5.941406 1.15625 -6.328125 C 0.882812 -6.710938 0.75 -7.164062 0.75 -7.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 4 -28 L 25.984375 -28 L 25.984375 0 L 4 0 Z M 5.484375 -27 L 5.484375 -1 L 24.5 -1 L 24.5 -27 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 25.609375 -19.203125 C 25.609375 -17.421875 25.195312 -15.828125 24.375 -14.421875 C 23.5625 -13.015625 22.390625 -11.925781 20.859375 -11.15625 C 19.328125 -10.382812 17.507812 -10 15.40625 -10 L 8.46875 -10 L 8.46875 0 L 2.703125 0 L 2.703125 -28 L 15.21875 -28 C 18.550781 -28 21.113281 -27.234375 22.90625 -25.703125 C 24.707031 -24.171875 25.609375 -22.003906 25.609375 -19.203125 Z M 19.8125 -19.109375 C 19.8125 -22.054688 18.066406 -23.53125 14.578125  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-2">
+<path style="stroke:none;" d="M 22.46875 -11.015625 C 22.46875 -7.578125 21.53125 -4.878906 19.65625 -2.921875 C 17.789062 -0.972656 15.207031 0 11.90625 0 C 8.675781 0 6.140625 -0.976562 4.296875 -2.9375 C 2.453125 -4.894531 1.53125 -7.585938 1.53125 -11.015625 C 1.53125 -14.429688 2.453125 -17.113281 4.296875 -19.0625 C 6.140625 -21.019531 8.71875 -22 12.03125 -22 C 15.414062 -22 18 -21.050781 19.78125 -19.15625 C 21.570312 -17.269531 22.46875 -14.554688 22.46875 -11.015625 Z M 16.7187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-3">
+<path style="stroke:none;" d="M 15.203125 0 L 15.203125 -12.15625 C 15.203125 -15.96875 14.113281 -17.875 11.9375 -17.875 C 10.789062 -17.875 9.863281 -17.289062 9.15625 -16.125 C 8.457031 -14.957031 8.109375 -13.457031 8.109375 -11.625 L 8.109375 0 L 2.625 0 L 2.625 -17.078125 C 2.625 -18.253906 2.609375 -19.21875 2.578125 -19.96875 C 2.546875 -20.726562 2.507812 -21.40625 2.46875 -22 L 7.703125 -22 C 7.742188 -21.726562 7.796875 -21.003906 7.859375 -19.828125 C 7.921875 -18.648438 7.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-4">
+<path style="stroke:none;" d="M 16.09375 0 C 16.039062 -0.21875 15.976562 -0.765625 15.90625 -1.640625 C 15.832031 -2.515625 15.796875 -3.242188 15.796875 -3.828125 L 15.71875 -3.828125 C 14.5625 -1.273438 12.363281 0 9.125 0 C 6.726562 0 4.875 -0.960938 3.5625 -2.890625 C 2.257812 -4.816406 1.609375 -7.515625 1.609375 -10.984375 C 1.609375 -14.492188 2.296875 -17.207031 3.671875 -19.125 C 5.054688 -21.039062 7.007812 -22 9.53125 -22 C 10.988281 -22 12.25 -21.6875 13.3125 -21.0625 C 14.3 [...]
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image2659" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image2659"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image2663" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image2663"/>
+</pattern>
+<image id="image2666" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image2666"/>
+</pattern>
+<image id="image2671" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image2671"/>
+</pattern>
+<image id="image2676" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image2676"/>
+</pattern>
+<image id="image2681" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image2681"/>
+</pattern>
+<image id="image2686" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image2686"/>
+</pattern>
+<image id="image2691" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image2691"/>
+</pattern>
+<image id="image2696" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image2696"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 118 L 0 118 Z "/>
+</clipPath>
+<image id="image2701" width="8" height="8" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAABmJLR0QA/wD/AP+gvaeTAAAAVElEQVQYlX3PsRGAMAwEwbVSCqAMeiJxTST0RBkUQAyBFQADvlA3r/kvcDKiYtLYsBT2knLF4MmBOTL5lvJW4/b2iyk6EkQW+mMLLFnozaEt6c+8AJlzESSxOKHSAAAAAElFTkSuQmCC"/>
+<clipPath id="clip10">
+  <path d="M 0 118 L 145 118 L 145 136 L 0 136 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 136 L 145 136 L 145 137 L 0 137 Z "/>
+</clipPath>
+<clipPath id="clip12">
+  <path d="M 0 137 L 145 137 L 145 155 L 0 155 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 0 155 L 145 155 L 145 156 L 0 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 163 L 122 163 L 122 192 L 24 192 Z "/>
+</clipPath>
+<clipPath id="clip15">
+  <path d="M 24 165 C 24 163.894531 24.894531 163 26 163 L 120 163 C 121.105469 163 122 163.449219 122 164 L 122 190 C 122 191.105469 121.105469 192 120 192 L 26 192 C 24.894531 192 24 191.550781 24 191 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,177.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image2705" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,162)">
+  <use xlink:href="#image2705"/>
+</pattern>
+<image id="image2708" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,162)">
+  <use xlink:href="#image2708"/>
+</pattern>
+<image id="image2713" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,162)">
+  <use xlink:href="#image2713"/>
+</pattern>
+<image id="image2718" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,165)">
+  <use xlink:href="#image2718"/>
+</pattern>
+<image id="image2723" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,165)">
+  <use xlink:href="#image2723"/>
+</pattern>
+<image id="image2728" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,190)">
+  <use xlink:href="#image2728"/>
+</pattern>
+<image id="image2733" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,190)">
+  <use xlink:href="#image2733"/>
+</pattern>
+<image id="image2738" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,190)">
+  <use xlink:href="#image2738"/>
+</pattern>
+<clipPath id="clip16">
+  <path d="M 0 200 L 145 200 L 145 222 L 0 222 Z "/>
+</clipPath>
+<image id="image2743" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip17">
+  <path d="M 0 222 L 145 222 L 145 240 L 0 240 Z "/>
+</clipPath>
+<clipPath id="clip18">
+  <path d="M 0 240 L 145 240 L 145 241 L 0 241 Z "/>
+</clipPath>
+<clipPath id="clip19">
+  <path d="M 0 241 L 145 241 L 145 263 L 0 263 Z "/>
+</clipPath>
+<image id="image2746" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip20">
+  <path d="M 0 263 L 145 263 L 145 264 L 0 264 Z "/>
+</clipPath>
+<clipPath id="clip21">
+  <path d="M 0 264 L 145 264 L 145 286 L 0 286 Z "/>
+</clipPath>
+<image id="image2749" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip22">
+  <path d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+</clipPath>
+</defs>
+<g id="surface2656">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 83 L 31 83 L 31 100 L 5 100 Z M 5 83 L 31 83 L 31 100 L 5 100 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="97"/>
+  <use xlink:href="#glyph2-2" x="13" y="97"/>
+  <use xlink:href="#glyph2-3" x="22" y="97"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(60%,60%,60%);fill-opacity:1;" d="M 5 102 L 72 102 L 72 117 L 5 117 Z M 5 102 L 72 102 L 72 117 L 5 117 Z "/>
+<g style="fill:rgb(60%,60%,60%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="5" y="114"/>
+  <use xlink:href="#glyph3-2" x="11" y="114"/>
+  <use xlink:href="#glyph3-3" x="18" y="114"/>
+  <use xlink:href="#glyph3-4" x="21" y="114"/>
+  <use xlink:href="#glyph3-4" x="25" y="114"/>
+  <use xlink:href="#glyph3-5" x="29" y="114"/>
+  <use xlink:href="#glyph3-4" x="36" y="114"/>
+  <use xlink:href="#glyph3-6" x="40" y="114"/>
+  <use xlink:href="#glyph3-7" x="47" y="114"/>
+  <use xlink:href="#glyph3-8" x="54" y="114"/>
+  <use xlink:href="#glyph3-9" x="58" y="114"/>
+  <use xlink:href="#glyph3-10" x="65" y="114"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 81 102 L 141 102 L 141 117 L 81 117 Z M 81 102 L 141 102 L 141 117 L 81 117 Z "/>
+<use xlink:href="#image2701" transform="matrix(1,0,0,1,133,105)"/>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 118 L 145 118 L 145 136 L 0 136 Z M 0 118 L 145 118 L 145 136 L 0 136 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="132"/>
+  <use xlink:href="#glyph0-10" x="58" y="132"/>
+  <use xlink:href="#glyph0-11" x="65" y="132"/>
+  <use xlink:href="#glyph0-12" x="75" y="132"/>
+  <use xlink:href="#glyph0-8" x="82" y="132"/>
+  <use xlink:href="#glyph0-13" x="89" y="132"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 137 L 145 137 L 145 155 L 0 155 Z M 0 137 L 145 137 L 145 155 L 0 155 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="151"/>
+  <use xlink:href="#glyph0-4" x="47" y="151"/>
+  <use xlink:href="#glyph0-2" x="57" y="151"/>
+  <use xlink:href="#glyph0-8" x="67" y="151"/>
+  <use xlink:href="#glyph0-11" x="74" y="151"/>
+  <use xlink:href="#glyph0-15" x="84" y="151"/>
+  <use xlink:href="#glyph0-8" x="93" y="151"/>
+  <use xlink:href="#glyph0-13" x="100" y="151"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 163 L 122 163 L 122 192 L 24 192 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 162 L 26 162 L 26 165 L 23 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 162 L 120 162 L 120 165 L 26 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 162 L 123 162 L 123 165 L 120 165 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 165 L 26 165 L 26 190 L 23 190 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 165 L 123 165 L 123 190 L 120 190 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 190 L 26 190 L 26 194 L 23 194 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 190 L 120 190 L 120 194 L 26 194 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 190 L 123 190 L 123 194 L 120 194 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 167 L 115 167 L 115 188 L 31 188 Z M 31 167 L 115 167 L 115 188 L 31 188 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="184"/>
+  <use xlink:href="#glyph1-8" x="69" y="184"/>
+  <use xlink:href="#glyph1-8" x="77" y="184"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="183"/>
+  <use xlink:href="#glyph1-8" x="69" y="183"/>
+  <use xlink:href="#glyph1-8" x="77" y="183"/>
+</g>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 201 L 31 201 L 31 218 L 5 218 Z M 5 201 L 31 201 L 31 218 L 5 218 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="215"/>
+  <use xlink:href="#glyph2-2" x="13" y="215"/>
+  <use xlink:href="#glyph2-3" x="22" y="215"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 220 L 141 220 L 141 221 L 4 221 Z M 4 220 L 141 220 L 141 221 L 4 221 Z "/>
+<use xlink:href="#image2743" transform="matrix(1,0,0,1,140,220)"/>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 222 L 145 222 L 145 240 L 0 240 Z M 0 222 L 145 222 L 145 240 L 0 240 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="236"/>
+  <use xlink:href="#glyph0-16" x="60" y="236"/>
+  <use xlink:href="#glyph0-17" x="64" y="236"/>
+  <use xlink:href="#glyph0-18" x="68" y="236"/>
+  <use xlink:href="#glyph0-2" x="78" y="236"/>
+  <use xlink:href="#glyph0-8" x="88" y="236"/>
+</g>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 242 L 53 242 L 53 259 L 5 259 Z M 5 242 L 53 242 L 53 259 L 5 259 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-4" x="5" y="256"/>
+  <use xlink:href="#glyph2-5" x="8" y="256"/>
+  <use xlink:href="#glyph2-3" x="17" y="256"/>
+  <use xlink:href="#glyph2-6" x="26" y="256"/>
+  <use xlink:href="#glyph2-7" x="34" y="256"/>
+  <use xlink:href="#glyph2-8" x="38" y="256"/>
+  <use xlink:href="#glyph2-7" x="42" y="256"/>
+  <use xlink:href="#glyph2-9" x="46" y="256"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 261 L 141 261 L 141 262 L 4 262 Z M 4 261 L 141 261 L 141 262 L 4 262 Z "/>
+<use xlink:href="#image2746" transform="matrix(1,0,0,1,140,261)"/>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 265 L 85 265 L 85 282 L 5 282 Z M 5 265 L 85 265 L 85 282 L 5 282 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-10" x="5" y="279"/>
+  <use xlink:href="#glyph2-11" x="16" y="279"/>
+  <use xlink:href="#glyph2-7" x="24" y="279"/>
+  <use xlink:href="#glyph2-8" x="28" y="279"/>
+  <use xlink:href="#glyph2-12" x="32" y="279"/>
+  <use xlink:href="#glyph2-8" x="39" y="279"/>
+  <use xlink:href="#glyph2-7" x="43" y="279"/>
+  <use xlink:href="#glyph2-9" x="47" y="279"/>
+  <use xlink:href="#glyph2-13" x="54" y="279"/>
+  <use xlink:href="#glyph2-14" x="58" y="279"/>
+  <use xlink:href="#glyph2-2" x="67" y="279"/>
+  <use xlink:href="#glyph2-15" x="76" y="279"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 284 L 141 284 L 141 285 L 4 285 Z M 4 284 L 141 284 L 141 285 L 4 285 Z "/>
+<use xlink:href="#image2749" transform="matrix(1,0,0,1,140,284)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+<g clip-path="url(#clip22)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(86.666667%,86.666667%,86.666667%);fill-opacity:1;" d="M 150 0 L 1000 0 L 1000 800 L 150 800 Z M 150 0 L 1000 0 L 1000 800 L 150 800 Z "/>
+<g style="fill:rgb(86.666667%,86.666667%,86.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="526" y="414"/>
+  <use xlink:href="#glyph4-2" x="553" y="414"/>
+  <use xlink:href="#glyph4-3" x="577" y="414"/>
+  <use xlink:href="#glyph4-4" x="600" y="414"/>
+</g>
+</g>
+</svg>
diff --git a/doc/images/set-passphrase.svg b/doc/images/set-passphrase.svg
new file mode 100644
index 0000000..d6c43d6
--- /dev/null
+++ b/doc/images/set-passphrase.svg
@@ -0,0 +1,725 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="818pt" height="468pt" viewBox="0 0 818 468" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 2 7 L 2 -28 L 22 -28 L 22 7 Z M 4 5 L 20 5 L 20 -26 L 4 -26 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 10 -15 L 15.6875 -15 C 17.738281 -15 19.300781 -15.515625 20.375 -16.546875 C 21.457031 -17.578125 22 -19.0625 22 -21 C 22 -22.957031 21.457031 -24.445312 20.375 -25.46875 C 19.300781 -26.488281 17.738281 -27 15.6875 -27 L 10 -27 Z M 2 0 L 2 -2 L 6 -2 L 6 -27 L 2 -27 L 2 -29 L 16.703125 -29 C 19.554688 -29 21.816406 -28.273438 23.484375 -26.828125 C 25.160156 -25.390625 26 -23.445312 26 -21 C 26 -18.5625 25.160156 -16.617188 23.484375 -15.171875 C 21.81640 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 12 -2 C 13.976562 -2 15.472656 -2.757812 16.484375 -4.28125 C 17.492188 -5.800781 18 -8.046875 18 -11.015625 C 18 -13.972656 17.492188 -16.207031 16.484375 -17.71875 C 15.472656 -19.238281 13.976562 -20 12 -20 C 10.019531 -20 8.523438 -19.238281 7.515625 -17.71875 C 6.503906 -16.207031 6 -13.972656 6 -11.015625 C 6 -8.046875 6.503906 -5.800781 7.515625 -4.28125 C 8.535156 -2.757812 10.03125 -2 12 -2 Z M 12 0 C 8.988281 0 6.566406 -1.003906 4.734375 -3.0156 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 2 0 L 2 -2 L 5 -2 L 5 -19 L 2 -19 L 2 -21 L 9 -21 L 9 -17.359375 C 9.664062 -18.890625 10.53125 -20.046875 11.59375 -20.828125 C 12.65625 -21.609375 13.890625 -22 15.296875 -22 C 17.597656 -22 19.289062 -21.300781 20.375 -19.90625 C 21.457031 -18.519531 22 -16.351562 22 -13.40625 L 22 -2 L 25 -2 L 25 0 L 15 0 L 15 -2 L 18 -2 L 18 -12.234375 C 18 -15.203125 17.695312 -17.238281 17.09375 -18.34375 C 16.5 -19.445312 15.441406 -20 13.921875 -20 C 12.316406 -20 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 21 -2 L 24 -2 L 24 0 L 17 0 L 17 -3.234375 C 16.3125 -2.128906 15.4375 -1.3125 14.375 -0.78125 C 13.320312 -0.257812 12.015625 0 10.453125 0 C 7.972656 0 5.941406 -1.015625 4.359375 -3.046875 C 2.785156 -5.085938 2 -7.742188 2 -11.015625 C 2 -14.285156 2.785156 -16.929688 4.359375 -18.953125 C 5.929688 -20.984375 7.960938 -22 10.453125 -22 C 12.015625 -22 13.320312 -21.703125 14.375 -21.109375 C 15.4375 -20.515625 16.3125 -19.59375 17 -18.34375 L 17 -28 L  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 2 7 L 2 -28 L 22 -28 L 22 7 Z M 4 5 L 20 5 L 20 -26 L 4 -26 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 22 -28 L 22 -24 C 20.476562 -25.007812 19.046875 -25.757812 17.703125 -26.25 C 16.359375 -26.75 15.0625 -27 13.8125 -27 C 11.632812 -27 9.953125 -26.554688 8.765625 -25.671875 C 7.585938 -24.796875 7 -23.550781 7 -21.9375 C 7.019531 -20.6875 7.4375 -19.734375 8.25 -19.078125 C 9.0625 -18.421875 10.597656 -17.882812 12.859375 -17.46875 L 15.359375 -17.015625 C 18.328125 -16.453125 20.507812 -15.457031 21.90625 -14.03125 C 23.3125 -12.613281 24.007812 -10.72 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 22 -12.875 L 22 -11 L 6 -11 C 6.144531 -8.394531 6.851562 -6.410156 8.125 -5.046875 C 9.40625 -3.679688 11.1875 -3 13.46875 -3 C 14.789062 -3 16.070312 -3.164062 17.3125 -3.5 C 18.550781 -3.832031 19.78125 -4.332031 21 -5 L 21 -2 C 19.738281 -1.34375 18.445312 -0.84375 17.125 -0.5 C 15.800781 -0.164062 14.457031 0 13.09375 0 C 9.6875 0 6.984375 -1.015625 4.984375 -3.046875 C 2.992188 -5.085938 2 -7.835938 2 -11.296875 C 2 -14.890625 2.953125 -17.738281 4.8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8 -28 L 8 -22 L 15 -22 L 15 -19 L 8 -19 L 8 -7.1875 C 8 -5.40625 8.226562 -4.257812 8.6875 -3.75 C 9.15625 -3.25 10.097656 -3 11.515625 -3 L 15 -3 L 15 0 L 11.515625 0 C 8.671875 0 6.707031 -0.515625 5.625 -1.546875 C 4.539062 -2.578125 4 -4.457031 4 -7.1875 L 4 -19 L 1 -19 L 1 -22 L 4 -22 L 4 -28 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 8 -26 L 8 -15 L 13.09375 -15 C 14.976562 -15 16.429688 -15.472656 17.453125 -16.421875 C 18.484375 -17.378906 19 -18.742188 19 -20.515625 C 19 -22.265625 18.484375 -23.613281 17.453125 -24.5625 C 16.429688 -25.519531 14.976562 -26 13.09375 -26 Z M 4 -29 L 13.09375 -29 C 16.351562 -29 18.816406 -28.273438 20.484375 -26.828125 C 22.160156 -25.390625 23 -23.285156 23 -20.515625 C 23 -17.703125 22.160156 -15.578125 20.484375 -14.140625 C 18.816406 -12.710938 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 12.828125 -11 C 10.253906 -11 8.472656 -10.6875 7.484375 -10.0625 C 6.492188 -9.445312 6 -8.390625 6 -6.890625 C 6 -5.691406 6.367188 -4.742188 7.109375 -4.046875 C 7.859375 -3.347656 8.875 -3 10.15625 -3 C 11.914062 -3 13.328125 -3.660156 14.390625 -4.984375 C 15.460938 -6.304688 16 -8.066406 16 -10.265625 L 16 -11 Z M 20 -12.578125 L 20 0 L 16 0 L 16 -4 C 15.226562 -2.632812 14.265625 -1.625 13.109375 -0.96875 C 11.960938 -0.320312 10.554688 0 8.890625 0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 18 -21 L 18 -18 C 16.976562 -18.664062 15.914062 -19.164062 14.8125 -19.5 C 13.707031 -19.832031 12.566406 -20 11.390625 -20 C 9.585938 -20 8.238281 -19.710938 7.34375 -19.140625 C 6.445312 -18.566406 6 -17.707031 6 -16.5625 C 5.957031 -15.53125 6.238281 -14.75 6.84375 -14.21875 C 7.457031 -13.6875 8.691406 -13.21875 10.546875 -12.8125 L 11.703125 -12.53125 C 14.304688 -11.957031 16.164062 -11.203125 17.28125 -10.265625 C 18.394531 -9.335938 18.96875 -8.07 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 8 -4 L 8 8 L 4 8 L 4 -22 L 8 -22 L 8 -19 C 8.757812 -20.351562 9.71875 -21.359375 10.875 -22.015625 C 12.03125 -22.671875 13.410156 -23 15.015625 -23 C 17.671875 -23 19.832031 -21.941406 21.5 -19.828125 C 23.164062 -17.710938 24 -14.9375 24 -11.5 C 24 -8.0625 23.164062 -5.285156 21.5 -3.171875 C 19.832031 -1.054688 17.671875 0 15.015625 0 C 13.410156 0 12.03125 -0.328125 10.875 -0.984375 C 9.71875 -1.640625 8.757812 -2.644531 8 -4 Z M 20 -11.5 C 20 -14.144 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 22 -13.578125 L 22 0 L 18 0 L 18 -13.453125 C 18 -15.640625 17.632812 -17.273438 16.90625 -18.359375 C 16.1875 -19.453125 15.097656 -20 13.640625 -20 C 11.890625 -20 10.507812 -19.347656 9.5 -18.046875 C 8.5 -16.742188 8 -14.96875 8 -12.71875 L 8 0 L 4 0 L 4 -30 L 8 -30 L 8 -19 C 8.820312 -20.34375 9.785156 -21.34375 10.890625 -22 C 12.003906 -22.664062 13.285156 -23 14.734375 -23 C 17.117188 -23 18.925781 -22.203125 20.15625 -20.609375 C 21.382812 -19.015 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 17 -19 C 16.601562 -19.34375 16.171875 -19.59375 15.703125 -19.75 C 15.242188 -19.914062 14.734375 -20 14.171875 -20 C 12.179688 -20 10.65625 -19.296875 9.59375 -17.890625 C 8.53125 -16.484375 8 -14.46875 8 -11.84375 L 8 0 L 4 0 L 4 -22 L 8 -22 L 8 -19 C 8.738281 -20.351562 9.695312 -21.359375 10.875 -22.015625 C 12.0625 -22.671875 13.503906 -23 15.203125 -23 C 15.441406 -23 15.707031 -23 16 -23 C 16.300781 -23 16.628906 -23 16.984375 -23 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1 4 L 1 -13 L 11 -13 L 11 4 Z M 2 3 L 10 3 L 10 -12 L 2 -12 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 4 -12 L 4 -8 L 6.3125 -8 C 7.164062 -8 7.828125 -8.171875 8.296875 -8.515625 C 8.765625 -8.867188 9 -9.363281 9 -10 C 9 -10.632812 8.765625 -11.125 8.296875 -11.46875 C 7.828125 -11.820312 7.164062 -12 6.3125 -12 Z M 2 -14 L 6.3125 -14 C 7.851562 -14 9.019531 -13.660156 9.8125 -12.984375 C 10.601562 -12.304688 11 -11.3125 11 -10 C 11 -8.6875 10.601562 -7.691406 9.8125 -7.015625 C 9.019531 -6.335938 7.851562 -6 6.3125 -6 L 4 -6 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 6 -8 C 5.070312 -8 4.335938 -7.726562 3.796875 -7.1875 C 3.265625 -6.65625 3 -5.925781 3 -5 C 3 -4.070312 3.265625 -3.335938 3.796875 -2.796875 C 4.335938 -2.265625 5.070312 -2 6 -2 C 6.925781 -2 7.65625 -2.265625 8.1875 -2.796875 C 8.726562 -3.335938 9 -4.070312 9 -5 C 9 -5.914062 8.726562 -6.644531 8.1875 -7.1875 C 7.65625 -7.726562 6.925781 -8 6 -8 Z M 6 -10 C 7.550781 -10 8.769531 -9.554688 9.65625 -8.671875 C 10.550781 -7.785156 11 -6.5625 11 -5 C 11  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 11 -5.71875 L 11 0 L 9 0 L 9 -5.671875 C 9 -6.453125 8.816406 -7.035156 8.453125 -7.421875 C 8.085938 -7.804688 7.546875 -8 6.828125 -8 C 5.953125 -8 5.257812 -7.757812 4.75 -7.28125 C 4.25 -6.8125 4 -6.171875 4 -5.359375 L 4 0 L 2 0 L 2 -10 L 4 -10 L 4 -8 C 4.40625 -8.664062 4.882812 -9.164062 5.4375 -9.5 C 6 -9.832031 6.640625 -10 7.359375 -10 C 8.554688 -10 9.460938 -9.632812 10.078125 -8.90625 C 10.691406 -8.1875 11 -7.125 11 -5.71875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 8 -8 L 8 -14 L 10 -14 L 10 0 L 8 0 L 8 -2 C 7.664062 -1.320312 7.242188 -0.816406 6.734375 -0.484375 C 6.234375 -0.160156 5.628906 0 4.921875 0 C 3.765625 0 2.820312 -0.457031 2.09375 -1.375 C 1.363281 -2.289062 1 -3.5 1 -5 C 1 -6.5 1.363281 -7.707031 2.09375 -8.625 C 2.820312 -9.539062 3.765625 -10 4.921875 -10 C 5.628906 -10 6.234375 -9.832031 6.734375 -9.5 C 7.242188 -9.175781 7.664062 -8.675781 8 -8 Z M 3 -5 C 3 -4.0625 3.21875 -3.328125 3.65625 -2.796 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 -5.875 L 8.359375 -10 L 11 -10 L 5.578125 -5.328125 L 11 0 L 8.171875 0 L 4 -4.203125 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 11 -5.25 L 11 -4 L 3 -4 C 3.082031 -3.34375 3.460938 -2.84375 4.140625 -2.5 C 4.816406 -2.164062 5.765625 -2 6.984375 -2 C 7.691406 -2 8.375 -2.082031 9.03125 -2.25 C 9.695312 -2.414062 10.351562 -2.664062 11 -3 L 11 -1 C 10.332031 -0.675781 9.648438 -0.425781 8.953125 -0.25 C 8.265625 -0.0820312 7.5625 0 6.84375 0 C 5.039062 0 3.613281 -0.441406 2.5625 -1.328125 C 1.519531 -2.210938 1 -3.410156 1 -4.921875 C 1 -6.472656 1.472656 -7.707031 2.421875 -8.625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 4 -2 L 4 4 L 2 4 L 2 -10 L 4 -10 L 4 -8 C 4.332031 -8.675781 4.75 -9.175781 5.25 -9.5 C 5.757812 -9.832031 6.363281 -10 7.0625 -10 C 8.226562 -10 9.175781 -9.539062 9.90625 -8.625 C 10.632812 -7.707031 11 -6.5 11 -5 C 11 -3.5 10.632812 -2.289062 9.90625 -1.375 C 9.175781 -0.457031 8.226562 0 7.0625 0 C 6.363281 0 5.757812 -0.160156 5.25 -0.484375 C 4.75 -0.816406 4.332031 -1.320312 4 -2 Z M 9 -5 C 9 -5.9375 8.773438 -6.671875 8.328125 -7.203125 C 7.890625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 9 -9 L 9 -7 C 8.488281 -7.332031 7.957031 -7.582031 7.40625 -7.75 C 6.851562 -7.914062 6.28125 -8 5.6875 -8 C 4.789062 -8 4.117188 -7.894531 3.671875 -7.6875 C 3.222656 -7.476562 3 -7.164062 3 -6.75 C 3.0625 -6.769531 3.238281 -6.757812 3.53125 -6.71875 C 3.820312 -6.675781 4.382812 -6.582031 5.21875 -6.4375 L 5.734375 -6.359375 C 6.960938 -6.085938 7.828125 -5.671875 8.328125 -5.109375 C 8.828125 -4.554688 9.050781 -3.765625 9 -2.734375 C 9 -1.890625 8.61 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 8 -8 C 7.820312 -8 7.628906 -8 7.421875 -8 C 7.210938 -8 6.988281 -8 6.75 -8 C 5.863281 -8 5.179688 -7.738281 4.703125 -7.21875 C 4.234375 -6.695312 4 -5.953125 4 -4.984375 L 4 0 L 2 0 L 2 -10 L 4 -10 L 4 -8 C 4.332031 -8.675781 4.757812 -9.175781 5.28125 -9.5 C 5.8125 -9.832031 6.453125 -10 7.203125 -10 C 7.304688 -10 7.421875 -10 7.546875 -10 C 7.679688 -10 7.828125 -10 7.984375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2 -10 L 4 -10 L 4 0 L 2 0 Z M 2 -14 L 4 -14 L 4 -12 L 2 -12 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 1 -10 L 3.15625 -10 L 6 -2.09375 L 8.84375 -10 L 11 -10 L 7.265625 0 L 4.734375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d="M 6.421875 -5 C 5.128906 -5 4.234375 -4.878906 3.734375 -4.640625 C 3.242188 -4.410156 3 -4.015625 3 -3.453125 C 3 -3.003906 3.179688 -2.648438 3.546875 -2.390625 C 3.921875 -2.128906 4.429688 -2 5.078125 -2 C 5.960938 -2 6.671875 -2.242188 7.203125 -2.734375 C 7.734375 -3.222656 8 -3.875 8 -4.6875 L 8 -5 Z M 10 -6.0625 L 10 0 L 8 0 L 8 -2 C 7.613281 -1.3125 7.128906 -0.804688 6.546875 -0.484375 C 5.972656 -0.160156 5.269531 0 4.4375 0 C 3.382812 0 2.546875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 4 -13 L 4 -10 L 8 -10 L 8 -8 L 4 -8 L 4 -3.5625 C 4 -2.894531 4.128906 -2.46875 4.390625 -2.28125 C 4.660156 -2.09375 5.195312 -2 6 -2 L 8 -2 L 8 0 L 6 0 C 4.488281 0 3.441406 -0.253906 2.859375 -0.765625 C 2.285156 -1.273438 2 -2.207031 2 -3.5625 L 2 -8 L 1 -8 L 1 -10 L 2 -10 L 2 -13 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 6.515625 0.546875 C 6.046875 1.972656 5.585938 2.90625 5.140625 3.34375 C 4.691406 3.78125 4.09375 4 3.34375 4 L 2 4 L 2 2 L 2.984375 2 C 3.328125 2 3.625 1.910156 3.875 1.734375 C 4.132812 1.554688 4.296875 1.140625 4.359375 0.484375 L 4.953125 -0.859375 L 0.5 -10 L 2.6875 -10 L 6.03125 -3.421875 L 9.328125 -10 L 11.5 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-16">
+<path style="stroke:none;" d="M 2 -2 L 4 -2 L 4 -0.25 L 2 3 L 1 3 L 2 -0.25 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-17">
+<path style="stroke:none;" d="M 9.671875 -7.65625 C 10.054688 -8.457031 10.515625 -9.046875 11.046875 -9.421875 C 11.585938 -9.804688 12.21875 -10 12.9375 -10 C 13.914062 -10 14.671875 -9.625 15.203125 -8.875 C 15.734375 -8.132812 16 -7.082031 16 -5.71875 L 16 0 L 14 0 L 14 -5.671875 C 14 -6.460938 13.859375 -7.046875 13.578125 -7.421875 C 13.296875 -7.804688 12.863281 -8 12.28125 -8 C 11.582031 -8 11.023438 -7.757812 10.609375 -7.28125 C 10.203125 -6.8125 10 -6.171875 10 -5.359375 L 10  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-18">
+<path style="stroke:none;" d="M 8 -5 C 8 -5.945312 7.78125 -6.679688 7.34375 -7.203125 C 6.90625 -7.734375 6.289062 -8 5.5 -8 C 4.707031 -8 4.09375 -7.734375 3.65625 -7.203125 C 3.21875 -6.679688 3 -5.945312 3 -5 C 3 -4.050781 3.21875 -3.3125 3.65625 -2.78125 C 4.09375 -2.257812 4.707031 -2 5.5 -2 C 6.289062 -2 6.90625 -2.257812 7.34375 -2.78125 C 7.78125 -3.3125 8 -4.050781 8 -5 Z M 10 -1.8125 C 10 0.144531 9.609375 1.601562 8.828125 2.5625 C 8.046875 3.519531 6.847656 4 5.234375 4 C 4. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-19">
+<path style="stroke:none;" d="M 9 -9 L 9 -7 C 8.550781 -7.332031 8.097656 -7.582031 7.640625 -7.75 C 7.191406 -7.914062 6.734375 -8 6.265625 -8 C 5.234375 -8 4.429688 -7.734375 3.859375 -7.203125 C 3.285156 -6.679688 3 -5.945312 3 -5 C 3 -4.050781 3.285156 -3.3125 3.859375 -2.78125 C 4.429688 -2.257812 5.234375 -2 6.265625 -2 C 6.734375 -2 7.191406 -2.082031 7.640625 -2.25 C 8.097656 -2.414062 8.550781 -2.664062 9 -3 L 9 -1 C 8.539062 -0.664062 8.0625 -0.414062 7.5625 -0.25 C 7.0625 -0.0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-20">
+<path style="stroke:none;" d="M 7 -14 L 7 -12 L 5.75 -12 C 5.09375 -12 4.632812 -11.90625 4.375 -11.71875 C 4.125 -11.53125 4 -11.191406 4 -10.703125 L 4 -10 L 7 -10 L 7 -8 L 4 -8 L 4 0 L 2 0 L 2 -8 L 0 -8 L 0 -10 L 2 -10 L 2 -10.546875 C 2 -11.742188 2.300781 -12.617188 2.90625 -13.171875 C 3.507812 -13.722656 4.460938 -14 5.765625 -14 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-21">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-22">
+<path style="stroke:none;" d="M 2 -4.28125 L 2 -10 L 4 -10 L 4 -4.34375 C 4 -3.5625 4.179688 -2.972656 4.546875 -2.578125 C 4.910156 -2.191406 5.453125 -2 6.171875 -2 C 7.046875 -2 7.734375 -2.234375 8.234375 -2.703125 C 8.742188 -3.179688 9 -3.828125 9 -4.640625 L 9 -10 L 11 -10 L 11 0 L 9 0 L 9 -2 C 8.582031 -1.320312 8.097656 -0.816406 7.546875 -0.484375 C 7.003906 -0.160156 6.375 0 5.65625 0 C 4.457031 0 3.546875 -0.363281 2.921875 -1.09375 C 2.304688 -1.820312 2 -2.882812 2 -4.28125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-23">
+<path style="stroke:none;" d="M 11 -5.71875 L 11 0 L 9 0 L 9 -5.671875 C 9 -6.453125 8.816406 -7.035156 8.453125 -7.421875 C 8.085938 -7.804688 7.546875 -8 6.828125 -8 C 5.953125 -8 5.257812 -7.757812 4.75 -7.28125 C 4.25 -6.8125 4 -6.171875 4 -5.359375 L 4 0 L 2 0 L 2 -14 L 4 -14 L 4 -8 C 4.40625 -8.664062 4.882812 -9.164062 5.4375 -9.5 C 6 -9.832031 6.640625 -10 7.359375 -10 C 8.554688 -10 9.460938 -9.632812 10.078125 -8.90625 C 10.691406 -8.1875 11 -7.125 11 -5.71875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-24">
+<path style="stroke:none;" d="M 9 -5 C 9 -5.9375 8.773438 -6.671875 8.328125 -7.203125 C 7.890625 -7.734375 7.28125 -8 6.5 -8 C 5.71875 -8 5.101562 -7.734375 4.65625 -7.203125 C 4.21875 -6.671875 4 -5.9375 4 -5 C 4 -4.0625 4.21875 -3.328125 4.65625 -2.796875 C 5.101562 -2.265625 5.71875 -2 6.5 -2 C 7.28125 -2 7.890625 -2.265625 8.328125 -2.796875 C 8.773438 -3.328125 9 -4.0625 9 -5 Z M 4 -8 C 4.332031 -8.675781 4.75 -9.175781 5.25 -9.5 C 5.757812 -9.832031 6.363281 -10 7.0625 -10 C 8.226 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-25">
+<path style="stroke:none;" d="M 1.75 -10 L 3.828125 -10 L 5.75 -2 L 7.953125 -10 L 10.046875 -10 L 12.25 -1.96875 L 14.171875 -10 L 16.25 -10 L 13.765625 0 L 11.25 0 L 9 -8.203125 L 6.75 0 L 4.234375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-26">
+<path style="stroke:none;" d="M 2 -2 L 4 -2 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-27">
+<path style="stroke:none;" d="M 2 -14 L 4 -14 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-28">
+<path style="stroke:none;" d="M 3 -14 L 3 -9 L 1 -9 L 1 -14 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-29">
+<path style="stroke:none;" d="M 0 -14 L 2.421875 -14 L 6 -8.75 L 9.578125 -14 L 12 -14 L 7 -6.671875 L 7 0 L 5 0 L 5 -6.671875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 C 2.46875 -4.046875 2.9375 -4.046875 3.34375 -4.046875 C 4.25 -4.046875 5.390625 -4.15625 5.96875 -4.328125 C 7.25 -4.71875 8.015625 -5.78125 8.015625 -7.328125 C 8.015625 -8.140625 7.734375 -8.78125 7.203125 -9.28125 C 6.5 -9.90625 5.71875 -10 4.21875 -10 Z M 3.46875 -4.953125 C 3.046875 -4.953125 2.546875 -4.953125 2.015625 -5.015625 L 2.015625 -9.078125 L 3.5 -9.078125 C 4.21875 -9.078125 4.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.640625 C 7.015625 -6.078125 6.140625 -7 4.546875 -7 C 3.78125 -7 2.9375 -6.796875 2.015625 -6.40625 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.5625 C 2.796875 -5.921875 3.5 -6.078125 4.09375 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z M 0.796875 -7 L 0.796875 -6.078125 L 2.015625 -6.078125 L 2.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.390625 L 7.484375 0 L 9.015625 0 L 9.015625 -10 L 7.796875 -10 L 7.796875 -1.625 L 2.328125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-10">
+<path style="stroke:none;" d="M 5.75 -7 L 3.828125 -4.21875 L 1.828125 -7 L 0.46875 -7 L 3.03125 -3.4375 L 0.5625 0 L 1.796875 0 L 3.609375 -2.625 L 5.5 0 L 6.859375 0 L 4.40625 -3.421875 L 7.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-11">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 0 0 L 818 0 L 818 46 L 0 46 Z "/>
+</clipPath>
+<clipPath id="clip2">
+  <path d="M 122 273 L 670 273 L 670 302 L 122 302 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 122 275 C 122 273.894531 122.894531 273 124 273 L 668 273 C 669.105469 273 670 273.449219 670 274 L 670 300 C 670 301.105469 669.105469 302 668 302 L 124 302 C 122.894531 302 122 301.550781 122 301 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,396,287.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image15976" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,121,272)">
+  <use xlink:href="#image15976"/>
+</pattern>
+<image id="image15979" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(54.4,0,0,1,124,272)">
+  <use xlink:href="#image15979"/>
+</pattern>
+<image id="image15984" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,668,272)">
+  <use xlink:href="#image15984"/>
+</pattern>
+<image id="image15989" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,121,275)">
+  <use xlink:href="#image15989"/>
+</pattern>
+<image id="image15994" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,668,275)">
+  <use xlink:href="#image15994"/>
+</pattern>
+<image id="image15999" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,121,300)">
+  <use xlink:href="#image15999"/>
+</pattern>
+<image id="image16004" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(54.4,0,0,1,124,300)">
+  <use xlink:href="#image16004"/>
+</pattern>
+<image id="image16009" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,668,300)">
+  <use xlink:href="#image16009"/>
+</pattern>
+<clipPath id="clip4">
+  <path d="M 41 345 L 87 345 L 87 374 L 41 374 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 41 347 C 41 345.894531 41.894531 345 43 345 L 85 345 C 86.105469 345 87 345.449219 87 346 L 87 372 C 87 373.105469 86.105469 374 85 374 L 43 374 C 41.894531 374 41 373.550781 41 373 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,64,359.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image16016" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,40,344)">
+  <use xlink:href="#image16016"/>
+</pattern>
+<image id="image16019" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.2,0,0,1,43,344)">
+  <use xlink:href="#image16019"/>
+</pattern>
+<image id="image16024" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,85,344)">
+  <use xlink:href="#image16024"/>
+</pattern>
+<image id="image16029" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,40,347)">
+  <use xlink:href="#image16029"/>
+</pattern>
+<image id="image16034" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,85,347)">
+  <use xlink:href="#image16034"/>
+</pattern>
+<image id="image16039" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,40,372)">
+  <use xlink:href="#image16039"/>
+</pattern>
+<image id="image16044" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.2,0,0,1,43,372)">
+  <use xlink:href="#image16044"/>
+</pattern>
+<image id="image16049" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,85,372)">
+  <use xlink:href="#image16049"/>
+</pattern>
+</defs>
+<g id="surface15970">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(20%,20%,33.333333%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 10 0 L 111 0 L 111 46 L 10 46 Z M 10 0 L 111 0 L 111 46 L 10 46 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="10" y="37"/>
+  <use xlink:href="#glyph0-2" x="35" y="37"/>
+  <use xlink:href="#glyph0-3" x="59" y="37"/>
+  <use xlink:href="#glyph0-4" x="85" y="37"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 76 L 778 76 L 778 122 L 40 122 Z M 40 76 L 778 76 L 778 122 L 40 122 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="40" y="113"/>
+  <use xlink:href="#glyph1-2" x="65" y="113"/>
+  <use xlink:href="#glyph1-3" x="90" y="113"/>
+  <use xlink:href="#glyph1-4" x="106" y="113"/>
+  <use xlink:href="#glyph1-5" x="119" y="113"/>
+  <use xlink:href="#glyph1-6" x="141" y="113"/>
+  <use xlink:href="#glyph1-7" x="166" y="113"/>
+  <use xlink:href="#glyph1-7" x="187" y="113"/>
+  <use xlink:href="#glyph1-8" x="208" y="113"/>
+  <use xlink:href="#glyph1-9" x="233" y="113"/>
+  <use xlink:href="#glyph1-10" x="258" y="113"/>
+  <use xlink:href="#glyph1-6" x="274" y="113"/>
+  <use xlink:href="#glyph1-7" x="299" y="113"/>
+  <use xlink:href="#glyph1-2" x="320" y="113"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 142 L 778 142 L 778 252 L 40 252 Z M 40 142 L 778 142 L 778 252 L 40 252 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="40" y="160"/>
+  <use xlink:href="#glyph2-2" x="51" y="160"/>
+  <use xlink:href="#glyph2-3" x="62" y="160"/>
+  <use xlink:href="#glyph2-4" x="74" y="160"/>
+  <use xlink:href="#glyph2-5" x="85" y="160"/>
+  <use xlink:href="#glyph2-6" x="91" y="160"/>
+  <use xlink:href="#glyph2-7" x="101" y="160"/>
+  <use xlink:href="#glyph2-7" x="112" y="160"/>
+  <use xlink:href="#glyph2-8" x="123" y="160"/>
+  <use xlink:href="#glyph2-9" x="134" y="160"/>
+  <use xlink:href="#glyph2-5" x="143" y="160"/>
+  <use xlink:href="#glyph2-8" x="149" y="160"/>
+  <use xlink:href="#glyph2-10" x="160" y="160"/>
+  <use xlink:href="#glyph2-11" x="168" y="160"/>
+  <use xlink:href="#glyph2-12" x="173" y="160"/>
+  <use xlink:href="#glyph2-13" x="184" y="160"/>
+  <use xlink:href="#glyph2-14" x="195" y="160"/>
+  <use xlink:href="#glyph2-7" x="203" y="160"/>
+  <use xlink:href="#glyph2-5" x="214" y="160"/>
+  <use xlink:href="#glyph2-6" x="220" y="160"/>
+  <use xlink:href="#glyph2-7" x="230" y="160"/>
+  <use xlink:href="#glyph2-15" x="241" y="160"/>
+  <use xlink:href="#glyph2-9" x="252" y="160"/>
+  <use xlink:href="#glyph2-16" x="261" y="160"/>
+  <use xlink:href="#glyph2-5" x="267" y="160"/>
+  <use xlink:href="#glyph2-17" x="273" y="160"/>
+  <use xlink:href="#glyph2-7" x="290" y="160"/>
+  <use xlink:href="#glyph2-9" x="301" y="160"/>
+  <use xlink:href="#glyph2-9" x="310" y="160"/>
+  <use xlink:href="#glyph2-13" x="319" y="160"/>
+  <use xlink:href="#glyph2-18" x="330" y="160"/>
+  <use xlink:href="#glyph2-7" x="341" y="160"/>
+  <use xlink:href="#glyph2-9" x="352" y="160"/>
+  <use xlink:href="#glyph2-5" x="361" y="160"/>
+  <use xlink:href="#glyph2-7" x="367" y="160"/>
+  <use xlink:href="#glyph2-14" x="378" y="160"/>
+  <use xlink:href="#glyph2-19" x="386" y="160"/>
+  <use xlink:href="#glyph2-5" x="395" y="160"/>
+  <use xlink:href="#glyph2-2" x="401" y="160"/>
+  <use xlink:href="#glyph2-3" x="412" y="160"/>
+  <use xlink:href="#glyph2-5" x="424" y="160"/>
+  <use xlink:href="#glyph2-4" x="430" y="160"/>
+  <use xlink:href="#glyph2-11" x="441" y="160"/>
+  <use xlink:href="#glyph2-9" x="446" y="160"/>
+  <use xlink:href="#glyph2-6" x="455" y="160"/>
+  <use xlink:href="#glyph2-5" x="466" y="160"/>
+  <use xlink:href="#glyph2-20" x="472" y="160"/>
+  <use xlink:href="#glyph2-2" x="478" y="160"/>
+  <use xlink:href="#glyph2-10" x="489" y="160"/>
+  <use xlink:href="#glyph2-5" x="497" y="160"/>
+  <use xlink:href="#glyph2-13" x="503" y="160"/>
+  <use xlink:href="#glyph2-5" x="514" y="160"/>
+  <use xlink:href="#glyph2-21" x="520" y="160"/>
+  <use xlink:href="#glyph2-11" x="525" y="160"/>
+  <use xlink:href="#glyph2-17" x="530" y="160"/>
+  <use xlink:href="#glyph2-11" x="547" y="160"/>
+  <use xlink:href="#glyph2-14" x="552" y="160"/>
+  <use xlink:href="#glyph2-7" x="560" y="160"/>
+  <use xlink:href="#glyph2-4" x="571" y="160"/>
+  <use xlink:href="#glyph2-5" x="582" y="160"/>
+  <use xlink:href="#glyph2-13" x="588" y="160"/>
+  <use xlink:href="#glyph2-17" x="599" y="160"/>
+  <use xlink:href="#glyph2-2" x="616" y="160"/>
+  <use xlink:href="#glyph2-22" x="627" y="160"/>
+  <use xlink:href="#glyph2-3" x="639" y="160"/>
+  <use xlink:href="#glyph2-14" x="651" y="160"/>
+  <use xlink:href="#glyph2-5" x="659" y="160"/>
+  <use xlink:href="#glyph2-2" x="665" y="160"/>
+  <use xlink:href="#glyph2-20" x="676" y="160"/>
+  <use xlink:href="#glyph2-5" x="682" y="160"/>
+  <use xlink:href="#glyph2-14" x="688" y="160"/>
+  <use xlink:href="#glyph2-11" x="696" y="160"/>
+  <use xlink:href="#glyph2-17" x="701" y="160"/>
+  <use xlink:href="#glyph2-7" x="718" y="160"/>
+  <use xlink:href="#glyph2-5" x="729" y="160"/>
+  <use xlink:href="#glyph2-13" x="735" y="160"/>
+  <use xlink:href="#glyph2-3" x="746" y="160"/>
+  <use xlink:href="#glyph2-4" x="758" y="160"/>
+  <use xlink:href="#glyph2-5" x="769" y="160"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-14" x="40" y="182"/>
+  <use xlink:href="#glyph2-23" x="48" y="182"/>
+  <use xlink:href="#glyph2-13" x="60" y="182"/>
+  <use xlink:href="#glyph2-14" x="71" y="182"/>
+  <use xlink:href="#glyph2-5" x="79" y="182"/>
+  <use xlink:href="#glyph2-11" x="85" y="182"/>
+  <use xlink:href="#glyph2-3" x="90" y="182"/>
+  <use xlink:href="#glyph2-20" x="102" y="182"/>
+  <use xlink:href="#glyph2-2" x="108" y="182"/>
+  <use xlink:href="#glyph2-10" x="119" y="182"/>
+  <use xlink:href="#glyph2-17" x="127" y="182"/>
+  <use xlink:href="#glyph2-13" x="144" y="182"/>
+  <use xlink:href="#glyph2-14" x="155" y="182"/>
+  <use xlink:href="#glyph2-11" x="163" y="182"/>
+  <use xlink:href="#glyph2-2" x="168" y="182"/>
+  <use xlink:href="#glyph2-3" x="179" y="182"/>
+  <use xlink:href="#glyph2-5" x="191" y="182"/>
+  <use xlink:href="#glyph2-19" x="197" y="182"/>
+  <use xlink:href="#glyph2-13" x="206" y="182"/>
+  <use xlink:href="#glyph2-3" x="217" y="182"/>
+  <use xlink:href="#glyph2-5" x="229" y="182"/>
+  <use xlink:href="#glyph2-24" x="235" y="182"/>
+  <use xlink:href="#glyph2-7" x="246" y="182"/>
+  <use xlink:href="#glyph2-5" x="257" y="182"/>
+  <use xlink:href="#glyph2-7" x="263" y="182"/>
+  <use xlink:href="#glyph2-3" x="274" y="182"/>
+  <use xlink:href="#glyph2-19" x="286" y="182"/>
+  <use xlink:href="#glyph2-10" x="295" y="182"/>
+  <use xlink:href="#glyph2-15" x="303" y="182"/>
+  <use xlink:href="#glyph2-8" x="314" y="182"/>
+  <use xlink:href="#glyph2-14" x="325" y="182"/>
+  <use xlink:href="#glyph2-7" x="333" y="182"/>
+  <use xlink:href="#glyph2-4" x="344" y="182"/>
+  <use xlink:href="#glyph2-5" x="355" y="182"/>
+  <use xlink:href="#glyph2-25" x="361" y="182"/>
+  <use xlink:href="#glyph2-11" x="378" y="182"/>
+  <use xlink:href="#glyph2-14" x="383" y="182"/>
+  <use xlink:href="#glyph2-23" x="391" y="182"/>
+  <use xlink:href="#glyph2-5" x="403" y="182"/>
+  <use xlink:href="#glyph2-13" x="409" y="182"/>
+  <use xlink:href="#glyph2-5" x="420" y="182"/>
+  <use xlink:href="#glyph2-8" x="426" y="182"/>
+  <use xlink:href="#glyph2-13" x="437" y="182"/>
+  <use xlink:href="#glyph2-9" x="448" y="182"/>
+  <use xlink:href="#glyph2-9" x="457" y="182"/>
+  <use xlink:href="#glyph2-8" x="466" y="182"/>
+  <use xlink:href="#glyph2-23" x="477" y="182"/>
+  <use xlink:href="#glyph2-10" x="489" y="182"/>
+  <use xlink:href="#glyph2-13" x="497" y="182"/>
+  <use xlink:href="#glyph2-9" x="508" y="182"/>
+  <use xlink:href="#glyph2-7" x="517" y="182"/>
+  <use xlink:href="#glyph2-26" x="528" y="182"/>
+  <use xlink:href="#glyph2-5" x="534" y="182"/>
+  <use xlink:href="#glyph2-27" x="540" y="182"/>
+  <use xlink:href="#glyph2-20" x="546" y="182"/>
+  <use xlink:href="#glyph2-5" x="552" y="182"/>
+  <use xlink:href="#glyph2-15" x="558" y="182"/>
+  <use xlink:href="#glyph2-2" x="569" y="182"/>
+  <use xlink:href="#glyph2-22" x="580" y="182"/>
+  <use xlink:href="#glyph2-5" x="592" y="182"/>
+  <use xlink:href="#glyph2-13" x="598" y="182"/>
+  <use xlink:href="#glyph2-10" x="609" y="182"/>
+  <use xlink:href="#glyph2-7" x="617" y="182"/>
+  <use xlink:href="#glyph2-5" x="628" y="182"/>
+  <use xlink:href="#glyph2-19" x="634" y="182"/>
+  <use xlink:href="#glyph2-2" x="643" y="182"/>
+  <use xlink:href="#glyph2-17" x="654" y="182"/>
+  <use xlink:href="#glyph2-20" x="671" y="182"/>
+  <use xlink:href="#glyph2-2" x="677" y="182"/>
+  <use xlink:href="#glyph2-10" x="688" y="182"/>
+  <use xlink:href="#glyph2-14" x="696" y="182"/>
+  <use xlink:href="#glyph2-13" x="704" y="182"/>
+  <use xlink:href="#glyph2-24" x="715" y="182"/>
+  <use xlink:href="#glyph2-21" x="726" y="182"/>
+  <use xlink:href="#glyph2-7" x="731" y="182"/>
+  <use xlink:href="#glyph2-5" x="742" y="182"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-25" x="40" y="204"/>
+  <use xlink:href="#glyph2-11" x="57" y="204"/>
+  <use xlink:href="#glyph2-14" x="62" y="204"/>
+  <use xlink:href="#glyph2-23" x="70" y="204"/>
+  <use xlink:href="#glyph2-5" x="82" y="204"/>
+  <use xlink:href="#glyph2-14" x="88" y="204"/>
+  <use xlink:href="#glyph2-23" x="96" y="204"/>
+  <use xlink:href="#glyph2-7" x="108" y="204"/>
+  <use xlink:href="#glyph2-5" x="119" y="204"/>
+  <use xlink:href="#glyph2-9" x="125" y="204"/>
+  <use xlink:href="#glyph2-7" x="134" y="204"/>
+  <use xlink:href="#glyph2-19" x="145" y="204"/>
+  <use xlink:href="#glyph2-22" x="154" y="204"/>
+  <use xlink:href="#glyph2-10" x="166" y="204"/>
+  <use xlink:href="#glyph2-11" x="174" y="204"/>
+  <use xlink:href="#glyph2-14" x="179" y="204"/>
+  <use xlink:href="#glyph2-15" x="187" y="204"/>
+  <use xlink:href="#glyph2-5" x="198" y="204"/>
+  <use xlink:href="#glyph2-2" x="204" y="204"/>
+  <use xlink:href="#glyph2-20" x="215" y="204"/>
+  <use xlink:href="#glyph2-5" x="221" y="204"/>
+  <use xlink:href="#glyph2-15" x="227" y="204"/>
+  <use xlink:href="#glyph2-2" x="238" y="204"/>
+  <use xlink:href="#glyph2-22" x="249" y="204"/>
+  <use xlink:href="#glyph2-10" x="261" y="204"/>
+  <use xlink:href="#glyph2-5" x="269" y="204"/>
+  <use xlink:href="#glyph2-23" x="275" y="204"/>
+  <use xlink:href="#glyph2-2" x="287" y="204"/>
+  <use xlink:href="#glyph2-17" x="298" y="204"/>
+  <use xlink:href="#glyph2-7" x="315" y="204"/>
+  <use xlink:href="#glyph2-5" x="326" y="204"/>
+  <use xlink:href="#glyph2-4" x="332" y="204"/>
+  <use xlink:href="#glyph2-11" x="343" y="204"/>
+  <use xlink:href="#glyph2-10" x="348" y="204"/>
+  <use xlink:href="#glyph2-7" x="356" y="204"/>
+  <use xlink:href="#glyph2-19" x="367" y="204"/>
+  <use xlink:href="#glyph2-14" x="376" y="204"/>
+  <use xlink:href="#glyph2-2" x="384" y="204"/>
+  <use xlink:href="#glyph2-10" x="395" y="204"/>
+  <use xlink:href="#glyph2-15" x="403" y="204"/>
+  <use xlink:href="#glyph2-16" x="414" y="204"/>
+  <use xlink:href="#glyph2-5" x="420" y="204"/>
+  <use xlink:href="#glyph2-14" x="426" y="204"/>
+  <use xlink:href="#glyph2-23" x="434" y="204"/>
+  <use xlink:href="#glyph2-11" x="446" y="204"/>
+  <use xlink:href="#glyph2-9" x="451" y="204"/>
+  <use xlink:href="#glyph2-5" x="460" y="204"/>
+  <use xlink:href="#glyph2-8" x="466" y="204"/>
+  <use xlink:href="#glyph2-13" x="477" y="204"/>
+  <use xlink:href="#glyph2-9" x="488" y="204"/>
+  <use xlink:href="#glyph2-9" x="497" y="204"/>
+  <use xlink:href="#glyph2-8" x="506" y="204"/>
+  <use xlink:href="#glyph2-23" x="517" y="204"/>
+  <use xlink:href="#glyph2-10" x="529" y="204"/>
+  <use xlink:href="#glyph2-13" x="537" y="204"/>
+  <use xlink:href="#glyph2-9" x="548" y="204"/>
+  <use xlink:href="#glyph2-7" x="557" y="204"/>
+  <use xlink:href="#glyph2-5" x="568" y="204"/>
+  <use xlink:href="#glyph2-19" x="574" y="204"/>
+  <use xlink:href="#glyph2-13" x="583" y="204"/>
+  <use xlink:href="#glyph2-3" x="594" y="204"/>
+  <use xlink:href="#glyph2-5" x="606" y="204"/>
+  <use xlink:href="#glyph2-24" x="612" y="204"/>
+  <use xlink:href="#glyph2-7" x="623" y="204"/>
+  <use xlink:href="#glyph2-5" x="634" y="204"/>
+  <use xlink:href="#glyph2-7" x="640" y="204"/>
+  <use xlink:href="#glyph2-17" x="651" y="204"/>
+  <use xlink:href="#glyph2-8" x="668" y="204"/>
+  <use xlink:href="#glyph2-14" x="679" y="204"/>
+  <use xlink:href="#glyph2-15" x="687" y="204"/>
+  <use xlink:href="#glyph2-5" x="698" y="204"/>
+  <use xlink:href="#glyph2-13" x="704" y="204"/>
+  <use xlink:href="#glyph2-3" x="715" y="204"/>
+  <use xlink:href="#glyph2-4" x="727" y="204"/>
+  <use xlink:href="#glyph2-5" x="738" y="204"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-15" x="40" y="226"/>
+  <use xlink:href="#glyph2-2" x="51" y="226"/>
+  <use xlink:href="#glyph2-22" x="62" y="226"/>
+  <use xlink:href="#glyph2-5" x="74" y="226"/>
+  <use xlink:href="#glyph2-25" x="80" y="226"/>
+  <use xlink:href="#glyph2-2" x="97" y="226"/>
+  <use xlink:href="#glyph2-3" x="108" y="226"/>
+  <use xlink:href="#glyph2-28" x="120" y="226"/>
+  <use xlink:href="#glyph2-14" x="124" y="226"/>
+  <use xlink:href="#glyph2-5" x="132" y="226"/>
+  <use xlink:href="#glyph2-24" x="138" y="226"/>
+  <use xlink:href="#glyph2-7" x="149" y="226"/>
+  <use xlink:href="#glyph2-5" x="160" y="226"/>
+  <use xlink:href="#glyph2-8" x="166" y="226"/>
+  <use xlink:href="#glyph2-10" x="177" y="226"/>
+  <use xlink:href="#glyph2-2" x="185" y="226"/>
+  <use xlink:href="#glyph2-17" x="196" y="226"/>
+  <use xlink:href="#glyph2-8" x="213" y="226"/>
+  <use xlink:href="#glyph2-14" x="224" y="226"/>
+  <use xlink:href="#glyph2-7" x="232" y="226"/>
+  <use xlink:href="#glyph2-4" x="243" y="226"/>
+  <use xlink:href="#glyph2-5" x="254" y="226"/>
+  <use xlink:href="#glyph2-20" x="260" y="226"/>
+  <use xlink:href="#glyph2-2" x="266" y="226"/>
+  <use xlink:href="#glyph2-10" x="277" y="226"/>
+  <use xlink:href="#glyph2-5" x="285" y="226"/>
+  <use xlink:href="#glyph2-11" x="291" y="226"/>
+  <use xlink:href="#glyph2-14" x="296" y="226"/>
+  <use xlink:href="#glyph2-5" x="304" y="226"/>
+  <use xlink:href="#glyph2-13" x="310" y="226"/>
+  <use xlink:href="#glyph2-18" x="321" y="226"/>
+  <use xlink:href="#glyph2-13" x="332" y="226"/>
+  <use xlink:href="#glyph2-11" x="343" y="226"/>
+  <use xlink:href="#glyph2-3" x="348" y="226"/>
+  <use xlink:href="#glyph2-26" x="360" y="226"/>
+  <use xlink:href="#glyph2-5" x="366" y="226"/>
+  <use xlink:href="#glyph2-27" x="372" y="226"/>
+  <use xlink:href="#glyph2-20" x="378" y="226"/>
+  <use xlink:href="#glyph2-5" x="384" y="226"/>
+  <use xlink:href="#glyph2-15" x="390" y="226"/>
+  <use xlink:href="#glyph2-2" x="401" y="226"/>
+  <use xlink:href="#glyph2-22" x="412" y="226"/>
+  <use xlink:href="#glyph2-5" x="424" y="226"/>
+  <use xlink:href="#glyph2-9" x="430" y="226"/>
+  <use xlink:href="#glyph2-7" x="439" y="226"/>
+  <use xlink:href="#glyph2-14" x="450" y="226"/>
+  <use xlink:href="#glyph2-5" x="458" y="226"/>
+  <use xlink:href="#glyph2-13" x="464" y="226"/>
+  <use xlink:href="#glyph2-5" x="475" y="226"/>
+  <use xlink:href="#glyph2-8" x="481" y="226"/>
+  <use xlink:href="#glyph2-13" x="492" y="226"/>
+  <use xlink:href="#glyph2-9" x="503" y="226"/>
+  <use xlink:href="#glyph2-9" x="512" y="226"/>
+  <use xlink:href="#glyph2-8" x="521" y="226"/>
+  <use xlink:href="#glyph2-23" x="532" y="226"/>
+  <use xlink:href="#glyph2-10" x="544" y="226"/>
+  <use xlink:href="#glyph2-13" x="552" y="226"/>
+  <use xlink:href="#glyph2-9" x="563" y="226"/>
+  <use xlink:href="#glyph2-7" x="572" y="226"/>
+  <use xlink:href="#glyph2-5" x="583" y="226"/>
+  <use xlink:href="#glyph2-13" x="589" y="226"/>
+  <use xlink:href="#glyph2-3" x="600" y="226"/>
+  <use xlink:href="#glyph2-4" x="612" y="226"/>
+  <use xlink:href="#glyph2-5" x="623" y="226"/>
+  <use xlink:href="#glyph2-20" x="629" y="226"/>
+  <use xlink:href="#glyph2-2" x="635" y="226"/>
+  <use xlink:href="#glyph2-10" x="646" y="226"/>
+  <use xlink:href="#glyph2-18" x="654" y="226"/>
+  <use xlink:href="#glyph2-7" x="665" y="226"/>
+  <use xlink:href="#glyph2-14" x="676" y="226"/>
+  <use xlink:href="#glyph2-5" x="684" y="226"/>
+  <use xlink:href="#glyph2-11" x="690" y="226"/>
+  <use xlink:href="#glyph2-14" x="695" y="226"/>
+  <use xlink:href="#glyph2-16" x="703" y="226"/>
+  <use xlink:href="#glyph2-5" x="709" y="226"/>
+  <use xlink:href="#glyph2-11" x="715" y="226"/>
+  <use xlink:href="#glyph2-14" x="720" y="226"/>
+  <use xlink:href="#glyph2-5" x="728" y="226"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-19" x="40" y="248"/>
+  <use xlink:href="#glyph2-13" x="49" y="248"/>
+  <use xlink:href="#glyph2-3" x="60" y="248"/>
+  <use xlink:href="#glyph2-3" x="72" y="248"/>
+  <use xlink:href="#glyph2-2" x="84" y="248"/>
+  <use xlink:href="#glyph2-14" x="95" y="248"/>
+  <use xlink:href="#glyph2-5" x="103" y="248"/>
+  <use xlink:href="#glyph2-24" x="109" y="248"/>
+  <use xlink:href="#glyph2-7" x="120" y="248"/>
+  <use xlink:href="#glyph2-5" x="131" y="248"/>
+  <use xlink:href="#glyph2-10" x="137" y="248"/>
+  <use xlink:href="#glyph2-7" x="145" y="248"/>
+  <use xlink:href="#glyph2-19" x="156" y="248"/>
+  <use xlink:href="#glyph2-2" x="165" y="248"/>
+  <use xlink:href="#glyph2-12" x="176" y="248"/>
+  <use xlink:href="#glyph2-7" x="187" y="248"/>
+  <use xlink:href="#glyph2-10" x="198" y="248"/>
+  <use xlink:href="#glyph2-7" x="206" y="248"/>
+  <use xlink:href="#glyph2-4" x="217" y="248"/>
+  <use xlink:href="#glyph2-26" x="228" y="248"/>
+  <use xlink:href="#glyph2-5" x="234" y="248"/>
+  <use xlink:href="#glyph2-29" x="240" y="248"/>
+  <use xlink:href="#glyph2-2" x="249" y="248"/>
+  <use xlink:href="#glyph2-22" x="260" y="248"/>
+  <use xlink:href="#glyph2-5" x="272" y="248"/>
+  <use xlink:href="#glyph2-25" x="278" y="248"/>
+  <use xlink:href="#glyph2-11" x="295" y="248"/>
+  <use xlink:href="#glyph2-21" x="300" y="248"/>
+  <use xlink:href="#glyph2-21" x="305" y="248"/>
+  <use xlink:href="#glyph2-5" x="310" y="248"/>
+  <use xlink:href="#glyph2-23" x="316" y="248"/>
+  <use xlink:href="#glyph2-13" x="328" y="248"/>
+  <use xlink:href="#glyph2-12" x="339" y="248"/>
+  <use xlink:href="#glyph2-7" x="350" y="248"/>
+  <use xlink:href="#glyph2-5" x="361" y="248"/>
+  <use xlink:href="#glyph2-14" x="367" y="248"/>
+  <use xlink:href="#glyph2-2" x="375" y="248"/>
+  <use xlink:href="#glyph2-5" x="386" y="248"/>
+  <use xlink:href="#glyph2-9" x="392" y="248"/>
+  <use xlink:href="#glyph2-14" x="401" y="248"/>
+  <use xlink:href="#glyph2-13" x="409" y="248"/>
+  <use xlink:href="#glyph2-10" x="420" y="248"/>
+  <use xlink:href="#glyph2-14" x="428" y="248"/>
+  <use xlink:href="#glyph2-5" x="436" y="248"/>
+  <use xlink:href="#glyph2-13" x="442" y="248"/>
+  <use xlink:href="#glyph2-20" x="453" y="248"/>
+  <use xlink:href="#glyph2-10" x="459" y="248"/>
+  <use xlink:href="#glyph2-7" x="467" y="248"/>
+  <use xlink:href="#glyph2-9" x="478" y="248"/>
+  <use xlink:href="#glyph2-23" x="487" y="248"/>
+  <use xlink:href="#glyph2-26" x="499" y="248"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 40 272 L 116 272 L 116 304 L 40 304 Z M 40 272 L 116 272 L 116 304 L 40 304 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="40" y="293"/>
+  <use xlink:href="#glyph3-2" x="49" y="293"/>
+  <use xlink:href="#glyph3-3" x="56" y="293"/>
+  <use xlink:href="#glyph3-3" x="63" y="293"/>
+  <use xlink:href="#glyph3-4" x="70" y="293"/>
+  <use xlink:href="#glyph3-5" x="78" y="293"/>
+  <use xlink:href="#glyph3-6" x="86" y="293"/>
+  <use xlink:href="#glyph3-2" x="91" y="293"/>
+  <use xlink:href="#glyph3-3" x="98" y="293"/>
+  <use xlink:href="#glyph3-7" x="105" y="293"/>
+  <use xlink:href="#glyph3-8" x="113" y="293"/>
+</g>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="818" height="468" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 122 273 L 670 273 L 670 302 L 122 302 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 122 276 C 122 274.894531 122.894531 274 124 274 L 668 274 C 669.105469 274 670 274.449219 670 275 L 670 301 C 670 302.105469 669.105469 303 668 303 L 124 303 C 122.894531 303 122 302.550781 122 302 Z M 122 273 L 670 273 L 670 302 L 122 302 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 122 277 C 122 275.894531 122.894531 275 124 275 L 668 275 C 669.105469 275 670 275.449219 670 276 L 670 302 C 670 303.105469 669.105469 304 668 304 L 124 304 C 122.894531 304 122 303.550781 122 303 Z M 122 273 L 670 273 L 670 302 L 122 302 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 121 272 L 124 272 L 124 275 L 121 275 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 124 272 L 668 272 L 668 275 L 124 275 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 668 272 L 671 272 L 671 275 L 668 275 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 121 275 L 124 275 L 124 300 L 121 300 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 668 275 L 671 275 L 671 300 L 668 300 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 121 300 L 124 300 L 124 304 L 121 304 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 124 300 L 668 300 L 668 304 L 124 304 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 668 300 L 671 300 L 671 304 L 668 304 Z "/>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 41 345 L 87 345 L 87 374 L 41 374 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 40 344 L 43 344 L 43 347 L 40 347 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 43 344 L 85 344 L 85 347 L 43 347 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 85 344 L 88 344 L 88 347 L 85 347 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 40 347 L 43 347 L 43 372 L 40 372 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 85 347 L 88 347 L 88 372 L 85 372 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 40 372 L 43 372 L 43 376 L 40 376 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 43 372 L 85 372 L 85 376 L 43 376 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 85 372 L 88 372 L 88 376 L 85 376 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 48 349 L 80 349 L 80 370 L 48 370 Z M 48 349 L 80 349 L 80 370 L 48 370 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph3-9" x="48" y="366"/>
+  <use xlink:href="#glyph3-7" x="58" y="366"/>
+  <use xlink:href="#glyph3-10" x="66" y="366"/>
+  <use xlink:href="#glyph3-11" x="74" y="366"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph3-9" x="48" y="365"/>
+  <use xlink:href="#glyph3-7" x="58" y="365"/>
+  <use xlink:href="#glyph3-10" x="66" y="365"/>
+  <use xlink:href="#glyph3-11" x="74" y="365"/>
+</g>
+</g>
+</svg>
diff --git a/doc/images/shared-secret.svg b/doc/images/shared-secret.svg
new file mode 100644
index 0000000..7660bcd
--- /dev/null
+++ b/doc/images/shared-secret.svg
@@ -0,0 +1,4452 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1 0 L 6.921875 0 L 6.921875 -7 L 1 -7 Z M 1.78125 -0.78125 L 1.78125 -6.21875 L 6.140625 -6.21875 L 6.140625 -0.78125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 8.34375 -8.640625 L 8.671875 -9.546875 C 7.71875 -9.859375 6.984375 -10 5.671875 -10 C 4.21875 -10 2.953125 -9.359375 2.1875 -8.59375 C 1.390625 -7.796875 0.796875 -6.53125 0.796875 -5.015625 C 0.796875 -3.53125 1.25 -2.328125 2.15625 -1.390625 C 2.96875 -0.578125 4.203125 0 5.8125 0 C 6.9375 0 7.921875 -0.171875 8.8125 -0.515625 L 8.5 -1.40625 C 7.703125 -1.078125 6.921875 -0.921875 6.109375 -0.921875 C 5.296875 -0.921875 4.578125 -1.078125 3.96875 -1.421 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 4.40625 -6.078125 C 5.984375 -6.078125 6.796875 -4.921875 6.796875 -3.484375 C 6.796875 -2.0625 6 -0.921875 4.40625 -0.921875 C 2.828125 -0.921875 2.015625 -2.078125 2.015625 -3.484375 C 2.015625 -4.90625 2.859375 -6.078125 4.40625 -6.078125 Z M 4.375 0 C 6.671875 0 8.015625 -1.40625 8.015625 -3.5 C 8.015625 -5.625 6.734375 -7 4.421875 -7 C 2.125 -7 0.796875 -5.625 0.796875 -3.5 C 0.796875 -1.390625 2.078125 0 4.375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 8.796875 -4.375 L 8.796875 0 L 10.015625 0 L 10.015625 -4.640625 C 10.015625 -6.015625 9.3125 -7 7.953125 -7 C 7.65625 -7 7.328125 -6.9375 6.984375 -6.859375 C 6.6875 -6.765625 6.234375 -6.546875 5.640625 -6.140625 C 5.296875 -6.625 4.703125 -7 3.921875 -7 C 3.625 -7 3.328125 -6.953125 2.984375 -6.875 C 2.703125 -6.796875 2.328125 -6.640625 1.875 -6.390625 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.546875 C 2.59375 -5.890625 3.0937 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 3.5625 -6.078125 C 5.0625 -6.078125 5.796875 -5.015625 5.796875 -3.515625 C 5.796875 -2.03125 5.015625 -0.921875 3.546875 -0.921875 C 3.015625 -0.921875 2.5 -1.03125 2.015625 -1.234375 L 2.015625 -5.65625 C 2.5 -5.921875 2.859375 -6.078125 3.5625 -6.078125 Z M 2.015625 4 L 2.015625 -0.34375 C 2.546875 -0.109375 3.109375 0 3.671875 0 C 4.609375 0 5.390625 -0.3125 6.015625 -0.90625 C 6.6875 -1.546875 7.015625 -2.4375 7.015625 -3.59375 C 7.015625 -4.984375 6. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.265625 -0.921875 C 2.40625 -0.921875 1.578125 -1.09375 0.796875 -1.390625 L 0.796875 -0.375 C 1.421875 -0.125 2.28125 0 3.34375 0 C 4.421875 0 5.1875 -0.3125 5.65625 -0.90625 C 5.90625 -1.203125 6.015625 -1.578125 6.015625 -1.953125 C 6.015625 -2.390625 5.84375 -2.859375 5.546875 -3.171875 C 5.28125 -3.453125 4.671875 -3.703125 3.703125 -4.03125 L 3.0625 -4.265625 C 2.75 -4.375 2.53125 -4.5 2.421875 -4.5625 C 2.171875 -4.71875 2 -4.859375 2 -5.25 C 2 -5. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 4.0625 -7 C 3.015625 -7 2.21875 -6.640625 1.640625 -5.953125 C 1.078125 -5.25 0.796875 -4.40625 0.796875 -3.390625 C 0.796875 -1.203125 2.078125 0 4.4375 0 C 5.21875 0 6 -0.109375 6.734375 -0.34375 L 6.734375 -1.21875 C 6.03125 -1.015625 5.390625 -0.921875 4.75 -0.921875 C 3.84375 -0.921875 3.171875 -1.109375 2.75 -1.515625 C 2.328125 -1.921875 2.09375 -2.421875 2.046875 -3.046875 L 6.9375 -3.046875 L 7.015625 -3.15625 L 7.015625 -3.796875 C 7.015625 -5.81 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 3.921875 -10 L 0.296875 0 L 1.421875 0 L 2.453125 -2.890625 L 6.65625 -2.890625 L 7.6875 0 L 8.921875 0 L 5.296875 -10 Z M 4.5625 -8.828125 L 6.28125 -3.921875 L 2.8125 -3.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 4.25 -0.921875 C 2.734375 -0.921875 2.015625 -1.984375 2.015625 -3.5 C 2.015625 -4.984375 2.734375 -6.078125 4.265625 -6.078125 C 4.8125 -6.078125 5.296875 -6 5.796875 -5.78125 L 5.796875 -1.34375 C 5.3125 -1.078125 4.953125 -0.921875 4.25 -0.921875 Z M 3.96875 0 C 4.65625 0 5.3125 -0.1875 5.9375 -0.578125 L 6.15625 0 L 7.015625 0 L 7.015625 -10 L 5.796875 -10 L 5.796875 -6.671875 C 5.265625 -6.890625 4.703125 -7 4.140625 -7 C 3.1875 -7 2.40625 -6.703125 1 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 5.796875 -7.59375 C 5.796875 -6.515625 4.953125 -5.953125 3.25 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 3.875 -9.078125 C 5.046875 -9.078125 5.796875 -8.59375 5.796875 -7.59375 Z M 6.796875 -2.921875 C 6.796875 -1.484375 5.625 -0.921875 4.265625 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 3.796875 -5.046875 C 3.890625 -5.046875 4 -5.046875 4.09375 -5.046875 C 5.5625 -5.046875 6.796875 -4.375 6.796875 -2.921875 Z M 5.65625 -5.78125 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 5.796875 -0.453125 L 5.796875 -0.21875 C 5.796875 0.265625 5.796875 0.609375 5.765625 0.84375 C 5.625 2.234375 4.78125 3.078125 3.390625 3.078125 C 2.875 3.078125 2.328125 2.953125 1.734375 2.703125 L 1.375 3.5625 C 1.953125 3.8125 2.84375 4 3.53125 4 C 4.59375 4 5.515625 3.625 6.078125 3.09375 C 6.78125 2.421875 7.015625 1.765625 7.015625 0.4375 L 7.015625 -7 L 6.15625 -7 L 6.015625 -6.546875 L 5.6875 -6.671875 C 5.09375 -6.890625 4.546875 -7 4.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d="M 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.65625 C 7.015625 -6.09375 6.15625 -7 4.546875 -7 C 3.765625 -7 2.828125 -6.796875 1.875 -6.421875 L 1.640625 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.796875 -5.90625 3.546875 -6.078125 4.140625 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 8 -10 L 1 -10 L 1 -9.078125 L 6.59375 -9.078125 L 2.1875 0 L 3.53125 0 L 8 -9.390625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -8.28125 L 5.265625 -2.859375 L 6.546875 -2.859375 L 9.796875 -8.28125 L 9.796875 0 L 11.015625 0 L 11.015625 -10 L 9.40625 -10 L 5.921875 -3.921875 L 2.53125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-15">
+<path style="stroke:none;" d="M 2.015625 -2.625 L 2.015625 -7 L 0.796875 -7 L 0.796875 -2.34375 C 0.796875 -0.90625 1.671875 0 3.28125 0 C 4.078125 0 4.984375 -0.21875 5.9375 -0.625 L 6.171875 0 L 7.015625 0 L 7.015625 -7 L 5.796875 -7 L 5.796875 -1.484375 C 5.015625 -1.15625 4.3125 -0.984375 3.6875 -0.984375 C 2.453125 -0.984375 2.015625 -1.5 2.015625 -2.625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-16">
+<path style="stroke:none;" d="M 3.78125 0 C 4.28125 0 4.8125 -0.078125 5.359375 -0.25 L 5.359375 -1.125 C 4.96875 -1.03125 4.578125 -0.96875 4.15625 -0.96875 C 3.25 -0.96875 3.015625 -1.4375 3.015625 -2.359375 L 3.015625 -6.078125 L 5.359375 -6.078125 L 5.359375 -7 L 3.015625 -7 L 3.015625 -9 L 1.796875 -9 L 1.796875 -7 L 0.59375 -7 L 0.59375 -6.078125 L 1.796875 -6.078125 L 1.796875 -2.265625 C 1.796875 -0.8125 2.296875 0 3.78125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-17">
+<path style="stroke:none;" d="M 6.015625 -10 L 4.515625 -10 L 1.703125 -9 L 2.171875 -7.984375 L 4.796875 -8.84375 L 4.796875 -1.046875 L 2 -1.046875 L 2 0 L 8 0 L 8 -1.046875 L 6.015625 -1.046875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-18">
+<path style="stroke:none;" d="M 8.015625 -3.703125 C 8.015625 -4.59375 7.75 -5.328125 7.234375 -5.90625 C 6.59375 -6.609375 5.734375 -6.953125 4.6875 -6.953125 C 3.578125 -6.953125 2.703125 -6.578125 2.15625 -6.0625 C 2.203125 -6.328125 2.25 -6.53125 2.3125 -6.703125 C 2.71875 -8.203125 4.09375 -9.078125 6.359375 -9.078125 C 6.640625 -9.078125 6.921875 -9.078125 7.21875 -9.046875 L 7.296875 -9.96875 C 7 -10 6.6875 -10 6.375 -10 C 5.625 -10 4.9375 -9.90625 4.265625 -9.71875 C 1.953125 -9. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-19">
+<path style="stroke:none;" d="M 7.796875 -10 L 7.796875 -4.953125 L 2.015625 -4.953125 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 L 7.796875 -4.046875 L 7.796875 0 L 9.015625 0 L 9.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-20">
+<path style="stroke:none;" d="M 3.875 -7 C 3.1875 -7 2.53125 -6.796875 1.90625 -6.375 L 1.671875 -7 L 0.796875 -7 L 0.796875 0 L 2.015625 0 L 2.015625 -5.578125 C 2.515625 -5.90625 3.046875 -6.078125 3.625 -6.078125 C 3.96875 -6.078125 4.328125 -6 4.6875 -5.859375 L 4.84375 -5.859375 L 4.84375 -6.890625 C 4.53125 -6.953125 4.203125 -7 3.875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-21">
+<path style="stroke:none;" d="M 4.8125 -10 C 3.890625 -10 2.90625 -9.78125 1.890625 -9.390625 L 2.28125 -8.5 C 3.1875 -8.890625 3.984375 -9.078125 4.640625 -9.078125 C 5.734375 -9.078125 6.796875 -8.578125 6.796875 -7.6875 C 6.796875 -7.328125 6.6875 -7.015625 6.4375 -6.734375 C 5.96875 -6.21875 5.078125 -5.953125 3.796875 -5.953125 L 3.796875 -5.046875 L 3.921875 -5.046875 C 4.796875 -5.046875 5.453125 -4.890625 5.9375 -4.5625 C 6.515625 -4.171875 6.796875 -3.640625 6.796875 -3 C 6.7968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-22">
+<path style="stroke:none;" d="M 4.984375 -9.078125 C 5.46875 -9.078125 5.890625 -8.9375 6.28125 -8.671875 C 7.28125 -7.96875 7.796875 -6.796875 7.796875 -5.125 C 7.796875 -3.296875 7.265625 -2 6.21875 -1.296875 C 5.828125 -1.046875 5.421875 -0.921875 4.9375 -0.921875 C 4.484375 -0.921875 4.03125 -1.046875 3.640625 -1.265625 C 2.578125 -1.9375 2.015625 -3.28125 2.015625 -5.21875 C 2.015625 -7.234375 2.953125 -9.078125 4.984375 -9.078125 Z M 0.796875 -5.140625 C 0.796875 -2.84375 1.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-23">
+<path style="stroke:none;" d="M 1.8125 -9.296875 L 2.09375 -8.40625 L 3.25 -8.78125 C 3.890625 -8.984375 4.3125 -9.078125 4.796875 -9.078125 C 5.5 -9.078125 6.0625 -8.859375 6.53125 -8.40625 C 6.875 -8.078125 7.046875 -7.703125 7.046875 -7.3125 C 7.046875 -7.171875 7.015625 -7.03125 7 -6.90625 C 6.921875 -6.609375 6.65625 -6.265625 6.234375 -5.90625 L 5.625 -5.40625 C 4.90625 -4.84375 4.203125 -4.21875 3.546875 -3.40625 C 2.84375 -2.546875 2.328125 -1.5625 2 -0.5625 L 2 0 L 9 0 L 9 -0.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-24">
+<path style="stroke:none;" d="M 7.015625 -10 L 5.25 -10 L 1 -3.671875 L 1 -2.890625 L 5.796875 -2.890625 L 5.796875 0 L 7.015625 0 L 7.015625 -2.890625 L 9 -2.890625 L 9 -3.921875 L 7.015625 -3.921875 Z M 5.796875 -3.921875 L 2.4375 -3.921875 L 5.796875 -8.9375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-25">
+<path style="stroke:none;" d="M 4.265625 -9.078125 C 4.59375 -9.078125 4.859375 -9.03125 5.078125 -8.921875 C 5.453125 -8.71875 5.796875 -8.296875 5.796875 -7.65625 C 5.796875 -7.375 5.71875 -7.125 5.59375 -6.890625 C 5.46875 -6.65625 5.15625 -6.359375 4.671875 -5.96875 L 4.546875 -6.03125 C 4.390625 -6.109375 4.25 -6.140625 4.125 -6.203125 C 3.390625 -6.546875 3.015625 -7.046875 3.015625 -7.6875 C 3.015625 -8.453125 3.671875 -9.078125 4.265625 -9.078125 Z M 4.453125 -0.921875 C 3.203125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-26">
+<path style="stroke:none;" d="M 3.859375 -5.046875 C 4.921875 -5.046875 5.609375 -4.828125 6.171875 -4.328125 C 6.59375 -3.953125 6.796875 -3.578125 6.796875 -2.96875 C 6.796875 -2.203125 6.390625 -1.75 5.921875 -1.421875 C 5.359375 -1.03125 4.671875 -0.921875 3.6875 -0.921875 C 2.921875 -0.921875 2.265625 -1 1.578125 -1.125 L 1.34375 -0.203125 C 2.203125 -0.046875 3.015625 0 3.765625 0 C 4.34375 0 4.921875 -0.046875 5.421875 -0.140625 C 6 -0.25 6.46875 -0.5 6.90625 -0.828125 C 7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-27">
+<path style="stroke:none;" d="M 6.609375 -4.90625 C 6.5625 -4.515625 6.515625 -4.203125 6.5 -4 C 6.125 -1.984375 4.828125 -0.921875 2.515625 -0.921875 C 2.234375 -0.921875 1.90625 -0.921875 1.609375 -0.953125 L 1.515625 -0.03125 C 1.734375 0 1.953125 0 2.1875 0 L 2.421875 0 C 4.21875 0 5.59375 -0.484375 6.5625 -1.4375 C 7.53125 -2.359375 8.015625 -4.015625 8.015625 -5.75 C 8.015625 -6.59375 7.921875 -7.359375 7.703125 -7.921875 C 7.28125 -9.078125 6.15625 -10 4.4375 -10 C 3.515625 -10 2. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-28">
+<path style="stroke:none;" d="M 3.796875 -10 L 3.796875 -2.9375 C 3.796875 -2.609375 3.765625 -2.359375 3.71875 -2.1875 C 3.515625 -1.375 2.75 -0.921875 1.703125 -0.921875 C 1.375 -0.921875 1.03125 -0.953125 0.671875 -1.046875 L 0.484375 -0.140625 C 0.96875 -0.03125 1.421875 0 1.875 0 C 2.953125 0 3.75 -0.265625 4.3125 -0.859375 C 4.859375 -1.40625 5.015625 -2.015625 5.015625 -3.078125 L 5.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-29">
+<path style="stroke:none;" d="M 3.015625 -6.078125 C 3.921875 -6.078125 4.453125 -5.78125 4.671875 -5.1875 C 4.75 -4.9375 4.796875 -4.546875 4.796875 -4 L 4.796875 -3.953125 C 3.6875 -3.953125 2.78125 -3.84375 2.0625 -3.703125 C 1.125 -3.46875 0.296875 -2.84375 0.296875 -1.78125 C 0.296875 -0.71875 1.359375 0 2.625 0 C 3.4375 0 4.171875 -0.265625 4.84375 -0.78125 L 5.109375 0 L 6.015625 0 L 6.015625 -4.484375 C 6.015625 -5.609375 5.78125 -6.125 5.015625 -6.625 C 4.609375 -6.875 3.984375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-30">
+<path style="stroke:none;" d="M 5.9375 -7 L 3.734375 -0.921875 L 1.515625 -7 L 0.328125 -7 L 3.21875 0.4375 L 1.765625 4 L 3 4 L 7.0625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-31">
+<path style="stroke:none;" d="M 4.125 -0.921875 C 3.34375 -0.921875 2.296875 -1.15625 1 -1.609375 L 0.59375 -0.53125 C 1.703125 -0.21875 2.484375 0 3.859375 0 C 5.53125 0 6.734375 -0.484375 7.421875 -1.34375 C 7.8125 -1.828125 8.015625 -2.359375 8.015625 -2.90625 C 8.015625 -3.6875 7.703125 -4.265625 7.09375 -4.6875 C 6.359375 -5.15625 5.78125 -5.40625 4.703125 -5.703125 C 4.09375 -5.859375 3.5 -6.078125 2.9375 -6.328125 C 2.328125 -6.609375 2.015625 -7 2.015625 -7.5 C 2.015625 -8.5625 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-32">
+<path style="stroke:none;" d="M 1 -10 L 1 -9.078125 L 4.796875 -9.078125 L 4.796875 0 L 6.015625 0 L 6.015625 -9.078125 L 9 -9.078125 L 9 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-33">
+<path style="stroke:none;" d="M 0.140625 -10 L 3.34375 0 L 4.640625 0 L 7.125 -8.359375 L 9.8125 0 L 11.109375 0 L 14.15625 -10 L 12.953125 -10 L 10.46875 -1.59375 L 7.8125 -10 L 6.59375 -10 L 4.015625 -1.59375 L 1.453125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-34">
+<path style="stroke:none;" d="M 5.796875 -4.40625 L 5.796875 0 L 7.015625 0 L 7.015625 -4.640625 C 7.015625 -6.078125 6.140625 -7 4.546875 -7 C 3.78125 -7 2.9375 -6.796875 2.015625 -6.40625 L 2.015625 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.5625 C 2.796875 -5.921875 3.5 -6.078125 4.09375 -6.078125 C 5.375 -6.078125 5.796875 -5.5625 5.796875 -4.40625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-35">
+<path style="stroke:none;" d="M 2.015625 -9.078125 L 6.6875 -9.078125 L 6.6875 -10 L 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -5.046875 L 6.25 -5.046875 L 6.25 -5.953125 L 2.015625 -5.953125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-36">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-37">
+<path style="stroke:none;" d="M 4.1875 0 L 4.25 0 C 4.890625 0 5.515625 -0.125 6.203125 -0.375 L 5.921875 -1.140625 C 5.46875 -1 5.03125 -0.921875 4.640625 -0.921875 C 4.515625 -0.921875 4.421875 -0.921875 4.3125 -0.9375 C 2.75 -1.125 2.015625 -1.953125 2.015625 -3.609375 C 2.015625 -5.1875 2.828125 -6.078125 4.515625 -6.078125 C 4.953125 -6.078125 5.453125 -5.984375 6 -5.8125 L 6.296875 -6.609375 C 5.640625 -6.859375 5.015625 -7 4.4375 -7 C 3.1875 -7 2.265625 -6.65625 1.671875 -5.96875  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-38">
+<path style="stroke:none;" d="M 2.953125 -1.0625 C 2.015625 -1.0625 2.015625 -1.546875 2.015625 -2.09375 L 2.015625 -10 L 0.796875 -10 L 0.796875 -1.6875 C 0.796875 -0.6875 1.40625 0 2.34375 0 C 3.03125 0 3.53125 -0.25 3.78125 -0.34375 L 3.78125 -1.21875 C 3.453125 -1.125 3.21875 -1.0625 2.953125 -1.0625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-39">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-40">
+<path style="stroke:none;" d="M 0.796875 -5 C 0.796875 -3.453125 1.328125 -2.109375 2.125 -1.296875 C 2.90625 -0.515625 3.984375 0 5.421875 0 C 6.53125 0 7.484375 -0.265625 8.296875 -0.84375 L 9.59375 0.296875 L 10.234375 -0.34375 L 8.96875 -1.53125 C 9.671875 -2.421875 10.015625 -3.5625 10.015625 -4.9375 C 10.015625 -6.4375 9.609375 -7.65625 8.796875 -8.578125 C 8.09375 -9.375 6.90625 -10 5.515625 -10 L 5.4375 -10 C 2.59375 -10 0.796875 -7.921875 0.796875 -5 Z M 5.4375 -9.078125 C 5.968 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-41">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 6.484375 -10 L 2.171875 -5.125 L 6.71875 0 L 8.296875 0 L 3.71875 -5.234375 L 8.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-42">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -10 Z M 5.25 -7 L 2.125 -3.875 L 5.328125 0 L 6.734375 0 L 3.46875 -4 L 6.546875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-43">
+<path style="stroke:none;" d="M 2.015625 -5 C 2.015625 -5.796875 2.171875 -6.5 2.4375 -7.109375 C 2.953125 -8.1875 3.921875 -9.078125 5.40625 -9.078125 C 6.046875 -9.078125 6.65625 -8.921875 7.15625 -8.5625 C 8.140625 -7.90625 8.796875 -6.609375 8.796875 -5 C 8.796875 -4.21875 8.640625 -3.515625 8.359375 -2.90625 C 7.859375 -1.828125 6.890625 -0.921875 5.40625 -0.921875 C 4.765625 -0.921875 4.15625 -1.09375 3.640625 -1.453125 C 2.65625 -2.09375 2.015625 -3.390625 2.015625 -5 Z M 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-44">
+<path style="stroke:none;" d="M 4.5625 -9.078125 C 4.890625 -9.078125 5.25 -9.015625 5.703125 -8.90625 L 5.890625 -9.75 C 5.390625 -9.890625 4.78125 -10 4.171875 -10 C 3.1875 -10 2.453125 -9.65625 2.015625 -8.953125 C 1.875 -8.703125 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.765625 -7 L 0.765625 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.375 -6.078125 L 5.375 -7 L 3.015625 -7 L 3.015625 -7.640625 C 3.015625 -7.828125 3.03125 -7.984375 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-45">
+<path style="stroke:none;" d="M 1 -0.921875 L 1 0 L 7 0 L 7 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-46">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 2.015625 0 L 2.015625 -4.046875 C 2.46875 -4.046875 2.9375 -4.046875 3.34375 -4.046875 C 4.25 -4.046875 5.390625 -4.15625 5.96875 -4.328125 C 7.25 -4.71875 8.015625 -5.78125 8.015625 -7.328125 C 8.015625 -8.140625 7.734375 -8.78125 7.203125 -9.28125 C 6.5 -9.90625 5.71875 -10 4.21875 -10 Z M 3.46875 -4.953125 C 3.046875 -4.953125 2.546875 -4.953125 2.015625 -5.015625 L 2.015625 -9.078125 L 3.5 -9.078125 C 4.21875 -9.078125 4.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-47">
+<path style="stroke:none;" d="M 9.015625 -5 C 9.015625 -8.21875 7.21875 -10 4.046875 -10 L 0.796875 -10 L 0.796875 0 L 3.59375 0 C 7 0 9.015625 -1.640625 9.015625 -5 Z M 7.796875 -5.109375 C 7.796875 -2.3125 6.5 -0.921875 3.734375 -0.921875 L 2.015625 -0.921875 L 2.015625 -9.078125 L 3.71875 -9.078125 C 6.390625 -9.078125 7.796875 -7.78125 7.796875 -5.109375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-48">
+<path style="stroke:none;" d="M 2.796875 -10 L 2.796875 -7 L 1 -7 L 1 -6.078125 L 2.796875 -6.078125 L 2.796875 -3.953125 L 1 -3.953125 L 1 -3.046875 L 2.796875 -3.046875 L 2.796875 0 L 4.015625 0 L 4.015625 -3.046875 L 6.796875 -3.046875 L 6.796875 0 L 8.015625 0 L 8.015625 -3.046875 L 10 -3.046875 L 10 -3.953125 L 8.015625 -3.953125 L 8.015625 -6.078125 L 10 -6.078125 L 10 -7 L 8.015625 -7 L 8.015625 -10 L 6.796875 -10 L 6.796875 -7 L 4.015625 -7 L 4.015625 -10 Z M 4.015625 -3.953125 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-49">
+<path style="stroke:none;" d="M 3.5625 -0.921875 C 2.859375 -0.921875 2.5 -1.078125 2.015625 -1.34375 L 2.015625 -5.765625 C 2.515625 -5.984375 3.015625 -6.078125 3.546875 -6.078125 C 5.046875 -6.078125 5.796875 -5 5.796875 -3.5 C 5.796875 -1.984375 5.078125 -0.921875 3.5625 -0.921875 Z M 3.828125 0 C 5.9375 0 7.015625 -1.40625 7.015625 -3.40625 C 7.015625 -4.5625 6.6875 -5.46875 6.03125 -6.109375 C 5.40625 -6.703125 4.609375 -7 3.671875 -7 C 3.109375 -7 2.5625 -6.890625 2.015625 -6.6718 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-50">
+<path style="stroke:none;" d="M 1.4375 -0.84375 L 0.3125 2 L 1.578125 2 L 2.734375 -0.84375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-51">
+<path style="stroke:none;" d="M 9.359375 -9.078125 C 10.109375 -9.078125 10.796875 -8.984375 10.796875 -8.734375 L 10.796875 -1.625 C 10.796875 -0.671875 11.40625 0 12.34375 0 C 13.046875 0 13.546875 -0.21875 13.796875 -0.296875 L 13.796875 -1.078125 C 13.46875 -0.984375 13.21875 -0.921875 12.953125 -0.921875 C 12.015625 -0.921875 12.015625 -1.390625 12.015625 -1.921875 L 12.015625 -8.90625 C 12.015625 -9.71875 10.640625 -10 9.015625 -10 C 8.078125 -10 7.40625 -9.65625 7 -8.953125 C 6.85 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-52">
+<path style="stroke:none;" d="M 0.390625 -7 L 2.984375 0 L 4.09375 0 L 5.984375 -5.671875 L 7.828125 0 L 9.015625 0 L 11.609375 -7 L 10.359375 -7 L 8.4375 -1.125 L 6.609375 -7 L 5.453125 -7 L 3.5625 -1.125 L 1.640625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-53">
+<path style="stroke:none;" d="M 6.890625 -7 L 5.65625 -7 L 3.703125 -1.515625 L 3.640625 -1.140625 L 3.5625 -1.515625 L 1.609375 -7 L 0.328125 -7 L 2.96875 0 L 4.25 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-54">
+<path style="stroke:none;" d="M 0.796875 -0.921875 L 0.796875 0 L 2.015625 0 L 2.015625 -0.921875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-55">
+<path style="stroke:none;" d="M 3.015625 -4 C 3.015625 -5.015625 3.1875 -6.078125 3.5 -7.15625 C 3.828125 -8.25 4.296875 -9.296875 4.921875 -10.3125 L 3.984375 -10.796875 C 2.890625 -9 1.796875 -6.65625 1.796875 -4.015625 C 1.796875 -2.921875 2.015625 -1.765625 2.390625 -0.578125 C 2.78125 0.59375 3.328125 1.75 4 2.84375 L 4.921875 2.25 C 3.875 0.578125 3.015625 -1.578125 3.015625 -4 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-56">
+<path style="stroke:none;" d="M 4.015625 -4.015625 C 4.015625 -5.109375 3.8125 -6.265625 3.4375 -7.4375 C 3.046875 -8.609375 2.5 -9.734375 1.84375 -10.796875 L 0.890625 -10.3125 C 1.515625 -9.296875 1.984375 -8.25 2.3125 -7.15625 C 2.625 -6.078125 2.796875 -5.03125 2.796875 -4.015625 C 2.796875 -1.875 2.15625 0.21875 0.890625 2.25 L 1.8125 2.84375 C 2.484375 1.75 3.03125 0.59375 3.4375 -0.578125 C 3.828125 -1.765625 4.015625 -2.921875 4.015625 -4.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-57">
+<path style="stroke:none;" d="M 0.796875 -10.984375 L 0.796875 -8 L 2.015625 -8 L 2.015625 -10.984375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-58">
+<path style="stroke:none;" d="M 4.78125 -9.078125 C 5.125 -9.078125 5.546875 -9.046875 5.78125 -9.015625 L 5.859375 -8.515625 L 7 -8.515625 L 7.140625 -9.59375 C 6.59375 -9.734375 5.90625 -10 4.34375 -10 C 3.265625 -10 2.5 -9.65625 2.03125 -8.953125 C 1.875 -8.6875 1.796875 -8.265625 1.796875 -7.6875 L 1.796875 -7 L 0.78125 -7 L 0.78125 -6.078125 L 1.796875 -6.078125 L 1.796875 0 L 3.015625 0 L 3.015625 -6.078125 L 5.796875 -6.078125 L 5.796875 0 L 7.015625 0 L 7.015625 -7 L 3.015625 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-59">
+<path style="stroke:none;" d="M 0.8125 -4.96875 L 0.8125 -4.046875 L 5.0625 -4.046875 L 5.0625 -4.96875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-60">
+<path style="stroke:none;" d="M 0.796875 1 C 0.796875 1.828125 0.40625 2.421875 -0.34375 2.78125 L 0.09375 3.65625 C 0.75 3.421875 1.375 3.046875 1.65625 2.46875 C 1.921875 1.9375 2.015625 1.78125 2.015625 0.8125 L 2.015625 -7 L 0.796875 -7 Z M 0.796875 -10 L 0.796875 -9.078125 L 2.015625 -9.078125 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-61">
+<path style="stroke:none;" d="M 0.796875 0 L 6.75 0 L 6.75 -0.921875 L 2.015625 -0.921875 L 2.015625 -5.046875 L 6.359375 -5.046875 L 6.359375 -5.953125 L 2.015625 -5.953125 L 2.015625 -9.078125 L 6.75 -9.078125 L 6.75 -10 L 0.796875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-62">
+<path style="stroke:none;" d="M 5.75 -7 L 3.828125 -4.21875 L 1.828125 -7 L 0.46875 -7 L 3.03125 -3.4375 L 0.5625 0 L 1.796875 0 L 3.609375 -2.625 L 5.5 0 L 6.859375 0 L 4.40625 -3.421875 L 7.015625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-63">
+<path style="stroke:none;" d="M 0.796875 -10 L 0.796875 0 L 6.578125 0 L 6.578125 -1.046875 L 2.015625 -1.046875 L 2.015625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 3.578125 0 C 1.710938 0 0.601562 -0.921875 0.25 -2.765625 L 1.71875 -3 C 1.8125 -2.4375 2.019531 -2 2.34375 -1.6875 C 2.675781 -1.375 3.085938 -1.21875 3.578125 -1.21875 C 4.117188 -1.21875 4.546875 -1.421875 4.859375 -1.828125 C 5.171875 -2.234375 5.328125 -2.832031 5.328125 -3.625 L 5.328125 -10.78125 L 3.203125 -10.78125 L 3.203125 -12 L 6.8125 -12 L 6.8125 -3.6875 C 6.8125 -2.539062 6.519531 -1.640625 5.9375 -0.984375 C 5.363281 -0.328125 4.578125 0 3. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.328125 -10 L 8.65625 -10 L 8.65625 0 L 1.328125 0 Z M 1.8125 -9 L 1.8125 -1 L 8.171875 -1 L 8.171875 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 6.46875 -3.53125 C 6.46875 -1.175781 5.660156 0 4.046875 0 C 3.023438 0 2.335938 -0.390625 1.984375 -1.171875 L 1.96875 -1.171875 C 1.976562 -1.128906 1.984375 -0.726562 1.984375 0.03125 L 1.984375 3 L 0.84375 3 L 0.84375 -5.53125 C 0.84375 -6.269531 0.832031 -6.757812 0.8125 -7 L 1.90625 -7 C 1.90625 -6.976562 1.910156 -6.910156 1.921875 -6.796875 C 1.929688 -6.691406 1.941406 -6.519531 1.953125 -6.28125 C 1.960938 -6.039062 1.96875 -5.878906 1.96875 -5.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 1.734375 -3.125 C 1.734375 -2.394531 1.882812 -1.832031 2.1875 -1.4375 C 2.5 -1.050781 2.957031 -0.859375 3.5625 -0.859375 C 4.03125 -0.859375 4.40625 -0.960938 4.6875 -1.171875 C 4.96875 -1.390625 5.160156 -1.664062 5.265625 -2 L 6.265625 -1.703125 C 5.867188 -0.566406 4.960938 0 3.546875 0 C 2.566406 0 1.816406 -0.296875 1.296875 -0.890625 C 0.785156 -1.484375 0.53125 -2.367188 0.53125 -3.546875 C 0.53125 -4.660156 0.785156 -5.515625 1.296875 -6.109375 C [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 5.03125 0 L 5.03125 -4.359375 C 5.03125 -4.816406 4.988281 -5.171875 4.90625 -5.421875 C 4.820312 -5.671875 4.6875 -5.847656 4.5 -5.953125 C 4.320312 -6.066406 4.050781 -6.125 3.6875 -6.125 C 3.175781 -6.125 2.769531 -5.9375 2.46875 -5.5625 C 2.164062 -5.1875 2.015625 -4.660156 2.015625 -3.984375 L 2.015625 0 L 0.875 0 L 0.875 -5.5 C 0.875 -6.320312 0.859375 -6.820312 0.828125 -7 L 1.921875 -7 C 1.921875 -6.976562 1.921875 -6.914062 1.921875 -6.8125 C 1.92 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 5.015625 -1.203125 C 4.804688 -0.773438 4.535156 -0.46875 4.203125 -0.28125 C 3.867188 -0.09375 3.453125 0 2.953125 0 C 2.117188 0 1.503906 -0.285156 1.109375 -0.859375 C 0.722656 -1.429688 0.53125 -2.300781 0.53125 -3.46875 C 0.53125 -5.820312 1.335938 -7 2.953125 -7 C 3.453125 -7 3.867188 -6.90625 4.203125 -6.71875 C 4.535156 -6.53125 4.804688 -6.234375 5.015625 -5.828125 L 5.015625 -10 L 6.15625 -10 L 6.15625 -1.5 C 6.15625 -0.738281 6.164062 -0.238281  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 0.90625 -8.90625 L 0.90625 -10 L 2.046875 -10 L 2.046875 -8.90625 Z M 0.90625 0 L 0.90625 -7 L 2.046875 -7 L 2.046875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 3.375 3 C 2.644531 3 2.066406 2.851562 1.640625 2.5625 C 1.210938 2.269531 0.9375 1.851562 0.8125 1.3125 L 1.96875 1.140625 C 2.039062 1.453125 2.195312 1.691406 2.4375 1.859375 C 2.6875 2.035156 3.007812 2.125 3.40625 2.125 C 4.476562 2.125 5.015625 1.382812 5.015625 -0.09375 L 5.015625 -1.328125 L 5 -1.328125 C 4.789062 -0.890625 4.503906 -0.554688 4.140625 -0.328125 C 3.785156 -0.109375 3.367188 0 2.890625 0 C 2.078125 0 1.476562 -0.273438 1.09375 -0.82 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-0">
+<path style="stroke:none;" d="M 1.203125 -9 L 7.796875 -9 L 7.796875 0 L 1.203125 0 Z M 1.640625 -8 L 1.640625 -1 L 7.34375 -1 L 7.34375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph4-1">
+<path style="stroke:none;" d="M 9.671875 0 L 7.609375 0 L 6.375 -5.328125 C 6.226562 -5.953125 6.101562 -6.609375 6 -7.296875 C 5.894531 -6.722656 5.8125 -6.285156 5.75 -5.984375 C 5.6875 -5.691406 5.226562 -3.695312 4.375 0 L 2.328125 0 L 0.015625 -9 L 1.765625 -9 L 3.109375 -3.078125 L 3.421875 -1.640625 C 3.535156 -2.242188 3.648438 -2.816406 3.765625 -3.359375 C 3.878906 -3.910156 4.304688 -5.789062 5.046875 -9 L 6.984375 -9 L 8.140625 -4.109375 C 8.222656 -3.742188 8.375 -2.921875 8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-2">
+<path style="stroke:none;" d="M 2.421875 -5.625 C 2.628906 -6.101562 2.890625 -6.453125 3.203125 -6.671875 C 3.515625 -6.890625 3.890625 -7 4.328125 -7 C 4.960938 -7 5.445312 -6.773438 5.78125 -6.328125 C 6.125 -5.878906 6.296875 -5.222656 6.296875 -4.359375 L 6.296875 0 L 4.65625 0 L 4.65625 -3.921875 C 4.65625 -5.148438 4.316406 -5.765625 3.640625 -5.765625 C 3.273438 -5.765625 2.984375 -5.578125 2.765625 -5.203125 C 2.546875 -4.828125 2.4375 -4.34375 2.4375 -3.75 L 2.4375 0 L 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-3">
+<path style="stroke:none;" d="M 3.59375 0 C 2.59375 0 1.820312 -0.296875 1.28125 -0.890625 C 0.75 -1.492188 0.484375 -2.375 0.484375 -3.53125 C 0.484375 -4.644531 0.753906 -5.5 1.296875 -6.09375 C 1.847656 -6.695312 2.625 -7 3.625 -7 C 4.570312 -7 5.296875 -6.660156 5.796875 -5.984375 C 6.304688 -5.304688 6.5625 -4.316406 6.5625 -3.015625 L 6.5625 -2.96875 L 2.21875 -2.96875 C 2.21875 -2.351562 2.34375 -1.890625 2.59375 -1.578125 C 2.851562 -1.265625 3.21875 -1.109375 3.6875 -1.109375 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-4">
+<path style="stroke:none;" d="M 4.65625 0 L 4.65625 -3.921875 C 4.65625 -5.148438 4.316406 -5.765625 3.640625 -5.765625 C 3.273438 -5.765625 2.984375 -5.578125 2.765625 -5.203125 C 2.546875 -4.828125 2.4375 -4.34375 2.4375 -3.75 L 2.4375 0 L 0.796875 0 L 0.796875 -5.4375 C 0.796875 -5.8125 0.789062 -6.117188 0.78125 -6.359375 C 0.769531 -6.597656 0.757812 -6.8125 0.75 -7 L 2.3125 -7 C 2.320312 -6.914062 2.335938 -6.695312 2.359375 -6.34375 C 2.378906 -5.988281 2.390625 -5.742188 2.390625 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-5">
+<path style="stroke:none;" d="M 4.296875 -1.359375 C 5.203125 -1.359375 5.832031 -1.90625 6.1875 -3 L 7.703125 -2.421875 C 7.398438 -1.597656 6.957031 -0.988281 6.375 -0.59375 C 5.800781 -0.195312 5.109375 0 4.296875 0 C 3.078125 0 2.128906 -0.394531 1.453125 -1.1875 C 0.785156 -1.988281 0.453125 -3.101562 0.453125 -4.53125 C 0.453125 -5.96875 0.773438 -7.070312 1.421875 -7.84375 C 2.066406 -8.613281 3 -9 4.21875 -9 C 5.113281 -9 5.84375 -8.78125 6.40625 -8.34375 C 6.96875 -7.914062 7.36 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-6">
+<path style="stroke:none;" d="M 2.453125 0 C 1.796875 0 1.285156 -0.164062 0.921875 -0.5 C 0.554688 -0.84375 0.375 -1.320312 0.375 -1.9375 C 0.375 -2.601562 0.601562 -3.109375 1.0625 -3.453125 C 1.519531 -3.804688 2.179688 -3.988281 3.046875 -4 L 4.515625 -4.03125 L 4.515625 -4.421875 C 4.515625 -4.929688 4.429688 -5.3125 4.265625 -5.5625 C 4.097656 -5.8125 3.828125 -5.9375 3.453125 -5.9375 C 3.109375 -5.9375 2.851562 -5.867188 2.6875 -5.734375 C 2.53125 -5.597656 2.429688 -5.367188 2.39 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-7">
+<path style="stroke:none;" d="M 0.890625 0 L 0.890625 -5.359375 C 0.890625 -5.742188 0.882812 -6.0625 0.875 -6.3125 C 0.863281 -6.570312 0.851562 -6.800781 0.84375 -7 L 2.40625 -7 C 2.414062 -6.925781 2.429688 -6.691406 2.453125 -6.296875 C 2.472656 -5.898438 2.484375 -5.640625 2.484375 -5.515625 L 2.515625 -5.515625 C 2.691406 -5.960938 2.847656 -6.273438 2.984375 -6.453125 C 3.128906 -6.640625 3.300781 -6.773438 3.5 -6.859375 C 3.695312 -6.953125 3.941406 -7 4.234375 -7 C 4.472656 -7 4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-8">
+<path style="stroke:none;" d="M 4.65625 0 C 4.632812 -0.0625 4.613281 -0.222656 4.59375 -0.484375 C 4.570312 -0.753906 4.5625 -0.976562 4.5625 -1.15625 L 4.546875 -1.15625 C 4.210938 -0.382812 3.578125 0 2.640625 0 C 1.941406 0 1.40625 -0.304688 1.03125 -0.921875 C 0.65625 -1.535156 0.46875 -2.394531 0.46875 -3.5 C 0.46875 -4.613281 0.664062 -5.472656 1.0625 -6.078125 C 1.457031 -6.691406 2.019531 -7 2.75 -7 C 3.175781 -7 3.539062 -6.90625 3.84375 -6.71875 C 4.144531 -6.53125 4.378906 -6 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-9">
+<path style="stroke:none;" d="M 6.484375 -2.09375 C 6.484375 -1.4375 6.21875 -0.921875 5.6875 -0.546875 C 5.164062 -0.179688 4.4375 0 3.5 0 C 2.59375 0 1.894531 -0.140625 1.40625 -0.421875 C 0.914062 -0.710938 0.59375 -1.164062 0.4375 -1.78125 L 1.890625 -2 C 1.984375 -1.664062 2.140625 -1.429688 2.359375 -1.296875 C 2.578125 -1.160156 2.960938 -1.09375 3.515625 -1.09375 C 4.015625 -1.09375 4.378906 -1.160156 4.609375 -1.296875 C 4.847656 -1.429688 4.96875 -1.644531 4.96875 -1.9375 C 4.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-10">
+<path style="stroke:none;" d="M 7.53125 -2.640625 C 7.53125 -1.785156 7.226562 -1.128906 6.625 -0.671875 C 6.03125 -0.222656 5.15625 0 4 0 C 2.9375 0 2.101562 -0.144531 1.5 -0.4375 C 0.894531 -0.738281 0.507812 -1.1875 0.34375 -1.78125 L 2.015625 -2 C 2.128906 -1.75 2.347656 -1.566406 2.671875 -1.453125 C 3.003906 -1.347656 3.460938 -1.296875 4.046875 -1.296875 C 5.253906 -1.296875 5.859375 -1.707031 5.859375 -2.53125 C 5.859375 -2.78125 5.785156 -2.984375 5.640625 -3.140625 C 5.503906 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-11">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph4-12">
+<path style="stroke:none;" d="M 3.640625 0 C 2.628906 0 1.847656 -0.300781 1.296875 -0.90625 C 0.753906 -1.519531 0.484375 -2.375 0.484375 -3.46875 C 0.484375 -4.582031 0.757812 -5.445312 1.3125 -6.0625 C 1.863281 -6.6875 2.648438 -7 3.671875 -7 C 4.453125 -7 5.097656 -6.828125 5.609375 -6.484375 C 6.117188 -6.140625 6.441406 -5.671875 6.578125 -5.078125 L 4.921875 -5 C 4.867188 -5.269531 4.738281 -5.484375 4.53125 -5.640625 C 4.320312 -5.796875 4.023438 -5.875 3.640625 -5.875 C 2.691406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph4-13">
+<path style="stroke:none;" d="M 2.453125 0 C 1.972656 0 1.601562 -0.144531 1.34375 -0.4375 C 1.082031 -0.726562 0.953125 -1.171875 0.953125 -1.765625 L 0.953125 -5.890625 L 0.140625 -5.890625 L 0.140625 -7 L 1.03125 -7 L 1.546875 -8 L 2.578125 -8 L 2.578125 -7 L 3.78125 -7 L 3.78125 -5.890625 L 2.578125 -5.890625 L 2.578125 -2.15625 C 2.578125 -1.8125 2.632812 -1.554688 2.75 -1.390625 C 2.863281 -1.222656 3.046875 -1.140625 3.296875 -1.140625 C 3.421875 -1.140625 3.601562 -1.164062 3.843 [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-1">
+<path style="stroke:none;" d="M 6.71875 -10.921875 L 10.40625 -6.140625 C 10.738281 -5.722656 10.90625 -5.484375 10.90625 -5.421875 L 6.71875 0 C 6.664062 -0.0390625 5.265625 -1.847656 2.515625 -5.421875 C 2.515625 -5.492188 2.785156 -5.867188 3.328125 -6.546875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph5-2">
+<path style="stroke:none;" d="M 6.734375 -10.921875 C 7.773438 -10.921875 8.539062 -10.367188 9.03125 -9.265625 C 9.101562 -9.015625 9.144531 -8.75 9.15625 -8.46875 C 9.15625 -7.90625 8.863281 -7.234375 8.28125 -6.453125 L 7.84375 -6 L 7.859375 -6 C 8.222656 -6.144531 8.609375 -6.21875 9.015625 -6.21875 L 9.15625 -6.21875 C 10.320312 -6.21875 11.140625 -5.722656 11.609375 -4.734375 C 11.710938 -4.410156 11.765625 -4.101562 11.765625 -3.8125 C 11.765625 -2.8125 11.253906 -2.054688 10.2343 [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-3">
+<path style="stroke:none;" d="M 6.734375 -10.921875 C 7.191406 -10.109375 7.953125 -9.03125 9.015625 -7.6875 C 10.171875 -6.320312 10.757812 -5.503906 10.78125 -5.234375 C 10.976562 -4.816406 11.078125 -4.410156 11.078125 -4.015625 L 11.078125 -3.734375 C 11.078125 -2.910156 10.679688 -2.265625 9.890625 -1.796875 C 9.628906 -1.691406 9.34375 -1.640625 9.03125 -1.640625 C 8.28125 -1.640625 7.671875 -2.179688 7.203125 -3.265625 L 6.90625 -3.265625 L 6.90625 -3.171875 C 6.90625 -1.785156 7. [...]
+</symbol>
+<symbol overflow="visible" id="glyph5-4">
+<path style="stroke:none;" d="M 4.046875 -10.921875 C 5.035156 -10.921875 5.8125 -10.347656 6.375 -9.203125 C 6.582031 -8.753906 6.691406 -8.410156 6.703125 -8.171875 L 6.71875 -8.171875 C 6.894531 -8.960938 7.207031 -9.617188 7.65625 -10.140625 C 8.175781 -10.660156 8.769531 -10.921875 9.4375 -10.921875 C 10.457031 -10.921875 11.273438 -10.375 11.890625 -9.28125 C 12.046875 -8.875 12.125 -8.492188 12.125 -8.140625 C 12.125 -6.921875 11.613281 -5.757812 10.59375 -4.65625 L 6.71875 0 L 6. [...]
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image26807" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image26807"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip5">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip6">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip7">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip8">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image26811" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,44)">
+  <use xlink:href="#image26811"/>
+</pattern>
+<image id="image26814" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,44)">
+  <use xlink:href="#image26814"/>
+</pattern>
+<image id="image26819" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,44)">
+  <use xlink:href="#image26819"/>
+</pattern>
+<image id="image26824" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,47)">
+  <use xlink:href="#image26824"/>
+</pattern>
+<image id="image26829" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,47)">
+  <use xlink:href="#image26829"/>
+</pattern>
+<image id="image26834" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,72)">
+  <use xlink:href="#image26834"/>
+</pattern>
+<image id="image26839" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,72)">
+  <use xlink:href="#image26839"/>
+</pattern>
+<image id="image26844" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,72)">
+  <use xlink:href="#image26844"/>
+</pattern>
+<clipPath id="clip9">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip10">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip11">
+  <path d="M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+</clipPath>
+<clipPath id="clip12">
+  <path d="M 0 119 L 145 119 L 145 120 L 0 120 Z "/>
+</clipPath>
+<clipPath id="clip13">
+  <path d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</clipPath>
+<clipPath id="clip14">
+  <path d="M 24 129 C 24 127.894531 24.894531 127 26 127 L 120 127 C 121.105469 127 122 127.449219 122 128 L 122 154 C 122 155.105469 121.105469 156 120 156 L 26 156 C 24.894531 156 24 155.550781 24 155 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,141.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image26850" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,23,126)">
+  <use xlink:href="#image26850"/>
+</pattern>
+<image id="image26853" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9.4,0,0,1,26,126)">
+  <use xlink:href="#image26853"/>
+</pattern>
+<image id="image26858" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,120,126)">
+  <use xlink:href="#image26858"/>
+</pattern>
+<image id="image26863" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,23,129)">
+  <use xlink:href="#image26863"/>
+</pattern>
+<image id="image26868" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,120,129)">
+  <use xlink:href="#image26868"/>
+</pattern>
+<image id="image26873" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,23,154)">
+  <use xlink:href="#image26873"/>
+</pattern>
+<image id="image26878" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9.4,0,0,1,26,154)">
+  <use xlink:href="#image26878"/>
+</pattern>
+<image id="image26883" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,120,154)">
+  <use xlink:href="#image26883"/>
+</pattern>
+<clipPath id="clip15">
+  <path d="M 0 164 L 145 164 L 145 200 L 0 200 Z "/>
+</clipPath>
+<image id="image26888" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip16">
+  <path d="M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+</clipPath>
+<clipPath id="clip17">
+  <path d="M 0 218 L 145 218 L 145 219 L 0 219 Z "/>
+</clipPath>
+<clipPath id="clip18">
+  <path d="M 0 219 L 145 219 L 145 241 L 0 241 Z "/>
+</clipPath>
+<image id="image26891" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip19">
+  <path d="M 0 241 L 145 241 L 145 242 L 0 242 Z "/>
+</clipPath>
+<clipPath id="clip20">
+  <path d="M 0 242 L 145 242 L 145 264 L 0 264 Z "/>
+</clipPath>
+<image id="image26894" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip21">
+  <path d="M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip22">
+  <path d="M 176 759 L 255 759 L 255 788 L 176 788 Z "/>
+</clipPath>
+<clipPath id="clip23">
+  <path d="M 176 761 C 176 759.894531 176.894531 759 178 759 L 253 759 C 254.105469 759 255 759.449219 255 760 L 255 786 C 255 787.105469 254.105469 788 253 788 L 178 788 C 176.894531 788 176 787.550781 176 787 Z "/>
+</clipPath>
+<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,215.5,773.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image26898" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern17" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,175,758)">
+  <use xlink:href="#image26898"/>
+</pattern>
+<image id="image26901" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern18" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(7.5,0,0,1,178,758)">
+  <use xlink:href="#image26901"/>
+</pattern>
+<image id="image26906" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern19" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,253,758)">
+  <use xlink:href="#image26906"/>
+</pattern>
+<image id="image26911" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern20" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,175,761)">
+  <use xlink:href="#image26911"/>
+</pattern>
+<image id="image26916" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern21" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,253,761)">
+  <use xlink:href="#image26916"/>
+</pattern>
+<image id="image26921" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern22" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,175,786)">
+  <use xlink:href="#image26921"/>
+</pattern>
+<image id="image26926" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern23" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(7.5,0,0,1,178,786)">
+  <use xlink:href="#image26926"/>
+</pattern>
+<image id="image26931" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern24" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,253,786)">
+  <use xlink:href="#image26931"/>
+</pattern>
+<clipPath id="clip24">
+  <path d="M 582 557 L 676 557 L 676 586 L 582 586 Z "/>
+</clipPath>
+<clipPath id="clip25">
+  <path d="M 582 559 C 582 557.894531 582.894531 557 584 557 L 674 557 C 675.105469 557 676 557.449219 676 558 L 676 584 C 676 585.105469 675.105469 586 674 586 L 584 586 C 582.894531 586 582 585.550781 582 585 Z "/>
+</clipPath>
+<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,629,571.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image26938" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern25" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,581,556)">
+  <use xlink:href="#image26938"/>
+</pattern>
+<image id="image26941" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern26" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9,0,0,1,584,556)">
+  <use xlink:href="#image26941"/>
+</pattern>
+<image id="image26946" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern27" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,674,556)">
+  <use xlink:href="#image26946"/>
+</pattern>
+<image id="image26951" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern28" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,581,559)">
+  <use xlink:href="#image26951"/>
+</pattern>
+<image id="image26956" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern29" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,674,559)">
+  <use xlink:href="#image26956"/>
+</pattern>
+<image id="image26961" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern30" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,581,584)">
+  <use xlink:href="#image26961"/>
+</pattern>
+<image id="image26966" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern31" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9,0,0,1,584,584)">
+  <use xlink:href="#image26966"/>
+</pattern>
+<image id="image26971" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern32" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,674,584)">
+  <use xlink:href="#image26971"/>
+</pattern>
+<clipPath id="clip26">
+  <path d="M 620 557 L 648 557 L 648 586 L 620 586 Z "/>
+</clipPath>
+<image id="image26976" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAJElEQVQ4jWNgGAXDADAiczq6Wv8To6mirBquj4naLhoFQxIAALxRBARceIEQAAAAAElFTkSuQmCC"/>
+<clipPath id="clip27">
+  <path d="M 648 557 L 676 557 L 676 586 L 648 586 Z "/>
+</clipPath>
+<clipPath id="clip28">
+  <path d="M 648 557 L 674 557 C 675.105469 557 676 557.894531 676 559 L 676 584 C 676 585.105469 675.105469 586 674 586 L 648 586 Z "/>
+</clipPath>
+<image id="image26979" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQ4jWNgGN6go6v1f0dX6398apgotWTgDWBE5hDyLwxUlFXD9VHsArxghMTCMAAAxqwOaCR+eKoAAAAASUVORK5CYII="/>
+<clipPath id="clip29">
+  <path d="M 582 520 L 676 520 L 676 549 L 582 549 Z "/>
+</clipPath>
+<clipPath id="clip30">
+  <path d="M 582 522 C 582 520.894531 582.894531 520 584 520 L 674 520 C 675.105469 520 676 520.449219 676 521 L 676 547 C 676 548.105469 675.105469 549 674 549 L 584 549 C 582.894531 549 582 548.550781 582 548 Z "/>
+</clipPath>
+<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,629,534.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image26983" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern33" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,581,519)">
+  <use xlink:href="#image26983"/>
+</pattern>
+<image id="image26986" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern34" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(9,0,0,1,584,519)">
+  <use xlink:href="#image26986"/>
+</pattern>
+<image id="image26991" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern35" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,674,519)">
+  <use xlink:href="#image26991"/>
+</pattern>
+<image id="image26996" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern36" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,581,522)">
+  <use xlink:href="#image26996"/>
+</pattern>
+<image id="image27001" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern37" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,674,522)">
+  <use xlink:href="#image27001"/>
+</pattern>
+<image id="image27006" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern38" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,581,547)">
+  <use xlink:href="#image27006"/>
+</pattern>
+<image id="image27011" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern39" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(9,0,0,1,584,547)">
+  <use xlink:href="#image27011"/>
+</pattern>
+<image id="image27016" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern40" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,674,547)">
+  <use xlink:href="#image27016"/>
+</pattern>
+<clipPath id="clip31">
+  <path d="M 620 520 L 648 520 L 648 549 L 620 549 Z "/>
+</clipPath>
+<image id="image27021" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAJElEQVQ4jWNgGAXDADAiczq6Wv8To6mirBquj4naLhoFQxIAALxRBARceIEQAAAAAElFTkSuQmCC"/>
+<clipPath id="clip32">
+  <path d="M 648 520 L 676 520 L 676 549 L 648 549 Z "/>
+</clipPath>
+<clipPath id="clip33">
+  <path d="M 648 520 L 674 520 C 675.105469 520 676 520.894531 676 522 L 676 547 C 676 548.105469 675.105469 549 674 549 L 648 549 Z "/>
+</clipPath>
+<image id="image27024" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQ4jWNgGN6go6v1f0dX6398apgotWTgDWBE5hDyLwxUlFXD9VHsArxghMTCMAAAxqwOaCR+eKoAAAAASUVORK5CYII="/>
+<clipPath id="clip34">
+  <path d="M 262 520 L 524 520 L 524 752 L 262 752 Z "/>
+</clipPath>
+<clipPath id="clip35">
+  <path d="M 262 522 C 262 520.894531 262.894531 520 264 520 L 522 520 C 523.105469 520 524 520.894531 524 522 L 524 750 C 524 751.105469 523.105469 752 522 752 L 264 752 C 262.894531 752 262 751.105469 262 750 Z "/>
+</clipPath>
+<clipPath id="clip36">
+  <path d="M 339 585 L 375 585 L 375 612 L 339 612 Z "/>
+</clipPath>
+<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,393,535.5)">
+<stop offset="0" style="stop-color:rgb(96.658824%,96.658824%,96.658824%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(82.717647%,82.717647%,82.717647%);stop-opacity:1;"/>
+</linearGradient>
+<clipPath id="clip37">
+  <path d="M 267 554 L 519 554 L 519 581 L 267 581 Z "/>
+</clipPath>
+<image id="image27026" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAACVElEQVQ4jcWSS0hUYRiG3//8lzONmaAzeEthViUhLYrIaiOk1CIJjXATLgpaiCAYtCmQ2gZGtogojCiyFkkJkaQU0oBGolY63jiDMI6jjveZM+fMufwtRKhm2rTpWb/Py/d9fMD/hnS+6CzxStJhOXY9pGTZU8TmlL1eNMi1B+OHW6Tr1kppNEfv1wbZPkXt8OX7GwrzSymlNKvvOA6LrEQbngyKU5er8oyJmBn4/GPjOoA6RimpLysOUF+BH4qiZC3YSll41JekF6vyiifjdHA1KZlMJ1IAwBgTbI/HCyFEVnktaaP1+RwajpUgtLBOtDgKp2emhDTMewCgCM6h [...]
+<pattern id="pattern41" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,263,492)">
+  <use xlink:href="#image27026"/>
+</pattern>
+<clipPath id="clip38">
+  <path d="M 473 451 L 509 451 L 509 480 L 473 480 Z "/>
+</clipPath>
+<clipPath id="clip39">
+  <path d="M 473 453 C 473 451.894531 473.894531 451 475 451 L 507 451 C 508.105469 451 509 451.449219 509 452 L 509 478 C 509 479.105469 508.105469 480 507 480 L 475 480 C 473.894531 480 473 479.550781 473 479 Z "/>
+</clipPath>
+<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,491,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27029" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern42" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,472,450)">
+  <use xlink:href="#image27029"/>
+</pattern>
+<image id="image27032" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern43" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,475,450)">
+  <use xlink:href="#image27032"/>
+</pattern>
+<image id="image27037" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern44" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,507,450)">
+  <use xlink:href="#image27037"/>
+</pattern>
+<image id="image27042" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern45" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,472,453)">
+  <use xlink:href="#image27042"/>
+</pattern>
+<image id="image27047" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern46" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,507,453)">
+  <use xlink:href="#image27047"/>
+</pattern>
+<image id="image27052" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern47" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,472,478)">
+  <use xlink:href="#image27052"/>
+</pattern>
+<image id="image27057" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern48" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,475,478)">
+  <use xlink:href="#image27057"/>
+</pattern>
+<image id="image27062" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern49" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,507,478)">
+  <use xlink:href="#image27062"/>
+</pattern>
+<clipPath id="clip40">
+  <path d="M 424 451 L 469 451 L 469 480 L 424 480 Z "/>
+</clipPath>
+<clipPath id="clip41">
+  <path d="M 424 453 C 424 451.894531 424.894531 451 426 451 L 467 451 C 468.105469 451 469 451.449219 469 452 L 469 478 C 469 479.105469 468.105469 480 467 480 L 426 480 C 424.894531 480 424 479.550781 424 479 Z "/>
+</clipPath>
+<linearGradient id="linear7" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,446.5,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27068" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern50" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,423,450)">
+  <use xlink:href="#image27068"/>
+</pattern>
+<image id="image27071" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern51" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.1,0,0,1,426,450)">
+  <use xlink:href="#image27071"/>
+</pattern>
+<image id="image27076" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern52" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,467,450)">
+  <use xlink:href="#image27076"/>
+</pattern>
+<image id="image27081" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern53" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,423,453)">
+  <use xlink:href="#image27081"/>
+</pattern>
+<image id="image27086" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern54" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,467,453)">
+  <use xlink:href="#image27086"/>
+</pattern>
+<image id="image27091" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern55" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,423,478)">
+  <use xlink:href="#image27091"/>
+</pattern>
+<image id="image27096" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern56" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.1,0,0,1,426,478)">
+  <use xlink:href="#image27096"/>
+</pattern>
+<image id="image27101" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern57" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,467,478)">
+  <use xlink:href="#image27101"/>
+</pattern>
+<clipPath id="clip42">
+  <path d="M 384 451 L 420 451 L 420 480 L 384 480 Z "/>
+</clipPath>
+<clipPath id="clip43">
+  <path d="M 384 453 C 384 451.894531 384.894531 451 386 451 L 418 451 C 419.105469 451 420 451.449219 420 452 L 420 478 C 420 479.105469 419.105469 480 418 480 L 386 480 C 384.894531 480 384 479.550781 384 479 Z "/>
+</clipPath>
+<linearGradient id="linear8" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,402,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27107" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern58" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,383,450)">
+  <use xlink:href="#image27107"/>
+</pattern>
+<image id="image27110" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern59" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,386,450)">
+  <use xlink:href="#image27110"/>
+</pattern>
+<image id="image27115" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern60" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,418,450)">
+  <use xlink:href="#image27115"/>
+</pattern>
+<image id="image27120" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern61" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,383,453)">
+  <use xlink:href="#image27120"/>
+</pattern>
+<image id="image27125" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern62" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,418,453)">
+  <use xlink:href="#image27125"/>
+</pattern>
+<image id="image27130" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern63" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,383,478)">
+  <use xlink:href="#image27130"/>
+</pattern>
+<image id="image27135" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern64" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,386,478)">
+  <use xlink:href="#image27135"/>
+</pattern>
+<image id="image27140" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern65" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,418,478)">
+  <use xlink:href="#image27140"/>
+</pattern>
+<clipPath id="clip44">
+  <path d="M 344 451 L 380 451 L 380 480 L 344 480 Z "/>
+</clipPath>
+<clipPath id="clip45">
+  <path d="M 344 453 C 344 451.894531 344.894531 451 346 451 L 378 451 C 379.105469 451 380 451.449219 380 452 L 380 478 C 380 479.105469 379.105469 480 378 480 L 346 480 C 344.894531 480 344 479.550781 344 479 Z "/>
+</clipPath>
+<linearGradient id="linear9" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,362,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27146" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern66" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,343,450)">
+  <use xlink:href="#image27146"/>
+</pattern>
+<image id="image27149" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern67" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,346,450)">
+  <use xlink:href="#image27149"/>
+</pattern>
+<image id="image27154" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern68" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,378,450)">
+  <use xlink:href="#image27154"/>
+</pattern>
+<image id="image27159" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern69" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,343,453)">
+  <use xlink:href="#image27159"/>
+</pattern>
+<image id="image27164" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern70" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,378,453)">
+  <use xlink:href="#image27164"/>
+</pattern>
+<image id="image27169" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern71" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,343,478)">
+  <use xlink:href="#image27169"/>
+</pattern>
+<image id="image27174" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern72" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,346,478)">
+  <use xlink:href="#image27174"/>
+</pattern>
+<image id="image27179" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern73" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,378,478)">
+  <use xlink:href="#image27179"/>
+</pattern>
+<clipPath id="clip46">
+  <path d="M 304 451 L 340 451 L 340 480 L 304 480 Z "/>
+</clipPath>
+<clipPath id="clip47">
+  <path d="M 304 453 C 304 451.894531 304.894531 451 306 451 L 338 451 C 339.105469 451 340 451.449219 340 452 L 340 478 C 340 479.105469 339.105469 480 338 480 L 306 480 C 304.894531 480 304 479.550781 304 479 Z "/>
+</clipPath>
+<linearGradient id="linear10" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,322,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27185" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern74" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,303,450)">
+  <use xlink:href="#image27185"/>
+</pattern>
+<image id="image27188" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern75" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,306,450)">
+  <use xlink:href="#image27188"/>
+</pattern>
+<image id="image27193" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern76" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,338,450)">
+  <use xlink:href="#image27193"/>
+</pattern>
+<image id="image27198" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern77" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,303,453)">
+  <use xlink:href="#image27198"/>
+</pattern>
+<image id="image27203" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern78" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,338,453)">
+  <use xlink:href="#image27203"/>
+</pattern>
+<image id="image27208" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern79" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,303,478)">
+  <use xlink:href="#image27208"/>
+</pattern>
+<image id="image27213" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern80" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,306,478)">
+  <use xlink:href="#image27213"/>
+</pattern>
+<image id="image27218" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern81" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,338,478)">
+  <use xlink:href="#image27218"/>
+</pattern>
+<clipPath id="clip48">
+  <path d="M 262 451 L 300 451 L 300 480 L 262 480 Z "/>
+</clipPath>
+<clipPath id="clip49">
+  <path d="M 262 453 C 262 451.894531 262.894531 451 264 451 L 298 451 C 299.105469 451 300 451.449219 300 452 L 300 478 C 300 479.105469 299.105469 480 298 480 L 264 480 C 262.894531 480 262 479.550781 262 479 Z "/>
+</clipPath>
+<linearGradient id="linear11" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,281,465.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27224" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern82" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,261,450)">
+  <use xlink:href="#image27224"/>
+</pattern>
+<image id="image27227" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern83" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.4,0,0,1,264,450)">
+  <use xlink:href="#image27227"/>
+</pattern>
+<image id="image27232" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern84" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,298,450)">
+  <use xlink:href="#image27232"/>
+</pattern>
+<image id="image27237" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern85" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,261,453)">
+  <use xlink:href="#image27237"/>
+</pattern>
+<image id="image27242" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern86" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,298,453)">
+  <use xlink:href="#image27242"/>
+</pattern>
+<image id="image27247" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern87" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,261,478)">
+  <use xlink:href="#image27247"/>
+</pattern>
+<image id="image27252" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern88" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.4,0,0,1,264,478)">
+  <use xlink:href="#image27252"/>
+</pattern>
+<image id="image27257" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern89" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,298,478)">
+  <use xlink:href="#image27257"/>
+</pattern>
+<clipPath id="clip50">
+  <path d="M 642 417 L 680 417 L 680 446 L 642 446 Z "/>
+</clipPath>
+<clipPath id="clip51">
+  <path d="M 642 419 C 642 417.894531 642.894531 417 644 417 L 678 417 C 679.105469 417 680 417.449219 680 418 L 680 444 C 680 445.105469 679.105469 446 678 446 L 644 446 C 642.894531 446 642 445.550781 642 445 Z "/>
+</clipPath>
+<linearGradient id="linear12" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,661,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27263" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern90" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,641,416)">
+  <use xlink:href="#image27263"/>
+</pattern>
+<image id="image27266" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern91" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.4,0,0,1,644,416)">
+  <use xlink:href="#image27266"/>
+</pattern>
+<image id="image27271" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern92" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,678,416)">
+  <use xlink:href="#image27271"/>
+</pattern>
+<image id="image27276" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern93" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,641,419)">
+  <use xlink:href="#image27276"/>
+</pattern>
+<image id="image27281" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern94" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,678,419)">
+  <use xlink:href="#image27281"/>
+</pattern>
+<image id="image27286" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern95" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,641,444)">
+  <use xlink:href="#image27286"/>
+</pattern>
+<image id="image27291" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern96" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.4,0,0,1,644,444)">
+  <use xlink:href="#image27291"/>
+</pattern>
+<image id="image27296" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern97" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,678,444)">
+  <use xlink:href="#image27296"/>
+</pattern>
+<clipPath id="clip52">
+  <path d="M 602 417 L 638 417 L 638 446 L 602 446 Z "/>
+</clipPath>
+<clipPath id="clip53">
+  <path d="M 602 419 C 602 417.894531 602.894531 417 604 417 L 636 417 C 637.105469 417 638 417.449219 638 418 L 638 444 C 638 445.105469 637.105469 446 636 446 L 604 446 C 602.894531 446 602 445.550781 602 445 Z "/>
+</clipPath>
+<linearGradient id="linear13" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,620,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27302" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern98" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,601,416)">
+  <use xlink:href="#image27302"/>
+</pattern>
+<image id="image27305" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern99" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,604,416)">
+  <use xlink:href="#image27305"/>
+</pattern>
+<image id="image27310" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern100" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,636,416)">
+  <use xlink:href="#image27310"/>
+</pattern>
+<image id="image27315" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern101" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,601,419)">
+  <use xlink:href="#image27315"/>
+</pattern>
+<image id="image27320" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern102" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,636,419)">
+  <use xlink:href="#image27320"/>
+</pattern>
+<image id="image27325" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern103" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,601,444)">
+  <use xlink:href="#image27325"/>
+</pattern>
+<image id="image27330" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern104" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,604,444)">
+  <use xlink:href="#image27330"/>
+</pattern>
+<image id="image27335" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern105" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,636,444)">
+  <use xlink:href="#image27335"/>
+</pattern>
+<clipPath id="clip54">
+  <path d="M 562 417 L 598 417 L 598 446 L 562 446 Z "/>
+</clipPath>
+<clipPath id="clip55">
+  <path d="M 562 419 C 562 417.894531 562.894531 417 564 417 L 596 417 C 597.105469 417 598 417.449219 598 418 L 598 444 C 598 445.105469 597.105469 446 596 446 L 564 446 C 562.894531 446 562 445.550781 562 445 Z "/>
+</clipPath>
+<linearGradient id="linear14" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,580,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27341" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern106" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,561,416)">
+  <use xlink:href="#image27341"/>
+</pattern>
+<image id="image27344" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern107" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,564,416)">
+  <use xlink:href="#image27344"/>
+</pattern>
+<image id="image27349" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern108" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,596,416)">
+  <use xlink:href="#image27349"/>
+</pattern>
+<image id="image27354" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern109" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,561,419)">
+  <use xlink:href="#image27354"/>
+</pattern>
+<image id="image27359" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern110" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,596,419)">
+  <use xlink:href="#image27359"/>
+</pattern>
+<image id="image27364" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern111" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,561,444)">
+  <use xlink:href="#image27364"/>
+</pattern>
+<image id="image27369" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern112" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,564,444)">
+  <use xlink:href="#image27369"/>
+</pattern>
+<image id="image27374" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern113" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,596,444)">
+  <use xlink:href="#image27374"/>
+</pattern>
+<clipPath id="clip56">
+  <path d="M 513 417 L 558 417 L 558 446 L 513 446 Z "/>
+</clipPath>
+<clipPath id="clip57">
+  <path d="M 513 419 C 513 417.894531 513.894531 417 515 417 L 556 417 C 557.105469 417 558 417.449219 558 418 L 558 444 C 558 445.105469 557.105469 446 556 446 L 515 446 C 513.894531 446 513 445.550781 513 445 Z "/>
+</clipPath>
+<linearGradient id="linear15" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,535.5,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27380" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern114" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,512,416)">
+  <use xlink:href="#image27380"/>
+</pattern>
+<image id="image27383" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern115" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.1,0,0,1,515,416)">
+  <use xlink:href="#image27383"/>
+</pattern>
+<image id="image27388" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern116" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,556,416)">
+  <use xlink:href="#image27388"/>
+</pattern>
+<image id="image27393" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern117" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,512,419)">
+  <use xlink:href="#image27393"/>
+</pattern>
+<image id="image27398" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern118" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,556,419)">
+  <use xlink:href="#image27398"/>
+</pattern>
+<image id="image27403" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern119" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,512,444)">
+  <use xlink:href="#image27403"/>
+</pattern>
+<image id="image27408" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern120" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.1,0,0,1,515,444)">
+  <use xlink:href="#image27408"/>
+</pattern>
+<image id="image27413" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern121" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,556,444)">
+  <use xlink:href="#image27413"/>
+</pattern>
+<clipPath id="clip58">
+  <path d="M 473 417 L 509 417 L 509 446 L 473 446 Z "/>
+</clipPath>
+<clipPath id="clip59">
+  <path d="M 473 419 C 473 417.894531 473.894531 417 475 417 L 507 417 C 508.105469 417 509 417.449219 509 418 L 509 444 C 509 445.105469 508.105469 446 507 446 L 475 446 C 473.894531 446 473 445.550781 473 445 Z "/>
+</clipPath>
+<linearGradient id="linear16" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,491,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27419" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern122" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,472,416)">
+  <use xlink:href="#image27419"/>
+</pattern>
+<image id="image27422" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern123" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,475,416)">
+  <use xlink:href="#image27422"/>
+</pattern>
+<image id="image27427" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern124" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,507,416)">
+  <use xlink:href="#image27427"/>
+</pattern>
+<image id="image27432" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern125" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,472,419)">
+  <use xlink:href="#image27432"/>
+</pattern>
+<image id="image27437" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern126" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,507,419)">
+  <use xlink:href="#image27437"/>
+</pattern>
+<image id="image27442" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern127" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,472,444)">
+  <use xlink:href="#image27442"/>
+</pattern>
+<image id="image27447" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern128" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,475,444)">
+  <use xlink:href="#image27447"/>
+</pattern>
+<image id="image27452" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern129" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,507,444)">
+  <use xlink:href="#image27452"/>
+</pattern>
+<clipPath id="clip60">
+  <path d="M 424 417 L 469 417 L 469 446 L 424 446 Z "/>
+</clipPath>
+<clipPath id="clip61">
+  <path d="M 424 419 C 424 417.894531 424.894531 417 426 417 L 467 417 C 468.105469 417 469 417.449219 469 418 L 469 444 C 469 445.105469 468.105469 446 467 446 L 426 446 C 424.894531 446 424 445.550781 424 445 Z "/>
+</clipPath>
+<linearGradient id="linear17" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,446.5,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27458" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern130" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,423,416)">
+  <use xlink:href="#image27458"/>
+</pattern>
+<image id="image27461" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern131" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.1,0,0,1,426,416)">
+  <use xlink:href="#image27461"/>
+</pattern>
+<image id="image27466" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern132" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,467,416)">
+  <use xlink:href="#image27466"/>
+</pattern>
+<image id="image27471" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern133" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,423,419)">
+  <use xlink:href="#image27471"/>
+</pattern>
+<image id="image27476" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern134" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,467,419)">
+  <use xlink:href="#image27476"/>
+</pattern>
+<image id="image27481" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern135" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,423,444)">
+  <use xlink:href="#image27481"/>
+</pattern>
+<image id="image27486" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern136" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.1,0,0,1,426,444)">
+  <use xlink:href="#image27486"/>
+</pattern>
+<image id="image27491" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern137" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,467,444)">
+  <use xlink:href="#image27491"/>
+</pattern>
+<clipPath id="clip62">
+  <path d="M 384 417 L 420 417 L 420 446 L 384 446 Z "/>
+</clipPath>
+<clipPath id="clip63">
+  <path d="M 384 419 C 384 417.894531 384.894531 417 386 417 L 418 417 C 419.105469 417 420 417.449219 420 418 L 420 444 C 420 445.105469 419.105469 446 418 446 L 386 446 C 384.894531 446 384 445.550781 384 445 Z "/>
+</clipPath>
+<linearGradient id="linear18" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,402,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27497" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern138" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,383,416)">
+  <use xlink:href="#image27497"/>
+</pattern>
+<image id="image27500" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern139" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,386,416)">
+  <use xlink:href="#image27500"/>
+</pattern>
+<image id="image27505" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern140" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,418,416)">
+  <use xlink:href="#image27505"/>
+</pattern>
+<image id="image27510" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern141" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,383,419)">
+  <use xlink:href="#image27510"/>
+</pattern>
+<image id="image27515" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern142" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,418,419)">
+  <use xlink:href="#image27515"/>
+</pattern>
+<image id="image27520" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern143" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,383,444)">
+  <use xlink:href="#image27520"/>
+</pattern>
+<image id="image27525" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern144" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,386,444)">
+  <use xlink:href="#image27525"/>
+</pattern>
+<image id="image27530" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern145" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,418,444)">
+  <use xlink:href="#image27530"/>
+</pattern>
+<clipPath id="clip64">
+  <path d="M 344 417 L 380 417 L 380 446 L 344 446 Z "/>
+</clipPath>
+<clipPath id="clip65">
+  <path d="M 344 419 C 344 417.894531 344.894531 417 346 417 L 378 417 C 379.105469 417 380 417.449219 380 418 L 380 444 C 380 445.105469 379.105469 446 378 446 L 346 446 C 344.894531 446 344 445.550781 344 445 Z "/>
+</clipPath>
+<linearGradient id="linear19" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,362,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27536" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern146" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,343,416)">
+  <use xlink:href="#image27536"/>
+</pattern>
+<image id="image27539" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern147" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,346,416)">
+  <use xlink:href="#image27539"/>
+</pattern>
+<image id="image27544" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern148" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,378,416)">
+  <use xlink:href="#image27544"/>
+</pattern>
+<image id="image27549" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern149" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,343,419)">
+  <use xlink:href="#image27549"/>
+</pattern>
+<image id="image27554" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern150" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,378,419)">
+  <use xlink:href="#image27554"/>
+</pattern>
+<image id="image27559" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern151" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,343,444)">
+  <use xlink:href="#image27559"/>
+</pattern>
+<image id="image27564" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern152" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,346,444)">
+  <use xlink:href="#image27564"/>
+</pattern>
+<image id="image27569" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern153" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,378,444)">
+  <use xlink:href="#image27569"/>
+</pattern>
+<clipPath id="clip66">
+  <path d="M 304 417 L 340 417 L 340 446 L 304 446 Z "/>
+</clipPath>
+<clipPath id="clip67">
+  <path d="M 304 419 C 304 417.894531 304.894531 417 306 417 L 338 417 C 339.105469 417 340 417.449219 340 418 L 340 444 C 340 445.105469 339.105469 446 338 446 L 306 446 C 304.894531 446 304 445.550781 304 445 Z "/>
+</clipPath>
+<linearGradient id="linear20" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,322,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27575" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern154" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,303,416)">
+  <use xlink:href="#image27575"/>
+</pattern>
+<image id="image27578" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern155" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,306,416)">
+  <use xlink:href="#image27578"/>
+</pattern>
+<image id="image27583" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern156" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,338,416)">
+  <use xlink:href="#image27583"/>
+</pattern>
+<image id="image27588" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern157" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,303,419)">
+  <use xlink:href="#image27588"/>
+</pattern>
+<image id="image27593" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern158" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,338,419)">
+  <use xlink:href="#image27593"/>
+</pattern>
+<image id="image27598" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern159" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,303,444)">
+  <use xlink:href="#image27598"/>
+</pattern>
+<image id="image27603" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern160" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,306,444)">
+  <use xlink:href="#image27603"/>
+</pattern>
+<image id="image27608" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern161" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,338,444)">
+  <use xlink:href="#image27608"/>
+</pattern>
+<clipPath id="clip68">
+  <path d="M 262 417 L 300 417 L 300 446 L 262 446 Z "/>
+</clipPath>
+<clipPath id="clip69">
+  <path d="M 262 419 C 262 417.894531 262.894531 417 264 417 L 298 417 C 299.105469 417 300 417.449219 300 418 L 300 444 C 300 445.105469 299.105469 446 298 446 L 264 446 C 262.894531 446 262 445.550781 262 445 Z "/>
+</clipPath>
+<linearGradient id="linear21" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,281,431.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27614" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern162" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,261,416)">
+  <use xlink:href="#image27614"/>
+</pattern>
+<image id="image27617" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern163" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.4,0,0,1,264,416)">
+  <use xlink:href="#image27617"/>
+</pattern>
+<image id="image27622" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern164" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,298,416)">
+  <use xlink:href="#image27622"/>
+</pattern>
+<image id="image27627" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern165" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,261,419)">
+  <use xlink:href="#image27627"/>
+</pattern>
+<image id="image27632" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern166" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,298,419)">
+  <use xlink:href="#image27632"/>
+</pattern>
+<image id="image27637" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern167" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,261,444)">
+  <use xlink:href="#image27637"/>
+</pattern>
+<image id="image27642" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern168" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.4,0,0,1,264,444)">
+  <use xlink:href="#image27642"/>
+</pattern>
+<image id="image27647" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern169" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,298,444)">
+  <use xlink:href="#image27647"/>
+</pattern>
+<clipPath id="clip70">
+  <path d="M 642 383 L 680 383 L 680 412 L 642 412 Z "/>
+</clipPath>
+<clipPath id="clip71">
+  <path d="M 642 385 C 642 383.894531 642.894531 383 644 383 L 678 383 C 679.105469 383 680 383.449219 680 384 L 680 410 C 680 411.105469 679.105469 412 678 412 L 644 412 C 642.894531 412 642 411.550781 642 411 Z "/>
+</clipPath>
+<linearGradient id="linear22" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,661,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27653" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern170" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,641,382)">
+  <use xlink:href="#image27653"/>
+</pattern>
+<image id="image27656" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern171" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.4,0,0,1,644,382)">
+  <use xlink:href="#image27656"/>
+</pattern>
+<image id="image27661" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern172" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,678,382)">
+  <use xlink:href="#image27661"/>
+</pattern>
+<image id="image27666" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern173" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,641,385)">
+  <use xlink:href="#image27666"/>
+</pattern>
+<image id="image27671" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern174" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,678,385)">
+  <use xlink:href="#image27671"/>
+</pattern>
+<image id="image27676" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern175" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,641,410)">
+  <use xlink:href="#image27676"/>
+</pattern>
+<image id="image27681" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern176" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.4,0,0,1,644,410)">
+  <use xlink:href="#image27681"/>
+</pattern>
+<image id="image27686" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern177" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,678,410)">
+  <use xlink:href="#image27686"/>
+</pattern>
+<clipPath id="clip72">
+  <path d="M 602 383 L 638 383 L 638 412 L 602 412 Z "/>
+</clipPath>
+<clipPath id="clip73">
+  <path d="M 602 385 C 602 383.894531 602.894531 383 604 383 L 636 383 C 637.105469 383 638 383.449219 638 384 L 638 410 C 638 411.105469 637.105469 412 636 412 L 604 412 C 602.894531 412 602 411.550781 602 411 Z "/>
+</clipPath>
+<linearGradient id="linear23" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,620,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27692" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern178" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,601,382)">
+  <use xlink:href="#image27692"/>
+</pattern>
+<image id="image27695" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern179" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,604,382)">
+  <use xlink:href="#image27695"/>
+</pattern>
+<image id="image27700" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern180" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,636,382)">
+  <use xlink:href="#image27700"/>
+</pattern>
+<image id="image27705" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern181" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,601,385)">
+  <use xlink:href="#image27705"/>
+</pattern>
+<image id="image27710" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern182" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,636,385)">
+  <use xlink:href="#image27710"/>
+</pattern>
+<image id="image27715" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern183" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,601,410)">
+  <use xlink:href="#image27715"/>
+</pattern>
+<image id="image27720" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern184" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,604,410)">
+  <use xlink:href="#image27720"/>
+</pattern>
+<image id="image27725" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern185" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,636,410)">
+  <use xlink:href="#image27725"/>
+</pattern>
+<clipPath id="clip74">
+  <path d="M 562 383 L 598 383 L 598 412 L 562 412 Z "/>
+</clipPath>
+<clipPath id="clip75">
+  <path d="M 562 385 C 562 383.894531 562.894531 383 564 383 L 596 383 C 597.105469 383 598 383.449219 598 384 L 598 410 C 598 411.105469 597.105469 412 596 412 L 564 412 C 562.894531 412 562 411.550781 562 411 Z "/>
+</clipPath>
+<linearGradient id="linear24" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,580,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27731" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern186" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,561,382)">
+  <use xlink:href="#image27731"/>
+</pattern>
+<image id="image27734" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern187" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,564,382)">
+  <use xlink:href="#image27734"/>
+</pattern>
+<image id="image27739" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern188" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,596,382)">
+  <use xlink:href="#image27739"/>
+</pattern>
+<image id="image27744" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern189" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,561,385)">
+  <use xlink:href="#image27744"/>
+</pattern>
+<image id="image27749" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern190" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,596,385)">
+  <use xlink:href="#image27749"/>
+</pattern>
+<image id="image27754" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern191" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,561,410)">
+  <use xlink:href="#image27754"/>
+</pattern>
+<image id="image27759" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern192" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,564,410)">
+  <use xlink:href="#image27759"/>
+</pattern>
+<image id="image27764" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern193" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,596,410)">
+  <use xlink:href="#image27764"/>
+</pattern>
+<clipPath id="clip76">
+  <path d="M 513 383 L 558 383 L 558 412 L 513 412 Z "/>
+</clipPath>
+<clipPath id="clip77">
+  <path d="M 513 385 C 513 383.894531 513.894531 383 515 383 L 556 383 C 557.105469 383 558 383.449219 558 384 L 558 410 C 558 411.105469 557.105469 412 556 412 L 515 412 C 513.894531 412 513 411.550781 513 411 Z "/>
+</clipPath>
+<linearGradient id="linear25" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,535.5,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27770" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern194" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,512,382)">
+  <use xlink:href="#image27770"/>
+</pattern>
+<image id="image27773" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern195" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.1,0,0,1,515,382)">
+  <use xlink:href="#image27773"/>
+</pattern>
+<image id="image27778" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern196" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,556,382)">
+  <use xlink:href="#image27778"/>
+</pattern>
+<image id="image27783" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern197" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,512,385)">
+  <use xlink:href="#image27783"/>
+</pattern>
+<image id="image27788" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern198" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,556,385)">
+  <use xlink:href="#image27788"/>
+</pattern>
+<image id="image27793" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern199" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,512,410)">
+  <use xlink:href="#image27793"/>
+</pattern>
+<image id="image27798" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern200" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.1,0,0,1,515,410)">
+  <use xlink:href="#image27798"/>
+</pattern>
+<image id="image27803" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern201" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,556,410)">
+  <use xlink:href="#image27803"/>
+</pattern>
+<clipPath id="clip78">
+  <path d="M 473 383 L 509 383 L 509 412 L 473 412 Z "/>
+</clipPath>
+<clipPath id="clip79">
+  <path d="M 473 385 C 473 383.894531 473.894531 383 475 383 L 507 383 C 508.105469 383 509 383.449219 509 384 L 509 410 C 509 411.105469 508.105469 412 507 412 L 475 412 C 473.894531 412 473 411.550781 473 411 Z "/>
+</clipPath>
+<linearGradient id="linear26" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,491,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27809" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern202" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,472,382)">
+  <use xlink:href="#image27809"/>
+</pattern>
+<image id="image27812" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern203" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,475,382)">
+  <use xlink:href="#image27812"/>
+</pattern>
+<image id="image27817" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern204" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,507,382)">
+  <use xlink:href="#image27817"/>
+</pattern>
+<image id="image27822" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern205" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,472,385)">
+  <use xlink:href="#image27822"/>
+</pattern>
+<image id="image27827" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern206" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,507,385)">
+  <use xlink:href="#image27827"/>
+</pattern>
+<image id="image27832" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern207" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,472,410)">
+  <use xlink:href="#image27832"/>
+</pattern>
+<image id="image27837" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern208" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,475,410)">
+  <use xlink:href="#image27837"/>
+</pattern>
+<image id="image27842" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern209" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,507,410)">
+  <use xlink:href="#image27842"/>
+</pattern>
+<clipPath id="clip80">
+  <path d="M 424 383 L 469 383 L 469 412 L 424 412 Z "/>
+</clipPath>
+<clipPath id="clip81">
+  <path d="M 424 385 C 424 383.894531 424.894531 383 426 383 L 467 383 C 468.105469 383 469 383.449219 469 384 L 469 410 C 469 411.105469 468.105469 412 467 412 L 426 412 C 424.894531 412 424 411.550781 424 411 Z "/>
+</clipPath>
+<linearGradient id="linear27" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,446.5,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27848" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern210" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,423,382)">
+  <use xlink:href="#image27848"/>
+</pattern>
+<image id="image27851" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern211" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(4.1,0,0,1,426,382)">
+  <use xlink:href="#image27851"/>
+</pattern>
+<image id="image27856" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern212" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,467,382)">
+  <use xlink:href="#image27856"/>
+</pattern>
+<image id="image27861" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern213" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,423,385)">
+  <use xlink:href="#image27861"/>
+</pattern>
+<image id="image27866" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern214" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,467,385)">
+  <use xlink:href="#image27866"/>
+</pattern>
+<image id="image27871" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern215" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,423,410)">
+  <use xlink:href="#image27871"/>
+</pattern>
+<image id="image27876" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern216" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(4.1,0,0,1,426,410)">
+  <use xlink:href="#image27876"/>
+</pattern>
+<image id="image27881" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern217" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,467,410)">
+  <use xlink:href="#image27881"/>
+</pattern>
+<clipPath id="clip82">
+  <path d="M 384 383 L 420 383 L 420 412 L 384 412 Z "/>
+</clipPath>
+<clipPath id="clip83">
+  <path d="M 384 385 C 384 383.894531 384.894531 383 386 383 L 418 383 C 419.105469 383 420 383.449219 420 384 L 420 410 C 420 411.105469 419.105469 412 418 412 L 386 412 C 384.894531 412 384 411.550781 384 411 Z "/>
+</clipPath>
+<linearGradient id="linear28" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,402,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27887" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern218" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,383,382)">
+  <use xlink:href="#image27887"/>
+</pattern>
+<image id="image27890" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern219" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,386,382)">
+  <use xlink:href="#image27890"/>
+</pattern>
+<image id="image27895" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern220" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,418,382)">
+  <use xlink:href="#image27895"/>
+</pattern>
+<image id="image27900" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern221" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,383,385)">
+  <use xlink:href="#image27900"/>
+</pattern>
+<image id="image27905" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern222" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,418,385)">
+  <use xlink:href="#image27905"/>
+</pattern>
+<image id="image27910" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern223" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,383,410)">
+  <use xlink:href="#image27910"/>
+</pattern>
+<image id="image27915" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern224" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,386,410)">
+  <use xlink:href="#image27915"/>
+</pattern>
+<image id="image27920" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern225" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,418,410)">
+  <use xlink:href="#image27920"/>
+</pattern>
+<clipPath id="clip84">
+  <path d="M 344 383 L 380 383 L 380 412 L 344 412 Z "/>
+</clipPath>
+<clipPath id="clip85">
+  <path d="M 344 385 C 344 383.894531 344.894531 383 346 383 L 378 383 C 379.105469 383 380 383.449219 380 384 L 380 410 C 380 411.105469 379.105469 412 378 412 L 346 412 C 344.894531 412 344 411.550781 344 411 Z "/>
+</clipPath>
+<linearGradient id="linear29" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,362,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27926" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern226" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,343,382)">
+  <use xlink:href="#image27926"/>
+</pattern>
+<image id="image27929" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern227" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,346,382)">
+  <use xlink:href="#image27929"/>
+</pattern>
+<image id="image27934" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern228" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,378,382)">
+  <use xlink:href="#image27934"/>
+</pattern>
+<image id="image27939" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern229" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,343,385)">
+  <use xlink:href="#image27939"/>
+</pattern>
+<image id="image27944" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern230" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,378,385)">
+  <use xlink:href="#image27944"/>
+</pattern>
+<image id="image27949" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern231" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,343,410)">
+  <use xlink:href="#image27949"/>
+</pattern>
+<image id="image27954" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern232" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,346,410)">
+  <use xlink:href="#image27954"/>
+</pattern>
+<image id="image27959" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern233" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,378,410)">
+  <use xlink:href="#image27959"/>
+</pattern>
+<clipPath id="clip86">
+  <path d="M 304 383 L 340 383 L 340 412 L 304 412 Z "/>
+</clipPath>
+<clipPath id="clip87">
+  <path d="M 304 385 C 304 383.894531 304.894531 383 306 383 L 338 383 C 339.105469 383 340 383.449219 340 384 L 340 410 C 340 411.105469 339.105469 412 338 412 L 306 412 C 304.894531 412 304 411.550781 304 411 Z "/>
+</clipPath>
+<linearGradient id="linear30" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,322,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image27965" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern234" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,303,382)">
+  <use xlink:href="#image27965"/>
+</pattern>
+<image id="image27968" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern235" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.2,0,0,1,306,382)">
+  <use xlink:href="#image27968"/>
+</pattern>
+<image id="image27973" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern236" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,338,382)">
+  <use xlink:href="#image27973"/>
+</pattern>
+<image id="image27978" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern237" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,303,385)">
+  <use xlink:href="#image27978"/>
+</pattern>
+<image id="image27983" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern238" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,338,385)">
+  <use xlink:href="#image27983"/>
+</pattern>
+<image id="image27988" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern239" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,303,410)">
+  <use xlink:href="#image27988"/>
+</pattern>
+<image id="image27993" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern240" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.2,0,0,1,306,410)">
+  <use xlink:href="#image27993"/>
+</pattern>
+<image id="image27998" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern241" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,338,410)">
+  <use xlink:href="#image27998"/>
+</pattern>
+<clipPath id="clip88">
+  <path d="M 262 383 L 300 383 L 300 412 L 262 412 Z "/>
+</clipPath>
+<clipPath id="clip89">
+  <path d="M 262 385 C 262 383.894531 262.894531 383 264 383 L 298 383 C 299.105469 383 300 383.449219 300 384 L 300 410 C 300 411.105469 299.105469 412 298 412 L 264 412 C 262.894531 412 262 411.550781 262 411 Z "/>
+</clipPath>
+<linearGradient id="linear31" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,281,397.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image28004" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMElEQVQImWPcv38/x+cfn5MY/jNks3z+8TlJVEQ0Q19H/zULEwNTtp6W3lNODs5OAGNRDtG4qJkLAAAAAElFTkSuQmCC"/>
+<pattern id="pattern242" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,261,382)">
+  <use xlink:href="#image28004"/>
+</pattern>
+<image id="image28007" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWPctG3TfwYiAOP////PEKOQaAAAo3EG5bdyP9UAAAAASUVORK5CYII="/>
+<pattern id="pattern243" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(3.4,0,0,1,264,382)">
+  <use xlink:href="#image28007"/>
+</pattern>
+<image id="image28012" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngH29/bA0dTREuvs65gCCQgJgy4qLugCAAJrXTgQSS0OoMYAAAAASUVORK5CYII="/>
+<pattern id="pattern244" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,298,382)">
+  <use xlink:href="#image28012"/>
+</pattern>
+<image id="image28017" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImWPYsn3L/////29iYGBgYGJkZGRgYGB4j8x5h8z5wMDAwMDEAAHvceohwAEAfgAOa5P3tl8AAAAASUVORK5CYII="/>
+<pattern id="pattern245" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,261,385)">
+  <use xlink:href="#image28017"/>
+</pattern>
+<image id="image28022" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAL0lEQVQImWNgYGBg+P///6Yt27f8Z2KAgPeMjIwMMM47ZM4HZM57BgYGBqx6CHAAZGgOawTczAEAAAAASUVORK5CYII="/>
+<pattern id="pattern246" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,298,385)">
+  <use xlink:href="#image28022"/>
+</pattern>
+<image id="image28027" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+7R0dFO////CQHY2di16erpGAUDBXYB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQFZ9HDB3SgVpAAAAAElFTkSuQmCC"/>
+<pattern id="pattern247" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,261,410)">
+  <use xlink:href="#image28027"/>
+</pattern>
+<image id="image28032" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWNgIBIw/v//n5MohXv37/1PrIkziVEIAPmmCdjsX51TAAAAAElFTkSuQmCC"/>
+<pattern id="pattern248" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(3.4,0,0,1,264,410)">
+  <use xlink:href="#image28032"/>
+</pattern>
+<image id="image28037" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/Af///wnS0tJF8vTyoAHGxsZD+/37ihcWF+gC+fv5mBcVF+IgHyCRAP///4D///9A////BVGOH9IiERDkAAAAAElFTkSuQmCC"/>
+<pattern id="pattern249" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,298,410)">
+  <use xlink:href="#image28037"/>
+</pattern>
+<image id="image28041" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAC8klEQVQ4jaWTT2gcdRTHP/ObmZ2dze6M+6drdpNs/uwal2o3MQUPQqFEcop4kCqCxYPg0TQF9dyzESrxKGgqFYQWDxI8VCilF4sF29TYatpUNk2ybdNssjvZnc3szP48qItaPfngXb689+Hx+H7hf5byT2F+/pRFODyrhrQp3/fHADRNWwo8/1tarY9mZk7V/xPw8adzk6pQv3wylbHidtII6Qag4LVb7NS29x88qtSDTvD6O2+9d/ExwCefn55UtdDXB0dLPb/WonxxLWDlYRuA0bTOGxMqw1aDmytLjcD3Xn77zZMXu4CzZ+etTih859mnxw+c+8ngm5ttJksZ [...]
+<pattern id="pattern250" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,478,353)">
+  <use xlink:href="#image28041"/>
+</pattern>
+<image id="image28042" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAACKElEQVQ4jaWTy2sTURTGv/uY3JmbeeTR1iS2pUioIpK48g8oZCeuXRQXgktLBXXdtQpKXQpCpQvXIt0I/QOkUCutaBE3VlppkzqPZKaTmV43NtimUcEPfpvDPR/3O/dc4D9FThbm5+ds6Posy/BGkiR1AOCcr6Vx8gZR9GRmZs4baPD0+cMpRtnLM0NlO+8URUYTAAjiboR9t3nwfW/bSw/T67dv3lvuM3j24vEU45lXFydrWTubg9B1aBoHACRJgiiK4AUuPmyutdMkvnbrxp3lnsHi4rx9mNE/Xzp/eTifK0JKeWreMAzR2t/D+qd3uzSOqtPTMx4FACrN2Upp [...]
+<pattern id="pattern251" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,555,353)">
+  <use xlink:href="#image28042"/>
+</pattern>
+<clipPath id="clip90">
+  <path d="M 262 346 L 468 346 L 468 375 L 262 375 Z "/>
+</clipPath>
+<clipPath id="clip91">
+  <path d="M 262 348 C 262 346.894531 262.894531 346 264 346 L 466 346 C 467.105469 346 468 346.449219 468 347 L 468 373 C 468 374.105469 467.105469 375 466 375 L 264 375 C 262.894531 375 262 374.550781 262 374 Z "/>
+</clipPath>
+<linearGradient id="linear32" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,365,360.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image28045" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern252" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,261,345)">
+  <use xlink:href="#image28045"/>
+</pattern>
+<image id="image28048" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern253" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(20.2,0,0,1,264,345)">
+  <use xlink:href="#image28048"/>
+</pattern>
+<image id="image28053" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern254" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,466,345)">
+  <use xlink:href="#image28053"/>
+</pattern>
+<image id="image28058" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern255" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,261,348)">
+  <use xlink:href="#image28058"/>
+</pattern>
+<image id="image28063" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern256" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,466,348)">
+  <use xlink:href="#image28063"/>
+</pattern>
+<image id="image28068" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern257" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,261,373)">
+  <use xlink:href="#image28068"/>
+</pattern>
+<image id="image28073" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern258" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(20.2,0,0,1,264,373)">
+  <use xlink:href="#image28073"/>
+</pattern>
+<image id="image28078" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern259" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,466,373)">
+  <use xlink:href="#image28078"/>
+</pattern>
+<clipPath id="clip92">
+  <path d="M 262 309 L 680 309 L 680 338 L 262 338 Z "/>
+</clipPath>
+<clipPath id="clip93">
+  <path d="M 262 311 C 262 309.894531 262.894531 309 264 309 L 678 309 C 679.105469 309 680 309.449219 680 310 L 680 336 C 680 337.105469 679.105469 338 678 338 L 264 338 C 262.894531 338 262 337.550781 262 337 Z "/>
+</clipPath>
+<linearGradient id="linear33" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,471,323.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image28084" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern260" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,261,308)">
+  <use xlink:href="#image28084"/>
+</pattern>
+<image id="image28087" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern261" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(41.4,0,0,1,264,308)">
+  <use xlink:href="#image28087"/>
+</pattern>
+<image id="image28092" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern262" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,678,308)">
+  <use xlink:href="#image28092"/>
+</pattern>
+<image id="image28097" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern263" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,261,311)">
+  <use xlink:href="#image28097"/>
+</pattern>
+<image id="image28102" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern264" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,678,311)">
+  <use xlink:href="#image28102"/>
+</pattern>
+<image id="image28107" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern265" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,261,336)">
+  <use xlink:href="#image28107"/>
+</pattern>
+<image id="image28112" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern266" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(41.4,0,0,1,264,336)">
+  <use xlink:href="#image28112"/>
+</pattern>
+<image id="image28117" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern267" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,678,336)">
+  <use xlink:href="#image28117"/>
+</pattern>
+<clipPath id="clip94">
+  <path d="M 678 101 L 782 101 L 782 130 L 678 130 Z "/>
+</clipPath>
+<clipPath id="clip95">
+  <path d="M 678 103 C 678 101.894531 678.894531 101 680 101 L 780 101 C 781.105469 101 782 101.449219 782 102 L 782 128 C 782 129.105469 781.105469 130 780 130 L 680 130 C 678.894531 130 678 129.550781 678 129 Z "/>
+</clipPath>
+<image id="image28123" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern268" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,677,100)">
+  <use xlink:href="#image28123"/>
+</pattern>
+<image id="image28126" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern269" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10,0,0,1,680,100)">
+  <use xlink:href="#image28126"/>
+</pattern>
+<image id="image28131" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern270" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,780,100)">
+  <use xlink:href="#image28131"/>
+</pattern>
+<image id="image28136" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern271" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,677,103)">
+  <use xlink:href="#image28136"/>
+</pattern>
+<image id="image28141" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern272" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,780,103)">
+  <use xlink:href="#image28141"/>
+</pattern>
+<image id="image28146" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern273" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,677,128)">
+  <use xlink:href="#image28146"/>
+</pattern>
+<image id="image28151" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern274" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10,0,0,1,680,128)">
+  <use xlink:href="#image28151"/>
+</pattern>
+<image id="image28156" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern275" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,780,128)">
+  <use xlink:href="#image28156"/>
+</pattern>
+<clipPath id="clip96">
+  <path d="M 370 101 L 477 101 L 477 130 L 370 130 Z "/>
+</clipPath>
+<clipPath id="clip97">
+  <path d="M 370 103 C 370 101.894531 370.894531 101 372 101 L 475 101 C 476.105469 101 477 101.449219 477 102 L 477 128 C 477 129.105469 476.105469 130 475 130 L 372 130 C 370.894531 130 370 129.550781 370 129 Z "/>
+</clipPath>
+<image id="image28162" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/Ab+/vwjz+PNiAP8AawLz+PNiAQABW////2kEAgACawH+AWlNS03CgRsReS5uP4EAAAAASUVORK5CYII="/>
+<pattern id="pattern276" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,369,100)">
+  <use xlink:href="#image28162"/>
+</pattern>
+<image id="image28165" width="10" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAADCAYAAACqPZ51AAAABmJLR0QA/wD/AP+gvaeTAAAAEElEQVQImWPctG3Tf4YBAQB12AMbN4u3dgAAAABJRU5ErkJggg=="/>
+<pattern id="pattern277" patternUnits="userSpaceOnUse" width="10" height="3"  patternTransform="matrix(10.3,0,0,1,372,100)">
+  <use xlink:href="#image28165"/>
+</pattern>
+<image id="image28170" width="3" height="3" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAADCAYAAABWKLW/AAAABmJLR0QA/wD/AP+gvaeTAAAAMklEQVQImQEnANj/AbK2stUAAQCVDQgNngT///9pAgECh/P48wABAAAAALW1tT7/Av+XMYkQEHb2YSQAAAAASUVORK5CYII="/>
+<pattern id="pattern278" patternUnits="userSpaceOnUse" width="3" height="3"  patternTransform="matrix(1,0,0,1,475,100)">
+  <use xlink:href="#image28170"/>
+</pattern>
+<image id="image28175" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAHklEQVQImWPYsn3LfwYoYGJkZGQggsOABIjVg8wBAG03A0SCey1xAAAAAElFTkSuQmCC"/>
+<pattern id="pattern279" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,369,103)">
+  <use xlink:href="#image28175"/>
+</pattern>
+<image id="image28180" width="3" height="9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAJCAYAAAD3s5bZAAAABmJLR0QA/wD/AP+gvaeTAAAAIElEQVQImWNggIIt27f8Z4JxGBkZGYjgMDAwEKMMgwMAU58DRGePsDEAAAAASUVORK5CYII="/>
+<pattern id="pattern280" patternUnits="userSpaceOnUse" width="3" height="9"  patternTransform="matrix(1,0,0,2.777778,475,103)">
+  <use xlink:href="#image28180"/>
+</pattern>
+<image id="image28185" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AMPFw+69vb0+AAAAAAHY2di16OnoGP37/XEB+Pj4RuDg4Gnn6ecsAf///wUAAAA7AAAAQB1pG75Rg7UHAAAAAElFTkSuQmCC"/>
+<pattern id="pattern281" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,369,128)">
+  <use xlink:href="#image28185"/>
+</pattern>
+<image id="image28190" width="10" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAECAYAAAC3OK7NAAAABmJLR0QA/wD/AP+gvaeTAAAAGklEQVQImWNgoDZg3Lt/73+iFP7//38mMQoBi1gG0U91iq8AAAAASUVORK5CYII="/>
+<pattern id="pattern282" patternUnits="userSpaceOnUse" width="10" height="4"  patternTransform="matrix(10.3,0,0,1,372,128)">
+  <use xlink:href="#image28190"/>
+</pattern>
+<image id="image28195" width="3" height="4" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAECAYAAABLLYUHAAAABmJLR0QA/wD/AP+gvaeTAAAAP0lEQVQImQE0AMv/AQAAAAC9vb0+BggGsAG9vb0+AwUDjxgXGOgCAgQCnRgWGOIgHyCRAP///4D///9A////BZPOE/VcrSXTAAAAAElFTkSuQmCC"/>
+<pattern id="pattern283" patternUnits="userSpaceOnUse" width="3" height="4"  patternTransform="matrix(1,0,0,1,475,128)">
+  <use xlink:href="#image28195"/>
+</pattern>
+<clipPath id="clip98">
+  <path d="M 987 0 L 1000 0 L 1000 800 L 987 800 Z "/>
+</clipPath>
+<clipPath id="clip99">
+  <path d="M 990 263 L 997 263 L 997 797 L 990 797 Z "/>
+</clipPath>
+<clipPath id="clip100">
+  <path d="M 990 266.5 C 990 264.566406 991.566406 263 993.5 263 C 995.433594 263 997 264.566406 997 266.5 L 997 793.5 C 997 795.433594 995.433594 797 993.5 797 C 991.566406 797 990 795.433594 990 793.5 Z "/>
+</clipPath>
+</defs>
+<g id="surface26804">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="49" y="14"/>
+  <use xlink:href="#glyph0-2" x="55" y="14"/>
+  <use xlink:href="#glyph0-3" x="65" y="14"/>
+  <use xlink:href="#glyph0-4" x="75" y="14"/>
+  <use xlink:href="#glyph0-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip5)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-6" x="42" y="33"/>
+  <use xlink:href="#glyph0-7" x="55" y="33"/>
+  <use xlink:href="#glyph0-8" x="65" y="33"/>
+  <use xlink:href="#glyph0-3" x="72" y="33"/>
+  <use xlink:href="#glyph0-4" x="82" y="33"/>
+  <use xlink:href="#glyph0-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip6)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip7)" clip-rule="nonzero">
+<g clip-path="url(#clip8)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern2);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern4);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern6);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern8);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-1" x="42" y="66"/>
+  <use xlink:href="#glyph1-2" x="51" y="66"/>
+  <use xlink:href="#glyph1-3" x="60" y="66"/>
+  <use xlink:href="#glyph1-4" x="71" y="66"/>
+  <use xlink:href="#glyph1-2" x="79" y="66"/>
+  <use xlink:href="#glyph1-5" x="88" y="66"/>
+  <use xlink:href="#glyph1-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="42" y="65"/>
+  <use xlink:href="#glyph1-2" x="51" y="65"/>
+  <use xlink:href="#glyph1-3" x="60" y="65"/>
+  <use xlink:href="#glyph1-4" x="71" y="65"/>
+  <use xlink:href="#glyph1-2" x="79" y="65"/>
+  <use xlink:href="#glyph1-5" x="88" y="65"/>
+  <use xlink:href="#glyph1-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip9)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="46" y="96"/>
+  <use xlink:href="#glyph0-10" x="58" y="96"/>
+  <use xlink:href="#glyph0-11" x="65" y="96"/>
+  <use xlink:href="#glyph0-12" x="75" y="96"/>
+  <use xlink:href="#glyph0-8" x="82" y="96"/>
+  <use xlink:href="#glyph0-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip10)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip11)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 101 L 145 101 L 145 119 L 0 119 Z M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="36" y="115"/>
+  <use xlink:href="#glyph0-4" x="47" y="115"/>
+  <use xlink:href="#glyph0-2" x="57" y="115"/>
+  <use xlink:href="#glyph0-8" x="67" y="115"/>
+  <use xlink:href="#glyph0-11" x="74" y="115"/>
+  <use xlink:href="#glyph0-15" x="84" y="115"/>
+  <use xlink:href="#glyph0-8" x="93" y="115"/>
+  <use xlink:href="#glyph0-13" x="100" y="115"/>
+</g>
+<g clip-path="url(#clip12)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip13)" clip-rule="nonzero">
+<g clip-path="url(#clip14)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 23 126 L 26 126 L 26 129 L 23 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern10);" d="M 26 126 L 120 126 L 120 129 L 26 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 120 126 L 123 126 L 123 129 L 120 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern12);" d="M 23 129 L 26 129 L 26 154 L 23 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 120 129 L 123 129 L 123 154 L 120 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern14);" d="M 23 154 L 26 154 L 26 158 L 23 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 26 154 L 120 154 L 120 158 L 26 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern16);" d="M 120 154 L 123 154 L 123 158 L 120 158 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 131 L 115 131 L 115 152 L 31 152 Z M 31 131 L 115 131 L 115 152 L 31 152 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="60" y="148"/>
+  <use xlink:href="#glyph1-8" x="69" y="148"/>
+  <use xlink:href="#glyph1-8" x="77" y="148"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="60" y="147"/>
+  <use xlink:href="#glyph1-8" x="69" y="147"/>
+  <use xlink:href="#glyph1-8" x="77" y="147"/>
+</g>
+<g clip-path="url(#clip15)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,92.156863%,80.392157%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 165 L 31 165 L 31 182 L 5 182 Z M 5 165 L 31 165 L 31 182 L 5 182 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="5" y="179"/>
+  <use xlink:href="#glyph2-2" x="13" y="179"/>
+  <use xlink:href="#glyph2-3" x="22" y="179"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(60%,60%,60%);fill-opacity:1;" d="M 5 184 L 50 184 L 50 199 L 5 199 Z M 5 184 L 50 184 L 50 199 L 5 199 Z "/>
+<g style="fill:rgb(60%,60%,60%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="5" y="196"/>
+  <use xlink:href="#glyph3-2" x="12" y="196"/>
+  <use xlink:href="#glyph3-3" x="19" y="196"/>
+  <use xlink:href="#glyph3-4" x="26" y="196"/>
+  <use xlink:href="#glyph3-5" x="33" y="196"/>
+  <use xlink:href="#glyph3-3" x="36" y="196"/>
+  <use xlink:href="#glyph3-6" x="43" y="196"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 59 184 L 141 184 L 141 199 L 59 199 Z M 59 184 L 141 184 L 141 199 L 59 199 Z "/>
+<use xlink:href="#image26888" transform="matrix(1,0,0,1,140,191)"/>
+<g clip-path="url(#clip16)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 200 L 145 200 L 145 218 L 0 218 Z M 0 200 L 145 200 L 145 218 L 0 218 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="49" y="214"/>
+  <use xlink:href="#glyph0-16" x="60" y="214"/>
+  <use xlink:href="#glyph0-17" x="64" y="214"/>
+  <use xlink:href="#glyph0-18" x="68" y="214"/>
+  <use xlink:href="#glyph0-2" x="78" y="214"/>
+  <use xlink:href="#glyph0-8" x="88" y="214"/>
+</g>
+<g clip-path="url(#clip17)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip18)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 220 L 53 220 L 53 237 L 5 237 Z M 5 220 L 53 220 L 53 237 L 5 237 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-4" x="5" y="234"/>
+  <use xlink:href="#glyph2-5" x="8" y="234"/>
+  <use xlink:href="#glyph2-3" x="17" y="234"/>
+  <use xlink:href="#glyph2-6" x="26" y="234"/>
+  <use xlink:href="#glyph2-7" x="34" y="234"/>
+  <use xlink:href="#glyph2-8" x="38" y="234"/>
+  <use xlink:href="#glyph2-7" x="42" y="234"/>
+  <use xlink:href="#glyph2-9" x="46" y="234"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 239 L 141 239 L 141 240 L 4 240 Z M 4 239 L 141 239 L 141 240 L 4 240 Z "/>
+<use xlink:href="#image26891" transform="matrix(1,0,0,1,140,239)"/>
+<g clip-path="url(#clip19)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 243 L 85 243 L 85 260 L 5 260 Z M 5 243 L 85 243 L 85 260 L 5 260 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph2-10" x="5" y="257"/>
+  <use xlink:href="#glyph2-11" x="16" y="257"/>
+  <use xlink:href="#glyph2-7" x="24" y="257"/>
+  <use xlink:href="#glyph2-8" x="28" y="257"/>
+  <use xlink:href="#glyph2-12" x="32" y="257"/>
+  <use xlink:href="#glyph2-8" x="39" y="257"/>
+  <use xlink:href="#glyph2-7" x="43" y="257"/>
+  <use xlink:href="#glyph2-9" x="47" y="257"/>
+  <use xlink:href="#glyph2-13" x="54" y="257"/>
+  <use xlink:href="#glyph2-14" x="58" y="257"/>
+  <use xlink:href="#glyph2-2" x="67" y="257"/>
+  <use xlink:href="#glyph2-15" x="76" y="257"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 262 L 141 262 L 141 263 L 4 263 Z M 4 262 L 141 262 L 141 263 L 4 263 Z "/>
+<use xlink:href="#image26894" transform="matrix(1,0,0,1,140,262)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 987 0 L 987 800 L 150 800 Z M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip22)" clip-rule="nonzero">
+<g clip-path="url(#clip23)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 176 759 L 255 759 L 255 788 L 176 788 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern17);" d="M 175 758 L 178 758 L 178 761 L 175 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern18);" d="M 178 758 L 253 758 L 253 761 L 178 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern19);" d="M 253 758 L 256 758 L 256 761 L 253 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern20);" d="M 175 761 L 178 761 L 178 786 L 175 786 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern21);" d="M 253 761 L 256 761 L 256 786 L 253 786 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern22);" d="M 175 786 L 178 786 L 178 790 L 175 790 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern23);" d="M 178 786 L 253 786 L 253 790 L 178 790 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern24);" d="M 253 786 L 256 786 L 256 790 L 253 790 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 183 763 L 248 763 L 248 784 L 183 784 Z M 183 763 L 248 763 L 248 784 L 183 784 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-9" x="197" y="780"/>
+  <use xlink:href="#glyph1-6" x="206" y="780"/>
+  <use xlink:href="#glyph1-10" x="214" y="780"/>
+  <use xlink:href="#glyph1-11" x="222" y="780"/>
+  <use xlink:href="#glyph1-12" x="225" y="780"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-9" x="197" y="779"/>
+  <use xlink:href="#glyph1-6" x="206" y="779"/>
+  <use xlink:href="#glyph1-10" x="214" y="779"/>
+  <use xlink:href="#glyph1-11" x="222" y="779"/>
+  <use xlink:href="#glyph1-12" x="225" y="779"/>
+</g>
+<g clip-path="url(#clip24)" clip-rule="nonzero">
+<g clip-path="url(#clip25)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear3);" d="M 582 557 L 676 557 L 676 586 L 582 586 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 582 560 C 582 558.894531 582.894531 558 584 558 L 674 558 C 675.105469 558 676 558.449219 676 559 L 676 585 C 676 586.105469 675.105469 587 674 587 L 584 587 C 582.894531 587 582 586.550781 582 586 Z M 582 557 L 676 557 L 676 586 L 582 586 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 582 561 C 582 559.894531 582.894531 559 584 559 L 674 559 C 675.105469 559 676 559.449219 676 560 L 676 586 C 676 587.105469 675.105469 588 674 588 L 584 588 C 582.894531 588 582 587.550781 582 587 Z M 582 557 L 676 557 L 676 586 L 582 586 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern25);" d="M 581 556 L 584 556 L 584 559 L 581 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern26);" d="M 584 556 L 674 556 L 674 559 L 584 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern27);" d="M 674 556 L 677 556 L 677 559 L 674 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern28);" d="M 581 559 L 584 559 L 584 584 L 581 584 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern29);" d="M 674 559 L 677 559 L 677 584 L 674 584 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern30);" d="M 581 584 L 584 584 L 584 588 L 581 588 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern31);" d="M 584 584 L 674 584 L 674 588 L 584 588 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern32);" d="M 674 584 L 677 584 L 677 588 L 674 588 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-13" x="586" y="577"/>
+</g>
+<g clip-path="url(#clip26)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 621 557 L 649 557 L 649 586 L 621 586 Z M 620 557 L 648 557 L 648 586 L 620 586 Z "/>
+</g>
+<use xlink:href="#image26976" transform="matrix(1,0,0,1,626,563)"/>
+<g clip-path="url(#clip27)" clip-rule="nonzero">
+<g clip-path="url(#clip28)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 649 557 L 675 557 C 676.105469 557 677 557.894531 677 559 L 677 584 C 677 585.105469 676.105469 586 675 586 L 649 586 Z M 648 557 L 676 557 L 676 586 L 648 586 Z "/>
+</g>
+</g>
+<use xlink:href="#image26979" transform="matrix(1,0,0,1,654,563)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 533 561 L 578 561 L 578 582 L 533 582 Z M 533 561 L 578 561 L 578 582 L 533 582 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="533" y="577"/>
+  <use xlink:href="#glyph1-11" x="545" y="577"/>
+  <use xlink:href="#glyph1-12" x="548" y="577"/>
+  <use xlink:href="#glyph1-15" x="556" y="577"/>
+  <use xlink:href="#glyph1-16" x="564" y="577"/>
+  <use xlink:href="#glyph1-6" x="570" y="577"/>
+</g>
+<g clip-path="url(#clip29)" clip-rule="nonzero">
+<g clip-path="url(#clip30)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear4);" d="M 582 520 L 676 520 L 676 549 L 582 549 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 582 523 C 582 521.894531 582.894531 521 584 521 L 674 521 C 675.105469 521 676 521.449219 676 522 L 676 548 C 676 549.105469 675.105469 550 674 550 L 584 550 C 582.894531 550 582 549.550781 582 549 Z M 582 520 L 676 520 L 676 549 L 582 549 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 582 524 C 582 522.894531 582.894531 522 584 522 L 674 522 C 675.105469 522 676 522.449219 676 523 L 676 549 C 676 550.105469 675.105469 551 674 551 L 584 551 C 582.894531 551 582 550.550781 582 550 Z M 582 520 L 676 520 L 676 549 L 582 549 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern33);" d="M 581 519 L 584 519 L 584 522 L 581 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern34);" d="M 584 519 L 674 519 L 674 522 L 584 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern35);" d="M 674 519 L 677 519 L 677 522 L 674 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern36);" d="M 581 522 L 584 522 L 584 547 L 581 547 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern37);" d="M 674 522 L 677 522 L 677 547 L 674 547 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern38);" d="M 581 547 L 584 547 L 584 551 L 581 551 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern39);" d="M 584 547 L 674 547 L 674 551 L 584 551 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern40);" d="M 674 547 L 677 547 L 677 551 L 674 551 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="586" y="540"/>
+  <use xlink:href="#glyph1-18" x="595" y="540"/>
+</g>
+<g clip-path="url(#clip31)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 621 520 L 649 520 L 649 549 L 621 549 Z M 620 520 L 648 520 L 648 549 L 620 549 Z "/>
+</g>
+<use xlink:href="#image27021" transform="matrix(1,0,0,1,626,526)"/>
+<g clip-path="url(#clip32)" clip-rule="nonzero">
+<g clip-path="url(#clip33)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 649 520 L 675 520 C 676.105469 520 677 520.894531 677 522 L 677 547 C 677 548.105469 676.105469 549 675 549 L 649 549 Z M 648 520 L 676 520 L 676 549 L 648 549 Z "/>
+</g>
+</g>
+<use xlink:href="#image27024" transform="matrix(1,0,0,1,654,526)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 533 524 L 578 524 L 578 545 L 533 545 Z M 533 524 L 578 524 L 578 545 L 533 545 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-19" x="533" y="540"/>
+  <use xlink:href="#glyph1-2" x="543" y="540"/>
+  <use xlink:href="#glyph1-15" x="552" y="540"/>
+  <use xlink:href="#glyph1-20" x="560" y="540"/>
+</g>
+<g clip-path="url(#clip34)" clip-rule="nonzero">
+<g clip-path="url(#clip35)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 261 522 C 261 520.34375 262.34375 519 264 519 L 522 519 C 523.65625 519 525 520.34375 525 522 L 525 750 C 525 751.65625 523.65625 753 522 753 L 264 753 C 262.34375 753 261 751.65625 261 750 Z M 262 522 C 262 520.894531 262.894531 520 264 520 L 522 520 C 523.105469 520 524 520.894531 524 522 L 524 750 C 524 751.105469 523.105469 752 522 752 L 264 752 C 262.894531 752 262 751.105469 [...]
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="276" y="601"/>
+  <use xlink:href="#glyph1-22" x="285" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-18" x="280" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="276" y="655"/>
+  <use xlink:href="#glyph1-21" x="285" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="276" y="682"/>
+  <use xlink:href="#glyph1-22" x="285" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="276" y="709"/>
+  <use xlink:href="#glyph1-13" x="285" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="280" y="736"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="312" y="601"/>
+  <use xlink:href="#glyph1-17" x="321" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-13" x="316" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="312" y="655"/>
+  <use xlink:href="#glyph1-24" x="321" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="312" y="682"/>
+  <use xlink:href="#glyph1-17" x="321" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="312" y="709"/>
+  <use xlink:href="#glyph1-25" x="321" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="316" y="736"/>
+</g>
+<g clip-path="url(#clip36)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(29.019608%,56.470588%,85.098039%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="352" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-25" x="352" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="348" y="655"/>
+  <use xlink:href="#glyph1-26" x="357" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="348" y="682"/>
+  <use xlink:href="#glyph1-23" x="357" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="348" y="709"/>
+  <use xlink:href="#glyph1-27" x="357" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="352" y="736"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="388" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="388" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="384" y="655"/>
+  <use xlink:href="#glyph1-18" x="393" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="384" y="682"/>
+  <use xlink:href="#glyph1-21" x="393" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="384" y="709"/>
+  <use xlink:href="#glyph1-22" x="393" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-18" x="388" y="736"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="424" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="420" y="628"/>
+  <use xlink:href="#glyph1-22" x="429" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="420" y="655"/>
+  <use xlink:href="#glyph1-13" x="429" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="420" y="682"/>
+  <use xlink:href="#glyph1-24" x="429" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="420" y="709"/>
+  <use xlink:href="#glyph1-17" x="429" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-13" x="424" y="736"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="460" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="456" y="628"/>
+  <use xlink:href="#glyph1-17" x="465" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="456" y="655"/>
+  <use xlink:href="#glyph1-25" x="465" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="456" y="682"/>
+  <use xlink:href="#glyph1-26" x="465" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="460" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-25" x="460" y="736"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="496" y="601"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="492" y="628"/>
+  <use xlink:href="#glyph1-23" x="501" y="628"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="492" y="655"/>
+  <use xlink:href="#glyph1-27" x="501" y="655"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="492" y="682"/>
+  <use xlink:href="#glyph1-18" x="501" y="682"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="496" y="709"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="496" y="736"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear5);" d="M 263 521 L 523 521 L 523 550 L 263 550 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 263 521 L 523 521 L 523 550 L 263 550 Z M 263 521 L 523 521 L 523 550 L 263 550 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="470" y="541"/>
+  <use xlink:href="#glyph1-22" x="479" y="541"/>
+  <use xlink:href="#glyph1-17" x="488" y="541"/>
+  <use xlink:href="#glyph1-21" x="497" y="541"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-28" x="291" y="541"/>
+  <use xlink:href="#glyph1-29" x="297" y="541"/>
+  <use xlink:href="#glyph1-12" x="304" y="541"/>
+  <use xlink:href="#glyph1-15" x="312" y="541"/>
+  <use xlink:href="#glyph1-29" x="320" y="541"/>
+  <use xlink:href="#glyph1-20" x="327" y="541"/>
+  <use xlink:href="#glyph1-30" x="332" y="541"/>
+</g>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(18.039216%,20.392157%,21.176471%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 -0.000000000000113687 L -4.001551 4.001551 " transform="matrix(-0.809256,0.000000000000000099,-0.000000000000000099,-0.809256,459,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(18.039216%,20.392157%,21.176471%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(0.809256,0,0,0.809256,517,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(18.039216%,20.392157%,21.176471%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(-0.809256,0.000000000000000099,-0.000000000000000099,-0.809256,269,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(18.039216%,20.392157%,21.176471%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(0.809256,0,0,0.809256,359,535)"/>
+<g clip-path="url(#clip37)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(29.019608%,56.470588%,85.098039%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-31" x="272" y="573"/>
+  <use xlink:href="#glyph1-15" x="281" y="573"/>
+  <use xlink:href="#glyph1-12" x="289" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="306" y="573"/>
+  <use xlink:href="#glyph1-2" x="318" y="573"/>
+  <use xlink:href="#glyph1-12" x="327" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-32" x="344" y="573"/>
+  <use xlink:href="#glyph1-15" x="354" y="573"/>
+  <use xlink:href="#glyph1-6" x="362" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-33" x="378" y="573"/>
+  <use xlink:href="#glyph1-6" x="392" y="573"/>
+  <use xlink:href="#glyph1-8" x="400" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-32" x="416" y="573"/>
+  <use xlink:href="#glyph1-34" x="426" y="573"/>
+  <use xlink:href="#glyph1-15" x="434" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-35" x="457" y="573"/>
+  <use xlink:href="#glyph1-20" x="464" y="573"/>
+  <use xlink:href="#glyph1-11" x="469" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph1-31" x="490" y="573"/>
+  <use xlink:href="#glyph1-29" x="499" y="573"/>
+  <use xlink:href="#glyph1-16" x="506" y="573"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern41);" d="M 263 492 L 279 492 L 279 508 L 263 508 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 286 490 L 522 490 L 522 511 L 286 511 Z M 286 490 L 522 490 L 522 511 L 286 511 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-36" x="286" y="506"/>
+  <use xlink:href="#glyph1-12" x="289" y="506"/>
+  <use xlink:href="#glyph1-37" x="297" y="506"/>
+  <use xlink:href="#glyph1-38" x="304" y="506"/>
+  <use xlink:href="#glyph1-15" x="308" y="506"/>
+  <use xlink:href="#glyph1-8" x="316" y="506"/>
+  <use xlink:href="#glyph1-6" x="324" y="506"/>
+  <use xlink:href="#glyph1-39" x="332" y="506"/>
+  <use xlink:href="#glyph1-16" x="336" y="506"/>
+  <use xlink:href="#glyph1-11" x="342" y="506"/>
+  <use xlink:href="#glyph1-3" x="345" y="506"/>
+  <use xlink:href="#glyph1-6" x="356" y="506"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 223 613 L 256 613 L 256 627 L 223 627 Z M 223 613 L 256 613 L 256 627 L 223 627 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-1" x="223" y="624"/>
+  <use xlink:href="#glyph4-2" x="235" y="624"/>
+  <use xlink:href="#glyph4-3" x="242" y="624"/>
+  <use xlink:href="#glyph4-4" x="249" y="624"/>
+</g>
+<g clip-path="url(#clip38)" clip-rule="nonzero">
+<g clip-path="url(#clip39)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear6);" d="M 473 451 L 509 451 L 509 480 L 473 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern42);" d="M 472 450 L 475 450 L 475 453 L 472 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern43);" d="M 475 450 L 507 450 L 507 453 L 475 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern44);" d="M 507 450 L 510 450 L 510 453 L 507 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern45);" d="M 472 453 L 475 453 L 475 478 L 472 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern46);" d="M 507 453 L 510 453 L 510 478 L 507 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern47);" d="M 472 478 L 475 478 L 475 482 L 472 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern48);" d="M 475 478 L 507 478 L 507 482 L 475 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern49);" d="M 507 478 L 510 478 L 510 482 L 507 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 480 455 L 502 455 L 502 476 L 480 476 Z M 480 455 L 502 455 L 502 476 L 480 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="480" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="489" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="480" y="471"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="489" y="471"/>
+</g>
+<g clip-path="url(#clip40)" clip-rule="nonzero">
+<g clip-path="url(#clip41)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear7);" d="M 424 451 L 469 451 L 469 480 L 424 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern50);" d="M 423 450 L 426 450 L 426 453 L 423 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern51);" d="M 426 450 L 467 450 L 467 453 L 426 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern52);" d="M 467 450 L 470 450 L 470 453 L 467 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern53);" d="M 423 453 L 426 453 L 426 478 L 423 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern54);" d="M 467 453 L 470 453 L 470 478 L 467 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern55);" d="M 423 478 L 426 478 L 426 482 L 423 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern56);" d="M 426 478 L 467 478 L 467 482 L 426 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern57);" d="M 467 478 L 470 478 L 470 482 L 467 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 431 455 L 462 455 L 462 476 L 431 476 Z M 431 455 L 462 455 L 462 476 L 431 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-40" x="434" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-2" x="445" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-40" x="434" y="471"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-2" x="445" y="471"/>
+</g>
+<g clip-path="url(#clip42)" clip-rule="nonzero">
+<g clip-path="url(#clip43)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear8);" d="M 384 451 L 420 451 L 420 480 L 384 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern58);" d="M 383 450 L 386 450 L 386 453 L 383 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern59);" d="M 386 450 L 418 450 L 418 453 L 386 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern60);" d="M 418 450 L 421 450 L 421 453 L 418 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern61);" d="M 383 453 L 386 453 L 386 478 L 383 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern62);" d="M 418 453 L 421 453 L 421 478 L 418 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern63);" d="M 383 478 L 386 478 L 386 482 L 383 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern64);" d="M 386 478 L 418 478 L 418 482 L 386 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern65);" d="M 418 478 L 421 478 L 421 482 L 418 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 391 455 L 413 455 L 413 476 L 391 476 Z M 391 455 L 413 455 L 413 476 L 391 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-41" x="391" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="400" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-41" x="391" y="471"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="400" y="471"/>
+</g>
+<g clip-path="url(#clip44)" clip-rule="nonzero">
+<g clip-path="url(#clip45)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear9);" d="M 344 451 L 380 451 L 380 480 L 344 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern66);" d="M 343 450 L 346 450 L 346 453 L 343 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern67);" d="M 346 450 L 378 450 L 378 453 L 346 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern68);" d="M 378 450 L 381 450 L 381 453 L 378 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern69);" d="M 343 453 L 346 453 L 346 478 L 343 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern70);" d="M 378 453 L 381 453 L 381 478 L 378 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern71);" d="M 343 478 L 346 478 L 346 482 L 343 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern72);" d="M 346 478 L 378 478 L 378 482 L 346 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern73);" d="M 378 478 L 381 478 L 381 482 L 378 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 351 455 L 373 455 L 373 476 L 351 476 Z M 351 455 L 373 455 L 373 476 L 351 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-24" x="351" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="360" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="351" y="471"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="360" y="471"/>
+</g>
+<g clip-path="url(#clip46)" clip-rule="nonzero">
+<g clip-path="url(#clip47)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear10);" d="M 304 451 L 340 451 L 340 480 L 304 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern74);" d="M 303 450 L 306 450 L 306 453 L 303 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern75);" d="M 306 450 L 338 450 L 338 453 L 306 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern76);" d="M 338 450 L 341 450 L 341 453 L 338 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern77);" d="M 303 453 L 306 453 L 306 478 L 303 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern78);" d="M 338 453 L 341 453 L 341 478 L 338 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern79);" d="M 303 478 L 306 478 L 306 482 L 303 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern80);" d="M 306 478 L 338 478 L 338 482 L 306 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern81);" d="M 338 478 L 341 478 L 341 482 L 338 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 311 455 L 333 455 L 333 476 L 311 476 Z M 311 455 L 333 455 L 333 476 L 311 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-23" x="311" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-2" x="320" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="311" y="471"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-2" x="320" y="471"/>
+</g>
+<g clip-path="url(#clip48)" clip-rule="nonzero">
+<g clip-path="url(#clip49)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear11);" d="M 262 451 L 300 451 L 300 480 L 262 480 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern82);" d="M 261 450 L 264 450 L 264 453 L 261 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern83);" d="M 264 450 L 298 450 L 298 453 L 264 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern84);" d="M 298 450 L 301 450 L 301 453 L 298 453 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern85);" d="M 261 453 L 264 453 L 264 478 L 261 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern86);" d="M 298 453 L 301 453 L 301 478 L 298 478 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern87);" d="M 261 478 L 264 478 L 264 482 L 261 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern88);" d="M 264 478 L 298 478 L 298 482 L 264 482 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern89);" d="M 298 478 L 301 478 L 301 482 L 298 482 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 269 455 L 293 455 L 293 476 L 269 476 Z M 269 455 L 293 455 L 293 476 L 269 476 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-40" x="269" y="472"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="280" y="472"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-40" x="269" y="471"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="280" y="471"/>
+</g>
+<g clip-path="url(#clip50)" clip-rule="nonzero">
+<g clip-path="url(#clip51)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear12);" d="M 642 417 L 680 417 L 680 446 L 642 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern90);" d="M 641 416 L 644 416 L 644 419 L 641 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern91);" d="M 644 416 L 678 416 L 678 419 L 644 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern92);" d="M 678 416 L 681 416 L 681 419 L 678 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern93);" d="M 641 419 L 644 419 L 644 444 L 641 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern94);" d="M 678 419 L 681 419 L 681 444 L 678 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern95);" d="M 641 444 L 644 444 L 644 448 L 641 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern96);" d="M 644 444 L 678 444 L 678 448 L 644 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern97);" d="M 678 444 L 681 444 L 681 448 L 678 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 649 421 L 673 421 L 673 442 L 649 442 Z M 649 421 L 673 421 L 673 442 L 649 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-40" x="649" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="660" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-40" x="649" y="437"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="660" y="437"/>
+</g>
+<g clip-path="url(#clip52)" clip-rule="nonzero">
+<g clip-path="url(#clip53)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear13);" d="M 602 417 L 638 417 L 638 446 L 602 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern98);" d="M 601 416 L 604 416 L 604 419 L 601 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern99);" d="M 604 416 L 636 416 L 636 419 L 604 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern100);" d="M 636 416 L 639 416 L 639 419 L 636 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern101);" d="M 601 419 L 604 419 L 604 444 L 601 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern102);" d="M 636 419 L 639 419 L 639 444 L 636 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern103);" d="M 601 444 L 604 444 L 604 448 L 601 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern104);" d="M 604 444 L 636 444 L 636 448 L 604 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern105);" d="M 636 444 L 639 444 L 639 448 L 636 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 609 421 L 631 421 L 631 442 L 609 442 Z M 609 421 L 631 421 L 631 442 L 609 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-28" x="610" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="616" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-28" x="610" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="616" y="437"/>
+</g>
+<g clip-path="url(#clip54)" clip-rule="nonzero">
+<g clip-path="url(#clip55)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear14);" d="M 562 417 L 598 417 L 598 446 L 562 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern106);" d="M 561 416 L 564 416 L 564 419 L 561 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern107);" d="M 564 416 L 596 416 L 596 419 L 564 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern108);" d="M 596 416 L 599 416 L 599 419 L 596 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern109);" d="M 561 419 L 564 419 L 564 444 L 561 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern110);" d="M 596 419 L 599 419 L 599 444 L 596 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern111);" d="M 561 444 L 564 444 L 564 448 L 561 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern112);" d="M 564 444 L 596 444 L 596 448 L 564 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern113);" d="M 596 444 L 599 444 L 599 448 L 596 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 569 421 L 591 421 L 591 442 L 569 442 Z M 569 421 L 591 421 L 591 442 L 569 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-27" x="569" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="578" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="569" y="437"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="578" y="437"/>
+</g>
+<g clip-path="url(#clip56)" clip-rule="nonzero">
+<g clip-path="url(#clip57)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear15);" d="M 513 417 L 558 417 L 558 446 L 513 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern114);" d="M 512 416 L 515 416 L 515 419 L 512 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern115);" d="M 515 416 L 556 416 L 556 419 L 515 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern116);" d="M 556 416 L 559 416 L 559 419 L 556 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern117);" d="M 512 419 L 515 419 L 515 444 L 512 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern118);" d="M 556 419 L 559 419 L 559 444 L 556 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern119);" d="M 512 444 L 515 444 L 515 448 L 512 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern120);" d="M 515 444 L 556 444 L 556 448 L 515 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern121);" d="M 556 444 L 559 444 L 559 448 L 556 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 520 421 L 551 421 L 551 442 L 520 442 Z M 520 421 L 551 421 L 551 442 L 520 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-24" x="524" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-4" x="533" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="524" y="437"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-4" x="533" y="437"/>
+</g>
+<g clip-path="url(#clip58)" clip-rule="nonzero">
+<g clip-path="url(#clip59)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear16);" d="M 473 417 L 509 417 L 509 446 L 473 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern122);" d="M 472 416 L 475 416 L 475 419 L 472 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern123);" d="M 475 416 L 507 416 L 507 419 L 475 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern124);" d="M 507 416 L 510 416 L 510 419 L 507 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern125);" d="M 472 419 L 475 419 L 475 444 L 472 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern126);" d="M 507 419 L 510 419 L 510 444 L 507 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern127);" d="M 472 444 L 475 444 L 475 448 L 472 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern128);" d="M 475 444 L 507 444 L 507 448 L 475 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern129);" d="M 507 444 L 510 444 L 510 448 L 507 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 480 421 L 502 421 L 502 442 L 480 442 Z M 480 421 L 502 421 L 502 442 L 480 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-23" x="480" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="489" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="480" y="437"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="489" y="437"/>
+</g>
+<g clip-path="url(#clip60)" clip-rule="nonzero">
+<g clip-path="url(#clip61)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear17);" d="M 424 417 L 469 417 L 469 446 L 424 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern130);" d="M 423 416 L 426 416 L 426 419 L 423 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern131);" d="M 426 416 L 467 416 L 467 419 L 426 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern132);" d="M 467 416 L 470 416 L 470 419 L 467 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern133);" d="M 423 419 L 426 419 L 426 444 L 423 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern134);" d="M 467 419 L 470 419 L 470 444 L 467 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern135);" d="M 423 444 L 426 444 L 426 448 L 423 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern136);" d="M 426 444 L 467 444 L 467 448 L 426 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern137);" d="M 467 444 L 470 444 L 470 448 L 467 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 431 421 L 462 421 L 462 442 L 431 442 Z M 431 421 L 462 421 L 462 442 L 431 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-26" x="435" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-2" x="444" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-26" x="435" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-2" x="444" y="437"/>
+</g>
+<g clip-path="url(#clip62)" clip-rule="nonzero">
+<g clip-path="url(#clip63)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear18);" d="M 384 417 L 420 417 L 420 446 L 384 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern138);" d="M 383 416 L 386 416 L 386 419 L 383 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern139);" d="M 386 416 L 418 416 L 418 419 L 386 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern140);" d="M 418 416 L 421 416 L 421 419 L 418 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern141);" d="M 383 419 L 386 419 L 386 444 L 383 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern142);" d="M 418 419 L 421 419 L 421 444 L 418 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern143);" d="M 383 444 L 386 444 L 386 448 L 383 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern144);" d="M 386 444 L 418 444 L 418 448 L 386 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern145);" d="M 418 444 L 421 444 L 421 448 L 418 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 391 421 L 413 421 L 413 442 L 391 442 Z M 391 421 L 413 421 L 413 442 L 391 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-13" x="391" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="400" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-13" x="391" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="400" y="437"/>
+</g>
+<g clip-path="url(#clip64)" clip-rule="nonzero">
+<g clip-path="url(#clip65)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear19);" d="M 344 417 L 380 417 L 380 446 L 344 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern146);" d="M 343 416 L 346 416 L 346 419 L 343 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern147);" d="M 346 416 L 378 416 L 378 419 L 346 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern148);" d="M 378 416 L 381 416 L 381 419 L 378 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern149);" d="M 343 419 L 346 419 L 346 444 L 343 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern150);" d="M 378 419 L 381 419 L 381 444 L 378 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern151);" d="M 343 444 L 346 444 L 346 448 L 343 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern152);" d="M 346 444 L 378 444 L 378 448 L 346 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern153);" d="M 378 444 L 381 444 L 381 448 L 378 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 351 421 L 373 421 L 373 442 L 351 442 Z M 351 421 L 373 421 L 373 442 L 351 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-23" x="351" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="360" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="351" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="360" y="437"/>
+</g>
+<g clip-path="url(#clip66)" clip-rule="nonzero">
+<g clip-path="url(#clip67)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear20);" d="M 304 417 L 340 417 L 340 446 L 304 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern154);" d="M 303 416 L 306 416 L 306 419 L 303 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern155);" d="M 306 416 L 338 416 L 338 419 L 306 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern156);" d="M 338 416 L 341 416 L 341 419 L 338 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern157);" d="M 303 419 L 306 419 L 306 444 L 303 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern158);" d="M 338 419 L 341 419 L 341 444 L 338 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern159);" d="M 303 444 L 306 444 L 306 448 L 303 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern160);" d="M 306 444 L 338 444 L 338 448 L 306 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern161);" d="M 338 444 L 341 444 L 341 448 L 338 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 311 421 L 333 421 L 333 442 L 311 442 Z M 311 421 L 333 421 L 333 442 L 311 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-27" x="311" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="320" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-27" x="311" y="437"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="320" y="437"/>
+</g>
+<g clip-path="url(#clip68)" clip-rule="nonzero">
+<g clip-path="url(#clip69)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear21);" d="M 262 417 L 300 417 L 300 446 L 262 446 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern162);" d="M 261 416 L 264 416 L 264 419 L 261 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern163);" d="M 264 416 L 298 416 L 298 419 L 264 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern164);" d="M 298 416 L 301 416 L 301 419 L 298 419 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern165);" d="M 261 419 L 264 419 L 264 444 L 261 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern166);" d="M 298 419 L 301 419 L 301 444 L 298 444 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern167);" d="M 261 444 L 264 444 L 264 448 L 261 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern168);" d="M 264 444 L 298 444 L 298 448 L 264 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern169);" d="M 298 444 L 301 444 L 301 448 L 298 448 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 269 421 L 293 421 L 293 442 L 269 442 Z M 269 421 L 293 421 L 293 442 L 269 442 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-13" x="270" y="438"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-4" x="279" y="438"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-13" x="270" y="437"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-4" x="279" y="437"/>
+</g>
+<g clip-path="url(#clip70)" clip-rule="nonzero">
+<g clip-path="url(#clip71)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear22);" d="M 642 383 L 680 383 L 680 412 L 642 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern170);" d="M 641 382 L 644 382 L 644 385 L 641 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern171);" d="M 644 382 L 678 382 L 678 385 L 644 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern172);" d="M 678 382 L 681 382 L 681 385 L 678 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern173);" d="M 641 385 L 644 385 L 644 410 L 641 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern174);" d="M 678 385 L 681 385 L 681 410 L 678 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern175);" d="M 641 410 L 644 410 L 644 414 L 641 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern176);" d="M 644 410 L 678 410 L 678 414 L 644 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern177);" d="M 678 410 L 681 410 L 681 414 L 678 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 649 387 L 673 387 L 673 408 L 649 408 Z M 649 387 L 673 387 L 673 408 L 649 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-28" x="651" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-4" x="657" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-28" x="651" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-4" x="657" y="403"/>
+</g>
+<g clip-path="url(#clip72)" clip-rule="nonzero">
+<g clip-path="url(#clip73)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear23);" d="M 602 383 L 638 383 L 638 412 L 602 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern178);" d="M 601 382 L 604 382 L 604 385 L 601 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern179);" d="M 604 382 L 636 382 L 636 385 L 604 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern180);" d="M 636 382 L 639 382 L 639 385 L 636 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern181);" d="M 601 385 L 604 385 L 604 410 L 601 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern182);" d="M 636 385 L 639 385 L 639 410 L 636 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern183);" d="M 601 410 L 604 410 L 604 414 L 601 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern184);" d="M 604 410 L 636 410 L 636 414 L 604 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern185);" d="M 636 410 L 639 410 L 639 414 L 636 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 609 387 L 631 387 L 631 408 L 609 408 Z M 609 387 L 631 387 L 631 408 L 609 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-7" x="609" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="618" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="609" y="403"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="618" y="403"/>
+</g>
+<g clip-path="url(#clip74)" clip-rule="nonzero">
+<g clip-path="url(#clip75)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear24);" d="M 562 383 L 598 383 L 598 412 L 562 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern186);" d="M 561 382 L 564 382 L 564 385 L 561 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern187);" d="M 564 382 L 596 382 L 596 385 L 564 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern188);" d="M 596 382 L 599 382 L 599 385 L 596 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern189);" d="M 561 385 L 564 385 L 564 410 L 561 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern190);" d="M 596 385 L 599 385 L 599 410 L 596 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern191);" d="M 561 410 L 564 410 L 564 414 L 561 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern192);" d="M 564 410 L 596 410 L 596 414 L 564 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern193);" d="M 596 410 L 599 410 L 599 414 L 596 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 569 387 L 591 387 L 591 408 L 569 408 Z M 569 387 L 591 387 L 591 408 L 569 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-18" x="569" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-2" x="578" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-18" x="569" y="403"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-2" x="578" y="403"/>
+</g>
+<g clip-path="url(#clip76)" clip-rule="nonzero">
+<g clip-path="url(#clip77)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear25);" d="M 513 383 L 558 383 L 558 412 L 513 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern194);" d="M 512 382 L 515 382 L 515 385 L 512 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern195);" d="M 515 382 L 556 382 L 556 385 L 515 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern196);" d="M 556 382 L 559 382 L 559 385 L 556 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern197);" d="M 512 385 L 515 385 L 515 410 L 512 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern198);" d="M 556 385 L 559 385 L 559 410 L 556 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern199);" d="M 512 410 L 515 410 L 515 414 L 512 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern200);" d="M 515 410 L 556 410 L 556 414 L 515 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern201);" d="M 556 410 L 559 410 L 559 414 L 556 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 520 387 L 551 387 L 551 408 L 520 408 Z M 520 387 L 551 387 L 551 408 L 520 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-17" x="520" y="404"/>
+  <use xlink:href="#glyph1-22" x="529" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="538" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="520" y="403"/>
+  <use xlink:href="#glyph1-22" x="529" y="403"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="538" y="403"/>
+</g>
+<g clip-path="url(#clip78)" clip-rule="nonzero">
+<g clip-path="url(#clip79)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear26);" d="M 473 383 L 509 383 L 509 412 L 473 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern202);" d="M 472 382 L 475 382 L 475 385 L 472 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern203);" d="M 475 382 L 507 382 L 507 385 L 475 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern204);" d="M 507 382 L 510 382 L 510 385 L 507 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern205);" d="M 472 385 L 475 385 L 475 410 L 472 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern206);" d="M 507 385 L 510 385 L 510 410 L 507 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern207);" d="M 472 410 L 475 410 L 475 414 L 472 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern208);" d="M 475 410 L 507 410 L 507 414 L 475 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern209);" d="M 507 410 L 510 410 L 510 414 L 507 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 480 387 L 502 387 L 502 408 L 480 408 Z M 480 387 L 502 387 L 502 408 L 480 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-23" x="480" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-4" x="489" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="480" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-4" x="489" y="403"/>
+</g>
+<g clip-path="url(#clip80)" clip-rule="nonzero">
+<g clip-path="url(#clip81)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear27);" d="M 424 383 L 469 383 L 469 412 L 424 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern210);" d="M 423 382 L 426 382 L 426 385 L 423 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern211);" d="M 426 382 L 467 382 L 467 385 L 426 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern212);" d="M 467 382 L 470 382 L 470 385 L 467 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern213);" d="M 423 385 L 426 385 L 426 410 L 423 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern214);" d="M 467 385 L 470 385 L 470 410 L 467 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern215);" d="M 423 410 L 426 410 L 426 414 L 423 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern216);" d="M 426 410 L 467 410 L 467 414 L 426 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern217);" d="M 467 410 L 470 410 L 470 414 L 467 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 431 387 L 462 387 L 462 408 L 431 408 Z M 431 387 L 462 387 L 462 408 L 431 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-17" x="431" y="404"/>
+  <use xlink:href="#glyph1-22" x="440" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="449" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="431" y="403"/>
+  <use xlink:href="#glyph1-22" x="440" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="449" y="403"/>
+</g>
+<g clip-path="url(#clip82)" clip-rule="nonzero">
+<g clip-path="url(#clip83)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear28);" d="M 384 383 L 420 383 L 420 412 L 384 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern218);" d="M 383 382 L 386 382 L 386 385 L 383 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern219);" d="M 386 382 L 418 382 L 418 385 L 386 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern220);" d="M 418 382 L 421 382 L 421 385 L 418 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern221);" d="M 383 385 L 386 385 L 386 410 L 383 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern222);" d="M 418 385 L 421 385 L 421 410 L 418 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern223);" d="M 383 410 L 386 410 L 386 414 L 383 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern224);" d="M 386 410 L 418 410 L 418 414 L 386 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern225);" d="M 418 410 L 421 410 L 421 414 L 418 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 391 387 L 413 387 L 413 408 L 391 408 Z M 391 387 L 413 387 L 413 408 L 391 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-25" x="391" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="400" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-25" x="391" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="400" y="403"/>
+</g>
+<g clip-path="url(#clip84)" clip-rule="nonzero">
+<g clip-path="url(#clip85)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear29);" d="M 344 383 L 380 383 L 380 412 L 344 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern226);" d="M 343 382 L 346 382 L 346 385 L 343 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern227);" d="M 346 382 L 378 382 L 378 385 L 346 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern228);" d="M 378 382 L 381 382 L 381 385 L 378 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern229);" d="M 343 385 L 346 385 L 346 410 L 343 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern230);" d="M 378 385 L 381 385 L 381 410 L 378 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern231);" d="M 343 410 L 346 410 L 346 414 L 343 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern232);" d="M 346 410 L 378 410 L 378 414 L 346 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern233);" d="M 378 410 L 381 410 L 381 414 L 378 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 351 387 L 373 387 L 373 408 L 351 408 Z M 351 387 L 373 387 L 373 408 L 351 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-24" x="351" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-3" x="360" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-24" x="351" y="403"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph5-3" x="360" y="403"/>
+</g>
+<g clip-path="url(#clip86)" clip-rule="nonzero">
+<g clip-path="url(#clip87)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear30);" d="M 304 383 L 340 383 L 340 412 L 304 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern234);" d="M 303 382 L 306 382 L 306 385 L 303 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern235);" d="M 306 382 L 338 382 L 338 385 L 306 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern236);" d="M 338 382 L 341 382 L 341 385 L 338 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern237);" d="M 303 385 L 306 385 L 306 410 L 303 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern238);" d="M 338 385 L 341 385 L 341 410 L 338 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern239);" d="M 303 410 L 306 410 L 306 414 L 303 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern240);" d="M 306 410 L 338 410 L 338 414 L 306 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern241);" d="M 338 410 L 341 410 L 341 414 L 338 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 311 387 L 333 387 L 333 408 L 311 408 Z M 311 387 L 333 387 L 333 408 L 311 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-28" x="312" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-1" x="318" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-28" x="312" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-1" x="318" y="403"/>
+</g>
+<g clip-path="url(#clip88)" clip-rule="nonzero">
+<g clip-path="url(#clip89)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear31);" d="M 262 383 L 300 383 L 300 412 L 262 412 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern242);" d="M 261 382 L 264 382 L 264 385 L 261 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern243);" d="M 264 382 L 298 382 L 298 385 L 264 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern244);" d="M 298 382 L 301 382 L 301 385 L 298 385 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern245);" d="M 261 385 L 264 385 L 264 410 L 261 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern246);" d="M 298 385 L 301 385 L 301 410 L 298 410 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern247);" d="M 261 410 L 264 410 L 264 414 L 261 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern248);" d="M 264 410 L 298 410 L 298 414 L 264 414 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern249);" d="M 298 410 L 301 410 L 301 414 L 298 414 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 269 387 L 293 387 L 293 408 L 269 408 Z M 269 387 L 293 387 L 293 408 L 269 408 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph1-18" x="270" y="404"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph5-4" x="279" y="404"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-18" x="270" y="403"/>
+</g>
+<g style="fill:rgb(100%,0%,0%);fill-opacity:1;">
+  <use xlink:href="#glyph5-4" x="279" y="403"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern250);" d="M 478 353 L 494 353 L 494 369 L 478 369 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 501 348 L 544 348 L 544 374 L 501 374 Z M 501 348 L 544 348 L 544 374 L 501 374 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-17" x="501" y="366"/>
+  <use xlink:href="#glyph1-39" x="510" y="366"/>
+  <use xlink:href="#glyph1-8" x="514" y="366"/>
+  <use xlink:href="#glyph1-6" x="522" y="366"/>
+  <use xlink:href="#glyph1-37" x="530" y="366"/>
+  <use xlink:href="#glyph1-42" x="537" y="366"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern251);" d="M 555 353 L 571 353 L 571 369 L 555 369 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 578 348 L 628 348 L 628 374 L 578 374 Z M 578 348 L 628 348 L 628 374 L 578 374 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-23" x="578" y="366"/>
+  <use xlink:href="#glyph1-39" x="587" y="366"/>
+  <use xlink:href="#glyph1-8" x="591" y="366"/>
+  <use xlink:href="#glyph1-6" x="599" y="366"/>
+  <use xlink:href="#glyph1-37" x="607" y="366"/>
+  <use xlink:href="#glyph1-42" x="614" y="366"/>
+  <use xlink:href="#glyph1-5" x="621" y="366"/>
+</g>
+<g clip-path="url(#clip90)" clip-rule="nonzero">
+<g clip-path="url(#clip91)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear32);" d="M 262 346 L 468 346 L 468 375 L 262 375 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 262 349 C 262 347.894531 262.894531 347 264 347 L 466 347 C 467.105469 347 468 347.449219 468 348 L 468 374 C 468 375.105469 467.105469 376 466 376 L 264 376 C 262.894531 376 262 375.550781 262 375 Z M 262 346 L 468 346 L 468 375 L 262 375 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 262 350 C 262 348.894531 262.894531 348 264 348 L 466 348 C 467.105469 348 468 348.449219 468 349 L 468 375 C 468 376.105469 467.105469 377 466 377 L 264 377 C 262.894531 377 262 376.550781 262 376 Z M 262 346 L 468 346 L 468 375 L 262 375 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern252);" d="M 261 345 L 264 345 L 264 348 L 261 348 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern253);" d="M 264 345 L 466 345 L 466 348 L 264 348 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern254);" d="M 466 345 L 469 345 L 469 348 L 466 348 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern255);" d="M 261 348 L 264 348 L 264 373 L 261 373 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern256);" d="M 466 348 L 469 348 L 469 373 L 466 373 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern257);" d="M 261 373 L 264 373 L 264 377 L 261 377 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern258);" d="M 264 373 L 466 373 L 466 377 L 264 377 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern259);" d="M 466 373 L 469 373 L 469 377 L 466 377 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 222 354 L 256 354 L 256 368 L 222 368 Z M 222 354 L 256 354 L 256 368 L 222 368 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-5" x="222" y="365"/>
+  <use xlink:href="#glyph4-6" x="230" y="365"/>
+  <use xlink:href="#glyph4-7" x="237" y="365"/>
+  <use xlink:href="#glyph4-8" x="242" y="365"/>
+  <use xlink:href="#glyph4-9" x="249" y="365"/>
+</g>
+<g clip-path="url(#clip92)" clip-rule="nonzero">
+<g clip-path="url(#clip93)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear33);" d="M 262 309 L 680 309 L 680 338 L 262 338 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 262 312 C 262 310.894531 262.894531 310 264 310 L 678 310 C 679.105469 310 680 310.449219 680 311 L 680 337 C 680 338.105469 679.105469 339 678 339 L 264 339 C 262.894531 339 262 338.550781 262 338 Z M 262 309 L 680 309 L 680 338 L 262 338 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 262 313 C 262 311.894531 262.894531 311 264 311 L 678 311 C 679.105469 311 680 311.449219 680 312 L 680 338 C 680 339.105469 679.105469 340 678 340 L 264 340 C 262.894531 340 262 339.550781 262 339 Z M 262 309 L 680 309 L 680 338 L 262 338 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern260);" d="M 261 308 L 264 308 L 264 311 L 261 311 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern261);" d="M 264 308 L 678 308 L 678 311 L 264 311 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern262);" d="M 678 308 L 681 308 L 681 311 L 678 311 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern263);" d="M 261 311 L 264 311 L 264 336 L 261 336 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern264);" d="M 678 311 L 681 311 L 681 336 L 678 336 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern265);" d="M 261 336 L 264 336 L 264 340 L 261 340 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern266);" d="M 264 336 L 678 336 L 678 340 L 264 340 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern267);" d="M 678 336 L 681 336 L 681 340 L 678 340 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-7" x="266" y="329"/>
+  <use xlink:href="#glyph1-1" x="275" y="329"/>
+  <use xlink:href="#glyph1-2" x="284" y="329"/>
+  <use xlink:href="#glyph1-38" x="293" y="329"/>
+  <use xlink:href="#glyph1-38" x="297" y="329"/>
+  <use xlink:href="#glyph1-6" x="301" y="329"/>
+  <use xlink:href="#glyph1-37" x="309" y="329"/>
+  <use xlink:href="#glyph1-16" x="316" y="329"/>
+  <use xlink:href="#glyph1-11" x="322" y="329"/>
+  <use xlink:href="#glyph1-2" x="325" y="329"/>
+  <use xlink:href="#glyph1-12" x="334" y="329"/>
+  <use xlink:href="#glyph1-43" x="342" y="329"/>
+  <use xlink:href="#glyph1-44" x="353" y="329"/>
+  <use xlink:href="#glyph1-19" x="359" y="329"/>
+  <use xlink:href="#glyph1-11" x="369" y="329"/>
+  <use xlink:href="#glyph1-5" x="372" y="329"/>
+  <use xlink:href="#glyph1-16" x="379" y="329"/>
+  <use xlink:href="#glyph1-2" x="385" y="329"/>
+  <use xlink:href="#glyph1-20" x="394" y="329"/>
+  <use xlink:href="#glyph1-30" x="399" y="329"/>
+  <use xlink:href="#glyph1-31" x="406" y="329"/>
+  <use xlink:href="#glyph1-11" x="415" y="329"/>
+  <use xlink:href="#glyph1-12" x="418" y="329"/>
+  <use xlink:href="#glyph1-37" x="426" y="329"/>
+  <use xlink:href="#glyph1-6" x="433" y="329"/>
+  <use xlink:href="#glyph1-45" x="441" y="329"/>
+  <use xlink:href="#glyph1-17" x="449" y="329"/>
+  <use xlink:href="#glyph1-27" x="458" y="329"/>
+  <use xlink:href="#glyph1-18" x="467" y="329"/>
+  <use xlink:href="#glyph1-18" x="476" y="329"/>
+  <use xlink:href="#glyph1-45" x="485" y="329"/>
+  <use xlink:href="#glyph1-32" x="493" y="329"/>
+  <use xlink:href="#glyph1-2" x="503" y="329"/>
+  <use xlink:href="#glyph1-32" x="512" y="329"/>
+  <use xlink:href="#glyph1-34" x="522" y="329"/>
+  <use xlink:href="#glyph1-6" x="530" y="329"/>
+  <use xlink:href="#glyph1-45" x="538" y="329"/>
+  <use xlink:href="#glyph1-46" x="546" y="329"/>
+  <use xlink:href="#glyph1-20" x="555" y="329"/>
+  <use xlink:href="#glyph1-6" x="560" y="329"/>
+  <use xlink:href="#glyph1-5" x="568" y="329"/>
+  <use xlink:href="#glyph1-6" x="575" y="329"/>
+  <use xlink:href="#glyph1-12" x="583" y="329"/>
+  <use xlink:href="#glyph1-16" x="591" y="329"/>
+  <use xlink:href="#glyph1-47" x="597" y="329"/>
+  <use xlink:href="#glyph1-29" x="607" y="329"/>
+  <use xlink:href="#glyph1-30" x="614" y="329"/>
+  <use xlink:href="#glyph1-48" x="621" y="329"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 175 317 L 256 317 L 256 331 L 175 331 Z M 175 317 L 256 317 L 256 331 L 175 331 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph4-10" x="175" y="328"/>
+  <use xlink:href="#glyph4-2" x="183" y="328"/>
+  <use xlink:href="#glyph4-6" x="190" y="328"/>
+  <use xlink:href="#glyph4-7" x="197" y="328"/>
+  <use xlink:href="#glyph4-3" x="202" y="328"/>
+  <use xlink:href="#glyph4-8" x="209" y="328"/>
+  <use xlink:href="#glyph4-11" x="216" y="328"/>
+  <use xlink:href="#glyph4-9" x="219" y="328"/>
+  <use xlink:href="#glyph4-3" x="226" y="328"/>
+  <use xlink:href="#glyph4-12" x="233" y="328"/>
+  <use xlink:href="#glyph4-7" x="240" y="328"/>
+  <use xlink:href="#glyph4-3" x="245" y="328"/>
+  <use xlink:href="#glyph4-13" x="252" y="328"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 169 L 982 169 L 982 295 L 170 295 Z M 170 169 L 982 169 L 982 295 L 170 295 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-32" x="170" y="185"/>
+  <use xlink:href="#glyph1-34" x="180" y="185"/>
+  <use xlink:href="#glyph1-6" x="188" y="185"/>
+  <use xlink:href="#glyph1-39" x="196" y="185"/>
+  <use xlink:href="#glyph1-5" x="200" y="185"/>
+  <use xlink:href="#glyph1-34" x="207" y="185"/>
+  <use xlink:href="#glyph1-29" x="215" y="185"/>
+  <use xlink:href="#glyph1-20" x="222" y="185"/>
+  <use xlink:href="#glyph1-6" x="227" y="185"/>
+  <use xlink:href="#glyph1-8" x="235" y="185"/>
+  <use xlink:href="#glyph1-39" x="243" y="185"/>
+  <use xlink:href="#glyph1-5" x="247" y="185"/>
+  <use xlink:href="#glyph1-6" x="254" y="185"/>
+  <use xlink:href="#glyph1-37" x="262" y="185"/>
+  <use xlink:href="#glyph1-20" x="269" y="185"/>
+  <use xlink:href="#glyph1-6" x="274" y="185"/>
+  <use xlink:href="#glyph1-16" x="282" y="185"/>
+  <use xlink:href="#glyph1-39" x="288" y="185"/>
+  <use xlink:href="#glyph1-37" x="292" y="185"/>
+  <use xlink:href="#glyph1-29" x="299" y="185"/>
+  <use xlink:href="#glyph1-12" x="306" y="185"/>
+  <use xlink:href="#glyph1-39" x="314" y="185"/>
+  <use xlink:href="#glyph1-49" x="318" y="185"/>
+  <use xlink:href="#glyph1-6" x="326" y="185"/>
+  <use xlink:href="#glyph1-39" x="334" y="185"/>
+  <use xlink:href="#glyph1-29" x="338" y="185"/>
+  <use xlink:href="#glyph1-39" x="345" y="185"/>
+  <use xlink:href="#glyph1-4" x="349" y="185"/>
+  <use xlink:href="#glyph1-34" x="357" y="185"/>
+  <use xlink:href="#glyph1-20" x="365" y="185"/>
+  <use xlink:href="#glyph1-29" x="370" y="185"/>
+  <use xlink:href="#glyph1-5" x="377" y="185"/>
+  <use xlink:href="#glyph1-6" x="384" y="185"/>
+  <use xlink:href="#glyph1-50" x="392" y="185"/>
+  <use xlink:href="#glyph1-39" x="396" y="185"/>
+  <use xlink:href="#glyph1-2" x="400" y="185"/>
+  <use xlink:href="#glyph1-20" x="409" y="185"/>
+  <use xlink:href="#glyph1-39" x="414" y="185"/>
+  <use xlink:href="#glyph1-37" x="418" y="185"/>
+  <use xlink:href="#glyph1-29" x="425" y="185"/>
+  <use xlink:href="#glyph1-12" x="432" y="185"/>
+  <use xlink:href="#glyph1-39" x="440" y="185"/>
+  <use xlink:href="#glyph1-49" x="444" y="185"/>
+  <use xlink:href="#glyph1-6" x="452" y="185"/>
+  <use xlink:href="#glyph1-39" x="460" y="185"/>
+  <use xlink:href="#glyph1-10" x="464" y="185"/>
+  <use xlink:href="#glyph1-6" x="472" y="185"/>
+  <use xlink:href="#glyph1-12" x="480" y="185"/>
+  <use xlink:href="#glyph1-6" x="488" y="185"/>
+  <use xlink:href="#glyph1-20" x="496" y="185"/>
+  <use xlink:href="#glyph1-29" x="501" y="185"/>
+  <use xlink:href="#glyph1-16" x="508" y="185"/>
+  <use xlink:href="#glyph1-6" x="514" y="185"/>
+  <use xlink:href="#glyph1-8" x="522" y="185"/>
+  <use xlink:href="#glyph1-39" x="530" y="185"/>
+  <use xlink:href="#glyph1-49" x="534" y="185"/>
+  <use xlink:href="#glyph1-30" x="542" y="185"/>
+  <use xlink:href="#glyph1-39" x="549" y="185"/>
+  <use xlink:href="#glyph1-5" x="553" y="185"/>
+  <use xlink:href="#glyph1-34" x="560" y="185"/>
+  <use xlink:href="#glyph1-15" x="568" y="185"/>
+  <use xlink:href="#glyph1-51" x="576" y="185"/>
+  <use xlink:href="#glyph1-11" x="590" y="185"/>
+  <use xlink:href="#glyph1-12" x="593" y="185"/>
+  <use xlink:href="#glyph1-10" x="601" y="185"/>
+  <use xlink:href="#glyph1-39" x="609" y="185"/>
+  <use xlink:href="#glyph1-2" x="613" y="185"/>
+  <use xlink:href="#glyph1-12" x="622" y="185"/>
+  <use xlink:href="#glyph1-6" x="630" y="185"/>
+  <use xlink:href="#glyph1-39" x="638" y="185"/>
+  <use xlink:href="#glyph1-2" x="642" y="185"/>
+  <use xlink:href="#glyph1-20" x="651" y="185"/>
+  <use xlink:href="#glyph1-39" x="656" y="185"/>
+  <use xlink:href="#glyph1-16" x="660" y="185"/>
+  <use xlink:href="#glyph1-52" x="666" y="185"/>
+  <use xlink:href="#glyph1-2" x="678" y="185"/>
+  <use xlink:href="#glyph1-39" x="687" y="185"/>
+  <use xlink:href="#glyph1-8" x="691" y="185"/>
+  <use xlink:href="#glyph1-6" x="699" y="185"/>
+  <use xlink:href="#glyph1-37" x="707" y="185"/>
+  <use xlink:href="#glyph1-42" x="714" y="185"/>
+  <use xlink:href="#glyph1-5" x="721" y="185"/>
+  <use xlink:href="#glyph1-39" x="728" y="185"/>
+  <use xlink:href="#glyph1-2" x="732" y="185"/>
+  <use xlink:href="#glyph1-44" x="741" y="185"/>
+  <use xlink:href="#glyph1-39" x="747" y="185"/>
+  <use xlink:href="#glyph1-37" x="751" y="185"/>
+  <use xlink:href="#glyph1-29" x="758" y="185"/>
+  <use xlink:href="#glyph1-20" x="765" y="185"/>
+  <use xlink:href="#glyph1-8" x="770" y="185"/>
+  <use xlink:href="#glyph1-5" x="778" y="185"/>
+  <use xlink:href="#glyph1-39" x="785" y="185"/>
+  <use xlink:href="#glyph1-16" x="789" y="185"/>
+  <use xlink:href="#glyph1-2" x="795" y="185"/>
+  <use xlink:href="#glyph1-10" x="804" y="185"/>
+  <use xlink:href="#glyph1-6" x="812" y="185"/>
+  <use xlink:href="#glyph1-16" x="820" y="185"/>
+  <use xlink:href="#glyph1-34" x="826" y="185"/>
+  <use xlink:href="#glyph1-6" x="834" y="185"/>
+  <use xlink:href="#glyph1-20" x="842" y="185"/>
+  <use xlink:href="#glyph1-50" x="847" y="185"/>
+  <use xlink:href="#glyph1-39" x="851" y="185"/>
+  <use xlink:href="#glyph1-5" x="855" y="185"/>
+  <use xlink:href="#glyph1-4" x="862" y="185"/>
+  <use xlink:href="#glyph1-38" x="870" y="185"/>
+  <use xlink:href="#glyph1-11" x="874" y="185"/>
+  <use xlink:href="#glyph1-16" x="877" y="185"/>
+  <use xlink:href="#glyph1-16" x="883" y="185"/>
+  <use xlink:href="#glyph1-11" x="889" y="185"/>
+  <use xlink:href="#glyph1-12" x="892" y="185"/>
+  <use xlink:href="#glyph1-10" x="900" y="185"/>
+  <use xlink:href="#glyph1-39" x="908" y="185"/>
+  <use xlink:href="#glyph1-16" x="912" y="185"/>
+  <use xlink:href="#glyph1-34" x="918" y="185"/>
+  <use xlink:href="#glyph1-6" x="926" y="185"/>
+  <use xlink:href="#glyph1-39" x="934" y="185"/>
+  <use xlink:href="#glyph1-5" x="938" y="185"/>
+  <use xlink:href="#glyph1-16" x="945" y="185"/>
+  <use xlink:href="#glyph1-29" x="951" y="185"/>
+  <use xlink:href="#glyph1-37" x="958" y="185"/>
+  <use xlink:href="#glyph1-42" x="965" y="185"/>
+  <use xlink:href="#glyph1-39" x="972" y="185"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-20" x="170" y="206"/>
+  <use xlink:href="#glyph1-2" x="175" y="206"/>
+  <use xlink:href="#glyph1-15" x="184" y="206"/>
+  <use xlink:href="#glyph1-10" x="192" y="206"/>
+  <use xlink:href="#glyph1-34" x="200" y="206"/>
+  <use xlink:href="#glyph1-38" x="208" y="206"/>
+  <use xlink:href="#glyph1-30" x="212" y="206"/>
+  <use xlink:href="#glyph1-39" x="219" y="206"/>
+  <use xlink:href="#glyph1-11" x="223" y="206"/>
+  <use xlink:href="#glyph1-12" x="226" y="206"/>
+  <use xlink:href="#glyph1-39" x="234" y="206"/>
+  <use xlink:href="#glyph1-34" x="238" y="206"/>
+  <use xlink:href="#glyph1-29" x="246" y="206"/>
+  <use xlink:href="#glyph1-38" x="253" y="206"/>
+  <use xlink:href="#glyph1-44" x="257" y="206"/>
+  <use xlink:href="#glyph1-39" x="263" y="206"/>
+  <use xlink:href="#glyph1-29" x="267" y="206"/>
+  <use xlink:href="#glyph1-12" x="274" y="206"/>
+  <use xlink:href="#glyph1-8" x="282" y="206"/>
+  <use xlink:href="#glyph1-39" x="290" y="206"/>
+  <use xlink:href="#glyph1-10" x="294" y="206"/>
+  <use xlink:href="#glyph1-11" x="302" y="206"/>
+  <use xlink:href="#glyph1-53" x="305" y="206"/>
+  <use xlink:href="#glyph1-11" x="312" y="206"/>
+  <use xlink:href="#glyph1-12" x="315" y="206"/>
+  <use xlink:href="#glyph1-10" x="323" y="206"/>
+  <use xlink:href="#glyph1-39" x="331" y="206"/>
+  <use xlink:href="#glyph1-2" x="335" y="206"/>
+  <use xlink:href="#glyph1-12" x="344" y="206"/>
+  <use xlink:href="#glyph1-6" x="352" y="206"/>
+  <use xlink:href="#glyph1-39" x="360" y="206"/>
+  <use xlink:href="#glyph1-34" x="364" y="206"/>
+  <use xlink:href="#glyph1-29" x="372" y="206"/>
+  <use xlink:href="#glyph1-38" x="379" y="206"/>
+  <use xlink:href="#glyph1-44" x="383" y="206"/>
+  <use xlink:href="#glyph1-39" x="389" y="206"/>
+  <use xlink:href="#glyph1-16" x="393" y="206"/>
+  <use xlink:href="#glyph1-2" x="399" y="206"/>
+  <use xlink:href="#glyph1-39" x="408" y="206"/>
+  <use xlink:href="#glyph1-6" x="412" y="206"/>
+  <use xlink:href="#glyph1-29" x="420" y="206"/>
+  <use xlink:href="#glyph1-37" x="427" y="206"/>
+  <use xlink:href="#glyph1-34" x="434" y="206"/>
+  <use xlink:href="#glyph1-39" x="442" y="206"/>
+  <use xlink:href="#glyph1-4" x="446" y="206"/>
+  <use xlink:href="#glyph1-6" x="454" y="206"/>
+  <use xlink:href="#glyph1-20" x="462" y="206"/>
+  <use xlink:href="#glyph1-5" x="467" y="206"/>
+  <use xlink:href="#glyph1-2" x="474" y="206"/>
+  <use xlink:href="#glyph1-12" x="483" y="206"/>
+  <use xlink:href="#glyph1-54" x="491" y="206"/>
+  <use xlink:href="#glyph1-39" x="494" y="206"/>
+  <use xlink:href="#glyph1-55" x="498" y="206"/>
+  <use xlink:href="#glyph1-43" x="504" y="206"/>
+  <use xlink:href="#glyph1-20" x="515" y="206"/>
+  <use xlink:href="#glyph1-39" x="520" y="206"/>
+  <use xlink:href="#glyph1-30" x="524" y="206"/>
+  <use xlink:href="#glyph1-2" x="531" y="206"/>
+  <use xlink:href="#glyph1-15" x="540" y="206"/>
+  <use xlink:href="#glyph1-39" x="548" y="206"/>
+  <use xlink:href="#glyph1-37" x="552" y="206"/>
+  <use xlink:href="#glyph1-29" x="559" y="206"/>
+  <use xlink:href="#glyph1-12" x="566" y="206"/>
+  <use xlink:href="#glyph1-39" x="574" y="206"/>
+  <use xlink:href="#glyph1-8" x="578" y="206"/>
+  <use xlink:href="#glyph1-2" x="586" y="206"/>
+  <use xlink:href="#glyph1-39" x="595" y="206"/>
+  <use xlink:href="#glyph1-49" x="599" y="206"/>
+  <use xlink:href="#glyph1-2" x="607" y="206"/>
+  <use xlink:href="#glyph1-16" x="616" y="206"/>
+  <use xlink:href="#glyph1-34" x="622" y="206"/>
+  <use xlink:href="#glyph1-39" x="630" y="206"/>
+  <use xlink:href="#glyph1-16" x="634" y="206"/>
+  <use xlink:href="#glyph1-34" x="640" y="206"/>
+  <use xlink:href="#glyph1-6" x="648" y="206"/>
+  <use xlink:href="#glyph1-39" x="656" y="206"/>
+  <use xlink:href="#glyph1-37" x="660" y="206"/>
+  <use xlink:href="#glyph1-29" x="667" y="206"/>
+  <use xlink:href="#glyph1-20" x="674" y="206"/>
+  <use xlink:href="#glyph1-8" x="679" y="206"/>
+  <use xlink:href="#glyph1-39" x="687" y="206"/>
+  <use xlink:href="#glyph1-16" x="691" y="206"/>
+  <use xlink:href="#glyph1-20" x="697" y="206"/>
+  <use xlink:href="#glyph1-11" x="702" y="206"/>
+  <use xlink:href="#glyph1-37" x="705" y="206"/>
+  <use xlink:href="#glyph1-42" x="712" y="206"/>
+  <use xlink:href="#glyph1-39" x="719" y="206"/>
+  <use xlink:href="#glyph1-29" x="723" y="206"/>
+  <use xlink:href="#glyph1-12" x="730" y="206"/>
+  <use xlink:href="#glyph1-8" x="738" y="206"/>
+  <use xlink:href="#glyph1-39" x="746" y="206"/>
+  <use xlink:href="#glyph1-34" x="750" y="206"/>
+  <use xlink:href="#glyph1-29" x="758" y="206"/>
+  <use xlink:href="#glyph1-53" x="765" y="206"/>
+  <use xlink:href="#glyph1-6" x="772" y="206"/>
+  <use xlink:href="#glyph1-39" x="780" y="206"/>
+  <use xlink:href="#glyph1-29" x="784" y="206"/>
+  <use xlink:href="#glyph1-39" x="791" y="206"/>
+  <use xlink:href="#glyph1-4" x="795" y="206"/>
+  <use xlink:href="#glyph1-34" x="803" y="206"/>
+  <use xlink:href="#glyph1-20" x="811" y="206"/>
+  <use xlink:href="#glyph1-29" x="816" y="206"/>
+  <use xlink:href="#glyph1-5" x="823" y="206"/>
+  <use xlink:href="#glyph1-6" x="830" y="206"/>
+  <use xlink:href="#glyph1-54" x="838" y="206"/>
+  <use xlink:href="#glyph1-56" x="841" y="206"/>
+  <use xlink:href="#glyph1-39" x="847" y="206"/>
+  <use xlink:href="#glyph1-7" x="851" y="206"/>
+  <use xlink:href="#glyph1-8" x="860" y="206"/>
+  <use xlink:href="#glyph1-8" x="868" y="206"/>
+  <use xlink:href="#glyph1-11" x="876" y="206"/>
+  <use xlink:href="#glyph1-16" x="879" y="206"/>
+  <use xlink:href="#glyph1-11" x="885" y="206"/>
+  <use xlink:href="#glyph1-2" x="888" y="206"/>
+  <use xlink:href="#glyph1-12" x="897" y="206"/>
+  <use xlink:href="#glyph1-29" x="905" y="206"/>
+  <use xlink:href="#glyph1-38" x="912" y="206"/>
+  <use xlink:href="#glyph1-38" x="916" y="206"/>
+  <use xlink:href="#glyph1-30" x="920" y="206"/>
+  <use xlink:href="#glyph1-50" x="927" y="206"/>
+  <use xlink:href="#glyph1-39" x="931" y="206"/>
+  <use xlink:href="#glyph1-11" x="935" y="206"/>
+  <use xlink:href="#glyph1-16" x="938" y="206"/>
+  <use xlink:href="#glyph1-57" x="944" y="206"/>
+  <use xlink:href="#glyph1-5" x="947" y="206"/>
+  <use xlink:href="#glyph1-39" x="954" y="206"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-4" x="170" y="227"/>
+  <use xlink:href="#glyph1-2" x="178" y="227"/>
+  <use xlink:href="#glyph1-5" x="187" y="227"/>
+  <use xlink:href="#glyph1-5" x="194" y="227"/>
+  <use xlink:href="#glyph1-11" x="201" y="227"/>
+  <use xlink:href="#glyph1-49" x="204" y="227"/>
+  <use xlink:href="#glyph1-38" x="212" y="227"/>
+  <use xlink:href="#glyph1-6" x="216" y="227"/>
+  <use xlink:href="#glyph1-39" x="224" y="227"/>
+  <use xlink:href="#glyph1-16" x="228" y="227"/>
+  <use xlink:href="#glyph1-2" x="234" y="227"/>
+  <use xlink:href="#glyph1-39" x="243" y="227"/>
+  <use xlink:href="#glyph1-15" x="247" y="227"/>
+  <use xlink:href="#glyph1-5" x="255" y="227"/>
+  <use xlink:href="#glyph1-6" x="262" y="227"/>
+  <use xlink:href="#glyph1-39" x="270" y="227"/>
+  <use xlink:href="#glyph1-16" x="274" y="227"/>
+  <use xlink:href="#glyph1-34" x="280" y="227"/>
+  <use xlink:href="#glyph1-6" x="288" y="227"/>
+  <use xlink:href="#glyph1-39" x="296" y="227"/>
+  <use xlink:href="#glyph1-16" x="300" y="227"/>
+  <use xlink:href="#glyph1-11" x="306" y="227"/>
+  <use xlink:href="#glyph1-3" x="309" y="227"/>
+  <use xlink:href="#glyph1-6" x="320" y="227"/>
+  <use xlink:href="#glyph1-39" x="328" y="227"/>
+  <use xlink:href="#glyph1-2" x="332" y="227"/>
+  <use xlink:href="#glyph1-44" x="341" y="227"/>
+  <use xlink:href="#glyph1-39" x="347" y="227"/>
+  <use xlink:href="#glyph1-16" x="351" y="227"/>
+  <use xlink:href="#glyph1-34" x="357" y="227"/>
+  <use xlink:href="#glyph1-6" x="365" y="227"/>
+  <use xlink:href="#glyph1-39" x="373" y="227"/>
+  <use xlink:href="#glyph1-3" x="377" y="227"/>
+  <use xlink:href="#glyph1-6" x="388" y="227"/>
+  <use xlink:href="#glyph1-6" x="396" y="227"/>
+  <use xlink:href="#glyph1-16" x="404" y="227"/>
+  <use xlink:href="#glyph1-11" x="410" y="227"/>
+  <use xlink:href="#glyph1-12" x="413" y="227"/>
+  <use xlink:href="#glyph1-10" x="421" y="227"/>
+  <use xlink:href="#glyph1-39" x="429" y="227"/>
+  <use xlink:href="#glyph1-29" x="433" y="227"/>
+  <use xlink:href="#glyph1-5" x="440" y="227"/>
+  <use xlink:href="#glyph1-39" x="447" y="227"/>
+  <use xlink:href="#glyph1-29" x="451" y="227"/>
+  <use xlink:href="#glyph1-39" x="458" y="227"/>
+  <use xlink:href="#glyph1-5" x="462" y="227"/>
+  <use xlink:href="#glyph1-29" x="469" y="227"/>
+  <use xlink:href="#glyph1-38" x="476" y="227"/>
+  <use xlink:href="#glyph1-16" x="480" y="227"/>
+  <use xlink:href="#glyph1-39" x="486" y="227"/>
+  <use xlink:href="#glyph1-11" x="490" y="227"/>
+  <use xlink:href="#glyph1-44" x="493" y="227"/>
+  <use xlink:href="#glyph1-39" x="499" y="227"/>
+  <use xlink:href="#glyph1-30" x="503" y="227"/>
+  <use xlink:href="#glyph1-2" x="510" y="227"/>
+  <use xlink:href="#glyph1-15" x="519" y="227"/>
+  <use xlink:href="#glyph1-39" x="527" y="227"/>
+  <use xlink:href="#glyph1-29" x="531" y="227"/>
+  <use xlink:href="#glyph1-10" x="538" y="227"/>
+  <use xlink:href="#glyph1-20" x="546" y="227"/>
+  <use xlink:href="#glyph1-6" x="551" y="227"/>
+  <use xlink:href="#glyph1-6" x="559" y="227"/>
+  <use xlink:href="#glyph1-8" x="567" y="227"/>
+  <use xlink:href="#glyph1-39" x="575" y="227"/>
+  <use xlink:href="#glyph1-2" x="579" y="227"/>
+  <use xlink:href="#glyph1-12" x="588" y="227"/>
+  <use xlink:href="#glyph1-39" x="596" y="227"/>
+  <use xlink:href="#glyph1-11" x="600" y="227"/>
+  <use xlink:href="#glyph1-16" x="603" y="227"/>
+  <use xlink:href="#glyph1-54" x="609" y="227"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-33" x="170" y="269"/>
+  <use xlink:href="#glyph1-34" x="184" y="269"/>
+  <use xlink:href="#glyph1-6" x="192" y="269"/>
+  <use xlink:href="#glyph1-12" x="200" y="269"/>
+  <use xlink:href="#glyph1-39" x="208" y="269"/>
+  <use xlink:href="#glyph1-6" x="212" y="269"/>
+  <use xlink:href="#glyph1-12" x="220" y="269"/>
+  <use xlink:href="#glyph1-16" x="228" y="269"/>
+  <use xlink:href="#glyph1-6" x="234" y="269"/>
+  <use xlink:href="#glyph1-20" x="242" y="269"/>
+  <use xlink:href="#glyph1-11" x="247" y="269"/>
+  <use xlink:href="#glyph1-12" x="250" y="269"/>
+  <use xlink:href="#glyph1-10" x="258" y="269"/>
+  <use xlink:href="#glyph1-39" x="266" y="269"/>
+  <use xlink:href="#glyph1-16" x="270" y="269"/>
+  <use xlink:href="#glyph1-34" x="276" y="269"/>
+  <use xlink:href="#glyph1-6" x="284" y="269"/>
+  <use xlink:href="#glyph1-39" x="292" y="269"/>
+  <use xlink:href="#glyph1-37" x="296" y="269"/>
+  <use xlink:href="#glyph1-29" x="303" y="269"/>
+  <use xlink:href="#glyph1-20" x="310" y="269"/>
+  <use xlink:href="#glyph1-8" x="315" y="269"/>
+  <use xlink:href="#glyph1-5" x="323" y="269"/>
+  <use xlink:href="#glyph1-39" x="330" y="269"/>
+  <use xlink:href="#glyph1-6" x="334" y="269"/>
+  <use xlink:href="#glyph1-12" x="342" y="269"/>
+  <use xlink:href="#glyph1-16" x="350" y="269"/>
+  <use xlink:href="#glyph1-6" x="356" y="269"/>
+  <use xlink:href="#glyph1-20" x="364" y="269"/>
+  <use xlink:href="#glyph1-39" x="369" y="269"/>
+  <use xlink:href="#glyph1-16" x="373" y="269"/>
+  <use xlink:href="#glyph1-34" x="379" y="269"/>
+  <use xlink:href="#glyph1-6" x="387" y="269"/>
+  <use xlink:href="#glyph1-39" x="395" y="269"/>
+  <use xlink:href="#glyph1-12" x="399" y="269"/>
+  <use xlink:href="#glyph1-15" x="407" y="269"/>
+  <use xlink:href="#glyph1-3" x="415" y="269"/>
+  <use xlink:href="#glyph1-49" x="426" y="269"/>
+  <use xlink:href="#glyph1-6" x="434" y="269"/>
+  <use xlink:href="#glyph1-20" x="442" y="269"/>
+  <use xlink:href="#glyph1-39" x="447" y="269"/>
+  <use xlink:href="#glyph1-2" x="451" y="269"/>
+  <use xlink:href="#glyph1-20" x="460" y="269"/>
+  <use xlink:href="#glyph1-39" x="465" y="269"/>
+  <use xlink:href="#glyph1-44" x="469" y="269"/>
+  <use xlink:href="#glyph1-29" x="475" y="269"/>
+  <use xlink:href="#glyph1-37" x="482" y="269"/>
+  <use xlink:href="#glyph1-6" x="489" y="269"/>
+  <use xlink:href="#glyph1-39" x="497" y="269"/>
+  <use xlink:href="#glyph1-2" x="501" y="269"/>
+  <use xlink:href="#glyph1-44" x="510" y="269"/>
+  <use xlink:href="#glyph1-39" x="516" y="269"/>
+  <use xlink:href="#glyph1-16" x="520" y="269"/>
+  <use xlink:href="#glyph1-34" x="526" y="269"/>
+  <use xlink:href="#glyph1-6" x="534" y="269"/>
+  <use xlink:href="#glyph1-39" x="542" y="269"/>
+  <use xlink:href="#glyph1-37" x="546" y="269"/>
+  <use xlink:href="#glyph1-29" x="553" y="269"/>
+  <use xlink:href="#glyph1-20" x="560" y="269"/>
+  <use xlink:href="#glyph1-8" x="565" y="269"/>
+  <use xlink:href="#glyph1-39" x="573" y="269"/>
+  <use xlink:href="#glyph1-58" x="577" y="269"/>
+  <use xlink:href="#glyph1-20" x="585" y="269"/>
+  <use xlink:href="#glyph1-5" x="590" y="269"/>
+  <use xlink:href="#glyph1-16" x="597" y="269"/>
+  <use xlink:href="#glyph1-50" x="603" y="269"/>
+  <use xlink:href="#glyph1-39" x="607" y="269"/>
+  <use xlink:href="#glyph1-29" x="611" y="269"/>
+  <use xlink:href="#glyph1-12" x="618" y="269"/>
+  <use xlink:href="#glyph1-8" x="626" y="269"/>
+  <use xlink:href="#glyph1-39" x="634" y="269"/>
+  <use xlink:href="#glyph1-16" x="638" y="269"/>
+  <use xlink:href="#glyph1-34" x="644" y="269"/>
+  <use xlink:href="#glyph1-6" x="652" y="269"/>
+  <use xlink:href="#glyph1-12" x="660" y="269"/>
+  <use xlink:href="#glyph1-39" x="668" y="269"/>
+  <use xlink:href="#glyph1-16" x="672" y="269"/>
+  <use xlink:href="#glyph1-34" x="678" y="269"/>
+  <use xlink:href="#glyph1-6" x="686" y="269"/>
+  <use xlink:href="#glyph1-39" x="694" y="269"/>
+  <use xlink:href="#glyph1-5" x="698" y="269"/>
+  <use xlink:href="#glyph1-15" x="705" y="269"/>
+  <use xlink:href="#glyph1-11" x="713" y="269"/>
+  <use xlink:href="#glyph1-16" x="716" y="269"/>
+  <use xlink:href="#glyph1-6" x="722" y="269"/>
+  <use xlink:href="#glyph1-39" x="730" y="269"/>
+  <use xlink:href="#glyph1-59" x="734" y="269"/>
+  <use xlink:href="#glyph1-39" x="740" y="269"/>
+  <use xlink:href="#glyph1-49" x="744" y="269"/>
+  <use xlink:href="#glyph1-2" x="752" y="269"/>
+  <use xlink:href="#glyph1-16" x="761" y="269"/>
+  <use xlink:href="#glyph1-34" x="767" y="269"/>
+  <use xlink:href="#glyph1-39" x="775" y="269"/>
+  <use xlink:href="#glyph1-29" x="779" y="269"/>
+  <use xlink:href="#glyph1-5" x="786" y="269"/>
+  <use xlink:href="#glyph1-39" x="793" y="269"/>
+  <use xlink:href="#glyph1-5" x="797" y="269"/>
+  <use xlink:href="#glyph1-11" x="804" y="269"/>
+  <use xlink:href="#glyph1-12" x="807" y="269"/>
+  <use xlink:href="#glyph1-10" x="815" y="269"/>
+  <use xlink:href="#glyph1-38" x="823" y="269"/>
+  <use xlink:href="#glyph1-6" x="827" y="269"/>
+  <use xlink:href="#glyph1-39" x="835" y="269"/>
+  <use xlink:href="#glyph1-38" x="839" y="269"/>
+  <use xlink:href="#glyph1-6" x="843" y="269"/>
+  <use xlink:href="#glyph1-16" x="851" y="269"/>
+  <use xlink:href="#glyph1-16" x="857" y="269"/>
+  <use xlink:href="#glyph1-6" x="863" y="269"/>
+  <use xlink:href="#glyph1-20" x="871" y="269"/>
+  <use xlink:href="#glyph1-5" x="876" y="269"/>
+  <use xlink:href="#glyph1-54" x="883" y="269"/>
+  <use xlink:href="#glyph1-39" x="886" y="269"/>
+  <use xlink:href="#glyph1-31" x="890" y="269"/>
+  <use xlink:href="#glyph1-2" x="899" y="269"/>
+  <use xlink:href="#glyph1-39" x="908" y="269"/>
+  <use xlink:href="#glyph1-16" x="912" y="269"/>
+  <use xlink:href="#glyph1-34" x="918" y="269"/>
+  <use xlink:href="#glyph1-6" x="926" y="269"/>
+  <use xlink:href="#glyph1-39" x="934" y="269"/>
+  <use xlink:href="#glyph1-16" x="938" y="269"/>
+  <use xlink:href="#glyph1-34" x="944" y="269"/>
+  <use xlink:href="#glyph1-20" x="952" y="269"/>
+  <use xlink:href="#glyph1-6" x="957" y="269"/>
+  <use xlink:href="#glyph1-6" x="965" y="269"/>
+  <use xlink:href="#glyph1-39" x="973" y="269"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-2" x="170" y="290"/>
+  <use xlink:href="#glyph1-44" x="179" y="290"/>
+  <use xlink:href="#glyph1-39" x="185" y="290"/>
+  <use xlink:href="#glyph1-8" x="189" y="290"/>
+  <use xlink:href="#glyph1-11" x="197" y="290"/>
+  <use xlink:href="#glyph1-3" x="200" y="290"/>
+  <use xlink:href="#glyph1-2" x="211" y="290"/>
+  <use xlink:href="#glyph1-12" x="220" y="290"/>
+  <use xlink:href="#glyph1-8" x="228" y="290"/>
+  <use xlink:href="#glyph1-5" x="236" y="290"/>
+  <use xlink:href="#glyph1-39" x="243" y="290"/>
+  <use xlink:href="#glyph1-11" x="247" y="290"/>
+  <use xlink:href="#glyph1-5" x="250" y="290"/>
+  <use xlink:href="#glyph1-39" x="257" y="290"/>
+  <use xlink:href="#glyph1-57" x="261" y="290"/>
+  <use xlink:href="#glyph1-21" x="264" y="290"/>
+  <use xlink:href="#glyph1-8" x="273" y="290"/>
+  <use xlink:href="#glyph1-57" x="281" y="290"/>
+  <use xlink:href="#glyph1-39" x="284" y="290"/>
+  <use xlink:href="#glyph1-29" x="288" y="290"/>
+  <use xlink:href="#glyph1-12" x="295" y="290"/>
+  <use xlink:href="#glyph1-8" x="303" y="290"/>
+  <use xlink:href="#glyph1-39" x="311" y="290"/>
+  <use xlink:href="#glyph1-16" x="315" y="290"/>
+  <use xlink:href="#glyph1-34" x="321" y="290"/>
+  <use xlink:href="#glyph1-6" x="329" y="290"/>
+  <use xlink:href="#glyph1-39" x="337" y="290"/>
+  <use xlink:href="#glyph1-29" x="341" y="290"/>
+  <use xlink:href="#glyph1-37" x="348" y="290"/>
+  <use xlink:href="#glyph1-6" x="355" y="290"/>
+  <use xlink:href="#glyph1-39" x="363" y="290"/>
+  <use xlink:href="#glyph1-2" x="367" y="290"/>
+  <use xlink:href="#glyph1-44" x="376" y="290"/>
+  <use xlink:href="#glyph1-39" x="382" y="290"/>
+  <use xlink:href="#glyph1-5" x="386" y="290"/>
+  <use xlink:href="#glyph1-4" x="393" y="290"/>
+  <use xlink:href="#glyph1-29" x="401" y="290"/>
+  <use xlink:href="#glyph1-8" x="408" y="290"/>
+  <use xlink:href="#glyph1-6" x="416" y="290"/>
+  <use xlink:href="#glyph1-5" x="424" y="290"/>
+  <use xlink:href="#glyph1-39" x="431" y="290"/>
+  <use xlink:href="#glyph1-11" x="435" y="290"/>
+  <use xlink:href="#glyph1-5" x="438" y="290"/>
+  <use xlink:href="#glyph1-39" x="445" y="290"/>
+  <use xlink:href="#glyph1-57" x="449" y="290"/>
+  <use xlink:href="#glyph1-29" x="452" y="290"/>
+  <use xlink:href="#glyph1-5" x="459" y="290"/>
+  <use xlink:href="#glyph1-57" x="466" y="290"/>
+  <use xlink:href="#glyph1-54" x="469" y="290"/>
+  <use xlink:href="#glyph1-39" x="472" y="290"/>
+  <use xlink:href="#glyph1-47" x="476" y="290"/>
+  <use xlink:href="#glyph1-11" x="486" y="290"/>
+  <use xlink:href="#glyph1-5" x="489" y="290"/>
+  <use xlink:href="#glyph1-37" x="496" y="290"/>
+  <use xlink:href="#glyph1-29" x="503" y="290"/>
+  <use xlink:href="#glyph1-20" x="510" y="290"/>
+  <use xlink:href="#glyph1-8" x="515" y="290"/>
+  <use xlink:href="#glyph1-39" x="523" y="290"/>
+  <use xlink:href="#glyph1-16" x="527" y="290"/>
+  <use xlink:href="#glyph1-34" x="533" y="290"/>
+  <use xlink:href="#glyph1-6" x="541" y="290"/>
+  <use xlink:href="#glyph1-39" x="549" y="290"/>
+  <use xlink:href="#glyph1-60" x="553" y="290"/>
+  <use xlink:href="#glyph1-2" x="556" y="290"/>
+  <use xlink:href="#glyph1-42" x="565" y="290"/>
+  <use xlink:href="#glyph1-6" x="572" y="290"/>
+  <use xlink:href="#glyph1-20" x="580" y="290"/>
+  <use xlink:href="#glyph1-5" x="585" y="290"/>
+  <use xlink:href="#glyph1-54" x="592" y="290"/>
+  <use xlink:href="#glyph1-39" x="595" y="290"/>
+  <use xlink:href="#glyph1-1" x="599" y="290"/>
+  <use xlink:href="#glyph1-38" x="608" y="290"/>
+  <use xlink:href="#glyph1-11" x="612" y="290"/>
+  <use xlink:href="#glyph1-37" x="615" y="290"/>
+  <use xlink:href="#glyph1-42" x="622" y="290"/>
+  <use xlink:href="#glyph1-39" x="629" y="290"/>
+  <use xlink:href="#glyph1-2" x="633" y="290"/>
+  <use xlink:href="#glyph1-12" x="642" y="290"/>
+  <use xlink:href="#glyph1-39" x="650" y="290"/>
+  <use xlink:href="#glyph1-29" x="654" y="290"/>
+  <use xlink:href="#glyph1-39" x="661" y="290"/>
+  <use xlink:href="#glyph1-37" x="665" y="290"/>
+  <use xlink:href="#glyph1-29" x="672" y="290"/>
+  <use xlink:href="#glyph1-20" x="679" y="290"/>
+  <use xlink:href="#glyph1-8" x="684" y="290"/>
+  <use xlink:href="#glyph1-39" x="692" y="290"/>
+  <use xlink:href="#glyph1-16" x="696" y="290"/>
+  <use xlink:href="#glyph1-2" x="702" y="290"/>
+  <use xlink:href="#glyph1-39" x="711" y="290"/>
+  <use xlink:href="#glyph1-8" x="715" y="290"/>
+  <use xlink:href="#glyph1-6" x="723" y="290"/>
+  <use xlink:href="#glyph1-38" x="731" y="290"/>
+  <use xlink:href="#glyph1-6" x="735" y="290"/>
+  <use xlink:href="#glyph1-16" x="743" y="290"/>
+  <use xlink:href="#glyph1-6" x="749" y="290"/>
+  <use xlink:href="#glyph1-54" x="757" y="290"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 140 L 982 140 L 982 161 L 170 161 Z M 170 140 L 982 140 L 982 161 L 170 161 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-61" x="170" y="156"/>
+  <use xlink:href="#glyph1-12" x="177" y="156"/>
+  <use xlink:href="#glyph1-16" x="185" y="156"/>
+  <use xlink:href="#glyph1-6" x="191" y="156"/>
+  <use xlink:href="#glyph1-20" x="199" y="156"/>
+  <use xlink:href="#glyph1-39" x="204" y="156"/>
+  <use xlink:href="#glyph1-16" x="208" y="156"/>
+  <use xlink:href="#glyph1-34" x="214" y="156"/>
+  <use xlink:href="#glyph1-6" x="222" y="156"/>
+  <use xlink:href="#glyph1-39" x="230" y="156"/>
+  <use xlink:href="#glyph1-5" x="234" y="156"/>
+  <use xlink:href="#glyph1-34" x="241" y="156"/>
+  <use xlink:href="#glyph1-29" x="249" y="156"/>
+  <use xlink:href="#glyph1-20" x="256" y="156"/>
+  <use xlink:href="#glyph1-6" x="261" y="156"/>
+  <use xlink:href="#glyph1-8" x="269" y="156"/>
+  <use xlink:href="#glyph1-39" x="277" y="156"/>
+  <use xlink:href="#glyph1-5" x="281" y="156"/>
+  <use xlink:href="#glyph1-6" x="288" y="156"/>
+  <use xlink:href="#glyph1-37" x="296" y="156"/>
+  <use xlink:href="#glyph1-20" x="303" y="156"/>
+  <use xlink:href="#glyph1-6" x="308" y="156"/>
+  <use xlink:href="#glyph1-16" x="316" y="156"/>
+  <use xlink:href="#glyph1-54" x="322" y="156"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 140 L 167 140 L 167 161 L 155 161 Z M 155 140 L 167 140 L 167 161 L 155 161 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-21" x="155" y="156"/>
+  <use xlink:href="#glyph1-54" x="164" y="156"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 783 100 L 982 100 L 982 132 L 783 132 Z M 783 100 L 982 100 L 982 132 L 783 132 Z "/>
+<g clip-path="url(#clip94)" clip-rule="nonzero">
+<g clip-path="url(#clip95)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern268);" d="M 677 100 L 680 100 L 680 103 L 677 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern269);" d="M 680 100 L 780 100 L 780 103 L 680 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern270);" d="M 780 100 L 783 100 L 783 103 L 780 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern271);" d="M 677 103 L 680 103 L 680 128 L 677 128 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern272);" d="M 780 103 L 783 103 L 783 128 L 780 128 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern273);" d="M 677 128 L 680 128 L 680 132 L 677 132 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern274);" d="M 680 128 L 780 128 L 780 132 L 680 132 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern275);" d="M 780 128 L 783 128 L 783 132 L 780 132 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 685 105 L 775 105 L 775 126 L 685 126 Z M 685 105 L 775 105 L 775 126 L 685 126 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph1-31" x="685" y="121"/>
+  <use xlink:href="#glyph1-34" x="694" y="121"/>
+  <use xlink:href="#glyph1-29" x="702" y="121"/>
+  <use xlink:href="#glyph1-20" x="709" y="121"/>
+  <use xlink:href="#glyph1-6" x="714" y="121"/>
+  <use xlink:href="#glyph1-8" x="722" y="121"/>
+  <use xlink:href="#glyph1-39" x="730" y="121"/>
+  <use xlink:href="#glyph1-5" x="734" y="121"/>
+  <use xlink:href="#glyph1-6" x="741" y="121"/>
+  <use xlink:href="#glyph1-37" x="749" y="121"/>
+  <use xlink:href="#glyph1-20" x="756" y="121"/>
+  <use xlink:href="#glyph1-6" x="761" y="121"/>
+  <use xlink:href="#glyph1-16" x="769" y="121"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 478 100 L 677 100 L 677 132 L 478 132 Z M 478 100 L 677 100 L 677 132 L 478 132 Z "/>
+<g clip-path="url(#clip96)" clip-rule="nonzero">
+<g clip-path="url(#clip97)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern276);" d="M 369 100 L 372 100 L 372 103 L 369 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern277);" d="M 372 100 L 475 100 L 475 103 L 372 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern278);" d="M 475 100 L 478 100 L 478 103 L 475 103 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern279);" d="M 369 103 L 372 103 L 372 128 L 369 128 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern280);" d="M 475 103 L 478 103 L 478 128 L 475 128 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern281);" d="M 369 128 L 372 128 L 372 132 L 369 132 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern282);" d="M 372 128 L 475 128 L 475 132 L 372 132 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern283);" d="M 475 128 L 478 128 L 478 132 L 475 132 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 377 105 L 470 105 L 470 126 L 377 126 Z M 377 105 L 470 105 L 470 126 L 377 126 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph1-14" x="377" y="121"/>
+  <use xlink:href="#glyph1-29" x="389" y="121"/>
+  <use xlink:href="#glyph1-12" x="396" y="121"/>
+  <use xlink:href="#glyph1-15" x="404" y="121"/>
+  <use xlink:href="#glyph1-29" x="412" y="121"/>
+  <use xlink:href="#glyph1-38" x="419" y="121"/>
+  <use xlink:href="#glyph1-39" x="423" y="121"/>
+  <use xlink:href="#glyph1-41" x="427" y="121"/>
+  <use xlink:href="#glyph1-6" x="436" y="121"/>
+  <use xlink:href="#glyph1-30" x="444" y="121"/>
+  <use xlink:href="#glyph1-11" x="451" y="121"/>
+  <use xlink:href="#glyph1-12" x="454" y="121"/>
+  <use xlink:href="#glyph1-10" x="462" y="121"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 100 L 369 100 L 369 132 L 170 132 Z M 170 100 L 369 100 L 369 132 L 170 132 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 170 -138 L 982 -138 L 982 72 L 170 72 Z M 170 -138 L 982 -138 L 982 72 L 170 72 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-4" x="170" y="4"/>
+  <use xlink:href="#glyph1-29" x="178" y="4"/>
+  <use xlink:href="#glyph1-20" x="185" y="4"/>
+  <use xlink:href="#glyph1-16" x="190" y="4"/>
+  <use xlink:href="#glyph1-30" x="196" y="4"/>
+  <use xlink:href="#glyph1-39" x="203" y="4"/>
+  <use xlink:href="#glyph1-52" x="207" y="4"/>
+  <use xlink:href="#glyph1-34" x="219" y="4"/>
+  <use xlink:href="#glyph1-2" x="227" y="4"/>
+  <use xlink:href="#glyph1-39" x="236" y="4"/>
+  <use xlink:href="#glyph1-34" x="240" y="4"/>
+  <use xlink:href="#glyph1-2" x="248" y="4"/>
+  <use xlink:href="#glyph1-38" x="257" y="4"/>
+  <use xlink:href="#glyph1-8" x="261" y="4"/>
+  <use xlink:href="#glyph1-5" x="269" y="4"/>
+  <use xlink:href="#glyph1-39" x="276" y="4"/>
+  <use xlink:href="#glyph1-16" x="280" y="4"/>
+  <use xlink:href="#glyph1-34" x="286" y="4"/>
+  <use xlink:href="#glyph1-6" x="294" y="4"/>
+  <use xlink:href="#glyph1-39" x="302" y="4"/>
+  <use xlink:href="#glyph1-5" x="306" y="4"/>
+  <use xlink:href="#glyph1-29" x="313" y="4"/>
+  <use xlink:href="#glyph1-3" x="320" y="4"/>
+  <use xlink:href="#glyph1-6" x="331" y="4"/>
+  <use xlink:href="#glyph1-39" x="339" y="4"/>
+  <use xlink:href="#glyph1-5" x="343" y="4"/>
+  <use xlink:href="#glyph1-34" x="350" y="4"/>
+  <use xlink:href="#glyph1-29" x="358" y="4"/>
+  <use xlink:href="#glyph1-20" x="365" y="4"/>
+  <use xlink:href="#glyph1-6" x="370" y="4"/>
+  <use xlink:href="#glyph1-8" x="378" y="4"/>
+  <use xlink:href="#glyph1-39" x="386" y="4"/>
+  <use xlink:href="#glyph1-5" x="390" y="4"/>
+  <use xlink:href="#glyph1-6" x="397" y="4"/>
+  <use xlink:href="#glyph1-37" x="405" y="4"/>
+  <use xlink:href="#glyph1-20" x="412" y="4"/>
+  <use xlink:href="#glyph1-6" x="417" y="4"/>
+  <use xlink:href="#glyph1-16" x="425" y="4"/>
+  <use xlink:href="#glyph1-39" x="431" y="4"/>
+  <use xlink:href="#glyph1-29" x="435" y="4"/>
+  <use xlink:href="#glyph1-12" x="442" y="4"/>
+  <use xlink:href="#glyph1-8" x="450" y="4"/>
+  <use xlink:href="#glyph1-39" x="458" y="4"/>
+  <use xlink:href="#glyph1-5" x="462" y="4"/>
+  <use xlink:href="#glyph1-34" x="469" y="4"/>
+  <use xlink:href="#glyph1-29" x="477" y="4"/>
+  <use xlink:href="#glyph1-20" x="484" y="4"/>
+  <use xlink:href="#glyph1-6" x="489" y="4"/>
+  <use xlink:href="#glyph1-8" x="497" y="4"/>
+  <use xlink:href="#glyph1-39" x="505" y="4"/>
+  <use xlink:href="#glyph1-16" x="509" y="4"/>
+  <use xlink:href="#glyph1-11" x="515" y="4"/>
+  <use xlink:href="#glyph1-3" x="518" y="4"/>
+  <use xlink:href="#glyph1-6" x="529" y="4"/>
+  <use xlink:href="#glyph1-39" x="537" y="4"/>
+  <use xlink:href="#glyph1-29" x="541" y="4"/>
+  <use xlink:href="#glyph1-5" x="548" y="4"/>
+  <use xlink:href="#glyph1-39" x="555" y="4"/>
+  <use xlink:href="#glyph1-30" x="559" y="4"/>
+  <use xlink:href="#glyph1-2" x="566" y="4"/>
+  <use xlink:href="#glyph1-15" x="575" y="4"/>
+  <use xlink:href="#glyph1-54" x="583" y="4"/>
+  <use xlink:href="#glyph1-39" x="586" y="4"/>
+  <use xlink:href="#glyph1-35" x="590" y="4"/>
+  <use xlink:href="#glyph1-2" x="597" y="4"/>
+  <use xlink:href="#glyph1-20" x="606" y="4"/>
+  <use xlink:href="#glyph1-39" x="611" y="4"/>
+  <use xlink:href="#glyph1-6" x="615" y="4"/>
+  <use xlink:href="#glyph1-62" x="623" y="4"/>
+  <use xlink:href="#glyph1-29" x="631" y="4"/>
+  <use xlink:href="#glyph1-3" x="638" y="4"/>
+  <use xlink:href="#glyph1-4" x="649" y="4"/>
+  <use xlink:href="#glyph1-38" x="657" y="4"/>
+  <use xlink:href="#glyph1-6" x="661" y="4"/>
+  <use xlink:href="#glyph1-50" x="669" y="4"/>
+  <use xlink:href="#glyph1-39" x="673" y="4"/>
+  <use xlink:href="#glyph1-11" x="677" y="4"/>
+  <use xlink:href="#glyph1-44" x="680" y="4"/>
+  <use xlink:href="#glyph1-39" x="686" y="4"/>
+  <use xlink:href="#glyph1-30" x="690" y="4"/>
+  <use xlink:href="#glyph1-2" x="697" y="4"/>
+  <use xlink:href="#glyph1-15" x="706" y="4"/>
+  <use xlink:href="#glyph1-39" x="714" y="4"/>
+  <use xlink:href="#glyph1-3" x="718" y="4"/>
+  <use xlink:href="#glyph1-6" x="729" y="4"/>
+  <use xlink:href="#glyph1-16" x="737" y="4"/>
+  <use xlink:href="#glyph1-39" x="743" y="4"/>
+  <use xlink:href="#glyph1-30" x="747" y="4"/>
+  <use xlink:href="#glyph1-2" x="754" y="4"/>
+  <use xlink:href="#glyph1-15" x="763" y="4"/>
+  <use xlink:href="#glyph1-20" x="771" y="4"/>
+  <use xlink:href="#glyph1-39" x="776" y="4"/>
+  <use xlink:href="#glyph1-37" x="780" y="4"/>
+  <use xlink:href="#glyph1-2" x="787" y="4"/>
+  <use xlink:href="#glyph1-12" x="796" y="4"/>
+  <use xlink:href="#glyph1-16" x="804" y="4"/>
+  <use xlink:href="#glyph1-29" x="810" y="4"/>
+  <use xlink:href="#glyph1-37" x="817" y="4"/>
+  <use xlink:href="#glyph1-16" x="824" y="4"/>
+  <use xlink:href="#glyph1-39" x="830" y="4"/>
+  <use xlink:href="#glyph1-11" x="834" y="4"/>
+  <use xlink:href="#glyph1-12" x="837" y="4"/>
+  <use xlink:href="#glyph1-39" x="845" y="4"/>
+  <use xlink:href="#glyph1-20" x="849" y="4"/>
+  <use xlink:href="#glyph1-6" x="854" y="4"/>
+  <use xlink:href="#glyph1-29" x="862" y="4"/>
+  <use xlink:href="#glyph1-38" x="869" y="4"/>
+  <use xlink:href="#glyph1-39" x="873" y="4"/>
+  <use xlink:href="#glyph1-38" x="877" y="4"/>
+  <use xlink:href="#glyph1-11" x="881" y="4"/>
+  <use xlink:href="#glyph1-44" x="884" y="4"/>
+  <use xlink:href="#glyph1-6" x="890" y="4"/>
+  <use xlink:href="#glyph1-50" x="898" y="4"/>
+  <use xlink:href="#glyph1-39" x="902" y="4"/>
+  <use xlink:href="#glyph1-30" x="906" y="4"/>
+  <use xlink:href="#glyph1-2" x="913" y="4"/>
+  <use xlink:href="#glyph1-15" x="922" y="4"/>
+  <use xlink:href="#glyph1-39" x="930" y="4"/>
+  <use xlink:href="#glyph1-37" x="934" y="4"/>
+  <use xlink:href="#glyph1-2" x="941" y="4"/>
+  <use xlink:href="#glyph1-15" x="950" y="4"/>
+  <use xlink:href="#glyph1-38" x="958" y="4"/>
+  <use xlink:href="#glyph1-8" x="962" y="4"/>
+  <use xlink:href="#glyph1-39" x="970" y="4"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-29" x="170" y="25"/>
+  <use xlink:href="#glyph1-10" x="177" y="25"/>
+  <use xlink:href="#glyph1-20" x="185" y="25"/>
+  <use xlink:href="#glyph1-6" x="190" y="25"/>
+  <use xlink:href="#glyph1-6" x="198" y="25"/>
+  <use xlink:href="#glyph1-39" x="206" y="25"/>
+  <use xlink:href="#glyph1-2" x="210" y="25"/>
+  <use xlink:href="#glyph1-12" x="219" y="25"/>
+  <use xlink:href="#glyph1-39" x="227" y="25"/>
+  <use xlink:href="#glyph1-29" x="231" y="25"/>
+  <use xlink:href="#glyph1-39" x="238" y="25"/>
+  <use xlink:href="#glyph1-5" x="242" y="25"/>
+  <use xlink:href="#glyph1-34" x="249" y="25"/>
+  <use xlink:href="#glyph1-29" x="257" y="25"/>
+  <use xlink:href="#glyph1-20" x="264" y="25"/>
+  <use xlink:href="#glyph1-6" x="269" y="25"/>
+  <use xlink:href="#glyph1-8" x="277" y="25"/>
+  <use xlink:href="#glyph1-39" x="285" y="25"/>
+  <use xlink:href="#glyph1-5" x="289" y="25"/>
+  <use xlink:href="#glyph1-6" x="296" y="25"/>
+  <use xlink:href="#glyph1-37" x="304" y="25"/>
+  <use xlink:href="#glyph1-20" x="311" y="25"/>
+  <use xlink:href="#glyph1-6" x="316" y="25"/>
+  <use xlink:href="#glyph1-16" x="324" y="25"/>
+  <use xlink:href="#glyph1-39" x="330" y="25"/>
+  <use xlink:href="#glyph1-29" x="334" y="25"/>
+  <use xlink:href="#glyph1-12" x="341" y="25"/>
+  <use xlink:href="#glyph1-8" x="349" y="25"/>
+  <use xlink:href="#glyph1-39" x="357" y="25"/>
+  <use xlink:href="#glyph1-16" x="361" y="25"/>
+  <use xlink:href="#glyph1-34" x="367" y="25"/>
+  <use xlink:href="#glyph1-6" x="375" y="25"/>
+  <use xlink:href="#glyph1-39" x="383" y="25"/>
+  <use xlink:href="#glyph1-16" x="387" y="25"/>
+  <use xlink:href="#glyph1-11" x="393" y="25"/>
+  <use xlink:href="#glyph1-3" x="396" y="25"/>
+  <use xlink:href="#glyph1-6" x="407" y="25"/>
+  <use xlink:href="#glyph1-39" x="415" y="25"/>
+  <use xlink:href="#glyph1-55" x="419" y="25"/>
+  <use xlink:href="#glyph1-16" x="425" y="25"/>
+  <use xlink:href="#glyph1-2" x="431" y="25"/>
+  <use xlink:href="#glyph1-39" x="440" y="25"/>
+  <use xlink:href="#glyph1-16" x="444" y="25"/>
+  <use xlink:href="#glyph1-34" x="450" y="25"/>
+  <use xlink:href="#glyph1-6" x="458" y="25"/>
+  <use xlink:href="#glyph1-39" x="466" y="25"/>
+  <use xlink:href="#glyph1-3" x="470" y="25"/>
+  <use xlink:href="#glyph1-11" x="481" y="25"/>
+  <use xlink:href="#glyph1-12" x="484" y="25"/>
+  <use xlink:href="#glyph1-15" x="492" y="25"/>
+  <use xlink:href="#glyph1-16" x="500" y="25"/>
+  <use xlink:href="#glyph1-6" x="506" y="25"/>
+  <use xlink:href="#glyph1-56" x="514" y="25"/>
+  <use xlink:href="#glyph1-54" x="520" y="25"/>
+  <use xlink:href="#glyph1-39" x="523" y="25"/>
+  <use xlink:href="#glyph1-63" x="527" y="25"/>
+  <use xlink:href="#glyph1-29" x="534" y="25"/>
+  <use xlink:href="#glyph1-16" x="541" y="25"/>
+  <use xlink:href="#glyph1-6" x="547" y="25"/>
+  <use xlink:href="#glyph1-20" x="555" y="25"/>
+  <use xlink:href="#glyph1-39" x="560" y="25"/>
+  <use xlink:href="#glyph1-30" x="564" y="25"/>
+  <use xlink:href="#glyph1-2" x="571" y="25"/>
+  <use xlink:href="#glyph1-15" x="580" y="25"/>
+  <use xlink:href="#glyph1-39" x="588" y="25"/>
+  <use xlink:href="#glyph1-37" x="592" y="25"/>
+  <use xlink:href="#glyph1-29" x="599" y="25"/>
+  <use xlink:href="#glyph1-12" x="606" y="25"/>
+  <use xlink:href="#glyph1-39" x="614" y="25"/>
+  <use xlink:href="#glyph1-49" x="618" y="25"/>
+  <use xlink:href="#glyph1-2" x="626" y="25"/>
+  <use xlink:href="#glyph1-16" x="635" y="25"/>
+  <use xlink:href="#glyph1-34" x="641" y="25"/>
+  <use xlink:href="#glyph1-39" x="649" y="25"/>
+  <use xlink:href="#glyph1-15" x="653" y="25"/>
+  <use xlink:href="#glyph1-5" x="661" y="25"/>
+  <use xlink:href="#glyph1-6" x="668" y="25"/>
+  <use xlink:href="#glyph1-39" x="676" y="25"/>
+  <use xlink:href="#glyph1-16" x="680" y="25"/>
+  <use xlink:href="#glyph1-34" x="686" y="25"/>
+  <use xlink:href="#glyph1-11" x="694" y="25"/>
+  <use xlink:href="#glyph1-5" x="697" y="25"/>
+  <use xlink:href="#glyph1-39" x="704" y="25"/>
+  <use xlink:href="#glyph1-44" x="708" y="25"/>
+  <use xlink:href="#glyph1-15" x="714" y="25"/>
+  <use xlink:href="#glyph1-12" x="722" y="25"/>
+  <use xlink:href="#glyph1-37" x="730" y="25"/>
+  <use xlink:href="#glyph1-16" x="737" y="25"/>
+  <use xlink:href="#glyph1-11" x="743" y="25"/>
+  <use xlink:href="#glyph1-2" x="746" y="25"/>
+  <use xlink:href="#glyph1-12" x="755" y="25"/>
+  <use xlink:href="#glyph1-39" x="763" y="25"/>
+  <use xlink:href="#glyph1-16" x="767" y="25"/>
+  <use xlink:href="#glyph1-2" x="773" y="25"/>
+  <use xlink:href="#glyph1-39" x="782" y="25"/>
+  <use xlink:href="#glyph1-49" x="786" y="25"/>
+  <use xlink:href="#glyph1-2" x="794" y="25"/>
+  <use xlink:href="#glyph1-2" x="803" y="25"/>
+  <use xlink:href="#glyph1-16" x="812" y="25"/>
+  <use xlink:href="#glyph1-5" x="818" y="25"/>
+  <use xlink:href="#glyph1-16" x="825" y="25"/>
+  <use xlink:href="#glyph1-20" x="831" y="25"/>
+  <use xlink:href="#glyph1-29" x="836" y="25"/>
+  <use xlink:href="#glyph1-4" x="843" y="25"/>
+  <use xlink:href="#glyph1-39" x="851" y="25"/>
+  <use xlink:href="#glyph1-46" x="855" y="25"/>
+  <use xlink:href="#glyph1-2" x="864" y="25"/>
+  <use xlink:href="#glyph1-12" x="873" y="25"/>
+  <use xlink:href="#glyph1-8" x="881" y="25"/>
+  <use xlink:href="#glyph1-39" x="889" y="25"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-37" x="170" y="46"/>
+  <use xlink:href="#glyph1-2" x="177" y="46"/>
+  <use xlink:href="#glyph1-3" x="186" y="46"/>
+  <use xlink:href="#glyph1-3" x="197" y="46"/>
+  <use xlink:href="#glyph1-15" x="208" y="46"/>
+  <use xlink:href="#glyph1-12" x="216" y="46"/>
+  <use xlink:href="#glyph1-11" x="224" y="46"/>
+  <use xlink:href="#glyph1-37" x="227" y="46"/>
+  <use xlink:href="#glyph1-29" x="234" y="46"/>
+  <use xlink:href="#glyph1-16" x="241" y="46"/>
+  <use xlink:href="#glyph1-11" x="247" y="46"/>
+  <use xlink:href="#glyph1-2" x="250" y="46"/>
+  <use xlink:href="#glyph1-12" x="259" y="46"/>
+  <use xlink:href="#glyph1-54" x="267" y="46"/>
+  <use xlink:href="#glyph1-39" x="270" y="46"/>
+  <use xlink:href="#glyph1-32" x="274" y="46"/>
+  <use xlink:href="#glyph1-34" x="284" y="46"/>
+  <use xlink:href="#glyph1-6" x="292" y="46"/>
+  <use xlink:href="#glyph1-39" x="300" y="46"/>
+  <use xlink:href="#glyph1-5" x="304" y="46"/>
+  <use xlink:href="#glyph1-6" x="311" y="46"/>
+  <use xlink:href="#glyph1-37" x="319" y="46"/>
+  <use xlink:href="#glyph1-15" x="326" y="46"/>
+  <use xlink:href="#glyph1-20" x="334" y="46"/>
+  <use xlink:href="#glyph1-11" x="339" y="46"/>
+  <use xlink:href="#glyph1-16" x="342" y="46"/>
+  <use xlink:href="#glyph1-30" x="348" y="46"/>
+  <use xlink:href="#glyph1-39" x="355" y="46"/>
+  <use xlink:href="#glyph1-2" x="359" y="46"/>
+  <use xlink:href="#glyph1-44" x="368" y="46"/>
+  <use xlink:href="#glyph1-39" x="374" y="46"/>
+  <use xlink:href="#glyph1-16" x="378" y="46"/>
+  <use xlink:href="#glyph1-34" x="384" y="46"/>
+  <use xlink:href="#glyph1-11" x="392" y="46"/>
+  <use xlink:href="#glyph1-5" x="395" y="46"/>
+  <use xlink:href="#glyph1-39" x="402" y="46"/>
+  <use xlink:href="#glyph1-5" x="406" y="46"/>
+  <use xlink:href="#glyph1-37" x="413" y="46"/>
+  <use xlink:href="#glyph1-34" x="420" y="46"/>
+  <use xlink:href="#glyph1-6" x="428" y="46"/>
+  <use xlink:href="#glyph1-3" x="436" y="46"/>
+  <use xlink:href="#glyph1-6" x="447" y="46"/>
+  <use xlink:href="#glyph1-39" x="455" y="46"/>
+  <use xlink:href="#glyph1-20" x="459" y="46"/>
+  <use xlink:href="#glyph1-6" x="464" y="46"/>
+  <use xlink:href="#glyph1-5" x="472" y="46"/>
+  <use xlink:href="#glyph1-16" x="479" y="46"/>
+  <use xlink:href="#glyph1-5" x="485" y="46"/>
+  <use xlink:href="#glyph1-39" x="492" y="46"/>
+  <use xlink:href="#glyph1-2" x="496" y="46"/>
+  <use xlink:href="#glyph1-12" x="505" y="46"/>
+  <use xlink:href="#glyph1-39" x="513" y="46"/>
+  <use xlink:href="#glyph1-16" x="517" y="46"/>
+  <use xlink:href="#glyph1-34" x="523" y="46"/>
+  <use xlink:href="#glyph1-6" x="531" y="46"/>
+  <use xlink:href="#glyph1-39" x="539" y="46"/>
+  <use xlink:href="#glyph1-5" x="543" y="46"/>
+  <use xlink:href="#glyph1-6" x="550" y="46"/>
+  <use xlink:href="#glyph1-37" x="558" y="46"/>
+  <use xlink:href="#glyph1-20" x="565" y="46"/>
+  <use xlink:href="#glyph1-6" x="570" y="46"/>
+  <use xlink:href="#glyph1-16" x="578" y="46"/>
+  <use xlink:href="#glyph1-39" x="584" y="46"/>
+  <use xlink:href="#glyph1-49" x="588" y="46"/>
+  <use xlink:href="#glyph1-6" x="596" y="46"/>
+  <use xlink:href="#glyph1-11" x="604" y="46"/>
+  <use xlink:href="#glyph1-12" x="607" y="46"/>
+  <use xlink:href="#glyph1-10" x="615" y="46"/>
+  <use xlink:href="#glyph1-39" x="623" y="46"/>
+  <use xlink:href="#glyph1-15" x="627" y="46"/>
+  <use xlink:href="#glyph1-12" x="635" y="46"/>
+  <use xlink:href="#glyph1-10" x="643" y="46"/>
+  <use xlink:href="#glyph1-15" x="651" y="46"/>
+  <use xlink:href="#glyph1-6" x="659" y="46"/>
+  <use xlink:href="#glyph1-5" x="667" y="46"/>
+  <use xlink:href="#glyph1-5" x="674" y="46"/>
+  <use xlink:href="#glyph1-29" x="681" y="46"/>
+  <use xlink:href="#glyph1-49" x="688" y="46"/>
+  <use xlink:href="#glyph1-38" x="696" y="46"/>
+  <use xlink:href="#glyph1-6" x="700" y="46"/>
+  <use xlink:href="#glyph1-50" x="708" y="46"/>
+  <use xlink:href="#glyph1-39" x="712" y="46"/>
+  <use xlink:href="#glyph1-52" x="716" y="46"/>
+  <use xlink:href="#glyph1-34" x="728" y="46"/>
+  <use xlink:href="#glyph1-11" x="736" y="46"/>
+  <use xlink:href="#glyph1-37" x="739" y="46"/>
+  <use xlink:href="#glyph1-34" x="746" y="46"/>
+  <use xlink:href="#glyph1-39" x="754" y="46"/>
+  <use xlink:href="#glyph1-11" x="758" y="46"/>
+  <use xlink:href="#glyph1-5" x="761" y="46"/>
+  <use xlink:href="#glyph1-39" x="768" y="46"/>
+  <use xlink:href="#glyph1-53" x="772" y="46"/>
+  <use xlink:href="#glyph1-6" x="779" y="46"/>
+  <use xlink:href="#glyph1-20" x="787" y="46"/>
+  <use xlink:href="#glyph1-30" x="792" y="46"/>
+  <use xlink:href="#glyph1-39" x="799" y="46"/>
+  <use xlink:href="#glyph1-34" x="803" y="46"/>
+  <use xlink:href="#glyph1-29" x="811" y="46"/>
+  <use xlink:href="#glyph1-20" x="818" y="46"/>
+  <use xlink:href="#glyph1-8" x="823" y="46"/>
+  <use xlink:href="#glyph1-39" x="831" y="46"/>
+  <use xlink:href="#glyph1-44" x="835" y="46"/>
+  <use xlink:href="#glyph1-2" x="841" y="46"/>
+  <use xlink:href="#glyph1-20" x="850" y="46"/>
+  <use xlink:href="#glyph1-39" x="855" y="46"/>
+  <use xlink:href="#glyph1-34" x="859" y="46"/>
+  <use xlink:href="#glyph1-15" x="867" y="46"/>
+  <use xlink:href="#glyph1-3" x="875" y="46"/>
+  <use xlink:href="#glyph1-29" x="886" y="46"/>
+  <use xlink:href="#glyph1-12" x="893" y="46"/>
+  <use xlink:href="#glyph1-5" x="901" y="46"/>
+  <use xlink:href="#glyph1-39" x="908" y="46"/>
+  <use xlink:href="#glyph1-16" x="912" y="46"/>
+  <use xlink:href="#glyph1-2" x="918" y="46"/>
+  <use xlink:href="#glyph1-39" x="927" y="46"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-3" x="170" y="67"/>
+  <use xlink:href="#glyph1-29" x="181" y="67"/>
+  <use xlink:href="#glyph1-12" x="188" y="67"/>
+  <use xlink:href="#glyph1-29" x="196" y="67"/>
+  <use xlink:href="#glyph1-10" x="203" y="67"/>
+  <use xlink:href="#glyph1-6" x="211" y="67"/>
+  <use xlink:href="#glyph1-54" x="219" y="67"/>
+  <use xlink:href="#glyph1-39" x="222" y="67"/>
+  <use xlink:href="#glyph1-31" x="226" y="67"/>
+  <use xlink:href="#glyph1-2" x="235" y="67"/>
+  <use xlink:href="#glyph1-39" x="244" y="67"/>
+  <use xlink:href="#glyph1-16" x="248" y="67"/>
+  <use xlink:href="#glyph1-34" x="254" y="67"/>
+  <use xlink:href="#glyph1-6" x="262" y="67"/>
+  <use xlink:href="#glyph1-20" x="270" y="67"/>
+  <use xlink:href="#glyph1-6" x="275" y="67"/>
+  <use xlink:href="#glyph1-39" x="283" y="67"/>
+  <use xlink:href="#glyph1-11" x="287" y="67"/>
+  <use xlink:href="#glyph1-5" x="290" y="67"/>
+  <use xlink:href="#glyph1-39" x="297" y="67"/>
+  <use xlink:href="#glyph1-29" x="301" y="67"/>
+  <use xlink:href="#glyph1-38" x="308" y="67"/>
+  <use xlink:href="#glyph1-5" x="312" y="67"/>
+  <use xlink:href="#glyph1-2" x="319" y="67"/>
+  <use xlink:href="#glyph1-39" x="328" y="67"/>
+  <use xlink:href="#glyph1-29" x="332" y="67"/>
+  <use xlink:href="#glyph1-39" x="339" y="67"/>
+  <use xlink:href="#glyph1-5" x="343" y="67"/>
+  <use xlink:href="#glyph1-37" x="350" y="67"/>
+  <use xlink:href="#glyph1-34" x="357" y="67"/>
+  <use xlink:href="#glyph1-6" x="365" y="67"/>
+  <use xlink:href="#glyph1-3" x="373" y="67"/>
+  <use xlink:href="#glyph1-6" x="384" y="67"/>
+  <use xlink:href="#glyph1-39" x="392" y="67"/>
+  <use xlink:href="#glyph1-52" x="396" y="67"/>
+  <use xlink:href="#glyph1-34" x="408" y="67"/>
+  <use xlink:href="#glyph1-6" x="416" y="67"/>
+  <use xlink:href="#glyph1-20" x="424" y="67"/>
+  <use xlink:href="#glyph1-6" x="429" y="67"/>
+  <use xlink:href="#glyph1-49" x="437" y="67"/>
+  <use xlink:href="#glyph1-30" x="445" y="67"/>
+  <use xlink:href="#glyph1-39" x="452" y="67"/>
+  <use xlink:href="#glyph1-29" x="456" y="67"/>
+  <use xlink:href="#glyph1-39" x="463" y="67"/>
+  <use xlink:href="#glyph1-8" x="467" y="67"/>
+  <use xlink:href="#glyph1-6" x="475" y="67"/>
+  <use xlink:href="#glyph1-37" x="483" y="67"/>
+  <use xlink:href="#glyph1-42" x="490" y="67"/>
+  <use xlink:href="#glyph1-39" x="497" y="67"/>
+  <use xlink:href="#glyph1-2" x="501" y="67"/>
+  <use xlink:href="#glyph1-44" x="510" y="67"/>
+  <use xlink:href="#glyph1-39" x="516" y="67"/>
+  <use xlink:href="#glyph1-37" x="520" y="67"/>
+  <use xlink:href="#glyph1-29" x="527" y="67"/>
+  <use xlink:href="#glyph1-20" x="534" y="67"/>
+  <use xlink:href="#glyph1-8" x="539" y="67"/>
+  <use xlink:href="#glyph1-5" x="547" y="67"/>
+  <use xlink:href="#glyph1-39" x="554" y="67"/>
+  <use xlink:href="#glyph1-37" x="558" y="67"/>
+  <use xlink:href="#glyph1-29" x="565" y="67"/>
+  <use xlink:href="#glyph1-12" x="572" y="67"/>
+  <use xlink:href="#glyph1-39" x="580" y="67"/>
+  <use xlink:href="#glyph1-49" x="584" y="67"/>
+  <use xlink:href="#glyph1-6" x="592" y="67"/>
+  <use xlink:href="#glyph1-39" x="600" y="67"/>
+  <use xlink:href="#glyph1-5" x="604" y="67"/>
+  <use xlink:href="#glyph1-34" x="611" y="67"/>
+  <use xlink:href="#glyph1-15" x="619" y="67"/>
+  <use xlink:href="#glyph1-51" x="627" y="67"/>
+  <use xlink:href="#glyph1-6" x="641" y="67"/>
+  <use xlink:href="#glyph1-8" x="649" y="67"/>
+  <use xlink:href="#glyph1-39" x="657" y="67"/>
+  <use xlink:href="#glyph1-29" x="661" y="67"/>
+  <use xlink:href="#glyph1-12" x="668" y="67"/>
+  <use xlink:href="#glyph1-8" x="676" y="67"/>
+  <use xlink:href="#glyph1-39" x="684" y="67"/>
+  <use xlink:href="#glyph1-5" x="688" y="67"/>
+  <use xlink:href="#glyph1-4" x="695" y="67"/>
+  <use xlink:href="#glyph1-38" x="703" y="67"/>
+  <use xlink:href="#glyph1-11" x="707" y="67"/>
+  <use xlink:href="#glyph1-16" x="710" y="67"/>
+  <use xlink:href="#glyph1-39" x="716" y="67"/>
+  <use xlink:href="#glyph1-49" x="720" y="67"/>
+  <use xlink:href="#glyph1-6" x="728" y="67"/>
+  <use xlink:href="#glyph1-16" x="736" y="67"/>
+  <use xlink:href="#glyph1-52" x="742" y="67"/>
+  <use xlink:href="#glyph1-6" x="754" y="67"/>
+  <use xlink:href="#glyph1-6" x="762" y="67"/>
+  <use xlink:href="#glyph1-12" x="770" y="67"/>
+  <use xlink:href="#glyph1-39" x="778" y="67"/>
+  <use xlink:href="#glyph1-30" x="782" y="67"/>
+  <use xlink:href="#glyph1-2" x="789" y="67"/>
+  <use xlink:href="#glyph1-15" x="798" y="67"/>
+  <use xlink:href="#glyph1-54" x="806" y="67"/>
+</g>
+<g clip-path="url(#clip98)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(83.647059%,83.647059%,83.647059%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip99)" clip-rule="nonzero">
+<g clip-path="url(#clip100)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(60.684314%,61.507843%,61.782353%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+</g>
+</svg>
diff --git a/doc/images/shared-secret1.svg b/doc/images/shared-secret1.svg
new file mode 100644
index 0000000..5ab1cf1
--- /dev/null
+++ b/doc/images/shared-secret1.svg
@@ -0,0 +1,4008 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000pt" height="800pt" viewBox="0 0 1000 800" version="1.1">
+<defs>
+<g>
+<symbol overflow="visible" id="glyph0-0">
+<path style="stroke:none;" d="M 0.71875 0 L 6.734375 0 L 6.734375 -7 L 0.59375 -7 L 0.59375 0 Z M 1.59375 -0.859375 L 1.59375 -6 L 5.734375 -6 L 5.734375 -1 L 1.59375 -1 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-1">
+<path style="stroke:none;" d="M 8.90625 -9.578125 C 7.9375 -9.953125 7.171875 -10.125 5.828125 -10.125 C 4.359375 -10.125 2.796875 -9.40625 2.03125 -8.625 C 1.21875 -7.84375 0.671875 -6.546875 0.671875 -5.078125 C 0.671875 -3.640625 1.171875 -2.390625 2.09375 -1.484375 C 2.921875 -0.65625 4.34375 0 5.96875 0 C 7.109375 0 8.125 -0.203125 9.1875 -0.671875 L 8.8125 -1.84375 C 7.921875 -1.515625 7.140625 -1.375 6.328125 -1.375 C 5.53125 -1.375 4.796875 -1.484375 4.1875 -1.8125 C 3.03125 -2.4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-2">
+<path style="stroke:none;" d="M 4.125 -5.78125 C 5.5625 -5.78125 6.1875 -4.828125 6.1875 -3.5 C 6.1875 -2.15625 5.578125 -1.21875 4.125 -1.21875 C 2.6875 -1.21875 2.078125 -2.171875 2.078125 -3.5 C 2.078125 -4.8125 2.703125 -5.78125 4.125 -5.78125 Z M 4.109375 0 C 6.28125 0 7.703125 -1.5625 7.703125 -3.5 C 7.703125 -5.46875 6.328125 -7 4.140625 -7 C 1.96875 -7 0.5625 -5.453125 0.5625 -3.5 C 0.5625 -1.546875 1.9375 0 4.109375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-3">
+<path style="stroke:none;" d="M 9.390625 -4.375 L 9.390625 0 L 10.875 0 L 10.875 -4.65625 C 10.875 -6.015625 9.984375 -7.171875 8.5 -7.171875 C 7.546875 -7.171875 6.71875 -6.703125 6.125 -6.296875 C 5.828125 -6.734375 5.09375 -7.171875 4.265625 -7.171875 C 3.953125 -7.171875 3.625 -7.125 3.28125 -7.015625 C 2.984375 -6.9375 2.5 -6.71875 2.15625 -6.5 L 1.953125 -7 L 0.890625 -7 L 0.890625 0 L 2.375 0 L 2.375 -5.453125 C 2.96875 -5.765625 3.421875 -5.921875 3.875 -5.921875 C 4.875 -5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-4">
+<path style="stroke:none;" d="M 3.84375 -5.71875 C 5.375 -5.71875 6.015625 -4.828125 6.015625 -3.390625 C 6.015625 -1.953125 5.328125 -1 3.828125 -1 C 3.28125 -1 2.75 -1.109375 2.375 -1.265625 L 2.375 -5.375 C 2.828125 -5.609375 3.125 -5.71875 3.84375 -5.71875 Z M 2.375 3.875 L 2.375 -0.078125 C 2.796875 0.09375 3.375 0.21875 3.9375 0.21875 C 4.90625 0.21875 5.8125 -0.15625 6.453125 -0.796875 C 7.125 -1.40625 7.53125 -2.375 7.53125 -3.484375 C 7.53125 -4.8125 6.96875 -5.84375 5.984375 -6 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-5">
+<path style="stroke:none;" d="M 3.265625 -1.109375 C 2.40625 -1.109375 1.5625 -1.28125 0.640625 -1.625 L 0.640625 -0.3125 C 1.421875 0.015625 2.28125 0.15625 3.375 0.15625 C 4.453125 0.15625 5.328125 -0.203125 5.8125 -0.828125 C 6.0625 -1.140625 6.21875 -1.609375 6.21875 -1.953125 C 6.21875 -2.375 6.078125 -2.78125 5.765625 -3.09375 C 5.5 -3.375 5.171875 -3.625 4.203125 -3.953125 L 3.125 -4.328125 C 2.796875 -4.421875 2.671875 -4.5 2.5625 -4.5625 C 2.3125 -4.71875 2.1875 -4.734375 2.1875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-6">
+<path style="stroke:none;" d="M 3.875 -7.125 C 2.859375 -7.125 1.96875 -6.71875 1.390625 -5.984375 C 0.859375 -5.28125 0.5625 -4.40625 0.5625 -3.359375 C 0.5625 -1.25 1.9375 0.140625 4.234375 0.140625 C 5.03125 0.140625 5.796875 0 6.640625 -0.28125 L 6.640625 -1.484375 C 5.8125 -1.25 5.171875 -1.109375 4.5625 -1.109375 C 3.65625 -1.109375 3.046875 -1.296875 2.640625 -1.6875 C 2.234375 -2.09375 2 -2.515625 2 -3 L 6.78125 -3 L 6.921875 -3.234375 L 6.921875 -3.90625 C 6.921875 -5.796875 5.7 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-7">
+<path style="stroke:none;" d="M 8.8125 -0.109375 L 5.296875 -10 L 3.609375 -10 L 0.0625 0 L 1.59375 0 L 2.5625 -2.65625 L 6.25 -2.65625 L 7.21875 0 L 8.859375 0 Z M 4.28125 -8.59375 L 5.8125 -4 L 3 -4 L 4.546875 -8.59375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-8">
+<path style="stroke:none;" d="M 4.234375 -1.125 C 2.671875 -1.125 2.078125 -2.046875 2.078125 -3.53125 C 2.078125 -4.984375 2.671875 -5.9375 4.25 -5.9375 C 4.8125 -5.9375 5.328125 -5.859375 5.703125 -5.6875 L 5.703125 -1.5 C 5.234375 -1.25 4.953125 -1.125 4.234375 -1.125 Z M 3.96875 0.140625 C 4.671875 0.140625 5.4375 -0.125 5.921875 -0.4375 L 6.109375 0 L 7.1875 0 L 7.1875 -9.984375 L 5.703125 -9.984375 L 5.703125 -6.90625 C 5.28125 -7.09375 4.703125 -7.203125 4.125 -7.203125 C 3.15625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-9">
+<path style="stroke:none;" d="M 6.3125 -7.484375 C 6.3125 -6.453125 5.609375 -6.0625 3.8125 -6.0625 L 2.59375 -6.0625 L 2.59375 -8.640625 L 4.40625 -8.640625 C 5.640625 -8.640625 6.3125 -8.4375 6.3125 -7.484375 Z M 7.125 -3.03125 C 7.125 -1.71875 6.078125 -1.328125 4.703125 -1.328125 L 2.59375 -1.328125 L 2.59375 -4.765625 L 4.234375 -4.765625 C 5.609375 -4.765625 7.125 -4.640625 7.125 -3.03125 Z M 6.296875 -5.4375 C 7.125 -5.84375 7.765625 -6.796875 7.765625 -7.53125 C 7.765625 -8.20312 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-10">
+<path style="stroke:none;" d="M 5.6875 -0.46875 L 5.6875 -0.265625 C 5.6875 0.203125 5.6875 0.578125 5.65625 0.8125 C 5.515625 2.171875 4.828125 2.84375 3.34375 2.84375 C 2.828125 2.84375 2.265625 2.703125 1.578125 2.4375 L 1.171875 3.53125 C 1.921875 3.859375 2.796875 4.0625 3.484375 4.0625 C 4.578125 4.0625 5.578125 3.6875 6.15625 3.140625 C 6.859375 2.453125 7.171875 1.640625 7.171875 0.21875 L 7.171875 -7 L 6.078125 -7 L 5.953125 -6.625 L 5.6875 -6.75 C 5.09375 -7 4.546875 -7.140625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-11">
+<path style="stroke:none;" d="M 0.890625 -6.859375 L 0.890625 0 L 2.375 0 L 2.375 -7 L 0.890625 -7 Z M 0.890625 -9.859375 L 0.890625 -8.5 L 2.375 -8.5 L 2.375 -10 L 0.890625 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-12">
+<path style="stroke:none;" d="M 5.578125 -4.375 L 5.578125 0 L 7.0625 0 L 7.0625 -4.65625 C 7.0625 -6.09375 6.140625 -7.15625 4.609375 -7.15625 C 3.875 -7.15625 2.90625 -6.875 2.171875 -6.484375 L 1.953125 -7 L 0.890625 -7 L 0.890625 0 L 2.375 0 L 2.375 -5.4375 C 2.953125 -5.703125 3.625 -5.875 4.1875 -5.875 C 5.328125 -5.875 5.578125 -5.484375 5.578125 -4.375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-13">
+<path style="stroke:none;" d="M 4.734375 -8.75 C 5.15625 -8.75 5.46875 -8.65625 5.828125 -8.390625 C 6.734375 -7.71875 7.171875 -6.6875 7.171875 -5.09375 C 7.171875 -3.328125 6.71875 -2.21875 5.75 -1.5625 C 5.40625 -1.3125 5.109375 -1.21875 4.6875 -1.21875 C 4.265625 -1.21875 3.953125 -1.3125 3.59375 -1.53125 C 2.59375 -2.15625 2.125 -3.328125 2.125 -5.1875 C 2.125 -7.109375 2.859375 -8.75 4.734375 -8.75 Z M 0.65625 -5.125 C 0.65625 -2.84375 1.5 -1.0625 3.03125 -0.265625 C 3.515625 -0.01 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-14">
+<path style="stroke:none;" d="M 1.109375 -9.859375 L 1.109375 0 L 2.59375 0 L 2.59375 -8.1875 L 2.359375 -8.109375 L 5.515625 -2.78125 L 6.875 -2.78125 L 10.03125 -8.109375 L 9.796875 -8.1875 L 9.796875 0 L 11.28125 0 L 11.28125 -10 L 9.46875 -10 L 6.21875 -4.21875 L 3.03125 -10 L 1.109375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-15">
+<path style="stroke:none;" d="M 2.375 -2.578125 L 2.375 -6.984375 L 0.890625 -6.984375 L 0.890625 -2.296875 C 0.890625 -0.875 1.828125 0.1875 3.359375 0.1875 C 4.109375 0.1875 5.046875 -0.09375 5.796875 -0.484375 L 6.015625 0 L 7.0625 0 L 7.0625 -6.984375 L 5.578125 -6.984375 L 5.578125 -1.53125 C 5 -1.28125 4.34375 -1.09375 3.78125 -1.09375 C 2.640625 -1.09375 2.375 -1.484375 2.375 -2.578125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-16">
+<path style="stroke:none;" d="M 3.453125 0 C 3.953125 0 4.46875 -0.078125 5.140625 -0.296875 L 5.140625 -1.4375 C 4.625 -1.3125 4.234375 -1.265625 3.8125 -1.265625 C 2.90625 -1.265625 2.828125 -1.578125 2.828125 -2.421875 L 2.828125 -5.71875 L 5.140625 -5.71875 L 5.140625 -7 L 2.828125 -7 L 2.828125 -8.8125 L 1.34375 -8.75 L 1.34375 -7 L 0.15625 -7 L 0.15625 -5.71875 L 1.34375 -5.71875 L 1.34375 -2.34375 C 1.34375 -0.96875 1.984375 0 3.453125 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-17">
+<path style="stroke:none;" d="M 7.96875 -10.34375 L 7.96875 -6 L 2.59375 -6 L 2.59375 -10.484375 L 1.109375 -10.484375 L 1.109375 0 L 2.59375 0 L 2.59375 -4.625 L 7.96875 -4.625 L 7.96875 0 L 9.46875 0 L 9.46875 -10.484375 L 7.96875 -10.484375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-18">
+<path style="stroke:none;" d="M 4.109375 -7 C 3.40625 -7 2.671875 -6.71875 2.1875 -6.34375 L 1.984375 -7 L 0.890625 -7 L 0.890625 0 L 2.375 0 L 2.375 -5.359375 C 2.84375 -5.546875 3.28125 -5.671875 3.75 -5.671875 C 4.203125 -5.796875 4.5625 -5.703125 4.921875 -5.5625 L 5.203125 -5.5625 L 5.203125 -6.953125 C 4.765625 -6.953125 4.4375 -7 4.109375 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-19">
+<path style="stroke:none;" d="M 1.9375 -8.109375 C 2.90625 -8.46875 3.40625 -8.71875 4.4375 -8.71875 C 5.96875 -8.71875 6.25 -7.890625 6.25 -7.09375 C 6.25 -6.109375 5.359375 -5.109375 3.921875 -3.65625 L 1.296875 -1.09375 L 1.296875 0 L 7.890625 0 L 7.890625 -1.328125 L 3.203125 -1.328125 L 3.296875 -1.109375 L 5.125 -2.875 C 6.390625 -4.15625 7.796875 -5.734375 7.796875 -7.234375 C 7.796875 -8.859375 6.296875 -10.109375 4.59375 -10.109375 C 3.203125 -10.109375 2.578125 -9.796875 1.3593 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-20">
+<path style="stroke:none;" d="M 8.21875 -10 L 1.078125 -10 L 1.078125 -8.65625 L 6.484375 -8.65625 L 2.328125 0 L 3.96875 0 L 8.34375 -9.09375 L 8.34375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-21">
+<path style="stroke:none;" d="M 6.671875 -2.8125 C 6.671875 -2.21875 6.4375 -1.859375 5.921875 -1.484375 C 5.390625 -1.109375 4.921875 -1.046875 4.28125 -1.046875 C 3.484375 -1.046875 2.484375 -1.34375 1.53125 -1.671875 L 1.09375 -0.390625 C 2.15625 0 3.171875 0.34375 4.359375 0.34375 C 5.34375 0.34375 6.28125 0.125 7.03125 -0.515625 C 7.78125 -1.140625 8.15625 -1.921875 8.15625 -2.9375 C 8.15625 -4.28125 7.046875 -5.265625 6.015625 -5.546875 L 6.015625 -5.28125 C 6.78125 -5.671875 7.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-22">
+<path style="stroke:none;" d="M 5.46875 -10 L 4.078125 -10 L 1.71875 -9.015625 L 2.265625 -7.859375 L 4.171875 -8.59375 L 4.171875 -1.328125 L 1.640625 -1.328125 L 1.640625 0 L 7.96875 0 L 7.96875 -1.328125 L 5.609375 -1.328125 L 5.609375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-23">
+<path style="stroke:none;" d="M 6.828125 -10 L 5 -10 L 0.625 -3 L 0.625 -2 L 5.53125 -2 L 5.53125 0 L 6.96875 0 L 6.96875 -2 L 8.71875 -2 L 8.71875 -3.328125 L 6.96875 -3.328125 L 6.96875 -10 Z M 5.671875 -3.328125 L 2.453125 -3.328125 L 5.765625 -8.625 L 5.53125 -8.71875 L 5.53125 -3.328125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-24">
+<path style="stroke:none;" d="M 4.59375 -8.859375 C 4.953125 -8.859375 5.265625 -8.8125 5.546875 -8.703125 C 6.03125 -8.5 6.328125 -8.3125 6.328125 -7.609375 C 6.328125 -6.796875 5.515625 -6.390625 4.96875 -6.109375 C 4.59375 -6.203125 4.359375 -6.28125 4.21875 -6.328125 C 3.25 -6.65625 2.96875 -7.03125 2.96875 -7.625 C 2.96875 -8.484375 3.6875 -8.859375 4.59375 -8.859375 Z M 4.6875 -1.3125 C 3.3125 -1.3125 2.453125 -1.9375 2.453125 -3 C 2.453125 -4.078125 3.484375 -4.703125 4.53125 -5 C [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-25">
+<path style="stroke:none;" d="M 4.015625 -5 C 5.09375 -5 5.78125 -4.96875 6.390625 -4.484375 C 6.8125 -4.140625 6.984375 -3.734375 6.984375 -3.15625 C 6.984375 -2.453125 6.59375 -2.109375 6.109375 -1.796875 C 5.515625 -1.421875 4.75 -1.40625 4.046875 -1.40625 C 3.140625 -1.40625 2.46875 -1.625 1.671875 -1.84375 L 1.265625 -0.515625 C 2.3125 -0.140625 3.375 0.015625 4.125 0.015625 C 4.609375 0.015625 5.109375 -0.015625 5.640625 -0.140625 C 6.234375 -0.25 6.828125 -0.5625 7.28125 -0.921875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-26">
+<path style="stroke:none;" d="M 2.46875 0.34375 C 6.1875 0.34375 8.40625 -1.6875 8.40625 -5.640625 C 8.40625 -7.859375 7.375 -10.015625 4.65625 -10.015625 C 2.421875 -10.015625 1 -8.296875 1 -6.734375 C 1 -4.78125 2.703125 -3.640625 4.375 -3.609375 C 5.421875 -3.609375 6.578125 -3.96875 6.859375 -4.109375 C 6.84375 -4.03125 6.75 -3.71875 6.6875 -3.515625 C 5.984375 -1.6875 4.984375 -1.015625 2.234375 -1.015625 L 2.34375 0.34375 Z M 4.625 -8.671875 C 6.390625 -8.671875 6.96875 -7.5 6.9687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-27">
+<path style="stroke:none;" d="M 6.90625 -10.015625 C 3.1875 -10.015625 0.96875 -7.953125 0.96875 -4 C 0.96875 -1.796875 2 0.34375 4.71875 0.34375 C 6.953125 0.34375 8.375 -1.359375 8.375 -2.921875 C 8.375 -4.828125 6.671875 -5.953125 5 -5.984375 C 3.953125 -5.984375 2.796875 -5.625 2.53125 -5.484375 C 2.53125 -5.546875 2.625 -5.875 2.703125 -6.0625 C 3.40625 -7.953125 4.390625 -8.65625 7.140625 -8.65625 L 7.03125 -10.015625 Z M 4.75 -1 C 2.984375 -1 2.421875 -2.15625 2.421875 -3.734375 C [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-28">
+<path style="stroke:none;" d="M 1.109375 -9.859375 L 1.109375 0 L 2.59375 0 L 2.59375 -8.296875 L 2.359375 -8.203125 L 7.9375 0 L 9.6875 0 L 9.6875 -10 L 8.1875 -10 L 8.1875 -1.703125 L 8.421875 -1.796875 L 2.84375 -10 L 1.109375 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-29">
+<path style="stroke:none;" d="M 7 -7 L 5.65625 -7 L 3.640625 -1.59375 L 3.59375 -1.21875 L 3.859375 -1.21875 L 3.78125 -1.59375 L 1.78125 -7 L 0.203125 -7 L 2.953125 0 L 4.4375 0 L 7.171875 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-30">
+<path style="stroke:none;" d="M 3.90625 -1.125 C 3.1875 -1.125 2.90625 -1.25 2.453125 -1.5 L 2.453125 -5.6875 C 2.828125 -5.84375 3.34375 -5.9375 3.890625 -5.9375 C 5.4375 -5.9375 6.0625 -5 6.0625 -3.53125 C 6.0625 -2.046875 5.46875 -1.125 3.90625 -1.125 Z M 4.171875 0.140625 C 6.34375 0.140625 7.578125 -1.46875 7.578125 -3.4375 C 7.578125 -4.5625 7.203125 -5.53125 6.53125 -6.203125 C 5.890625 -6.828125 4.984375 -7.203125 4.015625 -7.203125 C 3.4375 -7.203125 2.875 -7.09375 2.453125 -6.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-31">
+<path style="stroke:none;" d="M 4 -1.3125 C 3.296875 -1.3125 2.34375 -1.546875 1.078125 -1.984375 L 0.5625 -0.59375 C 1.765625 -0.140625 2.515625 0.140625 3.828125 0.140625 C 5.390625 0.140625 6.640625 -0.40625 7.296875 -1.265625 C 7.65625 -1.734375 7.890625 -2.34375 7.890625 -2.875 C 7.890625 -3.609375 7.578125 -4.265625 7 -4.671875 C 6.046875 -5.3125 4.359375 -5.734375 3.21875 -6.28125 C 2.625 -6.5625 2.375 -6.90625 2.375 -7.421875 C 2.375 -8.359375 3.125 -8.859375 4.546875 -8.859375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-32">
+<path style="stroke:none;" d="M 0 -9.859375 L 0 -8.65625 L 3.390625 -8.65625 L 3.390625 0 L 4.875 0 L 4.875 -8.65625 L 8.28125 -8.65625 L 8.28125 -10 L 0 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-33">
+<path style="stroke:none;" d="M 0 -9.859375 L 3.25 0 L 4.71875 0 L 7.265625 -8.265625 L 6.984375 -8.265625 L 9.71875 0 L 11.203125 0 L 14.328125 -10 L 12.859375 -10 L 10.328125 -1.671875 L 10.59375 -1.671875 L 7.90625 -10 L 6.484375 -10 L 3.875 -1.671875 L 4.15625 -1.671875 L 1.546875 -10 L -0.03125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-34">
+<path style="stroke:none;" d="M 5.640625 -4.4375 L 5.640625 0 L 7.125 0 L 7.125 -4.703125 C 7.125 -6.125 6.15625 -7.21875 4.671875 -7.21875 C 3.9375 -7.21875 3.0625 -6.953125 2.453125 -6.640625 L 2.453125 -9.765625 L 0.953125 -9.765625 L 0.953125 0 L 2.453125 0 L 2.453125 -5.484375 C 3.03125 -5.75 3.65625 -5.9375 4.21875 -5.9375 C 5.375 -5.9375 5.640625 -5.53125 5.640625 -4.4375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-35">
+<path style="stroke:none;" d="M 2.453125 -8.65625 L 7.265625 -8.65625 L 7.265625 -10 L 1.109375 -10 L 1.109375 0 L 2.59375 0 L 2.59375 -4.65625 L 6.828125 -4.65625 L 6.828125 -6 L 2.59375 -6 L 2.59375 -8.65625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-36">
+<path style="stroke:none;" d="M 3.40625 -5.828125 C 4.296875 -5.828125 4.6875 -5.6875 4.890625 -5.171875 C 4.984375 -4.96875 5.03125 -4.640625 5.03125 -4.171875 L 5.03125 -4.234375 C 4.078125 -4.21875 3.1875 -4.109375 2.484375 -3.9375 C 1.5625 -3.6875 0.625 -2.890625 0.625 -1.828125 C 0.625 -0.75 1.796875 0.1875 3.03125 0.1875 C 3.828125 0.1875 4.640625 -0.15625 5.15625 -0.578125 L 5.390625 0 L 6.515625 0 L 6.515625 -4.515625 C 6.515625 -5.5625 6.21875 -6.171875 5.46875 -6.671875 C 5.078 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-37">
+<path style="stroke:none;" d="M 1.328125 -9.859375 L 1.328125 0 L 2.8125 0 L 2.8125 -10 L 1.328125 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-38">
+<path style="stroke:none;" d="M 4.109375 0.15625 L 4.1875 0.15625 C 4.859375 0.15625 5.5 0.015625 6.328125 -0.328125 L 5.96875 -1.359375 C 5.4375 -1.171875 4.9375 -1.078125 4.546875 -1.078125 C 4.421875 -1.078125 4.328125 -1.078125 4.21875 -1.09375 C 2.65625 -1.28125 2.046875 -1.96875 2.046875 -3.578125 C 2.046875 -5.125 2.734375 -5.875 4.421875 -5.875 C 4.84375 -5.875 5.359375 -5.78125 5.984375 -5.578125 L 6.359375 -6.640625 C 5.5625 -7 4.9375 -7.140625 4.359375 -7.140625 C 3.140625 -7. [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-39">
+<path style="stroke:none;" d="M 3.140625 -1.203125 C 2.21875 -1.203125 2.328125 -1.53125 2.328125 -2.0625 L 2.328125 -10 L 0.890625 -10 L 0.890625 -1.65625 C 0.90625 -0.65625 1.625 0.15625 2.546875 0.15625 C 3.234375 0.15625 3.71875 -0.109375 4.109375 -0.25 L 4.109375 -1.40625 C 3.640625 -1.265625 3.40625 -1.203125 3.140625 -1.203125 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-40">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph0-41">
+<path style="stroke:none;" d="M 0.953125 -9.84375 L 0.953125 0 L 2.453125 0 L 2.453125 -9.984375 L 0.953125 -9.984375 Z M 5.46875 -6.96875 L 2.25 -3.875 L 5.5625 0 L 7.375 0 L 4.046875 -3.859375 L 7.046875 -6.78125 L 6.953125 -7.015625 L 5.5 -7.015625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-42">
+<path style="stroke:none;" d="M 5.703125 0 C 7.75 0 9.046875 -0.828125 9.734375 -1.484375 L 9.734375 -5.265625 L 5.421875 -5.265625 L 5.421875 -4 L 8.3125 -4 L 8.3125 -1.90625 C 7.78125 -1.53125 6.9375 -1.328125 6.15625 -1.328125 C 5.3125 -1.328125 4.796875 -1.453125 4.171875 -1.75 C 3.046875 -2.296875 2.265625 -3.296875 2.265625 -4.859375 C 2.265625 -6.390625 2.78125 -7.453125 3.984375 -8.234375 C 4.59375 -8.625 5.1875 -8.78125 5.9375 -8.78125 C 6.796875 -8.78125 7.875 -8.484375 8.73437 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-43">
+<path style="stroke:none;" d="M 4.109375 -8.78125 C 4.4375 -8.78125 4.8125 -8.71875 5.359375 -8.5625 L 5.609375 -9.6875 C 4.953125 -9.875 4.359375 -10 3.75 -10 C 2.75 -10 1.9375 -9.578125 1.515625 -8.84375 C 1.359375 -8.609375 1.25 -8.09375 1.25 -7.53125 L 1.25 -7 L 0.21875 -7 L 0.21875 -5.796875 L 1.265625 -5.796875 L 1.265625 0 L 2.75 0 L 2.75 -5.796875 L 5.078125 -5.796875 L 5.078125 -7 L 2.734375 -7 L 2.734375 -7.484375 C 2.734375 -7.671875 2.75 -7.84375 2.765625 -7.9375 C 2.859375 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-44">
+<path style="stroke:none;" d="M 8.515625 -8.75 C 8.84375 -9.015625 9.21875 -8.953125 9.78125 -8.8125 L 10.015625 -9.953125 C 9.359375 -9.875 8.75 -10 8.15625 -10 C 7.15625 -10 6.34375 -9.578125 5.921875 -8.84375 C 5.765625 -8.59375 5.65625 -8.09375 5.65625 -7.53125 L 5.65625 -7 L 2.703125 -7 L 2.703125 -7.484375 C 2.703125 -7.671875 2.71875 -7.8125 2.734375 -7.90625 C 2.828125 -8.453125 3.28125 -8.75 4.109375 -8.75 C 4.4375 -9.015625 4.8125 -8.953125 5.359375 -8.8125 L 5.609375 -9.953125 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-45">
+<path style="stroke:none;" d="M 5.84375 -6.859375 L 3.671875 -0.984375 L 3.9375 -0.984375 L 1.71875 -7 L 0.171875 -7 L 3.078125 0.578125 L 1.671875 4.15625 L 3.171875 4.15625 L 7.328125 -7 L 5.890625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-46">
+<path style="stroke:none;" d="M 1.296875 -0.921875 L 0.109375 2 L 1.65625 2 L 2.90625 -1.046875 L 1.34375 -1.046875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-47">
+<path style="stroke:none;" d="M 0.65625 -10.859375 L 0.65625 -7.65625 L 2.234375 -7.65625 L 2.234375 -11 L 0.65625 -11 Z M 3.4375 -10.859375 L 3.4375 -7.65625 L 5.03125 -7.65625 L 5.03125 -11 L 3.4375 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-48">
+<path style="stroke:none;" d="M 1.15625 -1.640625 L 1.15625 0 L 2.921875 0 L 2.921875 -1.765625 L 1.15625 -1.765625 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-49">
+<path style="stroke:none;" d="M 0.25 -6.859375 L 2.703125 0 L 4.203125 0 L 6.078125 -5.359375 L 5.796875 -5.359375 L 7.625 0 L 9.171875 0 L 11.703125 -7 L 10.1875 -7 L 8.296875 -1.46875 L 8.25 -1.21875 L 8.515625 -1.21875 L 8.484375 -1.46875 L 6.671875 -7 L 5.3125 -7 L 3.421875 -1.46875 L 3.375 -1.21875 L 3.65625 -1.21875 L 3.609375 -1.46875 L 1.71875 -7 L 0.203125 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-50">
+<path style="stroke:none;" d="M 3.703125 -9.859375 L 0.109375 1.109375 L 1.59375 1.109375 L 5.234375 -10 L 3.75 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-51">
+<path style="stroke:none;" d="M 8.859375 -8.75 C 9.453125 -8.75 10.0625 -8.71875 10.375 -8.640625 L 10.375 -1.765625 C 10.375 -0.8125 11.109375 0 12.03125 0 C 12.71875 0 13.203125 -0.25 13.59375 -0.390625 L 13.59375 -1.546875 C 13.125 -1.421875 12.875 -1.359375 12.59375 -1.359375 C 11.6875 -1.359375 11.8125 -1.65625 11.8125 -2.15625 L 11.8125 -8.734375 C 11.8125 -9.5625 10.203125 -10 8.484375 -10 C 7.5 -10 6.671875 -9.578125 6.25 -8.84375 C 6.109375 -8.59375 6 -8.09375 6 -7.53125 L 6 -7  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-52">
+<path style="stroke:none;" d="M 2.953125 -4.234375 C 2.953125 -5.28125 3.125 -6.359375 3.4375 -7.484375 C 3.765625 -8.59375 4.203125 -9.59375 4.90625 -10.765625 L 3.75 -11.390625 C 2.5625 -9.46875 1.421875 -6.96875 1.421875 -4.25 C 1.421875 -3.125 1.640625 -1.953125 2.03125 -0.734375 C 2.421875 0.484375 3.03125 1.765625 3.765625 2.96875 L 4.90625 2.234375 C 3.765625 0.375 2.953125 -1.734375 2.953125 -4.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-53">
+<path style="stroke:none;" d="M 5.578125 -10 C 3.5 -10 2.03125 -8.921875 1.296875 -7.578125 C 0.890625 -6.875 0.671875 -5.9375 0.671875 -5 C 0.671875 -4.046875 0.890625 -3.109375 1.296875 -2.40625 C 2.03125 -1.0625 3.5 0 5.578125 0 C 7.671875 0 9.140625 -1.0625 9.875 -2.40625 C 10.28125 -3.109375 10.5 -4.046875 10.5 -5 C 10.5 -5.9375 10.28125 -6.875 9.875 -7.578125 C 9.140625 -8.921875 7.671875 -10 5.578125 -10 Z M 5.578125 -1.328125 C 3.921875 -1.328125 3.21875 -2.0625 2.703125 -3.04687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-54">
+<path style="stroke:none;" d="M 3.875 -4.25 C 3.875 -5.375 3.671875 -6.578125 3.265625 -7.78125 C 2.875 -8.984375 2.28125 -10.21875 1.5625 -11.390625 L 0.390625 -10.78125 C 1.109375 -9.59375 1.53125 -8.59375 1.859375 -7.484375 C 2.171875 -6.359375 2.34375 -5.296875 2.34375 -4.25 C 2.34375 -2.046875 1.75 0 0.390625 2.234375 L 1.53125 2.96875 C 2.28125 1.765625 2.859375 0.484375 3.265625 -0.734375 C 3.671875 -1.953125 3.875 -3.125 3.875 -4.25 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-55">
+<path style="stroke:none;" d="M 0.65625 -10.859375 L 0.65625 -7.65625 L 2.234375 -7.65625 L 2.234375 -11 L 0.65625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-56">
+<path style="stroke:none;" d="M 4.09375 -8.75 C 4.390625 -8.75 4.765625 -8.734375 4.859375 -8.71875 L 4.921875 -8.25 L 6.296875 -7.984375 L 6.453125 -9.328125 C 5.8125 -9.71875 5.171875 -10 3.703125 -10 C 2.703125 -10 1.90625 -9.5625 1.484375 -8.84375 C 1.34375 -8.59375 1.21875 -8.09375 1.21875 -7.53125 L 1.21875 -7 L 0.1875 -7 L 0.1875 -5.796875 L 1.21875 -5.796875 L 1.234375 0 L 2.703125 0 L 2.6875 -5.796875 L 4.84375 -5.796875 L 4.84375 0 L 6.328125 0 L 6.328125 -7 L 2.6875 -7 L 2.687 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-57">
+<path style="stroke:none;" d="M 0.671875 -5.109375 L 0.671875 -4 L 5.1875 -4 L 5.1875 -5.25 L 0.671875 -5.25 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-58">
+<path style="stroke:none;" d="M 2.59375 -1.203125 L 2.59375 -8.640625 L 4.734375 -8.640625 C 6.5 -8.640625 7.1875 -8 7.703125 -6.96875 C 7.984375 -6.390625 8.140625 -5.734375 8.140625 -4.984375 C 8.140625 -4.234375 8.03125 -3.546875 7.734375 -2.96875 C 7.21875 -1.9375 6.484375 -1.328125 4.734375 -1.328125 L 2.59375 -1.328125 Z M 4.828125 0 C 6.90625 0 8.375 -0.9375 9.109375 -2.3125 C 9.515625 -3.046875 9.734375 -4.015625 9.734375 -4.984375 C 9.734375 -5.953125 9.515625 -6.90625 9.109375  [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-59">
+<path style="stroke:none;" d="M 0.875 1.359375 C 0.875 2.21875 0.625 2.6875 -0.3125 3.125 L 0.234375 4.234375 C 0.953125 3.984375 1.703125 3.46875 1.984375 2.859375 C 2.25 2.3125 2.3125 2.15625 2.3125 1.15625 L 2.3125 -7 L 0.875 -7 Z M 0.875 -9.859375 L 0.875 -8.5 L 2.3125 -8.5 L 2.3125 -10 L 0.875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-60">
+<path style="stroke:none;" d="M 1.234375 0 L 7.328125 0 L 7.328125 -1.328125 L 2.59375 -1.328125 L 2.59375 -4.65625 L 6.9375 -4.65625 L 6.9375 -6 L 2.59375 -6 L 2.59375 -8.65625 L 7.328125 -8.65625 L 7.328125 -10 L 1.109375 -10 L 1.109375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-61">
+<path style="stroke:none;" d="M 1.109375 -9.859375 L 1.109375 0 L 2.59375 0 L 2.59375 -10 L 1.109375 -10 Z M 6.84375 -9.953125 L 2.4375 -5.125 L 7.109375 0 L 9.03125 0 L 4.34375 -5.21875 L 8.765625 -10 L 6.875 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-62">
+<path style="stroke:none;" d="M 1.875 -7 L 0.203125 -7 L 2.859375 -3.46875 L 0.28125 0 L 1.9375 0 L 3.6875 -2.375 L 5.453125 0 L 7.234375 0 L 4.609375 -3.484375 L 7.28125 -7 L 5.59375 -7 L 3.765625 -4.5625 L 1.9375 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-63">
+<path style="stroke:none;" d="M 3.765625 -5.328125 C 3.390625 -5.328125 2.9375 -5.34375 2.59375 -5.375 L 2.59375 -8.65625 L 3.78125 -8.65625 C 4.4375 -8.65625 4.859375 -8.640625 5.0625 -8.609375 C 6.0625 -8.515625 6.625 -8.0625 6.625 -7.046875 C 6.625 -5.375 5.421875 -5.328125 3.765625 -5.328125 Z M 8.125 -6.9375 C 8.125 -8.28125 7.28125 -9.40625 6.09375 -9.796875 C 5.84375 -9.875 5.5625 -10 4.4375 -10 L 1.109375 -10 L 1.109375 0 L 2.59375 0 L 2.59375 -4.03125 C 2.890625 -4 3.296875 -4 3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph0-64">
+<path style="stroke:none;" d="M 1.15625 -1.640625 L 1.15625 0 L 2.921875 0 L 2.921875 -1.765625 L 1.15625 -1.765625 Z M 1.15625 -6.859375 L 1.15625 -5.21875 L 2.921875 -5.21875 L 2.921875 -7 L 1.15625 -7 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph0-65">
+<path style="stroke:none;" d="M 5.71875 -5.4375 L 5.71875 -1.25 C 5.328125 -1.09375 4.8125 -1 4.265625 -1 C 2.734375 -1 2.078125 -1.9375 2.078125 -3.375 C 2.078125 -4.828125 2.703125 -5.71875 4.25 -5.71875 C 4.96875 -5.71875 5.25 -5.609375 5.71875 -5.375 Z M 4.140625 0.234375 C 4.71875 0.234375 5.296875 0.109375 5.71875 -0.0625 L 5.71875 3.875 L 7.203125 3.875 L 7.203125 -6.84375 L 6.125 -6.84375 L 5.9375 -6.40625 C 5.4375 -6.734375 4.6875 -7 3.984375 -7 C 3.28125 -7 2.59375 -6.796875 2. [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-0">
+<path style="stroke:none;" d="M 1.609375 -12 L 10.390625 -12 L 10.390625 0 L 1.609375 0 Z M 2.203125 -11 L 2.203125 -1 L 9.796875 -1 L 9.796875 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-1">
+<path style="stroke:none;" d="M 1 0 L 1 -12 L 2.484375 -12 L 2.484375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-2">
+<path style="stroke:none;" d="M 6.5 -1.5625 C 6.238281 -1 5.890625 -0.597656 5.453125 -0.359375 C 5.015625 -0.117188 4.472656 0 3.828125 0 C 2.742188 0 1.945312 -0.367188 1.4375 -1.109375 C 0.925781 -1.847656 0.671875 -2.960938 0.671875 -4.453125 C 0.671875 -7.484375 1.722656 -9 3.828125 -9 C 4.472656 -9 5.015625 -8.878906 5.453125 -8.640625 C 5.890625 -8.398438 6.238281 -8.015625 6.5 -7.484375 L 6.515625 -7.484375 L 6.5 -8.4375 L 6.5 -12 L 7.90625 -12 L 7.90625 -1.796875 C 7.90625 -0.89 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-3">
+<path style="stroke:none;" d="M 2.15625 -3.921875 C 2.15625 -3.003906 2.359375 -2.296875 2.765625 -1.796875 C 3.171875 -1.304688 3.769531 -1.0625 4.5625 -1.0625 C 5.175781 -1.0625 5.671875 -1.148438 6.046875 -1.328125 C 6.421875 -1.503906 6.675781 -1.726562 6.8125 -2 L 8.046875 -1.703125 C 7.535156 -0.566406 6.375 0 4.5625 0 C 3.300781 0 2.335938 -0.378906 1.671875 -1.140625 C 1.015625 -1.910156 0.6875 -3.050781 0.6875 -4.5625 C 0.6875 -5.988281 1.015625 -7.082031 1.671875 -7.84375 C 2.3 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-4">
+<path style="stroke:none;" d="M 5.65625 0 L 5.65625 -5.625 C 5.65625 -6.21875 5.609375 -6.675781 5.515625 -7 C 5.429688 -7.320312 5.289062 -7.550781 5.09375 -7.6875 C 4.894531 -7.832031 4.601562 -7.90625 4.21875 -7.90625 C 3.65625 -7.90625 3.210938 -7.660156 2.890625 -7.171875 C 2.566406 -6.679688 2.40625 -6.003906 2.40625 -5.140625 L 2.40625 0 L 1 0 L 1 -7.078125 C 1 -8.128906 0.984375 -8.769531 0.953125 -9 L 2.28125 -9 C 2.289062 -8.96875 2.296875 -8.882812 2.296875 -8.75 C 2.304688 -8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-5">
+<path style="stroke:none;" d="M 3.875 -0.1875 C 3.457031 -0.0625 3.035156 0 2.609375 0 C 1.597656 0 1.09375 -0.671875 1.09375 -2.015625 L 1.09375 -7.96875 L 0.125 -7.96875 L 0.125 -9 L 1.15625 -9 L 1.5625 -11 L 2.5 -11 L 2.5 -9 L 3.734375 -9 L 3.734375 -7.96875 L 2.5 -7.96875 L 2.5 -2.296875 C 2.5 -1.859375 2.550781 -1.550781 2.65625 -1.375 C 2.769531 -1.207031 2.957031 -1.125 3.21875 -1.125 C 3.375 -1.125 3.59375 -1.160156 3.875 -1.234375 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-6">
+<path style="stroke:none;" d="M 1.203125 -10.65625 L 1.203125 -12 L 2.609375 -12 L 2.609375 -10.65625 Z M 1.203125 0 L 1.203125 -9 L 2.609375 -9 L 2.609375 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-7">
+<path style="stroke:none;" d="M 1.3125 3 C 0.96875 3 0.679688 2.96875 0.453125 2.90625 L 0.453125 1.859375 C 0.617188 1.890625 0.800781 1.90625 1 1.90625 C 1.738281 1.90625 2.328125 1.351562 2.765625 0.25 L 2.875 -0.046875 L 0.03125 -9 L 1.53125 -9 L 2.96875 -3.953125 C 2.988281 -3.878906 3.007812 -3.785156 3.03125 -3.671875 C 3.0625 -3.566406 3.15625 -3.203125 3.3125 -2.578125 C 3.476562 -1.953125 3.566406 -1.601562 3.578125 -1.53125 L 4.015625 -3.1875 L 5.484375 -9 L 6.96875 -9 L 4.203 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-8">
+<path style="stroke:none;" d="M 9.453125 0 L 8.140625 -3.828125 L 2.90625 -3.828125 L 1.578125 0 L 0.03125 0 L 4.6875 -12 L 6.375 -12 L 10.96875 0 Z M 5.515625 -10.875 L 5.4375 -10.640625 C 5.300781 -10.179688 5.101562 -9.585938 4.84375 -8.859375 L 3.375 -5 L 7.671875 -5 L 6.1875 -8.875 C 6.039062 -9.257812 5.890625 -9.695312 5.734375 -10.1875 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-9">
+<path style="stroke:none;" d="M 2.140625 -4.53125 C 2.140625 -3.375 2.316406 -2.515625 2.671875 -1.953125 C 3.023438 -1.390625 3.5625 -1.109375 4.28125 -1.109375 C 4.78125 -1.109375 5.195312 -1.179688 5.53125 -1.328125 C 5.863281 -1.472656 6.070312 -1.695312 6.15625 -2 L 7.578125 -1.9375 C 7.460938 -1.34375 7.113281 -0.867188 6.53125 -0.515625 C 5.945312 -0.171875 5.207031 0 4.3125 0 C 3.132812 0 2.234375 -0.378906 1.609375 -1.140625 C 0.984375 -1.910156 0.671875 -3.035156 0.671875 -4.51 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-10">
+<path style="stroke:none;" d="M 4.296875 0 L 2.625 0 L 0.046875 -9 L 1.546875 -9 L 3.03125 -3.09375 C 3.082031 -2.875 3.222656 -2.210938 3.453125 -1.109375 L 3.671875 -2.09375 L 3.921875 -3.078125 L 5.453125 -9 L 6.953125 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-11">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph1-12">
+<path style="stroke:none;" d="M 1.328125 0 L 1.328125 -12 L 2.828125 -12 L 2.828125 -1.21875 L 8.46875 -1.21875 L 8.46875 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph1-13">
+<path style="stroke:none;" d="M 8.328125 -4.515625 C 8.328125 -2.992188 7.992188 -1.859375 7.328125 -1.109375 C 6.671875 -0.367188 5.71875 0 4.46875 0 C 3.21875 0 2.269531 -0.382812 1.625 -1.15625 C 0.988281 -1.925781 0.671875 -3.046875 0.671875 -4.515625 C 0.671875 -7.503906 1.953125 -9 4.515625 -9 C 5.816406 -9 6.773438 -8.632812 7.390625 -7.90625 C 8.015625 -7.175781 8.328125 -6.046875 8.328125 -4.515625 Z M 6.84375 -4.515625 C 6.84375 -5.710938 6.664062 -6.582031 6.3125 -7.125 C 5.95 [...]
+</symbol>
+<symbol overflow="visible" id="glyph1-14">
+<path style="stroke:none;" d="M 4.328125 3 C 3.390625 3 2.644531 2.816406 2.09375 2.453125 C 1.539062 2.085938 1.1875 1.570312 1.03125 0.90625 L 2.4375 0.703125 C 2.53125 1.085938 2.738281 1.382812 3.0625 1.59375 C 3.394531 1.8125 3.828125 1.921875 4.359375 1.921875 C 5.785156 1.921875 6.5 1.144531 6.5 -0.40625 L 6.5 -1.703125 L 6.484375 -1.703125 C 6.210938 -1.140625 5.84375 -0.710938 5.375 -0.421875 C 4.90625 -0.140625 4.359375 0 3.734375 0 C 2.679688 0 1.90625 -0.351562 1.40625 -1.062 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-0">
+<path style="stroke:none;" d="M 1 2 L 1 -11 L 9 -11 L 9 2 Z M 2 1 L 8 1 L 8 -10 L 2 -10 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-1">
+<path style="stroke:none;" d="M 2 -11 L 4 -11 L 4 0 L 2 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-2">
+<path style="stroke:none;" d="M 9 -5.4375 L 9 0 L 7 0 L 7 -4.171875 C 7 -4.941406 6.976562 -5.472656 6.9375 -5.765625 C 6.894531 -6.054688 6.820312 -6.269531 6.71875 -6.40625 C 6.582031 -6.59375 6.394531 -6.738281 6.15625 -6.84375 C 5.914062 -6.945312 5.648438 -7 5.359375 -7 C 4.617188 -7 4.039062 -6.765625 3.625 -6.296875 C 3.207031 -5.835938 3 -5.203125 3 -4.390625 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -7 C 3.425781 -7.34375 3.875 -7.59375 4.34375 -7.75 C 4.820312 -7.914062 5.347656 -8 5.92187 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-3">
+<path style="stroke:none;" d="M 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.273438 7 -3.019531 7 -4 C 7 -4.976562 6.828125 -5.722656 6.484375 -6.234375 C 6.148438 -6.742188 5.660156 -7 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 Z M 3 -7 C 3.351562 -7.34375 3.742188 -7.59375 4.171875 -7.75 C 4.597656 -7.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-4">
+<path style="stroke:none;" d="M 5.015625 -7 C 4.359375 -7 3.859375 -6.738281 3.515625 -6.21875 C 3.171875 -5.707031 3 -4.96875 3 -4 C 3 -3.03125 3.171875 -2.285156 3.515625 -1.765625 C 3.859375 -1.253906 4.359375 -1 5.015625 -1 C 5.660156 -1 6.148438 -1.253906 6.484375 -1.765625 C 6.828125 -2.285156 7 -3.03125 7 -4 C 7 -4.96875 6.828125 -5.707031 6.484375 -6.21875 C 6.148438 -6.738281 5.660156 -7 5.015625 -7 Z M 5.015625 -8 C 6.265625 -8 7.238281 -7.644531 7.9375 -6.9375 C 8.644531 -6.22 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-5">
+<path style="stroke:none;" d="M 3.984375 -4.09375 L 1 -8 L 3.515625 -8 L 5.5 -4.65625 L 7.484375 -8 L 10 -8 L 7.015625 -4.109375 L 10 0 L 7.53125 0 L 5.515625 -3.421875 L 3.46875 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-6">
+<path style="stroke:none;" d="M 6.5 -10 C 5.382812 -10 4.519531 -9.601562 3.90625 -8.8125 C 3.300781 -8.03125 3 -6.925781 3 -5.5 C 3 -4.070312 3.300781 -2.960938 3.90625 -2.171875 C 4.519531 -1.390625 5.382812 -1 6.5 -1 C 7.613281 -1 8.472656 -1.390625 9.078125 -2.171875 C 9.691406 -2.960938 10 -4.070312 10 -5.5 C 10 -6.925781 9.691406 -8.03125 9.078125 -8.8125 C 8.472656 -9.601562 7.613281 -10 6.5 -10 Z M 6.5 -11 C 8.21875 -11 9.5625 -10.507812 10.53125 -9.53125 C 11.507812 -8.5625 12 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-7">
+<path style="stroke:none;" d="M 1 -2.546875 L 1 -8 L 3 -8 L 3 -7.109375 C 3 -6.628906 2.992188 -6.019531 2.984375 -5.28125 C 2.984375 -4.550781 2.984375 -4.066406 2.984375 -3.828125 C 2.984375 -3.109375 3.003906 -2.585938 3.046875 -2.265625 C 3.097656 -1.953125 3.175781 -1.722656 3.28125 -1.578125 C 3.425781 -1.390625 3.613281 -1.242188 3.84375 -1.140625 C 4.082031 -1.046875 4.351562 -1 4.65625 -1 C 5.382812 -1 5.957031 -1.226562 6.375 -1.6875 C 6.789062 -2.144531 7 -2.78125 7 -3.59375 L [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-8">
+<path style="stroke:none;" d="M 4 -11 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 -2.3125 C 4 -1.800781 4.054688 -1.453125 4.171875 -1.265625 C 4.296875 -1.085938 4.539062 -1 4.90625 -1 L 6 -1 L 6 0 L 4.1875 0 C 3.394531 0 2.832031 -0.171875 2.5 -0.515625 C 2.164062 -0.867188 2 -1.46875 2 -2.3125 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-9">
+<path style="stroke:none;" d="M 3 -10 L 3 -1 L 4.328125 -1 C 5.835938 -1 6.992188 -1.382812 7.796875 -2.15625 C 8.597656 -2.925781 9 -4.046875 9 -5.515625 C 9 -6.972656 8.597656 -8.082031 7.796875 -8.84375 C 7.003906 -9.613281 5.847656 -10 4.328125 -10 Z M 1 -11 L 3.203125 -11 C 4.972656 -11 6.289062 -10.878906 7.15625 -10.640625 C 8.019531 -10.398438 8.765625 -10 9.390625 -9.4375 C 9.929688 -8.9375 10.332031 -8.359375 10.59375 -7.703125 C 10.863281 -7.054688 11 -6.328125 11 -5.515625 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-10">
+<path style="stroke:none;" d="M 7 -7 C 6.738281 -7 6.472656 -7 6.203125 -7 C 5.941406 -7 5.679688 -7 5.421875 -7 C 4.640625 -7 4.039062 -6.773438 3.625 -6.328125 C 3.207031 -5.890625 3 -5.257812 3 -4.4375 L 3 0 L 1 0 L 1 -8 L 3 -8 L 3 -6 C 3.382812 -6.695312 3.828125 -7.203125 4.328125 -7.515625 C 4.835938 -7.835938 5.441406 -8 6.140625 -8 C 6.242188 -8 6.351562 -8 6.46875 -8 C 6.59375 -8 6.765625 -8 6.984375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-11">
+<path style="stroke:none;" d="M 5.1875 -4 C 4.457031 -4 3.910156 -3.867188 3.546875 -3.609375 C 3.179688 -3.359375 3 -2.976562 3 -2.46875 C 3 -2.007812 3.144531 -1.648438 3.4375 -1.390625 C 3.738281 -1.128906 4.148438 -1 4.671875 -1 C 5.328125 -1 5.878906 -1.242188 6.328125 -1.734375 C 6.773438 -2.222656 7 -2.835938 7 -3.578125 L 7 -4 Z M 9 -4.640625 L 9 0 L 7 0 L 7 -1 C 6.625 -0.65625 6.203125 -0.398438 5.734375 -0.234375 C 5.273438 -0.078125 4.707031 0 4.03125 0 C 3.132812 0 2.40625 -0 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-12">
+<path style="stroke:none;" d="M 6 -11 L 6 -10 L 4.890625 -10 C 4.554688 -10 4.320312 -9.90625 4.1875 -9.71875 C 4.0625 -9.539062 4 -9.226562 4 -8.78125 L 4 -8 L 6 -8 L 6 -7 L 4 -7 L 4 0 L 2 0 L 2 -7 L 1 -7 L 1 -8 L 2 -8 L 2 -8.78125 C 2 -9.539062 2.191406 -10.097656 2.578125 -10.453125 C 2.972656 -10.816406 3.578125 -11 4.390625 -11 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-13">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.382812 -6.332031 6.789062 -6.582031 6.21875 -6.75 C 5.65625 -6.914062 5.117188 -7 4.609375 -7 C 4.066406 -6.976562 3.660156 -6.878906 3.390625 -6.703125 C 3.117188 -6.535156 2.984375 -6.273438 2.984375 -5.921875 C 2.984375 -5.640625 3.085938 -5.425781 3.296875 -5.28125 C 3.503906 -5.132812 3.878906 -5.03125 4.421875 -4.96875 L 4.9375 -4.90625 C 6.132812 -4.75 6.941406 -4.5 7.359375 -4.15625 C 7.785156 -3.8125 8 -3.257812 8 -2.5 C 8 -1.66406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-14">
+<path style="stroke:none;" d="M 10 -0.390625 C 9.5 -0.265625 8.976562 -0.164062 8.4375 -0.09375 C 7.894531 -0.03125 7.328125 0 6.734375 0 C 4.972656 0 3.578125 -0.492188 2.546875 -1.484375 C 1.515625 -2.472656 1 -3.8125 1 -5.5 C 1 -7.1875 1.515625 -8.523438 2.546875 -9.515625 C 3.578125 -10.503906 4.972656 -11 6.734375 -11 C 7.328125 -11 7.894531 -10.960938 8.4375 -10.890625 C 8.976562 -10.828125 9.5 -10.734375 10 -10.609375 L 10 -9 C 9.425781 -9.34375 8.859375 -9.59375 8.296875 -9.75 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-15">
+<path style="stroke:none;" d="M 8 -7 L 8 -6 C 7.601562 -6.34375 7.207031 -6.59375 6.8125 -6.75 C 6.414062 -6.914062 6.003906 -7 5.578125 -7 C 4.765625 -7 4.128906 -6.734375 3.671875 -6.203125 C 3.222656 -5.679688 3 -4.945312 3 -4 C 3 -3.050781 3.222656 -2.3125 3.671875 -1.78125 C 4.128906 -1.257812 4.765625 -1 5.578125 -1 C 6.023438 -1 6.453125 -1.082031 6.859375 -1.25 C 7.273438 -1.414062 7.65625 -1.664062 8 -2 L 8 -1 C 7.601562 -0.664062 7.203125 -0.414062 6.796875 -0.25 C 6.390625 -0. [...]
+</symbol>
+<symbol overflow="visible" id="glyph2-16">
+<path style="stroke:none;" d="M 1 -11 L 3 -11 L 3 0 L 1 0 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-17">
+<path style="stroke:none;" d="M 1 -8 L 3 -8 L 3 0 L 1 0 Z M 1 -11 L 3 -11 L 3 -9 L 1 -9 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph2-18">
+<path style="stroke:none;" d="M 9 -4.46875 L 9 -4 L 3 -4 C 3.0625 -3 3.289062 -2.25 3.6875 -1.75 C 4.09375 -1.25 4.648438 -1 5.359375 -1 C 5.941406 -1 6.535156 -1.082031 7.140625 -1.25 C 7.742188 -1.414062 8.363281 -1.664062 9 -2 L 9 -1 C 8.40625 -0.664062 7.8125 -0.414062 7.21875 -0.25 C 6.632812 -0.0820312 6.050781 0 5.46875 0 C 4.050781 0 2.953125 -0.347656 2.171875 -1.046875 C 1.390625 -1.753906 1 -2.738281 1 -4 C 1 -5.238281 1.363281 -6.210938 2.09375 -6.921875 C 2.832031 -7.640625  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-0">
+<path style="stroke:none;" d="M 1.203125 -9 L 7.796875 -9 L 7.796875 0 L 1.203125 0 Z M 1.640625 -8 L 1.640625 -1 L 7.34375 -1 L 7.34375 -8 Z "/>
+</symbol>
+<symbol overflow="visible" id="glyph3-1">
+<path style="stroke:none;" d="M 9.671875 0 L 7.609375 0 L 6.375 -5.328125 C 6.226562 -5.953125 6.101562 -6.609375 6 -7.296875 C 5.894531 -6.722656 5.8125 -6.285156 5.75 -5.984375 C 5.6875 -5.691406 5.226562 -3.695312 4.375 0 L 2.328125 0 L 0.015625 -9 L 1.765625 -9 L 3.109375 -3.078125 L 3.421875 -1.640625 C 3.535156 -2.242188 3.648438 -2.816406 3.765625 -3.359375 C 3.878906 -3.910156 4.304688 -5.789062 5.046875 -9 L 6.984375 -9 L 8.140625 -4.109375 C 8.222656 -3.742188 8.375 -2.921875 8 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-2">
+<path style="stroke:none;" d="M 2.421875 -5.625 C 2.628906 -6.101562 2.890625 -6.453125 3.203125 -6.671875 C 3.515625 -6.890625 3.890625 -7 4.328125 -7 C 4.960938 -7 5.445312 -6.773438 5.78125 -6.328125 C 6.125 -5.878906 6.296875 -5.222656 6.296875 -4.359375 L 6.296875 0 L 4.65625 0 L 4.65625 -3.921875 C 4.65625 -5.148438 4.316406 -5.765625 3.640625 -5.765625 C 3.273438 -5.765625 2.984375 -5.578125 2.765625 -5.203125 C 2.546875 -4.828125 2.4375 -4.34375 2.4375 -3.75 L 2.4375 0 L 0.796875 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-3">
+<path style="stroke:none;" d="M 3.59375 0 C 2.59375 0 1.820312 -0.296875 1.28125 -0.890625 C 0.75 -1.492188 0.484375 -2.375 0.484375 -3.53125 C 0.484375 -4.644531 0.753906 -5.5 1.296875 -6.09375 C 1.847656 -6.695312 2.625 -7 3.625 -7 C 4.570312 -7 5.296875 -6.660156 5.796875 -5.984375 C 6.304688 -5.304688 6.5625 -4.316406 6.5625 -3.015625 L 6.5625 -2.96875 L 2.21875 -2.96875 C 2.21875 -2.351562 2.34375 -1.890625 2.59375 -1.578125 C 2.851562 -1.265625 3.21875 -1.109375 3.6875 -1.109375 C  [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-4">
+<path style="stroke:none;" d="M 4.65625 0 L 4.65625 -3.921875 C 4.65625 -5.148438 4.316406 -5.765625 3.640625 -5.765625 C 3.273438 -5.765625 2.984375 -5.578125 2.765625 -5.203125 C 2.546875 -4.828125 2.4375 -4.34375 2.4375 -3.75 L 2.4375 0 L 0.796875 0 L 0.796875 -5.4375 C 0.796875 -5.8125 0.789062 -6.117188 0.78125 -6.359375 C 0.769531 -6.597656 0.757812 -6.8125 0.75 -7 L 2.3125 -7 C 2.320312 -6.914062 2.335938 -6.695312 2.359375 -6.34375 C 2.378906 -5.988281 2.390625 -5.742188 2.390625 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-5">
+<path style="stroke:none;" d="M 4.296875 -1.359375 C 5.203125 -1.359375 5.832031 -1.90625 6.1875 -3 L 7.703125 -2.421875 C 7.398438 -1.597656 6.957031 -0.988281 6.375 -0.59375 C 5.800781 -0.195312 5.109375 0 4.296875 0 C 3.078125 0 2.128906 -0.394531 1.453125 -1.1875 C 0.785156 -1.988281 0.453125 -3.101562 0.453125 -4.53125 C 0.453125 -5.96875 0.773438 -7.070312 1.421875 -7.84375 C 2.066406 -8.613281 3 -9 4.21875 -9 C 5.113281 -9 5.84375 -8.78125 6.40625 -8.34375 C 6.96875 -7.914062 7.36 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-6">
+<path style="stroke:none;" d="M 2.453125 0 C 1.796875 0 1.285156 -0.164062 0.921875 -0.5 C 0.554688 -0.84375 0.375 -1.320312 0.375 -1.9375 C 0.375 -2.601562 0.601562 -3.109375 1.0625 -3.453125 C 1.519531 -3.804688 2.179688 -3.988281 3.046875 -4 L 4.515625 -4.03125 L 4.515625 -4.421875 C 4.515625 -4.929688 4.429688 -5.3125 4.265625 -5.5625 C 4.097656 -5.8125 3.828125 -5.9375 3.453125 -5.9375 C 3.109375 -5.9375 2.851562 -5.867188 2.6875 -5.734375 C 2.53125 -5.597656 2.429688 -5.367188 2.39 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-7">
+<path style="stroke:none;" d="M 0.890625 0 L 0.890625 -5.359375 C 0.890625 -5.742188 0.882812 -6.0625 0.875 -6.3125 C 0.863281 -6.570312 0.851562 -6.800781 0.84375 -7 L 2.40625 -7 C 2.414062 -6.925781 2.429688 -6.691406 2.453125 -6.296875 C 2.472656 -5.898438 2.484375 -5.640625 2.484375 -5.515625 L 2.515625 -5.515625 C 2.691406 -5.960938 2.847656 -6.273438 2.984375 -6.453125 C 3.128906 -6.640625 3.300781 -6.773438 3.5 -6.859375 C 3.695312 -6.953125 3.941406 -7 4.234375 -7 C 4.472656 -7 4 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-8">
+<path style="stroke:none;" d="M 4.65625 0 C 4.632812 -0.0625 4.613281 -0.222656 4.59375 -0.484375 C 4.570312 -0.753906 4.5625 -0.976562 4.5625 -1.15625 L 4.546875 -1.15625 C 4.210938 -0.382812 3.578125 0 2.640625 0 C 1.941406 0 1.40625 -0.304688 1.03125 -0.921875 C 0.65625 -1.535156 0.46875 -2.394531 0.46875 -3.5 C 0.46875 -4.613281 0.664062 -5.472656 1.0625 -6.078125 C 1.457031 -6.691406 2.019531 -7 2.75 -7 C 3.175781 -7 3.539062 -6.90625 3.84375 -6.71875 C 4.144531 -6.53125 4.378906 -6 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-9">
+<path style="stroke:none;" d="M 6.484375 -2.09375 C 6.484375 -1.4375 6.21875 -0.921875 5.6875 -0.546875 C 5.164062 -0.179688 4.4375 0 3.5 0 C 2.59375 0 1.894531 -0.140625 1.40625 -0.421875 C 0.914062 -0.710938 0.59375 -1.164062 0.4375 -1.78125 L 1.890625 -2 C 1.984375 -1.664062 2.140625 -1.429688 2.359375 -1.296875 C 2.578125 -1.160156 2.960938 -1.09375 3.515625 -1.09375 C 4.015625 -1.09375 4.378906 -1.160156 4.609375 -1.296875 C 4.847656 -1.429688 4.96875 -1.644531 4.96875 -1.9375 C 4.9 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-10">
+<path style="stroke:none;" d="M 7.53125 -2.640625 C 7.53125 -1.785156 7.226562 -1.128906 6.625 -0.671875 C 6.03125 -0.222656 5.15625 0 4 0 C 2.9375 0 2.101562 -0.144531 1.5 -0.4375 C 0.894531 -0.738281 0.507812 -1.1875 0.34375 -1.78125 L 2.015625 -2 C 2.128906 -1.75 2.347656 -1.566406 2.671875 -1.453125 C 3.003906 -1.347656 3.460938 -1.296875 4.046875 -1.296875 C 5.253906 -1.296875 5.859375 -1.707031 5.859375 -2.53125 C 5.859375 -2.78125 5.785156 -2.984375 5.640625 -3.140625 C 5.503906 - [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-11">
+<path style="stroke:none;" d=""/>
+</symbol>
+<symbol overflow="visible" id="glyph3-12">
+<path style="stroke:none;" d="M 3.640625 0 C 2.628906 0 1.847656 -0.300781 1.296875 -0.90625 C 0.753906 -1.519531 0.484375 -2.375 0.484375 -3.46875 C 0.484375 -4.582031 0.757812 -5.445312 1.3125 -6.0625 C 1.863281 -6.6875 2.648438 -7 3.671875 -7 C 4.453125 -7 5.097656 -6.828125 5.609375 -6.484375 C 6.117188 -6.140625 6.441406 -5.671875 6.578125 -5.078125 L 4.921875 -5 C 4.867188 -5.269531 4.738281 -5.484375 4.53125 -5.640625 C 4.320312 -5.796875 4.023438 -5.875 3.640625 -5.875 C 2.691406 [...]
+</symbol>
+<symbol overflow="visible" id="glyph3-13">
+<path style="stroke:none;" d="M 2.453125 0 C 1.972656 0 1.601562 -0.144531 1.34375 -0.4375 C 1.082031 -0.726562 0.953125 -1.171875 0.953125 -1.765625 L 0.953125 -5.890625 L 0.140625 -5.890625 L 0.140625 -7 L 1.03125 -7 L 1.546875 -8 L 2.578125 -8 L 2.578125 -7 L 3.78125 -7 L 3.78125 -5.890625 L 2.578125 -5.890625 L 2.578125 -2.15625 C 2.578125 -1.8125 2.632812 -1.554688 2.75 -1.390625 C 2.863281 -1.222656 3.046875 -1.140625 3.296875 -1.140625 C 3.421875 -1.140625 3.601562 -1.164062 3.843 [...]
+</symbol>
+</g>
+<clipPath id="clip1">
+  <path d="M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+</clipPath>
+<image id="image10810" width="2" height="24" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAABmJLR0QA/wD/AP+gvaeTAAAAQ0lEQVQImb3NsQ3AIBAEwT3rq3MJFOgSQEIyRG7rzwExDr35aNXv9oB9GAsk9qmPdgIE9gVkIJUPsdQPi1EnJgMIIF+pNyDcX1+/XAAAAABJRU5ErkJggg=="/>
+<pattern id="pattern0" patternUnits="userSpaceOnUse" width="2" height="24"  patternTransform="matrix(1,0,0,1,146.5,388)">
+  <use xlink:href="#image10810"/>
+</pattern>
+<clipPath id="clip2">
+  <path d="M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+</clipPath>
+<clipPath id="clip3">
+  <path d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</clipPath>
+<clipPath id="clip4">
+  <path d="M 24 47 C 24 45.894531 24.894531 45 26 45 L 120 45 C 121.105469 45 122 45.449219 122 46 L 122 72 C 122 73.105469 121.105469 74 120 74 L 26 74 C 24.894531 74 24 73.550781 24 73 Z "/>
+</clipPath>
+<linearGradient id="linear0" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,59.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<image id="image10812" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABEUlEQVQ4jdXQv0rDUBQG8O9cKr0JdGsM2TJkCoXuuggFH6RTxYfoU4ibTxEoFEpc9E4ODa2TQ7YQI00hXnqhmONU6HgJLn779zt/KE1T2ZhmCsY9gBh2eQfhYSAHT73GNFNv6M3Go3HlSOfNpn0wh+/1Zj2rviogWSRbrfWSmSeW08HME631MlkkWwEgdl3XENHKFiCileu6BkAsiAgAatvyWWoiwgnYdQB258C+A7AnIojTOh2AGgD+7Af/GZB9WWdZFjGzY9tkZifLskj2Zd3zhp4qP8u5Ukoz86sNoJS6Ov4c5/6lr8gYc5vn+V1RFqO2bSMbQAjxEfjBJgzD [...]
+<pattern id="pattern2" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip5">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10815" clip-path="url(#clip5)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern2);stroke:none;"/>
+</g>
+<pattern id="pattern1" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,23,44)">
+<use xlink:href="#surface10815"/>
+</pattern>
+<pattern id="pattern4" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip7">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10820" clip-path="url(#clip7)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern4);stroke:none;"/>
+</g>
+<clipPath id="clip6">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface10818" clip-path="url(#clip6)">
+<use xlink:href="#surface10820" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern3" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(9.4,0,0,1,26,44)">
+<use xlink:href="#surface10818"/>
+</pattern>
+<pattern id="pattern6" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip9">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10825" clip-path="url(#clip9)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern6);stroke:none;"/>
+</g>
+<clipPath id="clip8">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10823" clip-path="url(#clip8)">
+<use xlink:href="#surface10825" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern5" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,120,44)">
+<use xlink:href="#surface10823"/>
+</pattern>
+<pattern id="pattern8" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip11">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10830" clip-path="url(#clip11)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern8);stroke:none;"/>
+</g>
+<clipPath id="clip10">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10828" clip-path="url(#clip10)">
+<use xlink:href="#surface10830" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern7" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,23,47)">
+<use xlink:href="#surface10828"/>
+</pattern>
+<pattern id="pattern10" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip13">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10835" clip-path="url(#clip13)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern10);stroke:none;"/>
+</g>
+<clipPath id="clip12">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10833" clip-path="url(#clip12)">
+<use xlink:href="#surface10835" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern9" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,120,47)">
+<use xlink:href="#surface10833"/>
+</pattern>
+<pattern id="pattern12" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip15">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10840" clip-path="url(#clip15)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern12);stroke:none;"/>
+</g>
+<clipPath id="clip14">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10838" clip-path="url(#clip14)">
+<use xlink:href="#surface10840" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern11" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,23,72)">
+<use xlink:href="#surface10838"/>
+</pattern>
+<pattern id="pattern14" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip17">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10845" clip-path="url(#clip17)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern14);stroke:none;"/>
+</g>
+<clipPath id="clip16">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface10843" clip-path="url(#clip16)">
+<use xlink:href="#surface10845" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern13" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(9.4,0,0,1,26,72)">
+<use xlink:href="#surface10843"/>
+</pattern>
+<pattern id="pattern16" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip19">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10850" clip-path="url(#clip19)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern16);stroke:none;"/>
+</g>
+<clipPath id="clip18">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10848" clip-path="url(#clip18)">
+<use xlink:href="#surface10850" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern15" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,120,72)">
+<use xlink:href="#surface10848"/>
+</pattern>
+<clipPath id="clip20">
+  <path d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</clipPath>
+<clipPath id="clip21">
+  <path d="M 24 129 C 24 127.894531 24.894531 127 26 127 L 120 127 C 121.105469 127 122 127.449219 122 128 L 122 154 C 122 155.105469 121.105469 156 120 156 L 26 156 C 24.894531 156 24 155.550781 24 155 Z "/>
+</clipPath>
+<linearGradient id="linear1" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,73,141.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<pattern id="pattern18" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip22">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10854" clip-path="url(#clip22)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern18);stroke:none;"/>
+</g>
+<pattern id="pattern17" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,23,126)">
+<use xlink:href="#surface10854"/>
+</pattern>
+<pattern id="pattern20" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip24">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10859" clip-path="url(#clip24)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern20);stroke:none;"/>
+</g>
+<clipPath id="clip23">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface10857" clip-path="url(#clip23)">
+<use xlink:href="#surface10859" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern19" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(9.4,0,0,1,26,126)">
+<use xlink:href="#surface10857"/>
+</pattern>
+<pattern id="pattern22" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip26">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10864" clip-path="url(#clip26)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern22);stroke:none;"/>
+</g>
+<clipPath id="clip25">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10862" clip-path="url(#clip25)">
+<use xlink:href="#surface10864" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern21" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,120,126)">
+<use xlink:href="#surface10862"/>
+</pattern>
+<pattern id="pattern24" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip28">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10869" clip-path="url(#clip28)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern24);stroke:none;"/>
+</g>
+<clipPath id="clip27">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10867" clip-path="url(#clip27)">
+<use xlink:href="#surface10869" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern23" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,23,129)">
+<use xlink:href="#surface10867"/>
+</pattern>
+<pattern id="pattern26" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip30">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10874" clip-path="url(#clip30)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern26);stroke:none;"/>
+</g>
+<clipPath id="clip29">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10872" clip-path="url(#clip29)">
+<use xlink:href="#surface10874" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern25" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,120,129)">
+<use xlink:href="#surface10872"/>
+</pattern>
+<pattern id="pattern28" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip32">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10879" clip-path="url(#clip32)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern28);stroke:none;"/>
+</g>
+<clipPath id="clip31">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10877" clip-path="url(#clip31)">
+<use xlink:href="#surface10879" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern27" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,23,154)">
+<use xlink:href="#surface10877"/>
+</pattern>
+<pattern id="pattern30" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip34">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10884" clip-path="url(#clip34)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern30);stroke:none;"/>
+</g>
+<clipPath id="clip33">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface10882" clip-path="url(#clip33)">
+<use xlink:href="#surface10884" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern29" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(9.4,0,0,1,26,154)">
+<use xlink:href="#surface10882"/>
+</pattern>
+<pattern id="pattern32" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip36">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10889" clip-path="url(#clip36)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern32);stroke:none;"/>
+</g>
+<clipPath id="clip35">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10887" clip-path="url(#clip35)">
+<use xlink:href="#surface10889" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern31" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,120,154)">
+<use xlink:href="#surface10887"/>
+</pattern>
+<clipPath id="clip37">
+  <path d="M 0 183 L 145 183 L 145 205 L 0 205 Z "/>
+</clipPath>
+<image id="image10890" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip38">
+  <path d="M 0 205 L 145 205 L 145 206 L 0 206 Z "/>
+</clipPath>
+<clipPath id="clip39">
+  <path d="M 0 206 L 145 206 L 145 228 L 0 228 Z "/>
+</clipPath>
+<image id="image10891" width="1" height="1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="/>
+<clipPath id="clip40">
+  <path d="M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+</clipPath>
+<clipPath id="clip41">
+  <path d="M 0 18 L 145 18 L 145 19 L 0 19 Z "/>
+</clipPath>
+<clipPath id="clip42">
+  <path d="M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+</clipPath>
+<clipPath id="clip43">
+  <path d="M 0 37 L 145 37 L 145 38 L 0 38 Z "/>
+</clipPath>
+<clipPath id="clip44">
+  <path d="M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+</clipPath>
+<clipPath id="clip45">
+  <path d="M 0 100 L 145 100 L 145 101 L 0 101 Z "/>
+</clipPath>
+<clipPath id="clip46">
+  <path d="M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+</clipPath>
+<clipPath id="clip47">
+  <path d="M 0 119 L 145 119 L 145 120 L 0 120 Z "/>
+</clipPath>
+<clipPath id="clip48">
+  <path d="M 0 164 L 145 164 L 145 182 L 0 182 Z "/>
+</clipPath>
+<clipPath id="clip49">
+  <path d="M 0 182 L 145 182 L 145 183 L 0 183 Z "/>
+</clipPath>
+<clipPath id="clip50">
+  <path d="M 987 0 L 1000 0 L 1000 800 L 987 800 Z "/>
+</clipPath>
+<clipPath id="clip51">
+  <path d="M 990 309 L 997 309 L 997 797 L 990 797 Z "/>
+</clipPath>
+<clipPath id="clip52">
+  <path d="M 990 312.5 C 990 310.566406 991.566406 309 993.5 309 C 995.433594 309 997 310.566406 997 312.5 L 997 793.5 C 997 795.433594 995.433594 797 993.5 797 C 991.566406 797 990 795.433594 990 793.5 Z "/>
+</clipPath>
+<clipPath id="clip53">
+  <path d="M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+</clipPath>
+<clipPath id="clip54">
+  <path d="M 177 759 L 256 759 L 256 788 L 177 788 Z "/>
+</clipPath>
+<clipPath id="clip55">
+  <path d="M 177 761 C 177 759.894531 177.894531 759 179 759 L 254 759 C 255.105469 759 256 759.449219 256 760 L 256 786 C 256 787.105469 255.105469 788 254 788 L 179 788 C 177.894531 788 177 787.550781 177 787 Z "/>
+</clipPath>
+<linearGradient id="linear2" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,216.5,773.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<pattern id="pattern34" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip56">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10895" clip-path="url(#clip56)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern34);stroke:none;"/>
+</g>
+<pattern id="pattern33" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,176,758)">
+<use xlink:href="#surface10895"/>
+</pattern>
+<pattern id="pattern36" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip58">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10900" clip-path="url(#clip58)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern36);stroke:none;"/>
+</g>
+<clipPath id="clip57">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface10898" clip-path="url(#clip57)">
+<use xlink:href="#surface10900" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern35" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(7.5,0,0,1,179,758)">
+<use xlink:href="#surface10898"/>
+</pattern>
+<pattern id="pattern38" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip60">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10905" clip-path="url(#clip60)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern38);stroke:none;"/>
+</g>
+<clipPath id="clip59">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10903" clip-path="url(#clip59)">
+<use xlink:href="#surface10905" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern37" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,254,758)">
+<use xlink:href="#surface10903"/>
+</pattern>
+<pattern id="pattern40" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip62">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10910" clip-path="url(#clip62)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern40);stroke:none;"/>
+</g>
+<clipPath id="clip61">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10908" clip-path="url(#clip61)">
+<use xlink:href="#surface10910" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern39" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,176,761)">
+<use xlink:href="#surface10908"/>
+</pattern>
+<pattern id="pattern42" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip64">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10915" clip-path="url(#clip64)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern42);stroke:none;"/>
+</g>
+<clipPath id="clip63">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10913" clip-path="url(#clip63)">
+<use xlink:href="#surface10915" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern41" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,254,761)">
+<use xlink:href="#surface10913"/>
+</pattern>
+<pattern id="pattern44" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip66">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10920" clip-path="url(#clip66)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern44);stroke:none;"/>
+</g>
+<clipPath id="clip65">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10918" clip-path="url(#clip65)">
+<use xlink:href="#surface10920" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern43" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,176,786)">
+<use xlink:href="#surface10918"/>
+</pattern>
+<pattern id="pattern46" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip68">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10925" clip-path="url(#clip68)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern46);stroke:none;"/>
+</g>
+<clipPath id="clip67">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface10923" clip-path="url(#clip67)">
+<use xlink:href="#surface10925" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern45" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(7.5,0,0,1,179,786)">
+<use xlink:href="#surface10923"/>
+</pattern>
+<pattern id="pattern48" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip70">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10930" clip-path="url(#clip70)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern48);stroke:none;"/>
+</g>
+<clipPath id="clip69">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10928" clip-path="url(#clip69)">
+<use xlink:href="#surface10930" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern47" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,254,786)">
+<use xlink:href="#surface10928"/>
+</pattern>
+<clipPath id="clip71">
+  <path d="M 583 557 L 677 557 L 677 586 L 583 586 Z "/>
+</clipPath>
+<clipPath id="clip72">
+  <path d="M 583 559 C 583 557.894531 583.894531 557 585 557 L 675 557 C 676.105469 557 677 557.449219 677 558 L 677 584 C 677 585.105469 676.105469 586 675 586 L 585 586 C 583.894531 586 583 585.550781 583 585 Z "/>
+</clipPath>
+<image id="image10932" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA4klEQVQ4jc2PoW4CQRRF75tlwxgcm2bdiqqGPyCZoDAr+IA63KYfUolqcP0HktmsellCQvgBWoVYt6lCjBk1r6ZNKmcx5fhzci+1baudd2sIXgA8IY5PEN4mevI+ct6tCfQcJFSrcnWIsXf1zihSr847kG3sBwWqyrKMkn+p69qIki1sY2WI+BfbWFFEdKsPIsIdBG62f7iDC/8f0GN9ZWYzVGZmo8f6qrJpdkrSZDMkwswmSZNNNs1O5L1fdl1X9V/9LITwGBNQSl3yh/xcFMWWRCQFMAewAJBHjugB7AEcvwE9f011ZBU2KQAAAABJRU5ErkJggg=="/>
+<pattern id="pattern50" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip73">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10935" clip-path="url(#clip73)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern50);stroke:none;"/>
+</g>
+<pattern id="pattern49" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,582,556)">
+<use xlink:href="#surface10935"/>
+</pattern>
+<pattern id="pattern52" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip75">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10940" clip-path="url(#clip75)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern52);stroke:none;"/>
+</g>
+<clipPath id="clip74">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface10938" clip-path="url(#clip74)">
+<use xlink:href="#surface10940" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern51" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(9,0,0,1,585,556)">
+<use xlink:href="#surface10938"/>
+</pattern>
+<pattern id="pattern54" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip77">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10945" clip-path="url(#clip77)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern54);stroke:none;"/>
+</g>
+<clipPath id="clip76">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10943" clip-path="url(#clip76)">
+<use xlink:href="#surface10945" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern53" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,675,556)">
+<use xlink:href="#surface10943"/>
+</pattern>
+<pattern id="pattern56" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip79">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10950" clip-path="url(#clip79)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern56);stroke:none;"/>
+</g>
+<clipPath id="clip78">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10948" clip-path="url(#clip78)">
+<use xlink:href="#surface10950" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern55" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,582,559)">
+<use xlink:href="#surface10948"/>
+</pattern>
+<pattern id="pattern58" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip81">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10955" clip-path="url(#clip81)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern58);stroke:none;"/>
+</g>
+<clipPath id="clip80">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10953" clip-path="url(#clip80)">
+<use xlink:href="#surface10955" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern57" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,675,559)">
+<use xlink:href="#surface10953"/>
+</pattern>
+<pattern id="pattern60" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip83">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10960" clip-path="url(#clip83)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern60);stroke:none;"/>
+</g>
+<clipPath id="clip82">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10958" clip-path="url(#clip82)">
+<use xlink:href="#surface10960" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern59" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,582,584)">
+<use xlink:href="#surface10958"/>
+</pattern>
+<pattern id="pattern62" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip85">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10965" clip-path="url(#clip85)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern62);stroke:none;"/>
+</g>
+<clipPath id="clip84">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface10963" clip-path="url(#clip84)">
+<use xlink:href="#surface10965" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern61" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(9,0,0,1,585,584)">
+<use xlink:href="#surface10963"/>
+</pattern>
+<pattern id="pattern64" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip87">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10970" clip-path="url(#clip87)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern64);stroke:none;"/>
+</g>
+<clipPath id="clip86">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface10968" clip-path="url(#clip86)">
+<use xlink:href="#surface10970" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern63" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,675,584)">
+<use xlink:href="#surface10968"/>
+</pattern>
+<clipPath id="clip88">
+  <path d="M 621 557 L 649 557 L 649 586 L 621 586 Z "/>
+</clipPath>
+<image id="image10973" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAJElEQVQ4jWNgGAXDADAic27fvvWfGE2qqmpwfUzUdtEoGJIAAOM5BAQWX9gdAAAAAElFTkSuQmCC"/>
+<clipPath id="clip89">
+  <path d="M 649 557 L 677 557 L 677 586 L 649 586 Z "/>
+</clipPath>
+<clipPath id="clip90">
+  <path d="M 649 557 L 675 557 C 676.105469 557 677 557.894531 677 559 L 677 584 C 677 585.105469 676.105469 586 675 586 L 649 586 Z "/>
+</clipPath>
+<image id="image10977" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAM0lEQVQ4jWNgGN7g9u1b/2/fvvUfnxomSi0ZeAMYkTmE/AsDqqpqcH0UuwAvGCGxMAwAAFKKEkx5ubdcAAAAAElFTkSuQmCC"/>
+<clipPath id="clip91">
+  <path d="M 583 520 L 677 520 L 677 549 L 583 549 Z "/>
+</clipPath>
+<clipPath id="clip92">
+  <path d="M 583 522 C 583 520.894531 583.894531 520 585 520 L 675 520 C 676.105469 520 677 520.449219 677 521 L 677 547 C 677 548.105469 676.105469 549 675 549 L 585 549 C 583.894531 549 583 548.550781 583 548 Z "/>
+</clipPath>
+<pattern id="pattern66" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip93">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10982" clip-path="url(#clip93)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern66);stroke:none;"/>
+</g>
+<pattern id="pattern65" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,582,519)">
+<use xlink:href="#surface10982"/>
+</pattern>
+<pattern id="pattern68" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip95">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10987" clip-path="url(#clip95)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern68);stroke:none;"/>
+</g>
+<clipPath id="clip94">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface10985" clip-path="url(#clip94)">
+<use xlink:href="#surface10987" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern67" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(9,0,0,1,585,519)">
+<use xlink:href="#surface10985"/>
+</pattern>
+<pattern id="pattern70" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip97">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10992" clip-path="url(#clip97)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern70);stroke:none;"/>
+</g>
+<clipPath id="clip96">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface10990" clip-path="url(#clip96)">
+<use xlink:href="#surface10992" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern69" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,675,519)">
+<use xlink:href="#surface10990"/>
+</pattern>
+<pattern id="pattern72" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip99">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface10997" clip-path="url(#clip99)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern72);stroke:none;"/>
+</g>
+<clipPath id="clip98">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface10995" clip-path="url(#clip98)">
+<use xlink:href="#surface10997" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern71" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,582,522)">
+<use xlink:href="#surface10995"/>
+</pattern>
+<pattern id="pattern74" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip101">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11002" clip-path="url(#clip101)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern74);stroke:none;"/>
+</g>
+<clipPath id="clip100">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11000" clip-path="url(#clip100)">
+<use xlink:href="#surface11002" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern73" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,675,522)">
+<use xlink:href="#surface11000"/>
+</pattern>
+<pattern id="pattern76" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip103">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11007" clip-path="url(#clip103)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern76);stroke:none;"/>
+</g>
+<clipPath id="clip102">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11005" clip-path="url(#clip102)">
+<use xlink:href="#surface11007" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern75" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,582,547)">
+<use xlink:href="#surface11005"/>
+</pattern>
+<pattern id="pattern78" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip105">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11012" clip-path="url(#clip105)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern78);stroke:none;"/>
+</g>
+<clipPath id="clip104">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11010" clip-path="url(#clip104)">
+<use xlink:href="#surface11012" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern77" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(9,0,0,1,585,547)">
+<use xlink:href="#surface11010"/>
+</pattern>
+<pattern id="pattern80" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip107">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11017" clip-path="url(#clip107)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern80);stroke:none;"/>
+</g>
+<clipPath id="clip106">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11015" clip-path="url(#clip106)">
+<use xlink:href="#surface11017" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern79" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,675,547)">
+<use xlink:href="#surface11015"/>
+</pattern>
+<clipPath id="clip108">
+  <path d="M 621 520 L 649 520 L 649 549 L 621 549 Z "/>
+</clipPath>
+<image id="image11020" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAJElEQVQ4jWNgGAXDADAic27fvvWfGE2qqmpwfUzUdtEoGJIAAOM5BAQWX9gdAAAAAElFTkSuQmCC"/>
+<clipPath id="clip109">
+  <path d="M 649 520 L 677 520 L 677 549 L 649 549 Z "/>
+</clipPath>
+<clipPath id="clip110">
+  <path d="M 649 520 L 675 520 C 676.105469 520 677 520.894531 677 522 L 677 547 C 677 548.105469 676.105469 549 675 549 L 649 549 Z "/>
+</clipPath>
+<image id="image11024" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAM0lEQVQ4jWNgGN7g9u1b/2/fvvUfnxomSi0ZeAMYkTmE/AsDqqpqcH0UuwAvGCGxMAwAAFKKEkx5ubdcAAAAAElFTkSuQmCC"/>
+<clipPath id="clip111">
+  <path d="M 263 520 L 525 520 L 525 752 L 263 752 Z "/>
+</clipPath>
+<clipPath id="clip112">
+  <path d="M 263 522 C 263 520.894531 263.894531 520 265 520 L 523 520 C 524.105469 520 525 520.894531 525 522 L 525 750 C 525 751.105469 524.105469 752 523 752 L 265 752 C 263.894531 752 263 751.105469 263 750 Z "/>
+</clipPath>
+<clipPath id="clip113">
+  <path d="M 268 639 L 304 639 L 304 666 L 268 666 Z "/>
+</clipPath>
+<clipPath id="clip114">
+  <path d="M 264 521 L 524 521 L 524 550 L 264 550 Z "/>
+</clipPath>
+<linearGradient id="linear3" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,394,535.5)">
+<stop offset="0" style="stop-color:rgb(96.658824%,96.658824%,96.658824%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(82.717647%,82.717647%,82.717647%);stop-opacity:1;"/>
+</linearGradient>
+<clipPath id="clip115">
+  <path d="M 268 554 L 520 554 L 520 581 L 268 581 Z "/>
+</clipPath>
+<image id="image11026" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABXElEQVQ4jcXSz0obURQG8O/cOZm0eYARhMS9LqRVNy5bXLkXSshTGNFHKGbVQp8gBQXxCYwuCxZF3IubLiKzDZrJnfPHRXQZMrrptz+/ew/fIQA4Pv69wfX6oZmuuvkHzAgFKkJIbidl3G/vtP8CAPWP+psp89nap/WPWZYRc23WPERK5Hnu1zdX4yiy1fnW+cNM4cfa541Gq9maOfgaZkartURE1Li8uvwJYJ2LSbGykGUws7nAa7JsAcW4WAEAjjHWQghwrw4kSUBZxhoAsKrCTAAklQF3h6pO1xJRqBoAehMgInj5gcDMQPROQOT/AyWICO5eGSACRKatsaqJ [...]
+<pattern id="pattern81" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,264,492)">
+  <use xlink:href="#image11026"/>
+</pattern>
+<image id="image11027" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAC/ElEQVQ4jZ2TS2hcZRTHf/f77jySzjOTuUlqmnY6M5mUGGrTaOsDdSNUFLQIgSIpiPhYuBtwp2TTVcGCCyEahRR8EHQhpMadiygWWpM00Yk2mYlWg4zJpE2dzMy9c+/3uYgpLZKNfzicczjn/M85i7/BXRgbG/OFIqEXgwHfS55WA1rpoGGIuinFgt1wPpLS98nw8LB394yxG1z87OIRnzCn49FYIpvNhRJtCfx+P1pr/lovs/RzoXp763a56XinRkZGVu4hmJiY6BWSK0NDD+1LH05L9sDy8nV3dn62qj178OzZV1YBxOTkpNSG+mrw2PFQ6lBKKqXYy9LpjHl0 [...]
+<pattern id="pattern82" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,509,453)">
+  <use xlink:href="#image11027"/>
+</pattern>
+<image id="image11028" width="16" height="16" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAACMUlEQVQ4jZWTTUuUURTH//ee+7w5MwoZY4ug8X1G0CB1U9C6RR8gSJFoIa1buXvWfoBAEWyRILNNtO+gi3RsXnTUikqIGc3Bp5m5z3PvbVHGRAxNP/jBgcP5wzmXy9CC7/t8dHT4se3aT5XS48Zoj3HWIMZzshmulEqHa77v69YZdlWsr78c5ORsJLp7bo4Mj8R7r/XCth1IKVE9q+LwsHR5Uat9lo3w4ezsbPmPgNW11WGL0fbknan44MAQoQ1Hx2W1s7MdaIXpubm5AwDg2WyWuDKbE+O3E/2pAdJao539qQGanJyKGaa2stksAQCvfqs+6orFbwwNDnGtFf5l [...]
+<pattern id="pattern83" patternUnits="userSpaceOnUse" width="16" height="16"  patternTransform="matrix(1,0,0,1,586,453)">
+  <use xlink:href="#image11028"/>
+</pattern>
+<clipPath id="clip116">
+  <path d="M 263 446 L 499 446 L 499 475 L 263 475 Z "/>
+</clipPath>
+<clipPath id="clip117">
+  <path d="M 263 448 C 263 446.894531 263.894531 446 265 446 L 497 446 C 498.105469 446 499 446.449219 499 447 L 499 473 C 499 474.105469 498.105469 475 497 475 L 265 475 C 263.894531 475 263 474.550781 263 474 Z "/>
+</clipPath>
+<linearGradient id="linear4" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,381,460.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<pattern id="pattern85" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip118">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11032" clip-path="url(#clip118)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern85);stroke:none;"/>
+</g>
+<pattern id="pattern84" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,262,445)">
+<use xlink:href="#surface11032"/>
+</pattern>
+<pattern id="pattern87" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip120">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11037" clip-path="url(#clip120)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern87);stroke:none;"/>
+</g>
+<clipPath id="clip119">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface11035" clip-path="url(#clip119)">
+<use xlink:href="#surface11037" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern86" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(23.2,0,0,1,265,445)">
+<use xlink:href="#surface11035"/>
+</pattern>
+<pattern id="pattern89" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip122">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11042" clip-path="url(#clip122)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern89);stroke:none;"/>
+</g>
+<clipPath id="clip121">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11040" clip-path="url(#clip121)">
+<use xlink:href="#surface11042" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern88" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,497,445)">
+<use xlink:href="#surface11040"/>
+</pattern>
+<pattern id="pattern91" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip124">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11047" clip-path="url(#clip124)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern91);stroke:none;"/>
+</g>
+<clipPath id="clip123">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11045" clip-path="url(#clip123)">
+<use xlink:href="#surface11047" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern90" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,262,448)">
+<use xlink:href="#surface11045"/>
+</pattern>
+<pattern id="pattern93" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip126">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11052" clip-path="url(#clip126)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern93);stroke:none;"/>
+</g>
+<clipPath id="clip125">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11050" clip-path="url(#clip125)">
+<use xlink:href="#surface11052" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern92" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,497,448)">
+<use xlink:href="#surface11050"/>
+</pattern>
+<pattern id="pattern95" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip128">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11057" clip-path="url(#clip128)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern95);stroke:none;"/>
+</g>
+<clipPath id="clip127">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11055" clip-path="url(#clip127)">
+<use xlink:href="#surface11057" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern94" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,262,473)">
+<use xlink:href="#surface11055"/>
+</pattern>
+<pattern id="pattern97" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip130">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11062" clip-path="url(#clip130)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern97);stroke:none;"/>
+</g>
+<clipPath id="clip129">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11060" clip-path="url(#clip129)">
+<use xlink:href="#surface11062" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern96" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(23.2,0,0,1,265,473)">
+<use xlink:href="#surface11060"/>
+</pattern>
+<pattern id="pattern99" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip132">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11067" clip-path="url(#clip132)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern99);stroke:none;"/>
+</g>
+<clipPath id="clip131">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11065" clip-path="url(#clip131)">
+<use xlink:href="#surface11067" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern98" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,497,473)">
+<use xlink:href="#surface11065"/>
+</pattern>
+<clipPath id="clip133">
+  <path d="M 668 409 L 742 409 L 742 438 L 668 438 Z "/>
+</clipPath>
+<clipPath id="clip134">
+  <path d="M 668 411 C 668 409.894531 668.894531 409 670 409 L 740 409 C 741.105469 409 742 409.449219 742 410 L 742 436 C 742 437.105469 741.105469 438 740 438 L 670 438 C 668.894531 438 668 437.550781 668 437 Z "/>
+</clipPath>
+<linearGradient id="linear5" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,705,423.5)">
+<stop offset="0" style="stop-color:rgb(97.588235%,97.588235%,97.588235%);stop-opacity:1;"/>
+<stop offset="0.4" style="stop-color:rgb(92.941176%,92.941176%,92.941176%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(85.505882%,85.505882%,85.505882%);stop-opacity:1;"/>
+</linearGradient>
+<pattern id="pattern101" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip135">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11071" clip-path="url(#clip135)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern101);stroke:none;"/>
+</g>
+<pattern id="pattern100" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,667,408)">
+<use xlink:href="#surface11071"/>
+</pattern>
+<pattern id="pattern103" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip137">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11076" clip-path="url(#clip137)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern103);stroke:none;"/>
+</g>
+<clipPath id="clip136">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface11074" clip-path="url(#clip136)">
+<use xlink:href="#surface11076" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern102" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(7,0,0,1,670,408)">
+<use xlink:href="#surface11074"/>
+</pattern>
+<pattern id="pattern105" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip139">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11081" clip-path="url(#clip139)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern105);stroke:none;"/>
+</g>
+<clipPath id="clip138">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11079" clip-path="url(#clip138)">
+<use xlink:href="#surface11081" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern104" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,740,408)">
+<use xlink:href="#surface11079"/>
+</pattern>
+<pattern id="pattern107" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip141">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11086" clip-path="url(#clip141)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern107);stroke:none;"/>
+</g>
+<clipPath id="clip140">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11084" clip-path="url(#clip140)">
+<use xlink:href="#surface11086" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern106" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,667,411)">
+<use xlink:href="#surface11084"/>
+</pattern>
+<pattern id="pattern109" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip143">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11091" clip-path="url(#clip143)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern109);stroke:none;"/>
+</g>
+<clipPath id="clip142">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11089" clip-path="url(#clip142)">
+<use xlink:href="#surface11091" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern108" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,740,411)">
+<use xlink:href="#surface11089"/>
+</pattern>
+<pattern id="pattern111" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip145">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11096" clip-path="url(#clip145)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern111);stroke:none;"/>
+</g>
+<clipPath id="clip144">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11094" clip-path="url(#clip144)">
+<use xlink:href="#surface11096" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern110" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,667,436)">
+<use xlink:href="#surface11094"/>
+</pattern>
+<pattern id="pattern113" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip147">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11101" clip-path="url(#clip147)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern113);stroke:none;"/>
+</g>
+<clipPath id="clip146">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11099" clip-path="url(#clip146)">
+<use xlink:href="#surface11101" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern112" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(7,0,0,1,670,436)">
+<use xlink:href="#surface11099"/>
+</pattern>
+<pattern id="pattern115" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10812"/>
+</pattern>
+<clipPath id="clip149">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11106" clip-path="url(#clip149)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern115);stroke:none;"/>
+</g>
+<clipPath id="clip148">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11104" clip-path="url(#clip148)">
+<use xlink:href="#surface11106" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern114" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,740,436)">
+<use xlink:href="#surface11104"/>
+</pattern>
+<clipPath id="clip150">
+  <path d="M 263 409 L 661 409 L 661 438 L 263 438 Z "/>
+</clipPath>
+<clipPath id="clip151">
+  <path d="M 263 411 C 263 409.894531 263.894531 409 265 409 L 659 409 C 660.105469 409 661 409.449219 661 410 L 661 436 C 661 437.105469 660.105469 438 659 438 L 265 438 C 263.894531 438 263 437.550781 263 437 Z "/>
+</clipPath>
+<linearGradient id="linear6" gradientUnits="userSpaceOnUse" x1="0" y1="-14.5" x2="0" y2="14.5" gradientTransform="matrix(1,0,0,1,462,423.5)">
+<stop offset="0" style="stop-color:rgb(94%,94%,94%);stop-opacity:1;"/>
+<stop offset="1" style="stop-color:rgb(100%,100%,100%);stop-opacity:1;"/>
+</linearGradient>
+<pattern id="pattern117" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip152">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11110" clip-path="url(#clip152)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern117);stroke:none;"/>
+</g>
+<pattern id="pattern116" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,262,408)">
+<use xlink:href="#surface11110"/>
+</pattern>
+<pattern id="pattern119" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip154">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11115" clip-path="url(#clip154)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern119);stroke:none;"/>
+</g>
+<clipPath id="clip153">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface11113" clip-path="url(#clip153)">
+<use xlink:href="#surface11115" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern118" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(39.4,0,0,1,265,408)">
+<use xlink:href="#surface11113"/>
+</pattern>
+<pattern id="pattern121" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip156">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11120" clip-path="url(#clip156)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern121);stroke:none;"/>
+</g>
+<clipPath id="clip155">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11118" clip-path="url(#clip155)">
+<use xlink:href="#surface11120" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern120" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,659,408)">
+<use xlink:href="#surface11118"/>
+</pattern>
+<pattern id="pattern123" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip158">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11125" clip-path="url(#clip158)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern123);stroke:none;"/>
+</g>
+<clipPath id="clip157">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11123" clip-path="url(#clip157)">
+<use xlink:href="#surface11125" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern122" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,262,411)">
+<use xlink:href="#surface11123"/>
+</pattern>
+<pattern id="pattern125" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip160">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11130" clip-path="url(#clip160)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern125);stroke:none;"/>
+</g>
+<clipPath id="clip159">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11128" clip-path="url(#clip159)">
+<use xlink:href="#surface11130" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern124" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,659,411)">
+<use xlink:href="#surface11128"/>
+</pattern>
+<pattern id="pattern127" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip162">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11135" clip-path="url(#clip162)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern127);stroke:none;"/>
+</g>
+<clipPath id="clip161">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11133" clip-path="url(#clip161)">
+<use xlink:href="#surface11135" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern126" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,262,436)">
+<use xlink:href="#surface11133"/>
+</pattern>
+<pattern id="pattern129" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip164">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11140" clip-path="url(#clip164)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern129);stroke:none;"/>
+</g>
+<clipPath id="clip163">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11138" clip-path="url(#clip163)">
+<use xlink:href="#surface11140" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern128" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(39.4,0,0,1,265,436)">
+<use xlink:href="#surface11138"/>
+</pattern>
+<pattern id="pattern131" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip166">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11145" clip-path="url(#clip166)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern131);stroke:none;"/>
+</g>
+<clipPath id="clip165">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11143" clip-path="url(#clip165)">
+<use xlink:href="#surface11145" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern130" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,659,436)">
+<use xlink:href="#surface11143"/>
+</pattern>
+<clipPath id="clip167">
+  <path d="M 675 117 L 783 117 L 783 146 L 675 146 Z "/>
+</clipPath>
+<clipPath id="clip168">
+  <path d="M 675 119 C 675 117.894531 675.894531 117 677 117 L 781 117 C 782.105469 117 783 117.449219 783 118 L 783 144 C 783 145.105469 782.105469 146 781 146 L 677 146 C 675.894531 146 675 145.550781 675 145 Z "/>
+</clipPath>
+<pattern id="pattern133" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip169">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11149" clip-path="url(#clip169)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern133);stroke:none;"/>
+</g>
+<pattern id="pattern132" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,674,116)">
+<use xlink:href="#surface11149"/>
+</pattern>
+<pattern id="pattern135" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip171">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11154" clip-path="url(#clip171)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern135);stroke:none;"/>
+</g>
+<clipPath id="clip170">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface11152" clip-path="url(#clip170)">
+<use xlink:href="#surface11154" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern134" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(10.4,0,0,1,677,116)">
+<use xlink:href="#surface11152"/>
+</pattern>
+<pattern id="pattern137" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip173">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11159" clip-path="url(#clip173)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern137);stroke:none;"/>
+</g>
+<clipPath id="clip172">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11157" clip-path="url(#clip172)">
+<use xlink:href="#surface11159" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern136" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,781,116)">
+<use xlink:href="#surface11157"/>
+</pattern>
+<pattern id="pattern139" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip175">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11164" clip-path="url(#clip175)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern139);stroke:none;"/>
+</g>
+<clipPath id="clip174">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11162" clip-path="url(#clip174)">
+<use xlink:href="#surface11164" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern138" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,674,119)">
+<use xlink:href="#surface11162"/>
+</pattern>
+<pattern id="pattern141" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip177">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11169" clip-path="url(#clip177)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern141);stroke:none;"/>
+</g>
+<clipPath id="clip176">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11167" clip-path="url(#clip176)">
+<use xlink:href="#surface11169" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern140" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,781,119)">
+<use xlink:href="#surface11167"/>
+</pattern>
+<pattern id="pattern143" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip179">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11174" clip-path="url(#clip179)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern143);stroke:none;"/>
+</g>
+<clipPath id="clip178">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11172" clip-path="url(#clip178)">
+<use xlink:href="#surface11174" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern142" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,674,144)">
+<use xlink:href="#surface11172"/>
+</pattern>
+<pattern id="pattern145" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip181">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11179" clip-path="url(#clip181)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern145);stroke:none;"/>
+</g>
+<clipPath id="clip180">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11177" clip-path="url(#clip180)">
+<use xlink:href="#surface11179" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern144" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(10.4,0,0,1,677,144)">
+<use xlink:href="#surface11177"/>
+</pattern>
+<pattern id="pattern147" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip183">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11184" clip-path="url(#clip183)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern147);stroke:none;"/>
+</g>
+<clipPath id="clip182">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11182" clip-path="url(#clip182)">
+<use xlink:href="#surface11184" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern146" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,781,144)">
+<use xlink:href="#surface11182"/>
+</pattern>
+<clipPath id="clip184">
+  <path d="M 371 117 L 475 117 L 475 146 L 371 146 Z "/>
+</clipPath>
+<clipPath id="clip185">
+  <path d="M 371 119 C 371 117.894531 371.894531 117 373 117 L 473 117 C 474.105469 117 475 117.449219 475 118 L 475 144 C 475 145.105469 474.105469 146 473 146 L 373 146 C 371.894531 146 371 145.550781 371 145 Z "/>
+</clipPath>
+<pattern id="pattern149" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip186">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11188" clip-path="url(#clip186)">
+<rect x="0" y="0" width="3" height="3" style="fill:url(#pattern149);stroke:none;"/>
+</g>
+<pattern id="pattern148" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,370,116)">
+<use xlink:href="#surface11188"/>
+</pattern>
+<pattern id="pattern151" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip188">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11193" clip-path="url(#clip188)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern151);stroke:none;"/>
+</g>
+<clipPath id="clip187">
+  <rect width="10" height="3"/>
+</clipPath>
+<g id="surface11191" clip-path="url(#clip187)">
+<use xlink:href="#surface11193" transform="matrix(1,0,0,1,-3,0)"/>
+</g>
+<pattern id="pattern150" patternUnits="userSpaceOnUse" width="10" height="3" patternTransform="matrix(10,0,0,1,373,116)">
+<use xlink:href="#surface11191"/>
+</pattern>
+<pattern id="pattern153" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip190">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11198" clip-path="url(#clip190)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern153);stroke:none;"/>
+</g>
+<clipPath id="clip189">
+  <rect width="3" height="3"/>
+</clipPath>
+<g id="surface11196" clip-path="url(#clip189)">
+<use xlink:href="#surface11198" transform="matrix(1,0,0,1,-13,0)"/>
+</g>
+<pattern id="pattern152" patternUnits="userSpaceOnUse" width="3" height="3" patternTransform="matrix(1,0,0,1,473,116)">
+<use xlink:href="#surface11196"/>
+</pattern>
+<pattern id="pattern155" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip192">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11203" clip-path="url(#clip192)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern155);stroke:none;"/>
+</g>
+<clipPath id="clip191">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11201" clip-path="url(#clip191)">
+<use xlink:href="#surface11203" transform="matrix(1,0,0,1,0,-3)"/>
+</g>
+<pattern id="pattern154" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,370,119)">
+<use xlink:href="#surface11201"/>
+</pattern>
+<pattern id="pattern157" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip194">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11208" clip-path="url(#clip194)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern157);stroke:none;"/>
+</g>
+<clipPath id="clip193">
+  <rect width="3" height="9"/>
+</clipPath>
+<g id="surface11206" clip-path="url(#clip193)">
+<use xlink:href="#surface11208" transform="matrix(1,0,0,1,-13,-3)"/>
+</g>
+<pattern id="pattern156" patternUnits="userSpaceOnUse" width="3" height="9" patternTransform="matrix(1,0,0,2.777778,473,119)">
+<use xlink:href="#surface11206"/>
+</pattern>
+<pattern id="pattern159" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip196">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11213" clip-path="url(#clip196)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern159);stroke:none;"/>
+</g>
+<clipPath id="clip195">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11211" clip-path="url(#clip195)">
+<use xlink:href="#surface11213" transform="matrix(1,0,0,1,0,-12)"/>
+</g>
+<pattern id="pattern158" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,370,144)">
+<use xlink:href="#surface11211"/>
+</pattern>
+<pattern id="pattern161" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip198">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11218" clip-path="url(#clip198)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern161);stroke:none;"/>
+</g>
+<clipPath id="clip197">
+  <rect width="10" height="4"/>
+</clipPath>
+<g id="surface11216" clip-path="url(#clip197)">
+<use xlink:href="#surface11218" transform="matrix(1,0,0,1,-3,-12)"/>
+</g>
+<pattern id="pattern160" patternUnits="userSpaceOnUse" width="10" height="4" patternTransform="matrix(10,0,0,1,373,144)">
+<use xlink:href="#surface11216"/>
+</pattern>
+<pattern id="pattern163" patternUnits="userSpaceOnUse" width="16" height="16" >
+  <use xlink:href="#image10932"/>
+</pattern>
+<clipPath id="clip200">
+  <rect width="16" height="16"/>
+</clipPath>
+<g id="surface11223" clip-path="url(#clip200)">
+<rect x="0" y="0" width="16" height="16" style="fill:url(#pattern163);stroke:none;"/>
+</g>
+<clipPath id="clip199">
+  <rect width="3" height="4"/>
+</clipPath>
+<g id="surface11221" clip-path="url(#clip199)">
+<use xlink:href="#surface11223" transform="matrix(1,0,0,1,-13,-12)"/>
+</g>
+<pattern id="pattern162" patternUnits="userSpaceOnUse" width="3" height="4" patternTransform="matrix(1,0,0,1,473,144)">
+<use xlink:href="#surface11221"/>
+</pattern>
+</defs>
+<g id="surface10807">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 0 0 L 1000 0 L 1000 800 L 0 800 Z M 0 0 L 1000 0 L 1000 800 L 0 800 Z "/>
+<g clip-path="url(#clip1)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.941176%,92.941176%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern0);" d="M 146.5 388 L 148.5 388 L 148.5 412 L 146.5 412 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(62.541593%,65.212424%,59.336596%);fill-opacity:1;" d="M 145 0 L 150 0 L 150 800 L 145 800 Z M 145 0 L 150 0 L 150 800 L 145 800 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 800 L 0 800 Z M 0 0 L 145 0 L 145 800 L 0 800 Z "/>
+<g clip-path="url(#clip2)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip3)" clip-rule="nonzero">
+<g clip-path="url(#clip4)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear0);" d="M 24 45 L 122 45 L 122 74 L 24 74 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern1);" d="M 23 44 L 26 44 L 26 47 L 23 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern3);" d="M 26 44 L 120 44 L 120 47 L 26 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern5);" d="M 120 44 L 123 44 L 123 47 L 120 47 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern7);" d="M 23 47 L 26 47 L 26 72 L 23 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern9);" d="M 120 47 L 123 47 L 123 72 L 120 72 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern11);" d="M 23 72 L 26 72 L 26 76 L 23 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern13);" d="M 26 72 L 120 72 L 120 76 L 26 76 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern15);" d="M 120 72 L 123 72 L 123 76 L 120 76 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 49 L 115 49 L 115 70 L 31 70 Z M 31 49 L 115 49 L 115 70 L 31 70 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph0-1" x="42" y="66"/>
+  <use xlink:href="#glyph0-2" x="52" y="66"/>
+  <use xlink:href="#glyph0-3" x="60" y="66"/>
+  <use xlink:href="#glyph0-4" x="72" y="66"/>
+  <use xlink:href="#glyph0-2" x="80" y="66"/>
+  <use xlink:href="#glyph0-5" x="88" y="66"/>
+  <use xlink:href="#glyph0-6" x="95" y="66"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-1" x="42" y="65"/>
+  <use xlink:href="#glyph0-2" x="52" y="65"/>
+  <use xlink:href="#glyph0-3" x="60" y="65"/>
+  <use xlink:href="#glyph0-4" x="72" y="65"/>
+  <use xlink:href="#glyph0-2" x="80" y="65"/>
+  <use xlink:href="#glyph0-5" x="88" y="65"/>
+  <use xlink:href="#glyph0-6" x="95" y="65"/>
+</g>
+<g clip-path="url(#clip20)" clip-rule="nonzero">
+<g clip-path="url(#clip21)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear1);" d="M 24 127 L 122 127 L 122 156 L 24 156 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern17);" d="M 23 126 L 26 126 L 26 129 L 23 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern19);" d="M 26 126 L 120 126 L 120 129 L 26 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern21);" d="M 120 126 L 123 126 L 123 129 L 120 129 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern23);" d="M 23 129 L 26 129 L 26 154 L 23 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern25);" d="M 120 129 L 123 129 L 123 154 L 120 154 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern27);" d="M 23 154 L 26 154 L 26 158 L 23 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern29);" d="M 26 154 L 120 154 L 120 158 L 26 158 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern31);" d="M 120 154 L 123 154 L 123 158 L 120 158 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 31 131 L 115 131 L 115 152 L 31 152 Z M 31 131 L 115 131 L 115 152 L 31 152 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph0-7" x="60" y="148"/>
+  <use xlink:href="#glyph0-8" x="69" y="148"/>
+  <use xlink:href="#glyph0-8" x="77" y="148"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-7" x="60" y="147"/>
+  <use xlink:href="#glyph0-8" x="69" y="147"/>
+  <use xlink:href="#glyph0-8" x="77" y="147"/>
+</g>
+<g clip-path="url(#clip37)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 184 L 53 184 L 53 201 L 5 201 Z M 5 184 L 53 184 L 53 201 L 5 201 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-1" x="5" y="198"/>
+  <use xlink:href="#glyph1-2" x="8" y="198"/>
+  <use xlink:href="#glyph1-3" x="17" y="198"/>
+  <use xlink:href="#glyph1-4" x="26" y="198"/>
+  <use xlink:href="#glyph1-5" x="34" y="198"/>
+  <use xlink:href="#glyph1-6" x="38" y="198"/>
+  <use xlink:href="#glyph1-5" x="42" y="198"/>
+  <use xlink:href="#glyph1-7" x="46" y="198"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 203 L 141 203 L 141 204 L 4 204 Z M 4 203 L 141 203 L 141 204 L 4 204 Z "/>
+<use xlink:href="#image10890" transform="matrix(1,0,0,1,140,203)"/>
+<g clip-path="url(#clip38)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(89.803922%,90.196078%,90.196078%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip39)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 5 207 L 85 207 L 85 224 L 5 224 Z M 5 207 L 85 207 L 85 224 L 5 224 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph1-8" x="5" y="221"/>
+  <use xlink:href="#glyph1-9" x="16" y="221"/>
+  <use xlink:href="#glyph1-5" x="24" y="221"/>
+  <use xlink:href="#glyph1-6" x="28" y="221"/>
+  <use xlink:href="#glyph1-10" x="32" y="221"/>
+  <use xlink:href="#glyph1-6" x="39" y="221"/>
+  <use xlink:href="#glyph1-5" x="43" y="221"/>
+  <use xlink:href="#glyph1-7" x="47" y="221"/>
+  <use xlink:href="#glyph1-11" x="54" y="221"/>
+  <use xlink:href="#glyph1-12" x="58" y="221"/>
+  <use xlink:href="#glyph1-13" x="67" y="221"/>
+  <use xlink:href="#glyph1-14" x="76" y="221"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 4 226 L 141 226 L 141 227 L 4 227 Z M 4 226 L 141 226 L 141 227 L 4 227 Z "/>
+<use xlink:href="#image10891" transform="matrix(1,0,0,1,140,226)"/>
+<g clip-path="url(#clip40)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 0 L 145 0 L 145 18 L 0 18 Z M 0 0 L 145 0 L 145 18 L 0 18 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph2-1" x="49" y="14"/>
+  <use xlink:href="#glyph2-2" x="55" y="14"/>
+  <use xlink:href="#glyph2-3" x="65" y="14"/>
+  <use xlink:href="#glyph2-4" x="75" y="14"/>
+  <use xlink:href="#glyph2-5" x="85" y="14"/>
+</g>
+<g clip-path="url(#clip41)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip42)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 19 L 145 19 L 145 37 L 0 37 Z M 0 19 L 145 19 L 145 37 L 0 37 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph2-6" x="42" y="33"/>
+  <use xlink:href="#glyph2-7" x="55" y="33"/>
+  <use xlink:href="#glyph2-8" x="65" y="33"/>
+  <use xlink:href="#glyph2-3" x="72" y="33"/>
+  <use xlink:href="#glyph2-4" x="82" y="33"/>
+  <use xlink:href="#glyph2-5" x="92" y="33"/>
+</g>
+<g clip-path="url(#clip43)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip44)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 82 L 145 82 L 145 100 L 0 100 Z M 0 82 L 145 82 L 145 100 L 0 100 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph2-9" x="46" y="96"/>
+  <use xlink:href="#glyph2-10" x="58" y="96"/>
+  <use xlink:href="#glyph2-11" x="65" y="96"/>
+  <use xlink:href="#glyph2-12" x="75" y="96"/>
+  <use xlink:href="#glyph2-8" x="82" y="96"/>
+  <use xlink:href="#glyph2-13" x="89" y="96"/>
+</g>
+<g clip-path="url(#clip45)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip46)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 101 L 145 101 L 145 119 L 0 119 Z M 0 101 L 145 101 L 145 119 L 0 119 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph2-14" x="36" y="115"/>
+  <use xlink:href="#glyph2-4" x="47" y="115"/>
+  <use xlink:href="#glyph2-2" x="57" y="115"/>
+  <use xlink:href="#glyph2-8" x="67" y="115"/>
+  <use xlink:href="#glyph2-11" x="74" y="115"/>
+  <use xlink:href="#glyph2-15" x="84" y="115"/>
+  <use xlink:href="#glyph2-8" x="93" y="115"/>
+  <use xlink:href="#glyph2-13" x="100" y="115"/>
+</g>
+<g clip-path="url(#clip47)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip48)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(92.54902%,92.54902%,92.941176%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;" d="M 0 164 L 145 164 L 145 182 L 0 182 Z M 0 164 L 145 164 L 145 182 L 0 182 Z "/>
+<g style="fill:rgb(48.235294%,49.803922%,51.372549%);fill-opacity:1;">
+  <use xlink:href="#glyph2-14" x="49" y="178"/>
+  <use xlink:href="#glyph2-16" x="60" y="178"/>
+  <use xlink:href="#glyph2-17" x="64" y="178"/>
+  <use xlink:href="#glyph2-18" x="68" y="178"/>
+  <use xlink:href="#glyph2-2" x="78" y="178"/>
+  <use xlink:href="#glyph2-8" x="88" y="178"/>
+</g>
+<g clip-path="url(#clip49)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(78.823529%,78.823529%,78.823529%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip50)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(83.647059%,83.647059%,83.647059%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip51)" clip-rule="nonzero">
+<g clip-path="url(#clip52)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(60.684314%,61.507843%,61.782353%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;" d="M 150 0 L 987 0 L 987 800 L 150 800 Z M 150 0 L 987 0 L 987 800 L 150 800 Z "/>
+<g clip-path="url(#clip53)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(98.039216%,98.039216%,98.039216%);fill-opacity:1;stroke:none;"/>
+</g>
+<g clip-path="url(#clip54)" clip-rule="nonzero">
+<g clip-path="url(#clip55)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear2);" d="M 177 759 L 256 759 L 256 788 L 177 788 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern33);" d="M 176 758 L 179 758 L 179 761 L 176 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern35);" d="M 179 758 L 254 758 L 254 761 L 179 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern37);" d="M 254 758 L 257 758 L 257 761 L 254 761 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern39);" d="M 176 761 L 179 761 L 179 786 L 176 786 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern41);" d="M 254 761 L 257 761 L 257 786 L 254 786 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern43);" d="M 176 786 L 179 786 L 179 790 L 176 790 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern45);" d="M 179 786 L 254 786 L 254 790 L 179 790 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern47);" d="M 254 786 L 257 786 L 257 790 L 254 790 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 184 763 L 249 763 L 249 784 L 184 784 Z M 184 763 L 249 763 L 249 784 L 184 784 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph0-9" x="198" y="780"/>
+  <use xlink:href="#glyph0-6" x="207" y="780"/>
+  <use xlink:href="#glyph0-10" x="215" y="780"/>
+  <use xlink:href="#glyph0-11" x="223" y="780"/>
+  <use xlink:href="#glyph0-12" x="226" y="780"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-9" x="198" y="779"/>
+  <use xlink:href="#glyph0-6" x="207" y="779"/>
+  <use xlink:href="#glyph0-10" x="215" y="779"/>
+  <use xlink:href="#glyph0-11" x="223" y="779"/>
+  <use xlink:href="#glyph0-12" x="226" y="779"/>
+</g>
+<g clip-path="url(#clip71)" clip-rule="nonzero">
+<g clip-path="url(#clip72)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern49);" d="M 582 556 L 585 556 L 585 559 L 582 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern51);" d="M 585 556 L 675 556 L 675 559 L 585 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern53);" d="M 675 556 L 678 556 L 678 559 L 675 559 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern55);" d="M 582 559 L 585 559 L 585 584 L 582 584 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern57);" d="M 675 559 L 678 559 L 678 584 L 675 584 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern59);" d="M 582 584 L 585 584 L 585 588 L 582 588 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern61);" d="M 585 584 L 675 584 L 675 588 L 585 588 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern63);" d="M 675 584 L 678 584 L 678 588 L 675 588 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="587" y="577"/>
+</g>
+<g clip-path="url(#clip88)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 622 557 L 650 557 L 650 586 L 622 586 Z M 617 553 L 653 553 L 653 590 L 617 590 Z "/>
+</g>
+<use xlink:href="#image10973" transform="matrix(1,0,0,1,627,563)"/>
+<g clip-path="url(#clip89)" clip-rule="nonzero">
+<g clip-path="url(#clip90)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 650 557 L 676 557 C 677.105469 557 678 557.894531 678 559 L 678 584 C 678 585.105469 677.105469 586 676 586 L 650 586 Z M 645 553 L 681 553 L 681 590 L 645 590 Z "/>
+</g>
+</g>
+<use xlink:href="#image10977" transform="matrix(1,0,0,1,655,563)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 534 561 L 579 561 L 579 582 L 534 582 Z M 534 561 L 579 561 L 579 582 L 534 582 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="534" y="577"/>
+  <use xlink:href="#glyph0-11" x="546" y="577"/>
+  <use xlink:href="#glyph0-12" x="549" y="577"/>
+  <use xlink:href="#glyph0-15" x="557" y="577"/>
+  <use xlink:href="#glyph0-16" x="565" y="577"/>
+  <use xlink:href="#glyph0-6" x="571" y="577"/>
+</g>
+<g clip-path="url(#clip91)" clip-rule="nonzero">
+<g clip-path="url(#clip92)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern65);" d="M 582 519 L 585 519 L 585 522 L 582 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern67);" d="M 585 519 L 675 519 L 675 522 L 585 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern69);" d="M 675 519 L 678 519 L 678 522 L 675 522 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern71);" d="M 582 522 L 585 522 L 585 547 L 582 547 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern73);" d="M 675 522 L 678 522 L 678 547 L 675 547 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern75);" d="M 582 547 L 585 547 L 585 551 L 582 551 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern77);" d="M 585 547 L 675 547 L 675 551 L 585 551 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern79);" d="M 675 547 L 678 547 L 678 551 L 675 551 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-13" x="587" y="540"/>
+</g>
+<g clip-path="url(#clip108)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 622 520 L 650 520 L 650 549 L 622 549 Z M 617 516 L 653 516 L 653 553 L 617 553 Z "/>
+</g>
+<use xlink:href="#image11020" transform="matrix(1,0,0,1,627,526)"/>
+<g clip-path="url(#clip109)" clip-rule="nonzero">
+<g clip-path="url(#clip110)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.07;" d="M 650 520 L 676 520 C 677.105469 520 678 520.894531 678 522 L 678 547 C 678 548.105469 677.105469 549 676 549 L 650 549 Z M 645 516 L 681 516 L 681 553 L 645 553 Z "/>
+</g>
+</g>
+<use xlink:href="#image11024" transform="matrix(1,0,0,1,655,526)"/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 534 524 L 579 524 L 579 545 L 534 545 Z M 534 524 L 579 524 L 579 545 L 534 545 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-17" x="534" y="540"/>
+  <use xlink:href="#glyph0-2" x="545" y="540"/>
+  <use xlink:href="#glyph0-15" x="553" y="540"/>
+  <use xlink:href="#glyph0-18" x="561" y="540"/>
+</g>
+<g clip-path="url(#clip111)" clip-rule="nonzero">
+<g clip-path="url(#clip112)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 262 522 C 262 520.34375 263.34375 519 265 519 L 523 519 C 524.65625 519 526 520.34375 526 522 L 526 750 C 526 751.65625 524.65625 753 523 753 L 265 753 C 263.34375 753 262 751.65625 262 750 Z M 263 522 C 263 520.894531 263.894531 520 265 520 L 523 520 C 524.105469 520 525 520.894531 525 522 L 525 750 C 525 751.105469 524.105469 752 523 752 L 265 752 C 263.894531 752 263 751.105469 [...]
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="277" y="601"/>
+  <use xlink:href="#glyph0-20" x="286" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="281" y="628"/>
+</g>
+<g clip-path="url(#clip113)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="277" y="655"/>
+  <use xlink:href="#glyph0-13" x="286" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="277" y="682"/>
+  <use xlink:href="#glyph0-20" x="286" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="277" y="709"/>
+  <use xlink:href="#glyph0-23" x="286" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="281" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="313" y="601"/>
+  <use xlink:href="#glyph0-24" x="322" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-23" x="317" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="313" y="655"/>
+  <use xlink:href="#glyph0-22" x="322" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="313" y="682"/>
+  <use xlink:href="#glyph0-24" x="322" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="313" y="709"/>
+  <use xlink:href="#glyph0-25" x="322" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="317" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="349" y="601"/>
+  <use xlink:href="#glyph0-26" x="358" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-25" x="353" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="349" y="655"/>
+  <use xlink:href="#glyph0-19" x="358" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="349" y="682"/>
+  <use xlink:href="#glyph0-26" x="358" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="349" y="709"/>
+  <use xlink:href="#glyph0-27" x="358" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="353" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="385" y="601"/>
+  <use xlink:href="#glyph0-13" x="394" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-27" x="389" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="385" y="655"/>
+  <use xlink:href="#glyph0-21" x="394" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="385" y="682"/>
+  <use xlink:href="#glyph0-13" x="394" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="385" y="709"/>
+  <use xlink:href="#glyph0-20" x="394" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-23" x="389" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="421" y="601"/>
+  <use xlink:href="#glyph0-22" x="430" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-20" x="425" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="421" y="655"/>
+  <use xlink:href="#glyph0-23" x="430" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="421" y="682"/>
+  <use xlink:href="#glyph0-22" x="430" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="421" y="709"/>
+  <use xlink:href="#glyph0-24" x="430" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-25" x="425" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="461" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-24" x="461" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="457" y="655"/>
+  <use xlink:href="#glyph0-25" x="466" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="457" y="682"/>
+  <use xlink:href="#glyph0-19" x="466" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="457" y="709"/>
+  <use xlink:href="#glyph0-26" x="466" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-27" x="461" y="736"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="497" y="601"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-26" x="497" y="628"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="493" y="655"/>
+  <use xlink:href="#glyph0-27" x="502" y="655"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="493" y="682"/>
+  <use xlink:href="#glyph0-21" x="502" y="682"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="493" y="709"/>
+  <use xlink:href="#glyph0-13" x="502" y="709"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-20" x="497" y="736"/>
+</g>
+<g clip-path="url(#clip114)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear3);" d="M 264 521 L 524 521 L 524 550 L 264 550 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 264 521 L 524 521 L 524 550 L 264 550 Z M 264 521 L 524 521 L 524 550 L 264 550 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="471" y="541"/>
+  <use xlink:href="#glyph0-13" x="480" y="541"/>
+  <use xlink:href="#glyph0-22" x="489" y="541"/>
+  <use xlink:href="#glyph0-21" x="498" y="541"/>
+</g>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-28" x="283" y="541"/>
+  <use xlink:href="#glyph0-2" x="294" y="541"/>
+  <use xlink:href="#glyph0-29" x="302" y="541"/>
+  <use xlink:href="#glyph0-6" x="309" y="541"/>
+  <use xlink:href="#glyph0-3" x="317" y="541"/>
+  <use xlink:href="#glyph0-30" x="329" y="541"/>
+  <use xlink:href="#glyph0-6" x="337" y="541"/>
+  <use xlink:href="#glyph0-18" x="345" y="541"/>
+</g>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(65.490196%,67.058824%,65.490196%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0.000000000000113687 -0.000000000000113687 L -4.001551 4.001551 " transform="matrix(-0.809256,0.000000000000000099,-0.000000000000000099,-0.809256,460,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(65.490196%,67.058824%,65.490196%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(0.809256,0,0,0.809256,518,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(65.490196%,67.058824%,65.490196%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(-0.809256,0.000000000000000099,-0.000000000000000099,-0.809256,270,535)"/>
+<path style="fill:none;stroke-width:1.885618;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(65.490196%,67.058824%,65.490196%);stroke-opacity:1;stroke-miterlimit:10;" d="M -4.001551 -4.001551 L 0 0 L -4.001551 4.001551 " transform="matrix(0.809256,0,0,0.809256,361,535)"/>
+<g clip-path="url(#clip115)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(29.019608%,56.470588%,85.098039%);fill-opacity:1;stroke:none;"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-31" x="273" y="573"/>
+  <use xlink:href="#glyph0-15" x="282" y="573"/>
+  <use xlink:href="#glyph0-12" x="290" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="308" y="573"/>
+  <use xlink:href="#glyph0-2" x="320" y="573"/>
+  <use xlink:href="#glyph0-12" x="328" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-32" x="346" y="573"/>
+  <use xlink:href="#glyph0-15" x="354" y="573"/>
+  <use xlink:href="#glyph0-6" x="362" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-33" x="379" y="573"/>
+  <use xlink:href="#glyph0-6" x="393" y="573"/>
+  <use xlink:href="#glyph0-8" x="401" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-32" x="418" y="573"/>
+  <use xlink:href="#glyph0-34" x="426" y="573"/>
+  <use xlink:href="#glyph0-15" x="434" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-35" x="458" y="573"/>
+  <use xlink:href="#glyph0-18" x="466" y="573"/>
+  <use xlink:href="#glyph0-11" x="471" y="573"/>
+</g>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:1;">
+  <use xlink:href="#glyph0-31" x="491" y="573"/>
+  <use xlink:href="#glyph0-36" x="500" y="573"/>
+  <use xlink:href="#glyph0-16" x="507" y="573"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern81);" d="M 264 492 L 280 492 L 280 508 L 264 508 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 287 490 L 523 490 L 523 511 L 287 511 Z M 287 490 L 523 490 L 523 511 L 287 511 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-37" x="287" y="506"/>
+  <use xlink:href="#glyph0-12" x="291" y="506"/>
+  <use xlink:href="#glyph0-38" x="299" y="506"/>
+  <use xlink:href="#glyph0-39" x="306" y="506"/>
+  <use xlink:href="#glyph0-15" x="310" y="506"/>
+  <use xlink:href="#glyph0-8" x="318" y="506"/>
+  <use xlink:href="#glyph0-6" x="326" y="506"/>
+  <use xlink:href="#glyph0-40" x="334" y="506"/>
+  <use xlink:href="#glyph0-16" x="338" y="506"/>
+  <use xlink:href="#glyph0-11" x="344" y="506"/>
+  <use xlink:href="#glyph0-3" x="347" y="506"/>
+  <use xlink:href="#glyph0-6" x="359" y="506"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 224 613 L 257 613 L 257 627 L 224 627 Z M 224 613 L 257 613 L 257 627 L 224 627 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph3-1" x="224" y="624"/>
+  <use xlink:href="#glyph3-2" x="236" y="624"/>
+  <use xlink:href="#glyph3-3" x="243" y="624"/>
+  <use xlink:href="#glyph3-4" x="250" y="624"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern82);" d="M 509 453 L 525 453 L 525 469 L 509 469 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 532 448 L 575 448 L 575 474 L 532 474 Z M 532 448 L 575 448 L 575 474 L 532 474 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-22" x="532" y="466"/>
+  <use xlink:href="#glyph0-40" x="541" y="466"/>
+  <use xlink:href="#glyph0-8" x="545" y="466"/>
+  <use xlink:href="#glyph0-6" x="553" y="466"/>
+  <use xlink:href="#glyph0-38" x="561" y="466"/>
+  <use xlink:href="#glyph0-41" x="568" y="466"/>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern83);" d="M 586 453 L 602 453 L 602 469 L 586 469 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 609 448 L 659 448 L 659 474 L 609 474 Z M 609 448 L 659 448 L 659 474 L 609 474 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-19" x="609" y="466"/>
+  <use xlink:href="#glyph0-40" x="618" y="466"/>
+  <use xlink:href="#glyph0-8" x="622" y="466"/>
+  <use xlink:href="#glyph0-6" x="630" y="466"/>
+  <use xlink:href="#glyph0-38" x="638" y="466"/>
+  <use xlink:href="#glyph0-41" x="645" y="466"/>
+  <use xlink:href="#glyph0-5" x="652" y="466"/>
+</g>
+<g clip-path="url(#clip116)" clip-rule="nonzero">
+<g clip-path="url(#clip117)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear4);" d="M 263 446 L 499 446 L 499 475 L 263 475 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 263 449 C 263 447.894531 263.894531 447 265 447 L 497 447 C 498.105469 447 499 447.449219 499 448 L 499 474 C 499 475.105469 498.105469 476 497 476 L 265 476 C 263.894531 476 263 475.550781 263 475 Z M 259 442 L 503 442 L 503 479 L 259 479 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 263 450 C 263 448.894531 263.894531 448 265 448 L 497 448 C 498.105469 448 499 448.449219 499 449 L 499 475 C 499 476.105469 498.105469 477 497 477 L 265 477 C 263.894531 477 263 476.550781 263 476 Z M 259 442 L 503 442 L 503 479 L 259 479 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern84);" d="M 262 445 L 265 445 L 265 448 L 262 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern86);" d="M 265 445 L 497 445 L 497 448 L 265 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern88);" d="M 497 445 L 500 445 L 500 448 L 497 448 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern90);" d="M 262 448 L 265 448 L 265 473 L 262 473 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern92);" d="M 497 448 L 500 448 L 500 473 L 497 473 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern94);" d="M 262 473 L 265 473 L 265 477 L 262 477 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern96);" d="M 265 473 L 497 473 L 497 477 L 265 477 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern98);" d="M 497 473 L 500 473 L 500 477 L 497 477 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 223 454 L 257 454 L 257 468 L 223 468 Z M 223 454 L 257 454 L 257 468 L 223 468 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph3-5" x="223" y="465"/>
+  <use xlink:href="#glyph3-6" x="231" y="465"/>
+  <use xlink:href="#glyph3-7" x="238" y="465"/>
+  <use xlink:href="#glyph3-8" x="243" y="465"/>
+  <use xlink:href="#glyph3-9" x="250" y="465"/>
+</g>
+<g clip-path="url(#clip133)" clip-rule="nonzero">
+<g clip-path="url(#clip134)" clip-rule="nonzero">
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear5);" d="M 668 409 L 742 409 L 742 438 L 668 438 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern100);" d="M 667 408 L 670 408 L 670 411 L 667 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern102);" d="M 670 408 L 740 408 L 740 411 L 670 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern104);" d="M 740 408 L 743 408 L 743 411 L 740 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern106);" d="M 667 411 L 670 411 L 670 436 L 667 436 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern108);" d="M 740 411 L 743 411 L 743 436 L 740 436 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern110);" d="M 667 436 L 670 436 L 670 440 L 667 440 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern112);" d="M 670 436 L 740 436 L 740 440 L 670 440 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern114);" d="M 740 436 L 743 436 L 743 440 L 740 440 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 675 413 L 735 413 L 735 434 L 675 434 Z M 675 413 L 735 413 L 735 434 L 675 434 Z "/>
+<g style="fill:rgb(100%,100%,100%);fill-opacity:0.4;">
+  <use xlink:href="#glyph0-42" x="675" y="430"/>
+  <use xlink:href="#glyph0-6" x="685" y="430"/>
+  <use xlink:href="#glyph0-12" x="693" y="430"/>
+  <use xlink:href="#glyph0-6" x="701" y="430"/>
+  <use xlink:href="#glyph0-18" x="709" y="430"/>
+  <use xlink:href="#glyph0-36" x="714" y="430"/>
+  <use xlink:href="#glyph0-16" x="721" y="430"/>
+  <use xlink:href="#glyph0-6" x="727" y="430"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-42" x="675" y="429"/>
+  <use xlink:href="#glyph0-6" x="685" y="429"/>
+  <use xlink:href="#glyph0-12" x="693" y="429"/>
+  <use xlink:href="#glyph0-6" x="701" y="429"/>
+  <use xlink:href="#glyph0-18" x="709" y="429"/>
+  <use xlink:href="#glyph0-36" x="714" y="429"/>
+  <use xlink:href="#glyph0-16" x="721" y="429"/>
+  <use xlink:href="#glyph0-6" x="727" y="429"/>
+</g>
+<g clip-path="url(#clip150)" clip-rule="nonzero">
+<g clip-path="url(#clip151)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(100%,100%,100%);fill-opacity:1;stroke:none;"/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#linear6);" d="M 263 409 L 661 409 L 661 438 L 263 438 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.1;" d="M 263 412 C 263 410.894531 263.894531 410 265 410 L 659 410 C 660.105469 410 661 410.449219 661 411 L 661 437 C 661 438.105469 660.105469 439 659 439 L 265 439 C 263.894531 439 263 438.550781 263 438 Z M 259 405 L 665 405 L 665 442 L 259 442 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:0.04;" d="M 263 413 C 263 411.894531 263.894531 411 265 411 L 659 411 C 660.105469 411 661 411.449219 661 412 L 661 438 C 661 439.105469 660.105469 440 659 440 L 265 440 C 263.894531 440 263 439.550781 263 439 Z M 259 405 L 665 405 L 665 442 L 259 442 Z "/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern116);" d="M 262 408 L 265 408 L 265 411 L 262 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern118);" d="M 265 408 L 659 408 L 659 411 L 265 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern120);" d="M 659 408 L 662 408 L 662 411 L 659 411 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern122);" d="M 262 411 L 265 411 L 265 436 L 262 436 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern124);" d="M 659 411 L 662 411 L 662 436 L 659 436 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern126);" d="M 262 436 L 265 436 L 265 440 L 262 440 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern128);" d="M 265 436 L 659 436 L 659 440 L 265 440 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern130);" d="M 659 436 L 662 436 L 662 440 L 659 440 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-30" x="267" y="429"/>
+  <use xlink:href="#glyph0-19" x="275" y="429"/>
+  <use xlink:href="#glyph0-27" x="284" y="429"/>
+  <use xlink:href="#glyph0-20" x="293" y="429"/>
+  <use xlink:href="#glyph0-43" x="302" y="429"/>
+  <use xlink:href="#glyph0-21" x="307" y="429"/>
+  <use xlink:href="#glyph0-19" x="316" y="429"/>
+  <use xlink:href="#glyph0-30" x="325" y="429"/>
+  <use xlink:href="#glyph0-24" x="333" y="429"/>
+  <use xlink:href="#glyph0-36" x="342" y="429"/>
+  <use xlink:href="#glyph0-19" x="349" y="429"/>
+  <use xlink:href="#glyph0-27" x="358" y="429"/>
+  <use xlink:href="#glyph0-38" x="367" y="429"/>
+  <use xlink:href="#glyph0-43" x="374" y="429"/>
+  <use xlink:href="#glyph0-23" x="379" y="429"/>
+  <use xlink:href="#glyph0-26" x="388" y="429"/>
+  <use xlink:href="#glyph0-6" x="397" y="429"/>
+  <use xlink:href="#glyph0-25" x="405" y="429"/>
+  <use xlink:href="#glyph0-36" x="414" y="429"/>
+  <use xlink:href="#glyph0-44" x="421" y="429"/>
+  <use xlink:href="#glyph0-30" x="431" y="429"/>
+  <use xlink:href="#glyph0-19" x="439" y="429"/>
+  <use xlink:href="#glyph0-8" x="448" y="429"/>
+  <use xlink:href="#glyph0-43" x="456" y="429"/>
+  <use xlink:href="#glyph0-25" x="461" y="429"/>
+  <use xlink:href="#glyph0-6" x="470" y="429"/>
+  <use xlink:href="#glyph0-27" x="478" y="429"/>
+  <use xlink:href="#glyph0-8" x="487" y="429"/>
+  <use xlink:href="#glyph0-30" x="495" y="429"/>
+  <use xlink:href="#glyph0-25" x="503" y="429"/>
+  <use xlink:href="#glyph0-23" x="512" y="429"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;" d="M 176 417 L 257 417 L 257 431 L 176 431 Z M 176 417 L 257 417 L 257 431 L 176 431 Z "/>
+<g style="fill:rgb(46.666667%,46.666667%,46.666667%);fill-opacity:1;">
+  <use xlink:href="#glyph3-10" x="176" y="428"/>
+  <use xlink:href="#glyph3-2" x="184" y="428"/>
+  <use xlink:href="#glyph3-6" x="191" y="428"/>
+  <use xlink:href="#glyph3-7" x="198" y="428"/>
+  <use xlink:href="#glyph3-3" x="203" y="428"/>
+  <use xlink:href="#glyph3-8" x="210" y="428"/>
+  <use xlink:href="#glyph3-11" x="217" y="428"/>
+  <use xlink:href="#glyph3-9" x="220" y="428"/>
+  <use xlink:href="#glyph3-3" x="227" y="428"/>
+  <use xlink:href="#glyph3-12" x="234" y="428"/>
+  <use xlink:href="#glyph3-7" x="241" y="428"/>
+  <use xlink:href="#glyph3-3" x="246" y="428"/>
+  <use xlink:href="#glyph3-13" x="253" y="428"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 171 185 L 982 185 L 982 395 L 171 395 Z M 171 185 L 982 185 L 982 395 L 171 395 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-37" x="171" y="201"/>
+  <use xlink:href="#glyph0-43" x="175" y="201"/>
+  <use xlink:href="#glyph0-40" x="180" y="201"/>
+  <use xlink:href="#glyph0-45" x="184" y="201"/>
+  <use xlink:href="#glyph0-2" x="192" y="201"/>
+  <use xlink:href="#glyph0-15" x="200" y="201"/>
+  <use xlink:href="#glyph0-40" x="208" y="201"/>
+  <use xlink:href="#glyph0-18" x="212" y="201"/>
+  <use xlink:href="#glyph0-6" x="217" y="201"/>
+  <use xlink:href="#glyph0-38" x="225" y="201"/>
+  <use xlink:href="#glyph0-6" x="232" y="201"/>
+  <use xlink:href="#glyph0-11" x="240" y="201"/>
+  <use xlink:href="#glyph0-29" x="243" y="201"/>
+  <use xlink:href="#glyph0-6" x="250" y="201"/>
+  <use xlink:href="#glyph0-8" x="258" y="201"/>
+  <use xlink:href="#glyph0-40" x="266" y="201"/>
+  <use xlink:href="#glyph0-36" x="270" y="201"/>
+  <use xlink:href="#glyph0-40" x="277" y="201"/>
+  <use xlink:href="#glyph0-5" x="281" y="201"/>
+  <use xlink:href="#glyph0-6" x="288" y="201"/>
+  <use xlink:href="#glyph0-38" x="296" y="201"/>
+  <use xlink:href="#glyph0-18" x="303" y="201"/>
+  <use xlink:href="#glyph0-6" x="308" y="201"/>
+  <use xlink:href="#glyph0-16" x="316" y="201"/>
+  <use xlink:href="#glyph0-40" x="322" y="201"/>
+  <use xlink:href="#glyph0-43" x="326" y="201"/>
+  <use xlink:href="#glyph0-18" x="331" y="201"/>
+  <use xlink:href="#glyph0-2" x="336" y="201"/>
+  <use xlink:href="#glyph0-3" x="344" y="201"/>
+  <use xlink:href="#glyph0-40" x="356" y="201"/>
+  <use xlink:href="#glyph0-5" x="360" y="201"/>
+  <use xlink:href="#glyph0-2" x="367" y="201"/>
+  <use xlink:href="#glyph0-3" x="375" y="201"/>
+  <use xlink:href="#glyph0-6" x="387" y="201"/>
+  <use xlink:href="#glyph0-2" x="395" y="201"/>
+  <use xlink:href="#glyph0-12" x="403" y="201"/>
+  <use xlink:href="#glyph0-6" x="411" y="201"/>
+  <use xlink:href="#glyph0-46" x="419" y="201"/>
+  <use xlink:href="#glyph0-40" x="423" y="201"/>
+  <use xlink:href="#glyph0-6" x="427" y="201"/>
+  <use xlink:href="#glyph0-12" x="435" y="201"/>
+  <use xlink:href="#glyph0-16" x="443" y="201"/>
+  <use xlink:href="#glyph0-6" x="449" y="201"/>
+  <use xlink:href="#glyph0-18" x="457" y="201"/>
+  <use xlink:href="#glyph0-40" x="462" y="201"/>
+  <use xlink:href="#glyph0-11" x="466" y="201"/>
+  <use xlink:href="#glyph0-16" x="469" y="201"/>
+  <use xlink:href="#glyph0-40" x="475" y="201"/>
+  <use xlink:href="#glyph0-36" x="479" y="201"/>
+  <use xlink:href="#glyph0-5" x="486" y="201"/>
+  <use xlink:href="#glyph0-40" x="493" y="201"/>
+  <use xlink:href="#glyph0-16" x="497" y="201"/>
+  <use xlink:href="#glyph0-34" x="503" y="201"/>
+  <use xlink:href="#glyph0-6" x="511" y="201"/>
+  <use xlink:href="#glyph0-40" x="519" y="201"/>
+  <use xlink:href="#glyph0-47" x="523" y="201"/>
+  <use xlink:href="#glyph0-31" x="529" y="201"/>
+  <use xlink:href="#glyph0-34" x="538" y="201"/>
+  <use xlink:href="#glyph0-36" x="546" y="201"/>
+  <use xlink:href="#glyph0-18" x="553" y="201"/>
+  <use xlink:href="#glyph0-6" x="558" y="201"/>
+  <use xlink:href="#glyph0-8" x="566" y="201"/>
+  <use xlink:href="#glyph0-40" x="574" y="201"/>
+  <use xlink:href="#glyph0-5" x="578" y="201"/>
+  <use xlink:href="#glyph0-6" x="585" y="201"/>
+  <use xlink:href="#glyph0-38" x="593" y="201"/>
+  <use xlink:href="#glyph0-18" x="600" y="201"/>
+  <use xlink:href="#glyph0-6" x="605" y="201"/>
+  <use xlink:href="#glyph0-16" x="613" y="201"/>
+  <use xlink:href="#glyph0-47" x="619" y="201"/>
+  <use xlink:href="#glyph0-40" x="625" y="201"/>
+  <use xlink:href="#glyph0-36" x="629" y="201"/>
+  <use xlink:href="#glyph0-12" x="636" y="201"/>
+  <use xlink:href="#glyph0-8" x="644" y="201"/>
+  <use xlink:href="#glyph0-40" x="652" y="201"/>
+  <use xlink:href="#glyph0-11" x="656" y="201"/>
+  <use xlink:href="#glyph0-10" x="659" y="201"/>
+  <use xlink:href="#glyph0-12" x="667" y="201"/>
+  <use xlink:href="#glyph0-2" x="675" y="201"/>
+  <use xlink:href="#glyph0-18" x="683" y="201"/>
+  <use xlink:href="#glyph0-6" x="688" y="201"/>
+  <use xlink:href="#glyph0-40" x="696" y="201"/>
+  <use xlink:href="#glyph0-16" x="700" y="201"/>
+  <use xlink:href="#glyph0-34" x="706" y="201"/>
+  <use xlink:href="#glyph0-6" x="714" y="201"/>
+  <use xlink:href="#glyph0-40" x="722" y="201"/>
+  <use xlink:href="#glyph0-18" x="726" y="201"/>
+  <use xlink:href="#glyph0-6" x="731" y="201"/>
+  <use xlink:href="#glyph0-5" x="739" y="201"/>
+  <use xlink:href="#glyph0-16" x="746" y="201"/>
+  <use xlink:href="#glyph0-48" x="752" y="201"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-37" x="171" y="243"/>
+  <use xlink:href="#glyph0-43" x="175" y="243"/>
+  <use xlink:href="#glyph0-40" x="180" y="243"/>
+  <use xlink:href="#glyph0-45" x="184" y="243"/>
+  <use xlink:href="#glyph0-2" x="192" y="243"/>
+  <use xlink:href="#glyph0-15" x="200" y="243"/>
+  <use xlink:href="#glyph0-40" x="208" y="243"/>
+  <use xlink:href="#glyph0-49" x="212" y="243"/>
+  <use xlink:href="#glyph0-11" x="224" y="243"/>
+  <use xlink:href="#glyph0-5" x="227" y="243"/>
+  <use xlink:href="#glyph0-34" x="234" y="243"/>
+  <use xlink:href="#glyph0-40" x="242" y="243"/>
+  <use xlink:href="#glyph0-16" x="246" y="243"/>
+  <use xlink:href="#glyph0-2" x="252" y="243"/>
+  <use xlink:href="#glyph0-40" x="260" y="243"/>
+  <use xlink:href="#glyph0-6" x="264" y="243"/>
+  <use xlink:href="#glyph0-3" x="272" y="243"/>
+  <use xlink:href="#glyph0-36" x="284" y="243"/>
+  <use xlink:href="#glyph0-11" x="291" y="243"/>
+  <use xlink:href="#glyph0-39" x="294" y="243"/>
+  <use xlink:href="#glyph0-50" x="298" y="243"/>
+  <use xlink:href="#glyph0-37" x="303" y="243"/>
+  <use xlink:href="#glyph0-14" x="307" y="243"/>
+  <use xlink:href="#glyph0-40" x="319" y="243"/>
+  <use xlink:href="#glyph0-36" x="323" y="243"/>
+  <use xlink:href="#glyph0-40" x="330" y="243"/>
+  <use xlink:href="#glyph0-5" x="334" y="243"/>
+  <use xlink:href="#glyph0-34" x="341" y="243"/>
+  <use xlink:href="#glyph0-36" x="349" y="243"/>
+  <use xlink:href="#glyph0-18" x="356" y="243"/>
+  <use xlink:href="#glyph0-6" x="361" y="243"/>
+  <use xlink:href="#glyph0-8" x="369" y="243"/>
+  <use xlink:href="#glyph0-40" x="377" y="243"/>
+  <use xlink:href="#glyph0-5" x="381" y="243"/>
+  <use xlink:href="#glyph0-6" x="388" y="243"/>
+  <use xlink:href="#glyph0-38" x="396" y="243"/>
+  <use xlink:href="#glyph0-18" x="403" y="243"/>
+  <use xlink:href="#glyph0-6" x="408" y="243"/>
+  <use xlink:href="#glyph0-16" x="416" y="243"/>
+  <use xlink:href="#glyph0-46" x="422" y="243"/>
+  <use xlink:href="#glyph0-40" x="426" y="243"/>
+  <use xlink:href="#glyph0-38" x="430" y="243"/>
+  <use xlink:href="#glyph0-39" x="437" y="243"/>
+  <use xlink:href="#glyph0-11" x="441" y="243"/>
+  <use xlink:href="#glyph0-38" x="444" y="243"/>
+  <use xlink:href="#glyph0-41" x="451" y="243"/>
+  <use xlink:href="#glyph0-40" x="458" y="243"/>
+  <use xlink:href="#glyph0-47" x="462" y="243"/>
+  <use xlink:href="#glyph0-42" x="468" y="243"/>
+  <use xlink:href="#glyph0-6" x="478" y="243"/>
+  <use xlink:href="#glyph0-12" x="486" y="243"/>
+  <use xlink:href="#glyph0-6" x="494" y="243"/>
+  <use xlink:href="#glyph0-18" x="502" y="243"/>
+  <use xlink:href="#glyph0-36" x="507" y="243"/>
+  <use xlink:href="#glyph0-16" x="514" y="243"/>
+  <use xlink:href="#glyph0-6" x="520" y="243"/>
+  <use xlink:href="#glyph0-47" x="528" y="243"/>
+  <use xlink:href="#glyph0-40" x="534" y="243"/>
+  <use xlink:href="#glyph0-16" x="538" y="243"/>
+  <use xlink:href="#glyph0-2" x="544" y="243"/>
+  <use xlink:href="#glyph0-40" x="552" y="243"/>
+  <use xlink:href="#glyph0-38" x="556" y="243"/>
+  <use xlink:href="#glyph0-18" x="563" y="243"/>
+  <use xlink:href="#glyph0-6" x="568" y="243"/>
+  <use xlink:href="#glyph0-36" x="576" y="243"/>
+  <use xlink:href="#glyph0-16" x="583" y="243"/>
+  <use xlink:href="#glyph0-6" x="589" y="243"/>
+  <use xlink:href="#glyph0-40" x="597" y="243"/>
+  <use xlink:href="#glyph0-2" x="601" y="243"/>
+  <use xlink:href="#glyph0-12" x="609" y="243"/>
+  <use xlink:href="#glyph0-6" x="617" y="243"/>
+  <use xlink:href="#glyph0-40" x="625" y="243"/>
+  <use xlink:href="#glyph0-36" x="629" y="243"/>
+  <use xlink:href="#glyph0-12" x="636" y="243"/>
+  <use xlink:href="#glyph0-8" x="644" y="243"/>
+  <use xlink:href="#glyph0-40" x="652" y="243"/>
+  <use xlink:href="#glyph0-5" x="656" y="243"/>
+  <use xlink:href="#glyph0-6" x="663" y="243"/>
+  <use xlink:href="#glyph0-12" x="671" y="243"/>
+  <use xlink:href="#glyph0-8" x="679" y="243"/>
+  <use xlink:href="#glyph0-40" x="687" y="243"/>
+  <use xlink:href="#glyph0-11" x="691" y="243"/>
+  <use xlink:href="#glyph0-16" x="694" y="243"/>
+  <use xlink:href="#glyph0-40" x="700" y="243"/>
+  <use xlink:href="#glyph0-16" x="704" y="243"/>
+  <use xlink:href="#glyph0-2" x="710" y="243"/>
+  <use xlink:href="#glyph0-40" x="718" y="243"/>
+  <use xlink:href="#glyph0-16" x="722" y="243"/>
+  <use xlink:href="#glyph0-34" x="728" y="243"/>
+  <use xlink:href="#glyph0-6" x="736" y="243"/>
+  <use xlink:href="#glyph0-3" x="744" y="243"/>
+  <use xlink:href="#glyph0-40" x="756" y="243"/>
+  <use xlink:href="#glyph0-2" x="760" y="243"/>
+  <use xlink:href="#glyph0-29" x="768" y="243"/>
+  <use xlink:href="#glyph0-6" x="775" y="243"/>
+  <use xlink:href="#glyph0-18" x="783" y="243"/>
+  <use xlink:href="#glyph0-40" x="788" y="243"/>
+  <use xlink:href="#glyph0-6" x="792" y="243"/>
+  <use xlink:href="#glyph0-3" x="800" y="243"/>
+  <use xlink:href="#glyph0-36" x="812" y="243"/>
+  <use xlink:href="#glyph0-11" x="819" y="243"/>
+  <use xlink:href="#glyph0-39" x="822" y="243"/>
+  <use xlink:href="#glyph0-40" x="826" y="243"/>
+  <use xlink:href="#glyph0-2" x="830" y="243"/>
+  <use xlink:href="#glyph0-18" x="838" y="243"/>
+  <use xlink:href="#glyph0-40" x="843" y="243"/>
+  <use xlink:href="#glyph0-37" x="847" y="243"/>
+  <use xlink:href="#glyph0-14" x="851" y="243"/>
+  <use xlink:href="#glyph0-48" x="863" y="243"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-37" x="171" y="285"/>
+  <use xlink:href="#glyph0-43" x="175" y="285"/>
+  <use xlink:href="#glyph0-40" x="180" y="285"/>
+  <use xlink:href="#glyph0-45" x="184" y="285"/>
+  <use xlink:href="#glyph0-2" x="192" y="285"/>
+  <use xlink:href="#glyph0-15" x="200" y="285"/>
+  <use xlink:href="#glyph0-40" x="208" y="285"/>
+  <use xlink:href="#glyph0-36" x="212" y="285"/>
+  <use xlink:href="#glyph0-18" x="219" y="285"/>
+  <use xlink:href="#glyph0-6" x="224" y="285"/>
+  <use xlink:href="#glyph0-40" x="232" y="285"/>
+  <use xlink:href="#glyph0-36" x="236" y="285"/>
+  <use xlink:href="#glyph0-10" x="243" y="285"/>
+  <use xlink:href="#glyph0-18" x="251" y="285"/>
+  <use xlink:href="#glyph0-6" x="256" y="285"/>
+  <use xlink:href="#glyph0-6" x="264" y="285"/>
+  <use xlink:href="#glyph0-11" x="272" y="285"/>
+  <use xlink:href="#glyph0-12" x="275" y="285"/>
+  <use xlink:href="#glyph0-10" x="283" y="285"/>
+  <use xlink:href="#glyph0-40" x="291" y="285"/>
+  <use xlink:href="#glyph0-15" x="295" y="285"/>
+  <use xlink:href="#glyph0-4" x="303" y="285"/>
+  <use xlink:href="#glyph0-2" x="311" y="285"/>
+  <use xlink:href="#glyph0-12" x="319" y="285"/>
+  <use xlink:href="#glyph0-40" x="327" y="285"/>
+  <use xlink:href="#glyph0-16" x="331" y="285"/>
+  <use xlink:href="#glyph0-34" x="337" y="285"/>
+  <use xlink:href="#glyph0-6" x="345" y="285"/>
+  <use xlink:href="#glyph0-40" x="353" y="285"/>
+  <use xlink:href="#glyph0-5" x="357" y="285"/>
+  <use xlink:href="#glyph0-34" x="364" y="285"/>
+  <use xlink:href="#glyph0-36" x="372" y="285"/>
+  <use xlink:href="#glyph0-18" x="379" y="285"/>
+  <use xlink:href="#glyph0-6" x="384" y="285"/>
+  <use xlink:href="#glyph0-8" x="392" y="285"/>
+  <use xlink:href="#glyph0-40" x="400" y="285"/>
+  <use xlink:href="#glyph0-5" x="404" y="285"/>
+  <use xlink:href="#glyph0-6" x="411" y="285"/>
+  <use xlink:href="#glyph0-38" x="419" y="285"/>
+  <use xlink:href="#glyph0-18" x="426" y="285"/>
+  <use xlink:href="#glyph0-6" x="431" y="285"/>
+  <use xlink:href="#glyph0-16" x="439" y="285"/>
+  <use xlink:href="#glyph0-40" x="445" y="285"/>
+  <use xlink:href="#glyph0-29" x="449" y="285"/>
+  <use xlink:href="#glyph0-11" x="456" y="285"/>
+  <use xlink:href="#glyph0-36" x="459" y="285"/>
+  <use xlink:href="#glyph0-40" x="466" y="285"/>
+  <use xlink:href="#glyph0-2" x="470" y="285"/>
+  <use xlink:href="#glyph0-16" x="478" y="285"/>
+  <use xlink:href="#glyph0-34" x="484" y="285"/>
+  <use xlink:href="#glyph0-6" x="492" y="285"/>
+  <use xlink:href="#glyph0-18" x="500" y="285"/>
+  <use xlink:href="#glyph0-40" x="505" y="285"/>
+  <use xlink:href="#glyph0-3" x="509" y="285"/>
+  <use xlink:href="#glyph0-6" x="521" y="285"/>
+  <use xlink:href="#glyph0-36" x="529" y="285"/>
+  <use xlink:href="#glyph0-12" x="536" y="285"/>
+  <use xlink:href="#glyph0-5" x="544" y="285"/>
+  <use xlink:href="#glyph0-46" x="551" y="285"/>
+  <use xlink:href="#glyph0-40" x="555" y="285"/>
+  <use xlink:href="#glyph0-16" x="559" y="285"/>
+  <use xlink:href="#glyph0-34" x="565" y="285"/>
+  <use xlink:href="#glyph0-6" x="573" y="285"/>
+  <use xlink:href="#glyph0-12" x="581" y="285"/>
+  <use xlink:href="#glyph0-40" x="589" y="285"/>
+  <use xlink:href="#glyph0-11" x="593" y="285"/>
+  <use xlink:href="#glyph0-16" x="596" y="285"/>
+  <use xlink:href="#glyph0-40" x="602" y="285"/>
+  <use xlink:href="#glyph0-38" x="606" y="285"/>
+  <use xlink:href="#glyph0-36" x="613" y="285"/>
+  <use xlink:href="#glyph0-12" x="620" y="285"/>
+  <use xlink:href="#glyph0-40" x="628" y="285"/>
+  <use xlink:href="#glyph0-30" x="632" y="285"/>
+  <use xlink:href="#glyph0-6" x="640" y="285"/>
+  <use xlink:href="#glyph0-40" x="648" y="285"/>
+  <use xlink:href="#glyph0-36" x="652" y="285"/>
+  <use xlink:href="#glyph0-40" x="659" y="285"/>
+  <use xlink:href="#glyph0-4" x="663" y="285"/>
+  <use xlink:href="#glyph0-34" x="671" y="285"/>
+  <use xlink:href="#glyph0-18" x="679" y="285"/>
+  <use xlink:href="#glyph0-36" x="684" y="285"/>
+  <use xlink:href="#glyph0-5" x="691" y="285"/>
+  <use xlink:href="#glyph0-6" x="698" y="285"/>
+  <use xlink:href="#glyph0-46" x="706" y="285"/>
+  <use xlink:href="#glyph0-40" x="710" y="285"/>
+  <use xlink:href="#glyph0-2" x="714" y="285"/>
+  <use xlink:href="#glyph0-18" x="722" y="285"/>
+  <use xlink:href="#glyph0-40" x="727" y="285"/>
+  <use xlink:href="#glyph0-38" x="731" y="285"/>
+  <use xlink:href="#glyph0-36" x="738" y="285"/>
+  <use xlink:href="#glyph0-12" x="745" y="285"/>
+  <use xlink:href="#glyph0-40" x="753" y="285"/>
+  <use xlink:href="#glyph0-30" x="757" y="285"/>
+  <use xlink:href="#glyph0-6" x="765" y="285"/>
+  <use xlink:href="#glyph0-40" x="773" y="285"/>
+  <use xlink:href="#glyph0-10" x="777" y="285"/>
+  <use xlink:href="#glyph0-6" x="785" y="285"/>
+  <use xlink:href="#glyph0-12" x="793" y="285"/>
+  <use xlink:href="#glyph0-6" x="801" y="285"/>
+  <use xlink:href="#glyph0-18" x="809" y="285"/>
+  <use xlink:href="#glyph0-36" x="814" y="285"/>
+  <use xlink:href="#glyph0-16" x="821" y="285"/>
+  <use xlink:href="#glyph0-6" x="827" y="285"/>
+  <use xlink:href="#glyph0-8" x="835" y="285"/>
+  <use xlink:href="#glyph0-40" x="843" y="285"/>
+  <use xlink:href="#glyph0-30" x="847" y="285"/>
+  <use xlink:href="#glyph0-45" x="855" y="285"/>
+  <use xlink:href="#glyph0-40" x="863" y="285"/>
+  <use xlink:href="#glyph0-5" x="867" y="285"/>
+  <use xlink:href="#glyph0-34" x="874" y="285"/>
+  <use xlink:href="#glyph0-15" x="882" y="285"/>
+  <use xlink:href="#glyph0-51" x="890" y="285"/>
+  <use xlink:href="#glyph0-11" x="904" y="285"/>
+  <use xlink:href="#glyph0-12" x="907" y="285"/>
+  <use xlink:href="#glyph0-10" x="915" y="285"/>
+  <use xlink:href="#glyph0-40" x="923" y="285"/>
+  <use xlink:href="#glyph0-2" x="927" y="285"/>
+  <use xlink:href="#glyph0-12" x="935" y="285"/>
+  <use xlink:href="#glyph0-6" x="943" y="285"/>
+  <use xlink:href="#glyph0-40" x="951" y="285"/>
+  <use xlink:href="#glyph0-2" x="955" y="285"/>
+  <use xlink:href="#glyph0-18" x="963" y="285"/>
+  <use xlink:href="#glyph0-40" x="968" y="285"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-16" x="171" y="306"/>
+  <use xlink:href="#glyph0-49" x="177" y="306"/>
+  <use xlink:href="#glyph0-2" x="189" y="306"/>
+  <use xlink:href="#glyph0-40" x="197" y="306"/>
+  <use xlink:href="#glyph0-8" x="201" y="306"/>
+  <use xlink:href="#glyph0-6" x="209" y="306"/>
+  <use xlink:href="#glyph0-38" x="217" y="306"/>
+  <use xlink:href="#glyph0-41" x="224" y="306"/>
+  <use xlink:href="#glyph0-5" x="231" y="306"/>
+  <use xlink:href="#glyph0-40" x="238" y="306"/>
+  <use xlink:href="#glyph0-2" x="242" y="306"/>
+  <use xlink:href="#glyph0-43" x="250" y="306"/>
+  <use xlink:href="#glyph0-40" x="255" y="306"/>
+  <use xlink:href="#glyph0-38" x="259" y="306"/>
+  <use xlink:href="#glyph0-36" x="266" y="306"/>
+  <use xlink:href="#glyph0-18" x="273" y="306"/>
+  <use xlink:href="#glyph0-8" x="278" y="306"/>
+  <use xlink:href="#glyph0-5" x="286" y="306"/>
+  <use xlink:href="#glyph0-40" x="293" y="306"/>
+  <use xlink:href="#glyph0-16" x="297" y="306"/>
+  <use xlink:href="#glyph0-2" x="303" y="306"/>
+  <use xlink:href="#glyph0-10" x="311" y="306"/>
+  <use xlink:href="#glyph0-6" x="319" y="306"/>
+  <use xlink:href="#glyph0-16" x="327" y="306"/>
+  <use xlink:href="#glyph0-34" x="333" y="306"/>
+  <use xlink:href="#glyph0-6" x="341" y="306"/>
+  <use xlink:href="#glyph0-18" x="349" y="306"/>
+  <use xlink:href="#glyph0-46" x="354" y="306"/>
+  <use xlink:href="#glyph0-40" x="358" y="306"/>
+  <use xlink:href="#glyph0-5" x="362" y="306"/>
+  <use xlink:href="#glyph0-4" x="369" y="306"/>
+  <use xlink:href="#glyph0-39" x="377" y="306"/>
+  <use xlink:href="#glyph0-11" x="381" y="306"/>
+  <use xlink:href="#glyph0-16" x="384" y="306"/>
+  <use xlink:href="#glyph0-16" x="390" y="306"/>
+  <use xlink:href="#glyph0-11" x="396" y="306"/>
+  <use xlink:href="#glyph0-12" x="399" y="306"/>
+  <use xlink:href="#glyph0-10" x="407" y="306"/>
+  <use xlink:href="#glyph0-40" x="415" y="306"/>
+  <use xlink:href="#glyph0-16" x="419" y="306"/>
+  <use xlink:href="#glyph0-34" x="425" y="306"/>
+  <use xlink:href="#glyph0-6" x="433" y="306"/>
+  <use xlink:href="#glyph0-40" x="441" y="306"/>
+  <use xlink:href="#glyph0-5" x="445" y="306"/>
+  <use xlink:href="#glyph0-16" x="452" y="306"/>
+  <use xlink:href="#glyph0-36" x="458" y="306"/>
+  <use xlink:href="#glyph0-38" x="465" y="306"/>
+  <use xlink:href="#glyph0-41" x="472" y="306"/>
+  <use xlink:href="#glyph0-40" x="479" y="306"/>
+  <use xlink:href="#glyph0-18" x="483" y="306"/>
+  <use xlink:href="#glyph0-2" x="488" y="306"/>
+  <use xlink:href="#glyph0-15" x="496" y="306"/>
+  <use xlink:href="#glyph0-10" x="504" y="306"/>
+  <use xlink:href="#glyph0-34" x="512" y="306"/>
+  <use xlink:href="#glyph0-39" x="520" y="306"/>
+  <use xlink:href="#glyph0-45" x="524" y="306"/>
+  <use xlink:href="#glyph0-40" x="532" y="306"/>
+  <use xlink:href="#glyph0-11" x="536" y="306"/>
+  <use xlink:href="#glyph0-12" x="539" y="306"/>
+  <use xlink:href="#glyph0-40" x="547" y="306"/>
+  <use xlink:href="#glyph0-34" x="551" y="306"/>
+  <use xlink:href="#glyph0-36" x="559" y="306"/>
+  <use xlink:href="#glyph0-39" x="566" y="306"/>
+  <use xlink:href="#glyph0-43" x="570" y="306"/>
+  <use xlink:href="#glyph0-40" x="575" y="306"/>
+  <use xlink:href="#glyph0-36" x="579" y="306"/>
+  <use xlink:href="#glyph0-12" x="586" y="306"/>
+  <use xlink:href="#glyph0-8" x="594" y="306"/>
+  <use xlink:href="#glyph0-40" x="602" y="306"/>
+  <use xlink:href="#glyph0-10" x="606" y="306"/>
+  <use xlink:href="#glyph0-11" x="614" y="306"/>
+  <use xlink:href="#glyph0-29" x="617" y="306"/>
+  <use xlink:href="#glyph0-11" x="624" y="306"/>
+  <use xlink:href="#glyph0-12" x="627" y="306"/>
+  <use xlink:href="#glyph0-10" x="635" y="306"/>
+  <use xlink:href="#glyph0-40" x="643" y="306"/>
+  <use xlink:href="#glyph0-2" x="647" y="306"/>
+  <use xlink:href="#glyph0-12" x="655" y="306"/>
+  <use xlink:href="#glyph0-6" x="663" y="306"/>
+  <use xlink:href="#glyph0-40" x="671" y="306"/>
+  <use xlink:href="#glyph0-34" x="675" y="306"/>
+  <use xlink:href="#glyph0-36" x="683" y="306"/>
+  <use xlink:href="#glyph0-39" x="690" y="306"/>
+  <use xlink:href="#glyph0-43" x="694" y="306"/>
+  <use xlink:href="#glyph0-40" x="699" y="306"/>
+  <use xlink:href="#glyph0-16" x="703" y="306"/>
+  <use xlink:href="#glyph0-2" x="709" y="306"/>
+  <use xlink:href="#glyph0-40" x="717" y="306"/>
+  <use xlink:href="#glyph0-6" x="721" y="306"/>
+  <use xlink:href="#glyph0-36" x="729" y="306"/>
+  <use xlink:href="#glyph0-38" x="736" y="306"/>
+  <use xlink:href="#glyph0-34" x="743" y="306"/>
+  <use xlink:href="#glyph0-40" x="751" y="306"/>
+  <use xlink:href="#glyph0-4" x="755" y="306"/>
+  <use xlink:href="#glyph0-6" x="763" y="306"/>
+  <use xlink:href="#glyph0-18" x="771" y="306"/>
+  <use xlink:href="#glyph0-5" x="776" y="306"/>
+  <use xlink:href="#glyph0-2" x="783" y="306"/>
+  <use xlink:href="#glyph0-12" x="791" y="306"/>
+  <use xlink:href="#glyph0-48" x="799" y="306"/>
+  <use xlink:href="#glyph0-40" x="803" y="306"/>
+  <use xlink:href="#glyph0-52" x="807" y="306"/>
+  <use xlink:href="#glyph0-53" x="812" y="306"/>
+  <use xlink:href="#glyph0-18" x="823" y="306"/>
+  <use xlink:href="#glyph0-40" x="828" y="306"/>
+  <use xlink:href="#glyph0-45" x="832" y="306"/>
+  <use xlink:href="#glyph0-2" x="840" y="306"/>
+  <use xlink:href="#glyph0-15" x="848" y="306"/>
+  <use xlink:href="#glyph0-40" x="856" y="306"/>
+  <use xlink:href="#glyph0-38" x="860" y="306"/>
+  <use xlink:href="#glyph0-36" x="867" y="306"/>
+  <use xlink:href="#glyph0-12" x="874" y="306"/>
+  <use xlink:href="#glyph0-40" x="882" y="306"/>
+  <use xlink:href="#glyph0-8" x="886" y="306"/>
+  <use xlink:href="#glyph0-2" x="894" y="306"/>
+  <use xlink:href="#glyph0-40" x="902" y="306"/>
+  <use xlink:href="#glyph0-30" x="906" y="306"/>
+  <use xlink:href="#glyph0-2" x="914" y="306"/>
+  <use xlink:href="#glyph0-16" x="922" y="306"/>
+  <use xlink:href="#glyph0-34" x="928" y="306"/>
+  <use xlink:href="#glyph0-40" x="936" y="306"/>
+  <use xlink:href="#glyph0-16" x="940" y="306"/>
+  <use xlink:href="#glyph0-34" x="946" y="306"/>
+  <use xlink:href="#glyph0-6" x="954" y="306"/>
+  <use xlink:href="#glyph0-40" x="962" y="306"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-38" x="171" y="327"/>
+  <use xlink:href="#glyph0-36" x="178" y="327"/>
+  <use xlink:href="#glyph0-18" x="185" y="327"/>
+  <use xlink:href="#glyph0-8" x="190" y="327"/>
+  <use xlink:href="#glyph0-40" x="198" y="327"/>
+  <use xlink:href="#glyph0-16" x="202" y="327"/>
+  <use xlink:href="#glyph0-18" x="208" y="327"/>
+  <use xlink:href="#glyph0-11" x="213" y="327"/>
+  <use xlink:href="#glyph0-38" x="216" y="327"/>
+  <use xlink:href="#glyph0-41" x="223" y="327"/>
+  <use xlink:href="#glyph0-40" x="230" y="327"/>
+  <use xlink:href="#glyph0-36" x="234" y="327"/>
+  <use xlink:href="#glyph0-12" x="241" y="327"/>
+  <use xlink:href="#glyph0-8" x="249" y="327"/>
+  <use xlink:href="#glyph0-40" x="257" y="327"/>
+  <use xlink:href="#glyph0-34" x="261" y="327"/>
+  <use xlink:href="#glyph0-36" x="269" y="327"/>
+  <use xlink:href="#glyph0-29" x="276" y="327"/>
+  <use xlink:href="#glyph0-6" x="283" y="327"/>
+  <use xlink:href="#glyph0-40" x="291" y="327"/>
+  <use xlink:href="#glyph0-36" x="295" y="327"/>
+  <use xlink:href="#glyph0-40" x="302" y="327"/>
+  <use xlink:href="#glyph0-4" x="306" y="327"/>
+  <use xlink:href="#glyph0-34" x="314" y="327"/>
+  <use xlink:href="#glyph0-18" x="322" y="327"/>
+  <use xlink:href="#glyph0-36" x="327" y="327"/>
+  <use xlink:href="#glyph0-5" x="334" y="327"/>
+  <use xlink:href="#glyph0-6" x="341" y="327"/>
+  <use xlink:href="#glyph0-48" x="349" y="327"/>
+  <use xlink:href="#glyph0-54" x="353" y="327"/>
+  <use xlink:href="#glyph0-40" x="358" y="327"/>
+  <use xlink:href="#glyph0-7" x="362" y="327"/>
+  <use xlink:href="#glyph0-8" x="371" y="327"/>
+  <use xlink:href="#glyph0-8" x="379" y="327"/>
+  <use xlink:href="#glyph0-11" x="387" y="327"/>
+  <use xlink:href="#glyph0-16" x="390" y="327"/>
+  <use xlink:href="#glyph0-11" x="396" y="327"/>
+  <use xlink:href="#glyph0-2" x="399" y="327"/>
+  <use xlink:href="#glyph0-12" x="407" y="327"/>
+  <use xlink:href="#glyph0-36" x="415" y="327"/>
+  <use xlink:href="#glyph0-39" x="422" y="327"/>
+  <use xlink:href="#glyph0-39" x="426" y="327"/>
+  <use xlink:href="#glyph0-45" x="430" y="327"/>
+  <use xlink:href="#glyph0-46" x="438" y="327"/>
+  <use xlink:href="#glyph0-40" x="442" y="327"/>
+  <use xlink:href="#glyph0-11" x="446" y="327"/>
+  <use xlink:href="#glyph0-16" x="449" y="327"/>
+  <use xlink:href="#glyph0-55" x="455" y="327"/>
+  <use xlink:href="#glyph0-5" x="458" y="327"/>
+  <use xlink:href="#glyph0-40" x="465" y="327"/>
+  <use xlink:href="#glyph0-4" x="469" y="327"/>
+  <use xlink:href="#glyph0-2" x="477" y="327"/>
+  <use xlink:href="#glyph0-5" x="485" y="327"/>
+  <use xlink:href="#glyph0-5" x="492" y="327"/>
+  <use xlink:href="#glyph0-11" x="499" y="327"/>
+  <use xlink:href="#glyph0-30" x="502" y="327"/>
+  <use xlink:href="#glyph0-39" x="510" y="327"/>
+  <use xlink:href="#glyph0-6" x="514" y="327"/>
+  <use xlink:href="#glyph0-40" x="522" y="327"/>
+  <use xlink:href="#glyph0-16" x="526" y="327"/>
+  <use xlink:href="#glyph0-2" x="532" y="327"/>
+  <use xlink:href="#glyph0-40" x="540" y="327"/>
+  <use xlink:href="#glyph0-15" x="544" y="327"/>
+  <use xlink:href="#glyph0-5" x="552" y="327"/>
+  <use xlink:href="#glyph0-6" x="559" y="327"/>
+  <use xlink:href="#glyph0-40" x="567" y="327"/>
+  <use xlink:href="#glyph0-16" x="571" y="327"/>
+  <use xlink:href="#glyph0-34" x="577" y="327"/>
+  <use xlink:href="#glyph0-6" x="585" y="327"/>
+  <use xlink:href="#glyph0-40" x="593" y="327"/>
+  <use xlink:href="#glyph0-16" x="597" y="327"/>
+  <use xlink:href="#glyph0-11" x="603" y="327"/>
+  <use xlink:href="#glyph0-3" x="606" y="327"/>
+  <use xlink:href="#glyph0-6" x="618" y="327"/>
+  <use xlink:href="#glyph0-40" x="626" y="327"/>
+  <use xlink:href="#glyph0-2" x="630" y="327"/>
+  <use xlink:href="#glyph0-43" x="638" y="327"/>
+  <use xlink:href="#glyph0-40" x="643" y="327"/>
+  <use xlink:href="#glyph0-36" x="647" y="327"/>
+  <use xlink:href="#glyph0-40" x="654" y="327"/>
+  <use xlink:href="#glyph0-3" x="658" y="327"/>
+  <use xlink:href="#glyph0-6" x="670" y="327"/>
+  <use xlink:href="#glyph0-6" x="678" y="327"/>
+  <use xlink:href="#glyph0-16" x="686" y="327"/>
+  <use xlink:href="#glyph0-11" x="692" y="327"/>
+  <use xlink:href="#glyph0-12" x="695" y="327"/>
+  <use xlink:href="#glyph0-10" x="703" y="327"/>
+  <use xlink:href="#glyph0-40" x="711" y="327"/>
+  <use xlink:href="#glyph0-36" x="715" y="327"/>
+  <use xlink:href="#glyph0-5" x="722" y="327"/>
+  <use xlink:href="#glyph0-40" x="729" y="327"/>
+  <use xlink:href="#glyph0-36" x="733" y="327"/>
+  <use xlink:href="#glyph0-40" x="740" y="327"/>
+  <use xlink:href="#glyph0-5" x="744" y="327"/>
+  <use xlink:href="#glyph0-36" x="751" y="327"/>
+  <use xlink:href="#glyph0-39" x="758" y="327"/>
+  <use xlink:href="#glyph0-16" x="762" y="327"/>
+  <use xlink:href="#glyph0-40" x="768" y="327"/>
+  <use xlink:href="#glyph0-11" x="772" y="327"/>
+  <use xlink:href="#glyph0-43" x="775" y="327"/>
+  <use xlink:href="#glyph0-40" x="780" y="327"/>
+  <use xlink:href="#glyph0-45" x="784" y="327"/>
+  <use xlink:href="#glyph0-2" x="792" y="327"/>
+  <use xlink:href="#glyph0-15" x="800" y="327"/>
+  <use xlink:href="#glyph0-40" x="808" y="327"/>
+  <use xlink:href="#glyph0-36" x="812" y="327"/>
+  <use xlink:href="#glyph0-10" x="819" y="327"/>
+  <use xlink:href="#glyph0-18" x="827" y="327"/>
+  <use xlink:href="#glyph0-6" x="832" y="327"/>
+  <use xlink:href="#glyph0-6" x="840" y="327"/>
+  <use xlink:href="#glyph0-8" x="848" y="327"/>
+  <use xlink:href="#glyph0-40" x="856" y="327"/>
+  <use xlink:href="#glyph0-2" x="860" y="327"/>
+  <use xlink:href="#glyph0-12" x="868" y="327"/>
+  <use xlink:href="#glyph0-40" x="876" y="327"/>
+  <use xlink:href="#glyph0-11" x="880" y="327"/>
+  <use xlink:href="#glyph0-16" x="883" y="327"/>
+  <use xlink:href="#glyph0-48" x="889" y="327"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-33" x="171" y="369"/>
+  <use xlink:href="#glyph0-34" x="185" y="369"/>
+  <use xlink:href="#glyph0-6" x="193" y="369"/>
+  <use xlink:href="#glyph0-12" x="201" y="369"/>
+  <use xlink:href="#glyph0-40" x="209" y="369"/>
+  <use xlink:href="#glyph0-6" x="213" y="369"/>
+  <use xlink:href="#glyph0-12" x="221" y="369"/>
+  <use xlink:href="#glyph0-16" x="229" y="369"/>
+  <use xlink:href="#glyph0-6" x="235" y="369"/>
+  <use xlink:href="#glyph0-18" x="243" y="369"/>
+  <use xlink:href="#glyph0-11" x="248" y="369"/>
+  <use xlink:href="#glyph0-12" x="251" y="369"/>
+  <use xlink:href="#glyph0-10" x="259" y="369"/>
+  <use xlink:href="#glyph0-40" x="267" y="369"/>
+  <use xlink:href="#glyph0-38" x="271" y="369"/>
+  <use xlink:href="#glyph0-36" x="278" y="369"/>
+  <use xlink:href="#glyph0-18" x="285" y="369"/>
+  <use xlink:href="#glyph0-8" x="290" y="369"/>
+  <use xlink:href="#glyph0-5" x="298" y="369"/>
+  <use xlink:href="#glyph0-40" x="305" y="369"/>
+  <use xlink:href="#glyph0-6" x="309" y="369"/>
+  <use xlink:href="#glyph0-12" x="317" y="369"/>
+  <use xlink:href="#glyph0-16" x="325" y="369"/>
+  <use xlink:href="#glyph0-6" x="331" y="369"/>
+  <use xlink:href="#glyph0-18" x="339" y="369"/>
+  <use xlink:href="#glyph0-40" x="344" y="369"/>
+  <use xlink:href="#glyph0-16" x="348" y="369"/>
+  <use xlink:href="#glyph0-34" x="354" y="369"/>
+  <use xlink:href="#glyph0-6" x="362" y="369"/>
+  <use xlink:href="#glyph0-40" x="370" y="369"/>
+  <use xlink:href="#glyph0-12" x="374" y="369"/>
+  <use xlink:href="#glyph0-15" x="382" y="369"/>
+  <use xlink:href="#glyph0-3" x="390" y="369"/>
+  <use xlink:href="#glyph0-30" x="402" y="369"/>
+  <use xlink:href="#glyph0-6" x="410" y="369"/>
+  <use xlink:href="#glyph0-18" x="418" y="369"/>
+  <use xlink:href="#glyph0-40" x="423" y="369"/>
+  <use xlink:href="#glyph0-2" x="427" y="369"/>
+  <use xlink:href="#glyph0-18" x="435" y="369"/>
+  <use xlink:href="#glyph0-40" x="440" y="369"/>
+  <use xlink:href="#glyph0-43" x="444" y="369"/>
+  <use xlink:href="#glyph0-36" x="449" y="369"/>
+  <use xlink:href="#glyph0-38" x="456" y="369"/>
+  <use xlink:href="#glyph0-6" x="463" y="369"/>
+  <use xlink:href="#glyph0-40" x="471" y="369"/>
+  <use xlink:href="#glyph0-2" x="475" y="369"/>
+  <use xlink:href="#glyph0-43" x="483" y="369"/>
+  <use xlink:href="#glyph0-40" x="488" y="369"/>
+  <use xlink:href="#glyph0-16" x="492" y="369"/>
+  <use xlink:href="#glyph0-34" x="498" y="369"/>
+  <use xlink:href="#glyph0-6" x="506" y="369"/>
+  <use xlink:href="#glyph0-40" x="514" y="369"/>
+  <use xlink:href="#glyph0-38" x="518" y="369"/>
+  <use xlink:href="#glyph0-36" x="525" y="369"/>
+  <use xlink:href="#glyph0-18" x="532" y="369"/>
+  <use xlink:href="#glyph0-8" x="537" y="369"/>
+  <use xlink:href="#glyph0-40" x="545" y="369"/>
+  <use xlink:href="#glyph0-56" x="549" y="369"/>
+  <use xlink:href="#glyph0-18" x="556" y="369"/>
+  <use xlink:href="#glyph0-5" x="561" y="369"/>
+  <use xlink:href="#glyph0-16" x="568" y="369"/>
+  <use xlink:href="#glyph0-46" x="574" y="369"/>
+  <use xlink:href="#glyph0-40" x="578" y="369"/>
+  <use xlink:href="#glyph0-36" x="582" y="369"/>
+  <use xlink:href="#glyph0-12" x="589" y="369"/>
+  <use xlink:href="#glyph0-8" x="597" y="369"/>
+  <use xlink:href="#glyph0-40" x="605" y="369"/>
+  <use xlink:href="#glyph0-16" x="609" y="369"/>
+  <use xlink:href="#glyph0-34" x="615" y="369"/>
+  <use xlink:href="#glyph0-6" x="623" y="369"/>
+  <use xlink:href="#glyph0-12" x="631" y="369"/>
+  <use xlink:href="#glyph0-40" x="639" y="369"/>
+  <use xlink:href="#glyph0-16" x="643" y="369"/>
+  <use xlink:href="#glyph0-34" x="649" y="369"/>
+  <use xlink:href="#glyph0-6" x="657" y="369"/>
+  <use xlink:href="#glyph0-40" x="665" y="369"/>
+  <use xlink:href="#glyph0-5" x="669" y="369"/>
+  <use xlink:href="#glyph0-15" x="676" y="369"/>
+  <use xlink:href="#glyph0-11" x="684" y="369"/>
+  <use xlink:href="#glyph0-16" x="687" y="369"/>
+  <use xlink:href="#glyph0-6" x="693" y="369"/>
+  <use xlink:href="#glyph0-40" x="701" y="369"/>
+  <use xlink:href="#glyph0-57" x="705" y="369"/>
+  <use xlink:href="#glyph0-40" x="711" y="369"/>
+  <use xlink:href="#glyph0-30" x="715" y="369"/>
+  <use xlink:href="#glyph0-2" x="723" y="369"/>
+  <use xlink:href="#glyph0-16" x="731" y="369"/>
+  <use xlink:href="#glyph0-34" x="737" y="369"/>
+  <use xlink:href="#glyph0-40" x="745" y="369"/>
+  <use xlink:href="#glyph0-36" x="749" y="369"/>
+  <use xlink:href="#glyph0-5" x="756" y="369"/>
+  <use xlink:href="#glyph0-40" x="763" y="369"/>
+  <use xlink:href="#glyph0-5" x="767" y="369"/>
+  <use xlink:href="#glyph0-11" x="774" y="369"/>
+  <use xlink:href="#glyph0-12" x="777" y="369"/>
+  <use xlink:href="#glyph0-10" x="785" y="369"/>
+  <use xlink:href="#glyph0-39" x="793" y="369"/>
+  <use xlink:href="#glyph0-6" x="797" y="369"/>
+  <use xlink:href="#glyph0-40" x="805" y="369"/>
+  <use xlink:href="#glyph0-39" x="809" y="369"/>
+  <use xlink:href="#glyph0-6" x="813" y="369"/>
+  <use xlink:href="#glyph0-16" x="821" y="369"/>
+  <use xlink:href="#glyph0-16" x="827" y="369"/>
+  <use xlink:href="#glyph0-6" x="833" y="369"/>
+  <use xlink:href="#glyph0-18" x="841" y="369"/>
+  <use xlink:href="#glyph0-5" x="846" y="369"/>
+  <use xlink:href="#glyph0-48" x="853" y="369"/>
+  <use xlink:href="#glyph0-40" x="857" y="369"/>
+  <use xlink:href="#glyph0-31" x="861" y="369"/>
+  <use xlink:href="#glyph0-2" x="870" y="369"/>
+  <use xlink:href="#glyph0-40" x="878" y="369"/>
+  <use xlink:href="#glyph0-16" x="882" y="369"/>
+  <use xlink:href="#glyph0-34" x="888" y="369"/>
+  <use xlink:href="#glyph0-6" x="896" y="369"/>
+  <use xlink:href="#glyph0-40" x="904" y="369"/>
+  <use xlink:href="#glyph0-16" x="908" y="369"/>
+  <use xlink:href="#glyph0-34" x="914" y="369"/>
+  <use xlink:href="#glyph0-18" x="922" y="369"/>
+  <use xlink:href="#glyph0-6" x="927" y="369"/>
+  <use xlink:href="#glyph0-6" x="935" y="369"/>
+  <use xlink:href="#glyph0-40" x="943" y="369"/>
+  <use xlink:href="#glyph0-2" x="947" y="369"/>
+  <use xlink:href="#glyph0-43" x="955" y="369"/>
+  <use xlink:href="#glyph0-40" x="960" y="369"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-8" x="171" y="390"/>
+  <use xlink:href="#glyph0-11" x="179" y="390"/>
+  <use xlink:href="#glyph0-3" x="182" y="390"/>
+  <use xlink:href="#glyph0-2" x="194" y="390"/>
+  <use xlink:href="#glyph0-12" x="202" y="390"/>
+  <use xlink:href="#glyph0-8" x="210" y="390"/>
+  <use xlink:href="#glyph0-5" x="218" y="390"/>
+  <use xlink:href="#glyph0-40" x="225" y="390"/>
+  <use xlink:href="#glyph0-11" x="229" y="390"/>
+  <use xlink:href="#glyph0-5" x="232" y="390"/>
+  <use xlink:href="#glyph0-40" x="239" y="390"/>
+  <use xlink:href="#glyph0-55" x="243" y="390"/>
+  <use xlink:href="#glyph0-21" x="246" y="390"/>
+  <use xlink:href="#glyph0-8" x="255" y="390"/>
+  <use xlink:href="#glyph0-55" x="263" y="390"/>
+  <use xlink:href="#glyph0-40" x="266" y="390"/>
+  <use xlink:href="#glyph0-36" x="270" y="390"/>
+  <use xlink:href="#glyph0-12" x="277" y="390"/>
+  <use xlink:href="#glyph0-8" x="285" y="390"/>
+  <use xlink:href="#glyph0-40" x="293" y="390"/>
+  <use xlink:href="#glyph0-16" x="297" y="390"/>
+  <use xlink:href="#glyph0-34" x="303" y="390"/>
+  <use xlink:href="#glyph0-6" x="311" y="390"/>
+  <use xlink:href="#glyph0-40" x="319" y="390"/>
+  <use xlink:href="#glyph0-36" x="323" y="390"/>
+  <use xlink:href="#glyph0-38" x="330" y="390"/>
+  <use xlink:href="#glyph0-6" x="337" y="390"/>
+  <use xlink:href="#glyph0-40" x="345" y="390"/>
+  <use xlink:href="#glyph0-2" x="349" y="390"/>
+  <use xlink:href="#glyph0-43" x="357" y="390"/>
+  <use xlink:href="#glyph0-40" x="362" y="390"/>
+  <use xlink:href="#glyph0-5" x="366" y="390"/>
+  <use xlink:href="#glyph0-4" x="373" y="390"/>
+  <use xlink:href="#glyph0-36" x="381" y="390"/>
+  <use xlink:href="#glyph0-8" x="388" y="390"/>
+  <use xlink:href="#glyph0-6" x="396" y="390"/>
+  <use xlink:href="#glyph0-5" x="404" y="390"/>
+  <use xlink:href="#glyph0-40" x="411" y="390"/>
+  <use xlink:href="#glyph0-11" x="415" y="390"/>
+  <use xlink:href="#glyph0-5" x="418" y="390"/>
+  <use xlink:href="#glyph0-40" x="425" y="390"/>
+  <use xlink:href="#glyph0-55" x="429" y="390"/>
+  <use xlink:href="#glyph0-36" x="432" y="390"/>
+  <use xlink:href="#glyph0-5" x="439" y="390"/>
+  <use xlink:href="#glyph0-55" x="446" y="390"/>
+  <use xlink:href="#glyph0-48" x="449" y="390"/>
+  <use xlink:href="#glyph0-40" x="453" y="390"/>
+  <use xlink:href="#glyph0-58" x="457" y="390"/>
+  <use xlink:href="#glyph0-11" x="467" y="390"/>
+  <use xlink:href="#glyph0-5" x="470" y="390"/>
+  <use xlink:href="#glyph0-38" x="477" y="390"/>
+  <use xlink:href="#glyph0-36" x="484" y="390"/>
+  <use xlink:href="#glyph0-18" x="491" y="390"/>
+  <use xlink:href="#glyph0-8" x="496" y="390"/>
+  <use xlink:href="#glyph0-40" x="504" y="390"/>
+  <use xlink:href="#glyph0-16" x="508" y="390"/>
+  <use xlink:href="#glyph0-34" x="514" y="390"/>
+  <use xlink:href="#glyph0-6" x="522" y="390"/>
+  <use xlink:href="#glyph0-40" x="530" y="390"/>
+  <use xlink:href="#glyph0-59" x="534" y="390"/>
+  <use xlink:href="#glyph0-2" x="537" y="390"/>
+  <use xlink:href="#glyph0-41" x="545" y="390"/>
+  <use xlink:href="#glyph0-6" x="552" y="390"/>
+  <use xlink:href="#glyph0-18" x="560" y="390"/>
+  <use xlink:href="#glyph0-5" x="565" y="390"/>
+  <use xlink:href="#glyph0-48" x="572" y="390"/>
+  <use xlink:href="#glyph0-40" x="576" y="390"/>
+  <use xlink:href="#glyph0-1" x="580" y="390"/>
+  <use xlink:href="#glyph0-39" x="590" y="390"/>
+  <use xlink:href="#glyph0-11" x="594" y="390"/>
+  <use xlink:href="#glyph0-38" x="597" y="390"/>
+  <use xlink:href="#glyph0-41" x="604" y="390"/>
+  <use xlink:href="#glyph0-40" x="611" y="390"/>
+  <use xlink:href="#glyph0-2" x="615" y="390"/>
+  <use xlink:href="#glyph0-12" x="623" y="390"/>
+  <use xlink:href="#glyph0-40" x="631" y="390"/>
+  <use xlink:href="#glyph0-36" x="635" y="390"/>
+  <use xlink:href="#glyph0-40" x="642" y="390"/>
+  <use xlink:href="#glyph0-38" x="646" y="390"/>
+  <use xlink:href="#glyph0-36" x="653" y="390"/>
+  <use xlink:href="#glyph0-18" x="660" y="390"/>
+  <use xlink:href="#glyph0-8" x="665" y="390"/>
+  <use xlink:href="#glyph0-40" x="673" y="390"/>
+  <use xlink:href="#glyph0-16" x="677" y="390"/>
+  <use xlink:href="#glyph0-2" x="683" y="390"/>
+  <use xlink:href="#glyph0-40" x="691" y="390"/>
+  <use xlink:href="#glyph0-8" x="695" y="390"/>
+  <use xlink:href="#glyph0-6" x="703" y="390"/>
+  <use xlink:href="#glyph0-39" x="711" y="390"/>
+  <use xlink:href="#glyph0-6" x="715" y="390"/>
+  <use xlink:href="#glyph0-16" x="723" y="390"/>
+  <use xlink:href="#glyph0-6" x="729" y="390"/>
+  <use xlink:href="#glyph0-48" x="737" y="390"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 171 156 L 982 156 L 982 177 L 171 177 Z M 171 156 L 982 156 L 982 177 L 171 177 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-60" x="171" y="172"/>
+  <use xlink:href="#glyph0-12" x="179" y="172"/>
+  <use xlink:href="#glyph0-16" x="187" y="172"/>
+  <use xlink:href="#glyph0-6" x="193" y="172"/>
+  <use xlink:href="#glyph0-18" x="201" y="172"/>
+  <use xlink:href="#glyph0-40" x="206" y="172"/>
+  <use xlink:href="#glyph0-16" x="210" y="172"/>
+  <use xlink:href="#glyph0-34" x="216" y="172"/>
+  <use xlink:href="#glyph0-6" x="224" y="172"/>
+  <use xlink:href="#glyph0-40" x="232" y="172"/>
+  <use xlink:href="#glyph0-5" x="236" y="172"/>
+  <use xlink:href="#glyph0-34" x="243" y="172"/>
+  <use xlink:href="#glyph0-36" x="251" y="172"/>
+  <use xlink:href="#glyph0-18" x="258" y="172"/>
+  <use xlink:href="#glyph0-6" x="263" y="172"/>
+  <use xlink:href="#glyph0-8" x="271" y="172"/>
+  <use xlink:href="#glyph0-40" x="279" y="172"/>
+  <use xlink:href="#glyph0-5" x="283" y="172"/>
+  <use xlink:href="#glyph0-6" x="290" y="172"/>
+  <use xlink:href="#glyph0-38" x="298" y="172"/>
+  <use xlink:href="#glyph0-18" x="305" y="172"/>
+  <use xlink:href="#glyph0-6" x="310" y="172"/>
+  <use xlink:href="#glyph0-16" x="318" y="172"/>
+  <use xlink:href="#glyph0-48" x="324" y="172"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 155 156 L 168 156 L 168 177 L 155 177 Z M 155 156 L 168 156 L 168 177 L 155 177 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-21" x="155" y="172"/>
+  <use xlink:href="#glyph0-48" x="164" y="172"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 784 116 L 982 116 L 982 148 L 784 148 Z M 784 116 L 982 116 L 982 148 L 784 148 Z "/>
+<g clip-path="url(#clip167)" clip-rule="nonzero">
+<g clip-path="url(#clip168)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern132);" d="M 674 116 L 677 116 L 677 119 L 674 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern134);" d="M 677 116 L 781 116 L 781 119 L 677 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern136);" d="M 781 116 L 784 116 L 784 119 L 781 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern138);" d="M 674 119 L 677 119 L 677 144 L 674 144 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern140);" d="M 781 119 L 784 119 L 784 144 L 781 144 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern142);" d="M 674 144 L 677 144 L 677 148 L 674 148 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern144);" d="M 677 144 L 781 144 L 781 148 L 677 148 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern146);" d="M 781 144 L 784 144 L 784 148 L 781 148 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 682 121 L 776 121 L 776 142 L 682 142 Z M 682 121 L 776 121 L 776 142 L 682 142 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="682" y="137"/>
+  <use xlink:href="#glyph0-36" x="694" y="137"/>
+  <use xlink:href="#glyph0-12" x="701" y="137"/>
+  <use xlink:href="#glyph0-15" x="709" y="137"/>
+  <use xlink:href="#glyph0-36" x="717" y="137"/>
+  <use xlink:href="#glyph0-39" x="724" y="137"/>
+  <use xlink:href="#glyph0-40" x="728" y="137"/>
+  <use xlink:href="#glyph0-61" x="732" y="137"/>
+  <use xlink:href="#glyph0-6" x="741" y="137"/>
+  <use xlink:href="#glyph0-45" x="749" y="137"/>
+  <use xlink:href="#glyph0-11" x="757" y="137"/>
+  <use xlink:href="#glyph0-12" x="760" y="137"/>
+  <use xlink:href="#glyph0-10" x="768" y="137"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 476 116 L 674 116 L 674 148 L 476 148 Z M 476 116 L 674 116 L 674 148 L 476 148 Z "/>
+<g clip-path="url(#clip184)" clip-rule="nonzero">
+<g clip-path="url(#clip185)" clip-rule="nonzero">
+<rect x="0" y="0" width="1000" height="800" style="fill:rgb(95.686275%,95.686275%,94.901961%);fill-opacity:1;stroke:none;"/>
+</g>
+</g>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern148);" d="M 370 116 L 373 116 L 373 119 L 370 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern150);" d="M 373 116 L 473 116 L 473 119 L 373 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern152);" d="M 473 116 L 476 116 L 476 119 L 473 119 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern154);" d="M 370 119 L 373 119 L 373 144 L 370 144 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern156);" d="M 473 119 L 476 119 L 476 144 L 473 144 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern158);" d="M 370 144 L 373 144 L 373 148 L 370 148 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern160);" d="M 373 144 L 473 144 L 473 148 L 373 148 Z "/>
+<path style=" stroke:none;fill-rule:nonzero;fill:url(#pattern162);" d="M 473 144 L 476 144 L 476 148 L 473 148 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(72.953967%,73.577677%,72.018401%);fill-opacity:1;" d="M 378 121 L 468 121 L 468 142 L 378 142 Z M 378 121 L 468 121 L 468 142 L 378 142 Z "/>
+<g style="fill:rgb(65.490196%,67.058824%,65.490196%);fill-opacity:1;">
+  <use xlink:href="#glyph0-31" x="378" y="137"/>
+  <use xlink:href="#glyph0-34" x="387" y="137"/>
+  <use xlink:href="#glyph0-36" x="395" y="137"/>
+  <use xlink:href="#glyph0-18" x="402" y="137"/>
+  <use xlink:href="#glyph0-6" x="407" y="137"/>
+  <use xlink:href="#glyph0-8" x="415" y="137"/>
+  <use xlink:href="#glyph0-40" x="423" y="137"/>
+  <use xlink:href="#glyph0-5" x="427" y="137"/>
+  <use xlink:href="#glyph0-6" x="434" y="137"/>
+  <use xlink:href="#glyph0-38" x="442" y="137"/>
+  <use xlink:href="#glyph0-18" x="449" y="137"/>
+  <use xlink:href="#glyph0-6" x="454" y="137"/>
+  <use xlink:href="#glyph0-16" x="462" y="137"/>
+</g>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 171 116 L 370 116 L 370 148 L 171 148 Z M 171 116 L 370 116 L 370 148 L 171 148 Z "/>
+<path style=" stroke:none;fill-rule:evenodd;fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;" d="M 171 -248 L 982 -248 L 982 88 L 171 88 Z M 171 -248 L 982 -248 L 982 88 L 171 88 Z "/>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-14" x="171" y="20"/>
+  <use xlink:href="#glyph0-36" x="183" y="20"/>
+  <use xlink:href="#glyph0-12" x="190" y="20"/>
+  <use xlink:href="#glyph0-15" x="198" y="20"/>
+  <use xlink:href="#glyph0-36" x="206" y="20"/>
+  <use xlink:href="#glyph0-39" x="213" y="20"/>
+  <use xlink:href="#glyph0-40" x="217" y="20"/>
+  <use xlink:href="#glyph0-41" x="221" y="20"/>
+  <use xlink:href="#glyph0-6" x="228" y="20"/>
+  <use xlink:href="#glyph0-45" x="236" y="20"/>
+  <use xlink:href="#glyph0-11" x="244" y="20"/>
+  <use xlink:href="#glyph0-12" x="247" y="20"/>
+  <use xlink:href="#glyph0-10" x="255" y="20"/>
+  <use xlink:href="#glyph0-40" x="263" y="20"/>
+  <use xlink:href="#glyph0-52" x="267" y="20"/>
+  <use xlink:href="#glyph0-12" x="272" y="20"/>
+  <use xlink:href="#glyph0-2" x="280" y="20"/>
+  <use xlink:href="#glyph0-16" x="288" y="20"/>
+  <use xlink:href="#glyph0-40" x="294" y="20"/>
+  <use xlink:href="#glyph0-10" x="298" y="20"/>
+  <use xlink:href="#glyph0-6" x="306" y="20"/>
+  <use xlink:href="#glyph0-12" x="314" y="20"/>
+  <use xlink:href="#glyph0-6" x="322" y="20"/>
+  <use xlink:href="#glyph0-18" x="330" y="20"/>
+  <use xlink:href="#glyph0-36" x="335" y="20"/>
+  <use xlink:href="#glyph0-39" x="342" y="20"/>
+  <use xlink:href="#glyph0-39" x="346" y="20"/>
+  <use xlink:href="#glyph0-45" x="350" y="20"/>
+  <use xlink:href="#glyph0-40" x="358" y="20"/>
+  <use xlink:href="#glyph0-18" x="362" y="20"/>
+  <use xlink:href="#glyph0-6" x="367" y="20"/>
+  <use xlink:href="#glyph0-38" x="375" y="20"/>
+  <use xlink:href="#glyph0-2" x="382" y="20"/>
+  <use xlink:href="#glyph0-3" x="390" y="20"/>
+  <use xlink:href="#glyph0-3" x="402" y="20"/>
+  <use xlink:href="#glyph0-6" x="414" y="20"/>
+  <use xlink:href="#glyph0-12" x="422" y="20"/>
+  <use xlink:href="#glyph0-8" x="430" y="20"/>
+  <use xlink:href="#glyph0-6" x="438" y="20"/>
+  <use xlink:href="#glyph0-8" x="446" y="20"/>
+  <use xlink:href="#glyph0-54" x="454" y="20"/>
+  <use xlink:href="#glyph0-40" x="459" y="20"/>
+  <use xlink:href="#glyph0-11" x="463" y="20"/>
+  <use xlink:href="#glyph0-12" x="466" y="20"/>
+  <use xlink:href="#glyph0-29" x="474" y="20"/>
+  <use xlink:href="#glyph0-2" x="481" y="20"/>
+  <use xlink:href="#glyph0-39" x="489" y="20"/>
+  <use xlink:href="#glyph0-29" x="493" y="20"/>
+  <use xlink:href="#glyph0-6" x="500" y="20"/>
+  <use xlink:href="#glyph0-5" x="508" y="20"/>
+  <use xlink:href="#glyph0-40" x="515" y="20"/>
+  <use xlink:href="#glyph0-6" x="519" y="20"/>
+  <use xlink:href="#glyph0-62" x="527" y="20"/>
+  <use xlink:href="#glyph0-38" x="535" y="20"/>
+  <use xlink:href="#glyph0-34" x="542" y="20"/>
+  <use xlink:href="#glyph0-36" x="550" y="20"/>
+  <use xlink:href="#glyph0-12" x="557" y="20"/>
+  <use xlink:href="#glyph0-10" x="565" y="20"/>
+  <use xlink:href="#glyph0-11" x="573" y="20"/>
+  <use xlink:href="#glyph0-12" x="576" y="20"/>
+  <use xlink:href="#glyph0-10" x="584" y="20"/>
+  <use xlink:href="#glyph0-40" x="592" y="20"/>
+  <use xlink:href="#glyph0-41" x="596" y="20"/>
+  <use xlink:href="#glyph0-6" x="603" y="20"/>
+  <use xlink:href="#glyph0-45" x="611" y="20"/>
+  <use xlink:href="#glyph0-40" x="619" y="20"/>
+  <use xlink:href="#glyph0-3" x="623" y="20"/>
+  <use xlink:href="#glyph0-36" x="635" y="20"/>
+  <use xlink:href="#glyph0-16" x="642" y="20"/>
+  <use xlink:href="#glyph0-6" x="648" y="20"/>
+  <use xlink:href="#glyph0-18" x="656" y="20"/>
+  <use xlink:href="#glyph0-11" x="661" y="20"/>
+  <use xlink:href="#glyph0-36" x="664" y="20"/>
+  <use xlink:href="#glyph0-39" x="671" y="20"/>
+  <use xlink:href="#glyph0-40" x="675" y="20"/>
+  <use xlink:href="#glyph0-49" x="679" y="20"/>
+  <use xlink:href="#glyph0-11" x="691" y="20"/>
+  <use xlink:href="#glyph0-16" x="694" y="20"/>
+  <use xlink:href="#glyph0-34" x="700" y="20"/>
+  <use xlink:href="#glyph0-40" x="708" y="20"/>
+  <use xlink:href="#glyph0-45" x="712" y="20"/>
+  <use xlink:href="#glyph0-2" x="720" y="20"/>
+  <use xlink:href="#glyph0-15" x="728" y="20"/>
+  <use xlink:href="#glyph0-18" x="736" y="20"/>
+  <use xlink:href="#glyph0-40" x="741" y="20"/>
+  <use xlink:href="#glyph0-38" x="745" y="20"/>
+  <use xlink:href="#glyph0-2" x="752" y="20"/>
+  <use xlink:href="#glyph0-12" x="760" y="20"/>
+  <use xlink:href="#glyph0-16" x="768" y="20"/>
+  <use xlink:href="#glyph0-36" x="774" y="20"/>
+  <use xlink:href="#glyph0-38" x="781" y="20"/>
+  <use xlink:href="#glyph0-16" x="788" y="20"/>
+  <use xlink:href="#glyph0-40" x="794" y="20"/>
+  <use xlink:href="#glyph0-11" x="798" y="20"/>
+  <use xlink:href="#glyph0-12" x="801" y="20"/>
+  <use xlink:href="#glyph0-40" x="809" y="20"/>
+  <use xlink:href="#glyph0-36" x="813" y="20"/>
+  <use xlink:href="#glyph0-40" x="820" y="20"/>
+  <use xlink:href="#glyph0-5" x="824" y="20"/>
+  <use xlink:href="#glyph0-6" x="831" y="20"/>
+  <use xlink:href="#glyph0-38" x="839" y="20"/>
+  <use xlink:href="#glyph0-15" x="846" y="20"/>
+  <use xlink:href="#glyph0-18" x="854" y="20"/>
+  <use xlink:href="#glyph0-6" x="859" y="20"/>
+  <use xlink:href="#glyph0-40" x="867" y="20"/>
+  <use xlink:href="#glyph0-36" x="871" y="20"/>
+  <use xlink:href="#glyph0-12" x="878" y="20"/>
+  <use xlink:href="#glyph0-8" x="886" y="20"/>
+  <use xlink:href="#glyph0-40" x="894" y="20"/>
+  <use xlink:href="#glyph0-36" x="898" y="20"/>
+  <use xlink:href="#glyph0-15" x="905" y="20"/>
+  <use xlink:href="#glyph0-16" x="913" y="20"/>
+  <use xlink:href="#glyph0-34" x="919" y="20"/>
+  <use xlink:href="#glyph0-6" x="927" y="20"/>
+  <use xlink:href="#glyph0-12" x="935" y="20"/>
+  <use xlink:href="#glyph0-16" x="943" y="20"/>
+  <use xlink:href="#glyph0-11" x="949" y="20"/>
+  <use xlink:href="#glyph0-38" x="952" y="20"/>
+  <use xlink:href="#glyph0-40" x="959" y="20"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="171" y="41"/>
+  <use xlink:href="#glyph0-36" x="183" y="41"/>
+  <use xlink:href="#glyph0-12" x="190" y="41"/>
+  <use xlink:href="#glyph0-12" x="198" y="41"/>
+  <use xlink:href="#glyph0-6" x="206" y="41"/>
+  <use xlink:href="#glyph0-18" x="214" y="41"/>
+  <use xlink:href="#glyph0-46" x="219" y="41"/>
+  <use xlink:href="#glyph0-40" x="223" y="41"/>
+  <use xlink:href="#glyph0-11" x="227" y="41"/>
+  <use xlink:href="#glyph0-48" x="230" y="41"/>
+  <use xlink:href="#glyph0-6" x="234" y="41"/>
+  <use xlink:href="#glyph0-48" x="242" y="41"/>
+  <use xlink:href="#glyph0-40" x="246" y="41"/>
+  <use xlink:href="#glyph0-30" x="250" y="41"/>
+  <use xlink:href="#glyph0-45" x="258" y="41"/>
+  <use xlink:href="#glyph0-40" x="266" y="41"/>
+  <use xlink:href="#glyph0-15" x="270" y="41"/>
+  <use xlink:href="#glyph0-5" x="278" y="41"/>
+  <use xlink:href="#glyph0-11" x="285" y="41"/>
+  <use xlink:href="#glyph0-12" x="288" y="41"/>
+  <use xlink:href="#glyph0-10" x="296" y="41"/>
+  <use xlink:href="#glyph0-40" x="304" y="41"/>
+  <use xlink:href="#glyph0-63" x="308" y="41"/>
+  <use xlink:href="#glyph0-42" x="317" y="41"/>
+  <use xlink:href="#glyph0-63" x="327" y="41"/>
+  <use xlink:href="#glyph0-48" x="336" y="41"/>
+  <use xlink:href="#glyph0-40" x="340" y="41"/>
+  <use xlink:href="#glyph0-32" x="344" y="41"/>
+  <use xlink:href="#glyph0-34" x="352" y="41"/>
+  <use xlink:href="#glyph0-6" x="360" y="41"/>
+  <use xlink:href="#glyph0-40" x="368" y="41"/>
+  <use xlink:href="#glyph0-5" x="372" y="41"/>
+  <use xlink:href="#glyph0-6" x="379" y="41"/>
+  <use xlink:href="#glyph0-38" x="387" y="41"/>
+  <use xlink:href="#glyph0-15" x="394" y="41"/>
+  <use xlink:href="#glyph0-18" x="402" y="41"/>
+  <use xlink:href="#glyph0-11" x="407" y="41"/>
+  <use xlink:href="#glyph0-16" x="410" y="41"/>
+  <use xlink:href="#glyph0-45" x="416" y="41"/>
+  <use xlink:href="#glyph0-40" x="424" y="41"/>
+  <use xlink:href="#glyph0-2" x="428" y="41"/>
+  <use xlink:href="#glyph0-43" x="436" y="41"/>
+  <use xlink:href="#glyph0-40" x="441" y="41"/>
+  <use xlink:href="#glyph0-63" x="445" y="41"/>
+  <use xlink:href="#glyph0-2" x="454" y="41"/>
+  <use xlink:href="#glyph0-12" x="462" y="41"/>
+  <use xlink:href="#glyph0-8" x="470" y="41"/>
+  <use xlink:href="#glyph0-40" x="478" y="41"/>
+  <use xlink:href="#glyph0-11" x="482" y="41"/>
+  <use xlink:href="#glyph0-5" x="485" y="41"/>
+  <use xlink:href="#glyph0-40" x="492" y="41"/>
+  <use xlink:href="#glyph0-3" x="496" y="41"/>
+  <use xlink:href="#glyph0-2" x="508" y="41"/>
+  <use xlink:href="#glyph0-2" x="516" y="41"/>
+  <use xlink:href="#glyph0-16" x="524" y="41"/>
+  <use xlink:href="#glyph0-40" x="530" y="41"/>
+  <use xlink:href="#glyph0-11" x="534" y="41"/>
+  <use xlink:href="#glyph0-43" x="537" y="41"/>
+  <use xlink:href="#glyph0-40" x="542" y="41"/>
+  <use xlink:href="#glyph0-45" x="546" y="41"/>
+  <use xlink:href="#glyph0-2" x="554" y="41"/>
+  <use xlink:href="#glyph0-15" x="562" y="41"/>
+  <use xlink:href="#glyph0-40" x="570" y="41"/>
+  <use xlink:href="#glyph0-36" x="574" y="41"/>
+  <use xlink:href="#glyph0-38" x="581" y="41"/>
+  <use xlink:href="#glyph0-16" x="588" y="41"/>
+  <use xlink:href="#glyph0-15" x="594" y="41"/>
+  <use xlink:href="#glyph0-36" x="602" y="41"/>
+  <use xlink:href="#glyph0-39" x="609" y="41"/>
+  <use xlink:href="#glyph0-39" x="613" y="41"/>
+  <use xlink:href="#glyph0-45" x="617" y="41"/>
+  <use xlink:href="#glyph0-40" x="625" y="41"/>
+  <use xlink:href="#glyph0-6" x="629" y="41"/>
+  <use xlink:href="#glyph0-62" x="637" y="41"/>
+  <use xlink:href="#glyph0-38" x="645" y="41"/>
+  <use xlink:href="#glyph0-34" x="652" y="41"/>
+  <use xlink:href="#glyph0-36" x="660" y="41"/>
+  <use xlink:href="#glyph0-12" x="667" y="41"/>
+  <use xlink:href="#glyph0-10" x="675" y="41"/>
+  <use xlink:href="#glyph0-6" x="683" y="41"/>
+  <use xlink:href="#glyph0-40" x="691" y="41"/>
+  <use xlink:href="#glyph0-41" x="695" y="41"/>
+  <use xlink:href="#glyph0-6" x="702" y="41"/>
+  <use xlink:href="#glyph0-45" x="710" y="41"/>
+  <use xlink:href="#glyph0-5" x="718" y="41"/>
+  <use xlink:href="#glyph0-40" x="725" y="41"/>
+  <use xlink:href="#glyph0-49" x="729" y="41"/>
+  <use xlink:href="#glyph0-11" x="741" y="41"/>
+  <use xlink:href="#glyph0-16" x="744" y="41"/>
+  <use xlink:href="#glyph0-34" x="750" y="41"/>
+  <use xlink:href="#glyph0-40" x="758" y="41"/>
+  <use xlink:href="#glyph0-36" x="762" y="41"/>
+  <use xlink:href="#glyph0-12" x="769" y="41"/>
+  <use xlink:href="#glyph0-40" x="777" y="41"/>
+  <use xlink:href="#glyph0-36" x="781" y="41"/>
+  <use xlink:href="#glyph0-16" x="788" y="41"/>
+  <use xlink:href="#glyph0-16" x="794" y="41"/>
+  <use xlink:href="#glyph0-36" x="800" y="41"/>
+  <use xlink:href="#glyph0-38" x="807" y="41"/>
+  <use xlink:href="#glyph0-41" x="814" y="41"/>
+  <use xlink:href="#glyph0-6" x="821" y="41"/>
+  <use xlink:href="#glyph0-18" x="829" y="41"/>
+  <use xlink:href="#glyph0-64" x="834" y="41"/>
+  <use xlink:href="#glyph0-40" x="838" y="41"/>
+  <use xlink:href="#glyph0-16" x="842" y="41"/>
+  <use xlink:href="#glyph0-34" x="848" y="41"/>
+  <use xlink:href="#glyph0-6" x="856" y="41"/>
+  <use xlink:href="#glyph0-45" x="864" y="41"/>
+  <use xlink:href="#glyph0-40" x="872" y="41"/>
+  <use xlink:href="#glyph0-38" x="876" y="41"/>
+  <use xlink:href="#glyph0-36" x="883" y="41"/>
+  <use xlink:href="#glyph0-12" x="890" y="41"/>
+  <use xlink:href="#glyph0-40" x="898" y="41"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-3" x="171" y="62"/>
+  <use xlink:href="#glyph0-36" x="183" y="62"/>
+  <use xlink:href="#glyph0-5" x="190" y="62"/>
+  <use xlink:href="#glyph0-65" x="197" y="62"/>
+  <use xlink:href="#glyph0-15" x="205" y="62"/>
+  <use xlink:href="#glyph0-6" x="213" y="62"/>
+  <use xlink:href="#glyph0-18" x="221" y="62"/>
+  <use xlink:href="#glyph0-36" x="226" y="62"/>
+  <use xlink:href="#glyph0-8" x="233" y="62"/>
+  <use xlink:href="#glyph0-6" x="241" y="62"/>
+  <use xlink:href="#glyph0-40" x="249" y="62"/>
+  <use xlink:href="#glyph0-16" x="253" y="62"/>
+  <use xlink:href="#glyph0-34" x="259" y="62"/>
+  <use xlink:href="#glyph0-6" x="267" y="62"/>
+  <use xlink:href="#glyph0-40" x="275" y="62"/>
+  <use xlink:href="#glyph0-11" x="279" y="62"/>
+  <use xlink:href="#glyph0-12" x="282" y="62"/>
+  <use xlink:href="#glyph0-16" x="290" y="62"/>
+  <use xlink:href="#glyph0-6" x="296" y="62"/>
+  <use xlink:href="#glyph0-12" x="304" y="62"/>
+  <use xlink:href="#glyph0-8" x="312" y="62"/>
+  <use xlink:href="#glyph0-6" x="320" y="62"/>
+  <use xlink:href="#glyph0-8" x="328" y="62"/>
+  <use xlink:href="#glyph0-40" x="336" y="62"/>
+  <use xlink:href="#glyph0-38" x="340" y="62"/>
+  <use xlink:href="#glyph0-2" x="347" y="62"/>
+  <use xlink:href="#glyph0-12" x="355" y="62"/>
+  <use xlink:href="#glyph0-16" x="363" y="62"/>
+  <use xlink:href="#glyph0-36" x="369" y="62"/>
+  <use xlink:href="#glyph0-38" x="376" y="62"/>
+  <use xlink:href="#glyph0-16" x="383" y="62"/>
+  <use xlink:href="#glyph0-40" x="389" y="62"/>
+  <use xlink:href="#glyph0-2" x="393" y="62"/>
+  <use xlink:href="#glyph0-18" x="401" y="62"/>
+  <use xlink:href="#glyph0-40" x="406" y="62"/>
+  <use xlink:href="#glyph0-38" x="410" y="62"/>
+  <use xlink:href="#glyph0-2" x="417" y="62"/>
+  <use xlink:href="#glyph0-15" x="425" y="62"/>
+  <use xlink:href="#glyph0-39" x="433" y="62"/>
+  <use xlink:href="#glyph0-8" x="437" y="62"/>
+  <use xlink:href="#glyph0-40" x="445" y="62"/>
+  <use xlink:href="#glyph0-5" x="449" y="62"/>
+  <use xlink:href="#glyph0-11" x="456" y="62"/>
+  <use xlink:href="#glyph0-3" x="459" y="62"/>
+  <use xlink:href="#glyph0-4" x="471" y="62"/>
+  <use xlink:href="#glyph0-39" x="479" y="62"/>
+  <use xlink:href="#glyph0-45" x="483" y="62"/>
+  <use xlink:href="#glyph0-40" x="491" y="62"/>
+  <use xlink:href="#glyph0-8" x="495" y="62"/>
+  <use xlink:href="#glyph0-2" x="503" y="62"/>
+  <use xlink:href="#glyph0-40" x="511" y="62"/>
+  <use xlink:href="#glyph0-16" x="515" y="62"/>
+  <use xlink:href="#glyph0-34" x="521" y="62"/>
+  <use xlink:href="#glyph0-6" x="529" y="62"/>
+  <use xlink:href="#glyph0-40" x="537" y="62"/>
+  <use xlink:href="#glyph0-5" x="541" y="62"/>
+  <use xlink:href="#glyph0-36" x="548" y="62"/>
+  <use xlink:href="#glyph0-3" x="555" y="62"/>
+  <use xlink:href="#glyph0-6" x="567" y="62"/>
+  <use xlink:href="#glyph0-40" x="575" y="62"/>
+  <use xlink:href="#glyph0-16" x="579" y="62"/>
+  <use xlink:href="#glyph0-2" x="585" y="62"/>
+  <use xlink:href="#glyph0-40" x="593" y="62"/>
+  <use xlink:href="#glyph0-16" x="597" y="62"/>
+  <use xlink:href="#glyph0-34" x="603" y="62"/>
+  <use xlink:href="#glyph0-6" x="611" y="62"/>
+  <use xlink:href="#glyph0-3" x="619" y="62"/>
+  <use xlink:href="#glyph0-40" x="631" y="62"/>
+  <use xlink:href="#glyph0-36" x="635" y="62"/>
+  <use xlink:href="#glyph0-12" x="642" y="62"/>
+  <use xlink:href="#glyph0-8" x="650" y="62"/>
+  <use xlink:href="#glyph0-40" x="658" y="62"/>
+  <use xlink:href="#glyph0-4" x="662" y="62"/>
+  <use xlink:href="#glyph0-36" x="670" y="62"/>
+  <use xlink:href="#glyph0-5" x="677" y="62"/>
+  <use xlink:href="#glyph0-5" x="684" y="62"/>
+  <use xlink:href="#glyph0-40" x="691" y="62"/>
+  <use xlink:href="#glyph0-3" x="695" y="62"/>
+  <use xlink:href="#glyph0-6" x="707" y="62"/>
+  <use xlink:href="#glyph0-5" x="715" y="62"/>
+  <use xlink:href="#glyph0-5" x="722" y="62"/>
+  <use xlink:href="#glyph0-36" x="729" y="62"/>
+  <use xlink:href="#glyph0-10" x="736" y="62"/>
+  <use xlink:href="#glyph0-6" x="744" y="62"/>
+  <use xlink:href="#glyph0-5" x="752" y="62"/>
+  <use xlink:href="#glyph0-40" x="759" y="62"/>
+  <use xlink:href="#glyph0-30" x="763" y="62"/>
+  <use xlink:href="#glyph0-6" x="771" y="62"/>
+  <use xlink:href="#glyph0-16" x="779" y="62"/>
+  <use xlink:href="#glyph0-49" x="785" y="62"/>
+  <use xlink:href="#glyph0-6" x="797" y="62"/>
+  <use xlink:href="#glyph0-6" x="805" y="62"/>
+  <use xlink:href="#glyph0-12" x="813" y="62"/>
+  <use xlink:href="#glyph0-40" x="821" y="62"/>
+  <use xlink:href="#glyph0-45" x="825" y="62"/>
+  <use xlink:href="#glyph0-2" x="833" y="62"/>
+  <use xlink:href="#glyph0-15" x="841" y="62"/>
+  <use xlink:href="#glyph0-46" x="849" y="62"/>
+  <use xlink:href="#glyph0-40" x="853" y="62"/>
+  <use xlink:href="#glyph0-18" x="857" y="62"/>
+  <use xlink:href="#glyph0-6" x="862" y="62"/>
+  <use xlink:href="#glyph0-36" x="870" y="62"/>
+  <use xlink:href="#glyph0-8" x="877" y="62"/>
+  <use xlink:href="#glyph0-11" x="885" y="62"/>
+  <use xlink:href="#glyph0-12" x="888" y="62"/>
+  <use xlink:href="#glyph0-10" x="896" y="62"/>
+  <use xlink:href="#glyph0-40" x="904" y="62"/>
+  <use xlink:href="#glyph0-6" x="908" y="62"/>
+  <use xlink:href="#glyph0-29" x="916" y="62"/>
+  <use xlink:href="#glyph0-6" x="923" y="62"/>
+  <use xlink:href="#glyph0-18" x="931" y="62"/>
+  <use xlink:href="#glyph0-45" x="936" y="62"/>
+  <use xlink:href="#glyph0-16" x="944" y="62"/>
+  <use xlink:href="#glyph0-34" x="950" y="62"/>
+  <use xlink:href="#glyph0-11" x="958" y="62"/>
+  <use xlink:href="#glyph0-12" x="961" y="62"/>
+  <use xlink:href="#glyph0-10" x="969" y="62"/>
+  <use xlink:href="#glyph0-40" x="977" y="62"/>
+</g>
+<g style="fill:rgb(18.039216%,20.392157%,21.176471%);fill-opacity:1;">
+  <use xlink:href="#glyph0-11" x="171" y="83"/>
+  <use xlink:href="#glyph0-12" x="174" y="83"/>
+  <use xlink:href="#glyph0-40" x="182" y="83"/>
+  <use xlink:href="#glyph0-16" x="186" y="83"/>
+  <use xlink:href="#glyph0-34" x="192" y="83"/>
+  <use xlink:href="#glyph0-6" x="200" y="83"/>
+  <use xlink:href="#glyph0-40" x="208" y="83"/>
+  <use xlink:href="#glyph0-4" x="212" y="83"/>
+  <use xlink:href="#glyph0-18" x="220" y="83"/>
+  <use xlink:href="#glyph0-2" x="225" y="83"/>
+  <use xlink:href="#glyph0-38" x="233" y="83"/>
+  <use xlink:href="#glyph0-6" x="240" y="83"/>
+  <use xlink:href="#glyph0-5" x="248" y="83"/>
+  <use xlink:href="#glyph0-5" x="255" y="83"/>
+  <use xlink:href="#glyph0-48" x="262" y="83"/>
+  <use xlink:href="#glyph0-40" x="266" y="83"/>
+  <use xlink:href="#glyph0-28" x="270" y="83"/>
+  <use xlink:href="#glyph0-2" x="281" y="83"/>
+  <use xlink:href="#glyph0-16" x="289" y="83"/>
+  <use xlink:href="#glyph0-6" x="295" y="83"/>
+  <use xlink:href="#glyph0-40" x="303" y="83"/>
+  <use xlink:href="#glyph0-16" x="307" y="83"/>
+  <use xlink:href="#glyph0-34" x="313" y="83"/>
+  <use xlink:href="#glyph0-36" x="321" y="83"/>
+  <use xlink:href="#glyph0-16" x="328" y="83"/>
+  <use xlink:href="#glyph0-40" x="334" y="83"/>
+  <use xlink:href="#glyph0-16" x="338" y="83"/>
+  <use xlink:href="#glyph0-34" x="344" y="83"/>
+  <use xlink:href="#glyph0-6" x="352" y="83"/>
+  <use xlink:href="#glyph0-40" x="360" y="83"/>
+  <use xlink:href="#glyph0-41" x="364" y="83"/>
+  <use xlink:href="#glyph0-6" x="371" y="83"/>
+  <use xlink:href="#glyph0-45" x="379" y="83"/>
+  <use xlink:href="#glyph0-40" x="387" y="83"/>
+  <use xlink:href="#glyph0-3" x="391" y="83"/>
+  <use xlink:href="#glyph0-36" x="403" y="83"/>
+  <use xlink:href="#glyph0-16" x="410" y="83"/>
+  <use xlink:href="#glyph0-6" x="416" y="83"/>
+  <use xlink:href="#glyph0-18" x="424" y="83"/>
+  <use xlink:href="#glyph0-11" x="429" y="83"/>
+  <use xlink:href="#glyph0-36" x="432" y="83"/>
+  <use xlink:href="#glyph0-39" x="439" y="83"/>
+  <use xlink:href="#glyph0-40" x="443" y="83"/>
+  <use xlink:href="#glyph0-11" x="447" y="83"/>
+  <use xlink:href="#glyph0-5" x="450" y="83"/>
+  <use xlink:href="#glyph0-40" x="457" y="83"/>
+  <use xlink:href="#glyph0-36" x="461" y="83"/>
+  <use xlink:href="#glyph0-39" x="468" y="83"/>
+  <use xlink:href="#glyph0-5" x="472" y="83"/>
+  <use xlink:href="#glyph0-2" x="479" y="83"/>
+  <use xlink:href="#glyph0-40" x="487" y="83"/>
+  <use xlink:href="#glyph0-5" x="491" y="83"/>
+  <use xlink:href="#glyph0-6" x="498" y="83"/>
+  <use xlink:href="#glyph0-38" x="506" y="83"/>
+  <use xlink:href="#glyph0-18" x="513" y="83"/>
+  <use xlink:href="#glyph0-6" x="518" y="83"/>
+  <use xlink:href="#glyph0-16" x="526" y="83"/>
+  <use xlink:href="#glyph0-40" x="532" y="83"/>
+  <use xlink:href="#glyph0-57" x="536" y="83"/>
+  <use xlink:href="#glyph0-40" x="542" y="83"/>
+  <use xlink:href="#glyph0-11" x="546" y="83"/>
+  <use xlink:href="#glyph0-16" x="549" y="83"/>
+  <use xlink:href="#glyph0-55" x="555" y="83"/>
+  <use xlink:href="#glyph0-5" x="558" y="83"/>
+  <use xlink:href="#glyph0-40" x="565" y="83"/>
+  <use xlink:href="#glyph0-12" x="569" y="83"/>
+  <use xlink:href="#glyph0-2" x="577" y="83"/>
+  <use xlink:href="#glyph0-16" x="585" y="83"/>
+  <use xlink:href="#glyph0-40" x="591" y="83"/>
+  <use xlink:href="#glyph0-36" x="595" y="83"/>
+  <use xlink:href="#glyph0-40" x="602" y="83"/>
+  <use xlink:href="#glyph0-4" x="606" y="83"/>
+  <use xlink:href="#glyph0-15" x="614" y="83"/>
+  <use xlink:href="#glyph0-30" x="622" y="83"/>
+  <use xlink:href="#glyph0-39" x="630" y="83"/>
+  <use xlink:href="#glyph0-11" x="634" y="83"/>
+  <use xlink:href="#glyph0-38" x="637" y="83"/>
+  <use xlink:href="#glyph0-40" x="644" y="83"/>
+  <use xlink:href="#glyph0-41" x="648" y="83"/>
+  <use xlink:href="#glyph0-6" x="655" y="83"/>
+  <use xlink:href="#glyph0-45" x="663" y="83"/>
+  <use xlink:href="#glyph0-40" x="671" y="83"/>
+  <use xlink:href="#glyph0-36" x="675" y="83"/>
+  <use xlink:href="#glyph0-12" x="682" y="83"/>
+  <use xlink:href="#glyph0-8" x="690" y="83"/>
+  <use xlink:href="#glyph0-40" x="698" y="83"/>
+  <use xlink:href="#glyph0-5" x="702" y="83"/>
+  <use xlink:href="#glyph0-2" x="709" y="83"/>
+  <use xlink:href="#glyph0-40" x="717" y="83"/>
+  <use xlink:href="#glyph0-3" x="721" y="83"/>
+  <use xlink:href="#glyph0-15" x="733" y="83"/>
+  <use xlink:href="#glyph0-5" x="741" y="83"/>
+  <use xlink:href="#glyph0-16" x="748" y="83"/>
+  <use xlink:href="#glyph0-40" x="754" y="83"/>
+  <use xlink:href="#glyph0-30" x="758" y="83"/>
+  <use xlink:href="#glyph0-6" x="766" y="83"/>
+  <use xlink:href="#glyph0-40" x="774" y="83"/>
+  <use xlink:href="#glyph0-6" x="778" y="83"/>
+  <use xlink:href="#glyph0-12" x="786" y="83"/>
+  <use xlink:href="#glyph0-38" x="794" y="83"/>
+  <use xlink:href="#glyph0-18" x="801" y="83"/>
+  <use xlink:href="#glyph0-45" x="806" y="83"/>
+  <use xlink:href="#glyph0-4" x="814" y="83"/>
+  <use xlink:href="#glyph0-16" x="822" y="83"/>
+  <use xlink:href="#glyph0-6" x="828" y="83"/>
+  <use xlink:href="#glyph0-8" x="836" y="83"/>
+  <use xlink:href="#glyph0-40" x="844" y="83"/>
+  <use xlink:href="#glyph0-36" x="848" y="83"/>
+  <use xlink:href="#glyph0-5" x="855" y="83"/>
+  <use xlink:href="#glyph0-40" x="862" y="83"/>
+  <use xlink:href="#glyph0-49" x="866" y="83"/>
+  <use xlink:href="#glyph0-6" x="878" y="83"/>
+  <use xlink:href="#glyph0-39" x="886" y="83"/>
+  <use xlink:href="#glyph0-39" x="890" y="83"/>
+  <use xlink:href="#glyph0-40" x="894" y="83"/>
+  <use xlink:href="#glyph0-36" x="898" y="83"/>
+  <use xlink:href="#glyph0-5" x="905" y="83"/>
+  <use xlink:href="#glyph0-40" x="912" y="83"/>
+  <use xlink:href="#glyph0-5" x="916" y="83"/>
+  <use xlink:href="#glyph0-11" x="923" y="83"/>
+  <use xlink:href="#glyph0-10" x="926" y="83"/>
+  <use xlink:href="#glyph0-12" x="934" y="83"/>
+  <use xlink:href="#glyph0-6" x="942" y="83"/>
+  <use xlink:href="#glyph0-8" x="950" y="83"/>
+  <use xlink:href="#glyph0-48" x="958" y="83"/>
+</g>
+</g>
+</svg>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..372c199
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,222 @@
+---
+layout: default
+title: Pond
+---
+
+<p>(<i>Note: recent events have lead to these topics being in the news quite often in recent weeks. However, Pond is not a reaction to those events - it was started nearly a year ago.</i>)</p>
+
+<p>For secure, synchronous communication we have OTR and, when run over Tor, this is pretty good. But while we have secure asynchronous messaging in the form of PGP email, it's not forward secure and it gratuitously leaks traffic information. While a desire for forward secure PGP <a href="http://tools.ietf.org/html/draft-brown-pgp-pfs-03">is hardly new</a>, it still hasn't materialised in a widely usable manner.</p>
+
+<p>Additionally, email is used predominately for insecure communications (mailing lists, etc) and is useful because it allows previously unconnected people to communicate as long as a (public) email address is known to one party. But the flip side to this is that volume and spam are driving people to use centralised email services. These provide such huge benefits to the majority of email communication, so it's unlikely that this trend is going to reverse. But, even with PGP, these servi [...]
+
+<p>So Pond is not email. Pond is forward secure, asynchronous messaging for the discerning. Pond messages are asynchronous, but are not a record; they expire automatically a week after they are received. Pond seeks to prevent leaking traffic information against everyone except a global passive attacker.</p>
+
+<p><b>Dear God, please don't use Pond for anything real yet. I've hammered out nearly 20K lines of code that have never been reviewed. Unless you're looking to experiment you should go use something that <a href="http://gnupg.org/">actually works</a>.</b></p>
+
+<p>Please email any feedback to <tt>agl at imperialviolet dot org</tt> or else use GitHub's tools.</p>
+
+<p> </p>
+
+<p>
+  <span style="border: grey 3px solid; border-radius: 5px; padding: 8px;"><a href="user.html">User Guide</a> (<a href="user-cli.html">for CLI</a>)</span>
+  <a style="border: grey 3px solid; border-radius: 5px; padding: 8px;" href="threat.html">Threat Model</a>
+  <a style="border: grey 3px solid; border-radius: 5px; padding: 8px;" href="tech.html">Technical Details</a>
+  <a style="border: grey 3px solid; border-radius: 5px; padding: 8px;" href="https://github.com/agl/pond">Source Code</a>
+</p>
+
+<p> </p>
+
+<h4>Building</h4>
+
+<p>These are very simple build instructions that will get Pond running from source. You should read the commands before running them because, if nothing else, it'll put your GOPATH in <tt>~/gopkg</tt>, which may not be where you want.</p>
+
+<h5>Ubuntu 13.10</h5>
+
+<p>First, <a href="https://golang.org/doc/install">install Go</a>. The packaged version of Go (usually called <tt>golang</tt>) is unlikely to work.</p>
+
+<pre>sudo apt-get install git libgtk-3-dev libgtkspell3-3-dev libtspi-dev trousers tor mercurial tpm-tools
+cd
+mkdir gopkg
+export GOPATH=$HOME/gopkg
+go get github.com/agl/pond/client
+$GOPATH/bin/client</pre>
+
+<h5>Debian Wheezy and Ubuntu 12.04</h5>
+
+<p>Same as Ubuntu, above, but 1) on the <tt>go get</tt> command line add <tt>-tags ubuntu</tt> before the URL and 2) the gtkspell package is called <tt>libgtkspell-3-dev</tt>. On more recent versions of Debian, the instructions should be exactly the same as Ubuntu.</p>
+
+<h5>Tails (Version 1.1.1)</h5>
+
+<p>First, if you have not done so already, configure Tails persistence (<em>Applications</em> → <em>Tails</em> → <em>Configure persistent volume</em>) to persist "Personal Data", "APT Packages", "APT Lists", and "Dotfiles". A reboot is required after these settings are changed.</p>
+
+<p>Next, when starting Tails, click "Yes" at the "More options?" prompt to set an Administration password. You'll need this password to install Pond's dependencies.</p>
+
+<p>Next, open a Terminal and copy and paste the following commands to build and install Pond:</p>
+
+<pre>echo 'export GOPATH=$HOME/Persistent/go/' >> ~/.bashrc
+. ~/.bashrc
+mkdir $GOPATH
+alias pond-build='sudo bash -c "sudo apt-get update && \
+apt-get install -y -t testing golang && \
+apt-get install -y gcc git mercurial libgtk-3-dev libgtkspell-3-dev libtspi-dev trousers" && \
+go get -u -tags ubuntu github.com/agl/pond/client && \
+echo "Success." || echo "Sorry, something went wrong."'
+alias pond-install-deps='sudo apt-get install libtspi1 libgtkspell-3-0'
+alias pond='$GOPATH/bin/client'
+alias pond-cli='$GOPATH/bin/client --cli'
+alias|grep pond >> ~/.bashrc
+pond-build</pre>
+
+<p>Finally, run the following command (if you have not previously done so) to add your <tt>~/.bashrc</tt> to the persistent storage:</p>
+<pre>cp ~/.bashrc /live/persistence/TailsData_unlocked/dotfiles/.bashrc</pre>
+
+<p>Each time you start Tails in the future, before you can run Pond, you'll just need to reinstall its runtime dependencies using the <tt>pond-install-deps</tt> command.</p>
+
+<p>At this point, you should be able to run Pond's graphical interface with the <tt>pond</tt> command, or run its command-line interface with the <tt>pond-cli</tt> command.</p>
+
+<p>From time to time you can re-run the <tt>pond-build</tt> command to update to the latest version.</p>
+
+<h5>Fedora 19</h5>
+
+<p>Fedora's <tt>golang</tt> package appears to be completely broken, so this installs Go from source.</p>
+
+<pre>sudo yum install gtk3-devel gtkspell3-devel gcc trousers-devel git mercurial tor
+sudo systemctl start tor
+cd
+git clone https://github.com/golang/go
+cd go/src
+./all.bash
+cd
+export PATH=$PATH:$HOME/go/bin
+mkdir gopkg
+export GOPATH=$HOME/gopkg
+go get github.com/agl/pond/client
+$GOPATH/bin/client</pre>
+
+<h5>Arch</h5>
+<pre>
+yaourt -S trousers mercurial tor go
+cd
+mkdir gopkg
+export GOPATH=$HOME/gopkg
+go get github.com/agl/pond/client
+systemctl start tor.service
+$GOPATH/bin/client
+</pre>
+
+<p>In order to actually use the TPM, you'll need to <tt>systemctl start tcsd</tt>.</p>
+
+<h5>OS X</h5>
+
+<p>It's possible to get Pond building on OS X after spending <i>lots</i> of time with homebrew. Something that's known to have worked,</p>
+
+<pre>
+// You will require Tor to run Pond. If you do not already have it, you can get
+// it from https://www.torproject.org/download/download.html.en . Running the Tor
+// Browser Bundle is enough.
+
+// These instructions assume the use of the Homebrew package manager for OSX.
+// If you are already using macports or fink (competing package managers), you may
+// not be able to follow these instructions. If you are not using any of these and
+// need to install homebrew, you can find the instructions on doing so at
+// http://brew.sh/
+
+// Install prerequisites for running Pond
+brew install go gtk+3 gtkspell3 mercurial
+
+// You can either edit the GTK+ package build to use Quartz (the OS X graphics
+// library) directly, or install XQuartz, an X server with a Quartz backend.
+// XQuartz can be installed from http://xquartz.macosforge.org/. Otherwise:
+
+brew edit gtk+3
+
+// ... and then add --enable-quartz-backend to the configure arguments
+
+// Add your go environment variable settings
+export GOPATH=$HOME/gopkg
+export PATH=$PATH:$GOPATH/bin
+export PKG_CONFIG_PATH=/opt/X11/lib/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
+// You need to also add these to your ~/.profile file if you want to run pond again after reboot, unless you want to manually apply the settings each time you run pond.
+
+// Finally, install pond:
+go get github.com/agl/pond/client
+// now `client` should be in your path
+</pre>
+
+<p>However, unless you are already familiar with GTK development on OS X, I'd suggest using a Linux machine at this point. Since OS X development doesn't occur on my main development machine, I have to move patches across which also means that github doesn't always have the most up-to-date OS X changes.</p>
+
+<p>If you just want the CLI version of Pond, you can use the nogui tag like so:</p>
+
+<pre>
+brew install go
+export GOPATH=$HOME/gopkg
+export PATH=$PATH:$GOPATH/bin
+go get -tags nogui github.com/agl/pond/client
+alias pond="$GOPATH/bin/client"
+</pre>
+
+<p><i>WARNING</i>: there are no TPM chips in Macs and, since they generally use SSDs, which are log structured internally, messages cannot be safely erased. There is a firmware NVRAM on Macs that could be used for erasure storage, but I haven't written support for that yet.</p>
+
+<h4>Running a Pond server</h4>
+
+<p>Note: this documentation is included for completeness but most users are not expected to run their own servers. At this point in the development, things are still changing and one may need to observe the development in order to know when server updates are needed.</p>
+
+<h5>Go environment</h5>
+
+<p>Create a user called <tt>pond</tt> and make sure its go environment is setup:</p>
+
+<pre>export GOPATH=/home/pond/go
+export PATH=$PATH:$GOPATH/bin</pre>
+
+<h5>Create pond server identity</h5>
+
+<p>Note that the pond server logs to stdout.</p>
+
+<pre>
+% cd /home/pond
+% mkdir pond-server-base
+% server --init --base-directory /home/pond/pond-server-base
+2013/12/24 16:35:46 Started. Listening on port 16333 with identity FJPZWT4E6Y3BOYYXSLJII4EMZPFCU7CDL7DM3AZ4V65X4TGDKN6A
+</pre>
+
+<h5>Start pond server normally</h5>
+
+<pre>% cd /home/pond
+% server --base-directory /home/pond/pond-server-base
+2013/12/24 16:35:46 Started. Listening on port 16333 with identity FJPZWT4E6Y3BOYYXSLJII4EMZPFCU7CDL7DM3AZ4V65X4TGDKN6A</pre>
+
+<h5>Setup a Tor hidden service</h5>
+
+<p>Make a <tt>torrc</tt> for your hidden service, as in this snippet:</p>
+
+<pre>HiddenServiceDir /var/lib/tor/pond_server/
+HiddenServicePort 16333 127.0.0.1:16333</pre>
+
+Restart tor and then get your .onion addr:
+
+<pre>% service tor restart
+% cat /var/lib/tor/pond_server/hostname
+aj642zdpke4dzgf3.onion</pre>
+
+<h5>Construct Pond server URL</h5>
+
+<p>Construct your Pond server url like this: <tt>pondserver://</tt> + pond_server_id + <tt>@</tt> + onion_address. The example above would yield:</p>
+
+<pre>pondserver://FJPZWT4E6Y3BOYYXSLJII4EMZPFCU7CDL7DM3AZ4V65X4TGDKN6A@aj642zdpke4dzgf3.onion</pre>
+
+<h5>Running under <tt>systemd</tt></h5>
+
+<p>The Pond server doesn't fork into the background so <tt>systemd</tt> provides a nice way to run it as a service. Here's an example unit for doing so:</p>
+
+<pre>[Unit]
+Description=Pond
+After=network.target
+
+[Service]
+User=pond
+ExecStart=/home/pond/go/bin/server --base-directory /home/pond/pond-server-base
+StandardOutput=syslog
+StandardError=syslog
+
+[Install]
+WantedBy=multi-user.target</pre>
diff --git a/doc/tech.html b/doc/tech.html
new file mode 100644
index 0000000..f5b1a0f
--- /dev/null
+++ b/doc/tech.html
@@ -0,0 +1,115 @@
+---
+layout: default
+title: Technical
+---
+
+<p>Pond consists of users and servers. Servers exist in order to provide availability by accepting messages for a user while that user may be offline. Servers may be freely chosen by users and each user may have their own server if they wish.</p>
+
+<p>Pond assumes the existence of an overlay network that prevents a network attacker from learning which servers a user is connecting to. That network is taken to be Tor for the remainder of this document and servers are Tor hidden services. Since a global, passive attacker can deanonymise Tor, that attacker is capable of violating this assumption and breaking Pond. Other attacks on Tor may also break this assumption.</p>
+
+<p>Users are assumed to have trustworthy computers with storage that reliably deletes old information. For more details, see the <a href="threat.html">threat model</a>.</p>
+
+<h4>Transport</h4>
+
+<p>Users communicate with servers (and only with servers, never with other users directly) using the transport protocol. Users communicate with their own server to receive messages, but unlike email, they communicate with the <em>recipient's</em> server in order to send a message.</p>
+
+<p>Although Tor hidden services already provide authentication of the server to the client, we don't rely on that. The transport layer provides integrity, forward secure confidentiality and mutual authentication. It's assumed that the public key of the server is already known to the user and the public key of the user isn't revealed to anyone other than the expected server. (Tor does provide another layer of forward secrecy which means that a compromise of the server's keys does not comp [...]
+
+<p>After authentication, the user sends a fixed amount (currently 16KB) of data to the server and the server replies with an identically sized flow. Finally the user sends a secure close message and the connection is complete. Connections are never reused. (The actual messages between the user and the server might be very small, but those messages will be padded to 16KB before being encrypted in order to make the traffic profile constant.)</p>
+
+<p>Users make connections periodically in order to send and receive messages. The time between each connection is exponentially distributed. Each connection is either to the user's own server, to fetch any messages that may be waiting, or to the server of another user, to deliver a message. Connections to the user's own server for fetching messages are authenticated as that user. Connections for delivering messages (whether to a user on the same server or not) are authenticated as fresh, [...]
+
+<p>From the point of view of the network close to the user, all that is seen are randomly timed connections over Tor, all with identical traffic profiles. That profile is fairly distinctive and would allow the network to learn that a host is using Pond, but the network cannot tell when messages are being sent or received.</p>
+
+<p>From the point of view of the user's server, it receives exponentially distributed connections from the user, over Tor, and can reply with a message when one is waiting. The connections are randomly timed, rather than having a constant period, in order to avoid the server learning when the user is sending messages. If a server saw connections at 11 minutes past the hour, 21 minutes and 41 minutes, it's not too hard to guess when the user connected to another server in order to deliver [...]
+
+<p>An attacker who can monitor the network of the server <i>and</i> the user can tell when the user is sending messages to another server because the connection from the user doesn't appear in the expected place. This attacker breaks the overlay network assumptions and therefore breaks the security guarantees.</p>
+
+<h4>Message encryption</h4>
+
+<p>Message encryption follows the lead of OTR. Parties exchange a stream of Diffie-Hellman public values as they exchange messages. We omit OTR's key identifier because that counter reveals information about the number of messages that a pair of users have exchanged. Rather we simply use trial decryption to find the DH values that a particular message is using.</p>
+
+<p>In addition to omitting the key identifier, we also omit OTR's anti-replay counter for the same reason. This allows servers to replay messages to users, although each message has a unique ID and a timestamp. Users have a time-limited anti-replay window within which duplicate messages are suppressed and, outside of that, using the timestamp on the message is viable and abnormally old messages should be highlighted.</p>
+
+<p>Messages are protocol buffers which are padded to a fixed size (currently 16KB less 512 bytes). Messages are encrypted with a <a href="https://github.com/trevp/axolotl/wiki">DH ratchet</a> (thanks to Trevor Perrin for the design). This means that, if a client chooses not to retain a plaintext copy of an outgoing message, then even the sending client cannot decrypt it. (This is not currently surfaced in the UI however.) The random, 24-byte nonce is prepended to the boxed message. Messa [...]
+
+<p>On receipt of a message, the client tries each of the four combinations in order to avoid numbering the keys and having to maintain state that reveals the number of messages exchanged. If the client finds that a message was encrypted using its ‘current’ DH key, the contact has clearly received that key and the client rotates keys and generates a new ‘current’ private key which will be included in future messages to that contact.</p>
+
+<p>In order to facilitate the exchange of messages (and the ratcheting of Diffie-Hellman values) when, semantically, the flow of information may be more unidirectional, Pond encourages messages to be acknowledged. An acknowledgment is a user-initiated action that involves sending an empty reply to a message. This both lets the sender know that their message has been received and allows new Diffie-Hellman values to flow back.</p>
+
+<p>As a matter of custom, users delete messages after a number of days (currently a week). Of course, there is nothing to enforce this in the same way that there's nothing to enforce the custom that OTR IM conversations aren't logged.</p>
+
+<h4>Spam</h4>
+
+<p>Since the bandwidth of this system is so low, a user can trivially be incapacitated by a small number of messages. Because of this, we make the system closed: only authorised users can cause a message to be queued for delivery. This very clearly sets Pond apart from email. There are no public addresses to which a Pond message can be sent. Likewise, it's no longer true that the network is fully connected; if you send a message to two people, they may not be able to reply to each other.</p>
+
+<p>This policy has to be enforced at the servers as they're the parties who accept and enqueue messages. However, we don't want the servers to learn who is sending each message, so we cannot have them authenticate against a list of allowed senders for each user. We could give all allowed senders some shared secret, but then we cannot revoke someone's access without rekeying the entire user's contact list.</p>
+
+<p>So we use the <a href="http://www.robotics.stanford.edu/~xb/crypto04a/groupsigs.pdf">BBS group signature scheme</a>. A server knows a group public key for each user that it accepts mail for. The user provides their contacts with a distinct member private key during key exchange. In order for a message to be delivered to a user's server, the message must be signed by that user's group and the server cannot learn which member of the group signed it.</p>
+
+<p>However, if access needs to be revoked, the user can calculate a revocation for a specific member private key and hand it to the server. In order that the server not then be able to deanonymise all previous messages from the newly revoked contact, the revocation works in such a way that all previous signatures become invalid and each member has to update their private keys given the revocation information. (Except the revoked user, who cannot update their key.) Contacts learn the revo [...]
+
+<h4>Storage</h4>
+
+<p>In order for forward secrecy to be effective, we need a method of deleting expired data so that it cannot be recovered. This is largely an implementation issue. Normal disks work fairly well, but backup schemes can confound secure deletion and so can bad-block remapping. To address the latter as much as possible, we save all state in a single file that is encrypted with a key derived from the user's passphrase and overwritten for every update. This causes large amounts of overwriting  [...]
+
+<p>While such anti-forensic methods are standard, it also appears likely that they are critically flawed in the face of copy-on-write filesystems and log-structured SSDs. Thus, wherever possible, we try to make use of a source of ‘erasure storage’. This is anything that can store a small value and later overwrite it. Currently the only implementation is in the form of TPM NVRAM. The erasure storage value is a random, 32-byte mask that is XORed with the storage key before use. [...]
+
+<p>Because NVRAM has a limited number of update cycles, the mask value is only updated once per day, at most. TPM NVRAM, on top of typical NVRAM, also has the property that it can only be read after presenting the correct key. This stops an attacker from copying the state file and erasure storage value and later attempting to obtain the passphrase. Other types of erasure storage may not have this property however.</p>
+
+<h4>Transport Details</h4>
+
+The transport protocol falls into the category of mutual authentication with identity hiding and is very much taken from the SIGMA-I protocol in section 5.2 of <a href="http://webee.technion.ac.il/~hugo/sigma-pdf.pdf">this paper</a>.
+
+<p>Initially both sides exchange fresh Diffie-Hellman public values in the curve25519 group. From the shared secret, sessions keys for each direction are derived as <tt>SHA256("client keys\x00" + shared_secret)</tt> and <tt>SHA256("server keys\x00" + shared_secret)</tt>. All future messages on the connection are encrypted and authenticated as described in section 9 of <a href="http://cr.yp.to/highspeed/naclcrypto-20090310.pdf">the NaCl paper</a> (i.e. NaCl's secretbox) with a counter nonce.</p>
+
+<p>The server calculates the Diffie-Hellman shared secret between the client's ephemeral public value and the server's long-term, Diffie-Hellman public value, which we'll call <tt>k</tt>. It then sends <tt>HMAC_SHA256(key = k, message = "server proof\x00" + SHA256(clients_ephemeral_public + servers_ephemeral_public))</tt>.</p>
+
+The client is assumed to know the server's long-term key via other means and decrypts and verifies the HMAC. If correct, it sends its long-term, Diffie-Hellman public, as well as a similar HMAC keyed with the shared-secret between the two long-term keys: <tt>HMAC_SHA256(key = k2, message = "client proof\x00" + SHA256(clients_ephemeral_public + servers_ephemeral_public + hmac_from_server))</tt>. (Note that the client's long-term key may actually be ephemeral if the client wishes to authen [...]
+
+<p>At this point, the handshake is complete. The client now sends a padded request to the server, the server replies with an identically padded message and the client finishes by sending an empty message. All these are encrypted and authenticated with NaCl secretbox, as everything since the initial Diffie-Hellman exchange has been.</p>
+
+<p>For details of the higher level protocol, see the <a href="https://github.com/agl/pond/blob/master/protos/pond.proto">protobufs</a>.</p>
+
+<p>It's currently an unanswered question whether timing differences between the home server and other servers will reveal to a network attacker which the user is communicating with and thus when the user is sending messages. Pond sets a random SOCKS5 username in order to request of Tor that different paths be used for every connection but it may be that servers need to delay their replies for a fixed amount of time.</p>
+
+<h4>Key Exchange Details</h4>
+
+<p>Key exchange between two users involves each creating a KeyExchange protobuf (see <a href="https://github.com/agl/pond/blob/master/protos/pond.proto">protobufs</a>). Since Pond servers demand a group signature before accepting a message for delivery, there are no public Pond addresses that can be used to bootstrap a Pond relationship. Rather we currently assume an external, confidential and authentic means for users to exchange KeyExchange messages.</p>
+
+<p>(This may be an important weakness. One obvious answer is to have servers accept, say, 10% of a user's quota of unsigned ‘introduction’ messages.)</p>
+
+<p>A KeyExchange contains a group member private key (which is why they need to be confidential), as well as the information needed to direct a message to a user: their home server and public identity at that server. They also contain an Ed25519 key and the intent is that, in the future, users will be able to update their home servers by sending messages to each of their contacts. Group member revocations are also be signed by this key.</p>
+
+<p>There are two methods of key exchange supported. The first is manual: the KeyExchange messages are serialised with PEM and the user is expected to exchange them with the intended contact, authentically and confidentially. For example, a pre-existing relationship with PGP or OTR keys could be used to bootstrap Pond.</p>
+
+<p>The second method we have deemed Phrase Automated Nym Discovery Authentication or <a href="https://www.github.com/agl/panda">PANDA</a> for short. PANDA allows a relationship to be established via a shared-secret. This works by using a “meeting point” which, currently, involves contacting a central server over Tor. The shared secret is processed with scrypt into a key and two ‘meeting’ IDs. The meeting point simply acts as a pinboard where messages can be posted [...]
+
+<p>The problem of performing a key exchange given a shared secret falls into the topic of Password Authenticated Key Exchange (PAKE), which is a well studied problem. The first PAKE, EKE, was described by Bellovin and Merritt in 1992. However, we have one additional requirement: that the protocol execute in a single round. A round is defined as a message sent by each party simultaneously, thus a message in a given round cannot depend on any other message in the same round. This requireme [...]
+
+<p>I'm most familiar with SPAKE2, but SPAKE2 appears to be unsuitable because it masks Diffie-Hellman values with a mask value raised to the power of the password and requires different mask values for the two parties. Due to our symmetry requirement the two parties would have to use the same value mask. I've proven that the CCDH problem from the SPAKE paper is equally strong when the two mask values are equal, however the mask values appear again in the security proof and it's not obvio [...]
+
+<p>Instead Pond uses EKE2. EKE2 is very similar to SPAKE2 but uses an ideal cipher to encrypt the Diffie-Hellman values rather than masking them with secret group elements.</p>
+
+<p>Our Diffie-Hellman group of choice is curve25519 which results in a 255-bit Diffie-Hellman value, which is larger than the 128-bit block size of most ciphers. Using a typical block cipher mode would result in an attacker having a discomforting amount of control of the resulting plaintext. Using an AEAD mode would give an attacker an authenticator which they could use to mount an offline, brute-force attack on the shared secret. (The attacker may already be able to mount an offline, br [...]
+
+<p>Instead we instantiate the ideal-cipher for EKE2 with a 256-bit block Rijndael. Although AES specifies only a 128-bit block size, Rijndael was originally specified with 128, 192 and 256-bit block sizes. It's very uncommon to find an Rijndael implementation that implements a 256-bit block size, but since performance isn't a concern and nor are side-channels, a custom, toy Rijndael implementation is sufficient.</p>
+
+<p>So EKE2 is used to go from a shared-secret to an ephemeral, shared-key and then the KeyExchange messages are encrypted with that key and exchanged via the second meeting ID.</p>
+
+<p>The shared secret itself can consist of a passphrase, a time and a deck or two of cards. Since humans are poor at generating and remembering secrets, a deck of cards, shuffled and split in half serves quite well. Decks of cards are also commonly available and don't have the downsides that bringing a mobile device to a meeting might have.</p>
+
+<p>Although the two halves of the deck are different, they are sufficient to define a common, canonical set of cards. For Pond, the cards are ordered and the canonical half is the one with the majority of the lowest numbered card. If both halves have the same number of the lowest numbered card then the next lowest is considered. (If each half has exactly the same cards then both are canonical.)</p>
+
+<p>A single deck of cards results in an approximately 48 bit shared secret and two decks is 97 bits. The stacks of cards are a problem to dispose of (unlike a memory, they can be obtained by dumpster diving) but they only need to be protected until the key exchange is complete. After that they are no longer sensitive.</p>
+
+<h4>Weaknesses</h4>
+
+<ol>
+<li>The code is terribly incomplete, unreviewed and I pulled the design out of my backside without consulting anyone.</li>
+<li>Although the protocol doesn't expose too much opportunity for timing attacks (esp given that it works over Tor), several of the primitives do not have constant time implementations on non-amd64 systems, or at all.</li>
+<li>The key exchange system may be too hard for users to get right.</li>
+<li>The system may be too slow for anyone to bother using.</li>
+<li>Measurements about whether timing information can distinguish servers over Tor needs to be collected.</li>
+<li><it>your idea here</it></li>
+</ol>
diff --git a/doc/threat.html b/doc/threat.html
new file mode 100644
index 0000000..a46b0c1
--- /dev/null
+++ b/doc/threat.html
@@ -0,0 +1,89 @@
+---
+layout: default
+title: Threat Model
+---
+
+<h3>Pond threat model</h3>
+
+<p>The threat model is defined in terms of what each possible attacker can achieve. The list is intended to be exhaustive, i.e. if an entity can do something that is not listed here then that should count as a break of Pond. (For now, this document is very new and I may have missed some things.)</p>
+
+<p>Firstly, assumptions about the user:</p>
+
+<ol>
+	<li>The user acts reasonably and in good faith. (Starting off very vaguely! But if the user were to give their private key material to the attacker that would be unreasonable, for example.)</li>
+	<li>The user obtains an authentic copy of Pond.</li>
+</ol>
+
+<p>Secondly, assumptions about the user's computer:</p>
+
+<ol>
+	<li>The computer correctly executes the program and is not compromised by malware.</li>
+	<li>The computer has a TPM or other form of erasable storage.</li>
+</ol>
+
+<p>Lastly, assumptions about the world:</p>
+<ol>
+	<li>The security assumptions of curve25519, Ed25519, salsa20, poly1305, HMAC-SHA256, Rijndael (with a 256-bit block) and pairing based group-signatures are valid.</li>
+</ol>
+
+<p>What the user's home server can achieve:</p>
+
+<ol>
+	<li>A server can learn when a user is online by observing transactions.</li>
+	<li>A server can learn how many messages a user receives, and when they receive them. (But not who sent them.)</li>
+	<li>A server can learn the approximate size of any uploaded detachments, when they are uploaded and when they are downloaded.</li>
+	<li>A server can drop or corrupt any messages.</li>
+	<li>A server can spam a user with invalid messages.</li>
+	<li>A server can duplicate old messages.</li>
+	<li>A server can drop or corrupt any uploaded detachments.</li>
+	<li>A server can estimate the number of contacts who send messages to a given account after that account has issued a revocation based on the number of clients who try to send messages using an expired group generation number.</li>
+	<li>(Future) A server can falsely inform a contact that they have been revoked.</li>
+</ol>
+
+<p>What a global, passive adversary (one who can observe all Internet traffic) can achieve:</p>
+<ol>
+	<li>A GPA can learn who is using Pond and where their home servers are located.</li>
+	<li>A GPA can learn when messages are sent to a non-home server and which server that is.</li>
+	<li>A GPA can observe detachment uploads and downloads, and who is performing each of those actions.</li>
+	<li>A GPA can observe when a shared-secret key exchange is performed and can limit possible set of other parties to those who were also performing a key exchange at the same time.</li>
+</ol>
+
+<p>What a local network attacker can achieve:</p>
+<ol>
+	<li>A local network can observe when a user is using Pond.</li>
+	<li>A local network can block Pond.</li>
+	<li>A local network can observe the approximate size of any detachment uploads and downloads.</li>
+	<li>A local network can observe when a shared-secret key exchange is performed.</li>
+</ol>
+
+<p>What a physical seizure of the user's computer can achieve:</p>
+<ol>
+	<li>After a seizure, an attacker can perform an offline attack against the user's passphrase and obtain undeleted messages if successful.</li>
+</ol>
+
+<p>What a physical compromise of the user's computer can achieve:</p>
+<ol>
+	<li>A compromise of the user's computer can obtain all messages from the point of compromise, onwards.</li>
+</ol>
+
+<p>What the shared-secret key exchange (PANDA) server can achieve:</p>
+<ol>
+	<li>The PANDA server can run offline attacks against the shared secret and can MITM any in-progress exchanges that it can break.</li>
+	<li>The PANDA server can drop or delay any key exchanges that it wishes.</li>
+</ol>
+
+<p>What a contact can achieve:</p>
+<ol>
+	<li>A contact can spam a user with messages.</li>
+	<li>A contact can, to some extent, prove to a third-party that a message came from a user (<a href="http://www.phrack.org/issues.html?issue=68&id=14#article">paper</a>)</li>
+	<li>A contact can retain messages from a user, forever.</li>
+	<li>A contact can learn that a user has revoked a contact (but not which contact, unless they are the revoked contact) at some time after the time of the previous message that they sent to the user.</li>
+	<li>A contact can learn if two of their contacts are actually the same user.</li>
+	<li>Two contacts can confirm if they are communicating with the same user.</li>
+</ol>
+
+<p>What a random person on the Internet can achieve:</p>
+<ol>
+	<li>A random person can attempt an online attack against running PANDA key exchanges and MITM one of the users if they succeed. The other will receive an error.</li>
+	<li>A random person can attempt to DoS a Pond server.</li>
+</ol>
diff --git a/doc/user-cli.html b/doc/user-cli.html
new file mode 100644
index 0000000..64d3378
--- /dev/null
+++ b/doc/user-cli.html
@@ -0,0 +1,173 @@
+---
+layout: default
+title: User guide
+---
+
+<div>
+
+<style scoped>
+.cli {
+	background-color: black;
+	border-radius: 3px;
+	color: white;
+	margin: 0.3cm;
+	padding: 4px;
+	max-width: 65em;
+	font-family: monospace;
+	white-space: pre-wrap;
+	line-height: normal;
+}
+</style>
+
+<h3>User Guide (CLI)</h3>
+
+<p>This documentation is for the command-line interface to Pond. You can start the CLI by passing the <tt>--cli</tt> option to Pond or, if your Pond binary doesn't have the GUI compiled in, it'll always start in CLI mode.</p>
+
+<p>Before running Pond, you need to have <a href="https://torproject.org">Tor</a> running. Pond makes all connections over Tor. Simply having the <a href="https://www.torproject.org/projects/torbrowser.html.en">browser bundle</a> running should be sufficient. There's no danger to having Pond running without Tor, it'll simply not work.</p>
+
+<p>When first starting Pond, you'll be prompted to set a passphrase for Pond's <i>state file</i>, which should look like this:</p>
+
+<div class="cli"><span style="color: #af00ff">></span><span style="color: #af5fff">></span><span style="color: #af87ff">></span> Pond...
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Pond keeps private keys, messages etc on disk for a limited amount of time and that information can be encrypted with a passphrase. If you are comfortable with the security of your home directory, this passphrase can be empty and you won't be prompted for it again. If you set a passphrase and forget it, it cannot be recovered. You will have to start afresh.
+passphrase></div>
+
+<p>The state file contains all of Pond's persistent state and may be encrypted with a passphrase if you wish. If you set a passphrase and then forget it, there is no recovery mechanism. If you believe that the security of your home directory is sufficiently good then you may omit the passphrase completely.</p>
+
+<p><b>The state file should not be copied.</b> Pond depends on the ability to delete past information and making copies of the state file may allow information that should have been deleted, to be recovered. Additionally, Pond is not designed to operate concurrently on multiple computers.</p>
+
+<p>After setting the passphrase (or not), you may be prompted to setup TPM storage if your computer has a TPM chip. Pond depends on being able to erase old information but it is not clear how well modern computers, using SSDs or log-structured filesystems, are able to erase anything. Without some form of special storage, such as a TPM chip, it may be possible to recover “deleted” messages given the passphrase.</p>
+
+<div class="cli"><span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> It's very difficult to erase information on modern computers so Pond tries to use the TPM chip if possible.
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Your computer appears to have a TPM chip. You'll need tcsd (the TPM daemon) running in order to use it.
+Try to configure TPM (y/n)></div>
+
+<p> </p>
+
+<p>Once the passphrase and TPM have been configured, you'll be prompted to create an account on a Pond server.</p>
+
+<div class="cli"><span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> In order to use Pond you have to have an account on a server. Servers may set their own account policies, but the default server allows anyone to create an account. Just hit enter to use the default server [pondserver://ICYUHSAYGIXTKYKXSAHIBWEAQCTEF26WUWEPOVC764WYELCJMUPA@jb644zapje5dvgk3.onion]
+server></div>
+
+<p>A Pond server accepts and stores messages for you since most computers are not constantly connected to the Internet. Anyone can run a Pond server, and you can even run your own if you wish, but there is a default Pond server that is already filled out should you wish to use that one.</p>
+
+<p>Note that one doesn't provide a name, email or any other identifying information when creating a Pond account. A Pond server knows almost nothing about you. For details, see the threat model document.</p>
+
+<p>In order to prevent abuse, the Pond server may ask your computer to perform a certain amount of work before allowing an account to be created. Please be patient, esp on slower computers.</p>
+
+<p>Creating the account will be the first time that Pond tries to connect through Tor and so any errors at this point are likely caused by a problem with network. Ensure that Tor is running and listening for SOCKS5 connections on port 9050 or 9150.</p>
+
+<p> </p>
+
+<p>Once your account has been created, and every time you subsequently start Pond, you'll see a summary of Pond's state. At the moment, there are no messages nor contacts so the summary will be very brief:</p>
+
+<div class="cli"><span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> There are no messages waiting to be transmitted.</div>
+
+<p>At any point you can run the <tt>help</tt> command to list the other commands that are currently available to you:</p>
+
+<div class="cli"><span style="color: #af00ff">></span> help
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> clear              Clear terminal
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> contacts           Show all known contacts
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> drafts             Show drafts
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> help [--all]       List known commands
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> identity           Show identity
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> inbox              Show the Inbox
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> log                Show recent log entries
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> new-contact <name> Start a key exchange with a new contact
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> outbox             Show the Outbox
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> queue              Show the queue
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> quit               Exit Pond
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> status             Show overall Pond status
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> transact-now       Perform a network transaction now</div>
+
+
+<p><b>Unlike regular email, Pond is a closed system.</b> This means that you cannot send messages to another Pond user without establishing a relationship with them first. (This also means that nobody unwelcome can send messages to you - i.e. there is no spam.)</p>
+
+<p>So the first order to business is to add a contact by running the <tt>new-contact</tt> command. (If you don't know anyone else using Pond then I'm afraid that you're rather stuck - such is the nature of network effects.)</p>
+
+<p>Feel free when choosing a name for the contact. The name must be locally unique, but will only be used to refer to the contact. The name that you choose for a contact will not be shared with anyone else.</p>
+
+<p>There are two methods of establishing a new contact - manual keying and shared secrets. Manual keying is suitable if you already have an existing secure channel to the contact, i.e. you have each other's PGP keys, or have OTR setup. However, most people should use shared secrets and that's the default in the CLI.</p>
+
+<p>Shared secret keying allows one to bootstrap secure communication from some shared secret. This may be a random string generated by one of the parties, a physical meeting or perhaps a secure, but low capacity, channel.</p>
+
+<p>Shared secret keying involves contacting a central server (using Tor) and performing a key exchange based on the shared secret. This means that, so long as a MITM attack isn't performed against the shared secret in real time then it's secure for the future. Once the key exchange is complete, the shared secret doesn't need to be strongly protected: possession of it might disclose that a key exchange was performed, but it doesn't allow decryption, impersonation, etc.</p>
+
+<p>In the interests of practicality, it's pretty secure to exchange a shared secret over IM or email. Pond will suggest a randomly generated secret if you don't already have one:</p>
+
+<div class="cli"><span style="color: #af00ff">></span> new-contact Alice
+Enter shared secret with contact, or hit enter to generate, print and use a random one
+secret: 
+<span style="color: #af00ff">></span><span style="color: #af5fff">></span><span style="color: #af87ff">></span> Shared secret: ff947f1bad0945d763247aafa6255dcc
+<span style="color: #af00ff">></span><span style="color: #af5fff">></span><span style="color: #af87ff">></span> Key exchange running in background.</div>
+
+
+<p>Now that the key exchange is pending, there is a contact. The current state of Pond is shown whenever an empty command is entered. So just hit enter and you'll see something like:</p>
+
+<div class="cli"><span style="color: #af00ff">></span>
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Contacts
+   Alice | pending (<span style="color: #00d7ff">qu6</span>)
+
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> There are no messages waiting to be transmitted</div>
+
+<p>The Pond CLI has the concept of a ‘current’ object and whenever you see three letters written like <tt>qu6</tt> in the example above, that's an object that can be selected by entering those three letters. It's called a tag. Go ahead, enter the tag for your pending contact now - they'll be differnt than the example.</p>
+
+<p>The prompt will change to indicate the current object and the type of the object, which is <tt>contact</tt> in this case. Some commands apply to the current object, for example <tt>show</tt>:</p>
+
+<div class="cli"><span style="color: #af00ff">></span> qu6
+<span style="color: #bcbcbc">contact</span>/<span style="color: #00d7ff">qu6</span><span style="color: #af00ff">></span> show
+<span style="color: #ff0000">></span><span style="color: #ff5f00">></span><span style="color: #ff8700">></span> This contact is pending
+  <span style="color: #0087ff">-</span> Name           | Alice
+  <span style="color: #0087ff">-</span> Server
+  <span style="color: #0087ff">-</span> Generation     | 0
+  <span style="color: #0087ff">-</span> Public key     | 0000000000000000000000000000000000000000000000000000000000000000
+  <span style="color: #0087ff">-</span> Identity key   | 0000000000000000000000000000000000000000000000000000000000000000
+  <span style="color: #0087ff">-</span> Client version | 0</div>
+
+<p>Once the key exchange has been completed, messages can be exchanged. <b>Messages are ephemeral.</b> Pond is only software and cannot force the recipient of a message not to retain it, but <b>it is the social norm, and the default in the software, that messages are permanently erased a week from receipt</b>.</p>
+
+<p>In order to send a message, select a contact as the current object and run the <tt>compose</tt> command. Vim will start to let you enter the message. When you save and quit from Vim (by pressing escape and then <tt>ZZ</tt>) the prompt will have changed because the draft message is now the current object.</p>
+
+<p>Since the type of the current object has changed, so will the set of applicable commands. Running help will show the commands that can now be used.</p>
+
+<div class="cli"><span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Created new draft: <span style="color: #00d7ff">u3u</span>
+<span style="color: #af00ff">></span><span style="color: #af5fff">></span><span style="color: #af87ff">></span> Message using 67 of 15758 bytes
+<span style="color: #bcbcbc">draft</span>/<span style="color: #00d7ff">u3u</span><span style="color: #af00ff">></span> help
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> These commands operate on the current object:
+
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> attach <filename>  Attach a file to the current draft
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> close              Close currently opened object
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> delete             Delete a message or contact
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> edit               Edit the draft message
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> remove <number>    Remove an attachment or detachment from a draft message
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> send               Send the current draft
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> show               Show the current object
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> upload <filename>  Upload a file to home server and include key in current draft</div>
+
+<p>When typing and attaching files, you'll see that the size counter changes. Pond messages are always a fixed size in order to make them indistinguishable. But while a short message can always be padded out to the correct size, a long message cannot always be compressed down to fit. While it's unlikely that you'll hit the limit while typing, attachments can quickly balloon the size of a message.</p>
+
+<p>In order to attach a file to a message, use the <tt>attach</tt> command. If the file is small enough then it'll be included in the message directly. Otherwise you'll be prompted to either save an encrypted version of the file, or to upload the file. These are both methods where encryption is used to separate the bulk transfer of the file from from the security of that transfer. By encrypting the file, the problem of securing the transfer is reduced to the problem of securing the encry [...]
+
+<p>By opting to save an encrypted version of the file, you are taking on the job of getting the encrypted file to the recipient yourself. For huge files, this may be the only method. Perhaps you'll put the file on a USB stick and physically hand it to them.</p>
+
+<p>For modest sized detachments (up to a few megabytes - i.e. something that you might attach to an email), you can upload it to your Pond server. The advantage of this is that the upload will occur over Tor and that it's convenient. Your Pond server will have a limit on the amount that it'll store for you however and be aware that the upload is visible to anyone watching your network connection. The contents of the upload are hidden, of course, but the rough size of the file can be obse [...]
+
+<p> </p>
+
+<p>When you send a message, it'll appear in your outbox with a red dot. Hit enter to see Pond's state, including the outbox:</p>
+
+<div class="cli"><span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Created new outbox entry <span style="color: #00d7ff">r7p</span>
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> There is one message waiting to be transmitted
+<span style="color: #bcbcbc">outbox</span>/<span style="color: #00d7ff">r7p</span><span style="color: #af00ff">></span>
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Outbox
+ <span style="color: red">*</span> Alice | Dec 26 17:18 (<span style="color: #00d7ff">r7p</span>)
+
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> Contacts
+   Alice                (<span style="color: #00d7ff">qu6</span>)
+
+<span style="color: #0000ff">></span><span style="color: #005fff">></span><span style="color: #0087ff">></span> There is one message waiting to be transmitted</div>
+
+<p>The red dot means that the message hasn't been transmitted yet. Pond doesn't transmit messages as needed because that would disclose when messages were being sent. Instead it transmits messages at random, whether there's anything to be sent or not. When there's a real message pending, it has to wait until the next randomly timed slot, which could be many minutes.</p>
+
+<p>Once the message has been transmitted, the dot will turn yellow. The dot will turn green when the message has been “acknowledged”. An acknowledgment occurs either when a reply to the message is received, or a special acknowledgment message is received (which is actually just an empty reply). Acknowledgments exist because it's often difficult to know whether a message has been read and replying to every one can be awkward. An acknowledgment is never sent automatically, but  [...]
+
+</div>
diff --git a/doc/user.html b/doc/user.html
new file mode 100644
index 0000000..74dae2b
--- /dev/null
+++ b/doc/user.html
@@ -0,0 +1,100 @@
+---
+layout: default
+title: User guide
+---
+
+<h3>User Guide</h3>
+
+<p>Before running Pond, you need to have <a href="https://torproject.org">Tor</a> running. Pond makes all connections over Tor. Simply having the <a href="https://www.torproject.org/projects/torbrowser.html.en">browser bundle</a> running should be sufficient. There's no danger to having Pond running without Tor, it'll simply not work.</p>
+
+<p>When first starting Pond, you'll be prompted to set a passphrase for Pond's <i>state file</i>, which should look like this:</p>
+
+<img src="images/set-passphrase.svg" style="width: 50em;">
+
+<p>The state file contains all of Pond's persistent state and may be encrypted with a passphrase if you wish. If you set a passphrase and then forget it, there is no recovery mechanism. If you believe that the security of your home directory is sufficiently good then you may omit the passphrase completely.</p>
+
+<p><b>The state file should not be copied.</b> Pond depends on the ability to delete past information and making copies of the state file may allow information that should have been deleted, to be recovered. Additionally, Pond is not designed to operate concurrently on multiple computers.</p>
+
+<p>After setting the passphrase (or not), you may be prompted to setup TPM storage if your computer has a TPM chip. Pond depends on being able to erase old information but it is not clear how well modern computers, using SSDs or log-structured filesystems, are able to erase anything. Without some form of special storage, such as a TPM chip, it may be possible to recover “deleted” messages given the passphrase.</p>
+
+<p> </p>
+
+<p>Once the passphrase and TPM have been configured, you'll be prompted to create an account on a Pond server.</p>
+
+<img src="images/create-account.svg" style="width: 50em;">
+
+<p>A Pond server accepts and stores messages for you since most computers are not constantly connected to the Internet. Anyone can run a Pond server, and you can even run your own if you wish, but there is a default Pond server that is already filled out should you wish to use that one.</p>
+
+<p>Note that one doesn't provide a name, email or any other identifying information when creating a Pond account. A Pond server knows almost nothing about you. For details, see the threat model document.</p>
+
+<p>In order to prevent abuse, the Pond server may ask your computer to perform a certain amount of work before allowing an account to be created. Please be patient, esp on slower computers.</p>
+
+<p>Creating the account will be the first time that Pond tries to connect through Tor and so any errors at this point are likely caused by a problem with network. Ensure that Tor is running and listening for SOCKS5 connections on port 9050 or 9150.</p>
+
+<p> </p>
+
+<p>Once your account has been created, and every time you subsequently start Pond, you'll see the main screen.</p>
+
+<img src="images/main.svg" style="width: 50em;">
+
+<p><b>Unlike regular email, Pond is a closed system.</b> This means that you cannot send messages to another Pond user without establishing a relationship with them first. (This also means that nobody unwelcome can send messages to you - i.e. there is no spam.)</p>
+
+<p>So the first order to business is to add a contact by clicking on the “Add” button. (If you don't know anyone else using Pond then I'm afraid that you're rather stuck - such is the nature of network effects.)</p>
+
+<img src="images/add-contact1.svg" style="width: 50em;">
+
+<p>Feel free when choosing a name for the contact. The name must be locally unique, but will only be used to refer to the contact. The name that you choose for a contact will not be shared with anyone else.</p>
+
+<p>There are two methods of establishing a new contact - manual keying and shared secrets. Manual keying is suitable if you already have an existing secure channel to the contact, i.e. you have each other's PGP keys, or have OTR setup. However, most people should select “Shared secret”.</p>
+
+<p><b><i>WARNING</i>: A manual key exchange message must be confidential as well as authentic.</b> The key exchange message contains an authorisation key that allows the contact to send messages to you as well as public key material. Thus you must exchange it in a confidential as well as authentic manner. Don't put it on pastebin.</p>
+
+<p> </p>
+
+<p>Shared secret keying allows one to bootstrap secure communication from some shared secret. This may be a random string generated by one of the parties, a physical meeting or perhaps a secure, but low capacity, channel.</p>
+
+<p>Shared secret keying involves contacting a central server (using Tor) and performing a key exchange based on the shared secret. This means that, so long as a MITM attack isn't performed against the shared secret in real time then it's secure for the future. Once the key exchange is complete, the shared secret doesn't need to be strongly protected: possession of it might disclose that a key exchange was performed, but it doesn't allow decryption, impersonation, etc.</p>
+
+<p>In the interests of practicality, it's pretty secure to exchange a shared secret over IM or email. One of the parties can generate such a secret by clicking the “Generate” button:</p>
+
+<img src="images/shared-secret1.svg" style="width: 50em;">
+
+<p>Once you have sent/entered the secret, click “Begin” to start the process. You should expect the shared secret key exchange to take 30-60 seconds, even if both parties start it at exactly the same time. It is fine to close Pond while a shared secret keying is in progress: the state of the process will be saved and it's not necessary for both parties to be online at the same time.</p></p>
+
+<p>Shared secret exchanges also support using secrets exchanged from a physical meeting:</p>
+
+<img src="images/shared-secret.svg" style="width: 50em;">
+
+<p>In the screen shot above, the shared secret is a combination of a password, cards and a time. The key exchange only ensures that you end up connected to someone else who knows the same shared secret. You have to ensure that the only such person is who you intend it to be.</p>
+
+<p>The use of a password is hopefully obvious. However, since humans are bad at generating and remembering complex passwords, a method using one or two decks of playing cards is also supported. In order to do this, one party must bring a fresh deck of playing cards to the meeting. Then they must be shuffled (<a href="http://www-stat.stanford.edu/~cgates/PERSI/papers/bayer92.pdf">7 riffle shuffles is recommended</a>), cut into rough halves and then one person takes each half. Although the [...]
+
+<p>(Using one deck is approximately 49 bits of entropy, two decks is about 100.)</p>
+
+<p>Agreeing on a common time (to the minute) for the meeting is recommended, even though it may be public information, because it serves as a salt.</p>
+
+<p> </p>
+
+<p>Once a contact has been setup, messages can be exchanged. <b>Messages are ephemeral.</b> Pond is only software and cannot force the recipient of a message not to retain it, but <b>it is the social norm, and the default in the software, that messages are permanently erased a week from receipt</b>.</p>
+
+<img src="images/compose.svg" style="width: 50em;">
+
+<p>When typing and attaching files, you'll see that the size counter changes. Pond messages are always a fixed size in order to make them indistinguishable. But while a short message can always be padded out to the correct size, a long message cannot always be compressed down to fit. While it's unlikely that you'll hit the limit while typing, attachments can quickly balloon the size of a message.</p>
+
+<p>In order to attach a file to a message, click the plus. You'll be prompted to select a file. If the file is small enough then it'll be included in the message directly. Otherwise you'll be prompted to either save an encrypted version of the file, or to upload the file. These are both methods where encryption is used to separate the bulk transfer of the file from from the security of that transfer. By encrypting the file, the problem of securing the transfer is reduced to the problem o [...]
+
+<p>By opting to save an encrypted version of the file, you are taking on the job of getting the encrypted file to the recipient yourself. For huge files, this may be the only method. Perhaps you'll put the file on a USB stick and physically hand it to them.</p>
+
+<p>For modest sized detachments (up to a few megabytes - i.e. something that you might attach to an email), you can upload it to your Pond server. The advantage of this is that the upload will occur over Tor and that it's convenient. Your Pond server will have a limit on the amount that it'll store for you however and be aware that the upload is visible to anyone watching your network connection. The contents of the upload are hidden, of course, but the rough size of the file can be obse [...]
+
+<p> </p>
+
+<p>When you send a message, it'll appear in your outbox with a red dot.</p>
+
+<img src="images/outbox.svg" style="width: 50em;">
+
+<p>The red dot means that the message hasn't been transmitted yet. Pond doesn't transmit messages as needed because that would disclose when messages were being sent. Instead it transmits messages at random, whether there's anything to be sent or not. When there's a real message pending, it has to wait until the next randomly timed slot, which could be many minutes.</p>
+
+<p>Once the message has been transmitted, the dot will turn yellow. The dot will turn green when the message has been “acknowledged”. An acknowledgment occurs either when a reply to the message is received, or a special acknowledgment message is received (which is actually just an empty reply). Acknowledgments exist because it's often difficult to know whether a message has been read and replying to every one can be awkward. An acknowledgment is never sent automatically, but  [...]
+
+<p>Eventually, received messages will turn grey. This means that they are within one day of being deleted. Received messages that have a pink background are those that have already expired, but the expiration occured when Pond wasn't running. Pond doesn't delete messages for the first five minutes after startup and such messages are shown with a pink background.</p>
diff --git a/editstate/editstate.go b/editstate/editstate.go
new file mode 100644
index 0000000..02ab381
--- /dev/null
+++ b/editstate/editstate.go
@@ -0,0 +1,540 @@
+package main
+
+import (
+	"bytes"
+	crypto_rand "crypto/rand"
+	"encoding/hex"
+	"flag"
+	"fmt"
+	"hash/crc32"
+	"io"
+	"io/ioutil"
+	"math/rand"
+	"os"
+	"os/exec"
+	"os/signal"
+	"reflect"
+	"strconv"
+	"strings"
+	"syscall"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/agl/pond/client/system"
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/ssh/terminal"
+)
+
+var (
+	stateFileName *string = flag.String("state-file", "state", "File in which to save persistent state")
+	skipChecks    *bool   = flag.Bool("skip-checks", false, "If true, system sanity checks are skipped")
+)
+
+func main() {
+	flag.Parse()
+
+	if !do() {
+		os.Exit(1)
+	}
+}
+
+func serialise(out io.Writer, state *disk.State) map[uint32][]byte {
+	entities := make(map[uint32][]byte)
+	serialiseStruct(out, reflect.ValueOf(*state), reflect.TypeOf(*state), "", 0, entities)
+	return entities
+}
+
+func serialiseStruct(out io.Writer, v reflect.Value, t reflect.Type, context string, level uint, entities map[uint32][]byte) {
+	for i := 0; i < t.NumField(); i++ {
+		f := t.Field(i)
+		if f.Name == "XXX_unrecognized" {
+			continue
+		}
+		fv := v.Field(i)
+
+		switch f.Type.Kind() {
+		case reflect.Slice:
+			if f.Type.Elem().Kind() == reflect.Uint8 {
+				serialiseValue(out, f.Name, fv, f.Type, context, level, entities)
+			} else {
+				if f.Type.Elem().Kind() == reflect.Ptr {
+					for i := 0; i < fv.Len(); i++ {
+						serialiseValue(out, f.Name, fv.Index(i).Elem(), f.Type.Elem().Elem(), context, level, entities)
+					}
+				} else {
+					for i := 0; i < fv.Len(); i++ {
+						serialiseValue(out, f.Name, fv.Index(i), f.Type.Elem(), context, level, entities)
+					}
+				}
+			}
+		case reflect.Ptr:
+			if !fv.IsNil() {
+				serialiseValue(out, f.Name, fv.Elem(), f.Type.Elem(), context, level, entities)
+			}
+		default:
+			panic(fmt.Sprintf("Don't know how to serialize %s", f))
+		}
+	}
+}
+
+func escapeString(in string) string {
+	return strings.Replace(strings.Replace(in, "\\", "\\\\", -1), "\"", "\\\"", -1)
+}
+
+var valueSep = []byte(": ")
+var structSep = []byte(" <\n")
+var structEnd = []byte(">")
+var levelMark = []byte("\t")
+
+func contextAppend(context, extra string) string {
+	if len(context) > 0 {
+		context += "."
+	}
+	context += extra
+	return context
+}
+
+func setEntity(entities map[uint32][]byte, data []byte) uint32 {
+	table := crc32.MakeTable(crc32.Castagnoli)
+	crc := crc32.Checksum(data, table)
+	for {
+		other, ok := entities[crc]
+		if !ok {
+			entities[crc] = data
+			return crc
+		}
+		if bytes.Equal(other, data) {
+			return crc
+		}
+		crc++
+	}
+
+	panic("unreachable")
+}
+
+func serialiseValue(out io.Writer, name string, v reflect.Value, t reflect.Type, context string, level uint, entities map[uint32][]byte) {
+	if t.Kind() == reflect.Slice && (context == "Outbox" || context == "Inbox") && name == "Message" {
+		var msg pond.Message
+		if err := proto.Unmarshal(v.Bytes(), &msg); err != nil {
+			fmt.Fprintf(os.Stderr, "Failed to unmarshal Message: %s\n", err)
+			fmt.Fprintf(out, "BAD MESSAGE: \"%x\"\n", v.Bytes())
+			return
+		}
+		v = reflect.ValueOf(msg)
+		serialiseValue(out, name, v, v.Type(), context, level, entities)
+		return
+	}
+	if t.Kind() == reflect.Slice && (context == "Inbox.Message" || context == "Outbox.Message") && name == "Body" {
+		s := string(v.Bytes())
+		v = reflect.ValueOf(s)
+		t = v.Type()
+	}
+	for i := uint(0); i < level; i++ {
+		out.Write(levelMark)
+	}
+	out.Write([]byte(name))
+	switch t.Kind() {
+	case reflect.Slice:
+		// This must be a byte slice.
+		out.Write(valueSep)
+		if context == "Outbox" && name == "Request" ||
+			context == "Outbox.Message.Files" && name == "Contents" ||
+			context == "Inbox.Message.Files" && name == "Contents" {
+			entityName := setEntity(entities, v.Bytes())
+			fmt.Fprintf(out, "<%x>", entityName)
+		} else {
+			raw := v.Bytes()
+			if len(raw) == 0 {
+				out.Write([]byte("\"\""))
+			} else {
+				encoded := make([]byte, hex.EncodedLen(len(raw)))
+				hex.Encode(encoded, raw)
+				out.Write(encoded)
+			}
+		}
+	case reflect.Bool:
+		out.Write(valueSep)
+		fmt.Fprintf(out, "%t", v.Bool())
+	case reflect.String:
+		s := v.String()
+		out.Write(valueSep)
+		if strings.ContainsRune(s, '\n') || name == "Body" {
+			delim := rand.Int63()
+			fmt.Fprintf(out, "<<%x\n", delim)
+			out.Write([]byte(s))
+			fmt.Fprintf(out, "--%x", delim)
+		} else {
+			fmt.Fprintf(out, "\"%s\"", escapeString(v.String()))
+		}
+	case reflect.Uint32, reflect.Uint64:
+		out.Write(valueSep)
+		fmt.Fprintf(out, "%d", v.Uint())
+	case reflect.Int32, reflect.Int64:
+		out.Write(valueSep)
+		fmt.Fprintf(out, "%d", v.Int())
+	case reflect.Struct:
+		out.Write(structSep)
+		serialiseStruct(out, v, t, contextAppend(context, name), level+1, entities)
+		for i := uint(0); i < level; i++ {
+			out.Write(levelMark)
+		}
+		out.Write(structEnd)
+	default:
+		panic(fmt.Sprintf("Don't know how to serialise a %s", t))
+	}
+	fmt.Fprintf(out, "\n")
+}
+
+func parse(state *disk.State, in io.Reader, entities map[uint32][]byte) error {
+	tokenizer := NewTokenizer(in)
+	v := reflect.ValueOf(state).Elem()
+	t := reflect.TypeOf(state).Elem()
+	for {
+		fieldName, err := tokenizer.Next()
+		if err == io.EOF {
+			break
+		}
+		if err != nil {
+			return err
+		}
+		if err := parseStructField(v, t, "", fieldName, tokenizer, entities); err != nil {
+			return err
+		}
+	}
+	return nil
+}
+
+func parseStruct(v reflect.Value, t reflect.Type, context string, in *Tokenizer, entities map[uint32][]byte) error {
+	for {
+		fieldName, err := in.Next()
+		if err != nil {
+			return err
+		}
+		if fieldName == ">" {
+			return nil
+		}
+		if err := parseStructField(v, t, context, fieldName, in, entities); err != nil {
+			return err
+		}
+	}
+
+	panic("unreachable")
+}
+
+func parseStructField(v reflect.Value, t reflect.Type, context, fieldName string, in *Tokenizer, entities map[uint32][]byte) error {
+	f, ok := t.FieldByName(fieldName)
+	if !ok {
+		return fmt.Errorf("line %d: unknown field '%s'", in.Line, fieldName)
+	}
+
+	fv := v.FieldByName(fieldName)
+
+	sep, err := in.Next()
+	if err != nil {
+		return err
+	}
+
+	fieldIsProtobuf := false
+	var protobufType reflect.Type
+	switch f.Type.Kind() {
+	case reflect.Ptr:
+		fieldIsProtobuf = f.Type.Elem().Kind() == reflect.Struct
+		if fieldIsProtobuf {
+			protobufType = f.Type.Elem()
+		}
+	case reflect.Slice:
+		fieldIsProtobuf = f.Type.Elem().Kind() == reflect.Ptr &&
+			f.Type.Elem().Elem().Kind() == reflect.Struct
+		if fieldIsProtobuf {
+			protobufType = f.Type.Elem().Elem()
+		}
+	}
+
+	switch sep {
+	case "<":
+		// Must be a protocol buffer or a slice of them.
+		isSerialized := false
+		if (context == "Inbox" || context == "Outbox") && fieldName == "Message" {
+			// These aren't protobufs in the structure - they need
+			// to be written as a []byte.
+			isSerialized = true
+			var msg pond.Message
+			protobufType = reflect.TypeOf(msg)
+		} else {
+			if !fieldIsProtobuf {
+				return fmt.Errorf("line %d: field %s is not a protobuf, it's a %s", in.Line, fieldName, f.Type)
+			}
+		}
+		value := reflect.New(protobufType)
+		if err := parseStruct(value.Elem(), value.Type().Elem(), contextAppend(context, fieldName), in, entities); err != nil {
+			return err
+		}
+
+		if isSerialized {
+			serialized, err := proto.Marshal(value.Interface().(proto.Message))
+			if err != nil {
+				return fmt.Errorf("line %d: error serialising protobuf: %s", in.Line, err)
+			}
+			fv.SetBytes(serialized)
+		} else {
+			switch f.Type.Kind() {
+			case reflect.Ptr:
+				fv.Set(value)
+			case reflect.Slice:
+				fv.Set(reflect.Append(fv, value))
+			default:
+				panic("impossible")
+			}
+		}
+	case ":":
+		if fieldIsProtobuf {
+			return fmt.Errorf("line %d: field is protobuf, but found ':'", in.Line)
+		}
+		if err := parseValue(fv, f, contextAppend(context, fieldName), in, entities); err != nil {
+			return err
+		}
+	default:
+		return fmt.Errorf("line %d: unexpected '%s'", in.Line, sep)
+	}
+
+	return nil
+}
+
+func parseValue(v reflect.Value, t reflect.StructField, context string, in *Tokenizer, entities map[uint32][]byte) error {
+	token, err := in.Next()
+	if err != nil {
+		return err
+	}
+
+	switch t.Type.Kind() {
+	case reflect.Ptr:
+		switch t.Type.Elem().Kind() {
+		case reflect.String:
+			s := reflect.New(t.Type.Elem())
+			s.Elem().SetString(token)
+			v.Set(s)
+		case reflect.Uint32:
+			value, err := strconv.ParseUint(token, 10, 32)
+			if err != nil {
+				return fmt.Errorf("line %d: cannot parse uint32: %s", in.Line, err)
+			}
+			i := reflect.New(t.Type.Elem())
+			i.Elem().SetUint(value)
+			v.Set(i)
+		case reflect.Uint64:
+			value, err := strconv.ParseUint(token, 10, 64)
+			if err != nil {
+				return fmt.Errorf("line %d: cannot parse uint64: %s", in.Line, err)
+			}
+			i := reflect.New(t.Type.Elem())
+			i.Elem().SetUint(value)
+			v.Set(i)
+		case reflect.Int32:
+			value, err := strconv.ParseInt(token, 10, 32)
+			if err != nil {
+				return fmt.Errorf("line %d: cannot parse int32: %s", in.Line, err)
+			}
+			i := reflect.New(t.Type.Elem())
+			i.Elem().SetInt(value)
+			v.Set(i)
+		case reflect.Int64:
+			value, err := strconv.ParseInt(token, 10, 64)
+			if err != nil {
+				return fmt.Errorf("line %d: cannot parse int64: %s", in.Line, err)
+			}
+			i := reflect.New(t.Type.Elem())
+			i.Elem().SetInt(value)
+			v.Set(i)
+		case reflect.Bool:
+			b := reflect.New(t.Type.Elem())
+			switch token {
+			case "true":
+				b.Elem().SetBool(true)
+			case "false":
+				b.Elem().SetBool(false)
+			default:
+				return fmt.Errorf("line %d: boolean values must be 'true' or 'false', not %s", in.Line, token)
+			}
+			v.Set(b)
+		default:
+			return fmt.Errorf("line %d: unhandled type: pointer to %s", in.Line, t.Type.Elem())
+		}
+	case reflect.Slice:
+		switch t.Type.Elem().Kind() {
+		case reflect.Uint8:
+			var value []byte
+			alwaysSet := false
+
+			if token == "<" {
+				entityToken, err := in.Next()
+				if err != nil {
+					return err
+				}
+				entity, err := strconv.ParseUint(entityToken, 16, 32)
+				if err != nil {
+					return fmt.Errorf("line %d: failed to parse entity token: %s", in.Line, err)
+				}
+				endToken, err := in.Next()
+				if err != nil {
+					return err
+				}
+				if endToken != ">" {
+					return fmt.Errorf("line %d: entity should have ended with '>'", in.Line)
+				}
+
+				var ok bool
+				value, ok = entities[uint32(entity)]
+				if !ok {
+					return fmt.Errorf("line %d: unknown entity id", in.Line)
+				}
+			} else if context == "Inbox.Message.Body" || context == "Outbox.Message.Body" {
+				value = []byte(token)
+				alwaysSet = true
+			} else {
+				value, err = hex.DecodeString(token)
+				if err != nil {
+					return fmt.Errorf("line %d: failed to parse hex value: %s", in.Line, err)
+				}
+			}
+			if len(value) > 0 || alwaysSet {
+				v.SetBytes(value)
+			}
+		default:
+			return fmt.Errorf("line %d: unhandled type: slice of %s", in.Line, t.Type.Elem())
+		}
+	default:
+		return fmt.Errorf("line %d: unhandled type %s", in.Line, t.Type)
+	}
+
+	return nil
+}
+
+func do() bool {
+	if !*skipChecks {
+		if err := system.IsSafe(); err != nil {
+			fmt.Fprintf(os.Stderr, "System checks failed: %s\n", err)
+			return false
+		}
+	}
+
+	editor := os.Getenv("EDITOR")
+	if len(editor) == 0 {
+		fmt.Fprintf(os.Stderr, "$EDITOR is not set\n")
+		return false
+	}
+
+	stateFile := &disk.StateFile{
+		Path: *stateFileName,
+		Rand: crypto_rand.Reader,
+		Log: func(format string, args ...interface{}) {
+			fmt.Fprintf(os.Stderr, format, args...)
+		},
+	}
+
+	stateLock, err := stateFile.Lock(false /* don't create */)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Cannot open state file: %s\n", err)
+		return false
+	}
+	if stateLock == nil {
+		fmt.Fprintf(os.Stderr, "Cannot obtain lock on state file\n")
+		return false
+	}
+	defer stateLock.Close()
+
+	var state *disk.State
+	var passphrase string
+	for {
+		state, err = stateFile.Read(passphrase)
+		if err == nil {
+			break
+		}
+		if err != disk.BadPasswordError {
+			fmt.Fprintf(os.Stderr, "Failed to decrypt state file: %s\n", err)
+			return false
+		}
+
+		fmt.Fprintf(os.Stderr, "Passphrase: ")
+		passphraseBytes, err := terminal.ReadPassword(0)
+		fmt.Fprintf(os.Stderr, "\n")
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "Failed to read password\n")
+			return false
+		}
+		passphrase = string(passphraseBytes)
+	}
+
+	tempDir, err := system.SafeTempDir()
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Failed to get safe temp directory: %s\n", err)
+		return false
+	}
+
+	tempFile, err := ioutil.TempFile(tempDir, "pond-editstate-")
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Failed to create temp file: %s\n", err)
+		return false
+	}
+	tempFileName := tempFile.Name()
+	defer func() {
+		os.Remove(tempFileName)
+	}()
+
+	signals := make(chan os.Signal, 8)
+	signal.Notify(signals, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM)
+	go func() {
+		<-signals
+		println("Caught signal: removing", tempFileName)
+		os.Remove(tempFileName)
+		os.Exit(1)
+	}()
+
+	entities := serialise(tempFile, state)
+
+	var newStateSerialized []byte
+	for {
+		cmd := exec.Command(editor, tempFileName)
+		cmd.Stdin = os.Stdin
+		cmd.Stdout = os.Stdout
+		cmd.Stderr = os.Stderr
+
+		if err := cmd.Run(); err != nil {
+			fmt.Fprintf(os.Stderr, "Failed to run editor: %s\n", err)
+			return false
+		}
+		tempFile.Close()
+		tempFile, err := os.Open(tempFileName)
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "Failed to open temp file: %s\n", err)
+			return false
+		}
+
+		newState := new(disk.State)
+		err = parse(newState, tempFile, entities)
+		if err == nil {
+			newStateSerialized, err = proto.Marshal(newState)
+		}
+		if err == nil {
+			break
+		}
+
+		fmt.Fprintf(os.Stderr, "Error parsing: %s\n", err)
+		fmt.Fprintf(os.Stderr, "Hit enter to edit again, or Ctrl-C to abort\n")
+
+		var buf [100]byte
+		os.Stdin.Read(buf[:])
+	}
+
+	states := make(chan disk.NewState)
+	done := make(chan struct{})
+	go stateFile.StartWriter(states, done)
+	states <- disk.NewState{
+		State:                newStateSerialized,
+		RotateErasureStorage: false,
+		Destruct:             false,
+	}
+	close(states)
+	<-done
+
+	return true
+}
diff --git a/editstate/editstate_test.go b/editstate/editstate_test.go
new file mode 100644
index 0000000..a90b94c
--- /dev/null
+++ b/editstate/editstate_test.go
@@ -0,0 +1,49 @@
+package main
+
+import (
+	"bytes"
+	"io/ioutil"
+	"testing"
+
+	"github.com/agl/pond/client/disk"
+	"github.com/golang/protobuf/proto"
+)
+
+func TestSerializedDeserialize(t *testing.T) {
+	original, err := ioutil.ReadFile("testdata/stateproto")
+	if err != nil {
+		t.Fatalf("Failed to read stateproto: %s", err)
+	}
+
+	state := new(disk.State)
+	if err := proto.Unmarshal(original, state); err != nil {
+		t.Fatalf("Failed to parse stateproto: %s", err)
+	}
+	ioutil.WriteFile("a", []byte(proto.MarshalTextString(state)), 0600)
+
+	var buffer bytes.Buffer
+	entities := serialise(&buffer, state)
+	textual := append([]byte(nil), buffer.Bytes()...)
+	ioutil.WriteFile("text", []byte(textual), 0600)
+	newState := new(disk.State)
+	if err := parse(newState, &buffer, entities); err != nil {
+		t.Fatalf("Failed to parse textual stateproto: %s", err)
+	}
+
+	buffer.Reset()
+	serialise(&buffer, state)
+	textual2 := buffer.Bytes()
+
+	if !bytes.Equal(textual, textual2) {
+	}
+
+	result, err := proto.Marshal(newState)
+	if err != nil {
+		t.Fatalf("Failed to serialise new state: %s", err)
+	}
+
+	if !bytes.Equal(original, result) {
+		ioutil.WriteFile("b", []byte(proto.MarshalTextString(newState)), 0600)
+		t.Fatalf("Result does not equal original")
+	}
+}
diff --git a/editstate/testdata/stateproto b/editstate/testdata/stateproto
new file mode 100644
index 0000000..c59f2e6
Binary files /dev/null and b/editstate/testdata/stateproto differ
diff --git a/editstate/tokenizer.go b/editstate/tokenizer.go
new file mode 100644
index 0000000..3dbbad0
--- /dev/null
+++ b/editstate/tokenizer.go
@@ -0,0 +1,168 @@
+package main
+
+import (
+	"bufio"
+	"fmt"
+	"io"
+	"unicode"
+)
+
+type Tokenizer struct {
+	in   *bufio.Reader
+	Line int
+}
+
+func NewTokenizer(in io.Reader) *Tokenizer {
+	return &Tokenizer{
+		in:   bufio.NewReader(in),
+		Line: 1,
+	}
+}
+
+func (t *Tokenizer) Next() (string, error) {
+	if err := t.eatWhitespace(); err != nil {
+		return "", err
+	}
+
+	token, err := t.nextToken()
+	if err != nil {
+		return "", err
+	}
+
+	if token == "<<" {
+		// Multiline literal
+		if err := t.eatWhitespace(); err != nil {
+			return "", err
+		}
+		delimToken, err := t.nextToken()
+		if err != nil {
+			return "", err
+		}
+		// Eat all whitespace up to a newline.
+		for {
+			r, _, err := t.in.ReadRune()
+			if err != nil {
+				return "", err
+			}
+			if r == '\n' {
+				t.Line++
+				break
+			}
+			if !unicode.IsSpace(r) {
+				return "", fmt.Errorf("line %d: garbage after multiline delimiter", t.Line)
+			}
+		}
+
+		// We only match the deliminator at the beginning of a line.
+		delim := []rune("--" + delimToken)
+
+		var literal []rune
+		matched := 0
+		for {
+			r, _, err := t.in.ReadRune()
+			if err != nil {
+				return "", err
+			}
+			if r == '\n' {
+				t.Line++
+			}
+			literal = append(literal, r)
+			if r == delim[matched] {
+				matched++
+				if matched == len(delim) {
+					return string(literal[:len(literal)-len(delim)]), nil
+				}
+			} else {
+				matched = 0
+				if r == delim[matched] {
+					matched++
+				}
+			}
+		}
+	}
+
+	return token, nil
+}
+
+func (t *Tokenizer) eatWhitespace() error {
+	var isComment bool
+	for {
+		r, _, err := t.in.ReadRune()
+		if err != nil {
+			return err
+		}
+		switch {
+		case r == '\n':
+			t.Line++
+			isComment = false
+		case isComment:
+			continue
+		case unicode.IsSpace(r):
+			continue
+		case r == '#':
+			isComment = true
+		default:
+			t.in.UnreadRune()
+			return nil
+		}
+	}
+
+	panic("unreachable")
+}
+
+func (t *Tokenizer) nextToken() (string, error) {
+	var token []rune
+	var firstIsSpecial, isQuote bool
+
+	for {
+		r, _, err := t.in.ReadRune()
+		if err == io.EOF && len(token) != 0 {
+			if isQuote {
+				return "", fmt.Errorf("line %d: hit EOF in quoted string", t.Line)
+			}
+			return string(token), nil
+		}
+		if err != nil {
+			return "", err
+		}
+		isSpecial := !unicode.IsDigit(r) && !unicode.IsLetter(r)
+		isWhitespace := unicode.IsSpace(r)
+
+		if len(token) == 0 {
+			if isWhitespace && !isQuote {
+				panic("impossible")
+			}
+			firstIsSpecial = isSpecial
+			if r == '"' {
+				if isQuote {
+					// Empty quotes
+					return "", nil
+				}
+				isQuote = true
+				continue
+			}
+		}
+
+		if isQuote {
+			if r == '"' {
+				return string(token), nil
+			}
+			if r == '\n' {
+				return "", fmt.Errorf("line %d: new line in quoted string", t.Line)
+			}
+			if r == '\\' {
+				r, _, err = t.in.ReadRune()
+				if err != nil {
+					return "", err
+				}
+			}
+		} else if isWhitespace || firstIsSpecial != isSpecial {
+			t.in.UnreadRune()
+			return string(token), nil
+		}
+
+		token = append(token, r)
+	}
+
+	panic("unreachable")
+}
diff --git a/editstate/tokenizer_test.go b/editstate/tokenizer_test.go
new file mode 100644
index 0000000..aba9467
--- /dev/null
+++ b/editstate/tokenizer_test.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+	"bytes"
+	"io"
+	"testing"
+)
+
+var tokenizerTests = []struct {
+	in  string
+	out []string
+}{
+	{"foo", []string{"foo"}},
+	{"foo \" \"", []string{"foo", " "}},
+	{"foo \"\"", []string{"foo", ""}},
+	{"foo:", []string{"foo", ":"}},
+	{"foo: bar\n", []string{"foo", ":", "bar"}},
+	{"foo: bar\n", []string{"foo", ":", "bar"}},
+	{"foo: bar\nbaz", []string{"foo", ":", "bar", "baz"}},
+	{"foo: \"bar baz\"", []string{"foo", ":", "bar baz"}},
+	{`foo: <<delim
+--delim`, []string{"foo", ":", ""}},
+	{`foo: <<delim
+
+--delim`, []string{"foo", ":", "\n"}},
+	{`foo: <<delim
+wibble
+wobble
+--delim
+`, []string{"foo", ":", "wibble\nwobble\n"}},
+	{`foo # comment to end of line\n
+bar
+# boo
+baz`, []string{"foo", "bar", "baz"}},
+}
+
+func TestTokenizer(t *testing.T) {
+NextTest:
+	for i, test := range tokenizerTests {
+		tokenizer := NewTokenizer(bytes.NewBufferString(test.in))
+		for j, expected := range test.out {
+			token, err := tokenizer.Next()
+			if err != nil {
+				t.Errorf("%d: error while reading token %d: %s", i, j, err)
+				continue NextTest
+			}
+			if token != expected {
+				t.Errorf("%d: got '%s' as token %d, want '%s'", i, token, j, expected)
+				continue NextTest
+			}
+		}
+		if token, err := tokenizer.Next(); err != io.EOF {
+			t.Errorf("%d: didn't get EOF after last token, rather got: %s %s", i, token, err)
+		}
+	}
+}
diff --git a/icons/pond-icon-blob.svg b/icons/pond-icon-blob.svg
new file mode 100644
index 0000000..cb03a3d
--- /dev/null
+++ b/icons/pond-icon-blob.svg
@@ -0,0 +1,958 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="100%"
+   height="100%"
+   viewBox="0 0 720 720"
+   id="svg2"
+   xml:space="preserve"><metadata
+     id="metadata307"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs567"><linearGradient
+       id="linearGradient6104"><stop
+         id="stop6106"
+         style="stop-color:#000000;stop-opacity:1"
+         offset="0" /><stop
+         id="stop6108"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" /></linearGradient><linearGradient
+       id="linearGradient5960"><stop
+         id="stop5962"
+         style="stop-color:#000000;stop-opacity:1"
+         offset="0" /><stop
+         id="stop5964"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" /></linearGradient><linearGradient
+       id="linearGradient4519"><stop
+         id="stop4521"
+         style="stop-color:#e888d1;stop-opacity:0"
+         offset="0" /><stop
+         id="stop4523"
+         style="stop-color:#024fbf;stop-opacity:1"
+         offset="1" /></linearGradient><linearGradient
+       id="linearGradient4499"><stop
+         id="stop4501"
+         style="stop-color:#1c8ee3;stop-opacity:1"
+         offset="0" /><stop
+         id="stop4503"
+         style="stop-color:#0060bb;stop-opacity:1"
+         offset="1" /></linearGradient><linearGradient
+       id="linearGradient4451"><stop
+         id="stop4453"
+         style="stop-color:#000000;stop-opacity:0.91666669"
+         offset="0" /><stop
+         id="stop4455"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" /></linearGradient><linearGradient
+       x1="-825.02545"
+       y1="386.24564"
+       x2="-85.72821"
+       y2="386.24564"
+       id="linearGradient4489"
+       xlink:href="#linearGradient4451"
+       gradientUnits="userSpaceOnUse" /><linearGradient
+       x1="107.86116"
+       y1="1084.0096"
+       x2="847.15839"
+       y2="1084.0096"
+       id="linearGradient5972"
+       xlink:href="#linearGradient5960"
+       gradientUnits="userSpaceOnUse" /><linearGradient
+       x1="-78.313866"
+       y1="1103.1494"
+       x2="660.9834"
+       y2="1103.1494"
+       id="linearGradient6110"
+       xlink:href="#linearGradient6104"
+       gradientUnits="userSpaceOnUse" /><radialGradient
+       cx="371.43823"
+       cy="167.67934"
+       r="361.97778"
+       fx="371.43823"
+       fy="167.67934"
+       id="radialGradient6116"
+       xlink:href="#linearGradient4499"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9419355,-4.6924988e-6,29.339932)" /><filter
+       color-interpolation-filters="sRGB"
+       id="filter6124"><feGaussianBlur
+         id="feGaussianBlur6126"
+         stdDeviation="4.7325237" /></filter></defs><g
+     id="Layer_1"
+     style="display:none"><path
+       d="m 363.1,720.5 h -7.2 C 159.1,720.5 -0.5,560.9 -0.5,364.1 v -7.2 C -0.5,160.1 159.1,0.5 355.9,0.5 h 7.2 c 196.8,0 356.4,159.6 356.4,356.4 v 7.2 c 0,196.8 -159.6,356.4 -356.4,356.4 z"
+       id="path7"
+       style="fill:#03a9f4;display:inline" /><path
+       d="m 355.9,721 h 7.2 C 559.9,721 719,560.9 719,364.1 v -5.4 C 632,298.6 502.5,260.6 358.5,260.6 215.1,260.6 87,298.4 -1,358 v 6.1 C -1,560.9 159.1,721 355.9,721 z"
+       id="path9"
+       style="fill:#0277bd;display:inline" /><g
+       id="g11"
+       style="display:inline"><g
+         id="g13"><ellipse
+           cx="466.20001"
+           cy="176.7"
+           rx="37.400002"
+           ry="27.4"
+           transform="matrix(0.8006,0.5991,-0.5991,0.8006,198.8172,-244.111)"
+           id="ellipse15"
+           style="fill:#212121" /><ellipse
+           cx="252.3"
+           cy="176.7"
+           rx="37.400002"
+           ry="27.4"
+           transform="matrix(-0.8006,0.5991,-0.5991,-0.8006,560.1591,167.0369)"
+           id="ellipse17"
+           style="fill:#212121" /><path
+           d="m 558.1,454.2 c 0,87.4 -87.9,158.2 -196.3,158.2 -108.4,0 -196.3,-70.8 -196.3,-158.2 0,-87.4 87.9,-320.8 196.3,-320.8 108.4,0 196.3,233.4 196.3,320.8 z"
+           id="path19"
+           style="fill:#eeeeee" /><path
+           d="m 361.7,422.5 c 73.7,0 139.7,33 184.1,85 7.9,-17.2 12.3,-35.7 12.3,-55.1 0,-34.6 -13.8,-92.1 -37.2,-148.9 -42.5,37.2 -98.2,59.8 -159.2,59.8 -61,0 -116.7,-22.6 -159.2,-59.8 -23.4,56.8 -37.2,114.3 -37.2,148.9 0,19.4 4.3,38 12.3,55.1 44.3,-52 110.3,-85 184.1,-85 z"
+           id="path21"
+           style="fill:#212121" /><ellipse
+           cx="235.39999"
+           cy="579.79999"
+           rx="49.799999"
+           ry="36.700001"
+           transform="matrix(0.9148,0.4039,-0.4039,0.9148,254.2517,-45.6899)"
+           id="ellipse23"
+           style="fill:#212121" /><ellipse
+           cx="479.39999"
+           cy="579.79999"
+           rx="49.799999"
+           ry="36.700001"
+           transform="matrix(-0.9148,0.4039,-0.4039,-0.9148,1152.2175,916.6229)"
+           id="ellipse25"
+           style="fill:#212121" /><ellipse
+           cx="304.70001"
+           cy="244.8"
+           rx="44.599998"
+           ry="24.799999"
+           transform="matrix(0.859,-0.512,0.512,0.859,-82.3649,190.5348)"
+           id="ellipse27"
+           style="fill:#212121" /><ellipse
+           cx="414.29999"
+           cy="244.8"
+           rx="44.599998"
+           ry="24.799999"
+           transform="matrix(-0.859,-0.512,0.512,-0.859,644.8704,667.1891)"
+           id="ellipse29"
+           style="fill:#212121" /><ellipse
+           cx="315.70001"
+           cy="238.2"
+           rx="8.8999996"
+           ry="14.6"
+           id="ellipse31"
+           style="fill:#eeeeee" /><ellipse
+           cx="404.10001"
+           cy="238.2"
+           rx="8.8999996"
+           ry="14.6"
+           id="ellipse33"
+           style="fill:#eeeeee" /><path
+           d="m 383.9,274.1 c 0,3 -10.1,10.1 -22.5,10.1 -12.4,0 -22.5,-7.1 -22.5,-10.1 0,-3 10.1,-5.4 22.5,-5.4 12.4,0 22.5,2.4 22.5,5.4 z"
+           id="path35"
+           style="fill:#212121" /></g><path
+         d="m 168.7,419.4 30.4,-107.5 -118.3,120.9 0,0 c -4.2,3.4 -6.9,8.6 -6.9,14.4 0,10.2 8.7,18.5 18.9,18.5 3.2,0 5.3,-0.8 9.3,-2.3 v 0 l -0.4,0 c 0.7,-0.4 1.2,-0.9 1.9,-1.3 l 65.1,-42.7 z"
+         id="path37"
+         style="fill:#212121" /><path
+         d="m 554.9,419.4 -30.4,-107.5 118.3,120.9 0,0 c 4.2,3.4 6.9,8.6 6.9,14.4 0,10.2 -8.5,18.5 -18.7,18.5 -3.2,0 -6.1,-0.8 -9.1,-2.3 v 0 l 0.2,0 c -0.7,-0.4 -1.3,-0.9 -2,-1.3 l -65.2,-42.7 z"
+         id="path39"
+         style="fill:#212121" /></g><path
+       d="m -4560.1,-2947 h -16.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -14.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -16.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 [...]
+       id="path41"
+       style="fill:#4fc3f7;display:inline" /><g
+       id="g43"
+       style="display:inline"><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2896.5"
+         id="rect45"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2896.5"
+         id="rect47"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2896.5"
+         id="rect49"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2896.5"
+         id="rect51"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2704.5"
+         id="rect53"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2704.5"
+         id="rect55"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2704.5"
+         id="rect57"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2704.5"
+         id="rect59"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2512.5"
+         id="rect61"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2512.5"
+         id="rect63"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2512.5"
+         id="rect65"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2512.5"
+         id="rect67"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /></g><path
+       d="m -4569.5,-2394 c 0,11.8 6.5,22.3 14.5,28.9 v -57.8 c -8,6.6 -14.5,17.1 -14.5,28.9 z"
+       id="path69"
+       style="fill:none;display:inline" /><path
+       d="m -4568.5,-2466 c 0,11.4 5.5,21.5 13.5,28.1 v -56.2 c -8,6.6 -13.5,16.7 -13.5,28.1 z"
+       id="path71"
+       style="fill:none;display:inline" /><path
+       d="m -4749,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path73"
+       style="fill:none;display:inline" /><path
+       d="m -4821,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path75"
+       style="fill:none;display:inline" /><path
+       d="m -4561.1,-2272 h 6.1 v -6.9 c -2,1.9 -4.2,3.9 -6.1,6.9 z"
+       id="path77"
+       style="fill:none;display:inline" /><path
+       d="m -4569.5,-2322 c 0,11.8 6.5,22.3 14.5,28.9 v -57.8 c -8,6.6 -14.5,17.1 -14.5,28.9 z"
+       id="path79"
+       style="fill:none;display:inline" /><path
+       d="m -4677,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path81"
+       style="fill:none;display:inline" /><path
+       d="m -4605,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path83"
+       style="fill:none;display:inline" /><polygon
+       points="57,199 72,164 181.7,626 155.6,619 "
+       id="polygon85"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="202,425.9 189,425 115.9,601 136.4,610 "
+       id="polygon87"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="557,619 629,207 614,192.6 538,619 "
+       id="polygon89"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="509.9,432 520,405.8 613,584 602,597 "
+       id="polygon91"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="592,251.6 583.5,270 657,501.4 667,490.8 "
+       id="polygon93"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="645,353 654,360 637.4,518 620.8,509 "
+       id="polygon95"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="125,241 108,246.6 44,501.4 57,518 "
+       id="polygon97"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="28,379.5 38,360 95,490.8 84.5,498 "
+       id="polygon99"
+       style="fill:#7cb342;display:inline" /></g><g
+     id="Layer_6"
+     style="display:none"><rect
+       width="720"
+       height="720"
+       x="0"
+       y="0"
+       id="rect105"
+       style="fill:#0288d1;display:inline" /><path
+       d="m -1726.2,-632 h -7.7 c -210,0 -380.2,170.2 -380.2,380.2 v 7.7 c 0,210 170.2,380.2 380.2,380.2 h 7.7 c 210,0 380.2,-170.2 380.2,-380.2 v -7.7 c 0,-210 -170.2,-380.2 -380.2,-380.2 z"
+       id="path107"
+       style="fill:#0288d1;display:inline" /><path
+       d="m -1888,-240 c 0,0 -198.2,241.1 148,232 267,-7 213,-120 210,-145 -18,-40 -79,-87 -79,-87 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 z"
+       id="path109"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m -1742,-82 c 144.9,-3.8 195.3,-38.8 210.5,-74.1 -19.6,-39.3 -77.5,-83.9 -77.5,-83.9 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 0,0 -36.3,44.1 -50.7,93.9 18.4,38.4 72.5,67.4 196.7,64.1 z"
+       id="path111"
+       style="fill:#ffffff;display:inline" /><g
+       id="g113"
+       style="display:inline"><path
+         d="m -1947.7,-114.3 c 0,-6.7 27.7,-48.3 97.7,0 70,48.3 61,74.5 61,74.5 0,0 -21,26.9 19,50.9 10,34 -13.7,60.7 -41,64 -72.5,8.7 -154.8,-110.9 -136.7,-189.4 z"
+         id="path115"
+         style="fill:#222222" /><path
+         d="m -1770.5,43 c -26.3,3 -53.9,-10.8 -77.4,-33.5 -16.7,-32.9 -24.7,-69.5 -17.7,-99.9 0,-3.2 6.5,-14.7 21.2,-20.1 -1.8,-1.3 -3.6,-2.6 -5.5,-3.9 -25.7,-17.8 -45.7,-23.4 -60.7,-23 -0.1,0 -0.1,0 -0.2,0 -2.5,0.1 -4.8,0.3 -7,0.6 0,0 0,0 -0.1,0 -7.4,1.2 -13.3,3.9 -17.8,7.1 0,0 0,0 0,0 -1.3,0.9 -2.6,1.9 -3.7,2.9 0,0 0,0 0,0 -0.4,0.3 -0.7,0.7 -1.1,1 0,0 0,0 0,0 -0.7,0.7 -1.3,1.3 -1.9,2 0,0 0,0 -0.1,0.1 -0.3,0.3 -0.5,0.6 -0.8,0.9 0,0 -0.1,0.1 -0.1,0.1 -0.5,0.6 -1,1.3 -1.4,1.9 0,0 0,0.1 - [...]
+         id="path117"
+         style="fill:#2a2a2a" /><path
+         d="m -1918.7,-130.3 c 0,-1.3 1,-3.8 3.1,-6.7 -22.4,2.6 -32.1,18.8 -32.1,22.7 -18.1,78.5 64.2,198.1 136.7,189.3 11.9,-1.5 23.1,-7.3 31.2,-16.3 -0.7,0.1 -1.4,0.2 -2.2,0.3 -72.5,8.8 -154.8,-110.8 -136.7,-189.3 z"
+         id="path119"
+         style="fill:#333333" /></g><path
+       d="m -1583,-155 c -18,97 -51,101 -54.4,148.2 C -1529,142 -1429,-149 -1583,-155 z"
+       id="path121"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m -1576.3,-154.5 c -2.2,-0.2 -4.4,-0.4 -6.7,-0.5 -18,97 -51,101 -54.4,148.2 4.5,6.1 8.9,11.5 13.3,16.2 56.6,-4.1 90.8,-112.6 47.8,-163.9 z"
+       id="path123"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1622.5,-381.6 c 0,-0.2 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 -10.6,-7.1 -10.6,-7.1 l -202.4,5.9 c 0,0 -12.1,16.5 -19.3,21.3 -7.2,4.9 0,137.3 0,137.3 0,0 120.1,-40.7 201.4,0 71.4,-50.6 32.9,-154.9 31.1,-157.2 z"
+       id="path125"
+       style="fill:#222222;display:inline" /><path
+       d="m -1624.5,-381.6 c 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 -0.5,141.2 -33.9,153.2 5.7,5.7 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 20.7,6 88.7,-26.7 92.7,-78 -13.9,-47.4 -122.2,-222.6 -122.2,-222.6 z"
+       id="path127"
+       style="fill:#2a2a2a;display:inline" /><g
+       id="g129"
+       style="display:inline"><path
+         d="m -1857,-361.7 c 0,0 -17.3,5.3 -22,40.7 -4.7,35.4 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 12,-20.6 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -56.7,74 -56.7,74 0,0 16.7,-32.9 13.3,-62.1 -3.3,-29.3 -37.3,-56 -37.3,-56 z"
+         id="path131"
+         style="fill:#2a2a2a" /><path
+         d="m -1843,-241 c -35,-9.3 -4.5,-110.7 -4.3,-111.9 -10,-12.5 -9.7,-8.7 -9.7,-8.7 0,0 -17.3,5.3 -22,40.7 -4.7,35.3 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 1.7,-3 22.7,-67.9 24.5,-71.7 -47.3,-4.5 -78.8,9.2 -102.5,2.9 z"
+         id="path133"
+         style="fill:#3a3a3a" /><path
+         d="m -1869.6,-181.8 c 42.1,14.7 97.5,21.7 104.6,9.5 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -74.2,101.1 -93.3,135.8 z"
+         id="path135"
+         style="fill:#3a3a3a" /><path
+         d="m -1686.3,-332.3 c -1,-2.8 -11.9,-2.7 -25.9,-1 -2.9,7 -5.8,12.8 -8.1,15.4 -7.3,8 -35.3,19.3 -35.7,28.7 -0.3,9.3 -13,55.3 -25,76 -8.8,15.2 -91.9,0.8 -131.8,-21.2 -2,5.2 -3.6,10.4 -4.9,15.6 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8.2 20.6,-48.2 18,-55.5 z"
+         id="path137"
+         style="fill:#333333" /></g><path
+       d="m -1627,-447.7 c 0,26.7 -3.9,64.8 -22,81.3 -21,19.2 -63.7,6 -97.5,6 -36.3,0 -75.6,12.2 -96.5,-12 -15.4,-17.8 -18,-38.9 -18,-63.3 0,-37.4 17.5,-84.1 50,-108.7 17.6,-13.3 42.7,-16.3 64.8,-16.3 18.2,0 36,1 51.8,9 39.1,19.6 67.4,63.1 67.4,104 z"
+       id="path139"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m -1493.7,-558.8 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path141"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1525.7,-553.8 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path143"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1596,-127.7 c -0.7,-11.3 19.5,-38.7 8.1,-64 -11.4,-25.3 -55.3,-54.5 -55.3,-54.5 l -14.2,16.8 c 0,0 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 6.6,1.9 18,-0.1 30.6,-5.4 -19.8,-6.6 -31.9,-29.2 -32.6,-40.3 z"
+       id="path145"
+       style="fill:#222222;display:inline" /><path
+       d="m -1622.5,-381.6 -3.3,35 c 0,0 77,153.4 67.4,182.5 -7,21.1 -44.9,23.8 -57.3,37.7 -10.4,11.6 12.8,35.6 19,36.8 24,4.7 92.3,-49.5 94.3,-69.5 2.1,-19.9 -120.1,-222.5 -120.1,-222.5 z"
+       id="path147"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m -1694.3,-551.7 c -15.9,-8 -33.6,-9 -51.8,-9 -22.2,0 -47.2,3 -64.8,16.3 -27.5,20.8 -44.3,57.4 -48.8,90.9 1.9,14.9 6.5,28.3 16.8,40.1 10.8,12.4 42.8,18.8 42.8,20.8 0,14.1 21.4,25.5 47.9,25.5 26.4,0 47.9,-11.4 47.9,-25.5 0,-1.9 42.5,-3 55.5,-14.8 12.8,-11.7 18.5,-34.1 20.7,-55.7 -6.1,-36 -32,-71.4 -66.2,-88.6 z"
+       id="path149"
+       style="fill:#ffffff;display:inline" /><path
+       d="m -1784.5,-477 c -10.5,1 -15.5,13.5 -25,32.5 -9.5,19 6.5,26 12.5,23 6,-3 19.8,-30.5 25,-36 1.2,-3.3 -2,-20.5 -12.5,-19.5 z"
+       id="path151"
+       style="fill:#333333;display:inline" /><path
+       d="m -1715.7,-479 c 10.5,1 15.5,13.5 25,32.5 9.5,19 -6.5,26 -12.5,23 -6,-3 -19.8,-30.5 -25,-36 -1.2,-3.3 2,-20.5 12.5,-19.5 z"
+       id="path153"
+       style="fill:#333333;display:inline" /><path
+       d="m -1776.5,-403.3 c 0,-8 13.5,-9.3 22.8,-9.3 13,0 25.3,4 25.3,9.3 0,5.3 -20,17.5 -24,17.5 -4.1,0 -24.1,-9.5 -24.1,-17.5 z"
+       id="path155"
+       style="fill:#222222;display:inline" /><path
+       d="m -1752,-377.7 c 0,0 -19,7.9 -43.2,-3.3 0,2.5 21.2,13.8 43.2,13.8 22,0 43.2,-11.3 43.2,-13.8 -24.2,11.2 -43.2,3.3 -43.2,3.3 z"
+       id="path157"
+       style="fill:#333333;display:inline" /><path
+       d="m -1814.3,-539.7 c -13,-7 -24.8,-30.2 -36.7,-18.3 -11.9,11.9 -23.1,54.5 -19.3,58.3 3.8,3.8 17,20.6 17,20.6 0,0 41,-53.2 39,-60.6 z"
+       id="path159"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1693,-547 c 0,0 12.4,-23.5 23.7,-29.7 42.3,5 34.7,58.3 35.3,66 -3.3,3.3 -13.7,6.3 -13.7,6.3 L -1693,-547 z"
+       id="path161"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1752.5,-396.8 c 2.8,0 13.7,-6.1 19.8,-11.6 -4.7,-2.6 -12.7,-4.2 -21,-4.2 -6.6,0 -15.5,0.6 -19.9,4 5.6,6.3 18,11.8 21.1,11.8 z"
+       id="path163"
+       style="fill:#333333;display:inline" /><path
+       d="m -1822.4,-522.6 c 5.1,-8.1 8.6,-14.8 8,-17.1 -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 1.1,1.1 3,3.3 5.1,5.9 3.7,-14 10.3,-31.3 17.2,-38.2 8.5,-8.4 16.9,0.9 25.7,9.4 z"
+       id="path165"
+       style="fill:#333333;display:inline" /><path
+       d="m -1669.3,-576.7 c -11.2,6.2 -23.7,29.7 -23.7,29.7 l 4.3,4.1 c 3.6,-4.5 7.5,-8.6 11.4,-10.7 28.6,3.4 34.4,28.9 35.3,47.4 3,-1.2 6.4,-2.7 8,-4.4 -0.7,-7.7 7,-61.1 -35.3,-66.1 z"
+       id="path167"
+       style="fill:#333333;display:inline" /><path
+       d="m -1825,-248.7 c 0,0 0.7,-62.8 42.3,-81.6 -3.4,59.9 -42.3,81.6 -42.3,81.6 z"
+       id="path169"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1547.7,-196 -4.7,5.3 c 0,0 -95.3,-149.7 -233.3,-135 -2,-1.9 -2.9,-3.3 -2.7,-4.2 140.7,-25.4 240.7,133.9 240.7,133.9 z"
+       id="path171"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1915.7,-354 c 0,0 91.3,-12.7 131.3,25.3 -87.9,9.4 -131.3,-25.3 -131.3,-25.3 z"
+       id="path173"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1832.4,-401.2 c 0,0 49.6,33.4 47.2,73.3 -46.2,-33.9 -47.2,-73.3 -47.2,-73.3 z"
+       id="path175"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1788.3,-329.8 c -62.1,21.8 -81.7,77.3 -81.7,77.3 0,0 -0.2,-2.4 5,2.7 28.3,-50.7 79.4,-78 79.4,-78 0,0 6.8,-2 -2.7,-2 z"
+       id="path177"
+       style="fill:#689f38;display:inline" /><g
+       id="g179"
+       style="display:inline"><path
+         d="m -1845.2,-189.7 c 0,0 -34.3,-35.8 -21.3,-69.4 31.2,35.7 21.3,69.4 21.3,69.4 z"
+         id="path181"
+         style="fill:#689f38" /></g><path
+       d="m -1940.6,-203.7 c 0,0 32.1,-54 77.5,-49.4 -33,50.1 -77.5,49.4 -77.5,49.4 z"
+       id="path183"
+       style="fill:#689f38;display:inline" /><g
+       id="g185"
+       style="display:inline"><path
+         d="m -1928.8,-266.8 c 0,0 45,-11 66,15.3 -43.5,8.5 -66,-15.3 -66,-15.3 z"
+         id="path187"
+         style="fill:#689f38" /></g><path
+       d="m -1828.8,-392.3 c 3.1,13.1 12.5,37 40.3,59.3 -3.5,-26.9 -28.3,-49.7 -40.3,-59.3 z"
+       id="path189"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1794.7,-332.1 c -33.2,-25 -86,-24.1 -110.2,-22 17.9,10.8 54.6,26.6 110.2,22 z"
+       id="path191"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1784.7,-327.1 c -27.9,19.7 -36.6,54.4 -39.3,73.4 14.3,-12.2 33.9,-35.4 39.3,-73.4 z"
+       id="path193"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.4,-253.4 c -16.3,-15.6 -42.4,-14.4 -55,-12.6 7.8,5.8 26.3,16.2 55,12.6 z"
+       id="path195"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.3,-254.1 c -29.2,3.1 -51.6,28.8 -61.2,41.8 14.5,-3.1 39.7,-12.6 61.2,-41.8 z"
+       id="path197"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1798,-236.4 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path199"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1795,-233.4 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path201"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1788.9,-330.1 c -51.7,20.7 -77.9,66.2 -81.5,75.1 0.4,0.4 4.4,2.9 4.9,3.4 11.1,-36.3 48.6,-64.2 77.6,-76.7 0.1,-1.2 -0.3,-2.2 -1,-1.8 z"
+       id="path203"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.6,-254 c -4.5,22.4 9.4,44.6 17.6,55.5 1,-11.1 -0.2,-32.5 -17.6,-55.5 z"
+       id="path205"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1864.9,-246.8 c -3,14.6 6.1,29.1 11.5,36.2 0.7,-7.2 -0.1,-21.1 -11.5,-36.2 z"
+       id="path207"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1874.6,-249.8 c -17.1,1.8 -30.3,16.9 -35.9,24.5 8.5,-1.8 23.3,-7.4 35.9,-24.5 z"
+       id="path209"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1872.2,-255.4 c -8.8,-8.4 -22.9,-7.7 -29.7,-6.8 4.2,3.1 14.2,8.8 29.7,6.8 z"
+       id="path211"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1790.5,-318 c -11.5,9.3 -15.1,25.6 -16.2,34.5 5.9,-5.7 14,-16.6 16.2,-34.5 z"
+       id="path213"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1807.7,-336.5 c -18.3,-11.8 -47.2,-11.3 -60.6,-10.3 9.9,5.1 30,12.5 60.6,10.3 z"
+       id="path215"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1551.2,-191.3 2.1,-2.3 c -8.6,-13.3 -104.5,-155.8 -239.8,-136.5 0.3,0.3 0.7,1.5 1,1.8 141.2,-13.1 236.7,137 236.7,137 z"
+       id="path217"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1818.4,-376.5 c 1.9,8 7.7,22.8 24.8,36.5 -2.1,-16.6 -17.3,-30.6 -24.8,-36.5 z"
+       id="path219"
+       style="fill:#a9d86c;display:inline" /><g
+       id="g221"
+       style="display:inline"><path
+         d="m -2583,-531 h -5.4 c -148.3,0 -268.6,120.3 -268.6,268.6 v 5.4 c 0,148.3 120.3,268.6 268.6,268.6 h 5.4 c 148.3,0 268.6,-120.3 268.6,-268.6 v -5.4 c 0,-148.4 -120.3,-268.6 -268.6,-268.6 z"
+         id="path223"
+         style="fill:#0288d1" /><path
+         d="m -2697.3,-254 c 0,0 -140,170.3 104.6,163.9 188.6,-4.9 150.5,-84.8 148.4,-102.4 -12.7,-28.3 -55.8,-61.5 -55.8,-61.5 0,0 -31.2,-21.2 -92.9,-21.9 -34.4,-5 -57.2,6.9 -104.3,21.9 z"
+         id="path225"
+         style="fill:#eeeeee" /><path
+         d="m -2594.2,-142.4 c 102.4,-2.7 138,-27.4 148.7,-52.3 -13.9,-27.8 -54.8,-59.3 -54.8,-59.3 0,0 -31.2,-21.2 -92.9,-21.9 -34.2,-4.9 -57.1,6.9 -104.2,21.9 0,0 -25.6,31.2 -35.8,66.3 13.1,27.1 51.3,47.6 139,45.3 z"
+         id="path227"
+         style="fill:#ffffff" /><g
+         id="g229"><path
+           d="m -2739.5,-165.3 c 0,-4.7 19.5,-34.1 69,0 49.5,34.1 43.1,52.6 43.1,52.6 0,0 -14.8,19 13.4,35.9 7.1,24 -9.7,42.9 -29,45.2 -51.2,6.4 -109.3,-78.1 -96.5,-133.7 z"
+           id="path231"
+           style="fill:#222222" /><path
+           d="m -2614.3,-54.1 c -18.6,2.1 -38.1,-7.7 -54.7,-23.6 -11.8,-23.2 -17.5,-49.1 -12.5,-70.6 0,-2.3 4.6,-10.4 15,-14.2 -1.3,-0.9 -2.5,-1.8 -3.9,-2.7 -18.2,-12.5 -32.3,-16.5 -42.9,-16.3 0,0 -0.1,0 -0.1,0 -1.7,0 -3.4,0.2 -4.9,0.4 0,0 0,0 0,0 -5.2,0.9 -9.4,2.8 -12.6,5 0,0 0,0 0,0 -1,0.7 -1.8,1.4 -2.6,2.1 0,0 0,0 0,0 -0.3,0.2 -0.5,0.5 -0.7,0.7 0,0 0,0 0,0 -0.5,0.5 -0.9,0.9 -1.3,1.4 0,0 0,0 0,0.1 -0.2,0.2 -0.4,0.4 -0.5,0.6 0,0 0,0 -0.1,0.1 -0.4,0.4 -0.7,0.9 -1,1.3 0,0 0,0 0,0.1 -0.1,0 [...]
+           id="path233"
+           style="fill:#2a2a2a" /><path
+           d="m -2719,-176.6 c 0,-0.9 0.7,-2.7 2.2,-4.7 -15.8,1.8 -22.7,13.2 -22.7,16 -12.8,55.5 45.3,140 96.6,133.8 8.4,-1 16.3,-5.2 22,-11.5 -0.5,0.1 -1,0.2 -1.5,0.2 -51.3,6.2 -109.4,-78.2 -96.6,-133.8 z"
+           id="path235"
+           style="fill:#333333" /></g><path
+         d="m -2481.8,-194 c -12.7,68.5 -36,71.4 -38.5,104.7 76.6,105.1 147.3,-100.5 38.5,-104.7 z"
+         id="path237"
+         style="fill:#3a3a3a" /><path
+         d="m -2477.1,-193.7 c -1.5,-0.1 -3.1,-0.3 -4.7,-0.3 -12.7,68.5 -36,71.4 -38.5,104.7 3.2,4.3 6.3,8.1 9.4,11.4 40,-2.9 64.2,-79.5 33.8,-115.8 z"
+         id="path239"
+         style="fill:#2a2a2a" /><path
+         d="m -2509.7,-354.1 c 0,-0.2 0,-0.3 0,-0.5 0,0.1 -0.1,0.2 -0.1,0.3 -3,-3.6 -7.5,-5 -7.5,-5 l -143,4.2 c 0,0 -8.6,11.6 -13.7,15.1 -5.1,3.4 0,97 0,97 0,0 84.8,-28.7 142.3,0 50.4,-35.8 23.2,-109.5 22,-111.1 z"
+         id="path241"
+         style="fill:#222222" /><path
+         d="m -2511.1,-354.1 c 0,0 0,-0.3 0,-0.5 0,0.1 -0.1,0.2 -0.1,0.3 -3.1,-3.5 0.1,0.2 0.1,0.2 0,0 -0.4,99.8 -23.9,108.3 4,4 18.5,12.2 26.5,30.1 8,17.9 -6.2,37.2 -5.7,45.2 0.5,8 9.4,24.5 24,28.7 14.6,4.2 62.6,-18.8 65.5,-55.1 -9.9,-33.4 -86.4,-157.2 -86.4,-157.2 z"
+         id="path243"
+         style="fill:#2a2a2a" /><g
+         id="g245"><path
+           d="m -2675.4,-340 c 0,0 -12.2,3.8 -15.5,28.7 -3.3,25 -21.7,48.5 -27.3,72.1 -5.7,23.6 99.4,47.6 107.9,33 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.2,-5.7 14.6,-33.9 12.7,-39.1 -1.9,-5.2 -53.2,3.8 -63.6,10.4 -10.4,6.6 -40,52.3 -40,52.3 0,0 11.8,-23.3 9.4,-43.9 -2.5,-20.7 -26.5,-39.5 -26.5,-39.5 z"
+           id="path247"
+           style="fill:#2a2a2a" /><path
+           d="m -2665.6,-254.8 c -24.7,-6.6 -3.2,-78.2 -3,-79.1 -7,-8.8 -6.8,-6.2 -6.8,-6.2 0,0 -12.2,3.8 -15.5,28.7 -3.3,25 -21.7,48.5 -27.3,72.1 -5.7,23.6 99.4,47.6 107.9,33 1.2,-2.1 16.1,-48 17.3,-50.7 -33.5,-3 -55.8,6.7 -72.6,2.2 z"
+           id="path249"
+           style="fill:#3a3a3a" /><path
+           d="m -2684.3,-212.9 c 29.7,10.4 68.9,15.4 73.9,6.7 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.2,-5.7 14.6,-33.9 12.7,-39.1 -1.9,-5.2 -53.2,3.8 -63.6,10.4 -10.4,6.6 -52.4,71.5 -65.9,96 z"
+           id="path251"
+           style="fill:#3a3a3a" /><path
+           d="m -2554.9,-319.3 c -0.7,-1.9 -8.4,-1.9 -18.3,-0.7 -2,4.9 -4.1,9.1 -5.8,10.9 -5.2,5.7 -25,13.7 -25.2,20.3 -0.2,6.6 -9.2,39.1 -17.7,53.7 -6.2,10.8 -64.9,0.5 -93.1,-15 -1.4,3.7 -2.6,7.3 -3.5,11 -5.7,23.6 99.4,47.6 107.9,33 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.3,-5.7 14.7,-34 12.8,-39.2 z"
+           id="path253"
+           style="fill:#333333" /></g><path
+         d="m -2512.9,-400.8 c 0,18.9 -2.7,45.8 -15.5,57.5 -14.8,13.5 -45,4.2 -68.9,4.2 -25.7,0 -53.4,8.6 -68.2,-8.5 -10.9,-12.6 -12.7,-27.5 -12.7,-44.7 0,-26.4 12.4,-59.4 35.3,-76.8 12.4,-9.4 30.2,-11.5 45.8,-11.5 12.9,0 25.4,0.7 36.6,6.4 27.6,13.8 47.6,44.5 47.6,73.4 z"
+         id="path255"
+         style="fill:#eeeeee" /><path
+         d="m -2418.7,-479.3 c -3,-3.6 0.1,0.2 0.1,0.2 0,0 0,-0.3 0,-0.5 -0.1,0.1 -0.1,0.2 -0.1,0.3 z"
+         id="path257"
+         style="fill:#2a2a2a" /><path
+         d="m -2441.3,-475.8 c -3,-3.6 0.1,0.2 0.1,0.2 0,0 0,-0.3 0,-0.5 -0.1,0.1 -0.1,0.2 -0.1,0.3 z"
+         id="path259"
+         style="fill:#2a2a2a" /><path
+         d="m -2491,-174.7 c -0.5,-8 13.8,-27.3 5.7,-45.2 -8,-17.9 -39.1,-38.5 -39.1,-38.5 l -10,11.9 c 0,0 18.5,12.2 26.5,30.1 8,17.9 -6.2,37.2 -5.7,45.2 0.5,8 9.4,24.5 24,28.7 4.7,1.4 12.7,-0.1 21.7,-3.8 -14.1,-4.6 -22.7,-20.6 -23.1,-28.4 z"
+         id="path261"
+         style="fill:#222222" /><path
+         d="m -2509.7,-354.1 -2.3,24.7 c 0,0 54.4,108.3 47.6,128.9 -4.9,14.9 -31.7,16.8 -40.5,26.6 -7.3,8.2 9,25.2 13.4,26 17,3.3 65.2,-35 66.6,-49.1 1.5,-14 -84.8,-157.1 -84.8,-157.1 z"
+         id="path263"
+         style="fill:#3a3a3a" /><path
+         d="m -2560.5,-474.2 c -11.2,-5.6 -23.8,-6.4 -36.6,-6.4 -15.7,0 -33.4,2.1 -45.8,11.5 -19.4,14.7 -31.3,40.6 -34.5,64.2 1.3,10.5 4.6,20 11.9,28.4 7.6,8.8 30.2,13.3 30.2,14.7 0,10 15.1,18 33.8,18 18.7,0 33.8,-8.1 33.8,-18 0,-1.4 30,-2.1 39.2,-10.5 9,-8.2 13.1,-24.1 14.6,-39.3 -4.1,-25.5 -22.4,-50.5 -46.6,-62.6 z"
+         id="path265"
+         style="fill:#ffffff" /><path
+         d="m -2624.2,-421.5 c -7.4,0.7 -11,9.5 -17.7,23 -6.7,13.4 4.6,18.4 8.8,16.2 4.2,-2.1 14,-21.5 17.7,-25.4 0.9,-2.3 -1.4,-14.5 -8.8,-13.8 z"
+         id="path267"
+         style="fill:#333333" /><path
+         d="m -2575.6,-422.9 c 7.4,0.7 11,9.5 17.7,23 6.7,13.4 -4.6,18.4 -8.8,16.2 -4.2,-2.2 -14,-21.5 -17.7,-25.4 -0.9,-2.3 1.4,-14.5 8.8,-13.8 z"
+         id="path269"
+         style="fill:#333333" /><path
+         d="m -2618.6,-369.4 c 0,-5.7 9.5,-6.5 16.1,-6.5 9.2,0 17.9,2.8 17.9,6.5 0,3.7 -14.1,12.4 -17,12.4 -2.8,0 -17,-6.7 -17,-12.4 z"
+         id="path271"
+         style="fill:#222222" /><path
+         d="m -2601.2,-351.3 c 0,0 -13.4,5.6 -30.5,-2.4 0,1.8 15,9.7 30.5,9.7 15.5,0 30.5,-7.9 30.5,-9.7 -17.1,8 -30.5,2.4 -30.5,2.4 z"
+         id="path273"
+         style="fill:#333333" /><path
+         d="m -2645.3,-465.8 c -9.2,-4.9 -17.5,-21.3 -25.9,-13 -8.4,8.3 -16.3,38.5 -13.7,41.2 2.7,2.7 12,14.6 12,14.6 0,0 29,-37.6 27.6,-42.8 z"
+         id="path275"
+         style="fill:#2a2a2a" /><path
+         d="m -2559.6,-470.9 c 0,0 8.8,-16.6 16.7,-21 29.9,3.5 24.5,41.2 25,46.6 -2.3,2.3 -9.7,4.5 -9.7,4.5 l -32,-30.1 z"
+         id="path277"
+         style="fill:#2a2a2a" /><path
+         d="m -2601.6,-364.8 c 2,0 9.7,-4.3 14,-8.2 -3.3,-1.8 -9,-3 -14.9,-3 -4.7,0 -10.9,0.5 -14.1,2.8 4,4.5 12.8,8.4 15,8.4 z"
+         id="path279"
+         style="fill:#333333" /><path
+         d="m -2651,-453.7 c 3.6,-5.8 6.1,-10.5 5.7,-12.1 -9.2,-4.9 -17.5,-21.3 -25.9,-13 -8.4,8.4 -16.3,38.5 -13.7,41.2 0.8,0.8 2.1,2.3 3.6,4.1 2.6,-9.9 7.3,-22.1 12.2,-27 6,-5.8 11.9,0.8 18.1,6.8 z"
+         id="path281"
+         style="fill:#333333" /><path
+         d="m -2542.8,-491.9 c -7.9,4.4 -16.7,21 -16.7,21 l 3,2.9 c 2.5,-3.2 5.3,-6.1 8,-7.6 20.2,2.4 24.3,20.4 25,33.5 2.1,-0.8 4.5,-1.9 5.7,-3.1 -0.5,-5.5 4.9,-43.2 -25,-46.7 z"
+         id="path283"
+         style="fill:#333333" /><path
+         d="m -2652.8,-260.2 c 0,0 0.5,-44.4 29.9,-57.7 -2.4,42.4 -29.9,57.7 -29.9,57.7 z"
+         id="path285"
+         style="fill:#689f38" /><path
+         d="m -2456.9,-223 -3.3,3.8 c 0,0 -67.4,-105.7 -164.8,-95.4 -1.4,-1.4 -2.1,-2.4 -1.9,-3 99.4,-17.9 170,94.6 170,94.6 z"
+         id="path287"
+         style="fill:#689f38" /><path
+         d="m -2716.9,-334.6 c 0,0 64.5,-8.9 92.8,17.9 -62.2,6.6 -92.8,-17.9 -92.8,-17.9 z"
+         id="path289"
+         style="fill:#689f38" /><path
+         d="m -2658.1,-367.9 c 0,0 35.1,23.6 33.3,51.8 -32.6,-24 -33.3,-51.8 -33.3,-51.8 z"
+         id="path291"
+         style="fill:#689f38" /><path
+         d="m -2626.9,-317.5 c -43.9,15.4 -57.8,54.6 -57.8,54.6 0,0 -0.1,-1.7 3.5,1.9 20,-35.8 56.1,-55.1 56.1,-55.1 0,0 4.9,-1.4 -1.8,-1.4 z"
+         id="path293"
+         style="fill:#689f38" /><g
+         id="g295"><path
+           d="m -2667.1,-218.5 c 0,0 -24.3,-25.3 -15.1,-49 22.1,25.2 15.1,49 15.1,49 z"
+           id="path297"
+           style="fill:#689f38" /></g><path
+         d="m -2734.5,-228.4 c 0,0 22.7,-38.1 54.8,-34.9 -23.4,35.4 -54.8,34.9 -54.8,34.9 z"
+         id="path299"
+         style="fill:#689f38" /><g
+         id="g301"><path
+           d="m -2726.2,-273 c 0,0 31.8,-7.8 46.6,10.8 -30.6,6.1 -46.6,-10.8 -46.6,-10.8 z"
+           id="path303"
+           style="fill:#689f38" /></g><path
+         d="m -2655.5,-361.6 c 2.2,9.2 8.8,26.1 28.5,41.9 -2.5,-19.1 -20,-35.1 -28.5,-41.9 z"
+         id="path305"
+         style="fill:#8bc34a" /><path
+         d="m -2631.4,-319.1 c -23.5,-17.7 -60.7,-17 -77.9,-15.6 12.7,7.7 38.6,18.8 77.9,15.6 z"
+         id="path307"
+         style="fill:#8bc34a" /><path
+         d="m -2624.3,-315.6 c -19.7,13.9 -25.9,38.4 -27.8,51.8 10.1,-8.6 23.9,-25 27.8,-51.8 z"
+         id="path309"
+         style="fill:#8bc34a" /><path
+         d="m -2682.1,-263.5 c -11.5,-11 -29.9,-10.1 -38.9,-8.9 5.6,4.1 18.7,11.5 38.9,8.9 z"
+         id="path311"
+         style="fill:#8bc34a" /><path
+         d="m -2682,-264 c -20.7,2.2 -36.5,20.3 -43.2,29.6 10.2,-2.2 28,-9 43.2,-29.6 z"
+         id="path313"
+         style="fill:#8bc34a" /><path
+         d="m -2633.7,-251.5 c 0,0 0,-0.1 0.1,-0.3 -0.2,0.1 -0.1,0.3 -0.1,0.3 z"
+         id="path315"
+         style="fill:#689f38" /><path
+         d="m -2631.6,-249.4 c 0,0 0,-0.1 0.1,-0.3 -0.1,0.1 -0.1,0.3 -0.1,0.3 z"
+         id="path317"
+         style="fill:#689f38" /><path
+         d="m -2627.3,-317.7 c -36.5,14.6 -55,46.8 -57.6,53 0.3,0.3 3.1,2 3.5,2.4 7.8,-25.6 34.4,-45.4 54.8,-54.2 0,-0.8 -0.2,-1.5 -0.7,-1.2 z"
+         id="path319"
+         style="fill:#8bc34a" /><path
+         d="m -2682.2,-263.9 c -3.2,15.8 6.6,31.5 12.5,39.2 0.6,-7.9 -0.2,-23 -12.5,-39.2 z"
+         id="path321"
+         style="fill:#8bc34a" /><path
+         d="m -2681,-258.8 c -2.1,10.3 4.3,20.6 8.1,25.6 0.5,-5.1 -0.1,-15 -8.1,-25.6 z"
+         id="path323"
+         style="fill:#a9d86c" /><path
+         d="m -2687.9,-260.9 c -12.1,1.3 -21.4,11.9 -25.4,17.3 6.1,-1.3 16.5,-5.3 25.4,-17.3 z"
+         id="path325"
+         style="fill:#a9d86c" /><path
+         d="m -2686.2,-264.9 c -6.2,-5.9 -16.2,-5.5 -21,-4.8 3,2.2 10.1,6.2 21,4.8 z"
+         id="path327"
+         style="fill:#a9d86c" /><path
+         d="m -2628.4,-309.2 c -8.1,6.5 -10.7,18.1 -11.5,24.4 4.2,-4 9.9,-11.7 11.5,-24.4 z"
+         id="path329"
+         style="fill:#a9d86c" /><path
+         d="m -2640.6,-322.2 c -12.9,-8.3 -33.4,-8 -42.8,-7.3 7,3.6 21.2,8.8 42.8,7.3 z"
+         id="path331"
+         style="fill:#a9d86c" /><path
+         d="m -2459.4,-219.7 1.5,-1.6 c -6.1,-9.4 -73.8,-110.1 -169.4,-96.4 0.2,0.2 0.5,1 0.7,1.3 99.8,-9.3 167.2,96.7 167.2,96.7 z"
+         id="path333"
+         style="fill:#8bc34a" /><path
+         d="m -2648.1,-350.5 c 1.4,5.7 5.4,16.1 17.5,25.8 -1.5,-11.7 -12.3,-21.6 -17.5,-25.8 z"
+         id="path335"
+         style="fill:#a9d86c" /></g></g><g
+     id="Layer_4"
+     style="display:none"><path
+       d="m 212,380 c 0,0 -198.2,241.1 148,232 267,-7 213,-120 210,-145 -18,-40 -79,-87 -79,-87 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 z"
+       id="path338"
+       style="fill:#eeeeee;display:inline" /><path
+       d="M 358,538 C 502.9,534.2 553.3,499.2 568.5,463.9 548.9,424.6 491,380 491,380 c 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 0,0 -36.3,44.1 -50.7,93.9 18.4,38.4 72.5,67.4 196.7,64.1 z"
+       id="path340"
+       style="fill:#ffffff;display:inline" /><g
+       id="g342"
+       style="display:inline"><path
+         d="m 152.3,505.7 c 0,-6.7 27.7,-48.3 97.7,0 70,48.3 61,74.5 61,74.5 0,0 -21,26.8 19,50.8 10,34 -13.7,60.7 -41,64 -72.5,8.8 -154.7,-110.7 -136.7,-189.3 z"
+         id="path344"
+         style="fill:#222222" /><path
+         d="m 329.5,663 c -26.3,3 -53.9,-10.8 -77.4,-33.5 -16.7,-32.9 -24.7,-69.5 -17.7,-99.9 0,-3.2 6.5,-14.7 21.2,-20.1 -1.8,-1.3 -3.6,-2.6 -5.5,-3.9 -25.7,-17.8 -45.7,-23.4 -60.7,-23 -0.1,0 -0.1,0 -0.2,0 -2.5,0.1 -4.8,0.3 -7,0.6 0,0 0,0 -0.1,0 -7.4,1.2 -13.3,3.9 -17.8,7.1 0,0 0,0 0,0 -1.3,0.9 -2.6,1.9 -3.7,2.9 0,0 0,0 0,0 -0.4,0.3 -0.7,0.7 -1.1,1 0,0 0,0 0,0 -0.7,0.7 -1.3,1.3 -1.9,2 0,0 0,0 -0.1,0.1 -0.3,0.3 -0.5,0.6 -0.8,0.9 0,0 -0.1,0.1 -0.1,0.1 -0.5,0.6 -1,1.3 -1.4,1.9 0,0 0,0.1 -0 [...]
+         id="path346"
+         style="fill:#2a2a2a" /><path
+         d="m 181.3,489.7 c 0,-1.3 1,-3.8 3.1,-6.7 -22.4,2.6 -32.1,18.8 -32.1,22.7 -18,78.6 64.2,198.1 136.7,189.3 11.9,-1.5 23.1,-7.3 31.2,-16.3 -0.7,0.1 -1.4,0.2 -2.2,0.3 -72.5,8.8 -154.7,-110.7 -136.7,-189.3 z"
+         id="path348"
+         style="fill:#333333" /></g><path
+       d="M 517,465 C 499,562 466,566 462.6,613.2 571,762 671,471 517,465 z"
+       id="path350"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m 523.7,465.5 c -2.2,-0.2 -4.4,-0.4 -6.7,-0.5 -18,97 -51,101 -54.4,148.2 4.5,6.1 8.9,11.5 13.3,16.2 56.6,-4.1 90.8,-112.6 47.8,-163.9 z"
+       id="path352"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 477.5,238.4 c 0,-0.2 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 -10.6,-7.1 -10.6,-7.1 L 264.3,237 c 0,0 -12.1,16.5 -19.3,21.3 -7.2,4.9 0,137.3 0,137.3 0,0 120.1,-40.7 201.4,0 71.4,-50.6 32.9,-154.9 31.1,-157.2 z"
+       id="path354"
+       style="fill:#222222;display:inline" /><path
+       d="m 475.5,238.4 c 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 -0.5,141.2 -33.9,153.2 5.7,5.7 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 20.7,6 88.7,-26.7 92.7,-78 C 583.8,413.6 475.5,238.4 475.5,238.4 z"
+       id="path356"
+       style="fill:#2a2a2a;display:inline" /><g
+       id="g358"
+       style="display:inline"><path
+         d="m 243,258.3 c 0,0 -17.3,5.3 -22,40.7 -4.7,35.4 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -56.7,74 -56.7,74 0,0 16.7,-32.9 13.3,-62.1 C 277,285 243,258.3 243,258.3 z"
+         id="path360"
+         style="fill:#2a2a2a" /><path
+         d="m 257,379 c -35,-9.3 -4.5,-110.7 -4.3,-111.9 -10,-12.5 -9.7,-8.7 -9.7,-8.7 0,0 -17.3,5.3 -22,40.7 -4.7,35.3 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 1.7,-3 22.7,-67.9 24.5,-71.7 -47.3,-4.5 -78.8,9.2 -102.5,2.9 z"
+         id="path362"
+         style="fill:#3a3a3a" /><path
+         d="m 230.4,438.2 c 42.1,14.7 97.5,21.7 104.6,9.5 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -74.2,101.1 -93.3,135.8 z"
+         id="path364"
+         style="fill:#3a3a3a" /><path
+         d="m 413.7,287.7 c -1,-2.8 -11.9,-2.7 -25.9,-1 -2.9,7 -5.8,12.8 -8.1,15.4 -7.3,8 -35.3,19.3 -35.7,28.7 -0.3,9.3 -13,55.3 -25,76 -8.8,15.2 -91.9,0.8 -131.8,-21.2 -2,5.2 -3.6,10.4 -4.9,15.6 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8.2 20.6,-48.2 18,-55.5 z"
+         id="path366"
+         style="fill:#333333" /></g><path
+       d="m 473,172.3 c 0,26.7 -3.9,64.8 -22,81.3 -21,19.2 -63.7,6 -97.5,6 -36.3,0 -75.6,12.2 -96.5,-12 -15.4,-17.8 -18,-38.9 -18,-63.3 0,-37.4 17.5,-84.1 50,-108.7 17.6,-13.3 42.7,-16.3 64.8,-16.3 18.2,0 36,1 51.8,9 39.1,19.6 67.4,63.1 67.4,104 z"
+       id="path368"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m 606.3,61.2 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path370"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 574.3,66.2 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path372"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 504,492.3 c -0.7,-11.3 19.5,-38.7 8.1,-64 -11.4,-25.3 -55.3,-54.5 -55.3,-54.5 l -14.2,16.8 c 0,0 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 6.6,1.9 18,-0.1 30.6,-5.4 C 516.8,526 504.7,503.4 504,492.3 z"
+       id="path374"
+       style="fill:#222222;display:inline" /><path
+       d="m 477.5,238.4 -3.3,35 c 0,0 77,153.4 67.4,182.5 -7,21.1 -44.9,23.8 -57.3,37.7 -10.4,11.6 12.8,35.6 19,36.8 24,4.7 92.3,-49.5 94.3,-69.5 C 599.7,441 477.5,238.4 477.5,238.4 z"
+       id="path376"
+       style="fill:#3a3a3a;display:inline" /></g><g
+     id="Layer_8"
+     style="display:none"><path
+       d="m 405.7,68.3 c -15.9,-8 -33.6,-9 -51.8,-9 -22.2,0 -47.2,3 -64.8,16.3 -27.5,20.8 -44.3,57.4 -48.8,90.9 1.9,14.9 6.5,28.3 16.8,40.1 10.8,12.4 42.8,18.8 42.8,20.8 0,14.1 21.4,25.5 47.9,25.5 26.4,0 47.9,-11.4 47.9,-25.5 0,-1.9 42.5,-3 55.5,-14.8 12.8,-11.7 18.5,-34.1 20.7,-55.7 -6.1,-36 -32,-71.4 -66.2,-88.6 z"
+       id="path379"
+       style="fill:#ffffff;display:inline" /><path
+       d="m 315.5,143 c -10.5,1 -15.5,13.5 -25,32.5 -9.5,19 6.5,26 12.5,23 6,-3 19.8,-30.5 25,-36 1.3,-3.2 -2,-20.5 -12.5,-19.5 z"
+       id="path381"
+       style="fill:#333333;display:inline" /><path
+       d="m 384.3,141 c 10.5,1 15.5,13.5 25,32.5 9.5,19 -6.5,26 -12.5,23 -6,-3 -19.8,-30.5 -25,-36 -1.2,-3.2 2,-20.5 12.5,-19.5 z"
+       id="path383"
+       style="fill:#333333;display:inline" /><path
+       d="m 323.5,216.8 c 0,-8 13.5,-9.3 22.8,-9.3 13,0 25.3,4 25.3,9.3 0,5.3 -20,17.5 -24,17.5 -4.1,0 -24.1,-9.5 -24.1,-17.5 z"
+       id="path385"
+       style="fill:#222222;display:inline" /><path
+       d="m 348,242.3 c 0,0 -19,7.9 -43.2,-3.3 0,2.5 21.2,13.8 43.2,13.8 22,0 43.2,-11.3 43.2,-13.8 -24.2,11.3 -43.2,3.3 -43.2,3.3 z"
+       id="path387"
+       style="fill:#333333;display:inline" /><path
+       d="m 285.7,80.3 c -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 3.8,3.8 17,20.6 17,20.6 0,0 41,-53.2 39,-60.6 z"
+       id="path389"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 407,73 c 0,0 12.4,-23.5 23.7,-29.7 42.3,5 34.7,58.3 35.3,66 -3.3,3.3 -13.7,6.3 -13.7,6.3 L 407,73 z"
+       id="path391"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 347.5,223.3 c 2.8,0 13.7,-6.1 19.8,-11.6 -4.7,-2.6 -12.7,-4.2 -21,-4.2 -6.6,0 -15.5,0.6 -19.9,4 5.6,6.2 18,11.8 21.1,11.8 z"
+       id="path393"
+       style="fill:#333333;display:inline" /><path
+       d="m 277.6,97.4 c 5.1,-8.1 8.6,-14.8 8,-17.1 -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 1.1,1.1 3,3.3 5.1,5.9 3.7,-14 10.3,-31.3 17.2,-38.2 8.5,-8.4 16.9,0.9 25.7,9.4 z"
+       id="path395"
+       style="fill:#333333;display:inline" /><path
+       d="M 430.7,43.3 C 419.4,49.5 407,73 407,73 l 4.3,4.1 c 3.6,-4.5 7.5,-8.6 11.4,-10.7 28.6,3.4 34.4,28.9 35.3,47.4 3,-1.2 6.4,-2.7 8,-4.4 -0.7,-7.7 7,-61.1 -35.3,-66.1 z"
+       id="path397"
+       style="fill:#333333;display:inline" /></g><g
+     id="Layer_9"
+     style="display:none"><path
+       d="m 275,371.3 c 0,0 0.7,-62.8 42.3,-81.6 -3.4,59.9 -42.3,81.6 -42.3,81.6 z"
+       id="path400"
+       style="fill:#689f38;display:inline" /><path
+       d="m 552.3,424 -4.7,5.3 c 0,0 -95.3,-149.7 -233.3,-135 -2,-1.9 -2.9,-3.3 -2.7,-4.2 C 452.3,264.7 552.3,424 552.3,424 z"
+       id="path402"
+       style="fill:#689f38;display:inline" /><path
+       d="m 184.3,266 c 0,0 91.3,-12.7 131.3,25.3 C 227.7,300.7 184.3,266 184.3,266 z"
+       id="path404"
+       style="fill:#689f38;display:inline" /><path
+       d="m 267.6,218.8 c 0,0 49.6,33.4 47.2,73.3 -46.2,-33.9 -47.2,-73.3 -47.2,-73.3 z"
+       id="path406"
+       style="fill:#689f38;display:inline" /><path
+       d="m 311.7,290.2 c -62,21.8 -81.7,77.4 -81.7,77.4 0,0 -0.2,-2.4 5,2.7 28.3,-50.7 79.4,-78 79.4,-78 0,0 6.8,-2.1 -2.7,-2.1 z"
+       id="path408"
+       style="fill:#689f38;display:inline" /><g
+       id="g410"
+       style="display:inline"><path
+         d="m 254.8,430.3 c 0,0 -34.3,-35.8 -21.3,-69.4 31.2,35.7 21.3,69.4 21.3,69.4 z"
+         id="path412"
+         style="fill:#689f38" /></g><path
+       d="m 159.4,416.3 c 0,0 32.1,-54 77.5,-49.4 -33,50.1 -77.5,49.4 -77.5,49.4 z"
+       id="path414"
+       style="fill:#689f38;display:inline" /><g
+       id="g416"
+       style="display:inline"><path
+         d="m 171.2,353.2 c 0,0 45,-11 66,15.3 -43.5,8.5 -66,-15.3 -66,-15.3 z"
+         id="path418"
+         style="fill:#689f38" /></g><path
+       d="m 271.2,227.7 c 3.1,13.1 12.5,37 40.3,59.3 -3.5,-26.9 -28.3,-49.7 -40.3,-59.3 z"
+       id="path420"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 305.3,287.9 c -33.2,-25 -86,-24.1 -110.2,-22 17.9,10.8 54.6,26.6 110.2,22 z"
+       id="path422"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 315.3,292.9 c -27.9,19.7 -36.6,54.4 -39.3,73.4 14.3,-12.2 33.9,-35.4 39.3,-73.4 z"
+       id="path424"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.6,366.6 c -16.3,-15.6 -42.4,-14.4 -55,-12.6 7.8,5.8 26.3,16.2 55,12.6 z"
+       id="path426"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.7,365.9 c -29.2,3.1 -51.6,28.8 -61.2,41.8 14.5,-3.1 39.7,-12.6 61.2,-41.8 z"
+       id="path428"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 302,383.6 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path430"
+       style="fill:#689f38;display:inline" /><path
+       d="m 305,386.6 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path432"
+       style="fill:#689f38;display:inline" /><path
+       d="m 311.1,289.9 c -51.7,20.7 -77.9,66.2 -81.5,75.1 0.4,0.4 4.4,2.9 4.9,3.4 11.1,-36.3 48.6,-64.2 77.6,-76.7 0.1,-1.2 -0.3,-2.2 -1,-1.8 z"
+       id="path434"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.4,366 c -4.5,22.4 9.4,44.6 17.6,55.5 1,-11.1 -0.2,-32.5 -17.6,-55.5 z"
+       id="path436"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 235.1,373.2 c -3,14.6 6.1,29.1 11.5,36.2 0.7,-7.2 -0.1,-21.1 -11.5,-36.2 z"
+       id="path438"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 225.4,370.2 c -17.1,1.8 -30.3,16.9 -35.9,24.5 8.5,-1.8 23.3,-7.4 35.9,-24.5 z"
+       id="path440"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 227.8,364.6 c -8.8,-8.4 -22.9,-7.7 -29.7,-6.8 4.2,3.1 14.2,8.8 29.7,6.8 z"
+       id="path442"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 309.5,302 c -11.5,9.3 -15.1,25.6 -16.2,34.5 5.9,-5.7 14,-16.6 16.2,-34.5 z"
+       id="path444"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 292.3,283.5 c -18.3,-11.8 -47.2,-11.3 -60.6,-10.3 9.9,5.1 30,12.5 60.6,10.3 z"
+       id="path446"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 548.8,428.7 2.1,-2.3 C 542.3,413.1 446.4,270.6 311.1,289.9 c 0.3,0.3 0.7,1.5 1,1.8 141.2,-13.1 236.7,137 236.7,137 z"
+       id="path448"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 281.6,243.5 c 1.9,8 7.7,22.8 24.8,36.5 -2.1,-16.6 -17.3,-30.6 -24.8,-36.5 z"
+       id="path450"
+       style="fill:#a9d86c;display:inline" /></g><path
+     d="M 607.89539,35.161362 C 9.4828253,1.5697022 321.66071,108.43482 186.32151,136.58629 52.486115,164.42493 -51.509485,213.53244 42.741145,312.408 l 80.927145,84.8983 c 94.31962,98.94795 -77.376695,234.06611 58.37902,250.10601 l 394.84838,46.65239 c 135.7557,16.0399 177.4425,-108.05946 98.9278,-219.96268 L 548.25889,292.29024 C 469.80159,180.46889 744.38049,42.822902 607.89539,35.161362 z"
+     transform="matrix(0.97547655,0,0,1,7.0560672,0)"
+     id="path453"
+     style="fill:url(#radialGradient6116);fill-opacity:1;filter:url(#filter6124)" /><path
+     d="m 215.1,383.4 c 0,0 -185.3,225.4 138.4,216.9 C 603.2,593.8 552.7,488.1 549.9,464.7 533.1,427.3 476,383.3 476,383.3 c 0,0 -41.3,-28 -123,-29 -45.4,-6.4 -75.6,9.3 -137.9,29.1 z"
+     id="path455"
+     style="fill:#eeeeee" /><path
+     d="M 351.6,531.1 C 487.1,527.5 534.2,494.8 548.5,461.8 530.2,425.1 476,383.3 476,383.3 c 0,0 -41.3,-28 -123,-29 -45.3,-6.5 -75.5,9.2 -137.9,29 0,0 -33.9,41.2 -47.4,87.8 17.2,36 67.8,63.1 183.9,60 z"
+     id="path457"
+     style="fill:#ffffff" /><path
+     d="m 159.3,500.9 c 0,-6.2 25.9,-45.2 91.3,0 65.4,45.2 57,69.6 57,69.6 0,0 -19.6,25.1 17.8,47.6 9.4,31.8 -12.8,56.7 -38.3,59.8 -67.9,8.3 -144.7,-103.5 -127.8,-177 z"
+     id="path461"
+     style="fill:#222222" /><path
+     d="m 324.9,648.1 c -24.6,2.8 -50.4,-10.1 -72.4,-31.3 -15.6,-30.8 -23.1,-65 -16.6,-93.4 0,-3 6.1,-13.7 19.8,-18.8 -1.7,-1.2 -3.4,-2.4 -5.1,-3.6 -24,-16.6 -42.7,-21.8 -56.8,-21.5 0,0 -0.1,0 -0.1,0 -2.3,0.1 -4.5,0.3 -6.5,0.6 0,0 0,0 -0.1,0 -6.9,1.1 -12.4,3.7 -16.7,6.6 0,0 0,0 0,0 -1.3,0.9 -2.4,1.8 -3.4,2.7 0,0 0,0 0,0 -0.3,0.3 -0.7,0.6 -1,0.9 l 0,0 c -0.6,0.6 -1.2,1.2 -1.8,1.9 0,0 0,0 -0.1,0.1 -0.2,0.3 -0.5,0.6 -0.7,0.8 0,0 0,0.1 -0.1,0.1 -0.5,0.6 -0.9,1.2 -1.3,1.7 0,0 0,0.1 -0.1,0.1 - [...]
+     id="path463"
+     style="fill:#2a2a2a" /><path
+     d="m 186.4,485.9 c 0,-1.2 0.9,-3.5 2.9,-6.3 -20.9,2.4 -30,17.5 -30,21.2 -16.9,73.5 60,185.3 127.8,177 11.1,-1.4 21.6,-6.9 29.1,-15.3 -0.7,0.1 -1.3,0.2 -2,0.3 -67.9,8.4 -144.7,-103.4 -127.8,-176.9 z"
+     id="path465"
+     style="fill:#333333" /><path
+     d="m 500.2,462.9 c -16.8,90.7 -47.7,94.4 -50.9,138.6 101.4,139.1 194.9,-133 50.9,-138.6 z"
+     id="path467"
+     style="fill:#3a3a3a" /><path
+     d="m 506.5,463.3 c -2,-0.2 -4.1,-0.3 -6.2,-0.4 -16.8,90.7 -47.7,94.4 -50.9,138.6 4.2,5.7 8.3,10.7 12.5,15.1 52.9,-3.9 84.8,-105.2 44.6,-153.3 z"
+     id="path469"
+     style="fill:#2a2a2a" /><path
+     d="m 463.3,251 c 0,-0.2 0,-0.4 0,-0.7 0,0.1 -0.1,0.3 -0.1,0.4 -4,-4.8 -9.9,-6.6 -9.9,-6.6 L 264,249.7 c 0,0 -11.4,15.4 -18.1,19.9 -6.7,4.6 0,128.4 0,128.4 0,0 112.3,-38 188.3,0 C 501,350.7 465,253.1 463.3,251 z"
+     id="path471"
+     style="fill:#222222" /><path
+     d="m 461.5,251 c 0,0 0,-0.4 0,-0.7 0,0.1 -0.1,0.3 -0.1,0.4 -4.1,-4.7 0.1,0.3 0.1,0.3 0,0 -0.5,132.1 -31.7,143.3 5.3,5.3 24.4,16.2 35,39.9 10.6,23.7 -8.2,49.2 -7.6,59.8 0.6,10.6 12.5,32.4 31.8,38 19.3,5.6 82.9,-24.9 86.6,-72.9 C 562.7,414.8 461.5,251 461.5,251 z"
+     id="path473"
+     style="fill:#2a2a2a" /><path
+     d="m 244,269.6 c 0,0 -16.2,5 -20.6,38 -4.4,33 -28.7,64.2 -36.2,95.4 -7.5,31.2 131.5,63 142.8,43.6 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 -2.5,-6.8 -70.4,5 -84.2,13.7 -13.7,8.7 -53,69.2 -53,69.2 0,0 15.6,-30.8 12.5,-58.1 C 275.8,294.5 244,269.6 244,269.6 z"
+     id="path475"
+     style="fill:#2a2a2a" /><path
+     d="m 257.1,382.5 c -32.7,-8.7 -4.2,-103.5 -4,-104.7 -9.3,-11.7 -9.1,-8.2 -9.1,-8.2 0,0 -16.2,5 -20.6,38 -4.4,33 -28.7,64.2 -36.2,95.4 -7.5,31.2 131.5,63 142.8,43.6 1.6,-2.8 21.3,-63.5 22.9,-67.1 -44.1,-3.9 -73.6,8.8 -95.8,3 z"
+     id="path477"
+     style="fill:#3a3a3a" /><path
+     d="m 459.1,189.2 c 0,25 -3.6,60.6 -20.6,76.1 -19.6,17.9 -59.5,5.6 -91.2,5.6 -34,0 -70.7,11.4 -90.2,-11.2 -14.4,-16.6 -16.8,-36.4 -16.8,-59.2 0,-34.9 16.4,-78.7 46.8,-101.6 16.5,-12.4 39.9,-15.3 60.6,-15.3 17,0 33.6,1 48.5,8.4 36.5,18.3 62.9,58.9 62.9,97.2 z"
+     id="path479"
+     style="fill:#eeeeee" /><path
+     d="m 488.1,488.4 c -0.6,-10.6 18.2,-36.2 7.6,-59.8 -10.6,-23.6 -51.7,-51 -51.7,-51 l -13.3,15.8 c 0,0 24.4,16.2 35,39.9 10.6,23.7 -8.2,49.2 -7.6,59.8 0.6,10.6 12.5,32.4 31.8,38 6.2,1.8 16.9,-0.1 28.7,-5.1 -18.6,-6.1 -29.9,-27.2 -30.5,-37.6 z"
+     id="path485"
+     style="fill:#222222" /><path
+     d="m 463.3,251 -3,32.7 c 0,0 72,143.4 63,170.7 -6.5,19.8 -42,22.3 -53.6,35.3 -9.7,10.8 12,33.3 17.8,34.5 22.4,4.4 86.3,-46.3 88.2,-65 C 577.5,440.4 463.3,251 463.3,251 z"
+     id="path487"
+     style="fill:#3a3a3a" /><path
+     d="m 396.1,92 c -14.8,-7.4 -31.4,-8.4 -48.5,-8.4 -20.7,0 -44.1,2.8 -60.6,15.3 -25.7,19.4 -41.4,53.7 -45.6,85 1.8,13.9 6.1,26.4 15.7,37.5 10.1,11.6 40,17.6 40,19.5 0,13.2 20,23.8 44.8,23.8 24.7,0 44.8,-10.7 44.8,-23.8 0,-1.8 39.7,-2.8 51.9,-13.9 12,-10.9 17.3,-31.9 19.4,-52 -5.6,-33.8 -29.9,-67 -61.9,-83 z"
+     id="path489"
+     style="fill:#ffffff" /><path
+     d="m 311.8,161.8 c -9.8,0.9 -14.5,12.6 -23.4,30.4 -8.9,17.8 6.1,24.3 11.7,21.5 5.6,-2.8 18.5,-28.5 23.4,-33.7 1.2,-3 -1.8,-19.2 -11.7,-18.2 z"
+     id="path491"
+     style="fill:#333333" /><path
+     d="m 376.2,159.9 c 9.8,0.9 14.5,12.6 23.4,30.4 8.9,17.8 -6.1,24.3 -11.7,21.5 -5.6,-2.8 -18.5,-28.5 -23.4,-33.7 -1.2,-3 1.9,-19.1 11.7,-18.2 z"
+     id="path493"
+     style="fill:#333333" /><path
+     d="m 319.3,230.7 c 0,-7.5 12.6,-8.6 21.3,-8.6 12.2,0 23.7,3.7 23.7,8.6 0,4.9 -18.7,16.4 -22.5,16.4 -3.8,0 -22.5,-8.9 -22.5,-16.4 z"
+     id="path495"
+     style="fill:#222222" /><path
+     d="m 342.2,254.7 c 0,0 -17.8,7.4 -40.4,-3.1 0,2.3 19.8,12.9 40.4,12.9 20.6,0 40.4,-10.5 40.4,-12.9 -22.6,10.5 -40.4,3.1 -40.4,3.1 z"
+     id="path497"
+     style="fill:#333333" /><path
+     d="M 283.9,103.2 C 271.8,96.6 260.7,75 249.7,86 c -11.1,11.1 -21.6,51 -18.1,54.5 3.5,3.5 15.9,19.3 15.9,19.3 0,0 38.3,-49.8 36.4,-56.6 z"
+     id="path499"
+     style="fill:#2a2a2a" /><path
+     d="m 397.4,96.3 c 0,0 11.6,-22 22.1,-27.7 39.6,4.7 32.4,54.5 33,61.7 -3,3 -12.8,5.9 -12.8,5.9 L 397.4,96.3 z"
+     id="path501"
+     style="fill:#2a2a2a" /><path
+     d="m 341.8,236.8 c 2.7,0 12.8,-5.7 18.5,-10.8 -4.4,-2.4 -11.9,-3.9 -19.7,-3.9 -6.2,0 -14.5,0.6 -18.6,3.7 5.2,5.8 16.9,11 19.8,11 z"
+     id="path503"
+     style="fill:#333333" /><path
+     d="m 276.4,119.2 c 4.8,-7.6 8.1,-13.9 7.5,-16 C 271.8,96.6 260.7,75 249.7,86 c -11.1,11.1 -21.6,51 -18.1,54.5 1,1 2.8,3.1 4.8,5.5 3.4,-13.1 9.7,-29.3 16.1,-35.7 7.8,-7.8 15.7,0.9 23.9,8.9 z"
+     id="path505"
+     style="fill:#333333" /><path
+     d="M 419.5,68.6 C 409,74.4 397.4,96.3 397.4,96.3 l 4,3.8 c 3.3,-4.2 7,-8.1 10.6,-10 26.8,3.2 32.2,27 33,44.3 2.8,-1.1 6,-2.6 7.5,-4.1 -0.6,-7.2 6.6,-57 -33,-61.7 z"
+     id="path507"
+     style="fill:#333333" /><path
+     d="m 229.1,372.5 c 0,0 0.7,-58.7 39.6,-76.3 -3.2,56 -39.6,76.3 -39.6,76.3 z"
+     id="path509"
+     style="fill:#689f38" /><path
+     d="m 488.4,421.7 -4.4,5 c 0,0 -89.1,-139.9 -218.2,-126.3 -1.8,-1.8 -2.7,-3.1 -2.5,-4 131.6,-23.7 225.1,125.3 225.1,125.3 z"
+     id="path511"
+     style="fill:#689f38" /><path
+     d="m 144.3,274 c 0,0 85.4,-11.8 122.8,23.7 C 184.8,306.4 144.3,274 144.3,274 z"
+     id="path513"
+     style="fill:#689f38" /><path
+     d="m 222.1,229.8 c 0,0 46.4,31.2 44.1,68.5 -43.1,-31.6 -44.1,-68.5 -44.1,-68.5 z"
+     id="path515"
+     style="fill:#689f38" /><path
+     d="m 225.5,238.2 c 2.9,12.2 11.7,34.6 37.7,55.4 -3.3,-25.1 -26.4,-46.4 -37.7,-55.4 z"
+     id="path517"
+     style="fill:#8bc34a" /><path
+     d="M 257.4,294.5 C 226.3,271.1 177,272 154.3,273.9 c 16.8,10.1 51.1,24.9 103.1,20.6 z"
+     id="path519"
+     style="fill:#8bc34a" /><path
+     d="m 266.8,299.2 c -26.1,18.4 -34.2,50.8 -36.8,68.6 13.4,-11.5 31.7,-33.2 36.8,-68.6 z"
+     id="path521"
+     style="fill:#8bc34a" /><path
+     d="m 254.3,383.9 c 0,0 0.1,-0.2 0.2,-0.4 -0.2,0.1 -0.2,0.4 -0.2,0.4 z"
+     id="path523"
+     style="fill:#689f38" /><path
+     d="m 257.1,386.7 c 0,0 0.1,-0.2 0.2,-0.4 -0.2,0.1 -0.2,0.4 -0.2,0.4 z"
+     id="path525"
+     style="fill:#689f38" /><path
+     d="m 261.3,307.6 c -10.8,8.7 -14.1,23.9 -15.2,32.3 5.6,-5.3 13.1,-15.5 15.2,-32.3 z"
+     id="path527"
+     style="fill:#a9d86c" /><path
+     d="m 245.2,290.4 c -17.1,-11 -44.2,-10.6 -56.6,-9.7 9.2,4.8 28.1,11.7 56.6,9.7 z"
+     id="path529"
+     style="fill:#a9d86c" /><path
+     d="m 235.3,252.9 c 1.8,7.5 7.2,21.3 23.2,34.1 -2,-15.4 -16.3,-28.5 -23.2,-34.1 z"
+     id="path531"
+     style="fill:#a9d86c" /><path
+     d="m 485.1,426.1 2,-2.2 C 479,411.4 389.4,278.2 262.9,296.3 c 0.2,0.3 0.7,1.4 1,1.7 131.9,-12.2 221.2,128.1 221.2,128.1 z"
+     id="path533"
+     style="fill:#8bc34a" /><path
+     d="m 232.3,437.8 c 39.4,13.8 91.1,20.3 97.8,8.8 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 -2.5,-6.8 -70.4,5 -84.2,13.7 -13.7,8.8 -69.4,94.7 -87.2,127.1 z"
+     id="path535"
+     style="fill:#3a3a3a" /><path
+     d="m 403.6,297.1 c -0.9,-2.6 -11.1,-2.5 -24.2,-1 -2.7,6.5 -5.4,12 -7.6,14.4 -6.9,7.5 -33,18.1 -33.4,26.8 -0.3,8.7 -12.2,51.7 -23.4,71.1 -8.3,14.2 -85.9,0.7 -123.2,-19.8 -1.8,4.9 -3.4,9.7 -4.6,14.5 -7.5,31.2 131.5,63 142.8,43.6 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 z"
+     id="path537"
+     style="fill:#333333" /><path
+     d="m 210.2,427.6 c 0,0 -32.1,-33.5 -19.9,-64.9 29.2,33.4 19.9,64.9 19.9,64.9 z"
+     id="path541"
+     style="fill:#689f38" /><path
+     d="m 190.2,367.5 c -4.2,20.9 8.7,41.7 16.5,51.9 0.9,-10.4 -0.2,-30.4 -16.5,-51.9 z"
+     id="path543"
+     style="fill:#8bc34a" /><path
+     d="m 191.8,374.3 c -2.8,13.7 5.7,27.3 10.8,33.9 0.5,-6.8 -0.2,-19.9 -10.8,-33.9 z"
+     id="path545"
+     style="fill:#a9d86c" /><path
+     d="m 132,355.6 c 0,0 42.1,-10.3 61.7,14.3 -40.6,7.9 -61.7,-14.3 -61.7,-14.3 z"
+     id="path549"
+     style="fill:#689f38" /><path
+     d="m 190.3,368 c -15.2,-14.5 -39.6,-13.4 -51.5,-11.8 7.4,5.5 24.8,15.3 51.5,11.8 z"
+     id="path551"
+     style="fill:#8bc34a" /><path
+     d="m 184.9,366.2 c -8.2,-7.8 -21.4,-7.2 -27.8,-6.4 4,3 13.4,8.2 27.8,6.4 z"
+     id="path553"
+     style="fill:#a9d86c" /><path
+     d="M 263.4,296.6 C 205.4,317 187,369 187,369 c 0,0 -0.2,-2.3 4.7,2.6 26.5,-47.4 74.2,-73 74.2,-73 0,0 6.3,-2 -2.5,-2 z"
+     id="path555"
+     style="fill:#689f38" /><path
+     d="m 262.9,296.3 c -48.3,19.3 -72.8,61.9 -76.2,70.2 0.4,0.4 4.1,2.7 4.6,3.2 10.3,-33.9 45.5,-60.1 72.6,-71.7 -0.1,-1.1 -0.4,-2.1 -1,-1.7 z"
+     id="path557"
+     style="fill:#8bc34a" /><path
+     d="m 120.9,414.5 c 0,0 30,-50.5 72.5,-46.2 -30.8,46.9 -72.5,46.2 -72.5,46.2 z"
+     id="path559"
+     style="fill:#689f38" /><path
+     d="m 190.4,367.4 c -27.3,2.9 -48.3,26.9 -57.2,39.1 13.6,-2.9 37.1,-11.8 57.2,-39.1 z"
+     id="path561"
+     style="fill:#8bc34a" /><path
+     d="m 182.7,371.5 c -16,1.7 -28.3,15.8 -33.6,22.9 8,-1.7 21.8,-7 33.6,-22.9 z"
+     id="path563"
+     style="fill:#a9d86c" /></svg>
\ No newline at end of file
diff --git a/icons/pond-icon-square.svg b/icons/pond-icon-square.svg
new file mode 100644
index 0000000..ced51e2
--- /dev/null
+++ b/icons/pond-icon-square.svg
@@ -0,0 +1,897 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   version="1.1"
+   width="100%"
+   height="100%"
+   viewBox="0 0 720 720"
+   id="svg3546"
+   xml:space="preserve"><metadata
+     id="metadata286"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs4111" /><g
+     id="Layer_1"
+     style="display:none"><path
+       d="m 363.1,720.5 h -7.2 C 159.1,720.5 -0.5,560.9 -0.5,364.1 v -7.2 C -0.5,160.1 159.1,0.5 355.9,0.5 h 7.2 c 196.8,0 356.4,159.6 356.4,356.4 v 7.2 c 0,196.8 -159.6,356.4 -356.4,356.4 z"
+       id="path3551"
+       style="fill:#03a9f4;display:inline" /><path
+       d="m 355.9,721 h 7.2 C 559.9,721 719,560.9 719,364.1 v -5.4 C 632,298.6 502.5,260.6 358.5,260.6 215.1,260.6 87,298.4 -1,358 v 6.1 C -1,560.9 159.1,721 355.9,721 z"
+       id="path3553"
+       style="fill:#0277bd;display:inline" /><g
+       id="g3555"
+       style="display:inline"><g
+         id="g3557"><ellipse
+           cx="466.20001"
+           cy="176.7"
+           rx="37.400002"
+           ry="27.4"
+           transform="matrix(0.8006,0.5991,-0.5991,0.8006,198.8172,-244.111)"
+           id="ellipse3559"
+           style="fill:#212121" /><ellipse
+           cx="252.3"
+           cy="176.7"
+           rx="37.400002"
+           ry="27.4"
+           transform="matrix(-0.8006,0.5991,-0.5991,-0.8006,560.1591,167.0369)"
+           id="ellipse3561"
+           style="fill:#212121" /><path
+           d="m 558.1,454.2 c 0,87.4 -87.9,158.2 -196.3,158.2 -108.4,0 -196.3,-70.8 -196.3,-158.2 0,-87.4 87.9,-320.8 196.3,-320.8 108.4,0 196.3,233.4 196.3,320.8 z"
+           id="path3563"
+           style="fill:#eeeeee" /><path
+           d="m 361.7,422.5 c 73.7,0 139.7,33 184.1,85 7.9,-17.2 12.3,-35.7 12.3,-55.1 0,-34.6 -13.8,-92.1 -37.2,-148.9 -42.5,37.2 -98.2,59.8 -159.2,59.8 -61,0 -116.7,-22.6 -159.2,-59.8 -23.4,56.8 -37.2,114.3 -37.2,148.9 0,19.4 4.3,38 12.3,55.1 44.3,-52 110.3,-85 184.1,-85 z"
+           id="path3565"
+           style="fill:#212121" /><ellipse
+           cx="235.39999"
+           cy="579.79999"
+           rx="49.799999"
+           ry="36.700001"
+           transform="matrix(0.9148,0.4039,-0.4039,0.9148,254.2517,-45.6899)"
+           id="ellipse3567"
+           style="fill:#212121" /><ellipse
+           cx="479.39999"
+           cy="579.79999"
+           rx="49.799999"
+           ry="36.700001"
+           transform="matrix(-0.9148,0.4039,-0.4039,-0.9148,1152.2175,916.6229)"
+           id="ellipse3569"
+           style="fill:#212121" /><ellipse
+           cx="304.70001"
+           cy="244.8"
+           rx="44.599998"
+           ry="24.799999"
+           transform="matrix(0.859,-0.512,0.512,0.859,-82.3649,190.5348)"
+           id="ellipse3571"
+           style="fill:#212121" /><ellipse
+           cx="414.29999"
+           cy="244.8"
+           rx="44.599998"
+           ry="24.799999"
+           transform="matrix(-0.859,-0.512,0.512,-0.859,644.8704,667.1891)"
+           id="ellipse3573"
+           style="fill:#212121" /><ellipse
+           cx="315.70001"
+           cy="238.2"
+           rx="8.8999996"
+           ry="14.6"
+           id="ellipse3575"
+           style="fill:#eeeeee" /><ellipse
+           cx="404.10001"
+           cy="238.2"
+           rx="8.8999996"
+           ry="14.6"
+           id="ellipse3577"
+           style="fill:#eeeeee" /><path
+           d="m 383.9,274.1 c 0,3 -10.1,10.1 -22.5,10.1 -12.4,0 -22.5,-7.1 -22.5,-10.1 0,-3 10.1,-5.4 22.5,-5.4 12.4,0 22.5,2.4 22.5,5.4 z"
+           id="path3579"
+           style="fill:#212121" /></g><path
+         d="m 168.7,419.4 30.4,-107.5 -118.3,120.9 0,0 c -4.2,3.4 -6.9,8.6 -6.9,14.4 0,10.2 8.7,18.5 18.9,18.5 3.2,0 5.3,-0.8 9.3,-2.3 v 0 l -0.4,0 c 0.7,-0.4 1.2,-0.9 1.9,-1.3 l 65.1,-42.7 z"
+         id="path3581"
+         style="fill:#212121" /><path
+         d="m 554.9,419.4 -30.4,-107.5 118.3,120.9 0,0 c 4.2,3.4 6.9,8.6 6.9,14.4 0,10.2 -8.5,18.5 -18.7,18.5 -3.2,0 -6.1,-0.8 -9.1,-2.3 v 0 l 0.2,0 c -0.7,-0.4 -1.3,-0.9 -2,-1.3 l -65.2,-42.7 z"
+         id="path3583"
+         style="fill:#212121" /></g><path
+       d="m -4560.1,-2947 h -16.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -14.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -16.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 -21.5,-5.5 -28.1,-13.5 h -15.8 c -6.6,8 -16.7,13.5 -28.1,13.5 -11.4,0 [...]
+       id="path3585"
+       style="fill:#4fc3f7;display:inline" /><g
+       id="g3587"
+       style="display:inline"><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2896.5"
+         id="rect3589"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2896.5"
+         id="rect3591"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2896.5"
+         id="rect3593"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2896.5"
+         id="rect3595"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2704.5"
+         id="rect3597"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2704.5"
+         id="rect3599"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2704.5"
+         id="rect3601"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2704.5"
+         id="rect3603"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5181.5"
+         y="-2512.5"
+         id="rect3605"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-5037.5"
+         y="-2512.5"
+         id="rect3607"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4893.5"
+         y="-2512.5"
+         id="rect3609"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /><rect
+         width="144"
+         height="192"
+         x="-4749.5"
+         y="-2512.5"
+         id="rect3611"
+         style="fill:#03a9f4;stroke:#0d181c;stroke-miterlimit:10" /></g><path
+       d="m -4569.5,-2394 c 0,11.8 6.5,22.3 14.5,28.9 v -57.8 c -8,6.6 -14.5,17.1 -14.5,28.9 z"
+       id="path3613"
+       style="fill:none;display:inline" /><path
+       d="m -4568.5,-2466 c 0,11.4 5.5,21.5 13.5,28.1 v -56.2 c -8,6.6 -13.5,16.7 -13.5,28.1 z"
+       id="path3615"
+       style="fill:none;display:inline" /><path
+       d="m -4749,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path3617"
+       style="fill:none;display:inline" /><path
+       d="m -4821,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path3619"
+       style="fill:none;display:inline" /><path
+       d="m -4561.1,-2272 h 6.1 v -6.9 c -2,1.9 -4.2,3.9 -6.1,6.9 z"
+       id="path3621"
+       style="fill:none;display:inline" /><path
+       d="m -4569.5,-2322 c 0,11.8 6.5,22.3 14.5,28.9 v -57.8 c -8,6.6 -14.5,17.1 -14.5,28.9 z"
+       id="path3623"
+       style="fill:none;display:inline" /><path
+       d="m -4677,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path3625"
+       style="fill:none;display:inline" /><path
+       d="m -4605,-2285.5 c -11.4,0 -21.5,4.5 -28.1,13.5 h 56.2 c -6.6,-9 -16.7,-13.5 -28.1,-13.5 z"
+       id="path3627"
+       style="fill:none;display:inline" /><polygon
+       points="57,199 72,164 181.7,626 155.6,619 "
+       id="polygon3629"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="202,425.9 189,425 115.9,601 136.4,610 "
+       id="polygon3631"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="557,619 629,207 614,192.6 538,619 "
+       id="polygon3633"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="509.9,432 520,405.8 613,584 602,597 "
+       id="polygon3635"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="592,251.6 583.5,270 657,501.4 667,490.8 "
+       id="polygon3637"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="645,353 654,360 637.4,518 620.8,509 "
+       id="polygon3639"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="125,241 108,246.6 44,501.4 57,518 "
+       id="polygon3641"
+       style="fill:#7cb342;display:inline" /><polygon
+       points="28,379.5 38,360 95,490.8 84.5,498 "
+       id="polygon3643"
+       style="fill:#7cb342;display:inline" /></g><g
+     id="Layer_6"
+     style="display:none"><rect
+       width="720"
+       height="720"
+       x="0"
+       y="0"
+       id="rect3649"
+       style="fill:#0288d1;display:inline" /><path
+       d="m -1726.2,-632 h -7.7 c -210,0 -380.2,170.2 -380.2,380.2 v 7.7 c 0,210 170.2,380.2 380.2,380.2 h 7.7 c 210,0 380.2,-170.2 380.2,-380.2 v -7.7 c 0,-210 -170.2,-380.2 -380.2,-380.2 z"
+       id="path3651"
+       style="fill:#0288d1;display:inline" /><path
+       d="m -1888,-240 c 0,0 -198.2,241.1 148,232 267,-7 213,-120 210,-145 -18,-40 -79,-87 -79,-87 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 z"
+       id="path3653"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m -1742,-82 c 144.9,-3.8 195.3,-38.8 210.5,-74.1 -19.6,-39.3 -77.5,-83.9 -77.5,-83.9 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 0,0 -36.3,44.1 -50.7,93.9 18.4,38.4 72.5,67.4 196.7,64.1 z"
+       id="path3655"
+       style="fill:#ffffff;display:inline" /><g
+       id="g3657"
+       style="display:inline"><path
+         d="m -1947.7,-114.3 c 0,-6.7 27.7,-48.3 97.7,0 70,48.3 61,74.5 61,74.5 0,0 -21,26.9 19,50.9 10,34 -13.7,60.7 -41,64 -72.5,8.7 -154.8,-110.9 -136.7,-189.4 z"
+         id="path3659"
+         style="fill:#222222" /><path
+         d="m -1770.5,43 c -26.3,3 -53.9,-10.8 -77.4,-33.5 -16.7,-32.9 -24.7,-69.5 -17.7,-99.9 0,-3.2 6.5,-14.7 21.2,-20.1 -1.8,-1.3 -3.6,-2.6 -5.5,-3.9 -25.7,-17.8 -45.7,-23.4 -60.7,-23 -0.1,0 -0.1,0 -0.2,0 -2.5,0.1 -4.8,0.3 -7,0.6 0,0 0,0 -0.1,0 -7.4,1.2 -13.3,3.9 -17.8,7.1 0,0 0,0 0,0 -1.3,0.9 -2.6,1.9 -3.7,2.9 0,0 0,0 0,0 -0.4,0.3 -0.7,0.7 -1.1,1 0,0 0,0 0,0 -0.7,0.7 -1.3,1.3 -1.9,2 0,0 0,0 -0.1,0.1 -0.3,0.3 -0.5,0.6 -0.8,0.9 0,0 -0.1,0.1 -0.1,0.1 -0.5,0.6 -1,1.3 -1.4,1.9 0,0 0,0.1 - [...]
+         id="path3661"
+         style="fill:#2a2a2a" /><path
+         d="m -1918.7,-130.3 c 0,-1.3 1,-3.8 3.1,-6.7 -22.4,2.6 -32.1,18.8 -32.1,22.7 -18.1,78.5 64.2,198.1 136.7,189.3 11.9,-1.5 23.1,-7.3 31.2,-16.3 -0.7,0.1 -1.4,0.2 -2.2,0.3 -72.5,8.8 -154.8,-110.8 -136.7,-189.3 z"
+         id="path3663"
+         style="fill:#333333" /></g><path
+       d="m -1583,-155 c -18,97 -51,101 -54.4,148.2 C -1529,142 -1429,-149 -1583,-155 z"
+       id="path3665"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m -1576.3,-154.5 c -2.2,-0.2 -4.4,-0.4 -6.7,-0.5 -18,97 -51,101 -54.4,148.2 4.5,6.1 8.9,11.5 13.3,16.2 56.6,-4.1 90.8,-112.6 47.8,-163.9 z"
+       id="path3667"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1622.5,-381.6 c 0,-0.2 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 -10.6,-7.1 -10.6,-7.1 l -202.4,5.9 c 0,0 -12.1,16.5 -19.3,21.3 -7.2,4.9 0,137.3 0,137.3 0,0 120.1,-40.7 201.4,0 71.4,-50.6 32.9,-154.9 31.1,-157.2 z"
+       id="path3669"
+       style="fill:#222222;display:inline" /><path
+       d="m -1624.5,-381.6 c 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 -0.5,141.2 -33.9,153.2 5.7,5.7 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 20.7,6 88.7,-26.7 92.7,-78 -13.9,-47.4 -122.2,-222.6 -122.2,-222.6 z"
+       id="path3671"
+       style="fill:#2a2a2a;display:inline" /><g
+       id="g3673"
+       style="display:inline"><path
+         d="m -1857,-361.7 c 0,0 -17.3,5.3 -22,40.7 -4.7,35.4 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 12,-20.6 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -56.7,74 -56.7,74 0,0 16.7,-32.9 13.3,-62.1 -3.3,-29.3 -37.3,-56 -37.3,-56 z"
+         id="path3675"
+         style="fill:#2a2a2a" /><path
+         d="m -1843,-241 c -35,-9.3 -4.5,-110.7 -4.3,-111.9 -10,-12.5 -9.7,-8.7 -9.7,-8.7 0,0 -17.3,5.3 -22,40.7 -4.7,35.3 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 1.7,-3 22.7,-67.9 24.5,-71.7 -47.3,-4.5 -78.8,9.2 -102.5,2.9 z"
+         id="path3677"
+         style="fill:#3a3a3a" /><path
+         d="m -1869.6,-181.8 c 42.1,14.7 97.5,21.7 104.6,9.5 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -74.2,101.1 -93.3,135.8 z"
+         id="path3679"
+         style="fill:#3a3a3a" /><path
+         d="m -1686.3,-332.3 c -1,-2.8 -11.9,-2.7 -25.9,-1 -2.9,7 -5.8,12.8 -8.1,15.4 -7.3,8 -35.3,19.3 -35.7,28.7 -0.3,9.3 -13,55.3 -25,76 -8.8,15.2 -91.9,0.8 -131.8,-21.2 -2,5.2 -3.6,10.4 -4.9,15.6 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8.2 20.6,-48.2 18,-55.5 z"
+         id="path3681"
+         style="fill:#333333" /></g><path
+       d="m -1627,-447.7 c 0,26.7 -3.9,64.8 -22,81.3 -21,19.2 -63.7,6 -97.5,6 -36.3,0 -75.6,12.2 -96.5,-12 -15.4,-17.8 -18,-38.9 -18,-63.3 0,-37.4 17.5,-84.1 50,-108.7 17.6,-13.3 42.7,-16.3 64.8,-16.3 18.2,0 36,1 51.8,9 39.1,19.6 67.4,63.1 67.4,104 z"
+       id="path3683"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m -1493.7,-558.8 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path3685"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1525.7,-553.8 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path3687"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1596,-127.7 c -0.7,-11.3 19.5,-38.7 8.1,-64 -11.4,-25.3 -55.3,-54.5 -55.3,-54.5 l -14.2,16.8 c 0,0 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 6.6,1.9 18,-0.1 30.6,-5.4 -19.8,-6.6 -31.9,-29.2 -32.6,-40.3 z"
+       id="path3689"
+       style="fill:#222222;display:inline" /><path
+       d="m -1622.5,-381.6 -3.3,35 c 0,0 77,153.4 67.4,182.5 -7,21.1 -44.9,23.8 -57.3,37.7 -10.4,11.6 12.8,35.6 19,36.8 24,4.7 92.3,-49.5 94.3,-69.5 2.1,-19.9 -120.1,-222.5 -120.1,-222.5 z"
+       id="path3691"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m -1694.3,-551.7 c -15.9,-8 -33.6,-9 -51.8,-9 -22.2,0 -47.2,3 -64.8,16.3 -27.5,20.8 -44.3,57.4 -48.8,90.9 1.9,14.9 6.5,28.3 16.8,40.1 10.8,12.4 42.8,18.8 42.8,20.8 0,14.1 21.4,25.5 47.9,25.5 26.4,0 47.9,-11.4 47.9,-25.5 0,-1.9 42.5,-3 55.5,-14.8 12.8,-11.7 18.5,-34.1 20.7,-55.7 -6.1,-36 -32,-71.4 -66.2,-88.6 z"
+       id="path3693"
+       style="fill:#ffffff;display:inline" /><path
+       d="m -1784.5,-477 c -10.5,1 -15.5,13.5 -25,32.5 -9.5,19 6.5,26 12.5,23 6,-3 19.8,-30.5 25,-36 1.2,-3.3 -2,-20.5 -12.5,-19.5 z"
+       id="path3695"
+       style="fill:#333333;display:inline" /><path
+       d="m -1715.7,-479 c 10.5,1 15.5,13.5 25,32.5 9.5,19 -6.5,26 -12.5,23 -6,-3 -19.8,-30.5 -25,-36 -1.2,-3.3 2,-20.5 12.5,-19.5 z"
+       id="path3697"
+       style="fill:#333333;display:inline" /><path
+       d="m -1776.5,-403.3 c 0,-8 13.5,-9.3 22.8,-9.3 13,0 25.3,4 25.3,9.3 0,5.3 -20,17.5 -24,17.5 -4.1,0 -24.1,-9.5 -24.1,-17.5 z"
+       id="path3699"
+       style="fill:#222222;display:inline" /><path
+       d="m -1752,-377.7 c 0,0 -19,7.9 -43.2,-3.3 0,2.5 21.2,13.8 43.2,13.8 22,0 43.2,-11.3 43.2,-13.8 -24.2,11.2 -43.2,3.3 -43.2,3.3 z"
+       id="path3701"
+       style="fill:#333333;display:inline" /><path
+       d="m -1814.3,-539.7 c -13,-7 -24.8,-30.2 -36.7,-18.3 -11.9,11.9 -23.1,54.5 -19.3,58.3 3.8,3.8 17,20.6 17,20.6 0,0 41,-53.2 39,-60.6 z"
+       id="path3703"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1693,-547 c 0,0 12.4,-23.5 23.7,-29.7 42.3,5 34.7,58.3 35.3,66 -3.3,3.3 -13.7,6.3 -13.7,6.3 L -1693,-547 z"
+       id="path3705"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m -1752.5,-396.8 c 2.8,0 13.7,-6.1 19.8,-11.6 -4.7,-2.6 -12.7,-4.2 -21,-4.2 -6.6,0 -15.5,0.6 -19.9,4 5.6,6.3 18,11.8 21.1,11.8 z"
+       id="path3707"
+       style="fill:#333333;display:inline" /><path
+       d="m -1822.4,-522.6 c 5.1,-8.1 8.6,-14.8 8,-17.1 -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 1.1,1.1 3,3.3 5.1,5.9 3.7,-14 10.3,-31.3 17.2,-38.2 8.5,-8.4 16.9,0.9 25.7,9.4 z"
+       id="path3709"
+       style="fill:#333333;display:inline" /><path
+       d="m -1669.3,-576.7 c -11.2,6.2 -23.7,29.7 -23.7,29.7 l 4.3,4.1 c 3.6,-4.5 7.5,-8.6 11.4,-10.7 28.6,3.4 34.4,28.9 35.3,47.4 3,-1.2 6.4,-2.7 8,-4.4 -0.7,-7.7 7,-61.1 -35.3,-66.1 z"
+       id="path3711"
+       style="fill:#333333;display:inline" /><path
+       d="m -1825,-248.7 c 0,0 0.7,-62.8 42.3,-81.6 -3.4,59.9 -42.3,81.6 -42.3,81.6 z"
+       id="path3713"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1547.7,-196 -4.7,5.3 c 0,0 -95.3,-149.7 -233.3,-135 -2,-1.9 -2.9,-3.3 -2.7,-4.2 140.7,-25.4 240.7,133.9 240.7,133.9 z"
+       id="path3715"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1915.7,-354 c 0,0 91.3,-12.7 131.3,25.3 -87.9,9.4 -131.3,-25.3 -131.3,-25.3 z"
+       id="path3717"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1832.4,-401.2 c 0,0 49.6,33.4 47.2,73.3 -46.2,-33.9 -47.2,-73.3 -47.2,-73.3 z"
+       id="path3719"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1788.3,-329.8 c -62.1,21.8 -81.7,77.3 -81.7,77.3 0,0 -0.2,-2.4 5,2.7 28.3,-50.7 79.4,-78 79.4,-78 0,0 6.8,-2 -2.7,-2 z"
+       id="path3721"
+       style="fill:#689f38;display:inline" /><g
+       id="g3723"
+       style="display:inline"><path
+         d="m -1845.2,-189.7 c 0,0 -34.3,-35.8 -21.3,-69.4 31.2,35.7 21.3,69.4 21.3,69.4 z"
+         id="path3725"
+         style="fill:#689f38" /></g><path
+       d="m -1940.6,-203.7 c 0,0 32.1,-54 77.5,-49.4 -33,50.1 -77.5,49.4 -77.5,49.4 z"
+       id="path3727"
+       style="fill:#689f38;display:inline" /><g
+       id="g3729"
+       style="display:inline"><path
+         d="m -1928.8,-266.8 c 0,0 45,-11 66,15.3 -43.5,8.5 -66,-15.3 -66,-15.3 z"
+         id="path3731"
+         style="fill:#689f38" /></g><path
+       d="m -1828.8,-392.3 c 3.1,13.1 12.5,37 40.3,59.3 -3.5,-26.9 -28.3,-49.7 -40.3,-59.3 z"
+       id="path3733"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1794.7,-332.1 c -33.2,-25 -86,-24.1 -110.2,-22 17.9,10.8 54.6,26.6 110.2,22 z"
+       id="path3735"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1784.7,-327.1 c -27.9,19.7 -36.6,54.4 -39.3,73.4 14.3,-12.2 33.9,-35.4 39.3,-73.4 z"
+       id="path3737"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.4,-253.4 c -16.3,-15.6 -42.4,-14.4 -55,-12.6 7.8,5.8 26.3,16.2 55,12.6 z"
+       id="path3739"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.3,-254.1 c -29.2,3.1 -51.6,28.8 -61.2,41.8 14.5,-3.1 39.7,-12.6 61.2,-41.8 z"
+       id="path3741"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1798,-236.4 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path3743"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1795,-233.4 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path3745"
+       style="fill:#689f38;display:inline" /><path
+       d="m -1788.9,-330.1 c -51.7,20.7 -77.9,66.2 -81.5,75.1 0.4,0.4 4.4,2.9 4.9,3.4 11.1,-36.3 48.6,-64.2 77.6,-76.7 0.1,-1.2 -0.3,-2.2 -1,-1.8 z"
+       id="path3747"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1866.6,-254 c -4.5,22.4 9.4,44.6 17.6,55.5 1,-11.1 -0.2,-32.5 -17.6,-55.5 z"
+       id="path3749"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1864.9,-246.8 c -3,14.6 6.1,29.1 11.5,36.2 0.7,-7.2 -0.1,-21.1 -11.5,-36.2 z"
+       id="path3751"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1874.6,-249.8 c -17.1,1.8 -30.3,16.9 -35.9,24.5 8.5,-1.8 23.3,-7.4 35.9,-24.5 z"
+       id="path3753"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1872.2,-255.4 c -8.8,-8.4 -22.9,-7.7 -29.7,-6.8 4.2,3.1 14.2,8.8 29.7,6.8 z"
+       id="path3755"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1790.5,-318 c -11.5,9.3 -15.1,25.6 -16.2,34.5 5.9,-5.7 14,-16.6 16.2,-34.5 z"
+       id="path3757"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1807.7,-336.5 c -18.3,-11.8 -47.2,-11.3 -60.6,-10.3 9.9,5.1 30,12.5 60.6,10.3 z"
+       id="path3759"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m -1551.2,-191.3 2.1,-2.3 c -8.6,-13.3 -104.5,-155.8 -239.8,-136.5 0.3,0.3 0.7,1.5 1,1.8 141.2,-13.1 236.7,137 236.7,137 z"
+       id="path3761"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m -1818.4,-376.5 c 1.9,8 7.7,22.8 24.8,36.5 -2.1,-16.6 -17.3,-30.6 -24.8,-36.5 z"
+       id="path3763"
+       style="fill:#a9d86c;display:inline" /><g
+       id="g3765"
+       style="display:inline"><path
+         d="m -2583,-531 h -5.4 c -148.3,0 -268.6,120.3 -268.6,268.6 v 5.4 c 0,148.3 120.3,268.6 268.6,268.6 h 5.4 c 148.3,0 268.6,-120.3 268.6,-268.6 v -5.4 c 0,-148.4 -120.3,-268.6 -268.6,-268.6 z"
+         id="path3767"
+         style="fill:#0288d1" /><path
+         d="m -2697.3,-254 c 0,0 -140,170.3 104.6,163.9 188.6,-4.9 150.5,-84.8 148.4,-102.4 -12.7,-28.3 -55.8,-61.5 -55.8,-61.5 0,0 -31.2,-21.2 -92.9,-21.9 -34.4,-5 -57.2,6.9 -104.3,21.9 z"
+         id="path3769"
+         style="fill:#eeeeee" /><path
+         d="m -2594.2,-142.4 c 102.4,-2.7 138,-27.4 148.7,-52.3 -13.9,-27.8 -54.8,-59.3 -54.8,-59.3 0,0 -31.2,-21.2 -92.9,-21.9 -34.2,-4.9 -57.1,6.9 -104.2,21.9 0,0 -25.6,31.2 -35.8,66.3 13.1,27.1 51.3,47.6 139,45.3 z"
+         id="path3771"
+         style="fill:#ffffff" /><g
+         id="g3773"><path
+           d="m -2739.5,-165.3 c 0,-4.7 19.5,-34.1 69,0 49.5,34.1 43.1,52.6 43.1,52.6 0,0 -14.8,19 13.4,35.9 7.1,24 -9.7,42.9 -29,45.2 -51.2,6.4 -109.3,-78.1 -96.5,-133.7 z"
+           id="path3775"
+           style="fill:#222222" /><path
+           d="m -2614.3,-54.1 c -18.6,2.1 -38.1,-7.7 -54.7,-23.6 -11.8,-23.2 -17.5,-49.1 -12.5,-70.6 0,-2.3 4.6,-10.4 15,-14.2 -1.3,-0.9 -2.5,-1.8 -3.9,-2.7 -18.2,-12.5 -32.3,-16.5 -42.9,-16.3 0,0 -0.1,0 -0.1,0 -1.7,0 -3.4,0.2 -4.9,0.4 0,0 0,0 0,0 -5.2,0.9 -9.4,2.8 -12.6,5 0,0 0,0 0,0 -1,0.7 -1.8,1.4 -2.6,2.1 0,0 0,0 0,0 -0.3,0.2 -0.5,0.5 -0.7,0.7 0,0 0,0 0,0 -0.5,0.5 -0.9,0.9 -1.3,1.4 0,0 0,0 0,0.1 -0.2,0.2 -0.4,0.4 -0.5,0.6 0,0 0,0 -0.1,0.1 -0.4,0.4 -0.7,0.9 -1,1.3 0,0 0,0 0,0.1 -0.1,0 [...]
+           id="path3777"
+           style="fill:#2a2a2a" /><path
+           d="m -2719,-176.6 c 0,-0.9 0.7,-2.7 2.2,-4.7 -15.8,1.8 -22.7,13.2 -22.7,16 -12.8,55.5 45.3,140 96.6,133.8 8.4,-1 16.3,-5.2 22,-11.5 -0.5,0.1 -1,0.2 -1.5,0.2 -51.3,6.2 -109.4,-78.2 -96.6,-133.8 z"
+           id="path3779"
+           style="fill:#333333" /></g><path
+         d="m -2481.8,-194 c -12.7,68.5 -36,71.4 -38.5,104.7 76.6,105.1 147.3,-100.5 38.5,-104.7 z"
+         id="path3781"
+         style="fill:#3a3a3a" /><path
+         d="m -2477.1,-193.7 c -1.5,-0.1 -3.1,-0.3 -4.7,-0.3 -12.7,68.5 -36,71.4 -38.5,104.7 3.2,4.3 6.3,8.1 9.4,11.4 40,-2.9 64.2,-79.5 33.8,-115.8 z"
+         id="path3783"
+         style="fill:#2a2a2a" /><path
+         d="m -2509.7,-354.1 c 0,-0.2 0,-0.3 0,-0.5 0,0.1 -0.1,0.2 -0.1,0.3 -3,-3.6 -7.5,-5 -7.5,-5 l -143,4.2 c 0,0 -8.6,11.6 -13.7,15.1 -5.1,3.4 0,97 0,97 0,0 84.8,-28.7 142.3,0 50.4,-35.8 23.2,-109.5 22,-111.1 z"
+         id="path3785"
+         style="fill:#222222" /><path
+         d="m -2511.1,-354.1 c 0,0 0,-0.3 0,-0.5 0,0.1 -0.1,0.2 -0.1,0.3 -3.1,-3.5 0.1,0.2 0.1,0.2 0,0 -0.4,99.8 -23.9,108.3 4,4 18.5,12.2 26.5,30.1 8,17.9 -6.2,37.2 -5.7,45.2 0.5,8 9.4,24.5 24,28.7 14.6,4.2 62.6,-18.8 65.5,-55.1 -9.9,-33.4 -86.4,-157.2 -86.4,-157.2 z"
+         id="path3787"
+         style="fill:#2a2a2a" /><g
+         id="g3789"><path
+           d="m -2675.4,-340 c 0,0 -12.2,3.8 -15.5,28.7 -3.3,25 -21.7,48.5 -27.3,72.1 -5.7,23.6 99.4,47.6 107.9,33 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.2,-5.7 14.6,-33.9 12.7,-39.1 -1.9,-5.2 -53.2,3.8 -63.6,10.4 -10.4,6.6 -40,52.3 -40,52.3 0,0 11.8,-23.3 9.4,-43.9 -2.5,-20.7 -26.5,-39.5 -26.5,-39.5 z"
+           id="path3791"
+           style="fill:#2a2a2a" /><path
+           d="m -2665.6,-254.8 c -24.7,-6.6 -3.2,-78.2 -3,-79.1 -7,-8.8 -6.8,-6.2 -6.8,-6.2 0,0 -12.2,3.8 -15.5,28.7 -3.3,25 -21.7,48.5 -27.3,72.1 -5.7,23.6 99.4,47.6 107.9,33 1.2,-2.1 16.1,-48 17.3,-50.7 -33.5,-3 -55.8,6.7 -72.6,2.2 z"
+           id="path3793"
+           style="fill:#3a3a3a" /><path
+           d="m -2684.3,-212.9 c 29.7,10.4 68.9,15.4 73.9,6.7 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.2,-5.7 14.6,-33.9 12.7,-39.1 -1.9,-5.2 -53.2,3.8 -63.6,10.4 -10.4,6.6 -52.4,71.5 -65.9,96 z"
+           id="path3795"
+           style="fill:#3a3a3a" /><path
+           d="m -2554.9,-319.3 c -0.7,-1.9 -8.4,-1.9 -18.3,-0.7 -2,4.9 -4.1,9.1 -5.8,10.9 -5.2,5.7 -25,13.7 -25.2,20.3 -0.2,6.6 -9.2,39.1 -17.7,53.7 -6.2,10.8 -64.9,0.5 -93.1,-15 -1.4,3.7 -2.6,7.3 -3.5,11 -5.7,23.6 99.4,47.6 107.9,33 8.5,-14.6 17.4,-47.1 17.7,-53.7 0.2,-6.6 20,-14.6 25.2,-20.3 5.3,-5.7 14.7,-34 12.8,-39.2 z"
+           id="path3797"
+           style="fill:#333333" /></g><path
+         d="m -2512.9,-400.8 c 0,18.9 -2.7,45.8 -15.5,57.5 -14.8,13.5 -45,4.2 -68.9,4.2 -25.7,0 -53.4,8.6 -68.2,-8.5 -10.9,-12.6 -12.7,-27.5 -12.7,-44.7 0,-26.4 12.4,-59.4 35.3,-76.8 12.4,-9.4 30.2,-11.5 45.8,-11.5 12.9,0 25.4,0.7 36.6,6.4 27.6,13.8 47.6,44.5 47.6,73.4 z"
+         id="path3799"
+         style="fill:#eeeeee" /><path
+         d="m -2418.7,-479.3 c -3,-3.6 0.1,0.2 0.1,0.2 0,0 0,-0.3 0,-0.5 -0.1,0.1 -0.1,0.2 -0.1,0.3 z"
+         id="path3801"
+         style="fill:#2a2a2a" /><path
+         d="m -2441.3,-475.8 c -3,-3.6 0.1,0.2 0.1,0.2 0,0 0,-0.3 0,-0.5 -0.1,0.1 -0.1,0.2 -0.1,0.3 z"
+         id="path3803"
+         style="fill:#2a2a2a" /><path
+         d="m -2491,-174.7 c -0.5,-8 13.8,-27.3 5.7,-45.2 -8,-17.9 -39.1,-38.5 -39.1,-38.5 l -10,11.9 c 0,0 18.5,12.2 26.5,30.1 8,17.9 -6.2,37.2 -5.7,45.2 0.5,8 9.4,24.5 24,28.7 4.7,1.4 12.7,-0.1 21.7,-3.8 -14.1,-4.6 -22.7,-20.6 -23.1,-28.4 z"
+         id="path3805"
+         style="fill:#222222" /><path
+         d="m -2509.7,-354.1 -2.3,24.7 c 0,0 54.4,108.3 47.6,128.9 -4.9,14.9 -31.7,16.8 -40.5,26.6 -7.3,8.2 9,25.2 13.4,26 17,3.3 65.2,-35 66.6,-49.1 1.5,-14 -84.8,-157.1 -84.8,-157.1 z"
+         id="path3807"
+         style="fill:#3a3a3a" /><path
+         d="m -2560.5,-474.2 c -11.2,-5.6 -23.8,-6.4 -36.6,-6.4 -15.7,0 -33.4,2.1 -45.8,11.5 -19.4,14.7 -31.3,40.6 -34.5,64.2 1.3,10.5 4.6,20 11.9,28.4 7.6,8.8 30.2,13.3 30.2,14.7 0,10 15.1,18 33.8,18 18.7,0 33.8,-8.1 33.8,-18 0,-1.4 30,-2.1 39.2,-10.5 9,-8.2 13.1,-24.1 14.6,-39.3 -4.1,-25.5 -22.4,-50.5 -46.6,-62.6 z"
+         id="path3809"
+         style="fill:#ffffff" /><path
+         d="m -2624.2,-421.5 c -7.4,0.7 -11,9.5 -17.7,23 -6.7,13.4 4.6,18.4 8.8,16.2 4.2,-2.1 14,-21.5 17.7,-25.4 0.9,-2.3 -1.4,-14.5 -8.8,-13.8 z"
+         id="path3811"
+         style="fill:#333333" /><path
+         d="m -2575.6,-422.9 c 7.4,0.7 11,9.5 17.7,23 6.7,13.4 -4.6,18.4 -8.8,16.2 -4.2,-2.2 -14,-21.5 -17.7,-25.4 -0.9,-2.3 1.4,-14.5 8.8,-13.8 z"
+         id="path3813"
+         style="fill:#333333" /><path
+         d="m -2618.6,-369.4 c 0,-5.7 9.5,-6.5 16.1,-6.5 9.2,0 17.9,2.8 17.9,6.5 0,3.7 -14.1,12.4 -17,12.4 -2.8,0 -17,-6.7 -17,-12.4 z"
+         id="path3815"
+         style="fill:#222222" /><path
+         d="m -2601.2,-351.3 c 0,0 -13.4,5.6 -30.5,-2.4 0,1.8 15,9.7 30.5,9.7 15.5,0 30.5,-7.9 30.5,-9.7 -17.1,8 -30.5,2.4 -30.5,2.4 z"
+         id="path3817"
+         style="fill:#333333" /><path
+         d="m -2645.3,-465.8 c -9.2,-4.9 -17.5,-21.3 -25.9,-13 -8.4,8.3 -16.3,38.5 -13.7,41.2 2.7,2.7 12,14.6 12,14.6 0,0 29,-37.6 27.6,-42.8 z"
+         id="path3819"
+         style="fill:#2a2a2a" /><path
+         d="m -2559.6,-470.9 c 0,0 8.8,-16.6 16.7,-21 29.9,3.5 24.5,41.2 25,46.6 -2.3,2.3 -9.7,4.5 -9.7,4.5 l -32,-30.1 z"
+         id="path3821"
+         style="fill:#2a2a2a" /><path
+         d="m -2601.6,-364.8 c 2,0 9.7,-4.3 14,-8.2 -3.3,-1.8 -9,-3 -14.9,-3 -4.7,0 -10.9,0.5 -14.1,2.8 4,4.5 12.8,8.4 15,8.4 z"
+         id="path3823"
+         style="fill:#333333" /><path
+         d="m -2651,-453.7 c 3.6,-5.8 6.1,-10.5 5.7,-12.1 -9.2,-4.9 -17.5,-21.3 -25.9,-13 -8.4,8.4 -16.3,38.5 -13.7,41.2 0.8,0.8 2.1,2.3 3.6,4.1 2.6,-9.9 7.3,-22.1 12.2,-27 6,-5.8 11.9,0.8 18.1,6.8 z"
+         id="path3825"
+         style="fill:#333333" /><path
+         d="m -2542.8,-491.9 c -7.9,4.4 -16.7,21 -16.7,21 l 3,2.9 c 2.5,-3.2 5.3,-6.1 8,-7.6 20.2,2.4 24.3,20.4 25,33.5 2.1,-0.8 4.5,-1.9 5.7,-3.1 -0.5,-5.5 4.9,-43.2 -25,-46.7 z"
+         id="path3827"
+         style="fill:#333333" /><path
+         d="m -2652.8,-260.2 c 0,0 0.5,-44.4 29.9,-57.7 -2.4,42.4 -29.9,57.7 -29.9,57.7 z"
+         id="path3829"
+         style="fill:#689f38" /><path
+         d="m -2456.9,-223 -3.3,3.8 c 0,0 -67.4,-105.7 -164.8,-95.4 -1.4,-1.4 -2.1,-2.4 -1.9,-3 99.4,-17.9 170,94.6 170,94.6 z"
+         id="path3831"
+         style="fill:#689f38" /><path
+         d="m -2716.9,-334.6 c 0,0 64.5,-8.9 92.8,17.9 -62.2,6.6 -92.8,-17.9 -92.8,-17.9 z"
+         id="path3833"
+         style="fill:#689f38" /><path
+         d="m -2658.1,-367.9 c 0,0 35.1,23.6 33.3,51.8 -32.6,-24 -33.3,-51.8 -33.3,-51.8 z"
+         id="path3835"
+         style="fill:#689f38" /><path
+         d="m -2626.9,-317.5 c -43.9,15.4 -57.8,54.6 -57.8,54.6 0,0 -0.1,-1.7 3.5,1.9 20,-35.8 56.1,-55.1 56.1,-55.1 0,0 4.9,-1.4 -1.8,-1.4 z"
+         id="path3837"
+         style="fill:#689f38" /><g
+         id="g3839"><path
+           d="m -2667.1,-218.5 c 0,0 -24.3,-25.3 -15.1,-49 22.1,25.2 15.1,49 15.1,49 z"
+           id="path3841"
+           style="fill:#689f38" /></g><path
+         d="m -2734.5,-228.4 c 0,0 22.7,-38.1 54.8,-34.9 -23.4,35.4 -54.8,34.9 -54.8,34.9 z"
+         id="path3843"
+         style="fill:#689f38" /><g
+         id="g3845"><path
+           d="m -2726.2,-273 c 0,0 31.8,-7.8 46.6,10.8 -30.6,6.1 -46.6,-10.8 -46.6,-10.8 z"
+           id="path3847"
+           style="fill:#689f38" /></g><path
+         d="m -2655.5,-361.6 c 2.2,9.2 8.8,26.1 28.5,41.9 -2.5,-19.1 -20,-35.1 -28.5,-41.9 z"
+         id="path3849"
+         style="fill:#8bc34a" /><path
+         d="m -2631.4,-319.1 c -23.5,-17.7 -60.7,-17 -77.9,-15.6 12.7,7.7 38.6,18.8 77.9,15.6 z"
+         id="path3851"
+         style="fill:#8bc34a" /><path
+         d="m -2624.3,-315.6 c -19.7,13.9 -25.9,38.4 -27.8,51.8 10.1,-8.6 23.9,-25 27.8,-51.8 z"
+         id="path3853"
+         style="fill:#8bc34a" /><path
+         d="m -2682.1,-263.5 c -11.5,-11 -29.9,-10.1 -38.9,-8.9 5.6,4.1 18.7,11.5 38.9,8.9 z"
+         id="path3855"
+         style="fill:#8bc34a" /><path
+         d="m -2682,-264 c -20.7,2.2 -36.5,20.3 -43.2,29.6 10.2,-2.2 28,-9 43.2,-29.6 z"
+         id="path3857"
+         style="fill:#8bc34a" /><path
+         d="m -2633.7,-251.5 c 0,0 0,-0.1 0.1,-0.3 -0.2,0.1 -0.1,0.3 -0.1,0.3 z"
+         id="path3859"
+         style="fill:#689f38" /><path
+         d="m -2631.6,-249.4 c 0,0 0,-0.1 0.1,-0.3 -0.1,0.1 -0.1,0.3 -0.1,0.3 z"
+         id="path3861"
+         style="fill:#689f38" /><path
+         d="m -2627.3,-317.7 c -36.5,14.6 -55,46.8 -57.6,53 0.3,0.3 3.1,2 3.5,2.4 7.8,-25.6 34.4,-45.4 54.8,-54.2 0,-0.8 -0.2,-1.5 -0.7,-1.2 z"
+         id="path3863"
+         style="fill:#8bc34a" /><path
+         d="m -2682.2,-263.9 c -3.2,15.8 6.6,31.5 12.5,39.2 0.6,-7.9 -0.2,-23 -12.5,-39.2 z"
+         id="path3865"
+         style="fill:#8bc34a" /><path
+         d="m -2681,-258.8 c -2.1,10.3 4.3,20.6 8.1,25.6 0.5,-5.1 -0.1,-15 -8.1,-25.6 z"
+         id="path3867"
+         style="fill:#a9d86c" /><path
+         d="m -2687.9,-260.9 c -12.1,1.3 -21.4,11.9 -25.4,17.3 6.1,-1.3 16.5,-5.3 25.4,-17.3 z"
+         id="path3869"
+         style="fill:#a9d86c" /><path
+         d="m -2686.2,-264.9 c -6.2,-5.9 -16.2,-5.5 -21,-4.8 3,2.2 10.1,6.2 21,4.8 z"
+         id="path3871"
+         style="fill:#a9d86c" /><path
+         d="m -2628.4,-309.2 c -8.1,6.5 -10.7,18.1 -11.5,24.4 4.2,-4 9.9,-11.7 11.5,-24.4 z"
+         id="path3873"
+         style="fill:#a9d86c" /><path
+         d="m -2640.6,-322.2 c -12.9,-8.3 -33.4,-8 -42.8,-7.3 7,3.6 21.2,8.8 42.8,7.3 z"
+         id="path3875"
+         style="fill:#a9d86c" /><path
+         d="m -2459.4,-219.7 1.5,-1.6 c -6.1,-9.4 -73.8,-110.1 -169.4,-96.4 0.2,0.2 0.5,1 0.7,1.3 99.8,-9.3 167.2,96.7 167.2,96.7 z"
+         id="path3877"
+         style="fill:#8bc34a" /><path
+         d="m -2648.1,-350.5 c 1.4,5.7 5.4,16.1 17.5,25.8 -1.5,-11.7 -12.3,-21.6 -17.5,-25.8 z"
+         id="path3879"
+         style="fill:#a9d86c" /></g></g><g
+     id="Layer_4"
+     style="display:none"><path
+       d="m 212,380 c 0,0 -198.2,241.1 148,232 267,-7 213,-120 210,-145 -18,-40 -79,-87 -79,-87 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 z"
+       id="path3882"
+       style="fill:#eeeeee;display:inline" /><path
+       d="M 358,538 C 502.9,534.2 553.3,499.2 568.5,463.9 548.9,424.6 491,380 491,380 c 0,0 -44.2,-30 -131.5,-31 -48.5,-7 -80.8,9.8 -147.5,31 0,0 -36.3,44.1 -50.7,93.9 18.4,38.4 72.5,67.4 196.7,64.1 z"
+       id="path3884"
+       style="fill:#ffffff;display:inline" /><g
+       id="g3886"
+       style="display:inline"><path
+         d="m 152.3,505.7 c 0,-6.7 27.7,-48.3 97.7,0 70,48.3 61,74.5 61,74.5 0,0 -21,26.8 19,50.8 10,34 -13.7,60.7 -41,64 -72.5,8.8 -154.7,-110.7 -136.7,-189.3 z"
+         id="path3888"
+         style="fill:#222222" /><path
+         d="m 329.5,663 c -26.3,3 -53.9,-10.8 -77.4,-33.5 -16.7,-32.9 -24.7,-69.5 -17.7,-99.9 0,-3.2 6.5,-14.7 21.2,-20.1 -1.8,-1.3 -3.6,-2.6 -5.5,-3.9 -25.7,-17.8 -45.7,-23.4 -60.7,-23 -0.1,0 -0.1,0 -0.2,0 -2.5,0.1 -4.8,0.3 -7,0.6 0,0 0,0 -0.1,0 -7.4,1.2 -13.3,3.9 -17.8,7.1 0,0 0,0 0,0 -1.3,0.9 -2.6,1.9 -3.7,2.9 0,0 0,0 0,0 -0.4,0.3 -0.7,0.7 -1.1,1 0,0 0,0 0,0 -0.7,0.7 -1.3,1.3 -1.9,2 0,0 0,0 -0.1,0.1 -0.3,0.3 -0.5,0.6 -0.8,0.9 0,0 -0.1,0.1 -0.1,0.1 -0.5,0.6 -1,1.3 -1.4,1.9 0,0 0,0.1 -0 [...]
+         id="path3890"
+         style="fill:#2a2a2a" /><path
+         d="m 181.3,489.7 c 0,-1.3 1,-3.8 3.1,-6.7 -22.4,2.6 -32.1,18.8 -32.1,22.7 -18,78.6 64.2,198.1 136.7,189.3 11.9,-1.5 23.1,-7.3 31.2,-16.3 -0.7,0.1 -1.4,0.2 -2.2,0.3 -72.5,8.8 -154.7,-110.7 -136.7,-189.3 z"
+         id="path3892"
+         style="fill:#333333" /></g><path
+       d="M 517,465 C 499,562 466,566 462.6,613.2 571,762 671,471 517,465 z"
+       id="path3894"
+       style="fill:#3a3a3a;display:inline" /><path
+       d="m 523.7,465.5 c -2.2,-0.2 -4.4,-0.4 -6.7,-0.5 -18,97 -51,101 -54.4,148.2 4.5,6.1 8.9,11.5 13.3,16.2 56.6,-4.1 90.8,-112.6 47.8,-163.9 z"
+       id="path3896"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 477.5,238.4 c 0,-0.2 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 -10.6,-7.1 -10.6,-7.1 L 264.3,237 c 0,0 -12.1,16.5 -19.3,21.3 -7.2,4.9 0,137.3 0,137.3 0,0 120.1,-40.7 201.4,0 71.4,-50.6 32.9,-154.9 31.1,-157.2 z"
+       id="path3898"
+       style="fill:#222222;display:inline" /><path
+       d="m 475.5,238.4 c 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 -0.5,141.2 -33.9,153.2 5.7,5.7 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 20.7,6 88.7,-26.7 92.7,-78 C 583.8,413.6 475.5,238.4 475.5,238.4 z"
+       id="path3900"
+       style="fill:#2a2a2a;display:inline" /><g
+       id="g3902"
+       style="display:inline"><path
+         d="m 243,258.3 c 0,0 -17.3,5.3 -22,40.7 -4.7,35.4 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -56.7,74 -56.7,74 0,0 16.7,-32.9 13.3,-62.1 C 277,285 243,258.3 243,258.3 z"
+         id="path3904"
+         style="fill:#2a2a2a" /><path
+         d="m 257,379 c -35,-9.3 -4.5,-110.7 -4.3,-111.9 -10,-12.5 -9.7,-8.7 -9.7,-8.7 0,0 -17.3,5.3 -22,40.7 -4.7,35.3 -30.7,68.7 -38.7,102 -8,33.3 140.7,67.3 152.7,46.7 1.7,-3 22.7,-67.9 24.5,-71.7 -47.3,-4.5 -78.8,9.2 -102.5,2.9 z"
+         id="path3906"
+         style="fill:#3a3a3a" /><path
+         d="m 230.4,438.2 c 42.1,14.7 97.5,21.7 104.6,9.5 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8 20.7,-48 18,-55.3 -2.7,-7.3 -75.3,5.3 -90,14.7 -14.7,9.3 -74.2,101.1 -93.3,135.8 z"
+         id="path3908"
+         style="fill:#3a3a3a" /><path
+         d="m 413.7,287.7 c -1,-2.8 -11.9,-2.7 -25.9,-1 -2.9,7 -5.8,12.8 -8.1,15.4 -7.3,8 -35.3,19.3 -35.7,28.7 -0.3,9.3 -13,55.3 -25,76 -8.8,15.2 -91.9,0.8 -131.8,-21.2 -2,5.2 -3.6,10.4 -4.9,15.6 -8,33.3 140.7,67.3 152.7,46.7 12,-20.7 24.7,-66.7 25,-76 0.3,-9.3 28.3,-20.7 35.7,-28.7 7.3,-8.2 20.6,-48.2 18,-55.5 z"
+         id="path3910"
+         style="fill:#333333" /></g><path
+       d="m 473,172.3 c 0,26.7 -3.9,64.8 -22,81.3 -21,19.2 -63.7,6 -97.5,6 -36.3,0 -75.6,12.2 -96.5,-12 -15.4,-17.8 -18,-38.9 -18,-63.3 0,-37.4 17.5,-84.1 50,-108.7 17.6,-13.3 42.7,-16.3 64.8,-16.3 18.2,0 36,1 51.8,9 39.1,19.6 67.4,63.1 67.4,104 z"
+       id="path3912"
+       style="fill:#eeeeee;display:inline" /><path
+       d="m 606.3,61.2 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path3914"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 574.3,66.2 c -4.2,-5.1 0.2,0.2 0.2,0.2 0,0 0,-0.5 0,-0.7 -0.1,0.2 -0.1,0.3 -0.2,0.5 z"
+       id="path3916"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 504,492.3 c -0.7,-11.3 19.5,-38.7 8.1,-64 -11.4,-25.3 -55.3,-54.5 -55.3,-54.5 l -14.2,16.8 c 0,0 26.1,17.3 37.5,42.7 11.4,25.4 -8.8,52.7 -8.1,64 0.7,11.3 13.3,34.7 34,40.7 6.6,1.9 18,-0.1 30.6,-5.4 C 516.8,526 504.7,503.4 504,492.3 z"
+       id="path3918"
+       style="fill:#222222;display:inline" /><path
+       d="m 477.5,238.4 -3.3,35 c 0,0 77,153.4 67.4,182.5 -7,21.1 -44.9,23.8 -57.3,37.7 -10.4,11.6 12.8,35.6 19,36.8 24,4.7 92.3,-49.5 94.3,-69.5 C 599.7,441 477.5,238.4 477.5,238.4 z"
+       id="path3920"
+       style="fill:#3a3a3a;display:inline" /></g><g
+     id="Layer_8"
+     style="display:none"><path
+       d="m 405.7,68.3 c -15.9,-8 -33.6,-9 -51.8,-9 -22.2,0 -47.2,3 -64.8,16.3 -27.5,20.8 -44.3,57.4 -48.8,90.9 1.9,14.9 6.5,28.3 16.8,40.1 10.8,12.4 42.8,18.8 42.8,20.8 0,14.1 21.4,25.5 47.9,25.5 26.4,0 47.9,-11.4 47.9,-25.5 0,-1.9 42.5,-3 55.5,-14.8 12.8,-11.7 18.5,-34.1 20.7,-55.7 -6.1,-36 -32,-71.4 -66.2,-88.6 z"
+       id="path3923"
+       style="fill:#ffffff;display:inline" /><path
+       d="m 315.5,143 c -10.5,1 -15.5,13.5 -25,32.5 -9.5,19 6.5,26 12.5,23 6,-3 19.8,-30.5 25,-36 1.3,-3.2 -2,-20.5 -12.5,-19.5 z"
+       id="path3925"
+       style="fill:#333333;display:inline" /><path
+       d="m 384.3,141 c 10.5,1 15.5,13.5 25,32.5 9.5,19 -6.5,26 -12.5,23 -6,-3 -19.8,-30.5 -25,-36 -1.2,-3.2 2,-20.5 12.5,-19.5 z"
+       id="path3927"
+       style="fill:#333333;display:inline" /><path
+       d="m 323.5,216.8 c 0,-8 13.5,-9.3 22.8,-9.3 13,0 25.3,4 25.3,9.3 0,5.3 -20,17.5 -24,17.5 -4.1,0 -24.1,-9.5 -24.1,-17.5 z"
+       id="path3929"
+       style="fill:#222222;display:inline" /><path
+       d="m 348,242.3 c 0,0 -19,7.9 -43.2,-3.3 0,2.5 21.2,13.8 43.2,13.8 22,0 43.2,-11.3 43.2,-13.8 -24.2,11.3 -43.2,3.3 -43.2,3.3 z"
+       id="path3931"
+       style="fill:#333333;display:inline" /><path
+       d="m 285.7,80.3 c -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 3.8,3.8 17,20.6 17,20.6 0,0 41,-53.2 39,-60.6 z"
+       id="path3933"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 407,73 c 0,0 12.4,-23.5 23.7,-29.7 42.3,5 34.7,58.3 35.3,66 -3.3,3.3 -13.7,6.3 -13.7,6.3 L 407,73 z"
+       id="path3935"
+       style="fill:#2a2a2a;display:inline" /><path
+       d="m 347.5,223.3 c 2.8,0 13.7,-6.1 19.8,-11.6 -4.7,-2.6 -12.7,-4.2 -21,-4.2 -6.6,0 -15.5,0.6 -19.9,4 5.6,6.2 18,11.8 21.1,11.8 z"
+       id="path3937"
+       style="fill:#333333;display:inline" /><path
+       d="m 277.6,97.4 c 5.1,-8.1 8.6,-14.8 8,-17.1 -13,-7 -24.8,-30.2 -36.7,-18.3 -11.8,11.8 -23.1,54.5 -19.3,58.3 1.1,1.1 3,3.3 5.1,5.9 3.7,-14 10.3,-31.3 17.2,-38.2 8.5,-8.4 16.9,0.9 25.7,9.4 z"
+       id="path3939"
+       style="fill:#333333;display:inline" /><path
+       d="M 430.7,43.3 C 419.4,49.5 407,73 407,73 l 4.3,4.1 c 3.6,-4.5 7.5,-8.6 11.4,-10.7 28.6,3.4 34.4,28.9 35.3,47.4 3,-1.2 6.4,-2.7 8,-4.4 -0.7,-7.7 7,-61.1 -35.3,-66.1 z"
+       id="path3941"
+       style="fill:#333333;display:inline" /></g><g
+     id="Layer_9"
+     style="display:none"><path
+       d="m 275,371.3 c 0,0 0.7,-62.8 42.3,-81.6 -3.4,59.9 -42.3,81.6 -42.3,81.6 z"
+       id="path3944"
+       style="fill:#689f38;display:inline" /><path
+       d="m 552.3,424 -4.7,5.3 c 0,0 -95.3,-149.7 -233.3,-135 -2,-1.9 -2.9,-3.3 -2.7,-4.2 C 452.3,264.7 552.3,424 552.3,424 z"
+       id="path3946"
+       style="fill:#689f38;display:inline" /><path
+       d="m 184.3,266 c 0,0 91.3,-12.7 131.3,25.3 C 227.7,300.7 184.3,266 184.3,266 z"
+       id="path3948"
+       style="fill:#689f38;display:inline" /><path
+       d="m 267.6,218.8 c 0,0 49.6,33.4 47.2,73.3 -46.2,-33.9 -47.2,-73.3 -47.2,-73.3 z"
+       id="path3950"
+       style="fill:#689f38;display:inline" /><path
+       d="m 311.7,290.2 c -62,21.8 -81.7,77.4 -81.7,77.4 0,0 -0.2,-2.4 5,2.7 28.3,-50.7 79.4,-78 79.4,-78 0,0 6.8,-2.1 -2.7,-2.1 z"
+       id="path3952"
+       style="fill:#689f38;display:inline" /><g
+       id="g3954"
+       style="display:inline"><path
+         d="m 254.8,430.3 c 0,0 -34.3,-35.8 -21.3,-69.4 31.2,35.7 21.3,69.4 21.3,69.4 z"
+         id="path3956"
+         style="fill:#689f38" /></g><path
+       d="m 159.4,416.3 c 0,0 32.1,-54 77.5,-49.4 -33,50.1 -77.5,49.4 -77.5,49.4 z"
+       id="path3958"
+       style="fill:#689f38;display:inline" /><g
+       id="g3960"
+       style="display:inline"><path
+         d="m 171.2,353.2 c 0,0 45,-11 66,15.3 -43.5,8.5 -66,-15.3 -66,-15.3 z"
+         id="path3962"
+         style="fill:#689f38" /></g><path
+       d="m 271.2,227.7 c 3.1,13.1 12.5,37 40.3,59.3 -3.5,-26.9 -28.3,-49.7 -40.3,-59.3 z"
+       id="path3964"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 305.3,287.9 c -33.2,-25 -86,-24.1 -110.2,-22 17.9,10.8 54.6,26.6 110.2,22 z"
+       id="path3966"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 315.3,292.9 c -27.9,19.7 -36.6,54.4 -39.3,73.4 14.3,-12.2 33.9,-35.4 39.3,-73.4 z"
+       id="path3968"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.6,366.6 c -16.3,-15.6 -42.4,-14.4 -55,-12.6 7.8,5.8 26.3,16.2 55,12.6 z"
+       id="path3970"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.7,365.9 c -29.2,3.1 -51.6,28.8 -61.2,41.8 14.5,-3.1 39.7,-12.6 61.2,-41.8 z"
+       id="path3972"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 302,383.6 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path3974"
+       style="fill:#689f38;display:inline" /><path
+       d="m 305,386.6 c 0,0 0.1,-0.2 0.2,-0.5 -0.2,0.2 -0.2,0.5 -0.2,0.5 z"
+       id="path3976"
+       style="fill:#689f38;display:inline" /><path
+       d="m 311.1,289.9 c -51.7,20.7 -77.9,66.2 -81.5,75.1 0.4,0.4 4.4,2.9 4.9,3.4 11.1,-36.3 48.6,-64.2 77.6,-76.7 0.1,-1.2 -0.3,-2.2 -1,-1.8 z"
+       id="path3978"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 233.4,366 c -4.5,22.4 9.4,44.6 17.6,55.5 1,-11.1 -0.2,-32.5 -17.6,-55.5 z"
+       id="path3980"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 235.1,373.2 c -3,14.6 6.1,29.1 11.5,36.2 0.7,-7.2 -0.1,-21.1 -11.5,-36.2 z"
+       id="path3982"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 225.4,370.2 c -17.1,1.8 -30.3,16.9 -35.9,24.5 8.5,-1.8 23.3,-7.4 35.9,-24.5 z"
+       id="path3984"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 227.8,364.6 c -8.8,-8.4 -22.9,-7.7 -29.7,-6.8 4.2,3.1 14.2,8.8 29.7,6.8 z"
+       id="path3986"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 309.5,302 c -11.5,9.3 -15.1,25.6 -16.2,34.5 5.9,-5.7 14,-16.6 16.2,-34.5 z"
+       id="path3988"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 292.3,283.5 c -18.3,-11.8 -47.2,-11.3 -60.6,-10.3 9.9,5.1 30,12.5 60.6,10.3 z"
+       id="path3990"
+       style="fill:#a9d86c;display:inline" /><path
+       d="m 548.8,428.7 2.1,-2.3 C 542.3,413.1 446.4,270.6 311.1,289.9 c 0.3,0.3 0.7,1.5 1,1.8 141.2,-13.1 236.7,137 236.7,137 z"
+       id="path3992"
+       style="fill:#8bc34a;display:inline" /><path
+       d="m 281.6,243.5 c 1.9,8 7.7,22.8 24.8,36.5 -2.1,-16.6 -17.3,-30.6 -24.8,-36.5 z"
+       id="path3994"
+       style="fill:#a9d86c;display:inline" /></g><g
+     id="Layer_7"><path
+       d="m 472.3,0.2 h -225 C 110.6,0.2 -0.2,111.1 -0.2,247.7 v 225 c 0,136.7 110.8,247.5 247.5,247.5 h 225 c 136.7,0 247.5,-110.8 247.5,-247.5 v -225 C 719.8,111.1 609,0.2 472.3,0.2 z"
+       id="path3997"
+       style="fill:#0288d1" /><path
+       d="m 215.1,383.4 c 0,0 -185.3,225.4 138.4,216.9 C 603.2,593.8 552.7,488.1 549.9,464.7 533.1,427.3 476,383.3 476,383.3 c 0,0 -41.3,-28 -123,-29 -45.4,-6.4 -75.6,9.3 -137.9,29.1 z"
+       id="path3999"
+       style="fill:#eeeeee" /><path
+       d="M 351.6,531.1 C 487.1,527.5 534.2,494.8 548.5,461.8 530.2,425.1 476,383.3 476,383.3 c 0,0 -41.3,-28 -123,-29 -45.3,-6.5 -75.5,9.2 -137.9,29 0,0 -33.9,41.2 -47.4,87.8 17.2,36 67.8,63.1 183.9,60 z"
+       id="path4001"
+       style="fill:#ffffff" /><g
+       id="g4003"><path
+         d="m 159.3,500.9 c 0,-6.2 25.9,-45.2 91.3,0 65.4,45.2 57,69.6 57,69.6 0,0 -19.6,25.1 17.8,47.6 9.4,31.8 -12.8,56.7 -38.3,59.8 -67.9,8.3 -144.7,-103.5 -127.8,-177 z"
+         id="path4005"
+         style="fill:#222222" /><path
+         d="m 324.9,648.1 c -24.6,2.8 -50.4,-10.1 -72.4,-31.3 -15.6,-30.8 -23.1,-65 -16.6,-93.4 0,-3 6.1,-13.7 19.8,-18.8 -1.7,-1.2 -3.4,-2.4 -5.1,-3.6 -24,-16.6 -42.7,-21.8 -56.8,-21.5 0,0 -0.1,0 -0.1,0 -2.3,0.1 -4.5,0.3 -6.5,0.6 0,0 0,0 -0.1,0 -6.9,1.1 -12.4,3.7 -16.7,6.6 0,0 0,0 0,0 -1.3,0.9 -2.4,1.8 -3.4,2.7 0,0 0,0 0,0 -0.3,0.3 -0.7,0.6 -1,0.9 l 0,0 c -0.6,0.6 -1.2,1.2 -1.8,1.9 0,0 0,0 -0.1,0.1 -0.2,0.3 -0.5,0.6 -0.7,0.8 0,0 0,0.1 -0.1,0.1 -0.5,0.6 -0.9,1.2 -1.3,1.7 0,0 0,0.1 -0.1,0 [...]
+         id="path4007"
+         style="fill:#2a2a2a" /><path
+         d="m 186.4,485.9 c 0,-1.2 0.9,-3.5 2.9,-6.3 -20.9,2.4 -30,17.5 -30,21.2 -16.9,73.5 60,185.3 127.8,177 11.1,-1.4 21.6,-6.9 29.1,-15.3 -0.7,0.1 -1.3,0.2 -2,0.3 -67.9,8.4 -144.7,-103.4 -127.8,-176.9 z"
+         id="path4009"
+         style="fill:#333333" /></g><path
+       d="m 500.2,462.9 c -16.8,90.7 -47.7,94.4 -50.9,138.6 101.4,139.1 194.9,-133 50.9,-138.6 z"
+       id="path4011"
+       style="fill:#3a3a3a" /><path
+       d="m 506.5,463.3 c -2,-0.2 -4.1,-0.3 -6.2,-0.4 -16.8,90.7 -47.7,94.4 -50.9,138.6 4.2,5.7 8.3,10.7 12.5,15.1 52.9,-3.9 84.8,-105.2 44.6,-153.3 z"
+       id="path4013"
+       style="fill:#2a2a2a" /><path
+       d="m 463.3,251 c 0,-0.2 0,-0.4 0,-0.7 0,0.1 -0.1,0.3 -0.1,0.4 -4,-4.8 -9.9,-6.6 -9.9,-6.6 L 264,249.7 c 0,0 -11.4,15.4 -18.1,19.9 -6.7,4.6 0,128.4 0,128.4 0,0 112.3,-38 188.3,0 C 501,350.7 465,253.1 463.3,251 z"
+       id="path4015"
+       style="fill:#222222" /><path
+       d="m 461.5,251 c 0,0 0,-0.4 0,-0.7 0,0.1 -0.1,0.3 -0.1,0.4 -4.1,-4.7 0.1,0.3 0.1,0.3 0,0 -0.5,132.1 -31.7,143.3 5.3,5.3 24.4,16.2 35,39.9 10.6,23.7 -8.2,49.2 -7.6,59.8 0.6,10.6 12.5,32.4 31.8,38 19.3,5.6 82.9,-24.9 86.6,-72.9 C 562.7,414.8 461.5,251 461.5,251 z"
+       id="path4017"
+       style="fill:#2a2a2a" /><path
+       d="m 244,269.6 c 0,0 -16.2,5 -20.6,38 -4.4,33 -28.7,64.2 -36.2,95.4 -7.5,31.2 131.5,63 142.8,43.6 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 -2.5,-6.8 -70.4,5 -84.2,13.7 -13.7,8.7 -53,69.2 -53,69.2 0,0 15.6,-30.8 12.5,-58.1 C 275.8,294.5 244,269.6 244,269.6 z"
+       id="path4019"
+       style="fill:#2a2a2a" /><path
+       d="m 257.1,382.5 c -32.7,-8.7 -4.2,-103.5 -4,-104.7 -9.3,-11.7 -9.1,-8.2 -9.1,-8.2 0,0 -16.2,5 -20.6,38 -4.4,33 -28.7,64.2 -36.2,95.4 -7.5,31.2 131.5,63 142.8,43.6 1.6,-2.8 21.3,-63.5 22.9,-67.1 -44.1,-3.9 -73.6,8.8 -95.8,3 z"
+       id="path4021"
+       style="fill:#3a3a3a" /><path
+       d="m 459.1,189.2 c 0,25 -3.6,60.6 -20.6,76.1 -19.6,17.9 -59.5,5.6 -91.2,5.6 -34,0 -70.7,11.4 -90.2,-11.2 -14.4,-16.6 -16.8,-36.4 -16.8,-59.2 0,-34.9 16.4,-78.7 46.8,-101.6 16.5,-12.4 39.9,-15.3 60.6,-15.3 17,0 33.6,1 48.5,8.4 36.5,18.3 62.9,58.9 62.9,97.2 z"
+       id="path4023"
+       style="fill:#eeeeee" /><path
+       d="m 583.8,85.3 c -4,-4.8 0.2,0.2 0.2,0.2 0,0 0,-0.4 0,-0.7 -0.1,0.2 -0.2,0.3 -0.2,0.5 z"
+       id="path4025"
+       style="fill:#2a2a2a" /><path
+       d="m 553.9,90 c -4,-4.8 0.2,0.2 0.2,0.2 0,0 0,-0.4 0,-0.7 -0.1,0.2 -0.2,0.3 -0.2,0.5 z"
+       id="path4027"
+       style="fill:#2a2a2a" /><path
+       d="m 488.1,488.4 c -0.6,-10.6 18.2,-36.2 7.6,-59.8 -10.6,-23.6 -51.7,-51 -51.7,-51 l -13.3,15.8 c 0,0 24.4,16.2 35,39.9 10.6,23.7 -8.2,49.2 -7.6,59.8 0.6,10.6 12.5,32.4 31.8,38 6.2,1.8 16.9,-0.1 28.7,-5.1 -18.6,-6.1 -29.9,-27.2 -30.5,-37.6 z"
+       id="path4029"
+       style="fill:#222222" /><path
+       d="m 463.3,251 -3,32.7 c 0,0 72,143.4 63,170.7 -6.5,19.8 -42,22.3 -53.6,35.3 -9.7,10.8 12,33.3 17.8,34.5 22.4,4.4 86.3,-46.3 88.2,-65 C 577.5,440.4 463.3,251 463.3,251 z"
+       id="path4031"
+       style="fill:#3a3a3a" /><path
+       d="m 396.1,92 c -14.8,-7.4 -31.4,-8.4 -48.5,-8.4 -20.7,0 -44.1,2.8 -60.6,15.3 -25.7,19.4 -41.4,53.7 -45.6,85 1.8,13.9 6.1,26.4 15.7,37.5 10.1,11.6 40,17.6 40,19.5 0,13.2 20,23.8 44.8,23.8 24.7,0 44.8,-10.7 44.8,-23.8 0,-1.8 39.7,-2.8 51.9,-13.9 12,-10.9 17.3,-31.9 19.4,-52 -5.6,-33.8 -29.9,-67 -61.9,-83 z"
+       id="path4033"
+       style="fill:#ffffff" /><path
+       d="m 311.8,161.8 c -9.8,0.9 -14.5,12.6 -23.4,30.4 -8.9,17.8 6.1,24.3 11.7,21.5 5.6,-2.8 18.5,-28.5 23.4,-33.7 1.2,-3 -1.8,-19.2 -11.7,-18.2 z"
+       id="path4035"
+       style="fill:#333333" /><path
+       d="m 376.2,159.9 c 9.8,0.9 14.5,12.6 23.4,30.4 8.9,17.8 -6.1,24.3 -11.7,21.5 -5.6,-2.8 -18.5,-28.5 -23.4,-33.7 -1.2,-3 1.9,-19.1 11.7,-18.2 z"
+       id="path4037"
+       style="fill:#333333" /><path
+       d="m 319.3,230.7 c 0,-7.5 12.6,-8.6 21.3,-8.6 12.2,0 23.7,3.7 23.7,8.6 0,4.9 -18.7,16.4 -22.5,16.4 -3.8,0 -22.5,-8.9 -22.5,-16.4 z"
+       id="path4039"
+       style="fill:#222222" /><path
+       d="m 342.2,254.7 c 0,0 -17.8,7.4 -40.4,-3.1 0,2.3 19.8,12.9 40.4,12.9 20.6,0 40.4,-10.5 40.4,-12.9 -22.6,10.5 -40.4,3.1 -40.4,3.1 z"
+       id="path4041"
+       style="fill:#333333" /><path
+       d="M 283.9,103.2 C 271.8,96.6 260.7,75 249.7,86 c -11.1,11.1 -21.6,51 -18.1,54.5 3.5,3.5 15.9,19.3 15.9,19.3 0,0 38.3,-49.8 36.4,-56.6 z"
+       id="path4043"
+       style="fill:#2a2a2a" /><path
+       d="m 397.4,96.3 c 0,0 11.6,-22 22.1,-27.7 39.6,4.7 32.4,54.5 33,61.7 -3,3 -12.8,5.9 -12.8,5.9 L 397.4,96.3 z"
+       id="path4045"
+       style="fill:#2a2a2a" /><path
+       d="m 341.8,236.8 c 2.7,0 12.8,-5.7 18.5,-10.8 -4.4,-2.4 -11.9,-3.9 -19.7,-3.9 -6.2,0 -14.5,0.6 -18.6,3.7 5.2,5.8 16.9,11 19.8,11 z"
+       id="path4047"
+       style="fill:#333333" /><path
+       d="m 276.4,119.2 c 4.8,-7.6 8.1,-13.9 7.5,-16 C 271.8,96.6 260.7,75 249.7,86 c -11.1,11.1 -21.6,51 -18.1,54.5 1,1 2.8,3.1 4.8,5.5 3.4,-13.1 9.7,-29.3 16.1,-35.7 7.8,-7.8 15.7,0.9 23.9,8.9 z"
+       id="path4049"
+       style="fill:#333333" /><path
+       d="M 419.5,68.6 C 409,74.4 397.4,96.3 397.4,96.3 l 4,3.8 c 3.3,-4.2 7,-8.1 10.6,-10 26.8,3.2 32.2,27 33,44.3 2.8,-1.1 6,-2.6 7.5,-4.1 -0.6,-7.2 6.6,-57 -33,-61.7 z"
+       id="path4051"
+       style="fill:#333333" /><path
+       d="m 229.1,372.5 c 0,0 0.7,-58.7 39.6,-76.3 -3.2,56 -39.6,76.3 -39.6,76.3 z"
+       id="path4053"
+       style="fill:#689f38" /><path
+       d="m 488.4,421.7 -4.4,5 c 0,0 -89.1,-139.9 -218.2,-126.3 -1.8,-1.8 -2.7,-3.1 -2.5,-4 131.6,-23.7 225.1,125.3 225.1,125.3 z"
+       id="path4055"
+       style="fill:#689f38" /><path
+       d="m 144.3,274 c 0,0 85.4,-11.8 122.8,23.7 C 184.8,306.4 144.3,274 144.3,274 z"
+       id="path4057"
+       style="fill:#689f38" /><path
+       d="m 222.1,229.8 c 0,0 46.4,31.2 44.1,68.5 -43.1,-31.6 -44.1,-68.5 -44.1,-68.5 z"
+       id="path4059"
+       style="fill:#689f38" /><path
+       d="m 225.5,238.2 c 2.9,12.2 11.7,34.6 37.7,55.4 -3.3,-25.1 -26.4,-46.4 -37.7,-55.4 z"
+       id="path4061"
+       style="fill:#8bc34a" /><path
+       d="M 257.4,294.5 C 226.3,271.1 177,272 154.3,273.9 c 16.8,10.1 51.1,24.9 103.1,20.6 z"
+       id="path4063"
+       style="fill:#8bc34a" /><path
+       d="m 266.8,299.2 c -26.1,18.4 -34.2,50.8 -36.8,68.6 13.4,-11.5 31.7,-33.2 36.8,-68.6 z"
+       id="path4065"
+       style="fill:#8bc34a" /><path
+       d="m 254.3,383.9 c 0,0 0.1,-0.2 0.2,-0.4 -0.2,0.1 -0.2,0.4 -0.2,0.4 z"
+       id="path4067"
+       style="fill:#689f38" /><path
+       d="m 257.1,386.7 c 0,0 0.1,-0.2 0.2,-0.4 -0.2,0.1 -0.2,0.4 -0.2,0.4 z"
+       id="path4069"
+       style="fill:#689f38" /><path
+       d="m 261.3,307.6 c -10.8,8.7 -14.1,23.9 -15.2,32.3 5.6,-5.3 13.1,-15.5 15.2,-32.3 z"
+       id="path4071"
+       style="fill:#a9d86c" /><path
+       d="m 245.2,290.4 c -17.1,-11 -44.2,-10.6 -56.6,-9.7 9.2,4.8 28.1,11.7 56.6,9.7 z"
+       id="path4073"
+       style="fill:#a9d86c" /><path
+       d="m 235.3,252.9 c 1.8,7.5 7.2,21.3 23.2,34.1 -2,-15.4 -16.3,-28.5 -23.2,-34.1 z"
+       id="path4075"
+       style="fill:#a9d86c" /><path
+       d="m 485.1,426.1 2,-2.2 C 479,411.4 389.4,278.2 262.9,296.3 c 0.2,0.3 0.7,1.4 1,1.7 131.9,-12.2 221.2,128.1 221.2,128.1 z"
+       id="path4077"
+       style="fill:#8bc34a" /><path
+       d="m 232.3,437.8 c 39.4,13.8 91.1,20.3 97.8,8.8 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 -2.5,-6.8 -70.4,5 -84.2,13.7 -13.7,8.8 -69.4,94.7 -87.2,127.1 z"
+       id="path4079"
+       style="fill:#3a3a3a" /><path
+       d="m 403.6,297.1 c -0.9,-2.6 -11.1,-2.5 -24.2,-1 -2.7,6.5 -5.4,12 -7.6,14.4 -6.9,7.5 -33,18.1 -33.4,26.8 -0.3,8.7 -12.2,51.7 -23.4,71.1 -8.3,14.2 -85.9,0.7 -123.2,-19.8 -1.8,4.9 -3.4,9.7 -4.6,14.5 -7.5,31.2 131.5,63 142.8,43.6 11.2,-19.3 23.1,-62.3 23.4,-71.1 0.3,-8.7 26.5,-19.3 33.4,-26.8 6.9,-7.5 19.3,-44.9 16.8,-51.7 z"
+       id="path4081"
+       style="fill:#333333" /><g
+       id="g4083"><path
+         d="m 210.2,427.6 c 0,0 -32.1,-33.5 -19.9,-64.9 29.2,33.4 19.9,64.9 19.9,64.9 z"
+         id="path4085"
+         style="fill:#689f38" /></g><path
+       d="m 190.2,367.5 c -4.2,20.9 8.7,41.7 16.5,51.9 0.9,-10.4 -0.2,-30.4 -16.5,-51.9 z"
+       id="path4087"
+       style="fill:#8bc34a" /><path
+       d="m 191.8,374.3 c -2.8,13.7 5.7,27.3 10.8,33.9 0.5,-6.8 -0.2,-19.9 -10.8,-33.9 z"
+       id="path4089"
+       style="fill:#a9d86c" /><g
+       id="g4091"><path
+         d="m 132,355.6 c 0,0 42.1,-10.3 61.7,14.3 -40.6,7.9 -61.7,-14.3 -61.7,-14.3 z"
+         id="path4093"
+         style="fill:#689f38" /></g><path
+       d="m 190.3,368 c -15.2,-14.5 -39.6,-13.4 -51.5,-11.8 7.4,5.5 24.8,15.3 51.5,11.8 z"
+       id="path4095"
+       style="fill:#8bc34a" /><path
+       d="m 184.9,366.2 c -8.2,-7.8 -21.4,-7.2 -27.8,-6.4 4,3 13.4,8.2 27.8,6.4 z"
+       id="path4097"
+       style="fill:#a9d86c" /><path
+       d="M 263.4,296.6 C 205.4,317 187,369 187,369 c 0,0 -0.2,-2.3 4.7,2.6 26.5,-47.4 74.2,-73 74.2,-73 0,0 6.3,-2 -2.5,-2 z"
+       id="path4099"
+       style="fill:#689f38" /><path
+       d="m 262.9,296.3 c -48.3,19.3 -72.8,61.9 -76.2,70.2 0.4,0.4 4.1,2.7 4.6,3.2 10.3,-33.9 45.5,-60.1 72.6,-71.7 -0.1,-1.1 -0.4,-2.1 -1,-1.7 z"
+       id="path4101"
+       style="fill:#8bc34a" /><path
+       d="m 120.9,414.5 c 0,0 30,-50.5 72.5,-46.2 -30.8,46.9 -72.5,46.2 -72.5,46.2 z"
+       id="path4103"
+       style="fill:#689f38" /><path
+       d="m 190.4,367.4 c -27.3,2.9 -48.3,26.9 -57.2,39.1 13.6,-2.9 37.1,-11.8 57.2,-39.1 z"
+       id="path4105"
+       style="fill:#8bc34a" /><path
+       d="m 182.7,371.5 c -16,1.7 -28.3,15.8 -33.6,22.9 8,-1.7 21.8,-7 33.6,-22.9 z"
+       id="path4107"
+       style="fill:#a9d86c" /></g></svg>
\ No newline at end of file
diff --git a/panda/appengine-server/app.yaml b/panda/appengine-server/app.yaml
new file mode 100644
index 0000000..1e70eca
--- /dev/null
+++ b/panda/appengine-server/app.yaml
@@ -0,0 +1,8 @@
+application: panda-key-exchange
+version: 2
+runtime: go
+api_version: go1
+
+handlers:
+- url: /.*
+  script: _go_app
diff --git a/panda/appengine-server/panda/main.go b/panda/appengine-server/panda/main.go
new file mode 100644
index 0000000..652748f
--- /dev/null
+++ b/panda/appengine-server/panda/main.go
@@ -0,0 +1,168 @@
+package panda
+
+import (
+	"bytes"
+	"crypto/rand"
+	"encoding/hex"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"net/http"
+	"os"
+	"strconv"
+	"strings"
+	"time"
+
+	"appengine"
+	"appengine/datastore"
+)
+
+func init() {
+	http.HandleFunc("/exchange/", Exchange)
+}
+
+const bodyLimit = 1<<17
+const defaultLifetime = 5 * 24 * time.Hour
+
+type Posting struct {
+	Time time.Time
+	A, B []byte
+}
+
+func (p Posting) Expired() bool {
+	return p.Time.Add(defaultLifetime).Before(time.Now())
+}
+
+func Exchange(w http.ResponseWriter, r *http.Request) {
+	if r.Method != "POST" {
+		http.Error(w, "Bad method", 405)
+		return
+	}
+
+	if !strings.HasPrefix(r.URL.Path, "/exchange/") {
+		http.Error(w, "Bad URL path", 500)
+		return
+	}
+
+	tagHex := r.URL.Path[10:]
+	tag, err := hex.DecodeString(tagHex)
+	if err != nil || len(tag) != 32 {
+		http.Error(w, "Malformed tag", 400)
+		return
+	}
+
+	input := &io.LimitedReader{R: r.Body, N: bodyLimit + 1}
+	body, err := ioutil.ReadAll(input)
+	r.Body.Close()
+	if err != nil {
+		http.Error(w, "Error reading body", 400)
+		return
+	}
+	if len(body) == 0 {
+		http.Error(w, "Empty body", 400)
+		return
+	}
+	if len(body) > bodyLimit {
+		http.Error(w, "Body too large", 413)
+		return
+	}
+
+	c := appengine.NewContext(r)
+	dsKey := datastore.NewKey(c, "Posting", hex.EncodeToString(tag), 0, nil)
+	var other []byte
+	var contended bool
+	var created bool
+	err = datastore.RunInTransaction(c, func(c appengine.Context) error {
+		var p Posting
+		err := datastore.Get(c, dsKey, &p)
+		if err == datastore.ErrNoSuchEntity || err == nil && p.Expired() {
+			// The posting is new or has expired.
+			p = Posting{
+				Time: time.Now(),
+				A:    body,
+			}
+			_, err := datastore.Put(c, dsKey, &p)
+			created = true
+			return err
+		}
+		if err != nil {
+			return err
+		}
+		if len(p.B) > 0 {
+			if bytes.Equal(p.A, body) {
+				other = p.B
+			} else if bytes.Equal(p.B, body) {
+				other = p.A
+			} else {
+				contended = true
+			}
+			return nil
+		}
+		if bytes.Equal(p.A, body) {
+			return nil
+		}
+		p.B = body
+		other = p.A
+		_, err = datastore.Put(c, dsKey, &p)
+		return err
+	}, nil)
+
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error from transaction: %s\n", err)
+		http.Error(w, "Internal error", 500)
+		return
+	}
+
+	if created {
+		maybeGarbageCollect(c)
+	}
+
+	if contended {
+		http.Error(w, "Tag collision", 409)
+		return
+	}
+
+	if len(other) == 0 {
+		http.Error(w, "Request recorded", 204)
+		return
+	}
+
+	w.Header().Set("Content-Type", "application/binary")
+	w.Header().Set("Content-Length", strconv.Itoa(len(other)))
+	w.Write(other)
+}
+
+func maybeGarbageCollect(c appengine.Context) {
+	var randByte [1]byte
+	_, err := io.ReadFull(rand.Reader, randByte[:])
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error reading random byte: %s\n", err)
+		return
+	}
+
+	if randByte[0] >= 2 {
+		return
+	}
+
+	// Every one in 128 insertions we'll clean out expired postings.
+	q := datastore.NewQuery("Posting").Order("-Time").Limit(256)
+	var toDelete []*datastore.Key
+	for t := q.Run(c); ; {
+		var p Posting
+		key, err := t.Next(&p)
+		if err == datastore.Done {
+			break
+		}
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "Error from query: %s\n", err)
+			break
+		}
+		if !p.Expired() {
+			break
+		}
+		toDelete = append(toDelete, key)
+	}
+	if err := datastore.DeleteMulti(c, toDelete); err != nil {
+		fmt.Fprintf(os.Stderr, "Error from multi-delete: %s\n", err)
+	}
+}
diff --git a/panda/appengine.go b/panda/appengine.go
new file mode 100644
index 0000000..87d476c
--- /dev/null
+++ b/panda/appengine.go
@@ -0,0 +1,141 @@
+package panda
+
+import (
+	"bufio"
+	"bytes"
+	"crypto/tls"
+	"encoding/hex"
+	"errors"
+	"io"
+	"io/ioutil"
+	"net"
+	"net/http"
+	"net/url"
+	"strings"
+	"time"
+
+	"golang.org/x/net/proxy"
+)
+
+type HTTPMeetingPlace struct {
+	TorAddress string
+	URL        string
+}
+
+const payloadBytes = 1 << 15
+
+func (hmp *HTTPMeetingPlace) Padding() int {
+	return payloadBytes
+}
+
+func (hmp *HTTPMeetingPlace) attemptExchange(log func(string, ...interface{}), id, message []byte) (*http.Response, []byte, error) {
+	serverURL, err := url.Parse(hmp.URL)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	dialer, err := proxy.SOCKS5("tcp", hmp.TorAddress, nil, proxy.Direct)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	host := serverURL.Host
+	if strings.IndexRune(host, ':') == -1 {
+		if serverURL.Scheme == "https" {
+			host += ":443"
+		} else {
+			host += ":80"
+		}
+	}
+	hostname, _, err := net.SplitHostPort(host)
+	if err != nil {
+		return nil, nil, err
+	}
+	log("Connecting to %s via Tor", host)
+	rawConn, err := dialer.Dial("tcp", host)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	var conn net.Conn
+	if serverURL.Scheme == "https" {
+		tlsConn := tls.Client(rawConn, &tls.Config{
+			ServerName: hostname,
+		})
+		log("Starting TLS handshake with %s", host)
+		if err := tlsConn.Handshake(); err != nil {
+			rawConn.Close()
+			log("TLS handshake to %s failed: %s", host, err)
+			return nil, nil, err
+		}
+		conn = tlsConn
+	} else {
+		conn = rawConn
+	}
+	defer conn.Close()
+
+	body := bytes.NewReader(message)
+	request, err := http.NewRequest("POST", hmp.URL+"/"+hex.EncodeToString(id), body)
+	if err != nil {
+		return nil, nil, err
+	}
+
+	request.ContentLength = int64(len(message))
+	request.Header.Add("Content-Type", "application/octet-stream")
+
+	request.Write(conn)
+	log("Request sent to %s. Awaiting reply", host)
+
+	response, err := http.ReadResponse(bufio.NewReader(conn), request)
+
+	if err != nil {
+		return nil, nil, err
+	}
+
+	var responseBody []byte
+	if response.Body != nil {
+		r := &io.LimitedReader{R: response.Body, N: payloadBytes + 1}
+		responseBody, err = ioutil.ReadAll(r)
+	}
+
+	return response, responseBody, err
+}
+
+func (hmp *HTTPMeetingPlace) Exchange(log func(string, ...interface{}), id, message []byte, shutdown chan struct{}) ([]byte, error) {
+	delay := 15 * time.Second
+	for {
+		response, body, err := hmp.attemptExchange(log, id, message)
+		if err != nil {
+			log("PANDA exchange failed. Will try again in %s: %s", delay, err)
+			goto Sleep
+		}
+
+		switch response.StatusCode {
+		case 409:
+			return nil, errors.New("The transaction failed because this key has been used recently by two other parties")
+		case 204:
+			log("PANDA exchange waiting for other party. Will try again in %s", delay)
+			goto Sleep
+		case 200:
+			if len(body) > payloadBytes {
+				return nil, errors.New("Reply from server is too large")
+			}
+			return body, nil
+		default:
+			log("Request resulted in unexpected HTTP status %d. Will try again in %s", response.StatusCode, delay)
+		}
+
+	Sleep:
+		select {
+		case <-shutdown:
+			return nil, ShutdownErr
+		case <-time.After(delay):
+			delay *= 2
+			if delay > time.Hour {
+				delay = time.Hour
+			}
+		}
+	}
+
+	panic("unreachable")
+}
diff --git a/panda/card.go b/panda/card.go
new file mode 100644
index 0000000..f340683
--- /dev/null
+++ b/panda/card.go
@@ -0,0 +1,191 @@
+package panda
+
+import (
+	"strconv"
+)
+
+// Suit represents one of the four suits in a standard deck of cards.
+type Suit int
+
+const (
+	SuitSpades Suit = iota
+	SuitHearts
+	SuitDimonds
+	SuitClubs
+)
+
+const (
+	maxFace  = 13
+	numCards = 4 * maxFace
+)
+
+// Card represents a playing card (except for the jokers).
+type Card struct {
+	face int
+	suit Suit
+}
+
+// String converts a Card to a two-glyph, string representation where the
+// second glyph is a code-point for the suit.
+func (c Card) String() string {
+	var ret string
+
+	switch c.face {
+	case 1:
+		ret = "A"
+	case 2, 3, 4, 5, 6, 7, 8, 9, 10:
+		ret = strconv.Itoa(c.face)
+	case 11:
+		ret = "J"
+	case 12:
+		ret = "Q"
+	case 13:
+		ret = "K"
+	default:
+		ret = "?"
+	}
+
+	switch c.suit {
+	case SuitSpades:
+		ret += "♠"
+	case SuitHearts:
+		ret += "♥"
+	case SuitDimonds:
+		ret += "♦"
+	case SuitClubs:
+		ret += "♣"
+	}
+
+	return ret
+}
+
+func (c Card) IsRed() bool {
+	return c.suit == SuitDimonds || c.suit == SuitHearts
+}
+
+func (c Card) Number() int {
+	return maxFace*int(c.suit) + (c.face - 1)
+}
+
+// ParseCard parses a card from a simple, two or three character string
+// representation where the first character specifies the face value as one of
+// "a23456789jqk" and the second the suit as one of "shdc". Case is ignored.
+// The 10 is the exception and takes three charactors.
+func ParseCard(s string) (card Card, ok bool) {
+	var suitRune uint8
+
+	switch len(s) {
+	case 2:
+		switch s[0] {
+		case 'a', 'A':
+			card.face = 1
+		case '2', '3', '4', '5', '6', '7', '8', '9':
+			card.face, _ = strconv.Atoi(s[:1])
+		case 'j', 'J':
+			card.face = 11
+		case 'q', 'Q':
+			card.face = 12
+		case 'k', 'K':
+			card.face = 13
+		default:
+			return
+		}
+		suitRune = s[1]
+	case 3:
+		if s[:2] != "10" {
+			return
+		}
+		card.face = 10
+		suitRune = s[2]
+	default:
+		return
+	}
+
+	switch suitRune {
+	case 's', 'S':
+		card.suit = SuitSpades
+	case 'h', 'H':
+		card.suit = SuitHearts
+	case 'd', 'D':
+		card.suit = SuitDimonds
+	case 'c', 'C':
+		card.suit = SuitClubs
+	default:
+		return
+	}
+
+	return card, true
+}
+
+type CardStack struct {
+	NumDecks int
+	counts   [numCards]int32
+	minDecks int32
+}
+
+func (cs *CardStack) Add(c Card) bool {
+	n := c.Number()
+	if cs.counts[n] < int32(cs.NumDecks) {
+		cs.counts[n]++
+		if c := cs.counts[n]; c > cs.minDecks {
+			cs.minDecks = c
+		}
+		return true
+	}
+	return false
+}
+
+func (cs *CardStack) Remove(c Card) bool {
+	n := c.Number()
+	if cs.counts[n] > 0 {
+		cs.counts[n]--
+		if cs.counts[n] == cs.minDecks-1 {
+			// It's possible that, by removing this card, the
+			// minimum number of decks has changed.
+			max := int32(0)
+			for _, c := range cs.counts {
+				if c > max {
+					max = c
+				}
+			}
+			cs.minDecks = max
+		}
+		return true
+	}
+	return false
+}
+
+func (cs *CardStack) MinimumDecks() int {
+	return int(cs.minDecks)
+}
+
+func (cs *CardStack) Canonicalise() *CardStack {
+	// When a stack, consisting of one or more decks, is split in half,
+	// there is a unique canonicalisation, defined as the half with the
+	// majority of the lowest value card. For example, the one of spades is
+	// the lowest value card and so, if the stack consists of a single
+	// deck, then the half with the one of spades is the canonical one. If
+	// the stack contains an even number of decks then it's possible to
+	// have a draw. In this case, the next lowest value card is considered.
+	// If all card values were split evenly between the two halves then the
+	// two halves themselves are equal and so both are canonical.
+
+	numDecks := int32(cs.NumDecks)
+	upperThreshold := numDecks/2 + 1
+	lowerThreshold := numDecks - upperThreshold
+	for _, count := range cs.counts {
+		if count >= upperThreshold {
+			return cs
+		} else if count <= lowerThreshold {
+			ret := &CardStack{
+				NumDecks: cs.NumDecks,
+			}
+			for i, count := range cs.counts {
+				ret.counts[i] = numDecks - count
+			}
+			return ret
+		}
+	}
+
+	return cs
+}
diff --git a/panda/panda.go b/panda/panda.go
new file mode 100644
index 0000000..5e701e7
--- /dev/null
+++ b/panda/panda.go
@@ -0,0 +1,448 @@
+package panda
+
+import (
+	"bytes"
+	"crypto/sha256"
+	"encoding/binary"
+	"encoding/hex"
+	"errors"
+	"io"
+	"os"
+	"os/exec"
+	"runtime"
+	"strconv"
+	"strings"
+	"sync"
+
+	"github.com/agl/pond/panda/rijndael"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/hkdf"
+	"golang.org/x/crypto/nacl/secretbox"
+	"golang.org/x/crypto/scrypt"
+
+	panda_proto "github.com/agl/pond/panda/proto"
+)
+
+const (
+	generatedSecretStringPrefix = "r!"
+	// generatedSecretStringPrefix2 is used to indicate that scrypt should
+	// be skipped because the generated secret is sufficiently random.
+	// These strings are not output, yet, but they are handled. In the
+	// future, the code will start outputting them - although this will
+	// (silently, painfully) break clients that are too old to support
+	// them.
+	generatedSecretStringPrefix2 = "r["
+)
+
+// NewSecretString generates a random, human readable string with a special
+// form that includes a checksum which allows typos to be rejected (so long as
+// the typo isn't in the first two letters).
+func NewSecretString(rand io.Reader) string {
+	b := make([]byte, 16, 18)
+	if _, err := rand.Read(b); err != nil {
+		panic("error reading from rand: " + err.Error())
+	}
+
+	// The use of SHA-256 is overkill, but we already use SHA-256 so it's
+	// more parsimonious than importing a more suitable hash function.
+	h := sha256.New()
+	h.Write(b)
+	digest := h.Sum(nil)
+
+	b = append(b, digest[0], digest[1])
+	return generatedSecretStringPrefix + hex.EncodeToString(b)
+}
+
+// isValidSecretString returns true if s is of the form generated by
+// NewSecretString.
+func isValidSecretString(s string) bool {
+	if !strings.HasPrefix(s, generatedSecretStringPrefix) &&
+		!strings.HasPrefix(s, generatedSecretStringPrefix2) {
+		return false
+	}
+	s = s[len(generatedSecretStringPrefix):]
+
+	var b [18]byte
+	if len(s)%2 == 1 || hex.DecodedLen(len(s)) != len(b) {
+		return false
+	}
+	if _, err := hex.Decode(b[:], []byte(s)); err != nil {
+		return false
+	}
+
+	h := sha256.New()
+	h.Write(b[:16])
+	digest := h.Sum(nil)
+
+	return b[16] == digest[0] && b[17] == digest[1]
+}
+
+// IsAcceptableSecretString returns true if s should be accepted as a secret
+// string. The only strings that will be rejected are those that start with
+// generatedSecretStringPrefix but don't have a matching checksum.
+func IsAcceptableSecretString(s string) bool {
+	if !strings.HasPrefix(s, generatedSecretStringPrefix) &&
+		!strings.HasPrefix(s, generatedSecretStringPrefix2) {
+		return true
+	}
+
+	return isValidSecretString(s)
+}
+
+var ShutdownErr = errors.New("panda: shutdown requested")
+
+type SharedSecret struct {
+	Secret           string
+	Cards            CardStack
+	Day, Month, Year int
+	Hours, Minutes   int
+}
+
+func (s *SharedSecret) isStrongRandom() bool {
+	return strings.HasPrefix(s.Secret, generatedSecretStringPrefix2) && isValidSecretString(s.Secret)
+}
+
+func (s *SharedSecret) toProto() *panda_proto.KeyExchange_SharedSecret {
+	ret := new(panda_proto.KeyExchange_SharedSecret)
+	if len(s.Secret) > 0 {
+		ret.Secret = proto.String(s.Secret)
+	}
+	if s.Cards.NumDecks > 0 {
+		ret.NumDecks = proto.Int32(int32(s.Cards.NumDecks))
+		canonical := s.Cards.Canonicalise()
+		ret.CardCount = canonical.counts[:]
+	}
+	if s.Year != 0 {
+		ret.Time = &panda_proto.KeyExchange_SharedSecret_Time{
+			Day:     proto.Int32(int32(s.Day)),
+			Month:   proto.Int32(int32(s.Month)),
+			Year:    proto.Int32(int32(s.Year)),
+			Hours:   proto.Int32(int32(s.Hours)),
+			Minutes: proto.Int32(int32(s.Minutes)),
+		}
+	}
+
+	return ret
+}
+
+func newSharedSecret(p *panda_proto.KeyExchange_SharedSecret) (*SharedSecret, bool) {
+	ret := &SharedSecret{
+		Secret:  p.GetSecret(),
+		Day:     int(p.Time.GetDay()),
+		Month:   int(p.Time.GetMonth()),
+		Year:    int(p.Time.GetYear()),
+		Hours:   int(p.Time.GetHours()),
+		Minutes: int(p.Time.GetMinutes()),
+	}
+	ret.Cards.NumDecks = int(p.GetNumDecks())
+	if ret.Cards.NumDecks > 0 {
+		if len(p.CardCount) != numCards {
+			return nil, false
+		}
+		copy(ret.Cards.counts[:], p.CardCount)
+	} else {
+		if len(ret.Secret) == 0 {
+			return nil, false
+		}
+	}
+
+	return ret, true
+}
+
+type MeetingPlace interface {
+	Padding() int
+	Exchange(log func(string, ...interface{}), id, message []byte, shutdown chan struct{}) ([]byte, error)
+}
+
+type KeyExchange struct {
+	sync.Mutex
+
+	Log          func(string, ...interface{})
+	Testing      bool
+	ShutdownChan chan struct{}
+
+	rand         io.Reader
+	status       panda_proto.KeyExchange_Status
+	meetingPlace MeetingPlace
+	sharedSecret *SharedSecret
+	serialised   []byte
+	kxBytes      []byte
+
+	key, meeting1, meeting2 [32]byte
+	dhPublic, dhPrivate     [32]byte
+	sharedKey               [32]byte
+	message1, message2      []byte
+}
+
+func NewKeyExchange(rand io.Reader, meetingPlace MeetingPlace, sharedSecret *SharedSecret, kxBytes []byte) (*KeyExchange, error) {
+	if 24 /* nonce */ +4 /* length */ +len(kxBytes)+secretbox.Overhead > meetingPlace.Padding() {
+		return nil, errors.New("panda: key exchange too large for meeting place")
+	}
+
+	kx := &KeyExchange{
+		Log:          func(format string, args ...interface{}) {},
+		rand:         rand,
+		meetingPlace: meetingPlace,
+		status:       panda_proto.KeyExchange_INIT,
+		sharedSecret: sharedSecret,
+		kxBytes:      kxBytes,
+	}
+
+	if _, err := io.ReadFull(kx.rand, kx.dhPrivate[:]); err != nil {
+		return nil, err
+	}
+	curve25519.ScalarBaseMult(&kx.dhPublic, &kx.dhPrivate)
+	kx.updateSerialised()
+
+	return kx, nil
+}
+
+func UnmarshalKeyExchange(rand io.Reader, meetingPlace MeetingPlace, serialised []byte) (*KeyExchange, error) {
+	var p panda_proto.KeyExchange
+	if err := proto.Unmarshal(serialised, &p); err != nil {
+		return nil, err
+	}
+
+	sharedSecret, ok := newSharedSecret(p.SharedSecret)
+	if !ok {
+		return nil, errors.New("panda: invalid shared secret in serialised key exchange")
+	}
+
+	kx := &KeyExchange{
+		rand:         rand,
+		meetingPlace: meetingPlace,
+		status:       p.GetStatus(),
+		sharedSecret: sharedSecret,
+		serialised:   serialised,
+		kxBytes:      p.KeyExchangeBytes,
+		message1:     p.Message1,
+		message2:     p.Message2,
+	}
+
+	copy(kx.key[:], p.Key)
+	copy(kx.meeting1[:], p.Meeting1)
+	copy(kx.meeting2[:], p.Meeting2)
+	copy(kx.sharedKey[:], p.SharedKey)
+	copy(kx.dhPrivate[:], p.DhPrivate)
+	curve25519.ScalarBaseMult(&kx.dhPublic, &kx.dhPrivate)
+
+	return kx, nil
+}
+
+func (kx *KeyExchange) Marshal() []byte {
+	kx.Lock()
+	defer kx.Unlock()
+
+	return kx.serialised
+}
+
+func (kx *KeyExchange) updateSerialised() {
+	p := &panda_proto.KeyExchange{
+		Status:           kx.status.Enum(),
+		SharedSecret:     kx.sharedSecret.toProto(),
+		KeyExchangeBytes: kx.kxBytes,
+	}
+	if kx.status != panda_proto.KeyExchange_INIT {
+		p.DhPrivate = kx.dhPrivate[:]
+		p.Key = kx.key[:]
+		p.Meeting1 = kx.meeting1[:]
+		p.Meeting2 = kx.meeting2[:]
+		p.Message1 = kx.message1
+		p.Message2 = kx.message2
+		p.SharedKey = kx.sharedKey[:]
+	}
+	serialised, err := proto.Marshal(p)
+	if err != nil {
+		panic(err)
+	}
+
+	kx.Lock()
+	defer kx.Unlock()
+
+	kx.serialised = serialised
+}
+
+func (kx *KeyExchange) shouldStop() bool {
+	select {
+	case <-kx.ShutdownChan:
+		return true
+	default:
+		return false
+	}
+
+	panic("unreachable")
+}
+
+func (kx *KeyExchange) Run() ([]byte, error) {
+	switch kx.status {
+	case panda_proto.KeyExchange_INIT:
+		if err := kx.derivePassword(); err != nil {
+			return nil, err
+		}
+		kx.status = panda_proto.KeyExchange_EXCHANGE1
+		kx.updateSerialised()
+		kx.Log("password derivation complete.")
+		if kx.shouldStop() {
+			return nil, ShutdownErr
+		}
+		fallthrough
+	case panda_proto.KeyExchange_EXCHANGE1:
+		if err := kx.exchange1(); err != nil {
+			return nil, err
+		}
+		kx.status = panda_proto.KeyExchange_EXCHANGE2
+		kx.updateSerialised()
+		kx.Log("first message exchange complete")
+		if kx.shouldStop() {
+			return nil, ShutdownErr
+		}
+		fallthrough
+	case panda_proto.KeyExchange_EXCHANGE2:
+		reply, err := kx.exchange2()
+		if err != nil {
+			return nil, err
+		}
+		return reply, nil
+	default:
+		panic("unknown state")
+	}
+
+	panic("unreachable")
+}
+
+func (kx *KeyExchange) derivePassword() error {
+	serialised, err := proto.Marshal(kx.sharedSecret.toProto())
+	if err != nil {
+		return err
+	}
+
+	if kx.Testing || kx.sharedSecret.isStrongRandom() {
+		h := hkdf.New(sha256.New, serialised, nil, []byte("PANDA strong secret expansion"))
+		if _, err := h.Read(kx.key[:]); err != nil {
+			return err
+		}
+		if _, err := h.Read(kx.meeting1[:]); err != nil {
+			return err
+		}
+		if _, err := h.Read(kx.meeting2[:]); err != nil {
+			return err
+		}
+	} else {
+		var data []byte
+		if runtime.GOARCH == "386" && runtime.GOOS == "linux" {
+			// We're having GC problems on 32-bit systems with the
+			// scrypt allocation. In order to help the GC out, the
+			// scrypt computation is done in a subprocess.
+			cmd := exec.Command("/proc/self/exe", "--panda-scrypt")
+			var in, out bytes.Buffer
+			binary.Write(&in, binary.LittleEndian, uint32(len(serialised)))
+			in.Write(serialised)
+
+			cmd.Stdin = &in
+			cmd.Stdout = &out
+			cmd.Stderr = os.Stderr
+			if err := cmd.Run(); err != nil {
+				return err
+			}
+			data = out.Bytes()
+			if len(data) != 32*3 {
+				return errors.New("scrypt subprocess returned wrong number of bytes: " + strconv.Itoa(len(data)))
+			}
+		} else {
+			if data, err = scrypt.Key(serialised, nil, 1<<17, 16, 4, 32*3); err != nil {
+				return err
+			}
+		}
+
+		copy(kx.key[:], data)
+		copy(kx.meeting1[:], data[32:])
+		copy(kx.meeting2[:], data[64:])
+	}
+
+	var encryptedDHPublic [32]byte
+	rijndael.NewCipher(&kx.key).Encrypt(&encryptedDHPublic, &kx.dhPublic)
+
+	l := len(encryptedDHPublic)
+	if padding := kx.meetingPlace.Padding(); l > padding {
+		return errors.New("panda: initial message too large for meeting place")
+	} else if l < padding {
+		l = padding
+	}
+
+	kx.message1 = make([]byte, l)
+	copy(kx.message1, encryptedDHPublic[:])
+	if _, err := io.ReadFull(kx.rand, kx.message1[len(encryptedDHPublic):]); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (kx *KeyExchange) exchange1() error {
+	reply, err := kx.meetingPlace.Exchange(kx.Log, kx.meeting1[:], kx.message1[:], kx.ShutdownChan)
+	if err != nil {
+		return err
+	}
+
+	var peerDHPublic, encryptedPeerDHPublic [32]byte
+	if len(reply) < len(encryptedPeerDHPublic) {
+		return errors.New("panda: meeting point reply too small")
+	}
+
+	copy(encryptedPeerDHPublic[:], reply)
+	rijndael.NewCipher(&kx.key).Decrypt(&peerDHPublic, &encryptedPeerDHPublic)
+
+	curve25519.ScalarMult(&kx.sharedKey, &kx.dhPrivate, &peerDHPublic)
+
+	paddedLen := kx.meetingPlace.Padding()
+	padded := make([]byte, paddedLen-24 /* nonce */ -secretbox.Overhead)
+	binary.LittleEndian.PutUint32(padded, uint32(len(kx.kxBytes)))
+	copy(padded[4:], kx.kxBytes)
+	if _, err := io.ReadFull(kx.rand, padded[4+len(kx.kxBytes):]); err != nil {
+		return err
+	}
+
+	var nonce [24]byte
+	if _, err := io.ReadFull(kx.rand, nonce[:]); err != nil {
+		return err
+	}
+
+	kx.message2 = make([]byte, paddedLen)
+	copy(kx.message2, nonce[:])
+	secretbox.Seal(kx.message2[24:24], padded, &nonce, &kx.sharedKey)
+
+	return nil
+}
+
+func (kx *KeyExchange) exchange2() ([]byte, error) {
+	reply, err := kx.meetingPlace.Exchange(kx.Log, kx.meeting2[:], kx.message2[:], kx.ShutdownChan)
+	if err != nil {
+		return nil, err
+	}
+
+	var nonce [24]byte
+	if len(reply) < len(nonce) {
+		return nil, errors.New("panda: meeting point reply too small")
+	}
+
+	if kx.sharedKey[0] == 0 && kx.sharedKey[1] == 0 {
+		panic("here")
+	}
+	copy(nonce[:], reply)
+	message, ok := secretbox.Open(nil, reply[24:], &nonce, &kx.sharedKey)
+	if !ok {
+		return nil, errors.New("panda: peer's message cannot be authenticated")
+	}
+
+	if len(message) < 4 {
+		return nil, errors.New("panda: peer's message is invalid")
+	}
+	l := binary.LittleEndian.Uint32(message)
+	message = message[4:]
+	if l > uint32(len(message)) {
+		return nil, errors.New("panda: peer's message is truncated")
+	}
+	message = message[:int(l)]
+	return message, nil
+}
diff --git a/panda/panda_test.go b/panda/panda_test.go
new file mode 100644
index 0000000..4f3e954
--- /dev/null
+++ b/panda/panda_test.go
@@ -0,0 +1,149 @@
+package panda
+
+import (
+	"bytes"
+	"crypto/rand"
+	"fmt"
+	"testing"
+)
+
+func TestSerialise(t *testing.T) {
+	secret := SharedSecret{
+		Secret: "foo",
+	}
+	mp := NewSimpleMeetingPlace()
+	kx, err := NewKeyExchange(rand.Reader, mp, &secret, []byte{1})
+	if err != nil {
+		t.Fatalf("failed to create KeyExchange: %s", err)
+	}
+
+	serialised := kx.Marshal()
+
+	if _, err := UnmarshalKeyExchange(rand.Reader, mp, serialised); err != nil {
+		t.Fatalf("UnmarshalKeyExchange failed: %s", err)
+	}
+}
+
+func runKX(resultChan chan interface{}, log func(string, ...interface{}), mp MeetingPlace, secret *SharedSecret, message []byte) {
+	kx, err := NewKeyExchange(rand.Reader, mp, secret, message)
+	if err != nil {
+		resultChan <- err
+	}
+	kx.Log = log
+	kx.Testing = true
+	reply, err := kx.Run()
+	if err != nil {
+		resultChan <- err
+	}
+	resultChan <- reply
+}
+
+func TestKeyExchange(t *testing.T) {
+	a, b := make(chan interface{}), make(chan interface{})
+	mp := NewSimpleMeetingPlace()
+	secret := SharedSecret{
+		Secret: "foo",
+	}
+
+	msg1 := []byte("test1")
+	msg2 := []byte("test2")
+	go runKX(a, t.Logf, mp, &secret, msg1)
+	go runKX(b, t.Logf, mp, &secret, msg2)
+
+	result := <-a
+	if reply, ok := result.([]byte); ok {
+		if !bytes.Equal(reply, msg2) {
+			t.Errorf("Bad result from kx: got %x, want %x", reply, msg2)
+		}
+	} else {
+		t.Errorf("Error from key exchange: %v", result)
+	}
+
+	result = <-b
+	if reply, ok := result.([]byte); ok {
+		if !bytes.Equal(reply, msg1) {
+			t.Errorf("Bad result from kx: got %x, want %x", reply, msg1)
+		}
+	} else {
+		t.Errorf("Error from key exchange: %s", result)
+	}
+}
+
+func TestStartStop(t *testing.T) {
+	mp := NewSimpleMeetingPlace()
+	secret := SharedSecret{
+		Secret: "foo",
+	}
+
+	msg1 := []byte("test1")
+	msg2 := []byte("test2")
+	a := make(chan interface{})
+	go runKX(a, t.Logf, mp, &secret, msg1)
+
+	panicLog := func(format string, args ...interface{}) {
+		fmt.Printf(format, args...)
+		t.Logf(format, args...)
+		panic("unwind")
+	}
+
+	kx, err := NewKeyExchange(rand.Reader, mp, &secret, msg2)
+	if err != nil {
+		t.Fatal(err)
+	}
+	serialised := kx.Marshal()
+	kx.Log = panicLog
+	kx.Testing = true
+	count := 0
+
+	var result []byte
+	done := false
+	for !done {
+		kx, err := UnmarshalKeyExchange(rand.Reader, mp, serialised)
+		if err != nil {
+			t.Fatalf("Failed to unmarshal KeyExchange: %s", err)
+		}
+		kx.Log = panicLog
+		kx.Testing = true
+
+		func() {
+			defer func() {
+				if count < 2 {
+					serialised = kx.Marshal()
+					recover()
+				}
+				count++
+			}()
+			result, err = kx.Run()
+			if err != nil {
+				t.Fatalf("Error from key exchange: %s", err)
+			}
+			done = true
+		}()
+	}
+
+	if !bytes.Equal(result, msg1) {
+		t.Errorf("Bad result from kx: got %x, want %x", result, msg1)
+	}
+}
+
+func TestSecretStringGeneration(t *testing.T) {
+	s := NewSecretString(rand.Reader)
+	if !isValidSecretString(s) {
+		t.Fatalf("Generated secret string isn't valid: %s", s)
+	}
+	if !IsAcceptableSecretString(s) {
+		t.Fatalf("Generated secret string isn't acceptable: %s", s)
+	}
+	s = s[:8] + "," + s[9:]
+	if isValidSecretString(s) {
+		t.Fatalf("Corrupt secret string is valid: %s", s)
+	}
+
+	s = "498572384"
+	if !IsAcceptableSecretString(s) {
+		t.Fatalf("Random secret string isn't acceptable: %s", s)
+	}
+	if isValidSecretString(s) {
+		t.Fatalf("Random secret string is valid: %s", s)
+	}
+}
diff --git a/panda/proto/core.pb.go b/panda/proto/core.pb.go
new file mode 100644
index 0000000..be3f4ff
--- /dev/null
+++ b/panda/proto/core.pb.go
@@ -0,0 +1,233 @@
+// Code generated by protoc-gen-go.
+// source: github.com/agl/pond/panda/proto/core.proto
+// DO NOT EDIT!
+
+package panda
+
+import proto "github.com/golang/protobuf/proto"
+import json "encoding/json"
+import math "math"
+
+// Reference proto, json, and math imports to suppress error if they are not otherwise used.
+var _ = proto.Marshal
+var _ = &json.SyntaxError{}
+var _ = math.Inf
+
+type KeyExchange_Status int32
+
+const (
+	KeyExchange_INIT      KeyExchange_Status = 0
+	KeyExchange_EXCHANGE1 KeyExchange_Status = 1
+	KeyExchange_EXCHANGE2 KeyExchange_Status = 2
+)
+
+var KeyExchange_Status_name = map[int32]string{
+	0: "INIT",
+	1: "EXCHANGE1",
+	2: "EXCHANGE2",
+}
+var KeyExchange_Status_value = map[string]int32{
+	"INIT":      0,
+	"EXCHANGE1": 1,
+	"EXCHANGE2": 2,
+}
+
+func (x KeyExchange_Status) Enum() *KeyExchange_Status {
+	p := new(KeyExchange_Status)
+	*p = x
+	return p
+}
+func (x KeyExchange_Status) String() string {
+	return proto.EnumName(KeyExchange_Status_name, int32(x))
+}
+func (x KeyExchange_Status) MarshalJSON() ([]byte, error) {
+	return json.Marshal(x.String())
+}
+func (x *KeyExchange_Status) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(KeyExchange_Status_value, data, "KeyExchange_Status")
+	if err != nil {
+		return err
+	}
+	*x = KeyExchange_Status(value)
+	return nil
+}
+
+type KeyExchange struct {
+	Status           *KeyExchange_Status       `protobuf:"varint,1,req,name=status,enum=panda.KeyExchange_Status" json:"status,omitempty"`
+	KeyExchangeBytes []byte                    `protobuf:"bytes,2,req,name=key_exchange_bytes" json:"key_exchange_bytes,omitempty"`
+	SharedSecret     *KeyExchange_SharedSecret `protobuf:"bytes,3,opt,name=shared_secret" json:"shared_secret,omitempty"`
+	DhPrivate        []byte                    `protobuf:"bytes,4,opt,name=dh_private" json:"dh_private,omitempty"`
+	Key              []byte                    `protobuf:"bytes,5,opt,name=key" json:"key,omitempty"`
+	Meeting1         []byte                    `protobuf:"bytes,6,opt,name=meeting1" json:"meeting1,omitempty"`
+	Meeting2         []byte                    `protobuf:"bytes,7,opt,name=meeting2" json:"meeting2,omitempty"`
+	Message1         []byte                    `protobuf:"bytes,8,opt,name=message1" json:"message1,omitempty"`
+	Message2         []byte                    `protobuf:"bytes,9,opt,name=message2" json:"message2,omitempty"`
+	SharedKey        []byte                    `protobuf:"bytes,10,opt,name=shared_key" json:"shared_key,omitempty"`
+	XXX_unrecognized []byte                    `json:"-"`
+}
+
+func (this *KeyExchange) Reset()         { *this = KeyExchange{} }
+func (this *KeyExchange) String() string { return proto.CompactTextString(this) }
+func (*KeyExchange) ProtoMessage()       {}
+
+func (this *KeyExchange) GetStatus() KeyExchange_Status {
+	if this != nil && this.Status != nil {
+		return *this.Status
+	}
+	return 0
+}
+
+func (this *KeyExchange) GetKeyExchangeBytes() []byte {
+	if this != nil {
+		return this.KeyExchangeBytes
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetSharedSecret() *KeyExchange_SharedSecret {
+	if this != nil {
+		return this.SharedSecret
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetDhPrivate() []byte {
+	if this != nil {
+		return this.DhPrivate
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetKey() []byte {
+	if this != nil {
+		return this.Key
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetMeeting1() []byte {
+	if this != nil {
+		return this.Meeting1
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetMeeting2() []byte {
+	if this != nil {
+		return this.Meeting2
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetMessage1() []byte {
+	if this != nil {
+		return this.Message1
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetMessage2() []byte {
+	if this != nil {
+		return this.Message2
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetSharedKey() []byte {
+	if this != nil {
+		return this.SharedKey
+	}
+	return nil
+}
+
+type KeyExchange_SharedSecret struct {
+	Secret           *string                        `protobuf:"bytes,1,opt,name=secret" json:"secret,omitempty"`
+	NumDecks         *int32                         `protobuf:"varint,2,opt,name=num_decks" json:"num_decks,omitempty"`
+	CardCount        []int32                        `protobuf:"varint,3,rep,name=card_count" json:"card_count,omitempty"`
+	Time             *KeyExchange_SharedSecret_Time `protobuf:"bytes,4,opt,name=time" json:"time,omitempty"`
+	XXX_unrecognized []byte                         `json:"-"`
+}
+
+func (this *KeyExchange_SharedSecret) Reset()         { *this = KeyExchange_SharedSecret{} }
+func (this *KeyExchange_SharedSecret) String() string { return proto.CompactTextString(this) }
+func (*KeyExchange_SharedSecret) ProtoMessage()       {}
+
+func (this *KeyExchange_SharedSecret) GetSecret() string {
+	if this != nil && this.Secret != nil {
+		return *this.Secret
+	}
+	return ""
+}
+
+func (this *KeyExchange_SharedSecret) GetNumDecks() int32 {
+	if this != nil && this.NumDecks != nil {
+		return *this.NumDecks
+	}
+	return 0
+}
+
+func (this *KeyExchange_SharedSecret) GetCardCount() []int32 {
+	if this != nil {
+		return this.CardCount
+	}
+	return nil
+}
+
+func (this *KeyExchange_SharedSecret) GetTime() *KeyExchange_SharedSecret_Time {
+	if this != nil {
+		return this.Time
+	}
+	return nil
+}
+
+type KeyExchange_SharedSecret_Time struct {
+	Day              *int32 `protobuf:"varint,1,req,name=day" json:"day,omitempty"`
+	Month            *int32 `protobuf:"varint,2,req,name=month" json:"month,omitempty"`
+	Year             *int32 `protobuf:"varint,3,req,name=year" json:"year,omitempty"`
+	Hours            *int32 `protobuf:"varint,4,req,name=hours" json:"hours,omitempty"`
+	Minutes          *int32 `protobuf:"varint,5,req,name=minutes" json:"minutes,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *KeyExchange_SharedSecret_Time) Reset()         { *this = KeyExchange_SharedSecret_Time{} }
+func (this *KeyExchange_SharedSecret_Time) String() string { return proto.CompactTextString(this) }
+func (*KeyExchange_SharedSecret_Time) ProtoMessage()       {}
+
+func (this *KeyExchange_SharedSecret_Time) GetDay() int32 {
+	if this != nil && this.Day != nil {
+		return *this.Day
+	}
+	return 0
+}
+
+func (this *KeyExchange_SharedSecret_Time) GetMonth() int32 {
+	if this != nil && this.Month != nil {
+		return *this.Month
+	}
+	return 0
+}
+
+func (this *KeyExchange_SharedSecret_Time) GetYear() int32 {
+	if this != nil && this.Year != nil {
+		return *this.Year
+	}
+	return 0
+}
+
+func (this *KeyExchange_SharedSecret_Time) GetHours() int32 {
+	if this != nil && this.Hours != nil {
+		return *this.Hours
+	}
+	return 0
+}
+
+func (this *KeyExchange_SharedSecret_Time) GetMinutes() int32 {
+	if this != nil && this.Minutes != nil {
+		return *this.Minutes
+	}
+	return 0
+}
+
+func init() {
+	proto.RegisterEnum("panda.KeyExchange_Status", KeyExchange_Status_name, KeyExchange_Status_value)
+}
diff --git a/panda/proto/core.proto b/panda/proto/core.proto
new file mode 100644
index 0000000..bcb6f12
--- /dev/null
+++ b/panda/proto/core.proto
@@ -0,0 +1,35 @@
+package panda;
+
+// These protobufs are used for serialising a pending key exchange.
+
+message KeyExchange {
+	enum Status {
+		INIT = 0;
+		EXCHANGE1 = 1;
+		EXCHANGE2 = 2;
+	}
+	required Status status = 1;
+	required bytes key_exchange_bytes = 2;
+
+	message SharedSecret {
+		optional string secret = 1;
+		optional int32 num_decks = 2;
+		repeated int32 card_count = 3;
+		message Time {
+			required int32 day = 1;
+			required int32 month = 2;
+			required int32 year = 3;
+			required int32 hours = 4;
+			required int32 minutes = 5;
+		}
+		optional Time time = 4;
+	}
+	optional SharedSecret shared_secret = 3;
+	optional bytes dh_private = 4;
+	optional bytes key = 5;
+	optional bytes meeting1 = 6;
+	optional bytes meeting2 = 7;
+	optional bytes message1 = 8;
+	optional bytes message2 = 9;
+	optional bytes shared_key = 10;
+}
diff --git a/panda/rijndael/rijndael.go b/panda/rijndael/rijndael.go
new file mode 100644
index 0000000..926a6fa
--- /dev/null
+++ b/panda/rijndael/rijndael.go
@@ -0,0 +1,259 @@
+package rijndael
+
+import (
+	"encoding/binary"
+)
+
+const rounds = 14
+const keyWords = 8
+const BlockSize = 32
+const blockWords = BlockSize/4
+
+type Cipher struct {
+	key [blockWords * (rounds + 1)]uint32
+}
+
+func NewCipher(key *[32]byte) *Cipher {
+	c := new(Cipher)
+
+	for i := 0; i < keyWords; i++ {
+		c.key[i] = binary.BigEndian.Uint32(key[4*i:])
+	}
+
+	roundConstant := byte(1)
+	for i := keyWords; i < blockWords * (rounds + 1); i++ {
+		temp := c.key[i-1]
+		if (i % keyWords == 0) {
+			temp = subByte(rotByte(temp)) ^ (uint32(roundConstant) << 24)
+			roundConstant = xtime(roundConstant)
+		} else if (i % keyWords == 4) {
+			temp = subByte(temp)
+		}
+		c.key[i] = c.key[i - keyWords] ^ temp
+	}
+
+	return c
+}
+
+func (c *Cipher) Encrypt(dst, src *[32]byte) {
+	var state [4*blockWords]byte
+	copy(state[:], src[:])
+
+	addKey(&state, c.key[:])
+
+	for round := 1; round < rounds; round++ {
+		// ByteSub
+		for i := range state {
+			state[i] = sbox[state[i]]
+		}
+
+		// ShiftRow
+		if blockWords == 32/4 {
+			shiftRow(&state, 1, 1)
+			shiftRow(&state, 2, 3)
+			shiftRow(&state, 3, 4)
+		} else {
+			shiftRow(&state, 1, 1)
+			shiftRow(&state, 2, 2)
+			shiftRow(&state, 3, 3)
+		}
+
+		// MixColumns
+		for i := 0; i < blockWords; i++ {
+			mixColumn(state[4*i:])
+		}
+
+		addKey(&state, c.key[blockWords*round:])
+	}
+
+	// ByteSub
+	for i := range state {
+		state[i] = sbox[state[i]]
+	}
+
+	// ShiftRow
+	if blockWords == 32/4 {
+		shiftRow(&state, 1, 1)
+		shiftRow(&state, 2, 3)
+		shiftRow(&state, 3, 4)
+	} else {
+		shiftRow(&state, 1, 1)
+		shiftRow(&state, 2, 2)
+		shiftRow(&state, 3, 3)
+	}
+
+	addKey(&state, c.key[blockWords*rounds:])
+
+	copy(dst[:], state[:])
+}
+
+func (c *Cipher) Decrypt(dst, src *[32]byte) {
+	var state [4*blockWords]byte
+	copy(state[:], src[:])
+
+	addKey(&state, c.key[blockWords*rounds:])
+
+	// ShiftRow
+	if blockWords == 32/4 {
+		shiftRow(&state, 1, -1)
+		shiftRow(&state, 2, -3)
+		shiftRow(&state, 3, -4)
+	} else {
+		shiftRow(&state, 1, -1)
+		shiftRow(&state, 2, -2)
+		shiftRow(&state, 3, -3)
+	}
+
+	// ByteSub
+	for i := range state {
+		state[i] = sboxInv[state[i]]
+	}
+
+	for round := rounds - 1; round >= 1; round-- {
+		addKey(&state, c.key[blockWords*round:])
+
+		// MixColumns
+		for i := 0; i < blockWords; i++ {
+			mixColumnInv(state[4*i:])
+		}
+
+		// ShiftRow
+		if blockWords == 32/4 {
+			shiftRow(&state, 1, -1)
+			shiftRow(&state, 2, -3)
+			shiftRow(&state, 3, -4)
+		} else {
+			shiftRow(&state, 1, -1)
+			shiftRow(&state, 2, -2)
+			shiftRow(&state, 3, -3)
+		}
+
+		// ByteSub
+		for i := range state {
+			state[i] = sboxInv[state[i]]
+		}
+	}
+
+	addKey(&state, c.key[:])
+
+	copy(dst[:], state[:])
+}
+
+func subByte(a uint32) uint32 {
+	ret := uint32(0)
+	for i := 0; i < 4; i++ {
+		b := byte(a)
+		ret >>= 8
+		ret |= uint32(sbox[b]) << 24
+		a >>= 8
+	}
+	return ret
+}
+
+func rotByte(a uint32) uint32 {
+	return (a >> 24) | (a << 8)
+}
+
+func addKey(state *[4*blockWords]byte, key []uint32) {
+	for i := 0; i < blockWords; i++ {
+		t := binary.BigEndian.Uint32(state[4*i:])
+		t ^= key[i]
+		binary.BigEndian.PutUint32(state[4*i:], t)
+	}
+}
+
+func shiftRow(state *[4*blockWords]byte, row, shift int) {
+	var input [blockWords]byte
+	for i := range input {
+		input[i] = state[row + 4*i]
+	}
+
+	src := shift
+	if src < 0 {
+		src += blockWords
+	}
+	dst := row
+	for i := 0; i < blockWords; i++ {
+		state[dst] = input[src]
+		dst += 4
+		dst %= blockWords*4
+		src++
+		src %= blockWords
+	}
+}
+
+func mixColumn(col []byte) {
+	a := col[0]
+	b := col[1]
+	c := col[2]
+	d := col[3]
+	e := a ^ b ^ c ^ d
+
+	col[0] ^= e ^ xtime(a^b)
+	col[1] ^= e ^ xtime(b^c)
+	col[2] ^= e ^ xtime(c^d)
+	col[3] ^= e ^ xtime(d^a)
+}
+
+func mixColumnInv(col []byte) {
+	a := col[0]
+	b := col[1]
+	c := col[2]
+	d := col[3]
+	e := a ^ b ^ c ^ d
+	z := xtime(e)
+	x := e ^ xtime(xtime(z^a^c))
+	y := e ^ xtime(xtime(z^b^d))
+
+	col[0] ^= x ^ xtime(a^b)
+	col[1] ^= y ^ xtime(b^c)
+	col[2] ^= x ^ xtime(c^d)
+	col[3] ^= y ^ xtime(d^a)
+}
+
+func xtime(b byte) byte {
+	c := uint32(b)
+	c <<= 1
+	c ^= ((c >> 8) & 1) * 0x1b
+	return byte(c)
+}
+
+// FIPS-197 Figure 7. S-box substitution values in hexadecimal format.
+var sbox = [256]byte{
+	0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+	0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+	0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+	0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+	0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+	0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+	0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+	0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+	0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+	0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+	0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+	0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+	0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+	0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+	0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+	0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16,
+}
+
+// FIPS-197 Figure 14.  Inverse S-box substitution values in hexadecimal format.
+var sboxInv = [256]byte{
+	0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
+	0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
+	0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+	0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
+	0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
+	0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+	0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
+	0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
+	0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+	0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
+	0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
+	0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+	0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
+	0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
+	0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+	0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d,
+}
diff --git a/panda/rijndael/rijndael_test.go b/panda/rijndael/rijndael_test.go
new file mode 100644
index 0000000..f3d2a57
--- /dev/null
+++ b/panda/rijndael/rijndael_test.go
@@ -0,0 +1,2118 @@
+package rijndael
+
+import (
+	"bytes"
+	"encoding/hex"
+	"testing"
+)
+
+func TestNewCipher(t *testing.T) {
+	key := [32]byte{
+		0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe, 0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
+		0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7, 0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4,
+	}
+	c := NewCipher(&key)
+	// This is only half of the expanded key because it's taken from a 128-bit block size AES test vector.
+	expected := []uint32{
+		0x603deb10, 0x15ca71be, 0x2b73aef0, 0x857d7781,
+		0x1f352c07, 0x3b6108d7, 0x2d9810a3, 0x0914dff4,
+		0x9ba35411, 0x8e6925af, 0xa51a8b5f, 0x2067fcde,
+		0xa8b09c1a, 0x93d194cd, 0xbe49846e, 0xb75d5b9a,
+		0xd59aecb8, 0x5bf3c917, 0xfee94248, 0xde8ebe96,
+		0xb5a9328a, 0x2678a647, 0x98312229, 0x2f6c79b3,
+		0x812c81ad, 0xdadf48ba, 0x24360af2, 0xfab8b464,
+		0x98c5bfc9, 0xbebd198e, 0x268c3ba7, 0x09e04214,
+		0x68007bac, 0xb2df3316, 0x96e939e4, 0x6c518d80,
+		0xc814e204, 0x76a9fb8a, 0x5025c02d, 0x59c58239,
+		0xde136967, 0x6ccc5a71, 0xfa256395, 0x9674ee15,
+		0x5886ca5d, 0x2e2f31d7, 0x7e0af1fa, 0x27cf73c3,
+		0x749c47ab, 0x18501dda, 0xe2757e4f, 0x7401905a,
+		0xcafaaae3, 0xe4d59b34, 0x9adf6ace, 0xbd10190d,
+		0xfe4890d1, 0xe6188d0b, 0x046df344, 0x706c631e,
+	}
+
+	for i, v := range expected {
+		if c.key[i] != v {
+			t.Errorf("key[%d] = %x, expected %x", i, c.key[i], v)
+		}
+	}
+}
+
+// These test vectors were taken from Dr B. R. Gladman's original reference
+// implementation of Rijndael which is one of the few places to have test
+// vectors for 256-bit block sizes.
+var encryptionTests = []struct {
+	keyHex, outHex string
+} {
+	{
+		"0000000000000000000000000000000000000000000000000000000000000000",
+		"c6227e7740b7e53b5cb77865278eab0726f62366d9aabad908936123a1fc8af3",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000000001",
+		"7536b4b6490c083597f6596de8c627b1c75d0f4f9ba24de284ff575e25dda7eb",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000000003",
+		"87be1591fd6daf58a87074d39c52eafbd3608af9030a1ec402ca93f4dad5e6b9",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000000007",
+		"57a34394536e04047d7ac4edb5cf771f69d36a7b465f430292c939452cc397a0",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000000000f",
+		"5d5fbce4ac82c5d334f9627bbaabb3f526d9be38d38de601abcd726bab865f0b",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000000001f",
+		"24c06bc80e9b0dbc68103c638b9302bc17bcc83d63145dec83898af1d942cb12",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000000003f",
+		"bffe5e5e5c2c0978f9b2c15725e79dd147663caaac8c1c5678615027afb75102",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000000007f",
+		"cc13fd7912bd8f638c77eaeaabdd2c0546d070f6a9e8bc37d0ff90d9aaf55697",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000000000ff",
+		"e153b99deeeb523118d07d0fc643234b11fbb180272de993ea7a3cbe771c3293",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000000001ff",
+		"f40da527cc2a23635db75f7c07be23587b0b97b6ca6aff0919b14702d01264bf",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000000003ff",
+		"d20659f3cd5092c211cd5943e211cfdd940b3facf4aa674f8070994d81128419",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000000007ff",
+		"773167068bf2fc73b96e5f1044538e616d5dd6f595ef6d1517029334e123461d",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000000fff",
+		"73fc4ed81674588042a1baa302637e2732588bbe6e85266cc7de03db24fad6b6",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000001fff",
+		"2e87a4c62afb0c4d8cbb6aba6fdbde3003b1a98932c8586e4089805c29a3b22a",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000003fff",
+		"31916d5da07d68dc6c9c6c038dc5d809378288591185b89432bb41b31913a246",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000007fff",
+		"8f4712efbc7fab3419a1ed394e512cc61a58bd7c4702ab3566f2f924d5ce7b32",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000000ffff",
+		"588294653e3ce90c8a2a76322805c122615a0ab7b1ddf8f58c5105d6625b0edd",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000001ffff",
+		"f88714726eb980e66dc3410fa3f763b8bb8b58ef3b27d1d5fcba6eba0d1fcd2c",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000003ffff",
+		"4928e6c6f6f5c30e83c5cf34690b5f8aa3696a1f123bca0ce9334f5f0cc2151f",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000007ffff",
+		"c040b9727696aa2cd93bb043c6cc09e117cd0456fdf7778b34188815fedddd13",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000000fffff",
+		"b03aee5c2e38cb523b9c25e5b2cab4b8a25f8b99f1f4b249091b61757cea7e6b",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000001fffff",
+		"fcd10f95a2dd1c5a1860d6984b21b55c4be74c6d36175f9707c15da04c27d689",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000003fffff",
+		"f071abf6a7c6d60650763405d9fdc531899ee4fc80557345ca1b2bb989ea4998",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000007fffff",
+		"305c77236ec83012b8dd78c7cbf830aacadc4a4e0c2e8cfe43337e987e9b6bae",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000000ffffff",
+		"e013364a2f00d60771873ab220c1b6c23abbe5b6e3d486b0e83a03017f32ad9f",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000001ffffff",
+		"d6b3cdb005097e828a3a120740f278c9211c083c04dec7a2b7f4d1b43265803b",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000003ffffff",
+		"6b5a84803728fe60773d916000b3defee203d30733133b94627103e00798c23b",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000007ffffff",
+		"e867624d02038fb29109b819a966e6fd203d84b36d11faca1993b0ef9ea03cf8",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000000fffffff",
+		"17e96ce3f6b543d895fa8809556d0d07ac7c072aba45017f1b58ae2b543ef02b",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000001fffffff",
+		"26e49beb977ce573c39d43310f4116bcb9570a96b097892e058b4d96b671cc8b",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000003fffffff",
+		"6654940cc1e33ec175858a4a3c30cb19f09ab73003b66e8eaad731c41e1be679",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000007fffffff",
+		"09887b905aab24a7962864452ca38d7ce64e5d2e845418fb5f3f4be9773392c4",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000000ffffffff",
+		"a571ed93b494662620554eeab96c4bc12bbc0be779e595046dfffd60c1a66e63",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000001ffffffff",
+		"a9741d0243475889dc0313a499ea00e6f50e3c75b889c8cc4bfa352546a26daa",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000003ffffffff",
+		"6b99c90ac14a0e38967f709a67178e8f6b8cfd57ed6db1562372fb12019d9e95",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000007ffffffff",
+		"917bc478b1532b8975a3933811fee8a64c0b67511647e8f25823cf3caee99f9c",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000000fffffffff",
+		"83a170b853660c9da5dd6c1824f480db1504f90ef4b1e7bc031ffa348b6afe5e",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000001fffffffff",
+		"42a92b282225e678d081aaab6b8d15de60212fe61423a7e4e5e1d7af5bfec883",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000003fffffffff",
+		"8117f11f098e12efd0270a8bb5b9b83757d063930067d1aab5ce9b3e36df6f35",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000007fffffffff",
+		"7c5a5ccb73c0995a235a7848b4580b1c1a73de23c66f0e7b58d55e4eaae8a0ba",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000000ffffffffff",
+		"4581a36388371f258df08581f193c196885b8c43dcbff1c683f462e68363cbf7",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000001ffffffffff",
+		"570e5c1c6b8bec3fac3edbb0edcd10edd296c140d59789b3900d41441d6f2a6d",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000003ffffffffff",
+		"cedc7bbfbe870ef796b9f2019bf3ae9851f7d6cc8a81c40de890245a35334367",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000007ffffffffff",
+		"9d194baf99a4c58357a1f596aa531b480ddad29e82a3b257d28c5b8449c50ddc",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000000fffffffffff",
+		"d07488fe963db2c99327a4aac58d39ecc6261e28a1043759b8b361bcd5c9344e",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000001fffffffffff",
+		"ab62bf7b02f5937b4de8e680ddeef08c06fce47d46200a28ac28bcb16314792c",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000003fffffffffff",
+		"6b523b89240dc337630ce963c548316198ca8b1dd19fb4e4b7f5874153266e66",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000007fffffffffff",
+		"4a811faedb2b6447d8822d25499f4b46a466cc86a34a2d9753390a52bdd802ef",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000000ffffffffffff",
+		"28dd4f97bbc73cfe1c2092e0063334d557f8b5b1831e3db1fb2ca429211bee65",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000001ffffffffffff",
+		"b1d94f138661cf9c6d05a62512ab1d0ef91079a6ab3a95cacace039418325c4d",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000003ffffffffffff",
+		"b9c04476432d1d6f5fb317f85b6ea1acd072d850cd4b419ab02b089a50611efe",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000007ffffffffffff",
+		"b7a710269b11a2e1c0f98152664f9b3ae1a62b2ed763b9ee01ec32d8cb2a07d2",
+	},
+	{
+		"000000000000000000000000000000000000000000000000000fffffffffffff",
+		"c4603173664c6ba0c6162d50663fda77765bd72876e7683e9f4a2232cf5007b7",
+	},
+	{
+		"000000000000000000000000000000000000000000000000001fffffffffffff",
+		"8e6b3ac1554215b866a93b02e6f44fc39bf033840c8c05da0e1dbfbf3470d7dc",
+	},
+	{
+		"000000000000000000000000000000000000000000000000003fffffffffffff",
+		"c5bcb2a8453d6233d80d7c010238edf1f8eaa7c4fcd7ef4c12196c14b4d95dda",
+	},
+	{
+		"000000000000000000000000000000000000000000000000007fffffffffffff",
+		"fbe10587eec02f73547f3fb15cfc3046d9e3b3c7c3d2c1d5d38f4424e05c220c",
+	},
+	{
+		"00000000000000000000000000000000000000000000000000ffffffffffffff",
+		"bd061e676eb8a899138d1f9d81bacd41aca7f7401aa15c1ef2c39fe074a290e8",
+	},
+	{
+		"00000000000000000000000000000000000000000000000001ffffffffffffff",
+		"4028844795878cdf862b02fc733b4252b77b75df3144e6765211fdbe92a02485",
+	},
+	{
+		"00000000000000000000000000000000000000000000000003ffffffffffffff",
+		"be7fa52d388f50fe74b6fe1df831f9d628132f9fa2b1a083057e20506bdc688e",
+	},
+	{
+		"00000000000000000000000000000000000000000000000007ffffffffffffff",
+		"ba0a9a5be85e6d6b43688a14fd7e66387296b61789314af19ea47f448a0fd893",
+	},
+	{
+		"0000000000000000000000000000000000000000000000000fffffffffffffff",
+		"f059ce183400e1e7825b1d523e2c9580f23f753f3d41313e0156180d2199f890",
+	},
+	{
+		"0000000000000000000000000000000000000000000000001fffffffffffffff",
+		"540b450f2515540eb012cb58f085c25da26f8fdfa8d9e9f45b61cd8f389a50a4",
+	},
+	{
+		"0000000000000000000000000000000000000000000000003fffffffffffffff",
+		"3ea8e7c958cefd4de82a332219c7599a33c66f91a9e49bcfd03542dad4af2768",
+	},
+	{
+		"0000000000000000000000000000000000000000000000007fffffffffffffff",
+		"d86e1dd69e679ceeffd607e8ac911bbc1721f834541e5b7178184ba97b2f31be",
+	},
+	{
+		"000000000000000000000000000000000000000000000000ffffffffffffffff",
+		"5f5f8226aaaff668f7ca16b751d78f412fe1298da5568e1bc7f3590c97e33f91",
+	},
+	{
+		"000000000000000000000000000000000000000000000001ffffffffffffffff",
+		"2250db79f8faf1991397a48f912f09217e0045c72d0641ebc223a8494f1a7904",
+	},
+	{
+		"000000000000000000000000000000000000000000000003ffffffffffffffff",
+		"04e1b96eca3e9eab1de3de33e30dc3167546a03e5ccc5ae2b44030b5664b6605",
+	},
+	{
+		"000000000000000000000000000000000000000000000007ffffffffffffffff",
+		"b39949337402a6778d3aa8525877f0e176f6df19bfb31ed2c5259b34bd61c4c2",
+	},
+	{
+		"00000000000000000000000000000000000000000000000fffffffffffffffff",
+		"95a8e7dd8549578e0c24b4ab6e65d385d6b0552fccba66d73c3c6a3f4f5152c5",
+	},
+	{
+		"00000000000000000000000000000000000000000000001fffffffffffffffff",
+		"ce247e9e98d75a32dd7813c0468020ec6ff49117ddfc7fe96b5bb19029db7fe1",
+	},
+	{
+		"00000000000000000000000000000000000000000000003fffffffffffffffff",
+		"47c5a2d483db19cd0d7f0a12808ba506a04fe9798ffa26f23419de41cc3ef96f",
+	},
+	{
+		"00000000000000000000000000000000000000000000007fffffffffffffffff",
+		"56c06e4da19667609d2925738951f2a7ac0d08370f8af785ecd9643db3f169bf",
+	},
+	{
+		"0000000000000000000000000000000000000000000000ffffffffffffffffff",
+		"03ed18d5f25531be5744a61f3e3e9f48b4f620522c5a38e3edaa28baf1ad2370",
+	},
+	{
+		"0000000000000000000000000000000000000000000001ffffffffffffffffff",
+		"1bfca98e5f54dd9119191af1e9078b0d464237c0d3b6581ef3cd8d625e10ca6e",
+	},
+	{
+		"0000000000000000000000000000000000000000000003ffffffffffffffffff",
+		"54a7a417f614344716664e46fdf2a89d370c8f3e271de67bc476dfef20daebc8",
+	},
+	{
+		"0000000000000000000000000000000000000000000007ffffffffffffffffff",
+		"1da4d3a29128d6e75a50c324f774d7f3b30df4a0cf4ef60f88c13fbe5a1dfe57",
+	},
+	{
+		"000000000000000000000000000000000000000000000fffffffffffffffffff",
+		"10a828a1422ce99203c86d3db1f0b1d7c2ff74aa2485bb2b8d231929dbbe7a40",
+	},
+	{
+		"000000000000000000000000000000000000000000001fffffffffffffffffff",
+		"48b4b8d5052aaf132ebd4b5a30efb2a32a19e303f12511b2be386c357ac3612d",
+	},
+	{
+		"000000000000000000000000000000000000000000003fffffffffffffffffff",
+		"8f663f446a03ce31b8d6fd90f2c0c1c2a1857e2e48289661d6996a69fa4b33d6",
+	},
+	{
+		"000000000000000000000000000000000000000000007fffffffffffffffffff",
+		"cffd47302676d0f6a86ec1df5a667e74bc0a3845dbf74e9d441428f5f282a828",
+	},
+	{
+		"00000000000000000000000000000000000000000000ffffffffffffffffffff",
+		"4cda5a575ce3041d1ad67850d1ed1569704d954b6e1e7e003705fa7a76e61dea",
+	},
+	{
+		"00000000000000000000000000000000000000000001ffffffffffffffffffff",
+		"27a1cbb8b724d76f27575ffed16c439f9b392abdda491a1046fd68303f08ba09",
+	},
+	{
+		"00000000000000000000000000000000000000000003ffffffffffffffffffff",
+		"d57d7647b0365a1792d326de7cb76b49fe612b779c607bc42f12265c9f187071",
+	},
+	{
+		"00000000000000000000000000000000000000000007ffffffffffffffffffff",
+		"042b30193299619bc343e0f0667a7b281c002d313e5a9413cad182e570587b35",
+	},
+	{
+		"0000000000000000000000000000000000000000000fffffffffffffffffffff",
+		"4d00c71cd6987ac5e90f331a35f4e1467b25410c0fe13b0eb0da9426207560e2",
+	},
+	{
+		"0000000000000000000000000000000000000000001fffffffffffffffffffff",
+		"2ff08dc5feb52b8943db310b4aa9abed6753e853a9d9e84e35af9d1f3e008143",
+	},
+	{
+		"0000000000000000000000000000000000000000003fffffffffffffffffffff",
+		"a35b41d8d3b9c8fc050482e353d6e3d273af68535c5ca8e355332f61ec5c919f",
+	},
+	{
+		"0000000000000000000000000000000000000000007fffffffffffffffffffff",
+		"f245a1fb292b91a9925d5fc73588ff3f6914de3f937b78acf6f0d2ef6da2c7fa",
+	},
+	{
+		"000000000000000000000000000000000000000000ffffffffffffffffffffff",
+		"e64537bdf8e194358e1cba2e27bfd68344469a22a12e0fd46310bb178fac66f0",
+	},
+	{
+		"000000000000000000000000000000000000000001ffffffffffffffffffffff",
+		"4c1c8a0301b0adb32835ab5f866e7c018c899a41cefc6b7f1892d64f5c21a663",
+	},
+	{
+		"000000000000000000000000000000000000000003ffffffffffffffffffffff",
+		"7727c35792ad3976bb5830c4dcabd4b0b27d45df18978371dd858203e4cd914e",
+	},
+	{
+		"000000000000000000000000000000000000000007ffffffffffffffffffffff",
+		"a261006f821300f08d53f477b391612159a3b5098ffc8fd1539d1b8c0d02ddb0",
+	},
+	{
+		"00000000000000000000000000000000000000000fffffffffffffffffffffff",
+		"31ceb161724f1e6697e089eeda3062c47d02204e24071a25eb0ffc1fea9b79c4",
+	},
+	{
+		"00000000000000000000000000000000000000001fffffffffffffffffffffff",
+		"dd3184ecb8ee6dc3c9323355bd214979ee6a91b96a708c7b3d3089e77f3bcf9d",
+	},
+	{
+		"00000000000000000000000000000000000000003fffffffffffffffffffffff",
+		"339736681f0ef121b124133b8e0d44f573bc91d25f593da1415678b107dca173",
+	},
+	{
+		"00000000000000000000000000000000000000007fffffffffffffffffffffff",
+		"5f4557c171032235b8012a76bef8275d8bb296808bbc9b9e632a0a9a3adab086",
+	},
+	{
+		"0000000000000000000000000000000000000000ffffffffffffffffffffffff",
+		"b62b49be00fd2f33315b32f4c6ecb066332682fee46d85639881b66d0adbc807",
+	},
+	{
+		"0000000000000000000000000000000000000001ffffffffffffffffffffffff",
+		"ea4ad0ce9e4bc0b5e522e4a588906ffb789d8f121a8b5a17497d21c1b303b15a",
+	},
+	{
+		"0000000000000000000000000000000000000003ffffffffffffffffffffffff",
+		"176108113005d5ac082ceb6d3acd2410ffabc8101b0fa6db40ca660c4b071c45",
+	},
+	{
+		"0000000000000000000000000000000000000007ffffffffffffffffffffffff",
+		"3c5424598e5923499ba135fc14983fc89dea6bb34780ebf6ad65d8fe33a075f1",
+	},
+	{
+		"000000000000000000000000000000000000000fffffffffffffffffffffffff",
+		"e13c3d4fda07a525759008829a8beade99a778a65e0f175730cf3559f2d67d84",
+	},
+	{
+		"000000000000000000000000000000000000001fffffffffffffffffffffffff",
+		"447971aa7181f72e4468a01509f8fa7574adb015c9c019473e290d196770bcd5",
+	},
+	{
+		"000000000000000000000000000000000000003fffffffffffffffffffffffff",
+		"2a919658bcd618a424cedbf3bb0a77085a31dc2eabd28344d617dc16a1def52d",
+	},
+	{
+		"000000000000000000000000000000000000007fffffffffffffffffffffffff",
+		"3ea8345818d4be8cd10482830a21913a6973d8417659767f31044d42086e8af7",
+	},
+	{
+		"00000000000000000000000000000000000000ffffffffffffffffffffffffff",
+		"d723562d2a5737f4b568dcd6e4f8124e0dea90cf5a38aa59a8127e1140d5881f",
+	},
+	{
+		"00000000000000000000000000000000000001ffffffffffffffffffffffffff",
+		"18dae24f3ab10093acb93512d4bb2460125a756f608a9577d1b40904e458e138",
+	},
+	{
+		"00000000000000000000000000000000000003ffffffffffffffffffffffffff",
+		"89a9d3637ce3df74f84a39e517f1a7f3f1560f894d547f3e6208b26fb0778c5a",
+	},
+	{
+		"00000000000000000000000000000000000007ffffffffffffffffffffffffff",
+		"5f495d485186d4bee62c843f0e7e2c7b880c399330941f1c788b346768b67fb5",
+	},
+	{
+		"0000000000000000000000000000000000000fffffffffffffffffffffffffff",
+		"75f3a92c5720fade8bbe4e3b99c3a35b34fa69d67bff16003913f391dedbd4c0",
+	},
+	{
+		"0000000000000000000000000000000000001fffffffffffffffffffffffffff",
+		"7302c156c9b937d5bac438eef20ab34d57b0aa7b71370d577c4ea981c64f61e7",
+	},
+	{
+		"0000000000000000000000000000000000003fffffffffffffffffffffffffff",
+		"d6c9e7ba875e34572ad43e9f77e24aac3c39bf1729f67fbf11bff84818270f25",
+	},
+	{
+		"0000000000000000000000000000000000007fffffffffffffffffffffffffff",
+		"4ddee7b8a67f10fe970818979852e918606b9616dfebd9ddf338e8c7cc40b2f6",
+	},
+	{
+		"000000000000000000000000000000000000ffffffffffffffffffffffffffff",
+		"e83d1a1ab2a42e51810448dc66de7e639e275ff27fdec32b8565a8d6d9885810",
+	},
+	{
+		"000000000000000000000000000000000001ffffffffffffffffffffffffffff",
+		"71b531ee5d854e88fa6fe677ec6bc58baf615ba36a57c9f8680785cc3e83823f",
+	},
+	{
+		"000000000000000000000000000000000003ffffffffffffffffffffffffffff",
+		"c8dc384fe5540fc1c6ff3ce9b193706355e7f60c5e585ff6a650413eaa386138",
+	},
+	{
+		"000000000000000000000000000000000007ffffffffffffffffffffffffffff",
+		"469de6d96cb43cb104c46ecf27739f190a44a90fddd44a836bff513c60d41499",
+	},
+	{
+		"00000000000000000000000000000000000fffffffffffffffffffffffffffff",
+		"85b8870bd7c1686f7cc5a5c108d65c6dd0976aebef00cd52d4ad12ef2e0d21c6",
+	},
+	{
+		"00000000000000000000000000000000001fffffffffffffffffffffffffffff",
+		"536de5a379f6682a888c706024413c479804acce64e8adfeeee998c979ad1bb4",
+	},
+	{
+		"00000000000000000000000000000000003fffffffffffffffffffffffffffff",
+		"59b529faa72b2ae5dd930ce86455c28d362a6f05f369aacab78e5b66aadbd8ee",
+	},
+	{
+		"00000000000000000000000000000000007fffffffffffffffffffffffffffff",
+		"59e9c82a888fd15974d50e69abce24ccc9867b33c18e074803755c0014973f86",
+	},
+	{
+		"0000000000000000000000000000000000ffffffffffffffffffffffffffffff",
+		"3c132bc30c365d12f6bb5a0e5dc5814e73e5c88f4db0697fe5736dc07cea449f",
+	},
+	{
+		"0000000000000000000000000000000001ffffffffffffffffffffffffffffff",
+		"14da7ef6441b998f7504aa6e69a057d0601058ba83918038c31e3b64d36c0bf8",
+	},
+	{
+		"0000000000000000000000000000000003ffffffffffffffffffffffffffffff",
+		"750a778deb78af0a8314da190c608e617eef84a7ddd25661622cf4424485f680",
+	},
+	{
+		"0000000000000000000000000000000007ffffffffffffffffffffffffffffff",
+		"4ac1121882d57fef1eb3fd6db58d6c4a2916af0bb138921ee7a58b379e628cf9",
+	},
+	{
+		"000000000000000000000000000000000fffffffffffffffffffffffffffffff",
+		"ca99de3c951bca726476a4d30582698d8b89f8bb21db74303957ebc825c5af9e",
+	},
+	{
+		"000000000000000000000000000000001fffffffffffffffffffffffffffffff",
+		"b83b2a0fe8fa6daca4ad4a27d7ba39df4e4a3775cb94e243637077ea2388cac8",
+	},
+	{
+		"000000000000000000000000000000003fffffffffffffffffffffffffffffff",
+		"43838e605c7bc2741666b11644d2d2457b60c6906bee3761c04d1344b512eafb",
+	},
+	{
+		"000000000000000000000000000000007fffffffffffffffffffffffffffffff",
+		"b03b8f817dff21dcaaa951450d7bf3aa61350a9f007c9f7ee1bf6bab8c60c5da",
+	},
+	{
+		"00000000000000000000000000000000ffffffffffffffffffffffffffffffff",
+		"a86e6405627142500bedb8ac38ca2fa835034b9a5d4ec408377d025205b5a8f1",
+	},
+	{
+		"00000000000000000000000000000001ffffffffffffffffffffffffffffffff",
+		"eaa54d824c848a330b444b3fe26d34922aad898019f023ae314da7391c2238bc",
+	},
+	{
+		"00000000000000000000000000000003ffffffffffffffffffffffffffffffff",
+		"2f9a0b62412017c7103b1e6346ce69a4e34cd86ef432eaa5f423c7c51590f1d2",
+	},
+	{
+		"00000000000000000000000000000007ffffffffffffffffffffffffffffffff",
+		"324eec973a2e9a653cb3159b22bcad4c0691000759ab3e9e3970f64b0b34d60b",
+	},
+	{
+		"0000000000000000000000000000000fffffffffffffffffffffffffffffffff",
+		"2c5769a44e2295b5b8fcb7571dfee94644947ae370e00160390dd426ffbbec17",
+	},
+	{
+		"0000000000000000000000000000001fffffffffffffffffffffffffffffffff",
+		"9bbe9184e544f10f9bd9c7cb83d7c0efa52c37e79e168d09fbb0787b49a87f04",
+	},
+	{
+		"0000000000000000000000000000003fffffffffffffffffffffffffffffffff",
+		"c4201b6363068f7d547bcd7a6d36dec5655aaa5bd1f56b27998f2840d81fe9ca",
+	},
+	{
+		"0000000000000000000000000000007fffffffffffffffffffffffffffffffff",
+		"23bbbec2e3dac0fa5184f871a528ba293ad14844f0f39d0829e3945f537a6abe",
+	},
+	{
+		"000000000000000000000000000000ffffffffffffffffffffffffffffffffff",
+		"f5cce2fafa862ca5816568b6741a111ae34457750d5c3605d873ba326948851f",
+	},
+	{
+		"000000000000000000000000000001ffffffffffffffffffffffffffffffffff",
+		"6072cf01a0ecec8d953e4c82398c17d917075ab6663c1236777f1f3e71b8b68c",
+	},
+	{
+		"000000000000000000000000000003ffffffffffffffffffffffffffffffffff",
+		"57e048ba924cec220e656bc917972b51ae9d7d852cf3610160a23823d445f172",
+	},
+	{
+		"000000000000000000000000000007ffffffffffffffffffffffffffffffffff",
+		"0f6f5bb327e03610488f43d693af83db2bcb3660ecbe82eb57522034ab6891e6",
+	},
+	{
+		"00000000000000000000000000000fffffffffffffffffffffffffffffffffff",
+		"41ba237c634f19e67a2b9d20b97a3aa1f2fee430351d7d0d77f778b6574657f4",
+	},
+	{
+		"00000000000000000000000000001fffffffffffffffffffffffffffffffffff",
+		"4d3de0870c033814cdba0a7567036165076bb704a00fdbaca7f56c174521a8bf",
+	},
+	{
+		"00000000000000000000000000003fffffffffffffffffffffffffffffffffff",
+		"d1829c1bfb7e47574ee15892ab5bd6603f48a700de23921b611af77d8b53cbd2",
+	},
+	{
+		"00000000000000000000000000007fffffffffffffffffffffffffffffffffff",
+		"9d68592a6f11fbef3e50488520008352289bbabf109185f3550ed816cbd119f8",
+	},
+	{
+		"0000000000000000000000000000ffffffffffffffffffffffffffffffffffff",
+		"1d350e7c38c04b0db531ff84feb1c3682ef771ccb9c78fe511cdc483982eb8ad",
+	},
+	{
+		"0000000000000000000000000001ffffffffffffffffffffffffffffffffffff",
+		"7afadcc3ee51f1e564579a4a9022c345216fa7304e369a636f2f1cb5366245d7",
+	},
+	{
+		"0000000000000000000000000003ffffffffffffffffffffffffffffffffffff",
+		"087772be43e0432075cc40fa706019bab6c360424a2e92fcc09a668c74c8838a",
+	},
+	{
+		"0000000000000000000000000007ffffffffffffffffffffffffffffffffffff",
+		"b295343db1b9954074808693a063a98e0db73ee6756d82958774088200658b27",
+	},
+	{
+		"000000000000000000000000000fffffffffffffffffffffffffffffffffffff",
+		"5e2d65a9cbd750e6625136adc36743a3a3be868a9b11dc47cb43cc62cc8b44e5",
+	},
+	{
+		"000000000000000000000000001fffffffffffffffffffffffffffffffffffff",
+		"d4634bcd7ab19e495f33958d220260241049495323bf8f399a052bc0c4aebf82",
+	},
+	{
+		"000000000000000000000000003fffffffffffffffffffffffffffffffffffff",
+		"776d1c36aeed895d93a0a9f77c3cee839509c4b4310d70dc3e1377e92429a91e",
+	},
+	{
+		"000000000000000000000000007fffffffffffffffffffffffffffffffffffff",
+		"47e6d541728eebc14a91f2064f9adee2e8d7cb518eefc90e1ab9b9e7b226aa27",
+	},
+	{
+		"00000000000000000000000000ffffffffffffffffffffffffffffffffffffff",
+		"52acd12800b24b71a3d897f87f87c7e3067ff11b6a9c8194433de837907a44e9",
+	},
+	{
+		"00000000000000000000000001ffffffffffffffffffffffffffffffffffffff",
+		"f3b780ee34bac2a6e3d7f18d79ef377c0acf360d7b3a356755ccfd992fa5401c",
+	},
+	{
+		"00000000000000000000000003ffffffffffffffffffffffffffffffffffffff",
+		"acccd214a5ee00e8bd5378fd3f81dca3d8d7c2a77911d9de23c6f2a4ff3a9822",
+	},
+	{
+		"00000000000000000000000007ffffffffffffffffffffffffffffffffffffff",
+		"efc135fe960c36f0d0723f345cf07e5c5745cd1afa759aae882856e8c0f084b7",
+	},
+	{
+		"0000000000000000000000000fffffffffffffffffffffffffffffffffffffff",
+		"177908a9c7fdfb549a262dab3fb0da423b78cdeebf6fad1e73af21ab7f069e4f",
+	},
+	{
+		"0000000000000000000000001fffffffffffffffffffffffffffffffffffffff",
+		"a8a647b2f2e270395f8a08c9ee6d2bbe798922b9b725166171bf0620947195d3",
+	},
+	{
+		"0000000000000000000000003fffffffffffffffffffffffffffffffffffffff",
+		"1f2586baa4405dadb0c2f058c411b0a0b562f0fb61e81e640be920f0acb878be",
+	},
+	{
+		"0000000000000000000000007fffffffffffffffffffffffffffffffffffffff",
+		"77f194a5cc292e6ff59d5cfd3a20bcbb4ba64f2d7fe08287a5a799826bb81c3c",
+	},
+	{
+		"000000000000000000000000ffffffffffffffffffffffffffffffffffffffff",
+		"a959120f264318103030292ad5ae269f7e2f8de4fee18acf5cd91fe2470c2462",
+	},
+	{
+		"000000000000000000000001ffffffffffffffffffffffffffffffffffffffff",
+		"a5c06b8642b0fb53cf768ba7a1fb73098b1afa6bd1b5c88fa0f58b078345ed70",
+	},
+	{
+		"000000000000000000000003ffffffffffffffffffffffffffffffffffffffff",
+		"1d55c87a334ce5d433bfaa49216e54e664919e525497106ce94fb89dc13799c0",
+	},
+	{
+		"000000000000000000000007ffffffffffffffffffffffffffffffffffffffff",
+		"643c14b58de857d19a1ca0a3440b7b10cf6c077fc69bef47770a3d9af9da6de7",
+	},
+	{
+		"00000000000000000000000fffffffffffffffffffffffffffffffffffffffff",
+		"b69a7f9bc3c03ecb7f8933e9f84561ab16400262ba30cc4adbd46036d46c7d89",
+	},
+	{
+		"00000000000000000000001fffffffffffffffffffffffffffffffffffffffff",
+		"a9fd55c5b8ddd8c99ee4683d68eb4b54f78777b87708bb9de23d98ee7ae90943",
+	},
+	{
+		"00000000000000000000003fffffffffffffffffffffffffffffffffffffffff",
+		"b2ba5ba2fc6fc46833f79e3d727b0dabff136b0753343be06e2e7ed9a2e5f472",
+	},
+	{
+		"00000000000000000000007fffffffffffffffffffffffffffffffffffffffff",
+		"bee48677f955926bdae83955e131538f327977d89608119584ccceffa4a0d875",
+	},
+	{
+		"0000000000000000000000ffffffffffffffffffffffffffffffffffffffffff",
+		"45dcc75c44c0add6d0fe2663c3a3a3aca618b2863ffe9eef4288f44012964db7",
+	},
+	{
+		"0000000000000000000001ffffffffffffffffffffffffffffffffffffffffff",
+		"b9103e589c62809a1558cd1bb70c2bbd2dead5287d72abb6b0d3cd6a3b45d7c4",
+	},
+	{
+		"0000000000000000000003ffffffffffffffffffffffffffffffffffffffffff",
+		"dc0504aeef90d84cc53a44d629bb323467984158f6044c96caa0c440e27ba6fc",
+	},
+	{
+		"0000000000000000000007ffffffffffffffffffffffffffffffffffffffffff",
+		"4980e9ddc1f5237c3838d485c90704bf3815ea780c5ba6d82c84a6f74bb7b581",
+	},
+	{
+		"000000000000000000000fffffffffffffffffffffffffffffffffffffffffff",
+		"66bc88b34616e96d8fdba03c58fffe871c55d6e377d197a37f330757c21c5ed2",
+	},
+	{
+		"000000000000000000001fffffffffffffffffffffffffffffffffffffffffff",
+		"d36591f39d9c8a895d5ede259ac8747727714e66310a97319468612241819ca2",
+	},
+	{
+		"000000000000000000003fffffffffffffffffffffffffffffffffffffffffff",
+		"a210f991b472e64eb15d355cbf78de47f31c171bffcfbe63a968324948efc835",
+	},
+	{
+		"000000000000000000007fffffffffffffffffffffffffffffffffffffffffff",
+		"c4b5f1f65b86d1cf64daaa39004e5725949157c39b07663d5915dae992685088",
+	},
+	{
+		"00000000000000000000ffffffffffffffffffffffffffffffffffffffffffff",
+		"327c73ab2a3c1a84899a5fd4e2c03b6ef76e25891c55471cb6968aedb91f6788",
+	},
+	{
+		"00000000000000000001ffffffffffffffffffffffffffffffffffffffffffff",
+		"832a5bcf28fca674b18e90bcfd27ef5b56757e920c305a928f4aec50acb0c288",
+	},
+	{
+		"00000000000000000003ffffffffffffffffffffffffffffffffffffffffffff",
+		"e0fa059959d06e267b5adbffc6d2af201e3ab563c3647f4d8ce57382c00ef206",
+	},
+	{
+		"00000000000000000007ffffffffffffffffffffffffffffffffffffffffffff",
+		"ac7f36ac119b5c16657df9663bb2d3ad13edf825e1dd18ecbb74055f5c931587",
+	},
+	{
+		"0000000000000000000fffffffffffffffffffffffffffffffffffffffffffff",
+		"f670ceb59da5f8d1dc9578333a66613465cbf7dcf0c726fa0d1875e45660c835",
+	},
+	{
+		"0000000000000000001fffffffffffffffffffffffffffffffffffffffffffff",
+		"17d5351e797f7a4b13237a8a293ef6771a9e2b177ad2ef88929b4f73bb6c9ae5",
+	},
+	{
+		"0000000000000000003fffffffffffffffffffffffffffffffffffffffffffff",
+		"9ce34dea99666abcf588ffd416562e9d2bfd5181aaffea3866fa7349b83351bc",
+	},
+	{
+		"0000000000000000007fffffffffffffffffffffffffffffffffffffffffffff",
+		"d8a43d5938bf19bd1e82b06e3fbe6815a356553b63c2d4078057d1db3f873a98",
+	},
+	{
+		"000000000000000000ffffffffffffffffffffffffffffffffffffffffffffff",
+		"cc471a2cfa99121b5e1e19802df411d18a45902f497a31bbb1ef013536328f97",
+	},
+	{
+		"000000000000000001ffffffffffffffffffffffffffffffffffffffffffffff",
+		"86c431e96f60487a94597ee44031ef339d236acd64e719e59e0164519d899613",
+	},
+	{
+		"000000000000000003ffffffffffffffffffffffffffffffffffffffffffffff",
+		"2c6c8e52e1355f5e6aeca7f84e9cf07ec6b9a1670d9585ab36ca7a7b009abc27",
+	},
+	{
+		"000000000000000007ffffffffffffffffffffffffffffffffffffffffffffff",
+		"fcbc12e5d46353edb6ae539fe9c04fd6e534c5347f14f516b47969094daee152",
+	},
+	{
+		"00000000000000000fffffffffffffffffffffffffffffffffffffffffffffff",
+		"93a73781e331a283a7ec1d4fd1d38f9e65e92a24b72842bcaebe12cc8deb576c",
+	},
+	{
+		"00000000000000001fffffffffffffffffffffffffffffffffffffffffffffff",
+		"a4572cde43bdd514f06380d317acac0bda1e869835b117dc3f79c370b90d89a2",
+	},
+	{
+		"00000000000000003fffffffffffffffffffffffffffffffffffffffffffffff",
+		"c97f88dbcc10ca57252cf444ea2a4f5200b657cc8938033affb8e1d7b5db1a0f",
+	},
+	{
+		"00000000000000007fffffffffffffffffffffffffffffffffffffffffffffff",
+		"bc89f9b7ca800a826851a955db47ef1a16f07ac48dff4b1f5fe68ba6691c2462",
+	},
+	{
+		"0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff",
+		"8cc76c69c3a3b9be334f2ee110141cfa554ad45b7878c18ea131fdb6a2285ca0",
+	},
+	{
+		"0000000000000001ffffffffffffffffffffffffffffffffffffffffffffffff",
+		"0919f5b17a8c888d2a8bf118f6819334bdb6385ddd985ab9735a97b2e058c476",
+	},
+	{
+		"0000000000000003ffffffffffffffffffffffffffffffffffffffffffffffff",
+		"f1ef025f0500e5e3fbabad65f15761fddc0ebe4c502ddceec39c6ea0162f6cbb",
+	},
+	{
+		"0000000000000007ffffffffffffffffffffffffffffffffffffffffffffffff",
+		"c933c03ef8054fd14bb606838fe6838a124f5a8ca8371077188b4298a03bf323",
+	},
+	{
+		"000000000000000fffffffffffffffffffffffffffffffffffffffffffffffff",
+		"fc871f839d143c46dc1018ec8d0faff83dd1409508a5539fb2120a1002a01eb7",
+	},
+	{
+		"000000000000001fffffffffffffffffffffffffffffffffffffffffffffffff",
+		"ea2ce600eb8c8857183c49ed56753d6fb532ffd71afdfd13d8e31275bb2d71f3",
+	},
+	{
+		"000000000000003fffffffffffffffffffffffffffffffffffffffffffffffff",
+		"cc26f1780d69d31d9f7fe6ce2029d60e13b554587658ce179b2987504273cffe",
+	},
+	{
+		"000000000000007fffffffffffffffffffffffffffffffffffffffffffffffff",
+		"5a4dbb82b26be036d93e3c772636107a7cbf5db6e98fa831bad9d94145758f51",
+	},
+	{
+		"00000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"6cc8a558df0ff4be09ffac8ac97e1383bd0bf094de021cbc7aa6f8a004634d8c",
+	},
+	{
+		"00000000000001ffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"2d7c78b8899ffa31d06a77fa31b135b51a6c02c1272aba35ef14b0e8751eb57b",
+	},
+	{
+		"00000000000003ffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"617af07f61635a1d0ea707b5c31a71b7c76846d134f5e28d7f2e32decfb3b1fc",
+	},
+	{
+		"00000000000007ffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"4b5e2bb59f7cf1a3d0f73074ea5d8b0cc357a10f5c19192867b855e86354a388",
+	},
+	{
+		"0000000000000fffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"8dfffbca56aed078c9fff444a9e145644003491dd1bba4d388e17d552f6b1b00",
+	},
+	{
+		"0000000000001fffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"3c5c11d05e0a29fa1c7a1d4518306710570b3012eac2076dea7e44b0b5387010",
+	},
+	{
+		"0000000000003fffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"897b54c8505ba454afb0e11a996721a8d9a4b17177871d926b7cc25f000d3d5c",
+	},
+	{
+		"0000000000007fffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"e17ca42ee1833952b04f5619936bfeed51a22c4c8f8c42277b5acdc751f03567",
+	},
+	{
+		"000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"f3aefbb046a97a23869e1c99ee094774ed13503fec1dd261c599bdc6e0d05cf2",
+	},
+	{
+		"000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"5d523e64824ad845d2c0585bc9c534ab4876b45e237f0571336dc5170adbe15c",
+	},
+	{
+		"000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"f5f369f03b9c61bf7764d5a21073f4278edd5e15d6282c25f6f383472e9955e8",
+	},
+	{
+		"000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"3a5925800c72a2ac8d3df01b6a7c62eeae32d28b77b6e43a76b33a60381b5551",
+	},
+	{
+		"00000000000fffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"5e96b7333ba92ee40b97ac0a5ad5cac493eafc9fe5559780a30db20ff24f42aa",
+	},
+	{
+		"00000000001fffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"f939e1c63b1bf65ba2ffca7c4ff6cb0c5db4dd0d2694ab077f4548e6e5cd4a98",
+	},
+	{
+		"00000000003fffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"96344d876f23f7e772aa1c5e70b469b85cf2cc1609d776470f53cb9f6106264b",
+	},
+	{
+		"00000000007fffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"b2ec6692b7ce07fd320dd0f7541adbd3929e29db3c334f3b38011fbab671086a",
+	},
+	{
+		"0000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"df59aa057a2b5e5b83d162c20e6555b168745f250230a1aad460c64c77aeaeb1",
+	},
+	{
+		"0000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"11ff287e9aad00521fe0e890b8ff01d9cd72df935907e11412e7baf159c43b9f",
+	},
+	{
+		"0000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"d68bcd61c9bb213f6e4a35dff889171ca4253ef9cb795748eed2b5daf91e1b5e",
+	},
+	{
+		"0000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"28db7f840b1d155c6defce9dd9ddc719f86e0e8ead2854d0e2d3cd1f0ff5c720",
+	},
+	{
+		"000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"fa7e1299bb4f4c7fd158f7bb8f5344002aa8015526a757585c7674b455a6d93a",
+	},
+	{
+		"000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"efdb40104f6e4b9b67ace8247b2d297e5463a27483c92bcc8d5e0e9f076dfd4c",
+	},
+	{
+		"000000003fffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"c3db720b3c962dc80fce41cb316dd6d3d2166f09897b1471a55b159c67daeeab",
+	},
+	{
+		"000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"3e1d8ca8a27f1b3293a8c12c1a320a718470a4059d841ae5fae44b64263132a8",
+	},
+	{
+		"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"34002990e9fcd2a93bf6319aaddcda43be75f0879aaecf7e4b5bc6ccbbf8be8a",
+	},
+	{
+		"00000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"31db74ce912981a151d0af4fcdc5d151a38fa532349334a6af9c7a5198cfbbde",
+	},
+	{
+		"00000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"b10582605187f18e4677d46e11b8f469b4a1b52aa52866c3e6163bd45b8ab0fd",
+	},
+	{
+		"00000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"8fa00d6b3356d92164b8f962cdccf766d6d70aa1ce95f0505bc9e371f847e844",
+	},
+	{
+		"0000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"98eef0c7dfa81f38c1733f5614002fd68393711ec1807e3f9a07e23eafd90c45",
+	},
+	{
+		"0000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"4301309cf44e937f0828df745d245c804482d81cef8f42b790272f4af7383dd8",
+	},
+	{
+		"0000003fffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"0e0c886757e6cb4675cbadf68516c41288ecf3c3a3c4f17a6f50e8708affb825",
+	},
+	{
+		"0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"333badd8bcd0598a60655880a0a11f1315334b5be06d24c780ee0720ca869109",
+	},
+	{
+		"000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"79ddcc400b6538f42efae783b58a81e547ce9db98e4abf890868664b921eea71",
+	},
+	{
+		"000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"da2859333d3a559659f8e0e8ed26252b84b394d0b5af4f6276481c0d505995a0",
+	},
+	{
+		"000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"ca88ea38b9ccc24d55130b85af16b8eff5bdda3ed2a20f221fe4296173ae1596",
+	},
+	{
+		"000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"fea3b0e49d44ebdc6f5456f839212b6f9a18ac4b8e2785350e35e1c9a1530a1a",
+	},
+	{
+		"00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"417fa9fd8e3731723b5acb507a7ed3e5e17efe87213c9e4b5a4511bdba6cecf8",
+	},
+	{
+		"00001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"b68d9aaa6c0ebc04430718e3165217d8a5c0072ced3e49a8596bf8ca99f4ae90",
+	},
+	{
+		"00003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"4af7fa3c8b669a3a8b5f141b6e2261b1b876d4a5ffb039f72f8b57b8193b3dbe",
+	},
+	{
+		"00007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"38ae694539e783fc99d42de7ed1e66ba96f78bdcf1c2ade0c21340821005e325",
+	},
+	{
+		"0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"90925d132fc28c3e79425d07e439c484f363d8a5a0ad6ce41b06d9e261db7fa6",
+	},
+	{
+		"0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"d834d1d0305ab48d7e9472853d96aa8364a45f46590c17dd8ce618e11c403e41",
+	},
+	{
+		"0003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"03fcdffe08487b35db3f97adb0f25234208ea33f08d432c94dfbf16edd05c387",
+	},
+	{
+		"0007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"eb38d7a1a6a0bf6c08af63671da8a1617987cacef2da7031de1e29e282ab3e48",
+	},
+	{
+		"000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"11f93eeb6ed319e44b3ce9a352490209a67a2a5508f6919380ceacff9c582873",
+	},
+	{
+		"001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"64b75ad0ecaf23e0d242421b676084940b4736e82c94ec9172a354370148a187",
+	},
+	{
+		"003fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"c8c308d2ae4ecf8a767fac1152917cc9a86004c3758a8d8fc67a1bad1a29b7d0",
+	},
+	{
+		"007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"c2be5064cb5a24fcb6a02e300af1369275b7844e25e41f495d653615bc173161",
+	},
+	{
+		"00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"4883cdd46d25b3979ff231fd4389dee1ccc1f7ee713e1d34b024c1b7646fcdd4",
+	},
+	{
+		"01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"1ced2fd7b28a1c658c34c7fcf439bc5a5ff35c5edc0d25bb97eb3e4540e7ad30",
+	},
+	{
+		"03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"59973b0a1a531bfacfe4aa521bc058f6d5cf3e029b605f32c7eee1e7feaf09e3",
+	},
+	{
+		"07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"0d1a5aaac94395b812ff4c3585f0ae4c3fa2392c5ad87e677dc3313e9fb3ecda",
+	},
+	{
+		"0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"e92385d2aa08cce7adb88ee6f0e5db68f4007455a1599b3190c22a845a9a110b",
+	},
+	{
+		"1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"fd7b68f682f41d9b6a118443977f8d306bb851d9e67b1064b9a8a46892b371b0",
+	},
+	{
+		"3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"d220f4fda389e1a2b5cb8eefdf8dee3cb60d2bdab3a11ca6fd115575eb750ea2",
+	},
+	{
+		"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"7604c508e08debe65816a6479de89f6268f69b372ec70cb91915a440a84bb317",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
+		"9aba9eb3f276bcb55c2b8df432bcb4fef02e1af5d05ccf51a53dbe6e3762ea06",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe",
+		"063fb73354dac568a50b23ff71b8407d8580314304513b7f920433b71091155d",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc",
+		"33d78077a260ad60eb641c3f2082733fc3b93cd76d796e1f5a5210ab1bcccf22",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8",
+		"2bacc7833e6174972c26aa3745b004485d3efb346f8997ae9178313beb708414",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0",
+		"4361c6950623350fc155deca02933a36b89e8119dbc2eee6f199da4496c16d66",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0",
+		"77df687237e75d47076517d8573ce79faf72077b28362cd66cfbb466cdd49d2c",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0",
+		"98b657ebff1fda6cf8bbcbe74f2e6e78a8c9ff69ca1dd7654294ed210bd2d876",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80",
+		"47bce7bf67a3e7af4e9309294dbf72b5e5f231738d297e8bacbd6093e2cd5144",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
+		"8a1c0fe7721ad136137ac21f7fdfa82d8ef8284ff690d408ebe43b779003e1b7",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00",
+		"c94311d05fa8090504fca1af89111435e370c7fbe55db10a419718477d9f91ee",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00",
+		"cbf2eb70b43b4dcbd944003ccaa697ff7be8ccaed56d1a90fdfaa49d62babb88",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800",
+		"3e6bc5c62507f0e3b29f419d6f28810d770b08eac86fe917448f60fa57287b42",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000",
+		"17a0e3ff434ecd65fc765203b8cf5915b4da9568de148a14c64d3297dd4d2773",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000",
+		"52802fbcd7a753a3f3c40208caddd464c9cb060ed6d8effebf038fbf739bfbf7",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000",
+		"cad9589655e44134163a6fa95225882af9ae8fb9c38ca278acd9c39c89c2f7a5",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000",
+		"9e020089356fddcedea0992abb4e14f2848e67c52ad4b42fadc9d4775e079b4b",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000",
+		"8c81f65f6db20b0ea9477a421c42a6496df905027e9d4aa8c17cf9c2375266cd",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000",
+		"03ccbe5002edeb0d4a53b9d29c21c2c7959d63db2f1d123fe17f3b2e992c2f61",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000",
+		"91252f90f6aa1b875ec9d928806de05ab71cec49c65f86bd09d7b49db988fb41",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000",
+		"2eb95393a15f722f09bc4396bc5ce9a364a8fda58bb67f003e0898439e07bd6f",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000",
+		"ebf3f328da5c7b5d2ba2fa975a11e35b369b0ce0fe8ad4e9aaae473d6a6ff6e4",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000",
+		"f990a70489cf77535b8be61add05e55e3368504843594bc761f7b0b509a1c3b5",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000",
+		"a966b9970f336119241f4effb9dc94a6927565b89904807e3809c6177669300d",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800000",
+		"9f72ba870f1a85772ae4922ad5af961c6f3bd534accdca18648f3a35fb6beca0",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000",
+		"69eb751a058a716ae38f1e7164e2c988f63c3283cdd289dbdc5833f51b9e8f2f",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000",
+		"d6dadd9053b2149fb7fda18f61f22e227602f89612ec035c76ec35918566ab70",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000",
+		"cf457f0c70ff68ed2c0fb21a34e2eea8d90690d0e8e277ebea8951c8d01a006f",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000",
+		"12e78d747630155d9339a99b9f7eb3b7f441400f89ca13d16718192dfbc95390",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000",
+		"573bb880d9429c90aa7793d837968dd25ab620ee2a5021435cfdaa86fcc93336",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000",
+		"24a6c484867bcec772d57fdf85543c95a04a1522a49ddbb8280a94da3b061edd",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000",
+		"68d741bf5b44909340f4814a5611e7e0f70359dd50caa1bf27229f86222c454b",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000",
+		"8a6a495a7b21ccbc835477633d610d1fe0888eff711c1baac40084c53a78bee5",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000",
+		"37d59d48fc569455ab0439ed103c27fdf18f39efd4244f50ce08f130db3a5fa9",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000",
+		"ef99ec2539c56548b29821c1b1d42bb65e87f126add22761a10370bcf40dda39",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000",
+		"cafc09274208638d96992086e636c14c67596be38fa14b229b36c4378172809b",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffff800000000",
+		"699a45cfe273fafaec9ea9d663c1ef2f18fa2586157ecaf3ceac8e49dfd35727",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000",
+		"926c096d5fe0a9ad28ceb147097492c059c114a35102ed5db0e2ac5f7774f814",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000",
+		"48263a69982594b105ac0d808cde5880c3ffef66c47730eb31e3e4410dd7b68f",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000000",
+		"6627bca14c16475112c3d5f1fa094c6e0e42f90b79a9079deb4c80b0d7ab7edb",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000",
+		"8c21fecec3b5fdc19fbe541eff875d359fa76753b546ffd8bebecae8b4c000c5",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000",
+		"c4dbb9f27f9993f6aba09b11e42df3067dd06fcb92bb57d8bad4102a8537f5c4",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000",
+		"96ad81df72fe2eb25597dc3e74a8a000cad514b260bed959b38785e9eed0e559",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000",
+		"aa637c19ede041be9d14d6a37aa1e2099971b6590373e2854acf074ce75e0c40",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000",
+		"42a0ba67830de0dec920c33c26d9dc3875ecdb8bc6d1f441c74226ee0ce01cb5",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000",
+		"47390113c1be8ee2d303b0467e2ac5eba23317ef9091478f5ea231e34c8af822",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000000",
+		"a2c54fa7a2c88e50c6d996f863b8c12488fc27ee5913ea3e458859c9ed927c46",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000000",
+		"c9eec22634ce840fefa7572cbddf99a53637104eb8e1031b11574acb3a014b42",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffff800000000000",
+		"b79f4c642a1ca091284d1ee48cfabad6f0b151db9b9acb08a84d8ed96f1960d0",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000",
+		"70f8da015869e61bde5153656f58c8c5b5780910c91548fb887e5d21442eb5cb",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000",
+		"2b5d52599ba9d8358af2bb1a7433c6ad3339d244c1ef2718de7bd9b4ae749fc5",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffffc000000000000",
+		"ffd2232f302a88a40b624645d4cffe7bf75de4b44ffeab2fc5a5c4080e912cb3",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffff8000000000000",
+		"13ce8de4ba2f82e5cd5fbc1f5d7432512750f0ce67d4d6efbd1c6ab635b01703",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000",
+		"7cdf263a31299eb241a52c14bf734d885a6afafcef6fbdd2927032a15b406dcd",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000",
+		"22d4ef451406dcfe8d0e84906cdd9500d60f48690f180bb3fe86e21570c7e522",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000000",
+		"fde682d02bc1ef8deb9a473f86b2fed737485a9eb5a8f3669fac7f1dbe552852",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000",
+		"dc2d1ee62ed3cc77328c6011646490c18394490a536ce59dd54d9a281f5e3dc2",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000",
+		"adbfee587107f83165d0a1ea8975548fb2de97b6b5e75b2b3172cc1ae5517ebf",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffe00000000000000",
+		"98baa1e794273ee539b8442bb92861bd8c92f30fbd69f82730ece7174d7dd2c1",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffffc00000000000000",
+		"05dee9b5d98a31174fbc806668dcd1a81775bf6ffc3a2a27072aef9d60b03cb9",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffff800000000000000",
+		"5b663949629f5df0f1d5b6cc575dce573c3e16e976239e062c1f54afb2fd7f94",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000",
+		"a9aeca2b76a543f85a221fa525b3ddba716bdd206c27ce29d285e0231cd73566",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000",
+		"f7cce909170325465f958b06967282485d4760fe8f7823fb1d8f1e44c8821c55",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffffc000000000000000",
+		"8840a0244a3118875cc2266c761f60eb81a4a9fdd39b663e6c4c318ac40d40fa",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffff8000000000000000",
+		"1527504a94888930611883818f7cb512d4a47620f6733333f12e85932ee0e0a3",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000",
+		"490a6714da32ec34723e76740c05b8458444901a38b547b5e929fe6dd7d81cfe",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000",
+		"997ff68eaedb5f81b08b949dc01e3b3383ba02f4b9d3190d4f30586f0cd4d408",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffffc0000000000000000",
+		"be1bcbed5f1d20860ba1bad94b108056b2fcd8a667e8dd0fc737a59fd9cfb750",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffff80000000000000000",
+		"ce0052a615eecbc2eff22ea00fb92e29e6474ee1f0ef739e07dfe87e1090f207",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000",
+		"95606a3968ea651510078e095cbb19ffc01d651201952158d16e17306b4d9a36",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffe00000000000000000",
+		"fccdaa92fbe3e088d7dd72f81331e28593fdb9a40721f116e479cd59a12e334f",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffffc00000000000000000",
+		"3c641f84a96b234b4c57696f4d67c134c81a5a89fb1428932d66d39c9e1d87c9",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffff800000000000000000",
+		"1f42eb51efd0a36a98574d6e20a61bd1284330f172d725d4fcbde2de990bacf7",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffff000000000000000000",
+		"35a8df3c4324a1bc20cdbbf36732a4d53978e57f74d717d49dc0280e2f91796d",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffe000000000000000000",
+		"283b6572e7880f9ed88dd19505e0a035c7d017cf7b0977bca34a2a6321f9da1f",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffffc000000000000000000",
+		"ade08a866d83f0fc143e949ee0078fd8b5987feca923fbcddcbf4e8e524f51b1",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffff8000000000000000000",
+		"261e62dbc80582170e6dd2da9a02cacdb564f889854d31db3cc1b72e7eef17a4",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000",
+		"d95af8d5020515559029486664d6d37e1f638db543b137505eac0b97ef223f55",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000",
+		"545a1574ca0303f17f6e427571fc05138b0152524d9603c497fe879b4e9c104a",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffffc0000000000000000000",
+		"6a428751f1a79b1dd50db50e8ca5fc6f4e83d346ab7927621c7fa60a048bff99",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffff80000000000000000000",
+		"17212358419bf23041439207739a3f346ae50cd68874f43c6f5d4ce1f0a875a0",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffff00000000000000000000",
+		"77373f0cc48f9156d45b41c550d1631f9d30f10743c6c8eff23baf103271d577",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffe00000000000000000000",
+		"f7886df6ceec1ba300fdcdc90e86a1162326ad2bb1f75f6b88243dc4c4f42a54",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffffc00000000000000000000",
+		"9329678a334b2793d277d55b51692b68f28035cd6301d4f2af26be6904a41e43",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffff800000000000000000000",
+		"3d60f010958309399868ba02135a1812fc8c60314376f287edb2492a425bb2b5",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffff000000000000000000000",
+		"b66ea2de784963bc5f5943f8d707591eaa93198c0a38767cfffb19bc2c2e6c65",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffe000000000000000000000",
+		"1c2fa722c14f63c496215b7adeebc80243ba747b9e90245de2c3a60b5382506f",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffffc000000000000000000000",
+		"4beab5b121e941867df2c175a9cf5e58f32a533dfc75ef6eb9d285b6fbba1d0d",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffff8000000000000000000000",
+		"8f9cf5d639aa3695de809f40b36debc53e75b649f5c6a7e4f7cd79bad8500634",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffff0000000000000000000000",
+		"918b4afb68f93844b0e66268f19deaa41143785aecd0f2ab22c8dcbb5a37d987",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffe0000000000000000000000",
+		"65221348efc3e6b148d948c5f707ff67e33583f942a2e0bbdacc7d4e35601be6",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffffc0000000000000000000000",
+		"a0fba59f7aee4396ce94fb9fea8cf0f8215a5c9943fb0d400dd037d94a165369",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffff80000000000000000000000",
+		"352797a5389058c407b5ef9dad6279ef8b823e7e89c780073ef56bedc919070b",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffff00000000000000000000000",
+		"c3d1a79435bc4d3ab7b24c142f128267a06fac911b90eaeaf0b7c846f6acbda6",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffe00000000000000000000000",
+		"6d534402d503d443270282f40b3cb64a4a48823a9be27662beb210b63cda04f9",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffffc00000000000000000000000",
+		"2f6b45a35ec0d7581bccd9349b97ae41d487d01b4e06d61bf68530f56093b398",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffff800000000000000000000000",
+		"4c5ce1e41d529b7655701fa1b70c20c347156996cc484a2640d2df88f5cf5c5b",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffff000000000000000000000000",
+		"06c79934e386931fc31191ccf7c49a9717c8e7a2c2f499703882627258df18e9",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffe000000000000000000000000",
+		"a902daeb5dfb9df8a3b3df5062bb6a69b6276dd96e561690ad7999590c342e79",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffffc000000000000000000000000",
+		"87331acb72ad23ae4a77f0d4968043d71ee92a3d46a78f99ec96c635aa1164b7",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffff8000000000000000000000000",
+		"8b092596b550f2b881d257ef972baa5d8e5e18f408bad160d1053460aaac29b0",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffff0000000000000000000000000",
+		"3222a5417ec5ca55bc91dfaa25d71adf5dca62d28d21c86335d480ecb11da5b8",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffe0000000000000000000000000",
+		"3b075740ff654e86b4eb92bce77df5158293019ee9fe97d83fdb3a61bb206604",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffffc0000000000000000000000000",
+		"e1dfeaa07f04fb100c0a4000bf9c217a56a0e3a7240042ad016482fd43136181",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffff80000000000000000000000000",
+		"216296c485d1f6b55c99c65b9db4e1667f537efac9ae6423fbe447483ce6306c",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffff00000000000000000000000000",
+		"a0187ebd67e23fb4850354e2ced731cd7dbdff9587d6d1ae1b9262f23f509f03",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffe00000000000000000000000000",
+		"89205b26b196913a15ca122dd6b6d8b7fdb0c7d63dede831932b5739c76044f5",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffffc00000000000000000000000000",
+		"8b566992565f8de1cd32e4d175d652e9f5f05d6b2c005aabb5c16f19b1ceb7ee",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffff800000000000000000000000000",
+		"9602761ca3a146cbd9a74d0e09c3e4dd0f0165e4433217a24b95cf711e58b2b0",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffff000000000000000000000000000",
+		"d10d0f201480d54e48d25c178d6c6da4d85485fa992df4ea3759200cb496eddc",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffe000000000000000000000000000",
+		"12ad30b410fd780ea7c1e288f8ab8cd4e0b48a7c94a8fe4713d003b402003652",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffffc000000000000000000000000000",
+		"6d39b2e284fd0b7e39391126ad21d96f7d07e4e223c6575c2fdf64b9bdfdd614",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffff8000000000000000000000000000",
+		"c113bf8f7462aec8e6de230b180548ebf664ab08ea758beb7a40ffdee4e0e39a",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffff0000000000000000000000000000",
+		"c224accc3e9d6e5522481419ce27aee1ea6a9773b15de1019134d3345b5d6a47",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffe0000000000000000000000000000",
+		"1ac865a6d8e9abc97d727440c73b1c6f9af17ca6a51e9a15dbf2106fc2c1cbfb",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffffc0000000000000000000000000000",
+		"b355d337a4093f6fe010ed473a5f792b488188dbd75f6e408b28936c37e9fe87",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffff80000000000000000000000000000",
+		"79e9ee44ec71ba50c580d05015b713ddf29839d3ccf335362886dcad614382ef",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffff00000000000000000000000000000",
+		"2e25523fa4e6ea3b866478f31034a845a21735d5eaeb973a969e2800ede18042",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffe00000000000000000000000000000",
+		"e4ffc7cca824cb6560dc271b71b11fd4c59d6280d785bc690ac8d461b0852137",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffffc00000000000000000000000000000",
+		"69ebeaf7e002d26424111595b3aaa961a3db466940808c982ac9fa8a4952d4ae",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffff800000000000000000000000000000",
+		"3a503d90e7de5ee89ec27e7819103bf1c34ebe526d75bcffd6b80ff1e4a557f8",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffff000000000000000000000000000000",
+		"47ea7d93bc0f92b9561b5a5443ad3ba8bf10e419293890c7ba0560713d484854",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffe000000000000000000000000000000",
+		"fcab422dcbb5001a805b882a17ea43685006a267b50f705db21cd307acd5ddb5",
+	},
+	{
+		"fffffffffffffffffffffffffffffffffc000000000000000000000000000000",
+		"d5119b8620703e0404fb253da8464c98efa0eb260d312b58f00a6abaaa23e317",
+	},
+	{
+		"fffffffffffffffffffffffffffffffff8000000000000000000000000000000",
+		"bb26fa3190670e7d61c18674ef7960a29900c56ea63a5d6bce5f1c8c1138c891",
+	},
+	{
+		"fffffffffffffffffffffffffffffffff0000000000000000000000000000000",
+		"62e95953430515488b8a0e5fa83a554a7f40af22e8c6233c4bf344d226df75cd",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffe0000000000000000000000000000000",
+		"0a3fd62f3a16f9dff3e7ef23b7b30828a2ea9391c0b4c6fb83bf565b28dc2aec",
+	},
+	{
+		"ffffffffffffffffffffffffffffffffc0000000000000000000000000000000",
+		"c937e1dc996534e5a89680a877e8fa75f5e3e82fc1c01a68a4b24c6008452840",
+	},
+	{
+		"ffffffffffffffffffffffffffffffff80000000000000000000000000000000",
+		"a0e79594f2f1a72e686ed649d48c09af9e8586b4f122bb98e5a6f0cef5f69778",
+	},
+	{
+		"ffffffffffffffffffffffffffffffff00000000000000000000000000000000",
+		"b7397fcd4ee1a67955a0b18d7df8b6f65431eee90e69b258109520e405461a1e",
+	},
+	{
+		"fffffffffffffffffffffffffffffffe00000000000000000000000000000000",
+		"ce29427cdc81cedec90d5a27740bbab76ef0de57c0dbbbd33104f26c9643b6c4",
+	},
+	{
+		"fffffffffffffffffffffffffffffffc00000000000000000000000000000000",
+		"bdbabdd646d74f2f1a9f12059a16e5ebe1e189232db4273034bb653eb06c728d",
+	},
+	{
+		"fffffffffffffffffffffffffffffff800000000000000000000000000000000",
+		"5ede69ce5921454a374cd959fcbcbe429b54a3b6294f6fed946fec4635902bc0",
+	},
+	{
+		"fffffffffffffffffffffffffffffff000000000000000000000000000000000",
+		"4af2da9aedacbc063e901fbed56dce200a6ba6f20b7ef0dbe25a08c5cc12fea7",
+	},
+	{
+		"ffffffffffffffffffffffffffffffe000000000000000000000000000000000",
+		"f5c93c474ec48a1de77a8f563f428fe3dcf86179a243ed993e16594d48be15f5",
+	},
+	{
+		"ffffffffffffffffffffffffffffffc000000000000000000000000000000000",
+		"1d12762528e71f0f36d20d5feccb121f15b50919cf8cd5eacf77880db1b6e9e4",
+	},
+	{
+		"ffffffffffffffffffffffffffffff8000000000000000000000000000000000",
+		"1e6cf791397478f0d6b737c0c16ccfd21bb3f90534a07061e2b4c0c0c5fd90be",
+	},
+	{
+		"ffffffffffffffffffffffffffffff0000000000000000000000000000000000",
+		"0e8bc8f678eaa95fc5f7c74b4b9650c8d12bd1b9948d50758b49c1d9150b120b",
+	},
+	{
+		"fffffffffffffffffffffffffffffe0000000000000000000000000000000000",
+		"bfa5df629dcb36d317bf65f03cbd447f0116a541cfbd5f036f69d10089252d21",
+	},
+	{
+		"fffffffffffffffffffffffffffffc0000000000000000000000000000000000",
+		"da0c43f80d2e31538fa52c435dd0cc912d4f2a50d05bcee7ccf57bce5b8cf781",
+	},
+	{
+		"fffffffffffffffffffffffffffff80000000000000000000000000000000000",
+		"348e197f3d73d3372d09b78a71bd191f37db2205803b7af0feb8319eb3ef826f",
+	},
+	{
+		"fffffffffffffffffffffffffffff00000000000000000000000000000000000",
+		"f38d0494ecd8b080d5fb6a22caa79fe4fa55d07c0829133775ca981f50b4ecf4",
+	},
+	{
+		"ffffffffffffffffffffffffffffe00000000000000000000000000000000000",
+		"e664dcffaf56d1d607a96f3b03ecaab0556221bb6f143ec98245526f49bf5ea5",
+	},
+	{
+		"ffffffffffffffffffffffffffffc00000000000000000000000000000000000",
+		"5674e22377e58e5e9b4aa21784574bb06158b33c0f27cbadd2e8c16788101cdb",
+	},
+	{
+		"ffffffffffffffffffffffffffff800000000000000000000000000000000000",
+		"55b53571640572fd5e0ae1e2898be1ce7f9094b11cd29f5ae8fbebeb4d68f15d",
+	},
+	{
+		"ffffffffffffffffffffffffffff000000000000000000000000000000000000",
+		"006c53e88672ae99a0adfffbeb534d6f24224339ab09a77565fd0badffe92e6d",
+	},
+	{
+		"fffffffffffffffffffffffffffe000000000000000000000000000000000000",
+		"16375889fbef41700387959771fc83be823734f891cfb28a9264d63ead648857",
+	},
+	{
+		"fffffffffffffffffffffffffffc000000000000000000000000000000000000",
+		"465603cbc386239cc29a9d583a4b89c720ebf8782066cbdbd77b35fe4c157928",
+	},
+	{
+		"fffffffffffffffffffffffffff8000000000000000000000000000000000000",
+		"33f866cb1bb187690805962a3d3896f7e81d4db542ad80483fe7817a83716525",
+	},
+	{
+		"fffffffffffffffffffffffffff0000000000000000000000000000000000000",
+		"aef4012ab3c248d45de2a816bf5bbf0980224fe3312795a08d0cb77be64b36ab",
+	},
+	{
+		"ffffffffffffffffffffffffffe0000000000000000000000000000000000000",
+		"7e41ec11007a79baf33dbd3cc7b5fbb0dd9cdf5cfed5aac1639c753abd0945aa",
+	},
+	{
+		"ffffffffffffffffffffffffffc0000000000000000000000000000000000000",
+		"f349eba59ece08c7a7a90dc17e422f6e924b62bc2685d58ae800d78969f5e5ae",
+	},
+	{
+		"ffffffffffffffffffffffffff80000000000000000000000000000000000000",
+		"6631b392c867450035f688eb828ecb8a1bda3aab8469f3d4aafbd8ccb4db7963",
+	},
+	{
+		"ffffffffffffffffffffffffff00000000000000000000000000000000000000",
+		"c669a8d9a6c7663b6230c03d7de9ad23edeb655cb645683657fa45b378fecb23",
+	},
+	{
+		"fffffffffffffffffffffffffe00000000000000000000000000000000000000",
+		"b4d583e44e72dee5720d9b27afa7ef0c250d0173417d79a4a3d53c5f2e8a25a9",
+	},
+	{
+		"fffffffffffffffffffffffffc00000000000000000000000000000000000000",
+		"9699b21ae144a37884c422415984bb2755883e8bf6b8512b0ca4136500c4eea3",
+	},
+	{
+		"fffffffffffffffffffffffff800000000000000000000000000000000000000",
+		"26ec345117f2aec4fc7e0c0459980b8d3ed15e25c6f6ce6c69b6241047bb1f4b",
+	},
+	{
+		"fffffffffffffffffffffffff000000000000000000000000000000000000000",
+		"9f1c41c2ceb97dd4ab1a53773319a0538e6f8cf452d82ae47e4e9dc4114633b3",
+	},
+	{
+		"ffffffffffffffffffffffffe000000000000000000000000000000000000000",
+		"b8322f1d87f9add9be9e67aba9765736bd2bbde7c068492df9d0b3121f8d4ae3",
+	},
+	{
+		"ffffffffffffffffffffffffc000000000000000000000000000000000000000",
+		"9ab09e4304ac721163a2e4349b84f9d9d44abd41d418d44f7c420582d18d4e7f",
+	},
+	{
+		"ffffffffffffffffffffffff8000000000000000000000000000000000000000",
+		"92c6a4e17a1ef33ed6ab10c37ac30f8a12bf38d8c9a4330caab773e8a81e1335",
+	},
+	{
+		"ffffffffffffffffffffffff0000000000000000000000000000000000000000",
+		"a6f495690c0d0c122f714bb891f6a36514ab2c1b150992ed6219e6697f91ec75",
+	},
+	{
+		"fffffffffffffffffffffffe0000000000000000000000000000000000000000",
+		"84048121da02b32288803dbe946168a3c3d54396f29fb087dc3298dbb8232028",
+	},
+	{
+		"fffffffffffffffffffffffc0000000000000000000000000000000000000000",
+		"5318f10e888a5bb1f93e1dd391744e7786859435ca4c2b5452caf9fb4a83fe9b",
+	},
+	{
+		"fffffffffffffffffffffff80000000000000000000000000000000000000000",
+		"df575a171f3d7395fb9810e3c8c098c30e99509fab868ca37ec42fa4a81fa525",
+	},
+	{
+		"fffffffffffffffffffffff00000000000000000000000000000000000000000",
+		"5a9f7dc7d1288e3cfe3789b0e73f4839c4a62dc8cd036fe17e0acc5fa41e46a4",
+	},
+	{
+		"ffffffffffffffffffffffe00000000000000000000000000000000000000000",
+		"222652dcf1128a64b466fede13fbf7486f8d263c17f7fd41739224e15c689986",
+	},
+	{
+		"ffffffffffffffffffffffc00000000000000000000000000000000000000000",
+		"ac7d5a853009bb8ae072b372d9000d3ad24d0528303cee8e5380a0ccf1252fd3",
+	},
+	{
+		"ffffffffffffffffffffff800000000000000000000000000000000000000000",
+		"85bfc8ab8792a57bf52acabba68d9a357cc83a23fd50d7f4b790e46f1704fe32",
+	},
+	{
+		"ffffffffffffffffffffff000000000000000000000000000000000000000000",
+		"8a5fd0f4135b79e03f5111f0bec623e7286229fda85b1c0da6c26029a683c47d",
+	},
+	{
+		"fffffffffffffffffffffe000000000000000000000000000000000000000000",
+		"e269d580f38a9ea29b49cf8351a0c7ff9fbedbf0075acf56266d9b454e2bbff3",
+	},
+	{
+		"fffffffffffffffffffffc000000000000000000000000000000000000000000",
+		"b94bd206d7448288beb50d40c817daecdc93033bd6302f580627a569f3fb4def",
+	},
+	{
+		"fffffffffffffffffffff8000000000000000000000000000000000000000000",
+		"035fcee156098cc27bef07fa84879955969729cbe19f623d0b703d81162e5c81",
+	},
+	{
+		"fffffffffffffffffffff0000000000000000000000000000000000000000000",
+		"22f57e242192ef3cc8c0c81d180ec3f71dd1dad56042840345681775d4465621",
+	},
+	{
+		"ffffffffffffffffffffe0000000000000000000000000000000000000000000",
+		"e57b6a000208ee8636ddba7cd31ac3c6b47b85fa7158b428ebaa7f99a40ebad7",
+	},
+	{
+		"ffffffffffffffffffffc0000000000000000000000000000000000000000000",
+		"4001ddfabbff8229b26088796583f046eb83c7495743dab53c1eedc0dd9a3a94",
+	},
+	{
+		"ffffffffffffffffffff80000000000000000000000000000000000000000000",
+		"d6549ebbafebd03af582f89f73a50b198fc9cb125db1cc1c663ca77cd313219b",
+	},
+	{
+		"ffffffffffffffffffff00000000000000000000000000000000000000000000",
+		"6c7dbc1bda3b4210f560e7d8431bd985588120c9d1a3faf56c422a5594214d72",
+	},
+	{
+		"fffffffffffffffffffe00000000000000000000000000000000000000000000",
+		"ab8994923493b8a139e6d161cc0fe3a54544539d3de55a647db904d24995110d",
+	},
+	{
+		"fffffffffffffffffffc00000000000000000000000000000000000000000000",
+		"99fce83558a7a82db673227c906e02ac26643606750d0ec41ab2df1ba12e526d",
+	},
+	{
+		"fffffffffffffffffff800000000000000000000000000000000000000000000",
+		"a2c9ecebf75b14783e2dd0bba8c3216c85b3e6ee3130826e52e8a39eaf2a0b0e",
+	},
+	{
+		"fffffffffffffffffff000000000000000000000000000000000000000000000",
+		"df7fd177fdd38927643ba5e71dfb727feddf9f930a52f250bd70cdd527723430",
+	},
+	{
+		"ffffffffffffffffffe000000000000000000000000000000000000000000000",
+		"6a824a712c142a1f2d8d68db118c6fe2d50b4aec7774b2ebfc92c998d4fcc21d",
+	},
+	{
+		"ffffffffffffffffffc000000000000000000000000000000000000000000000",
+		"62ce16f28c60ce1d56956dfa863b4e90b22c4afd80ee1e4f4d13a9ad64b4d443",
+	},
+	{
+		"ffffffffffffffffff8000000000000000000000000000000000000000000000",
+		"c5d8e2304c613395a23c1f9d46792a553045a079b161d5df8fd25c93e73650f1",
+	},
+	{
+		"ffffffffffffffffff0000000000000000000000000000000000000000000000",
+		"fab159d44563097fa42fc56980598c0a79322457817d50dfc98c5677b10671de",
+	},
+	{
+		"fffffffffffffffffe0000000000000000000000000000000000000000000000",
+		"d76f6aadc0b3af98ce10ffda2b9683b51cd3b49af39826eadc1e745453a0be0b",
+	},
+	{
+		"fffffffffffffffffc0000000000000000000000000000000000000000000000",
+		"224b2d9a1320fdd9f947bd0292917b86798a31e90eb4b9db5a331be1753ce3f9",
+	},
+	{
+		"fffffffffffffffff80000000000000000000000000000000000000000000000",
+		"7d5b977076275559de4ebf9e8cf21ddaf7432d195fb8a725feda3a021ff1dcd1",
+	},
+	{
+		"fffffffffffffffff00000000000000000000000000000000000000000000000",
+		"7d90cbf4b2c9aab5425a42d07a2cdb81b7a7e714aedf71839ae870bbbf54d213",
+	},
+	{
+		"ffffffffffffffffe00000000000000000000000000000000000000000000000",
+		"023b34a5443655eee5af945d0c1c1c6ebab8b4afdc4a8cb6e7a26ab9fdc36ff8",
+	},
+	{
+		"ffffffffffffffffc00000000000000000000000000000000000000000000000",
+		"577f79ca1cb128b5befa37d0247d6bffeec35a5c0aedd903c9e9af28a6055ff6",
+	},
+	{
+		"ffffffffffffffff800000000000000000000000000000000000000000000000",
+		"86795f48d489eb38d5aa741e87477a4ad92011a6e6a646dae1b0096c021bbb6e",
+	},
+	{
+		"ffffffffffffffff000000000000000000000000000000000000000000000000",
+		"13e922bf853f8229d8eb2efee1eaf8a34fa78c77bbd604b6f1f58feb1c60594b",
+	},
+	{
+		"fffffffffffffffe000000000000000000000000000000000000000000000000",
+		"7d5c43e5f7383869f94ce7d58c7035134d642c12c0bb958c65e667009c27d24f",
+	},
+	{
+		"fffffffffffffffc000000000000000000000000000000000000000000000000",
+		"ce18001a06a96900eaedb469e43b2c293e2b53cbc0aad6fa8e7781cdb95adc13",
+	},
+	{
+		"fffffffffffffff8000000000000000000000000000000000000000000000000",
+		"cf40ac9efb76b9e5f45fb4026dbb28867dec1044baf2894fb266d6d650f0bcb6",
+	},
+	{
+		"fffffffffffffff0000000000000000000000000000000000000000000000000",
+		"bf75ebc7f26b1b2f49c9b804bb6a8d28cb589d20260540a2e383bd51c713891a",
+	},
+	{
+		"ffffffffffffffe0000000000000000000000000000000000000000000000000",
+		"3d4203b66a44593562042cd368b060e4a6af825ef31a601061b69ffa770b2325",
+	},
+	{
+		"ffffffffffffffc0000000000000000000000000000000000000000000000000",
+		"4dcb77138890b31d4508eeb16c13ff62b86aa15011401d0e9a11c4214a3bdae8",
+	},
+	{
+		"ffffffffffffff80000000000000000000000000000000000000000000000000",
+		"6c0bb3acb9f7b52a9dc9feb0be4e60511c3f91190b4932b9b46e796489947fae",
+	},
+	{
+		"ffffffffffffff00000000000000000000000000000000000000000000000000",
+		"4c0d3b1218416de152f4d240c50867ea3b6c664af2cb91986300b1a8ef5c6488",
+	},
+	{
+		"fffffffffffffe00000000000000000000000000000000000000000000000000",
+		"c727c4008d1a743348ae16c5f21b077b82befbcb0b0cdb81b9d574c917ef118d",
+	},
+	{
+		"fffffffffffffc00000000000000000000000000000000000000000000000000",
+		"edfd40fcb0aa8f81dae69e0e85d998e5433c43f8dbda7a2ff5e2a71dd97e4693",
+	},
+	{
+		"fffffffffffff800000000000000000000000000000000000000000000000000",
+		"304f113eb37e2bb6510508e95c20954057730c5cbd161e1aa4869ce9269e2a17",
+	},
+	{
+		"fffffffffffff000000000000000000000000000000000000000000000000000",
+		"278ccfc0990c6a03c1e496fd8a341d535c35df1d4f33b0527f0541e903d72c6d",
+	},
+	{
+		"ffffffffffffe000000000000000000000000000000000000000000000000000",
+		"67c91cd2aafb753b7d37249f3f65aed17c1eec0954b536a2ba4b1f534eff2d76",
+	},
+	{
+		"ffffffffffffc000000000000000000000000000000000000000000000000000",
+		"58d6a50a4c94aa89e5c32b2e2bc5f1e1ad99f802efeebb051a571e6e00f13c48",
+	},
+	{
+		"ffffffffffff8000000000000000000000000000000000000000000000000000",
+		"1f4f1210e6f658b0420af6464eedf9ab48737269847573c9000d98d3627413bd",
+	},
+	{
+		"ffffffffffff0000000000000000000000000000000000000000000000000000",
+		"c88c28ee869cac3d289d8e5a0a8125974dc1bf17f36581f41c92eec0f9144d99",
+	},
+	{
+		"fffffffffffe0000000000000000000000000000000000000000000000000000",
+		"12f1344c06129d5aee013ef5222bed3e8e55368a2fb4e32cc57dbea465d106f2",
+	},
+	{
+		"fffffffffffc0000000000000000000000000000000000000000000000000000",
+		"e1826921a58460dbb5cd441053dcfdef414b0055391f5faa537804ba364f4ee7",
+	},
+	{
+		"fffffffffff80000000000000000000000000000000000000000000000000000",
+		"2b96aab7b3b8a12b52e3e2168a2332a0294ca653eecf5f61f37d3b4e385d5521",
+	},
+	{
+		"fffffffffff00000000000000000000000000000000000000000000000000000",
+		"05ba9c08a932eb462d8ae0aba44e00b570715e159b5ca1f4d20162acb61223f1",
+	},
+	{
+		"ffffffffffe00000000000000000000000000000000000000000000000000000",
+		"d399689b8e9ea97913c7474739e64949d85dc1cb56ab087965ab7dc31cc9e57a",
+	},
+	{
+		"ffffffffffc00000000000000000000000000000000000000000000000000000",
+		"c91ffaa336bed78c9c52529b9efaa44acfe013a21b114a08b184a0c99ca676dc",
+	},
+	{
+		"ffffffffff800000000000000000000000000000000000000000000000000000",
+		"0c5bf349d7625f977f8b315d617eca51c5d547c5f9a4fcd29087073e973f8aec",
+	},
+	{
+		"ffffffffff000000000000000000000000000000000000000000000000000000",
+		"81c5990694a92ae1cf6d79cc127acdda6220a34e099cfa61e07ce22169f1974d",
+	},
+	{
+		"fffffffffe000000000000000000000000000000000000000000000000000000",
+		"78b6be4dd6f2fe2fc939286ec47b1d20d01614b61859450bb04daa5498de368e",
+	},
+	{
+		"fffffffffc000000000000000000000000000000000000000000000000000000",
+		"b18d0d7bb89729b7b976d87dcfb60c4a2398f4e4a5a985d9f8e8ba1e2e91b457",
+	},
+	{
+		"fffffffff8000000000000000000000000000000000000000000000000000000",
+		"e2a4ca2f19e995ab449a8be6f825255eab36190453b957165ed4b9f337fb8f36",
+	},
+	{
+		"fffffffff0000000000000000000000000000000000000000000000000000000",
+		"98b248ab26d4002f1e361d2887b95aedf3d11c31dc15b91cb5b660bb975b3ef9",
+	},
+	{
+		"ffffffffe0000000000000000000000000000000000000000000000000000000",
+		"87f503e2a3b737c4b251c6dae6ebeb9d9851eac33533695affdd2e45ac70f3a5",
+	},
+	{
+		"ffffffffc0000000000000000000000000000000000000000000000000000000",
+		"98e60c648e9e04e4b14de74e66a5edb714cef5f22dcfd56e5229f2a17caadab5",
+	},
+	{
+		"ffffffff80000000000000000000000000000000000000000000000000000000",
+		"37b845ef675db1a0a09181713f59857da54dd809880299d94fc13a8a5721ba2f",
+	},
+	{
+		"ffffffff00000000000000000000000000000000000000000000000000000000",
+		"05f6a05e6d12cd910cabaee28312f96af361d87d1513aa33fa05a6c3ba5a6e1c",
+	},
+	{
+		"fffffffe00000000000000000000000000000000000000000000000000000000",
+		"09f40ae8212317d5d1332d6598146d95ac1ee29785629740a69fb22ec236d747",
+	},
+	{
+		"fffffffc00000000000000000000000000000000000000000000000000000000",
+		"253012ebaa95e548431c684e1654a916d491b0ac62a0c019a7b901153844b12a",
+	},
+	{
+		"fffffff800000000000000000000000000000000000000000000000000000000",
+		"cf8f08f00dd610abeb4ecf2c0bc70bf7cbef1d3c41ba2f4e8f2fce2186db5bb4",
+	},
+	{
+		"fffffff000000000000000000000000000000000000000000000000000000000",
+		"496ce1dc2f4c8ec6bc937d34a4282a72e064589a95bf19fb2afd9dd224b19286",
+	},
+	{
+		"ffffffe000000000000000000000000000000000000000000000000000000000",
+		"04f2ffe14409ea82552adb5e48896fa93179af58c3bbf18fde305cfe0f6ad2f9",
+	},
+	{
+		"ffffffc000000000000000000000000000000000000000000000000000000000",
+		"0524689980adb078016895bb97bb1589ce01ca3187855d24a13bff25aa1813a5",
+	},
+	{
+		"ffffff8000000000000000000000000000000000000000000000000000000000",
+		"1df26116842bd5e12843918b29e4c867823469da12bb8f5a98387b73c0fb8ffe",
+	},
+	{
+		"ffffff0000000000000000000000000000000000000000000000000000000000",
+		"68a7c778b04e75ea7f23cf8b59d4f4f0a8258bbec71b60c9e614f39ebdcba33c",
+	},
+	{
+		"fffffe0000000000000000000000000000000000000000000000000000000000",
+		"3e725135f44bcd7375282e88e0233de7c5850464763f818ec38b43af8f885ed2",
+	},
+	{
+		"fffffc0000000000000000000000000000000000000000000000000000000000",
+		"ac8584b6ba098ecf30856d0afee2603d4580a262a82d0bbb3980dbeb56ab3fb4",
+	},
+	{
+		"fffff80000000000000000000000000000000000000000000000000000000000",
+		"309919bea68f5f65625bb37f4f4b762e2f0e6730d5b653ed864459d206111fab",
+	},
+	{
+		"fffff00000000000000000000000000000000000000000000000000000000000",
+		"244f82d3eff48c22122dc437334a3b871b0fd9ac24088d39e5f0262ad5254f28",
+	},
+	{
+		"ffffe00000000000000000000000000000000000000000000000000000000000",
+		"c448bf6c402c4aff3b15468ba3aea14e87a2891a3951be256e90ca1e6c3ed8f8",
+	},
+	{
+		"ffffc00000000000000000000000000000000000000000000000000000000000",
+		"d731172c6ccdb138585caabc747ce17bff350a3b6b81330c3c0207e36314e28d",
+	},
+	{
+		"ffff800000000000000000000000000000000000000000000000000000000000",
+		"98d8fe848d35d2f5b521012940135aa0c5e54554eb280fa7e3fba28c98e0bae0",
+	},
+	{
+		"ffff000000000000000000000000000000000000000000000000000000000000",
+		"121afefa63d5739235ee44bd48b5cf7823c2818917acd56bc5d9e20d166f32a1",
+	},
+	{
+		"fffe000000000000000000000000000000000000000000000000000000000000",
+		"c8ad732b430c5b330d2f9e3232265697539051b0506ff13be525d4058ef521d9",
+	},
+	{
+		"fffc000000000000000000000000000000000000000000000000000000000000",
+		"de3e23dcf4df94a76302fdeb52cfe08b2d560de863f5f4dacf56fb9cfedbab26",
+	},
+	{
+		"fff8000000000000000000000000000000000000000000000000000000000000",
+		"fe7bf19911d68952addb7153f0ce602ced31960812c7a8dd8a57d0e7ae282fab",
+	},
+	{
+		"fff0000000000000000000000000000000000000000000000000000000000000",
+		"090cfb49c3c586db4c65da0ad9cd8a06b1f1097b00084f6330ef0b395016e7c4",
+	},
+	{
+		"ffe0000000000000000000000000000000000000000000000000000000000000",
+		"bbfc7021861475dfdd3e7fd56db81926a267e195d894bfe6a941c6bcc33afe1a",
+	},
+	{
+		"ffc0000000000000000000000000000000000000000000000000000000000000",
+		"709f6274b3f504a4760cfd4b8fa91c7b512b21d9d941a3b5836a58f2fe50d495",
+	},
+	{
+		"ff80000000000000000000000000000000000000000000000000000000000000",
+		"38bee2ac3e2a10ab731a705dcee56361aa31245a68c4c2e730ce0ef860ea3edf",
+	},
+	{
+		"ff00000000000000000000000000000000000000000000000000000000000000",
+		"0768013e7f0b185b7685584d65e68eca7e63ff9b50197c874d5978c54e6ff5b5",
+	},
+	{
+		"fe00000000000000000000000000000000000000000000000000000000000000",
+		"cf17e6bf27b3e2491853cb546163e524fad0aebb8402c6e6dee4710f4ccb2cec",
+	},
+	{
+		"fc00000000000000000000000000000000000000000000000000000000000000",
+		"71da20973e043f9e77683c5c002fb3ebd02db1802075e832e9e58acac4d0d88a",
+	},
+	{
+		"f800000000000000000000000000000000000000000000000000000000000000",
+		"cc619980cf1955b3c78a3525a03709e95fef388431ec4cea1dc1b4b5d2024b05",
+	},
+	{
+		"f000000000000000000000000000000000000000000000000000000000000000",
+		"bafae4ed2b22c1a89f33816c35f6e7a9053f50ea0af5faf68c0dd5a439cec150",
+	},
+	{
+		"e000000000000000000000000000000000000000000000000000000000000000",
+		"7752149b8b92c8f49f41cd16e8a5554d003cf1f8fba624101de195fc511a6b77",
+	},
+	{
+		"c000000000000000000000000000000000000000000000000000000000000000",
+		"ce95ac815a2d16d4b94ef2d281e56991f10d55c157a9cc286729fa07670a6de3",
+	},
+	{
+		"8000000000000000000000000000000000000000000000000000000000000000",
+		"e62abce069837b65309be4eda2c0e149fe56c07b7082d3287f592c4a4927a277",
+	},
+}
+
+func TestEncrypt(t *testing.T) {
+	var zeros, plaintext, encrypted [BlockSize]byte
+
+	for i, test := range encryptionTests {
+		keySlice, _ := hex.DecodeString(test.keyHex)
+		expected, _ := hex.DecodeString(test.outHex)
+
+		var key [32]byte
+		copy(key[:], keySlice)
+
+		c := NewCipher(&key)
+		c.Encrypt(&encrypted, &zeros)
+		if !bytes.Equal(encrypted[:], expected[:]) {
+			t.Errorf("%d: got %x, expected %x", i, encrypted, expected)
+		}
+
+		c.Decrypt(&plaintext, &encrypted)
+		if !bytes.Equal(plaintext[:], zeros[:]) {
+			t.Errorf("%d: non-zero decryption: %x", plaintext)
+		}
+	}
+}
diff --git a/panda/simple_meeting_point.go b/panda/simple_meeting_point.go
new file mode 100644
index 0000000..92f215d
--- /dev/null
+++ b/panda/simple_meeting_point.go
@@ -0,0 +1,72 @@
+package panda
+
+import (
+	"bytes"
+	"errors"
+	"sync"
+)
+
+const paddingSize = 1 << 16
+
+type pair struct {
+	messages [2][]byte
+}
+
+type SimpleMeetingPlace struct {
+	sync.Mutex
+	values                 map[string]*pair
+	wakeChan chan bool
+}
+
+func (smp *SimpleMeetingPlace) Padding() int {
+	return paddingSize
+}
+
+func (smp *SimpleMeetingPlace) Exchange(log func(string, ...interface{}), id, message []byte, shutdown chan struct{}) ([]byte, error) {
+	i := string(id)
+
+	smp.Lock()
+
+	var p *pair
+	if p = smp.values[i]; p == nil {
+		p = new(pair)
+		smp.values[i] = p
+		p.messages[0] = message
+	}
+
+	for i := 0; i < 2; i++ {
+		if len(p.messages[i]) == 0 || bytes.Equal(p.messages[i], message) {
+			if len(p.messages[i]) == 0 {
+				p.messages[i] = message
+				select {
+				case smp.wakeChan <- true:
+				default:
+				}
+			}
+			for {
+				other := p.messages[i^1]
+				if len(other) > 0 {
+					smp.Unlock()
+					return other, nil
+				}
+				smp.Unlock()
+				select {
+				case <-smp.wakeChan:
+					smp.Lock()
+				case <-shutdown:
+					return nil, ShutdownErr
+				}
+			}
+		}
+	}
+
+	return nil, errors.New("more than two messages for a single id")
+}
+
+func NewSimpleMeetingPlace() *SimpleMeetingPlace {
+	s := &SimpleMeetingPlace{
+		values:       make(map[string]*pair),
+		wakeChan:     make(chan bool),
+	}
+	return s
+}
diff --git a/papers/panda/.gitignore b/papers/panda/.gitignore
new file mode 100644
index 0000000..48f31aa
--- /dev/null
+++ b/papers/panda/.gitignore
@@ -0,0 +1,8 @@
+*.aux
+*.bbl
+*.blg
+*.dvi
+*.log
+*.out
+*.pdf
+*.ps
diff --git a/papers/panda/Makefile b/papers/panda/Makefile
new file mode 100644
index 0000000..6d56cdd
--- /dev/null
+++ b/papers/panda/Makefile
@@ -0,0 +1,29 @@
+#
+# To use this on Debian:
+#   apt-get install texlive-fonts-recommended texlive-base \
+#     biblatex texlive-bibtex-extra texlive-extra-utils make
+#
+# Then type `make` to produce the $PAPER
+#
+
+PAPER=panda
+LATEX=pdflatex
+BIBTEX=bibtex
+
+SRCS=$(wildcard *.tex) $(wildcard *.sty)  $(wildcard *.bst)  $(wildcard *.pl)
+REFS=$(wildcard *.bib)
+FIGS=$(wildcard figures/*)
+
+all: $(PAPER).pdf
+
+$(PAPER).pdf: $(SRCS) $(REFS) $(FIGS)
+	$(LATEX) $(PAPER)
+	$(BIBTEX) $(PAPER)
+	$(LATEX) $(PAPER)
+	$(LATEX) $(PAPER)
+
+evince: $(PAPER).pdf
+	evince $(PAPER).pdf
+
+clean:
+	rm -f *.dvi *.aux *.log *.blg *.bbl $(PAPER).ps $(PAPER).pdf $(PAPER).out
diff --git a/papers/panda/bibliography.bib b/papers/panda/bibliography.bib
new file mode 100644
index 0000000..bae790e
--- /dev/null
+++ b/papers/panda/bibliography.bib
@@ -0,0 +1,156 @@
+ at incollection{abdalla2005simple,
+  title={Simple password-based encrypted key exchange protocols},
+  author={Abdalla, Michel and Pointcheval, David},
+  booktitle={Topics in cryptology--CT-RSA 2005},
+  pages={191--208},
+  year={2005},
+  publisher={Springer}
+}
+ at inproceedings{bellovin1992encrypted,
+  title={Encrypted key exchange: Password-based protocols secure against dictionary attacks},
+  author={Bellovin, Steven M and Merritt, Michael},
+  booktitle={Research in Security and Privacy, 1992. Proceedings., 1992 IEEE Computer Society Symposium on},
+  pages={72--84},
+  year={1992},
+  organization={IEEE}
+}
+ at inproceedings{bellare2000authenticated,
+  title={Authenticated key exchange secure against dictionary attacks},
+  author={Bellare, Mihir and Pointcheval, David and Rogaway, Phillip},
+  booktitle={Advances in Cryptology—Eurocrypt 2000},
+  pages={139--155},
+  year={2000},
+  organization={Springer}
+}
+ at incollection{bernstein2006curve25519,
+  title={Curve25519: new Diffie-Hellman speed records},
+  author={Bernstein, Daniel J},
+  booktitle={Public Key Cryptography-PKC 2006},
+  pages={207--228},
+  year={2006},
+  publisher={Springer}
+}
+ at inproceedings{anderson1996two,
+  title={Two practical and provably secure block ciphers: BEAR and LION},
+  author={Anderson, Ross and Biham, Eli},
+  booktitle={Fast Software Encryption},
+  pages={113--120},
+  year={1996},
+  organization={Springer}
+}
+ at incollection{halevi2004parallelizable,
+  title={A parallelizable enciphering mode},
+  author={Halevi, Shai and Rogaway, Phillip},
+  booktitle={Topics in Cryptology--CT-RSA 2004},
+  pages={292--304},
+  year={2004},
+  publisher={Springer}
+}
+ at incollection{halevi2003tweakable,
+  title={A tweakable enciphering mode},
+  author={Halevi, Shai and Rogaway, Phillip},
+  booktitle={Advances in Cryptology-CRYPTO 2003},
+  pages={482--499},
+  year={2003},
+  publisher={Springer}
+}
+ at article{mcgrew2004extended,
+  title={The extended codebook (XCB) mode of operation},
+  author={McGrew, David A and Fluhrer, Scott R},
+  journal={Rep},
+  volume={278},
+  pages={2004},
+  year={2004}
+}
+ at inproceedings{wang2005hctr,
+  title={HCTR: A variable-input-length enciphering mode},
+  author={Wang, Peng and Feng, Dengguo and Wu, Wenling},
+  booktitle={Information Security and Cryptology},
+  pages={175--188},
+  year={2005},
+  organization={Springer}
+}
+ at INPROCEEDINGS{Dingledine04tor:the,
+    author = {Roger Dingledine and Nick Mathewson and Paul Syverson},
+    title = {Tor: The Second-Generation Onion Router},
+    booktitle = {In Proceedings of the 13th USENIX Security Symposium},
+    year = {2004},
+    pages = {303--320}
+}
+ at book{daemen2002design,
+  title={The design of Rijndael: AES-the advanced encryption standard},
+  author={Daemen, Joan and Rijmen, Vincent},
+  year={2002},
+  publisher={Springer}
+}
+ at misc{pond,
+  author = {Adam Langley},
+  title = {Pond},
+  year = {2012},
+  howpublished = {\url{https://pond.imperialviolet.org}}
+}
+ at misc{panda,
+  author = {Adam Langley},
+  title = {Panda},
+  year = {2012},
+  howpublished = {\url{https://www.github.com/agl/panda/}}
+}
+ at misc{CALEA,
+  author = {103rd Congress of the United States},
+  title = {CALEA: The Communications Assistance for Law Enforcement Act},
+  year = {1994},
+  howpublished = {\url{https://en.wikisource.org/wiki/Communications_Assistance_for_Law_Enforcement_Act_of_1994}}
+}
+ at misc{NSABUDGET,
+  author = {Washington Post},
+  title = {The Black Budget},
+  year = {2013},
+  howpublished = {\url{http://www.washingtonpost.com/wp-srv/special/national/black-budget/}}
+}
+ at misc{BULLRUN,
+  author = {The Guardian},
+  title = {How US and UK spy agencies defeat internet privacy and security},
+  year = {2013},
+  howpublished = {\url{http://www.theguardian.com/world/2013/sep/05/nsa-gchq-encryption-codes-security}}
+}
+ at misc{MERKELPHONE,
+  author = {Jacob Appelbaum, Holger Stark, Marcel Rosenbach and Jörg Schindler},
+  title = {Berlin Complains: Did US Tap Chancellor Merkel's Mobile Phone?},
+  year = {2013},
+  howpublished = {\url{http://www.spiegel.de/international/world/merkel-calls-obama-over-suspicions-us-tapped-her-mobile-phone-a-929642.html}}
+}
+ at misc{kellycaine,
+  author = {Kelly E. Caine},
+  title = {Exploring everyday privacy behaviors and misclosures},
+  year = {2009},
+  howpublished = {\url{http://hdl.handle.net/1853/31665}}
+}
+ at misc{zookostriangle,
+  author = {Zooko Wilcox-O'Hearn},
+  title = {Zooko's triangle},
+  year = {2009},
+  howpublished = {\url{https://en.wikipedia.org/wiki/Zooko%27s_triangle}}
+}
+ at misc{scrypt,
+  author = {Colin Percival},
+  title = {The scrypt Password-Based Key Derivation Function},
+  year = {2012},
+  howpublished = {\url{https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01}}
+}
+ at misc{otr,
+  author = {Nikita Borisov, Ian Goldberg, Eric Brewer},
+  title = {Off-the-Record Communication, or, Why Not To Use PGP},
+  year = {2004},
+  howpublished = {\url{https://otr.cypherpunks.ca/otr-wpes.pdf}}
+}
+ at misc{pgp,
+  author = {Phil Zimmermann},
+  title = {Pretty Good Privacy},
+  year = {1991}
+}
+ at misc{pem,
+  author = {J. Linn},
+  title = {Privacy Enhancement for Internet Electronic Mail},
+  year = {1993},
+  howpublished = {\url{https://www.ietf.org/rfc/rfc1421.txt}}
+}
\ No newline at end of file
diff --git a/papers/panda/panda.tex b/papers/panda/panda.tex
new file mode 100644
index 0000000..40e1e37
--- /dev/null
+++ b/papers/panda/panda.tex
@@ -0,0 +1,332 @@
+% TEMPLATE for Usenix papers, specifically to meet requirements of
+%  USENIX '05
+
+% See http://static.usenix.org/events/samples/template.la for examples.
+
+% Note that since 2010, USENIX does not require endnotes. If you want
+% foot of page notes, don't include the endnotes package in the 
+% usepackage command, below.
+
+%
+% This is a pre-publication paper which we intend to submit to FOCI-14
+% While the FOCI14 event has no home page, the previous one was:
+%   https://www.usenix.org/conference/foci13
+%
+
+\documentclass[letterpaper,twocolumn,10pt]{article}
+\usepackage{usenix,epsfig,amssymb,amsmath,url}
+\begin{document}
+\date{}
+
+\title{
+\Large \bf Going Dark: Phrase Automated Nym Discovery Authentication\\
+\small or,\\
+Finding friends and lovers using the PANDA protocol to re-nymber after everything is lost\\
+\small or, \\
+discovering new Pond users easily
+}
+
+\author{
+{\rm Jacob Appelbaum}\\
+\and
+{\rm another cypherpunk}\\
+}
+
+\maketitle
+
+% Use the following at camera-ready time to suppress page numbers.
+% Comment it out when you first submit the paper for review.
+\thispagestyle{empty}
+
+\subsection*{Abstract}
+
+We consider the problem of two parties seeking to establish secure
+communications given {\it only} a shared secret.
+
+Communication between two parties relies on in-band and out-of-band methods
+when addressing identifiers change or when they are not yet known to the
+interested parties. We summarize similar problems and present a brief overview
+of previous attempts at solving the presented problems. Finally we propose a
+system, which we have implemented, by which a pair or a group of people or
+machines may derive new identifiers using only a password or shared key. Thus
+we remove the requirement that any other communication must occur before
+re-establishing entirely new identifiers.
+
+\section{Introduction}
+
+% we should rephrase this to not be so closely worded to the Abstract
+We propose a system by which a pair or a group of people or machines may derive
+new identifiers using only a password or shared key in a forward secret manner.
+Additionally, we propose using this shared secret as the basis for
+authentication, key exchange and as a discovery process for other identifiers.
+We have implemented the described system and describe the specifics of our
+implementation.
+
+\section{The context of modern communication systems}
+\label{sec:context}
+
+Modern communication systems are designed with intentional flaws such as
+CALEA\cite{CALEA} and with an adversaries that have budgets in the tens of
+billions of US dollars\cite{NSABUDGET}. Adversaries such as the NSA
+specifically attempt to sabatoge cryptographic projects\cite{BULLRUN} used in
+the creation of secure communications systems. The current global
+communications network allow for dragnet surveillance based on so-called {\it
+selectors} and even world leaders\cite{MERKELPHONE} are not exempt from such
+surveillance. Static identifiers such as telephone numbers, email addresses,
+hardware serial numbers and other unique identifiers ensure linkability across
+vast datasets as the core of selector based surveillance.
+% XXX: should we cite something about selector based surveillance? Perhaps?
+
+\section{An overview of similar problems and their respective solutions}
+
+Users face many similar discovery or re-discovery problems in common daily
+life. Usually these problems are resolved with a hybrid of social and
+centralized solutions where a third party is not treated as an adversary.
+
+\subsection{The telephone re-numbering problem}
+\label{renumber:telephone}
+
+Telephone numbers change for various reasons. After a new number or a new
+device with a new number is issued, a kind of discovery process is started
+whereby the party may start to use the new number exclusively. It is also
+possible that the old number will link to the new number or only release the
+new number as it has superseded the original number.
+
+Telephone numbers are generally not user selected but are rather issued by a
+central authority; so called vanity numbers may be selected for a fee from
+some operators.
+
+The process of renumbering a telephone is generally solved in five different
+ways. The first may come in the form of a message provided by the operator
+that discloses the new number and disconnects the caller after an automated
+message. The second is socially or through a publication of some kind;
+generally when two people meet a new number may be disclosed or when a known
+distribution point such as a newspaper begins to print new numbers. The third
+is through a party reading the caller information from their received call or
+SMS list or by reviewing their bill. The fourth is through
+misclosure\cite{kellycaine}, perhaps by a third party who may or may not be
+authorized to disclose this information. The fifth is through a central listing
+service of some kind, such as a phonebook, published by a network operator.
+
+\subsection{The social nickname re-naming problem}
+\label{rename:social-nickname}
+
+People generally have full legal names and names by which they are known
+socially. These full legal name mappings change through various legal means
+that are out of scope. Nicknames are commonly held names that otherwise have
+little or no legal status - when a party changes their nickname, they suffer
+from the same issues faced by telephone renumbering\ref{renumber:telephone}.
+Unlike telephone re-numbering, generally a person or group may pick any name
+they choose as a new nickname. Such new nicknames may collide and cause
+confusion though largely this may be irrelevant for a social group that has
+other social identifiers.
+
+\subsection{The nym renyming problem}
+
+Electronic identities generally suffer from the same issues as telephone
+renumbering\ref{renumber:telephone} and re-naming\ref{rename:social-nickname}
+with the additional complexity of not having a central authority or out-of-band
+communications methods by which to reconnect.
+
+\subsection{The problem created by data loss}
+\label{sec:problem}
+
+Systems are often stolen or compromised in a way that results in total
+dataloss for the user. In some cases the data may be compromised after a
+variable window of time and in such a window, automatically changing
+indentifiers may prevent full and on-going compromise of a pair-wise
+communications channel.
+
+\section{Gently Rockin' Zooko's Triangle}
+\label{sec:zooko}
+
+Zooko's Triangle\cite{zookostriangle} is generalized as having the choice
+between any two of the following three properties when designing a naming
+system: secure, decentralized and human-meaningful. In the original Domain Name
+System, a domain name is decentralized and human-meaningful. In
+Pond\cite{pond}, the addressing system properties are secure and decentralized.
+
+We propose that, for a brief window of time, users should have a way to
+change the chosen properties of the naming system.  We assert that trading the
+secure property for the human-meaningful property in the form of phrases may be
+a useful trade-off in a time limited, forward secure fashion.
+
+Furthermore, we note that Zooko's Triangle is missing an important qualifier,
+which is the passing of time and its relationship with each of the properties.
+
+\section{PANDA}
+
+The PANDA protocol uses EKE2, Diffie-Hellman, a pre-arranged meeting point and
+a slow memory intensive key derivation process.
+
+\subsection{EKE2}
+
+EKE2 is very similar to SPAKE2 but uses an ideal cipher to encrypt the
+Diffie-Hellman values rather than masking them with secret group elements. EKE2
+is used to go from a shared-secret to an ephemeral shared-key and then the
+KeyExchange messages are encrypted with that key and exchanged via the second
+meeting ID.
+
+\subsection{Diffie-Hellman}
+
+Our Diffie-Hellman group of choice is curve25519\cite{bernstein2006curve25519}
+which results in a 255-bit Diffie-Hellman value, which is larger than the
+128-bit block size of most ciphers.
+
+\subsection{Password Authenticated Key Exchange}
+
+This problem falls into the topic of Password Authenticated Key Exchange
+(PAKE), which is a well studied problem. The first PAKE, Encrypted Key Exchange
+(EKE), was described by Bellovin and Merritt\cite{bellovin1992encrypted} in
+1992. However, we have one additional requirement: that the protocol execute in
+a single round. We define a round as a message sent by each party
+simultaneously, thus a message in a given round cannot depend on any other
+message in the same round.  We are imposing this requirement as our meeting
+point may have very high latency and we have no way of assigning the labels
+`client' and `server' to our parties.  Many PAKE protocols implicitly assume
+that the parties can behave differently based on these labels (including the
+original EKE), but our parties have {\it only} a shared secret. An exchange of
+messages could be used to break this symmetry but the additional latency is
+undesirable.
+
+The authors are most familiar with Simple Password-Based Encrypted Key Exchange
+Protocols number two (SPAKE2)\cite{abdalla2005simple}, but SPAKE2 appears to be
+unsuitable because it masks Diffie-Hellman values with a mask value raised to
+the power of the password and requires different mask values for the two
+parties. Due to our symmetry requirement the two parties would have to use the
+same value mask. We have proven that the chosen computational Diffie Hellman
+(CCDH) problem from the SPAKE paper is equally strong when the two mask values
+are equal, however the mask values appear again in the security proof and it's
+not obvious how to patch that second hole.
+% XXX: This last sentence could use some rewording to make it clearer
+
+We have chosen to use Encrypted Key Exchange two
+(EKE2)\cite{bellare2000authenticated} as our PAKE. EKE2 is very similar to
+SPAKE2 but uses an ideal cipher to encrypt the Diffie-Hellman values rather
+then masking them with secret group elements.
+
+Using a typical block cipher mode would
+result in an attacker having a discomforting amount of control of the resulting
+plaintext. Using an Authenticated Encryption with Associated Data (AEAD) mode would give an attacker an authenticator which
+they could use to mount an offline, brute-force attack on the shared
+secret\footnote{The attacker may already be able to mount an offline,
+brute-force attack on the shared secret by using an identifier revealed to the
+meeting point. But we still don't want to give them another avenue for this
+attack in case a particular meeting point doesn't require that}. A wide-block
+construction like LIONESS\cite{anderson1996two} doesn't appear to be
+applicable because the 256-bit block is too small to split into usefully sized
+left and right parts for the Luby-Rackoff construction. Many other wide-block
+constructions have subsequently been proposed including
+EME\cite{halevi2004parallelizable}, CMC\cite{halevi2004parallelizable},
+XCB\cite{mcgrew2004extended}, HCTR\cite{wang2005hctr} and others. However, the
+area is a patent minefield.
+
+We instantiate the ideal-cipher for EKE2 with a 256-bit block
+Rijndael\cite{daemen2002design}. Although AES specified only a 128-bit block
+size, Rijndael was originally specified with 128, 192 and 256-bit block sizes.
+It's very uncommon to find an Rijndael implementation that implements a 256-bit
+block size but since performance isn't a concern and nor are side-channels, a
+custom, toy Rijndael implementation is sufficient.
+
+\subsection{Meeting points}
+
+We propose agreeing on a meeting point, such as an address or name of a
+centralized HTTP server, one hosted on a Tor Hidden
+Service\cite{Dingledine04tor:the}, or the use of a
+decentralized key value store system.
+
+Once we have established a meeting point, the two parties need to bootstrap
+their shared secret into a cryptographic key exchange and a more efficient
+method of communicating in the future.\footnote{For example, the parties may wish to
+exchange OpenPGP public keys and email addresses in a confidential and
+authentic fashion. As a further example, Pond users may discover the
+keys for their peers with such a system.}
+% add \cite for OpenPGP
+
+\subsection{Key and meeting point derivation}
+
+Each PANDA user computes a tag and a key as part of a key derivation process.
+This process utilizes scrypt\cite{scrypt} to slow brute force or
+even well chosen dictionary attacks.
+% XXX: We should describe this process in more detail
+
+\section{Key exchange details in practice with Pond}
+
+Pond supports two methods of key exchange. The first is manual: the
+KeyExchange messages are serialised with Privacy-enhanced Electronic Mail (PEM)\cite{pem} and the user is expected to
+exchange them with the intended contact, authentically and confidentially. For
+example, a pre-existing relationship with Pretty Good Privacy (PGP)\cite{pgp} or
+Off-The-Record (OTR)\cite{otr} keys could be used to bootstrap Pond.
+
+We implemented\cite{panda} the PANDA discovery technique for the
+Pond\cite{pond} messaging system as the second method of key exchange. PANDA
+allows a relationship to be established via a shared-secret. This works by
+using a {\it meeting point} which, currently, involves contacting a central
+HTTPS server over the Tor\cite{Dingledine04tor:the} network. The shared secret is processed with
+scrypt\cite{scrypt} into a key and two {\it meeting} IDs. The meeting point
+simply acts as a pinboard where messages can be posted to a given meeting ID.
+If a different message has already been posted to the same ID then it's
+returned. The meeting point only allows two different messages to exist for a
+given meeting ID until it's garbage collected (in about a week).
+
+\subsection{Pond key exchange details}
+
+The Pond key exchange between two users involves each creating a KeyExchange
+protobuf\cite{pondprotobufs}. Since Pond servers demand a group signature
+before accepting a message for delivery, there are no public Pond addresses
+that can be used to bootstrap a Pond relationship.  Rather we currently assume
+an external, confidential and authentic means for users to exchange KeyExchange
+messages.
+
+A Pond KeyExchange message contains a group member private key (which is why
+they need to be confidential), as well as the information needed to direct a
+message to a user: their home server address and the user's public identity at
+that server.  They also contain an Ed25519 key and the intent is that, in the
+future, users will be able to update their home servers by sending messages to
+each of their contacts. Group member revocations will also be signed by this
+key.
+
+\subsection{Adding entropy to a human-meaningfully memorable phrase}
+
+The shared secret itself can consist of a passphrase, a time, and a deck or two
+of cards. Since humans are poor at generating and remembering secrets, a deck
+of cards, shuffled and split in half, serves quite well. Decks of cards are also
+commonly available and don't have the downsides that bringing a mobile device
+to a meeting might have.
+
+Although the two halves of the deck are different, they are sufficient to
+define a common, canonical set of cards. For Pond, the cards are ordered and
+the canonical half is the one with the majority of the lowest numbered card. If
+both halves have the same number of the lowest numbered card then the next
+lowest is considered. If each half has exactly the same cards then both are
+canonical.
+
+A single deck of cards results in an approximately 49 bit shared secret and two
+decks is 100 bits. The stacks of cards are a problem to dispose of (unlike a
+memory, they can be obtained by dumpster diving) but they only need to be
+protected until the key exchange is complete. After that they are no longer
+sensitive.
+
+While we haven't implemented further entropy sources, we believe that many
+common household objects may also serve as a time limited entropy source. As an
+example, additional entropy could be added from other sources such as the state
+of a Rubik's cube or a similar object.
+
+\section{Conclusion}
+
+Our design allows a pair or a group of people to discover or rediscover
+each-other with knowledge of only a shared secret or human memorable
+passphrase with optional entropy sources. Additionally, we believe that it
+provides forward secrecy against attackers who wish to correlate names even
+after a full client compromise.
+
+\section*{Acknowledgements}
+
+We would like to thank Leif Ryge, Steve Weis, Ralf Philip-Weinmann, Julian
+Assange and other anonymous cypherpunks who contributed valuable feedback in
+the creation of this design.
+
+{\footnotesize \bibliographystyle{acm}
+\bibliography{bibliography}}
+
+\end{document}
diff --git a/papers/panda/usenix.sty b/papers/panda/usenix.sty
new file mode 100644
index 0000000..100d022
--- /dev/null
+++ b/papers/panda/usenix.sty
@@ -0,0 +1,94 @@
+% usenix.sty - to be used with latex2e for USENIX.
+% To use this style file, look at the template usenix_template.tex
+%
+% $Id: usenix.sty,v 1.2 2005/02/16 22:30:47 maniatis Exp $
+%
+% The following definitions are modifications of standard article.sty
+% definitions, arranged to do a better job of matching the USENIX
+% guidelines.
+% It will automatically select two-column mode and the Times-Roman
+% font.
+
+%
+% USENIX papers are two-column.
+% Times-Roman font is nice if you can get it (requires NFSS,
+% which is in latex2e.
+
+\if at twocolumn\else\input twocolumn.sty\fi
+\usepackage{mathptmx}  % times roman, including math (where possible)
+
+%
+% USENIX wants margins of: 1" sides, 1" bottom, and 1" top.
+% 0.25" gutter between columns.
+% Gives active areas of 6.5" x 9"
+%
+\setlength{\textheight}{9.0in}
+\setlength{\columnsep}{0.25in}
+\setlength{\textwidth}{6.50in}
+
+\setlength{\topmargin}{0.0in}
+
+\setlength{\headheight}{0.0in}
+
+\setlength{\headsep}{0.0in}
+
+% Usenix wants no page numbers for camera-ready papers, so that they can
+% number them themselves.  But submitted papers should have page numbers
+% for the reviewers' convenience.
+% 
+%
+% \pagestyle{empty}
+
+%
+% Usenix titles are in 14-point bold type, with no date, and with no
+% change in the empty page headers.  The whole author section is 12 point
+% italic--- you must use {\rm } around the actual author names to get
+% them in roman.
+%
+\def\maketitle{\par
+ \begingroup
+   \renewcommand\thefootnote{\fnsymbol{footnote}}%
+   \def\@makefnmark{\hbox to\z@{$\m at th^{\@thefnmark}$\hss}}%
+    \long\def\@makefntext##1{\parindent 1em\noindent
+            \hbox to1.8em{\hss$\m at th^{\@thefnmark}$}##1}%
+   \if at twocolumn
+     \twocolumn[\@maketitle]%
+     \else \newpage
+     \global\@topnum\z@
+     \@maketitle \fi\@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \let\maketitle\relax
+ \let\@maketitle\relax
+ \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax}
+
+\def\@maketitle{\newpage
+ \vbox to 2.5in{
+ \vspace*{\fill}
+ \vskip 2em
+ \begin{center}%
+  {\Large\bf \@title \par}%
+  \vskip 0.375in minus 0.300in
+  {\large\it
+   \lineskip .5em
+   \begin{tabular}[t]{c}\@author
+   \end{tabular}\par}%
+ \end{center}%
+ \par
+ \vspace*{\fill}
+% \vskip 1.5em
+ }
+}
+
+%
+% The abstract is preceded by a 12-pt bold centered heading
+\def\abstract{\begin{center}%
+{\large\bf \abstractname\vspace{-.5em}\vspace{\z@}}%
+\end{center}}
+\def\endabstract{}
+
+%
+% Main section titles are 12-pt bold.  Others can be same or smaller.
+%
+\def\section{\@startsection {section}{1}{\z@}{-3.5ex plus-1ex minus
+    -.2ex}{2.3ex plus.2ex}{\reset at font\large\bf}}
diff --git a/pathrewrite/pathrewrite.go b/pathrewrite/pathrewrite.go
new file mode 100644
index 0000000..0426fd2
--- /dev/null
+++ b/pathrewrite/pathrewrite.go
@@ -0,0 +1,88 @@
+// pathrewrite is a hacky utility for rewriting OS X shared libraries.
+//
+// On OS X we require that the Pond client be self-contained in a bundle directory. However, this means that the built-in paths in GTK etc need to be overridden so as to point inside the bundle. Sometimes this is possible via environment variables but sometimes there's just no way. Because of that, we process each shared library in the bundle with this problem which rewrites homebrew paths to be relative to the current working directory.
+
+package main
+
+import (
+	"bytes"
+	"fmt"
+	"io/ioutil"
+	"os"
+)
+
+func main() {
+	if len(os.Args) != 2 {
+		fmt.Printf("Usage: %s <library file to rewrite>\n", os.Args[0])
+		os.Exit(1)
+	}
+
+	contents, err := ioutil.ReadFile(os.Args[1])
+	orig := contents
+	if err != nil {
+		fmt.Printf("Error opening input: %s\n", err)
+		os.Exit(1)
+	}
+
+	// magic is the homebrew prefix that we look for.
+	magic := []byte("/usr/local/Cellar/")
+	// replacementPath is the path that replaces |magic|, plus a couple more path elements.
+	replacementPath := []byte("../Resources")
+
+NextMatch:
+	for {
+		i := bytes.Index(contents, magic)
+		if i == -1 {
+			break
+		}
+
+		s := contents[i:]
+		contents = contents[i+1:]
+		if len(s) > 256 {
+			s = s[:256]
+		}
+		i = bytes.IndexByte(s, 0)
+		if i == -1 {
+			continue
+		}
+		s = s[:i]
+		// After finding |magic|, we look for a path element that should be the name of the homebrew package.
+		for i = len(magic); i < len(s); i++ {
+			c := s[i]
+			if c == '/' {
+				break
+			} else if (c >= 'a' && c <= 'z') || c == '+' || c == '-' || (c >= '0' && c <= '9') {
+				continue
+			} else {
+				continue NextMatch
+			}
+		}
+		if i == len(s) {
+			continue
+		}
+		// After the package name, there should be a version.
+		for i++; i < len(s); i++ {
+			c := s[i]
+			if c == '/' {
+				break
+			} else if (c >= '0' && c <= '9') || c == '.' {
+				continue
+			} else {
+				continue NextMatch
+			}
+		}
+
+		trailer := s[i:]
+		var newPath []byte
+		newPath = append(newPath, replacementPath...)
+		newPath = append(newPath, trailer...)
+		fmt.Printf("%s -> %s\n", string(s), string(newPath))
+		newPath = append(newPath, 0)
+		copy(s, newPath)
+	}
+
+	if err := ioutil.WriteFile(os.Args[1], orig, 0644); err != nil {
+		fmt.Printf("Error writing file: %s\n", err)
+		os.Exit(1)
+	}
+}
diff --git a/pond.png b/pond.png
new file mode 100644
index 0000000..d3fcef2
Binary files /dev/null and b/pond.png differ
diff --git a/protos/const.go b/protos/const.go
new file mode 100644
index 0000000..233826d
--- /dev/null
+++ b/protos/const.go
@@ -0,0 +1,27 @@
+package protos
+
+import "golang.org/x/crypto/nacl/secretbox"
+
+// TransportSize is the number of bytes that all payloads are padded to before
+// sending on the network.
+const TransportSize = 16384 - 2 - secretbox.Overhead
+
+// MessageOverhead is the number of bytes reserved for wrapping a Message up in
+// protobufs. That includes the overhead of the protobufs themselves, as well
+// as the metadata in the protobuf and the group signature.
+const MessageOverhead = 512
+
+// MaxSerializedMessage is the maximum size of the serialized Message protobuf.
+// The message will end up looking like this:
+//    [length - 4 bytes       ]  | NaCl box  | Message that server sees.
+//    [nonce - 24 bytes               ]
+//
+//      [secretbox.Overhead - 16 bytes]
+//      [message count - 4 bytes      ]
+//      [prev message count - 4 bytes ]
+//      [ratchet public - 32 bytes    ]
+//      [inner nonce - 32 bytes       ]
+//
+//      [secretbox.Overhead - 16 bytes]
+//      [serialized message           ]
+const MaxSerializedMessage = TransportSize - (secretbox.Overhead + 4 + 4 + 32 + 24) - secretbox.Overhead - MessageOverhead
diff --git a/protos/pond.pb.go b/protos/pond.pb.go
new file mode 100644
index 0000000..0248192
--- /dev/null
+++ b/protos/pond.pb.go
@@ -0,0 +1,935 @@
+// Code generated by protoc-gen-go.
+// source: github.com/agl/pond/protos/pond.proto
+// DO NOT EDIT!
+
+package protos
+
+import proto "github.com/golang/protobuf/proto"
+import json "encoding/json"
+import math "math"
+
+// Reference proto, json, and math imports to suppress error if they are not otherwise used.
+var _ = proto.Marshal
+var _ = &json.SyntaxError{}
+var _ = math.Inf
+
+type Reply_Status int32
+
+const (
+	Reply_OK                         Reply_Status = 0
+	Reply_PARSE_ERROR                Reply_Status = 1
+	Reply_NO_REQUEST                 Reply_Status = 2
+	Reply_INTERNAL_ERROR             Reply_Status = 3
+	Reply_IDENTITY_ALREADY_KNOWN     Reply_Status = 10
+	Reply_OVERLOAD                   Reply_Status = 11
+	Reply_NO_SUCH_ADDRESS            Reply_Status = 12
+	Reply_DELIVERY_SIGNATURE_INVALID Reply_Status = 13
+	Reply_INCORRECT_GENERATION       Reply_Status = 14
+	Reply_MAILBOX_FULL               Reply_Status = 15
+	Reply_NO_ACCOUNT                 Reply_Status = 16
+	Reply_OVER_QUOTA                 Reply_Status = 17
+	Reply_FILE_LARGER_THAN_SIZE      Reply_Status = 18
+	Reply_FILE_COMPLETE              Reply_Status = 19
+	Reply_NO_SUCH_FILE               Reply_Status = 20
+	Reply_RESUME_PAST_END_OF_FILE    Reply_Status = 21
+	Reply_GENERATION_REVOKED         Reply_Status = 22
+	Reply_CANNOT_PARSE_REVOCATION    Reply_Status = 23
+	Reply_REGISTRATION_DISABLED      Reply_Status = 24
+	Reply_HMAC_KEY_ALREADY_SET       Reply_Status = 25
+	Reply_HMAC_NOT_SETUP             Reply_Status = 26
+	Reply_HMAC_INCORRECT             Reply_Status = 27
+	Reply_HMAC_USED                  Reply_Status = 28
+	Reply_HMAC_REVOKED               Reply_Status = 29
+)
+
+var Reply_Status_name = map[int32]string{
+	0:  "OK",
+	1:  "PARSE_ERROR",
+	2:  "NO_REQUEST",
+	3:  "INTERNAL_ERROR",
+	10: "IDENTITY_ALREADY_KNOWN",
+	11: "OVERLOAD",
+	12: "NO_SUCH_ADDRESS",
+	13: "DELIVERY_SIGNATURE_INVALID",
+	14: "INCORRECT_GENERATION",
+	15: "MAILBOX_FULL",
+	16: "NO_ACCOUNT",
+	17: "OVER_QUOTA",
+	18: "FILE_LARGER_THAN_SIZE",
+	19: "FILE_COMPLETE",
+	20: "NO_SUCH_FILE",
+	21: "RESUME_PAST_END_OF_FILE",
+	22: "GENERATION_REVOKED",
+	23: "CANNOT_PARSE_REVOCATION",
+	24: "REGISTRATION_DISABLED",
+	25: "HMAC_KEY_ALREADY_SET",
+	26: "HMAC_NOT_SETUP",
+	27: "HMAC_INCORRECT",
+	28: "HMAC_USED",
+	29: "HMAC_REVOKED",
+}
+var Reply_Status_value = map[string]int32{
+	"OK":                         0,
+	"PARSE_ERROR":                1,
+	"NO_REQUEST":                 2,
+	"INTERNAL_ERROR":             3,
+	"IDENTITY_ALREADY_KNOWN":     10,
+	"OVERLOAD":                   11,
+	"NO_SUCH_ADDRESS":            12,
+	"DELIVERY_SIGNATURE_INVALID": 13,
+	"INCORRECT_GENERATION":       14,
+	"MAILBOX_FULL":               15,
+	"NO_ACCOUNT":                 16,
+	"OVER_QUOTA":                 17,
+	"FILE_LARGER_THAN_SIZE":      18,
+	"FILE_COMPLETE":              19,
+	"NO_SUCH_FILE":               20,
+	"RESUME_PAST_END_OF_FILE":    21,
+	"GENERATION_REVOKED":         22,
+	"CANNOT_PARSE_REVOCATION":    23,
+	"REGISTRATION_DISABLED":      24,
+	"HMAC_KEY_ALREADY_SET":       25,
+	"HMAC_NOT_SETUP":             26,
+	"HMAC_INCORRECT":             27,
+	"HMAC_USED":                  28,
+	"HMAC_REVOKED":               29,
+}
+
+func (x Reply_Status) Enum() *Reply_Status {
+	p := new(Reply_Status)
+	*p = x
+	return p
+}
+func (x Reply_Status) String() string {
+	return proto.EnumName(Reply_Status_name, int32(x))
+}
+func (x Reply_Status) MarshalJSON() ([]byte, error) {
+	return json.Marshal(x.String())
+}
+func (x *Reply_Status) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(Reply_Status_value, data, "Reply_Status")
+	if err != nil {
+		return err
+	}
+	*x = Reply_Status(value)
+	return nil
+}
+
+type Message_Encoding int32
+
+const (
+	Message_RAW  Message_Encoding = 0
+	Message_GZIP Message_Encoding = 1
+)
+
+var Message_Encoding_name = map[int32]string{
+	0: "RAW",
+	1: "GZIP",
+}
+var Message_Encoding_value = map[string]int32{
+	"RAW":  0,
+	"GZIP": 1,
+}
+
+func (x Message_Encoding) Enum() *Message_Encoding {
+	p := new(Message_Encoding)
+	*p = x
+	return p
+}
+func (x Message_Encoding) String() string {
+	return proto.EnumName(Message_Encoding_name, int32(x))
+}
+func (x Message_Encoding) MarshalJSON() ([]byte, error) {
+	return json.Marshal(x.String())
+}
+func (x *Message_Encoding) UnmarshalJSON(data []byte) error {
+	value, err := proto.UnmarshalJSONEnum(Message_Encoding_value, data, "Message_Encoding")
+	if err != nil {
+		return err
+	}
+	*x = Message_Encoding(value)
+	return nil
+}
+
+type Request struct {
+	NewAccount       *NewAccount       `protobuf:"bytes,1,opt,name=new_account" json:"new_account,omitempty"`
+	Deliver          *Delivery         `protobuf:"bytes,2,opt,name=deliver" json:"deliver,omitempty"`
+	Fetch            *Fetch            `protobuf:"bytes,3,opt,name=fetch" json:"fetch,omitempty"`
+	Upload           *Upload           `protobuf:"bytes,4,opt,name=upload" json:"upload,omitempty"`
+	Download         *Download         `protobuf:"bytes,5,opt,name=download" json:"download,omitempty"`
+	Revocation       *SignedRevocation `protobuf:"bytes,6,opt,name=revocation" json:"revocation,omitempty"`
+	HmacSetup        *HMACSetup        `protobuf:"bytes,7,opt,name=hmac_setup" json:"hmac_setup,omitempty"`
+	HmacStrike       *HMACStrike       `protobuf:"bytes,8,opt,name=hmac_strike" json:"hmac_strike,omitempty"`
+	XXX_unrecognized []byte            `json:"-"`
+}
+
+func (this *Request) Reset()         { *this = Request{} }
+func (this *Request) String() string { return proto.CompactTextString(this) }
+func (*Request) ProtoMessage()       {}
+
+func (this *Request) GetNewAccount() *NewAccount {
+	if this != nil {
+		return this.NewAccount
+	}
+	return nil
+}
+
+func (this *Request) GetDeliver() *Delivery {
+	if this != nil {
+		return this.Deliver
+	}
+	return nil
+}
+
+func (this *Request) GetFetch() *Fetch {
+	if this != nil {
+		return this.Fetch
+	}
+	return nil
+}
+
+func (this *Request) GetUpload() *Upload {
+	if this != nil {
+		return this.Upload
+	}
+	return nil
+}
+
+func (this *Request) GetDownload() *Download {
+	if this != nil {
+		return this.Download
+	}
+	return nil
+}
+
+func (this *Request) GetRevocation() *SignedRevocation {
+	if this != nil {
+		return this.Revocation
+	}
+	return nil
+}
+
+func (this *Request) GetHmacSetup() *HMACSetup {
+	if this != nil {
+		return this.HmacSetup
+	}
+	return nil
+}
+
+func (this *Request) GetHmacStrike() *HMACStrike {
+	if this != nil {
+		return this.HmacStrike
+	}
+	return nil
+}
+
+type Reply struct {
+	Status           *Reply_Status       `protobuf:"varint,1,opt,name=status,enum=protos.Reply_Status,def=0" json:"status,omitempty"`
+	AccountCreated   *AccountCreated     `protobuf:"bytes,2,opt,name=account_created" json:"account_created,omitempty"`
+	Fetched          *Fetched            `protobuf:"bytes,3,opt,name=fetched" json:"fetched,omitempty"`
+	Announce         *ServerAnnounce     `protobuf:"bytes,4,opt,name=announce" json:"announce,omitempty"`
+	Upload           *UploadReply        `protobuf:"bytes,5,opt,name=upload" json:"upload,omitempty"`
+	Download         *DownloadReply      `protobuf:"bytes,6,opt,name=download" json:"download,omitempty"`
+	Revocation       *SignedRevocation   `protobuf:"bytes,7,opt,name=revocation" json:"revocation,omitempty"`
+	ExtraRevocations []*SignedRevocation `protobuf:"bytes,8,rep,name=extra_revocations" json:"extra_revocations,omitempty"`
+	XXX_unrecognized []byte              `json:"-"`
+}
+
+func (this *Reply) Reset()         { *this = Reply{} }
+func (this *Reply) String() string { return proto.CompactTextString(this) }
+func (*Reply) ProtoMessage()       {}
+
+const Default_Reply_Status Reply_Status = Reply_OK
+
+func (this *Reply) GetStatus() Reply_Status {
+	if this != nil && this.Status != nil {
+		return *this.Status
+	}
+	return Default_Reply_Status
+}
+
+func (this *Reply) GetAccountCreated() *AccountCreated {
+	if this != nil {
+		return this.AccountCreated
+	}
+	return nil
+}
+
+func (this *Reply) GetFetched() *Fetched {
+	if this != nil {
+		return this.Fetched
+	}
+	return nil
+}
+
+func (this *Reply) GetAnnounce() *ServerAnnounce {
+	if this != nil {
+		return this.Announce
+	}
+	return nil
+}
+
+func (this *Reply) GetUpload() *UploadReply {
+	if this != nil {
+		return this.Upload
+	}
+	return nil
+}
+
+func (this *Reply) GetDownload() *DownloadReply {
+	if this != nil {
+		return this.Download
+	}
+	return nil
+}
+
+func (this *Reply) GetRevocation() *SignedRevocation {
+	if this != nil {
+		return this.Revocation
+	}
+	return nil
+}
+
+func (this *Reply) GetExtraRevocations() []*SignedRevocation {
+	if this != nil {
+		return this.ExtraRevocations
+	}
+	return nil
+}
+
+type NewAccount struct {
+	Generation       *uint32 `protobuf:"fixed32,1,req,name=generation" json:"generation,omitempty"`
+	Group            []byte  `protobuf:"bytes,2,req,name=group" json:"group,omitempty"`
+	HmacKey          []byte  `protobuf:"bytes,3,opt,name=hmac_key" json:"hmac_key,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *NewAccount) Reset()         { *this = NewAccount{} }
+func (this *NewAccount) String() string { return proto.CompactTextString(this) }
+func (*NewAccount) ProtoMessage()       {}
+
+func (this *NewAccount) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *NewAccount) GetGroup() []byte {
+	if this != nil {
+		return this.Group
+	}
+	return nil
+}
+
+func (this *NewAccount) GetHmacKey() []byte {
+	if this != nil {
+		return this.HmacKey
+	}
+	return nil
+}
+
+type AccountDetails struct {
+	Queue            *uint32 `protobuf:"varint,1,req,name=queue" json:"queue,omitempty"`
+	MaxQueue         *uint32 `protobuf:"varint,2,req,name=max_queue" json:"max_queue,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *AccountDetails) Reset()         { *this = AccountDetails{} }
+func (this *AccountDetails) String() string { return proto.CompactTextString(this) }
+func (*AccountDetails) ProtoMessage()       {}
+
+func (this *AccountDetails) GetQueue() uint32 {
+	if this != nil && this.Queue != nil {
+		return *this.Queue
+	}
+	return 0
+}
+
+func (this *AccountDetails) GetMaxQueue() uint32 {
+	if this != nil && this.MaxQueue != nil {
+		return *this.MaxQueue
+	}
+	return 0
+}
+
+type AccountCreated struct {
+	Details          *AccountDetails `protobuf:"bytes,1,req,name=details" json:"details,omitempty"`
+	XXX_unrecognized []byte          `json:"-"`
+}
+
+func (this *AccountCreated) Reset()         { *this = AccountCreated{} }
+func (this *AccountCreated) String() string { return proto.CompactTextString(this) }
+func (*AccountCreated) ProtoMessage()       {}
+
+func (this *AccountCreated) GetDetails() *AccountDetails {
+	if this != nil {
+		return this.Details
+	}
+	return nil
+}
+
+type Delivery struct {
+	To               []byte  `protobuf:"bytes,1,req,name=to" json:"to,omitempty"`
+	GroupSignature   []byte  `protobuf:"bytes,2,opt,name=group_signature" json:"group_signature,omitempty"`
+	Generation       *uint32 `protobuf:"fixed32,3,opt,name=generation" json:"generation,omitempty"`
+	Message          []byte  `protobuf:"bytes,4,req,name=message" json:"message,omitempty"`
+	OneTimePublicKey []byte  `protobuf:"bytes,5,opt,name=one_time_public_key" json:"one_time_public_key,omitempty"`
+	HmacOfPublicKey  *uint64 `protobuf:"fixed64,6,opt,name=hmac_of_public_key" json:"hmac_of_public_key,omitempty"`
+	OneTimeSignature []byte  `protobuf:"bytes,7,opt,name=one_time_signature" json:"one_time_signature,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Delivery) Reset()         { *this = Delivery{} }
+func (this *Delivery) String() string { return proto.CompactTextString(this) }
+func (*Delivery) ProtoMessage()       {}
+
+func (this *Delivery) GetTo() []byte {
+	if this != nil {
+		return this.To
+	}
+	return nil
+}
+
+func (this *Delivery) GetGroupSignature() []byte {
+	if this != nil {
+		return this.GroupSignature
+	}
+	return nil
+}
+
+func (this *Delivery) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *Delivery) GetMessage() []byte {
+	if this != nil {
+		return this.Message
+	}
+	return nil
+}
+
+func (this *Delivery) GetOneTimePublicKey() []byte {
+	if this != nil {
+		return this.OneTimePublicKey
+	}
+	return nil
+}
+
+func (this *Delivery) GetHmacOfPublicKey() uint64 {
+	if this != nil && this.HmacOfPublicKey != nil {
+		return *this.HmacOfPublicKey
+	}
+	return 0
+}
+
+func (this *Delivery) GetOneTimeSignature() []byte {
+	if this != nil {
+		return this.OneTimeSignature
+	}
+	return nil
+}
+
+type Fetch struct {
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *Fetch) Reset()         { *this = Fetch{} }
+func (this *Fetch) String() string { return proto.CompactTextString(this) }
+func (*Fetch) ProtoMessage()       {}
+
+type Fetched struct {
+	GroupSignature   []byte          `protobuf:"bytes,1,req,name=group_signature" json:"group_signature,omitempty"`
+	Generation       *uint32         `protobuf:"fixed32,2,req,name=generation" json:"generation,omitempty"`
+	Message          []byte          `protobuf:"bytes,3,req,name=message" json:"message,omitempty"`
+	Details          *AccountDetails `protobuf:"bytes,4,req,name=details" json:"details,omitempty"`
+	XXX_unrecognized []byte          `json:"-"`
+}
+
+func (this *Fetched) Reset()         { *this = Fetched{} }
+func (this *Fetched) String() string { return proto.CompactTextString(this) }
+func (*Fetched) ProtoMessage()       {}
+
+func (this *Fetched) GetGroupSignature() []byte {
+	if this != nil {
+		return this.GroupSignature
+	}
+	return nil
+}
+
+func (this *Fetched) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *Fetched) GetMessage() []byte {
+	if this != nil {
+		return this.Message
+	}
+	return nil
+}
+
+func (this *Fetched) GetDetails() *AccountDetails {
+	if this != nil {
+		return this.Details
+	}
+	return nil
+}
+
+type ServerAnnounce struct {
+	Message          *Message `protobuf:"bytes,1,req,name=message" json:"message,omitempty"`
+	XXX_unrecognized []byte   `json:"-"`
+}
+
+func (this *ServerAnnounce) Reset()         { *this = ServerAnnounce{} }
+func (this *ServerAnnounce) String() string { return proto.CompactTextString(this) }
+func (*ServerAnnounce) ProtoMessage()       {}
+
+func (this *ServerAnnounce) GetMessage() *Message {
+	if this != nil {
+		return this.Message
+	}
+	return nil
+}
+
+type Upload struct {
+	Id               *uint64 `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	Size             *int64  `protobuf:"varint,2,req,name=size" json:"size,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Upload) Reset()         { *this = Upload{} }
+func (this *Upload) String() string { return proto.CompactTextString(this) }
+func (*Upload) ProtoMessage()       {}
+
+func (this *Upload) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Upload) GetSize() int64 {
+	if this != nil && this.Size != nil {
+		return *this.Size
+	}
+	return 0
+}
+
+type UploadReply struct {
+	Resume           *int64 `protobuf:"varint,1,opt,name=resume" json:"resume,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *UploadReply) Reset()         { *this = UploadReply{} }
+func (this *UploadReply) String() string { return proto.CompactTextString(this) }
+func (*UploadReply) ProtoMessage()       {}
+
+func (this *UploadReply) GetResume() int64 {
+	if this != nil && this.Resume != nil {
+		return *this.Resume
+	}
+	return 0
+}
+
+type Download struct {
+	From             []byte  `protobuf:"bytes,1,req,name=from" json:"from,omitempty"`
+	Id               *uint64 `protobuf:"fixed64,2,req,name=id" json:"id,omitempty"`
+	Resume           *int64  `protobuf:"varint,3,opt,name=resume" json:"resume,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Download) Reset()         { *this = Download{} }
+func (this *Download) String() string { return proto.CompactTextString(this) }
+func (*Download) ProtoMessage()       {}
+
+func (this *Download) GetFrom() []byte {
+	if this != nil {
+		return this.From
+	}
+	return nil
+}
+
+func (this *Download) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Download) GetResume() int64 {
+	if this != nil && this.Resume != nil {
+		return *this.Resume
+	}
+	return 0
+}
+
+type DownloadReply struct {
+	Size             *int64 `protobuf:"varint,1,req,name=size" json:"size,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *DownloadReply) Reset()         { *this = DownloadReply{} }
+func (this *DownloadReply) String() string { return proto.CompactTextString(this) }
+func (*DownloadReply) ProtoMessage()       {}
+
+func (this *DownloadReply) GetSize() int64 {
+	if this != nil && this.Size != nil {
+		return *this.Size
+	}
+	return 0
+}
+
+type SignedRevocation struct {
+	Revocation       *SignedRevocation_Revocation `protobuf:"bytes,1,req,name=revocation" json:"revocation,omitempty"`
+	Signature        []byte                       `protobuf:"bytes,2,req,name=signature" json:"signature,omitempty"`
+	XXX_unrecognized []byte                       `json:"-"`
+}
+
+func (this *SignedRevocation) Reset()         { *this = SignedRevocation{} }
+func (this *SignedRevocation) String() string { return proto.CompactTextString(this) }
+func (*SignedRevocation) ProtoMessage()       {}
+
+func (this *SignedRevocation) GetRevocation() *SignedRevocation_Revocation {
+	if this != nil {
+		return this.Revocation
+	}
+	return nil
+}
+
+func (this *SignedRevocation) GetSignature() []byte {
+	if this != nil {
+		return this.Signature
+	}
+	return nil
+}
+
+type SignedRevocation_Revocation struct {
+	Generation       *uint32 `protobuf:"fixed32,1,req,name=generation" json:"generation,omitempty"`
+	Revocation       []byte  `protobuf:"bytes,2,req,name=revocation" json:"revocation,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *SignedRevocation_Revocation) Reset()         { *this = SignedRevocation_Revocation{} }
+func (this *SignedRevocation_Revocation) String() string { return proto.CompactTextString(this) }
+func (*SignedRevocation_Revocation) ProtoMessage()       {}
+
+func (this *SignedRevocation_Revocation) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+func (this *SignedRevocation_Revocation) GetRevocation() []byte {
+	if this != nil {
+		return this.Revocation
+	}
+	return nil
+}
+
+type HMACSetup struct {
+	HmacKey          []byte `protobuf:"bytes,1,req,name=hmac_key" json:"hmac_key,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *HMACSetup) Reset()         { *this = HMACSetup{} }
+func (this *HMACSetup) String() string { return proto.CompactTextString(this) }
+func (*HMACSetup) ProtoMessage()       {}
+
+func (this *HMACSetup) GetHmacKey() []byte {
+	if this != nil {
+		return this.HmacKey
+	}
+	return nil
+}
+
+type HMACStrike struct {
+	Hmacs            []uint64 `protobuf:"fixed64,1,rep,packed,name=hmacs" json:"hmacs,omitempty"`
+	XXX_unrecognized []byte   `json:"-"`
+}
+
+func (this *HMACStrike) Reset()         { *this = HMACStrike{} }
+func (this *HMACStrike) String() string { return proto.CompactTextString(this) }
+func (*HMACStrike) ProtoMessage()       {}
+
+func (this *HMACStrike) GetHmacs() []uint64 {
+	if this != nil {
+		return this.Hmacs
+	}
+	return nil
+}
+
+type KeyExchange struct {
+	PublicKey        []byte  `protobuf:"bytes,1,req,name=public_key" json:"public_key,omitempty"`
+	IdentityPublic   []byte  `protobuf:"bytes,2,req,name=identity_public" json:"identity_public,omitempty"`
+	Server           *string `protobuf:"bytes,3,req,name=server" json:"server,omitempty"`
+	Dh               []byte  `protobuf:"bytes,4,req,name=dh" json:"dh,omitempty"`
+	Dh1              []byte  `protobuf:"bytes,8,opt,name=dh1" json:"dh1,omitempty"`
+	Group            []byte  `protobuf:"bytes,5,req,name=group" json:"group,omitempty"`
+	GroupKey         []byte  `protobuf:"bytes,6,req,name=group_key" json:"group_key,omitempty"`
+	Generation       *uint32 `protobuf:"varint,7,req,name=generation" json:"generation,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *KeyExchange) Reset()         { *this = KeyExchange{} }
+func (this *KeyExchange) String() string { return proto.CompactTextString(this) }
+func (*KeyExchange) ProtoMessage()       {}
+
+func (this *KeyExchange) GetPublicKey() []byte {
+	if this != nil {
+		return this.PublicKey
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetIdentityPublic() []byte {
+	if this != nil {
+		return this.IdentityPublic
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetServer() string {
+	if this != nil && this.Server != nil {
+		return *this.Server
+	}
+	return ""
+}
+
+func (this *KeyExchange) GetDh() []byte {
+	if this != nil {
+		return this.Dh
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetDh1() []byte {
+	if this != nil {
+		return this.Dh1
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetGroup() []byte {
+	if this != nil {
+		return this.Group
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetGroupKey() []byte {
+	if this != nil {
+		return this.GroupKey
+	}
+	return nil
+}
+
+func (this *KeyExchange) GetGeneration() uint32 {
+	if this != nil && this.Generation != nil {
+		return *this.Generation
+	}
+	return 0
+}
+
+type SignedKeyExchange struct {
+	Signed           []byte `protobuf:"bytes,1,req,name=signed" json:"signed,omitempty"`
+	Signature        []byte `protobuf:"bytes,2,req,name=signature" json:"signature,omitempty"`
+	XXX_unrecognized []byte `json:"-"`
+}
+
+func (this *SignedKeyExchange) Reset()         { *this = SignedKeyExchange{} }
+func (this *SignedKeyExchange) String() string { return proto.CompactTextString(this) }
+func (*SignedKeyExchange) ProtoMessage()       {}
+
+func (this *SignedKeyExchange) GetSigned() []byte {
+	if this != nil {
+		return this.Signed
+	}
+	return nil
+}
+
+func (this *SignedKeyExchange) GetSignature() []byte {
+	if this != nil {
+		return this.Signature
+	}
+	return nil
+}
+
+type Message struct {
+	Id               *uint64               `protobuf:"fixed64,1,req,name=id" json:"id,omitempty"`
+	Time             *int64                `protobuf:"varint,2,req,name=time" json:"time,omitempty"`
+	Body             []byte                `protobuf:"bytes,3,req,name=body" json:"body,omitempty"`
+	BodyEncoding     *Message_Encoding     `protobuf:"varint,4,opt,name=body_encoding,enum=protos.Message_Encoding" json:"body_encoding,omitempty"`
+	MyNextDh         []byte                `protobuf:"bytes,5,opt,name=my_next_dh" json:"my_next_dh,omitempty"`
+	InReplyTo        *uint64               `protobuf:"varint,6,opt,name=in_reply_to" json:"in_reply_to,omitempty"`
+	AlsoAck          []uint64              `protobuf:"varint,10,rep,name=also_ack" json:"also_ack,omitempty"`
+	Files            []*Message_Attachment `protobuf:"bytes,7,rep,name=files" json:"files,omitempty"`
+	DetachedFiles    []*Message_Detachment `protobuf:"bytes,8,rep,name=detached_files" json:"detached_files,omitempty"`
+	SupportedVersion *int32                `protobuf:"varint,9,opt,name=supported_version" json:"supported_version,omitempty"`
+	XXX_unrecognized []byte                `json:"-"`
+}
+
+func (this *Message) Reset()         { *this = Message{} }
+func (this *Message) String() string { return proto.CompactTextString(this) }
+func (*Message) ProtoMessage()       {}
+
+func (this *Message) GetId() uint64 {
+	if this != nil && this.Id != nil {
+		return *this.Id
+	}
+	return 0
+}
+
+func (this *Message) GetTime() int64 {
+	if this != nil && this.Time != nil {
+		return *this.Time
+	}
+	return 0
+}
+
+func (this *Message) GetBody() []byte {
+	if this != nil {
+		return this.Body
+	}
+	return nil
+}
+
+func (this *Message) GetBodyEncoding() Message_Encoding {
+	if this != nil && this.BodyEncoding != nil {
+		return *this.BodyEncoding
+	}
+	return 0
+}
+
+func (this *Message) GetMyNextDh() []byte {
+	if this != nil {
+		return this.MyNextDh
+	}
+	return nil
+}
+
+func (this *Message) GetInReplyTo() uint64 {
+	if this != nil && this.InReplyTo != nil {
+		return *this.InReplyTo
+	}
+	return 0
+}
+
+func (this *Message) GetAlsoAck() []uint64 {
+	if this != nil {
+		return this.AlsoAck
+	}
+	return nil
+}
+
+func (this *Message) GetFiles() []*Message_Attachment {
+	if this != nil {
+		return this.Files
+	}
+	return nil
+}
+
+func (this *Message) GetDetachedFiles() []*Message_Detachment {
+	if this != nil {
+		return this.DetachedFiles
+	}
+	return nil
+}
+
+func (this *Message) GetSupportedVersion() int32 {
+	if this != nil && this.SupportedVersion != nil {
+		return *this.SupportedVersion
+	}
+	return 0
+}
+
+type Message_Attachment struct {
+	Filename         *string `protobuf:"bytes,1,req,name=filename" json:"filename,omitempty"`
+	Contents         []byte  `protobuf:"bytes,2,req,name=contents" json:"contents,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Message_Attachment) Reset()         { *this = Message_Attachment{} }
+func (this *Message_Attachment) String() string { return proto.CompactTextString(this) }
+func (*Message_Attachment) ProtoMessage()       {}
+
+func (this *Message_Attachment) GetFilename() string {
+	if this != nil && this.Filename != nil {
+		return *this.Filename
+	}
+	return ""
+}
+
+func (this *Message_Attachment) GetContents() []byte {
+	if this != nil {
+		return this.Contents
+	}
+	return nil
+}
+
+type Message_Detachment struct {
+	Filename         *string `protobuf:"bytes,1,req,name=filename" json:"filename,omitempty"`
+	Size             *uint64 `protobuf:"varint,2,req,name=size" json:"size,omitempty"`
+	PaddedSize       *uint64 `protobuf:"varint,3,req,name=padded_size" json:"padded_size,omitempty"`
+	ChunkSize        *uint32 `protobuf:"varint,4,req,name=chunk_size" json:"chunk_size,omitempty"`
+	Key              []byte  `protobuf:"bytes,5,req,name=key" json:"key,omitempty"`
+	Url              *string `protobuf:"bytes,6,opt,name=url" json:"url,omitempty"`
+	XXX_unrecognized []byte  `json:"-"`
+}
+
+func (this *Message_Detachment) Reset()         { *this = Message_Detachment{} }
+func (this *Message_Detachment) String() string { return proto.CompactTextString(this) }
+func (*Message_Detachment) ProtoMessage()       {}
+
+func (this *Message_Detachment) GetFilename() string {
+	if this != nil && this.Filename != nil {
+		return *this.Filename
+	}
+	return ""
+}
+
+func (this *Message_Detachment) GetSize() uint64 {
+	if this != nil && this.Size != nil {
+		return *this.Size
+	}
+	return 0
+}
+
+func (this *Message_Detachment) GetPaddedSize() uint64 {
+	if this != nil && this.PaddedSize != nil {
+		return *this.PaddedSize
+	}
+	return 0
+}
+
+func (this *Message_Detachment) GetChunkSize() uint32 {
+	if this != nil && this.ChunkSize != nil {
+		return *this.ChunkSize
+	}
+	return 0
+}
+
+func (this *Message_Detachment) GetKey() []byte {
+	if this != nil {
+		return this.Key
+	}
+	return nil
+}
+
+func (this *Message_Detachment) GetUrl() string {
+	if this != nil && this.Url != nil {
+		return *this.Url
+	}
+	return ""
+}
+
+func init() {
+	proto.RegisterEnum("protos.Reply_Status", Reply_Status_name, Reply_Status_value)
+	proto.RegisterEnum("protos.Message_Encoding", Message_Encoding_name, Message_Encoding_value)
+}
diff --git a/protos/pond.proto b/protos/pond.proto
new file mode 100644
index 0000000..104aab3
--- /dev/null
+++ b/protos/pond.proto
@@ -0,0 +1,283 @@
+package protos;
+
+// This protocol buffer file defines the protocol between Pond clients and
+// servers, and between clients directly.
+
+// A client/server transaction always takes exactly the same form:
+// First, the client sends a request to the server which is padded to a fixed
+// length. Then the server sends the reply, which is also padded. Finally,
+// the client securely closes the connection, which is a small message that
+// carries no payload.
+
+// Request is the client's request to the server. Only one of the optional
+// messages may be present in any Request.
+message Request {
+	optional NewAccount new_account = 1;
+	optional Delivery deliver = 2;
+	optional Fetch fetch = 3;
+	optional Upload upload = 4;
+	optional Download download = 5;
+	optional SignedRevocation revocation = 6;
+	optional HMACSetup hmac_setup = 7;
+	optional HMACStrike hmac_strike = 8;
+}
+
+// Reply is the server's reply to the client.
+message Reply {
+	enum Status {
+		OK = 0;
+		PARSE_ERROR = 1;
+		NO_REQUEST = 2;
+		INTERNAL_ERROR = 3;
+
+		IDENTITY_ALREADY_KNOWN = 10;
+		OVERLOAD = 11;
+
+		NO_SUCH_ADDRESS = 12;
+		DELIVERY_SIGNATURE_INVALID = 13;
+		INCORRECT_GENERATION = 14;
+		MAILBOX_FULL = 15;
+
+		NO_ACCOUNT = 16;
+
+		OVER_QUOTA = 17;
+		FILE_LARGER_THAN_SIZE = 18;
+		FILE_COMPLETE = 19;
+
+		NO_SUCH_FILE = 20;
+		RESUME_PAST_END_OF_FILE = 21;
+
+		GENERATION_REVOKED = 22;
+
+		CANNOT_PARSE_REVOCATION = 23;
+		// REGISTRATION_DISABLED may be returned after a NewAccount
+		// request to indicate the the server doesn't accept new
+		// registrations.
+		REGISTRATION_DISABLED = 24;
+
+		// HMAC_KEY_ALREADY_SET is returned in reply to a HMACSetup
+		// request if a different HMAC key has already been setup.
+		HMAC_KEY_ALREADY_SET = 25;
+		// HMAC_NOT_SETUP results from a delivery attempt when the
+		// recipient hasn't configured an HMAC key.
+		HMAC_NOT_SETUP = 26;
+		// HMAC_INCORRECT results from a delivery when the HMAC of the
+		// one-time public key doesn't validate.
+		HMAC_INCORRECT = 27;
+		// HMAC_USED results from a delivery when the HMAC value has
+		// already been used.
+		HMAC_USED = 28;
+		// HMAC_REVOKED results from a delivery when the HMAC value has
+		// been marked as revoked.
+		HMAC_REVOKED = 29;
+	}
+	optional Status status = 1 [ default = OK ];
+
+	optional AccountCreated account_created = 2;
+	optional Fetched fetched = 3;
+	optional ServerAnnounce announce = 4;
+	optional UploadReply upload = 5;
+	optional DownloadReply download = 6;
+	optional SignedRevocation revocation = 7;
+	repeated SignedRevocation extra_revocations = 8;
+}
+
+// NewAccount is a request that the client may send to the server to request a
+// new account. The public identity of the connecting client will be the `name'
+// of the new account.
+message NewAccount {
+	// generation contains the revocation generation for the account. The
+	// client should pick it at random in order to hide the number of
+	// revocations that the client has performed.
+	required fixed32 generation = 1;
+	// group contains the serialised bbssig.Group for authenticating
+	// deliveries to this account.
+	required bytes group = 2;
+	// hmac_key contains an HMAC key used to authenticate delivery
+	// attempts.
+	optional bytes hmac_key = 3;
+}
+
+// AccountDetails contains the state of an account.
+message AccountDetails {
+	// queue is the number of messages waiting at the server.
+	required uint32 queue = 1;
+	// max_queue is the maximum number of messages that the server will
+	// queue for this account.
+	required uint32 max_queue = 2;
+}
+
+// AccountCreated is the reply to a NewAccount request.
+message AccountCreated {
+	required AccountDetails details = 1;
+}
+
+// Delivery is a request from a client to deliver a message to an account on
+// this server. There's no explicit reply protobuf for this request. Success is
+// indicated via |status|.
+message Delivery {
+	// The 32-byte, public identity of the target account.
+	required bytes to = 1;
+	// A group signature of |message| proving authorisation to deliver
+	// messages to the account.
+	optional bytes group_signature = 2;
+	// The current generation number in order for the server to send
+	// revocation updates.
+	optional fixed32 generation = 3;
+	// The padded message to deliver.
+	required bytes message = 4;
+	// one_time_public_key contains an Ed25519 public key that was issued
+	// by the recipient in order to authenticate delivery attempts.
+	optional bytes one_time_public_key = 5;
+	// hmac_of_public_key contains a 63-bit HMAC of public key using the
+	// HMAC key known to server and recipient.
+	optional fixed64 hmac_of_public_key = 6;
+	// one_time_signature contains a signature, by public_key, of message.
+	optional bytes one_time_signature = 7;
+}
+
+// Fetch is a request to fetch a message. It may result in either a Fetched, or
+// ServerAnnounce message. (Or none at all if no messages are pending.)
+message Fetch {
+}
+
+// Fetched is the reply to a Fetch request if the server has a message for
+// delivery.
+message Fetched {
+	// group_signature is the group signature presented by the sender.
+	required bytes group_signature = 1;
+	// generation is the generation number used for delivery.
+	required fixed32 generation = 2;
+	required bytes message = 3;
+	required AccountDetails details = 4;
+}
+
+// ServerAnnounce is a special type of reply to a Fetch request. The message
+// comes from the server, rather than from another client and it's intended to
+// be used for announcements from the server operator to all or some users.
+message ServerAnnounce {
+	required Message message = 1;
+}
+
+message Upload {
+	required fixed64 id = 1;
+	required int64 size = 2;
+}
+
+message UploadReply {
+	optional int64 resume = 1;
+}
+
+message Download {
+	required bytes from = 1;
+	required fixed64 id = 2;
+	optional int64 resume = 3;
+}
+
+message DownloadReply {
+	required int64 size = 1;
+}
+
+// SignedRevocation is a request for the server to store an update to the group
+// public key that revokes some sender. The server will reply with a revocation
+// for generation x when a delivery to that generation is requested.
+message SignedRevocation {
+	message Revocation {
+		required fixed32 generation = 1;
+		required bytes revocation = 2;
+	}
+	required Revocation revocation = 1;
+	required bytes signature = 2;
+}
+
+// HMACSetup can be sent by a client to establish an HMAC key if it didn't do
+// so at account creation time.
+message HMACSetup {
+	required bytes hmac_key = 1;
+}
+
+// HMACStrike is used by a client to record a number of HMAC values as used.
+message HMACStrike {
+	// hmacs contains a number of 63-bit HMACs. The MSB is used to signal
+	// whether the HMAC should be considered used (0) or revoked (1).
+	repeated fixed64 hmacs = 1 [packed = true];
+}
+
+// KeyExchange is a message sent between clients to establish a relation. It's
+// always found inside a SignedKeyExchange.
+message KeyExchange {
+	// Ed25519 public key.
+	required bytes public_key = 1;
+	// Curve25519 public key. (Used to tell the server which account to
+	// deliver a message to.)
+	// Note: in the most up-to-date revision of the Pond ratchet, this
+	// should be equal to |public_key|, modulo isomorphism.
+	required bytes identity_public = 2;
+	// The URL of this user's home server.
+	required string server = 3;
+	// A Curve25519, initial Diffie-Hellman value.
+	required bytes dh = 4;
+	// dh1 contains the second, curve25519, public key if the new-form
+	// ratchet is being used.
+	optional bytes dh1 = 8;
+	// A serialised bbssig.Group.
+	required bytes group = 5;
+	// A bbssig.PrivateKey to authorise message delivery.
+	required bytes group_key = 6;
+	// The generation number of |group|.
+	required uint32 generation = 7;
+}
+
+// A SignedKeyExchange is a message that's sent between clients and exposed in
+// the UI. It's typically found in a PEM block with type "POND KEY EXCHANGE".
+message SignedKeyExchange {
+	// signed contains a serialised KeyExchange message.
+	required bytes signed = 1;
+	// signature contains an Ed25519 signature of |signed| by
+	// |signed.public_key|.
+	required bytes signature = 2;
+}
+
+// Message is typically contained within a NaCl box that's passed between
+// clients using Delivery and Fetch.
+message Message {
+	// id is generated by the sender in order for the receiver to associate
+	// replies.
+	required fixed64 id = 1;
+	// time is the creation time of the message in epoch nanoseconds.
+	required int64 time = 2;
+	// body, after decoding, is a utf8 message.
+	required bytes body = 3;
+	enum Encoding {
+		RAW = 0;
+		GZIP = 1;
+	}
+	optional Encoding body_encoding = 4;
+	// my_next_dh contains a Curve25519 public value for future messages.
+	optional bytes my_next_dh = 5;
+	// in_reply_to, if set, contains the |id| value of a previous message
+	// sent by the recipient.
+	optional uint64 in_reply_to = 6;
+	// also_ack contains message ids for other messages that are also
+	// acknowledged by this message.
+	repeated uint64 also_ack = 10;
+
+	message Attachment {
+		required string filename = 1;
+		required bytes contents = 2;
+	}
+	message Detachment {
+		required string filename = 1;
+		required uint64 size = 2;
+		required uint64 padded_size = 3;
+		required uint32 chunk_size = 4;
+		required bytes key = 5;
+		optional string url = 6;
+	}
+	repeated Attachment files = 7;
+	repeated Detachment detached_files = 8;
+
+	// supported_version allows a client to advertise the maximum supported
+	// version that it speaks.
+	optional int32 supported_version = 9;
+}
diff --git a/server/identity.dev b/server/identity.dev
new file mode 100644
index 0000000..8ce3f73
Binary files /dev/null and b/server/identity.dev differ
diff --git a/server/main.go b/server/main.go
new file mode 100644
index 0000000..12a37fa
--- /dev/null
+++ b/server/main.go
@@ -0,0 +1,227 @@
+package main
+
+import (
+	"crypto/rand"
+	"encoding/base32"
+	"flag"
+	"io"
+	"io/ioutil"
+	"log"
+	"net"
+	"os"
+	"path/filepath"
+	"strings"
+	"time"
+
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+
+	pond "github.com/agl/pond/protos"
+	"github.com/agl/pond/server/protos"
+	"github.com/agl/pond/transport"
+)
+
+var (
+	baseDirectory *string = flag.String("base-directory", "", "directory to store server state and config")
+	initFlag      *bool   = flag.Bool("init", false, "if true, setup a new base directory")
+	port          *int    = flag.Int("port", 16333, "TCP port to use when setting up a new base directory")
+	makeAnnounce  *string = flag.String("make-announce", "", "If set, the location of a text file containing an announcement message which will be written to stdout in binary.")
+	lifelineFd    *int    = flag.Int("lifeline-fd", -1, "If set, the server will exit when this descriptor returns EOF")
+)
+
+const configFilename = "config"
+const identityFilename = "identity"
+
+func main() {
+	flag.Parse()
+
+	if len(*makeAnnounce) > 0 {
+		msgBytes, err := ioutil.ReadFile(*makeAnnounce)
+		if err != nil {
+			panic(err)
+		}
+		announce := &pond.Message{
+			Id:           proto.Uint64(0),
+			Time:         proto.Int64(time.Now().Unix()),
+			Body:         msgBytes,
+			MyNextDh:     []byte{},
+			BodyEncoding: pond.Message_RAW.Enum(),
+		}
+		announceBytes, err := proto.Marshal(announce)
+		if err != nil {
+			panic(err)
+		}
+		os.Stdout.Write(announceBytes)
+		return
+	}
+
+	if len(*baseDirectory) == 0 {
+		log.Fatalf("Must give --base-directory")
+		return
+	}
+	configPath := filepath.Join(*baseDirectory, configFilename)
+
+	var identity [32]byte
+	if *initFlag {
+		if err := os.MkdirAll(*baseDirectory, 0700); err != nil {
+			log.Fatalf("Failed to create base directory: %s", err)
+			return
+		}
+
+		if _, err := io.ReadFull(rand.Reader, identity[:]); err != nil {
+			log.Fatalf("Failed to read random bytes: %s", err)
+			return
+		}
+
+		if err := ioutil.WriteFile(filepath.Join(*baseDirectory, identityFilename), identity[:], 0600); err != nil {
+			log.Fatalf("Failed to write identity file: %s", err)
+			return
+		}
+
+		defaultConfig := &protos.Config{
+			Port: proto.Uint32(uint32(*port)),
+		}
+
+		configFile, err := os.OpenFile(configPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
+		if err != nil {
+			log.Fatalf("Failed to create config file: %s", err)
+		}
+		proto.MarshalText(configFile, defaultConfig)
+		configFile.Close()
+	}
+
+	identityBytes, err := ioutil.ReadFile(filepath.Join(*baseDirectory, identityFilename))
+	if err != nil {
+		log.Print("Use --init to setup a new base directory")
+		log.Fatalf("Failed to read identity file: %s", err)
+		return
+	}
+	if len(identityBytes) != 32 {
+		log.Fatalf("Identity file is not 32 bytes long")
+		return
+	}
+	copy(identity[:], identityBytes)
+
+	config := new(protos.Config)
+	configBytes, err := ioutil.ReadFile(configPath)
+	if err != nil {
+		log.Fatalf("No config file found")
+	}
+
+	if err := proto.UnmarshalText(string(configBytes), config); err != nil {
+		log.Fatalf("Failed to parse config: %s", err)
+	}
+
+	if err := maybeConvertMessagesToNewFormat(*baseDirectory); err != nil {
+		log.Fatalf("Failed to convert messages to new naming scheme: %s", err)
+	}
+
+	ip := net.IPv4(127, 0, 0, 1) // IPv4 loopback interface
+
+	if config.Address != nil {
+		if ip = net.ParseIP(*config.Address); ip == nil {
+			log.Fatalf("Failed to parse address from config: %s", ip)
+		}
+	}
+
+	listenAddr := net.TCPAddr{
+		IP:   ip,
+		Port: int(*config.Port),
+	}
+	listener, err := net.ListenTCP("tcp", &listenAddr)
+	if err != nil {
+		log.Fatalf("Failed to listen on port: %s", err)
+	}
+
+	var identityPublic [32]byte
+	curve25519.ScalarBaseMult(&identityPublic, &identity)
+	identityString := strings.Replace(base32.StdEncoding.EncodeToString(identityPublic[:]), "=", "", -1)
+	log.Printf("Started. Listening on port %d with identity %s", listener.Addr().(*net.TCPAddr).Port, identityString)
+
+	server := NewServer(*baseDirectory, config.GetAllowRegistration())
+
+	if *lifelineFd > -1 {
+		lifeline := os.NewFile(uintptr(*lifelineFd), "lifeline")
+		go func() {
+			var buf [1]byte
+			lifeline.Read(buf[:])
+			os.Exit(255)
+		}()
+	}
+
+	for {
+		conn, err := listener.Accept()
+		if err != nil {
+			log.Printf("Error accepting connection: %s", err)
+			continue
+		}
+
+		go handleConnection(server, conn, &identity)
+	}
+}
+
+func handleConnection(server *Server, rawConn net.Conn, identity *[32]byte) {
+	rawConn.SetDeadline(time.Now().Add(30 * time.Second))
+	conn := transport.NewServer(rawConn, identity)
+
+	if err := conn.Handshake(); err != nil {
+		log.Printf("Error from handshake: %s", err)
+		return
+	}
+
+	server.Process(conn)
+	conn.Close()
+}
+
+// maybeConvertMessagesToNewFormat scans the accounts directory for messages
+// under the old naming scheme and updates them to use the new
+// naming scheme that includes millisecond delivery time at the beginning.
+func maybeConvertMessagesToNewFormat(baseDirectory string) error {
+	accountsPath := filepath.Join(baseDirectory, "accounts")
+	accountsDir, err := os.Open(accountsPath)
+	if err != nil {
+		if os.IsNotExist(err) {
+			return nil
+		}
+		return err
+	}
+	defer accountsDir.Close()
+
+	accounts, err := accountsDir.Readdir(0)
+	if err != nil {
+		return err
+	}
+
+	for _, ent := range accounts {
+		account := ent.Name()
+		if len(account) != 64 || strings.IndexFunc(account, notLowercaseHex) != -1 {
+			continue
+		}
+
+		accountPath := filepath.Join(accountsPath, account)
+		accountDir, err := os.Open(accountPath)
+		if err != nil {
+			return err
+		}
+		ents, err := accountDir.Readdir(0)
+		accountDir.Close()
+		if err != nil {
+			return err
+		}
+
+		for _, ent := range ents {
+			name := ent.Name()
+			if len(name) != 64 || strings.IndexFunc(name, notLowercaseHex) != -1 {
+				continue
+			}
+
+			oldName := filepath.Join(accountPath, name)
+			newName := filepath.Join(accountPath, timeToFilenamePrefix(ent.ModTime())+name)
+			if err := os.Rename(oldName, newName); err != nil {
+				return err
+			}
+		}
+	}
+
+	return nil
+}
diff --git a/server/protos/server.pb.go b/server/protos/server.pb.go
new file mode 100644
index 0000000..1faf4c9
--- /dev/null
+++ b/server/protos/server.pb.go
@@ -0,0 +1,51 @@
+// Code generated by protoc-gen-go.
+// source: github.com/agl/pond/server/protos/server.proto
+// DO NOT EDIT!
+
+package protos
+
+import proto "github.com/golang/protobuf/proto"
+import json "encoding/json"
+import math "math"
+
+// Reference proto, json, and math imports to suppress error if they are not otherwise used.
+var _ = proto.Marshal
+var _ = &json.SyntaxError{}
+var _ = math.Inf
+
+type Config struct {
+	Port              *uint32 `protobuf:"varint,1,req,name=port" json:"port,omitempty"`
+	Address           *string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"`
+	AllowRegistration *bool   `protobuf:"varint,3,opt,name=allow_registration,def=1" json:"allow_registration,omitempty"`
+	XXX_unrecognized  []byte  `json:"-"`
+}
+
+func (this *Config) Reset()         { *this = Config{} }
+func (this *Config) String() string { return proto.CompactTextString(this) }
+func (*Config) ProtoMessage()       {}
+
+const Default_Config_AllowRegistration bool = true
+
+func (this *Config) GetPort() uint32 {
+	if this != nil && this.Port != nil {
+		return *this.Port
+	}
+	return 0
+}
+
+func (this *Config) GetAddress() string {
+	if this != nil && this.Address != nil {
+		return *this.Address
+	}
+	return ""
+}
+
+func (this *Config) GetAllowRegistration() bool {
+	if this != nil && this.AllowRegistration != nil {
+		return *this.AllowRegistration
+	}
+	return Default_Config_AllowRegistration
+}
+
+func init() {
+}
diff --git a/server/protos/server.proto b/server/protos/server.proto
new file mode 100644
index 0000000..717e746
--- /dev/null
+++ b/server/protos/server.proto
@@ -0,0 +1,12 @@
+package protos;
+
+// Config contains the server's configutation options.
+message Config {
+	required uint32 port = 1;
+	// address is an optional IP address. If given, the server will only
+	// listen on this address.
+	optional string address = 2;
+	// allow_registration controls whether new account requests will be
+	// processed.
+	optional bool allow_registration = 3 [ default = true ];
+}
diff --git a/server/server.go b/server/server.go
new file mode 100644
index 0000000..eebef38
--- /dev/null
+++ b/server/server.go
@@ -0,0 +1,1243 @@
+package main
+
+import (
+	"crypto/hmac"
+	"crypto/sha256"
+	"crypto/subtle"
+	"encoding/binary"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"log"
+	"os"
+	"path/filepath"
+	"sort"
+	"strconv"
+	"strings"
+	"sync"
+	"time"
+
+	"github.com/agl/ed25519"
+	"github.com/agl/pond/bbssig"
+	pond "github.com/agl/pond/protos"
+	"github.com/agl/pond/transport"
+	"github.com/golang/protobuf/proto"
+)
+
+const (
+	// maxQueue is the maximum number of messages that we'll queue for any
+	// given user.
+	maxQueue = 100
+	// sweepInterval is the period between when the server checks for
+	// expired files.
+	sweepInterval = 24 * time.Hour
+	// fileLifetime is the amount of time that an uploaded file is kept
+	// for.
+	fileLifetime = 14 * 24 * time.Hour
+	// maxRevocations is the maximum number of revocations that we'll store
+	// on disk for any one account.
+	maxRevocations = 100
+	// maxFilesCount is the default, maximum number of uploads for a single
+	// account. This can be overridden by a "quota-files" file in the
+	// account directory.
+	maxFilesCount = 100
+	// maxFilesMB is the default, maximum number of megabytes for all
+	// uploads for a single account. This can be overridden by a
+	// "quota-megabytes" file in the account directory.
+	maxFilesMB = 100
+	// hmacValueMask is the bottom 63 bits. This is used for HMAC values
+	// where the HMAC is only 63 bits wide and the MSB is used to signal
+	// whether a revocation was used or not.
+	hmacValueMask = 0x7fffffffffffffff
+	// hmacMaxLength is the maximum size, in bytes, of an HMAC strike
+	// file. This is 256K entries.
+	hmacMaxLength = 2 * 1024 * 1024
+)
+
+type Account struct {
+	sync.Mutex
+
+	server       *Server
+	id           [32]byte
+	group        *bbssig.Group
+	filesValid   bool
+	filesCount   int64
+	filesSize    int64
+	hmacKey      [32]byte
+	hmacKeyValid bool
+}
+
+func NewAccount(s *Server, id *[32]byte) *Account {
+	a := &Account{
+		server: s,
+	}
+	copy(a.id[:], id[:])
+	return a
+}
+
+func (a *Account) HMACKey() (*[32]byte, bool) {
+	a.Lock()
+	defer a.Unlock()
+
+	if a.hmacKeyValid {
+		return &a.hmacKey, true
+	}
+
+	keyPath := a.HMACKeyPath()
+	keyBytes, err := ioutil.ReadFile(keyPath)
+	if err != nil {
+		return nil, false
+	}
+	if len(keyBytes) != len(a.hmacKey) {
+		log.Printf("Incorrect hmacKey length for %s", keyPath)
+		return nil, false
+	}
+
+	copy(a.hmacKey[:], keyBytes)
+	a.hmacKeyValid = true
+
+	return &a.hmacKey, true
+}
+
+// findHMAC finds v in hmacBytes. If found it returns zero and true. Otherwise
+// it returns the index where the value should be inserted and false.
+func findHMAC(hmacBytes []byte, v uint64) (insertIndex int, msb bool, found bool) {
+	v &= hmacValueMask
+
+	searchMin, searchMax := 0, len(hmacBytes)/8-1
+	for searchMin <= searchMax {
+		midPoint := searchMin + ((searchMax - searchMin) / 2)
+		midValue := binary.LittleEndian.Uint64(hmacBytes[midPoint*8:])
+		maskedMidValue := midValue & hmacValueMask
+
+		switch {
+		case maskedMidValue > v:
+			searchMax = midPoint - 1
+		case maskedMidValue < v:
+			searchMin = midPoint + 1
+		default:
+			return 0, maskedMidValue != midValue, true
+		}
+	}
+
+	return searchMin, false, false
+}
+
+func readHMACs(path string, overhead int) (f *os.File, hmacBytes []byte, ok bool) {
+	f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE, 0600)
+	if err != nil {
+		log.Printf("Failed to open HMAC strike file %s", err)
+		return
+	}
+
+	fi, err := f.Stat()
+	var size int64
+	if err != nil {
+		log.Printf("Failed to stat HMAC strike file %s", err)
+		goto err
+	}
+
+	size = fi.Size()
+
+	if size%8 != 0 {
+		log.Printf("HMAC strike file is not a multiple of 8: %s", path)
+		goto err
+	}
+
+	if size > hmacMaxLength {
+		log.Printf("HMAC strike file is too large: %s", path)
+		goto err
+	}
+
+	hmacBytes = make([]byte, size, size+int64(overhead))
+
+	if _, err := io.ReadFull(f, hmacBytes); err != nil {
+		log.Printf("Failed to read HMAC strike file %s", err)
+		goto err
+	}
+
+	ok = true
+	return
+
+err:
+	f.Close()
+	return
+}
+
+type hmacInsertResult int
+
+const (
+	hmacFresh hmacInsertResult = iota
+	hmacUsed
+	hmacRevoked
+)
+
+func insertHMAC(path string, v uint64) (result hmacInsertResult, ok bool) {
+	f, hmacBytes, ok := readHMACs(path, 0)
+	if !ok {
+		return hmacUsed, false
+	}
+	defer f.Close()
+
+	insertIndex, msb, found := findHMAC(hmacBytes, v)
+	if found {
+		if msb {
+			return hmacRevoked, true
+		}
+		return hmacUsed, true
+	}
+
+	var serialised [8]byte
+	binary.LittleEndian.PutUint64(serialised[:], v)
+
+	f.Seek(int64(insertIndex)*8, 0)
+	if _, err := f.Write(serialised[:]); err != nil {
+		log.Printf("Failed to write to HMAC file: %s", err)
+		return hmacUsed, false
+	}
+	if _, err := f.Write(hmacBytes[insertIndex*8:]); err != nil {
+		log.Printf("Failed to write to HMAC file: %s", err)
+		return hmacUsed, false
+	}
+
+	return hmacFresh, true
+}
+
+func (a *Account) InsertHMAC(v uint64) (result hmacInsertResult, ok bool) {
+	if v&hmacValueMask != v {
+		panic("unmasked value given to InsertHMAC")
+	}
+
+	a.Lock()
+	defer a.Unlock()
+
+	return insertHMAC(a.HMACValuesPath(), v)
+}
+
+type hmacVector []byte
+
+func (hmacs hmacVector) Len() int {
+	return len(hmacs) / 8
+}
+
+func (hmacs hmacVector) Less(i, j int) bool {
+	iVal := binary.LittleEndian.Uint64(hmacs[8*i:]) & hmacValueMask
+	jVal := binary.LittleEndian.Uint64(hmacs[8*j:]) & hmacValueMask
+
+	return iVal < jVal
+}
+
+func (hmacs hmacVector) Swap(i, j int) {
+	var tmp [8]byte
+	copy(tmp[:], hmacs[8*i:])
+	copy(hmacs[i*8:(i+1)*8], hmacs[8*j:])
+	copy(hmacs[j*8:], tmp[:])
+}
+
+func insertHMACs(path string, vs []uint64) bool {
+	switch len(vs) {
+	case 0:
+		return true
+	case 1:
+		_, ok := insertHMAC(path, vs[0])
+		return ok
+	}
+
+	f, hmacBytes, ok := readHMACs(path, 8*len(vs))
+	if !ok {
+		return false
+	}
+	defer f.Close()
+
+	var serialised [8]byte
+	for _, v := range vs {
+		if _, _, found := findHMAC(hmacBytes, v); found {
+			continue
+		}
+		binary.LittleEndian.PutUint64(serialised[:], v)
+		hmacBytes = append(hmacBytes, serialised[:]...)
+	}
+
+	sort.Sort(hmacVector(hmacBytes))
+
+	f.Seek(0, 0)
+	if _, err := f.Write(hmacBytes); err != nil {
+		log.Printf("Failed to write to HMAC file: %s", err)
+		return false
+	}
+
+	return true
+}
+
+func (a *Account) InsertHMACs(vs []uint64) bool {
+	a.Lock()
+	defer a.Unlock()
+
+	return insertHMACs(a.HMACValuesPath(), vs)
+}
+
+func (a *Account) Group() *bbssig.Group {
+	a.Lock()
+	defer a.Unlock()
+
+	if a.group != nil {
+		return a.group
+	}
+
+	groupPath := filepath.Join(a.Path(), "group")
+	groupBytes, err := ioutil.ReadFile(groupPath)
+	if err != nil {
+		log.Printf("Failed to load group from %s: %s", groupPath, err)
+		return nil
+	}
+
+	var ok bool
+	if a.group, ok = new(bbssig.Group).Unmarshal(groupBytes); !ok {
+		log.Printf("Failed to parse group from %s", groupPath)
+		return nil
+	}
+
+	return a.group
+}
+
+func (a *Account) Path() string {
+	return filepath.Join(a.server.baseDirectory, "accounts", fmt.Sprintf("%x", a.id[:]))
+}
+
+func (a *Account) FilePath() string {
+	return filepath.Join(a.Path(), "files")
+}
+
+func (a *Account) RevocationPath() string {
+	return filepath.Join(a.Path(), "revocations")
+}
+
+func (a *Account) HMACKeyPath() string {
+	return filepath.Join(a.Path(), "hmackey")
+}
+
+func (a *Account) HMACValuesPath() string {
+	return filepath.Join(a.Path(), "hmacstrike")
+}
+
+func (a *Account) LoadFileInfo() bool {
+	a.Lock()
+	defer a.Unlock()
+
+	return a.loadFileInfo()
+}
+
+func (a *Account) loadFileInfo() bool {
+	if a.filesValid {
+		return true
+	}
+
+	path := filepath.Join(a.Path(), "files")
+	dir, err := os.Open(path)
+	if err != nil {
+		if err = os.Mkdir(path, 0700); err != nil {
+			log.Printf("Failed to create files directory %s: %s", path, err)
+			return false
+		}
+		dir, err = os.Open(path)
+	}
+	if err != nil {
+		log.Printf("Failed to open files directory %s: %s", path, err)
+		return false
+	}
+	defer dir.Close()
+
+	ents, err := dir.Readdir(0)
+	if err != nil {
+		log.Printf("Failed to read %s: %s", path, err)
+		return false
+	}
+
+	for _, ent := range ents {
+		if ent.IsDir() {
+			continue
+		}
+		a.filesCount++
+		a.filesSize += ent.Size()
+	}
+
+	a.filesValid = true
+	return true
+}
+
+func (a *Account) numericConfig(name string, defValue int64) (int64, error) {
+	path := filepath.Join(a.Path(), name)
+	contents, err := ioutil.ReadFile(path)
+	if err != nil {
+		if !os.IsNotExist(err) {
+			return defValue, err
+		}
+		return defValue, nil
+	}
+	return strconv.ParseInt(strings.TrimSpace(string(contents)), 10, 64)
+}
+
+func (a *Account) QuotaBytes() (int64, error) {
+	mb, err := a.numericConfig("quota-megabytes", maxFilesMB)
+	return 1024 * 1024 * mb, err
+}
+
+func (a *Account) QuotaFiles() (int64, error) {
+	return a.numericConfig("quota-files", maxFilesCount)
+}
+
+func (a *Account) ReserveFile(newFile bool, size int64) bool {
+	a.Lock()
+	defer a.Unlock()
+
+	if !a.loadFileInfo() {
+		return false
+	}
+
+	newCount := a.filesCount
+	if newFile {
+		newCount++
+		if newCount < a.filesCount {
+			return false
+		}
+	}
+
+	newSize := a.filesSize + size
+	if newSize < a.filesSize {
+		return false
+	}
+
+	maxFiles, err := a.QuotaFiles()
+	if err != nil {
+		log.Printf("Error from QuotaFiles for %x: %s", a.id[:], err)
+	}
+
+	maxBytes, err := a.QuotaBytes()
+	if err != nil {
+		log.Printf("Error from QuotaBytes for %x: %s", a.id[:], err)
+	}
+
+	if newCount > maxFiles || newSize > maxBytes {
+		return false
+	}
+
+	a.filesCount = newCount
+	a.filesSize = newSize
+	return true
+}
+
+func (a *Account) ReleaseFile(removedFile bool, size int64) {
+	a.Lock()
+	defer a.Unlock()
+
+	if !a.loadFileInfo() {
+		return
+	}
+
+	if removedFile && a.filesCount > 0 {
+		a.filesCount--
+	}
+	if a.filesSize >= size {
+		a.filesSize -= size
+	}
+}
+
+type Server struct {
+	sync.Mutex
+
+	baseDirectory string
+	// accounts caches the groups for users to save loading them every
+	// time.
+	accounts map[string]*Account
+	// lastSweepTime is the time when the server last performed a sweep for
+	// expired files.
+	lastSweepTime     time.Time
+	allowRegistration bool
+}
+
+func NewServer(dir string, allowRegistration bool) *Server {
+	return &Server{
+		baseDirectory:     dir,
+		accounts:          make(map[string]*Account),
+		allowRegistration: allowRegistration,
+	}
+}
+
+func (s *Server) Process(conn *transport.Conn) {
+	req := new(pond.Request)
+	if err := conn.ReadProto(req); err != nil {
+		log.Printf("Error from Read: %s", err)
+		return
+	}
+
+	from := &conn.Peer
+	var reply *pond.Reply
+	var messageFetched string
+
+	switch {
+	case req.NewAccount != nil:
+		reply = s.newAccount(from, req.NewAccount)
+	case req.Deliver != nil:
+		reply = s.deliver(from, req.Deliver)
+	case req.Fetch != nil:
+		reply, messageFetched = s.fetch(from, req.Fetch)
+	case req.Upload != nil:
+		reply = s.upload(from, conn, req.Upload)
+		if reply == nil {
+			// Connection will be handled by upload.
+			return
+		}
+	case req.Download != nil:
+		reply = s.download(conn, req.Download)
+		if reply == nil {
+			// Connection will be handled by download.
+			return
+		}
+	case req.Revocation != nil:
+		reply = s.revocation(from, req.Revocation)
+	case req.HmacSetup != nil:
+		reply = s.hmacSetup(from, req.HmacSetup)
+	case req.HmacStrike != nil:
+		reply = s.hmacStrike(from, req.HmacStrike)
+	default:
+		reply = &pond.Reply{Status: pond.Reply_NO_REQUEST.Enum()}
+	}
+
+	if reply == nil {
+		reply = &pond.Reply{}
+	}
+
+	if err := conn.WriteProto(reply); err != nil {
+		log.Printf("Error from Write: %s", err)
+		return
+	}
+
+	if err := conn.WaitForClose(); err != nil {
+		log.Printf("Error from WaitForClose: %s", err)
+		return
+	}
+
+	if len(messageFetched) > 0 {
+		// We replied to a Fetch and the client successfully acked the
+		// message by securely closing the connection. So we can mark
+		// the message as delivered.
+		s.confirmedDelivery(from, messageFetched)
+	}
+
+	s.Lock()
+	needSweep := false
+	now := time.Now()
+	if s.lastSweepTime.IsZero() || now.Before(s.lastSweepTime) || now.Sub(s.lastSweepTime) > sweepInterval {
+		s.lastSweepTime = now
+		needSweep = true
+	}
+	s.Unlock()
+
+	if needSweep {
+		s.sweep()
+	}
+}
+
+func notLowercaseHex(r rune) bool {
+	return (r < '0' || r > '9') && (r < 'a' || r > 'f')
+}
+
+func (s *Server) sweep() {
+	log.Printf("Performing sweep for old files")
+	now := time.Now()
+
+	accountsPath := filepath.Join(s.baseDirectory, "accounts")
+	accountsDir, err := os.Open(accountsPath)
+	if err != nil {
+		log.Printf("Failed to open %s: %s", accountsPath, err)
+		return
+	}
+	defer accountsDir.Close()
+
+	ents, err := accountsDir.Readdir(0)
+	if err != nil {
+		log.Printf("Failed to read %s: %s", accountsPath, err)
+		return
+	}
+
+	for _, ent := range ents {
+		name := ent.Name()
+		if len(name) != 64 || strings.IndexFunc(name, notLowercaseHex) != -1 {
+			continue
+		}
+
+		filesPath := filepath.Join(accountsPath, name, "files")
+		filesDir, err := os.Open(filesPath)
+		if os.IsNotExist(err) {
+			continue
+		} else if err != nil {
+			log.Printf("Failed to open %s: %s", filesPath, err)
+			continue
+		}
+
+		filesEnts, err := filesDir.Readdir(0)
+		if err == nil {
+			for _, fileEnt := range filesEnts {
+				name := fileEnt.Name()
+				if len(name) > 0 && strings.IndexFunc(name, notLowercaseHex) == -1 {
+					mtime := fileEnt.ModTime()
+					if now.After(mtime) && now.Sub(mtime) > fileLifetime {
+						if err := os.Remove(filepath.Join(filesPath, name)); err != nil {
+							log.Printf("Failed to delete file: %s", err)
+						}
+					}
+				}
+			}
+		} else {
+			log.Printf("Failed to read %s: %s", filesPath, err)
+		}
+
+		filesDir.Close()
+	}
+}
+
+func (s *Server) newAccount(from *[32]byte, req *pond.NewAccount) *pond.Reply {
+	account := NewAccount(s, from)
+
+	if !s.allowRegistration {
+		log.Printf("rejected registration of new account")
+		return &pond.Reply{Status: pond.Reply_REGISTRATION_DISABLED.Enum()}
+	}
+
+	var ok bool
+	account.group, ok = new(bbssig.Group).Unmarshal(req.Group)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	path := account.Path()
+	if _, err := os.Stat(path); err == nil {
+		return &pond.Reply{Status: pond.Reply_IDENTITY_ALREADY_KNOWN.Enum()}
+	}
+
+	if _, ok := new(bbssig.Group).Unmarshal(req.Group); !ok {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	if l := len(req.HmacKey); l != 0 && l != len(account.hmacKey) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	if err := os.MkdirAll(path, 0700); err != nil {
+		log.Printf("failed to create directory: %s", err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	if err := ioutil.WriteFile(filepath.Join(path, "group"), req.Group, 0600); err != nil {
+		log.Printf("failed to write group file: %s", err)
+		goto err
+	}
+
+	if len(req.HmacKey) > 0 {
+		if err := ioutil.WriteFile(account.HMACKeyPath(), req.HmacKey, 0600); err != nil {
+			log.Printf("failed to write HMAC key file: %s", err)
+			goto err
+		}
+		copy(account.hmacKey[:], req.HmacKey)
+		account.hmacKeyValid = true
+	}
+
+	s.Lock()
+	s.accounts[string(from[:])] = account
+	s.Unlock()
+
+	return &pond.Reply{
+		AccountCreated: &pond.AccountCreated{
+			Details: &pond.AccountDetails{
+				Queue:    proto.Uint32(0),
+				MaxQueue: proto.Uint32(maxQueue),
+			},
+		},
+	}
+
+err:
+	os.Remove(account.Path())
+	return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+}
+
+func (s *Server) getAccount(id *[32]byte) (*Account, bool) {
+	key := string(id[:])
+
+	s.Lock()
+	account, ok := s.accounts[key]
+	s.Unlock()
+
+	if ok {
+		return account, true
+	}
+
+	account = NewAccount(s, id)
+	path := account.Path()
+	if _, err := os.Stat(path); err != nil {
+		return nil, false
+	}
+
+	s.Lock()
+	if other, ok := s.accounts[key]; ok {
+		// We raced with another goroutine to create this and they won.
+		account = other
+	} else {
+		s.accounts[key] = account
+	}
+	s.Unlock()
+
+	return account, true
+}
+
+func authenticateDeliveryWithGroupSignature(account *Account, del *pond.Delivery) (*pond.Reply, bool) {
+	revPath := filepath.Join(account.RevocationPath(), fmt.Sprintf("%08x", *del.Generation))
+	revBytes, err := ioutil.ReadFile(revPath)
+	if err == nil {
+		var revocation pond.SignedRevocation
+		if err := proto.Unmarshal(revBytes, &revocation); err != nil {
+			log.Printf("Failed to parse revocation from file %s: %s", revPath, err)
+			return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, false
+		}
+
+		// maxRevocationBytes is the maximum number of bytes that we'll
+		// take up in extra revocations.
+		const maxRevocationBytes = 14000
+		revLength := len(revBytes)
+		var extraRevocations []*pond.SignedRevocation
+		for gen := *del.Generation + 1; revLength < maxRevocationBytes; gen++ {
+			revPath := filepath.Join(account.RevocationPath(), fmt.Sprintf("%08x", gen))
+			revBytes, err := ioutil.ReadFile(revPath)
+			if err != nil {
+				break
+			}
+
+			var revocation pond.SignedRevocation
+			if err := proto.Unmarshal(revBytes, &revocation); err != nil {
+				log.Printf("Failed to parse revocation from file %s: %s", revPath, err)
+				break
+			}
+
+			extraRevocations = append(extraRevocations, &revocation)
+			revLength += len(revBytes)
+		}
+
+		return &pond.Reply{Status: pond.Reply_GENERATION_REVOKED.Enum(), Revocation: &revocation, ExtraRevocations: extraRevocations}, false
+	}
+
+	sha := sha256.New()
+	sha.Write(del.Message)
+	digest := sha.Sum(nil)
+	sha.Reset()
+
+	group := account.Group()
+	if group == nil {
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, false
+	}
+
+	if !group.Verify(digest, sha, del.GroupSignature) {
+		return &pond.Reply{Status: pond.Reply_DELIVERY_SIGNATURE_INVALID.Enum()}, false
+	}
+
+	return nil, true
+}
+
+func authenticateDeliveryWithHMAC(account *Account, del *pond.Delivery) (*pond.Reply, bool) {
+	if len(del.OneTimePublicKey) != ed25519.PublicKeySize || len(del.OneTimeSignature) != ed25519.SignatureSize {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}, false
+	}
+
+	hmacKey, ok := account.HMACKey()
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_HMAC_NOT_SETUP.Enum()}, false
+	}
+
+	if x := *del.HmacOfPublicKey; x&hmacValueMask != x {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}, false
+	}
+
+	h := hmac.New(sha256.New, hmacKey[:])
+	h.Write(del.OneTimePublicKey)
+	digestFull := h.Sum(nil)
+	digest := binary.LittleEndian.Uint64(digestFull) & hmacValueMask
+
+	if digest != *del.HmacOfPublicKey {
+		return &pond.Reply{Status: pond.Reply_HMAC_INCORRECT.Enum()}, false
+	}
+
+	var publicKey [ed25519.PublicKeySize]byte
+	var sig [ed25519.SignatureSize]byte
+	copy(publicKey[:], del.OneTimePublicKey)
+	copy(sig[:], del.OneTimeSignature)
+
+	if !ed25519.Verify(&publicKey, del.Message, &sig) {
+		return &pond.Reply{Status: pond.Reply_DELIVERY_SIGNATURE_INVALID.Enum()}, false
+	}
+
+	result, ok := account.InsertHMAC(digest)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, false
+	}
+	switch result {
+	case hmacUsed:
+		return &pond.Reply{Status: pond.Reply_HMAC_USED.Enum()}, false
+	case hmacRevoked:
+		return &pond.Reply{Status: pond.Reply_HMAC_REVOKED.Enum()}, false
+	case hmacFresh:
+		return nil, true
+	default:
+		panic("should not happen")
+	}
+}
+
+// timeToFilenamePrefix returns a string that contains a hex encoding of t,
+// accurate to the millisecond.
+func timeToFilenamePrefix(t time.Time) string {
+	return fmt.Sprintf("%016x", uint64(t.UnixNano()/1000000))
+}
+
+func (s *Server) deliver(from *[32]byte, del *pond.Delivery) *pond.Reply {
+	var to [32]byte
+	if len(del.To) != len(to) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+	copy(to[:], del.To)
+
+	if b := len(del.OneTimePublicKey) > 0; b != (del.HmacOfPublicKey != nil) || b != (len(del.OneTimeSignature) > 0) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	if (len(del.GroupSignature) > 0) != (del.Generation != nil) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	hmacAuthenticated := len(del.OneTimePublicKey) > 0
+	groupSignatureAuthenticated := len(del.GroupSignature) > 0
+
+	if hmacAuthenticated == groupSignatureAuthenticated {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	account, ok := s.getAccount(&to)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_SUCH_ADDRESS.Enum()}
+	}
+
+	switch {
+	case groupSignatureAuthenticated:
+		reply, ok := authenticateDeliveryWithGroupSignature(account, del)
+		if !ok {
+			return reply
+		}
+	case hmacAuthenticated:
+		reply, ok := authenticateDeliveryWithHMAC(account, del)
+		if !ok {
+			return reply
+		}
+	default:
+		panic("internal error")
+	}
+
+	serialized, _ := proto.Marshal(del)
+
+	path := account.Path()
+	dir, err := os.Open(path)
+	if err != nil {
+		log.Printf("Failed to open %s: %s", dir, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	defer dir.Close()
+	ents, err := dir.Readdirnames(0)
+	if err != nil {
+		log.Printf("Failed to read %s: %s", dir, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	if len(ents) > maxQueue {
+		return &pond.Reply{Status: pond.Reply_MAILBOX_FULL.Enum()}
+	}
+
+	sha := sha256.New()
+	sha.Write(del.Message)
+	digest := sha.Sum(nil)
+
+	msgPath := filepath.Join(path, timeToFilenamePrefix(time.Now())+fmt.Sprintf("%x", digest))
+	if err := ioutil.WriteFile(msgPath, serialized, 0600); err != nil {
+		log.Printf("failed to write %s: %s", msgPath, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	return &pond.Reply{}
+}
+
+const announcePrefix = "announce-"
+
+func (s *Server) fetch(from *[32]byte, fetch *pond.Fetch) (*pond.Reply, string) {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_ACCOUNT.Enum()}, ""
+	}
+	path := account.Path()
+
+	dir, err := os.Open(path)
+	if err != nil {
+		log.Printf("Failed to open %s: %s", dir, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, ""
+	}
+	defer dir.Close()
+
+	var del *pond.Delivery
+	var announce *pond.Message
+	var isAnnounce bool
+	var name string
+	var queueLen uint32
+
+	for attempts := 0; attempts < 5; attempts++ {
+		dir.Seek(0, 0)
+		ents, err := dir.Readdir(0)
+		if err != nil {
+			log.Printf("Failed to read %s: %s", dir, err)
+			return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, ""
+		}
+
+		var minName string
+		names := make([]string, 0, len(ents))
+
+		for _, ent := range ents {
+			name := ent.Name()
+			if strings.HasPrefix(name, announcePrefix) {
+				isAnnounce = true
+				minName = name
+				break
+			}
+			if len(name) == (32+8)*2 && strings.IndexFunc(name, notLowercaseHex) == -1 {
+				names = append(names, name)
+			}
+		}
+
+		sort.Strings(names)
+		if len(minName) == 0 && len(names) > 0 {
+			minName = names[0]
+		}
+
+		if len(minName) == 0 {
+			// No messages at this time.
+			return nil, ""
+		}
+
+		msgPath := filepath.Join(path, minName)
+		var contents []byte
+		if contents, err = ioutil.ReadFile(msgPath); err != nil && os.IsNotExist(err) {
+			// The file could have been deleted by a concurrent
+			// Fetch by the same user.
+			continue
+		} else if err != nil {
+			log.Printf("Failed to read %s: %s", msgPath, err)
+			return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, ""
+		}
+
+		if len(contents) == 0 {
+			log.Printf("Empty message file: %s. Deleting.", msgPath)
+			os.Remove(msgPath)
+			continue
+		}
+
+		var unmarshaled proto.Message
+		if isAnnounce {
+			announce = new(pond.Message)
+			unmarshaled = announce
+		} else {
+			del = new(pond.Delivery)
+			unmarshaled = del
+		}
+
+		if err := proto.Unmarshal(contents, unmarshaled); err != nil {
+			log.Printf("Corrupt message file: %s (%s). Renaming out of the way.", msgPath, err)
+			if err := os.Rename(msgPath, msgPath+"-corrupt"); err != nil {
+				log.Printf("Failed to rename file: %s", err)
+			}
+			del = nil
+			announce = nil
+			continue
+		}
+		name = minName
+		queueLen = uint32(len(ents)) - 1
+		break
+	}
+
+	if len(name) == 0 {
+		log.Printf("Failed to open any message file in %s", path)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}, ""
+	}
+
+	if isAnnounce {
+		serverAnnounce := &pond.ServerAnnounce{
+			Message: announce,
+		}
+
+		return &pond.Reply{Announce: serverAnnounce}, name
+	}
+
+	fetched := &pond.Fetched{
+		GroupSignature: del.GroupSignature,
+		Generation:     del.Generation,
+		Message:        del.Message,
+		Details: &pond.AccountDetails{
+			Queue:    proto.Uint32(queueLen),
+			MaxQueue: proto.Uint32(0),
+		},
+	}
+
+	return &pond.Reply{Fetched: fetched}, name
+}
+
+func (s *Server) confirmedDelivery(from *[32]byte, messageName string) {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return
+	}
+	path := account.Path()
+	msgPath := filepath.Join(path, messageName)
+
+	if err := os.Remove(msgPath); err != nil && !os.IsNotExist(err) {
+		log.Printf("Failed to delete message file in %s: %s", msgPath, err)
+	}
+}
+
+func (s *Server) upload(from *[32]byte, conn *transport.Conn, upload *pond.Upload) *pond.Reply {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_ACCOUNT.Enum()}
+	}
+
+	if *upload.Size < 1 {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	path := filepath.Join(account.FilePath(), strconv.FormatUint(*upload.Id, 16))
+
+	if !account.LoadFileInfo() {
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0600)
+	if err != nil {
+		log.Printf("Failed to create file %s: %s", path, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	defer file.Close()
+
+	offset, err := file.Seek(0, 2 /* from end */)
+
+	switch {
+	case offset == *upload.Size:
+		return &pond.Reply{Status: pond.Reply_FILE_COMPLETE.Enum()}
+	case offset > *upload.Size:
+		return &pond.Reply{Status: pond.Reply_FILE_LARGER_THAN_SIZE.Enum()}
+	}
+
+	size := *upload.Size - offset
+	if !account.ReserveFile(offset > 0, size) {
+		return &pond.Reply{Status: pond.Reply_OVER_QUOTA.Enum()}
+	}
+
+	var resume *int64
+	if offset > 0 {
+		resume = proto.Int64(offset)
+	}
+
+	reply := &pond.Reply{
+		Upload: &pond.UploadReply{
+			Resume: resume,
+		},
+	}
+	if err := conn.WriteProto(reply); err != nil {
+		return nil
+	}
+
+	n, err := io.Copy(file, io.LimitReader(conn, size))
+	switch {
+	case n == 0:
+		os.Remove(path)
+		account.ReleaseFile(true, size)
+	case n < size:
+		account.ReleaseFile(false, size-n)
+	case n == size:
+		if err == nil {
+			conn.Write([]byte{0})
+		}
+	case n > size:
+		panic("impossible")
+	}
+
+	return nil
+}
+
+func (s *Server) download(conn *transport.Conn, download *pond.Download) *pond.Reply {
+	var from [32]byte
+	if len(download.From) != len(from) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+	copy(from[:], download.From)
+
+	account, ok := s.getAccount(&from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_SUCH_ADDRESS.Enum()}
+	}
+
+	path := filepath.Join(account.FilePath(), strconv.FormatUint(*download.Id, 16))
+	file, err := os.OpenFile(path, os.O_RDONLY, 0600)
+	if err != nil {
+		return &pond.Reply{Status: pond.Reply_NO_SUCH_FILE.Enum()}
+	}
+	defer file.Close()
+
+	fi, err := file.Stat()
+	if err != nil {
+		log.Printf("failed to stat file %s: %s", path, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	size := fi.Size()
+
+	if download.Resume != nil {
+		if *download.Resume < 1 {
+			return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+		}
+
+		if size <= *download.Resume {
+			return &pond.Reply{Status: pond.Reply_RESUME_PAST_END_OF_FILE.Enum()}
+		}
+		pos, err := file.Seek(*download.Resume, 0 /* from start */)
+		if pos != *download.Resume || err != nil {
+			log.Printf("failed to seek to %d in %s: got %d %s", *download.Resume, path, pos, err)
+			return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+		}
+	}
+
+	reply := &pond.Reply{
+		Download: &pond.DownloadReply{
+			Size: proto.Int64(size),
+		},
+	}
+	if err := conn.WriteProto(reply); err != nil {
+		return nil
+	}
+
+	io.Copy(conn, file)
+	return nil
+}
+
+func (s *Server) revocation(from *[32]byte, signedRevocation *pond.SignedRevocation) *pond.Reply {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_ACCOUNT.Enum()}
+	}
+
+	revocation, ok := new(bbssig.Revocation).Unmarshal(signedRevocation.Revocation.Revocation)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_CANNOT_PARSE_REVOCATION.Enum()}
+	}
+
+	// First check that the account doesn't have too many revocations
+	// stored.
+
+	revPath := account.RevocationPath()
+	os.MkdirAll(revPath, 0777)
+
+	revDir, err := os.Open(revPath)
+	if err != nil {
+		log.Printf("Failed to open %s: %s", revPath, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	defer revDir.Close()
+
+	ents, err := revDir.Readdir(0)
+	if err != nil {
+		log.Printf("Failed to read %s: %s", revDir, err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	if len(ents) > maxRevocations {
+		// Delete the oldest revocation.
+		names := make([]string, 0, len(ents))
+		for _, ent := range ents {
+			names = append(names, ent.Name())
+		}
+		sort.Strings(names)
+		path := filepath.Join(revPath, names[0])
+		if err := os.Remove(path); err != nil {
+			log.Printf("Failed to remove %s: %s", path, err)
+			return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+		}
+	}
+
+	path := filepath.Join(revPath, fmt.Sprintf("%08x", *signedRevocation.Revocation.Generation))
+	revBytes, err := proto.Marshal(signedRevocation)
+	if err != nil {
+		log.Printf("Failed to serialise revocation: %s", err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	if err := ioutil.WriteFile(path, revBytes, 0666); err != nil {
+		log.Printf("Failed to write revocation file: %s", err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	group := account.Group()
+	if group == nil {
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	groupCopy, _ := new(bbssig.Group).Unmarshal(group.Marshal())
+	groupCopy.Update(revocation)
+
+	account.Lock()
+	defer account.Unlock()
+
+	account.group = groupCopy
+	groupPath := filepath.Join(account.Path(), "group")
+	if err := ioutil.WriteFile(groupPath, groupCopy.Marshal(), 0600); err != nil {
+		log.Printf("failed to write group file: %s", err)
+	}
+
+	return nil
+}
+
+func (s *Server) hmacSetup(from *[32]byte, setup *pond.HMACSetup) *pond.Reply {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_ACCOUNT.Enum()}
+	}
+
+	if len(setup.HmacKey) != len(account.hmacKey) {
+		return &pond.Reply{Status: pond.Reply_PARSE_ERROR.Enum()}
+	}
+
+	existingHMACKey, ok := account.HMACKey()
+	if ok {
+		if subtle.ConstantTimeCompare(setup.HmacKey, existingHMACKey[:]) == 1 {
+			return &pond.Reply{Status: pond.Reply_OK.Enum()}
+		} else {
+			return &pond.Reply{Status: pond.Reply_HMAC_KEY_ALREADY_SET.Enum()}
+		}
+	}
+
+	if err := ioutil.WriteFile(account.HMACKeyPath(), setup.HmacKey, 0600); err != nil {
+		log.Printf("failed to write HMAC key file: %s", err)
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+	copy(account.hmacKey[:], setup.HmacKey)
+	account.hmacKeyValid = true
+
+	return nil
+}
+
+func (s *Server) hmacStrike(from *[32]byte, strike *pond.HMACStrike) *pond.Reply {
+	account, ok := s.getAccount(from)
+	if !ok {
+		return &pond.Reply{Status: pond.Reply_NO_ACCOUNT.Enum()}
+	}
+
+	if !account.InsertHMACs(strike.Hmacs) {
+		return &pond.Reply{Status: pond.Reply_INTERNAL_ERROR.Enum()}
+	}
+
+	return nil
+}
diff --git a/server/server_test.go b/server/server_test.go
new file mode 100644
index 0000000..16675ce
--- /dev/null
+++ b/server/server_test.go
@@ -0,0 +1,1061 @@
+package main
+
+import (
+	"bytes"
+	"crypto/hmac"
+	"crypto/rand"
+	"crypto/sha256"
+	"encoding/binary"
+	"fmt"
+	"io"
+	"io/ioutil"
+	math_rand "math/rand"
+	"net"
+	"os"
+	"path/filepath"
+	"sync"
+	"testing"
+	"time"
+
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/salsa20"
+
+	"github.com/agl/ed25519"
+	"github.com/agl/pond/bbssig"
+	pond "github.com/agl/pond/protos"
+	"github.com/agl/pond/transport"
+	"github.com/golang/protobuf/proto"
+)
+
+type TestServer struct {
+	sync.WaitGroup
+
+	listener       *net.TCPListener
+	addr           *net.TCPAddr
+	server         *Server
+	dir            string
+	identity       [32]byte
+	identityPublic [32]byte
+}
+
+func (t *TestServer) Loop() {
+	t.Add(1)
+	for {
+		conn, err := t.listener.Accept()
+		if err != nil {
+			break
+		}
+
+		t.Add(1)
+		go t.handleConnection(conn)
+	}
+	t.Done()
+}
+
+func (t *TestServer) handleConnection(rawConn net.Conn) {
+	conn := transport.NewServer(rawConn, &t.identity)
+
+	if err := conn.Handshake(); err != nil {
+		panic(err)
+	}
+
+	t.server.Process(conn)
+	conn.Close()
+	t.Done()
+}
+
+func (t *TestServer) Dial(identity, identityPublic *[32]byte) *transport.Conn {
+	rawConn, err := net.DialTCP("tcp", nil, t.addr)
+	if err != nil {
+		panic(err)
+	}
+
+	conn := transport.NewClient(rawConn, identity, identityPublic, &t.identityPublic)
+	if err := conn.Handshake(); err != nil {
+		panic(err)
+	}
+	return conn
+}
+
+func (t *TestServer) Close() {
+	t.listener.Close()
+	t.Wait()
+}
+
+func NewTestServer(setup func(dir string)) *TestServer {
+	listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1)})
+	if err != nil {
+		panic(err)
+	}
+
+	dir, err := ioutil.TempDir("", "servertest")
+	if err != nil {
+		panic(err)
+	}
+
+	if setup != nil {
+		setup(dir)
+	}
+
+	testServer := &TestServer{
+		listener: listener,
+		addr:     listener.Addr().(*net.TCPAddr),
+		dir:      dir,
+		server:   NewServer(dir, true),
+	}
+	io.ReadFull(rand.Reader, testServer.identity[:])
+	curve25519.ScalarBaseMult(&testServer.identityPublic, &testServer.identity)
+
+	go testServer.Loop()
+	return testServer
+}
+
+type script struct {
+	numPlayers             int
+	numPlayersWithAccounts int
+	setupDir               func(dir string)
+	actions                []action
+}
+
+type action struct {
+	player          int
+	buildRequest    func(*scriptState) *pond.Request
+	request         *pond.Request
+	payload         []byte
+	validate        func(*testing.T, *pond.Reply)
+	payloadSize     int
+	validatePayload func(*testing.T, []byte)
+	// noAck can be set to suppress reading the ACK byte from the server,
+	// e.g. when simulating a truncated upload.
+	noAck bool
+}
+
+type scriptState struct {
+	identities       [][32]byte
+	publicIdentities [][32]byte
+	groupPrivateKeys []*bbssig.PrivateKey
+	hmacKeys         [][32]byte
+	testServer       *TestServer
+}
+
+func (s *scriptState) buildDelivery(to int, message []byte, generation uint32) *pond.Request {
+	memberKey, err := s.groupPrivateKeys[to].NewMember(rand.Reader)
+	if err != nil {
+		panic(err)
+	}
+	sha := sha256.New()
+	sha.Write(message)
+	digest := sha.Sum(nil)
+
+	sig, err := memberKey.Sign(rand.Reader, digest, sha)
+	if err != nil {
+		panic(err)
+	}
+	return &pond.Request{
+		Deliver: &pond.Delivery{
+			To:             s.publicIdentities[to][:],
+			GroupSignature: sig,
+			Generation:     proto.Uint32(generation),
+			Message:        message,
+		},
+	}
+}
+
+type salsaRNG struct {
+	seed int
+}
+
+func (rng salsaRNG) Read(buf []byte) (n int, err error) {
+	for i := range buf {
+		buf[i] = 0
+	}
+
+	var nonce [8]byte
+	var key [32]byte
+	binary.LittleEndian.PutUint32(key[:], uint32(rng.seed))
+	rng.seed++
+	salsa20.XORKeyStream(buf, buf, nonce[:], &key)
+
+	return len(buf), nil
+}
+
+func (s *scriptState) makeOneTimePubKey(to int, seed int) (pub *[ed25519.PublicKeySize]byte, priv *[ed25519.PrivateKeySize]byte, digest uint64) {
+	rng := rand.Reader
+	if seed >= 0 {
+		rng = &salsaRNG{seed}
+	}
+	pub, priv, err := ed25519.GenerateKey(rng)
+	if err != nil {
+		panic("ed25519 Generate Key failed: " + err.Error())
+	}
+
+	h := hmac.New(sha256.New, s.hmacKeys[to][:])
+	h.Write(pub[:])
+	digestFull := h.Sum(nil)
+	digest = binary.LittleEndian.Uint64(digestFull) & hmacValueMask
+	return
+}
+
+func (s *scriptState) buildHMACDelivery(to int, message []byte, seed int) *pond.Request {
+	pub, priv, digest := s.makeOneTimePubKey(to, seed)
+	sig := ed25519.Sign(priv, message)
+
+	return &pond.Request{
+		Deliver: &pond.Delivery{
+			To:               s.publicIdentities[to][:],
+			Message:          message,
+			OneTimePublicKey: pub[:],
+			HmacOfPublicKey:  proto.Uint64(digest),
+			OneTimeSignature: sig[:],
+		},
+	}
+}
+
+func runScript(t *testing.T, s script) {
+	server := NewTestServer(s.setupDir)
+	defer server.Close()
+
+	identities := make([][32]byte, s.numPlayers)
+	publicIdentities := make([][32]byte, s.numPlayers)
+	for i := range identities {
+		io.ReadFull(rand.Reader, identities[i][:])
+		curve25519.ScalarBaseMult(&publicIdentities[i], &identities[i])
+	}
+
+	groupPrivateKeys := make([]*bbssig.PrivateKey, s.numPlayersWithAccounts)
+	hmacKeys := make([][32]byte, s.numPlayersWithAccounts)
+	for i := range groupPrivateKeys {
+		var err error
+		groupPrivateKeys[i], err = bbssig.GenerateGroup(rand.Reader)
+		if err != nil {
+			panic(err)
+		}
+		rand.Reader.Read(hmacKeys[i][:])
+
+		conn := server.Dial(&identities[i], &publicIdentities[i])
+		if err := conn.WriteProto(&pond.Request{
+			NewAccount: &pond.NewAccount{
+				Generation: proto.Uint32(0),
+				Group:      groupPrivateKeys[i].Group.Marshal(),
+				HmacKey:    hmacKeys[i][:],
+			},
+		}); err != nil {
+			t.Fatal(err)
+		}
+
+		reply := new(pond.Reply)
+		if err := conn.ReadProto(reply); err != nil {
+			t.Fatalf("Error while reading reply from server: %s", err)
+		}
+		if reply.AccountCreated == nil {
+			t.Fatalf("Failed to create 1st account: %s", err)
+		}
+		conn.Close()
+	}
+
+	state := &scriptState{
+		identities:       identities,
+		publicIdentities: publicIdentities,
+		groupPrivateKeys: groupPrivateKeys,
+		hmacKeys:         hmacKeys,
+		testServer:       server,
+	}
+
+	for _, a := range s.actions {
+		conn := server.Dial(&identities[a.player], &publicIdentities[a.player])
+
+		req := a.request
+		if a.buildRequest != nil {
+			req = a.buildRequest(state)
+		}
+		if err := conn.WriteProto(req); err != nil {
+			t.Fatal(err)
+		}
+
+		reply := new(pond.Reply)
+		if err := conn.ReadProto(reply); err != nil {
+			t.Fatal(err)
+		}
+		if a.validate != nil {
+			a.validate(t, reply)
+		}
+
+		if len(a.payload) > 0 {
+			_, err := conn.Write(a.payload)
+			if err != nil {
+				t.Fatalf("Failed to write payload: %s", err)
+			}
+		}
+		if a.payloadSize > 0 {
+			fromServer := make([]byte, a.payloadSize)
+			if _, err := io.ReadFull(conn, fromServer); err != nil {
+				t.Errorf("Failed to read payload: %s", err)
+			}
+			if a.validatePayload != nil {
+				a.validatePayload(t, fromServer)
+			}
+		}
+		if len(a.payload) > 0 && !a.noAck {
+			var ack [1]byte
+			if n, err := conn.Read(ack[:]); err != nil || n != 1 {
+				t.Fatalf("Failed to read ack: %d %s", n, err)
+			}
+		}
+		conn.Close()
+	}
+}
+
+func oneShotTest(t *testing.T, request *pond.Request, validate func(*testing.T, *pond.Reply)) {
+	runScript(t, script{
+		numPlayers: 1,
+		actions: []action{
+			{
+				request:  request,
+				validate: validate,
+			},
+		},
+	})
+}
+
+func TestNoAccount(t *testing.T) {
+	t.Parallel()
+
+	oneShotTest(t, &pond.Request{Fetch: new(pond.Fetch)}, func(t *testing.T, reply *pond.Reply) {
+		if reply.Status == nil || *reply.Status != pond.Reply_NO_ACCOUNT {
+			t.Errorf("Bad reply when fetching from invalid account: %s", reply)
+		}
+	})
+}
+
+func TestNoRequest(t *testing.T) {
+	t.Parallel()
+
+	oneShotTest(t, &pond.Request{}, func(t *testing.T, reply *pond.Reply) {
+		if reply.Status == nil || *reply.Status != pond.Reply_NO_REQUEST {
+			t.Errorf("Bad reply with no request: %s", reply)
+		}
+	})
+}
+
+func TestInvalidAddress(t *testing.T) {
+	t.Parallel()
+
+	oneShotTest(t, &pond.Request{
+		Deliver: &pond.Delivery{
+			To:             make([]byte, 5),
+			GroupSignature: make([]byte, 5),
+			Generation:     proto.Uint32(0),
+			Message:        make([]byte, 5),
+		},
+	}, func(t *testing.T, reply *pond.Reply) {
+		if reply.Status == nil || *reply.Status != pond.Reply_PARSE_ERROR {
+			t.Errorf("Bad reply to delivery with invalid address: %s", reply)
+		}
+	})
+}
+
+func TestNoSuchAddress(t *testing.T) {
+	t.Parallel()
+
+	oneShotTest(t, &pond.Request{
+		Deliver: &pond.Delivery{
+			To:             make([]byte, 32),
+			GroupSignature: make([]byte, 5),
+			Generation:     proto.Uint32(0),
+			Message:        make([]byte, 5),
+		},
+	}, func(t *testing.T, reply *pond.Reply) {
+		if reply.Status == nil || *reply.Status != pond.Reply_NO_SUCH_ADDRESS {
+			t.Errorf("Bad reply to delivery with invalid address: %s", reply)
+		}
+	})
+}
+
+func TestBadNewAccount(t *testing.T) {
+	t.Parallel()
+
+	oneShotTest(t, &pond.Request{
+		NewAccount: &pond.NewAccount{
+			Generation: proto.Uint32(0),
+			Group:      make([]byte, 5),
+		},
+	}, func(t *testing.T, reply *pond.Reply) {
+		if reply.AccountCreated != nil {
+			t.Errorf("Bad reply to new account: %s", reply)
+		}
+	})
+}
+
+func TestNewAccount(t *testing.T) {
+	t.Parallel()
+
+	groupPrivateKey, err := bbssig.GenerateGroup(rand.Reader)
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	oneShotTest(t, &pond.Request{
+		NewAccount: &pond.NewAccount{
+			Generation: proto.Uint32(0),
+			Group:      groupPrivateKey.Group.Marshal(),
+		},
+	}, func(t *testing.T, reply *pond.Reply) {
+		if reply.AccountCreated == nil {
+			t.Errorf("Bad reply to new account: %s", reply)
+		}
+	})
+}
+
+func TestPingPong(t *testing.T) {
+	t.Parallel()
+
+	message0 := make([]byte, 1000)
+	io.ReadFull(rand.Reader, message0)
+	message1 := make([]byte, 1000)
+	io.ReadFull(rand.Reader, message1)
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 2,
+		actions: []action{
+			{
+				player: 0,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildDelivery(1, message1, 1)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to first message send: %s", reply)
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildDelivery(0, message0, 1)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to second message send: %s", reply)
+					}
+				},
+			},
+			{
+				player: 0,
+				request: &pond.Request{
+					Fetch: &pond.Fetch{},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to first fetch: %s", reply)
+						return
+					}
+					if reply.Fetched == nil {
+						t.Errorf("No fetch result: %s", reply)
+						return
+					}
+					if !bytes.Equal(reply.Fetched.Message, message0) {
+						t.Errorf("Corrupt message: %s", reply)
+						return
+					}
+				},
+			},
+			{
+				player: 0,
+				request: &pond.Request{
+					Fetch: &pond.Fetch{},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to second fetch: %s", reply)
+						return
+					}
+					if reply.Fetched != nil {
+						t.Errorf("Fetched message twice!: %s", reply)
+						return
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestUpload(t *testing.T) {
+	t.Parallel()
+
+	payload := []byte("hello world")
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				request: &pond.Request{
+					Upload: &pond.Upload{
+						Id:   proto.Uint64(1),
+						Size: proto.Int64(int64(len(payload))),
+					},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+					if reply.Upload == nil {
+						t.Fatalf("Upload reply missing: %s", reply)
+					}
+					if reply.Upload.Resume != nil {
+						t.Fatalf("Upload reply contained unexpected Resume: %s", reply)
+					}
+				},
+				payload: payload,
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return &pond.Request{
+						Download: &pond.Download{
+							From: s.publicIdentities[0][:],
+							Id:   proto.Uint64(1),
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to download: %s", reply)
+					}
+					if reply.Download == nil {
+						t.Fatalf("Download reply missing: %s", reply)
+					}
+					if *reply.Download.Size != int64(len(payload)) {
+						t.Fatalf("Download reply contained wrong size: %d vs %d", *reply.Download.Size, len(payload))
+					}
+				},
+				payloadSize: len(payload),
+				validatePayload: func(t *testing.T, fromServer []byte) {
+					if !bytes.Equal(payload, fromServer) {
+						t.Errorf("bad payload in download: %x", fromServer)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestOversizeUpload(t *testing.T) {
+	t.Parallel()
+
+	runScript(t, script{
+		numPlayers:             1,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				request: &pond.Request{
+					Upload: &pond.Upload{
+						Id:   proto.Uint64(1),
+						Size: proto.Int64(1 << 27),
+					},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status == nil || *reply.Status != pond.Reply_OVER_QUOTA {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestQuotaOverride(t *testing.T) {
+	t.Parallel()
+
+	runScript(t, script{
+		numPlayers:             1,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				buildRequest: func(s *scriptState) *pond.Request {
+					path := filepath.Join(s.testServer.dir, "accounts", fmt.Sprintf("%x", s.publicIdentities[0][:]), "quota-megabytes")
+					ioutil.WriteFile(path, []byte("200\n"), 0644)
+
+					return &pond.Request{
+						Upload: &pond.Upload{
+							Id:   proto.Uint64(1),
+							Size: proto.Int64(1 << 27),
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to upload: %s", reply)
+						return
+					}
+					if reply.Upload == nil {
+						t.Errorf("Upload reply missing: %s", reply)
+						return
+					}
+					if reply.Upload.Resume != nil {
+						t.Errorf("Upload reply contained unexpected Resume: %s", reply)
+						return
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestResumeUpload(t *testing.T) {
+	t.Parallel()
+
+	payload := []byte("hello world")
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				request: &pond.Request{
+					Upload: &pond.Upload{
+						Id:   proto.Uint64(1),
+						Size: proto.Int64(int64(len(payload))),
+					},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+					if reply.Upload == nil {
+						t.Fatalf("Upload reply missing: %s", reply)
+					}
+					if reply.Upload.Resume != nil {
+						t.Fatalf("Upload reply contained unexpected Resume: %s", reply)
+					}
+				},
+				payload: payload[:2],
+				// Warning: this is inheriently racy. We don't
+				// wait for the ack from the server (because
+				// one will never come because we don't
+				// complete the upload). However, we don't know
+				// that the server has finished processing the
+				// bytes that we did send it.
+				noAck: true,
+			},
+			{
+				player: 0,
+				request: &pond.Request{
+					Upload: &pond.Upload{
+						Id:   proto.Uint64(1),
+						Size: proto.Int64(int64(len(payload))),
+					},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+					if reply.Upload == nil {
+						t.Fatalf("Upload reply missing: %s", reply)
+					}
+					if reply.Upload.Resume == nil || *reply.Upload.Resume != 2 {
+						t.Fatalf("Upload reply contained unexpected Resume: %s", reply)
+					}
+				},
+				payload: payload[2:],
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return &pond.Request{
+						Download: &pond.Download{
+							From: s.publicIdentities[0][:],
+							Id:   proto.Uint64(1),
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to download: %s", reply)
+					}
+					if reply.Download == nil {
+						t.Fatalf("Download reply missing: %s", reply)
+					}
+					if *reply.Download.Size != int64(len(payload)) {
+						t.Fatalf("Download reply contained wrong size: %d vs %d", *reply.Download.Size, len(payload))
+					}
+				},
+				payloadSize: len(payload),
+				validatePayload: func(t *testing.T, fromServer []byte) {
+					if !bytes.Equal(payload, fromServer) {
+						t.Errorf("bad payload in download: %x", fromServer)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestResumeDownload(t *testing.T) {
+	t.Parallel()
+
+	payload := []byte("hello world")
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				request: &pond.Request{
+					Upload: &pond.Upload{
+						Id:   proto.Uint64(1),
+						Size: proto.Int64(int64(len(payload))),
+					},
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+					if reply.Upload == nil {
+						t.Fatalf("Upload reply missing: %s", reply)
+					}
+					if reply.Upload.Resume != nil {
+						t.Fatalf("Upload reply contained unexpected Resume: %s", reply)
+					}
+				},
+				payload: payload,
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return &pond.Request{
+						Download: &pond.Download{
+							From:   s.publicIdentities[0][:],
+							Id:     proto.Uint64(1),
+							Resume: proto.Int64(2),
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to download: %s", reply)
+					}
+					if reply.Download == nil {
+						t.Fatalf("Download reply missing: %s", reply)
+					}
+					if *reply.Download.Size != int64(len(payload)) {
+						t.Fatalf("Download reply contained wrong size: %d vs %d", *reply.Download.Size, len(payload))
+					}
+				},
+				payloadSize: len(payload) - 2,
+				validatePayload: func(t *testing.T, fromServer []byte) {
+					if !bytes.Equal(payload[2:], fromServer) {
+						t.Errorf("bad payload in download: %x", fromServer)
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return &pond.Request{
+						Download: &pond.Download{
+							From:   s.publicIdentities[0][:],
+							Id:     proto.Uint64(1),
+							Resume: proto.Int64(20),
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status == nil || *reply.Status != pond.Reply_RESUME_PAST_END_OF_FILE {
+						t.Fatalf("Bad reply to download: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestAnnounce(t *testing.T) {
+	t.Parallel()
+
+	runScript(t, script{
+		numPlayers:             1,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				buildRequest: func(state *scriptState) *pond.Request {
+					announce := &pond.Message{
+						Id:       proto.Uint64(0),
+						Time:     proto.Int64(time.Now().Unix()),
+						Body:     []byte("Hello world"),
+						MyNextDh: []byte{},
+					}
+					announceBytes, err := proto.Marshal(announce)
+					t.Logf("%x", announceBytes)
+					if err != nil {
+						t.Fatalf("Failed to marshal announce message: %s", err)
+					}
+					if err = ioutil.WriteFile(fmt.Sprintf("%s/accounts/%x/announce-00000000", state.testServer.dir, state.publicIdentities[0]), announceBytes, 0666); err != nil {
+						t.Fatalf("Failed to write announce message: %s", err)
+					}
+					return &pond.Request{
+						Fetch: &pond.Fetch{},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Fatalf("Bad reply to upload: %s", reply)
+					}
+					if reply.Announce == nil {
+						t.Fatalf("Announce reply missing: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestSweep(t *testing.T) {
+	t.Parallel()
+
+	var fileDir, oldPath, newPath string
+
+	runScript(t, script{
+		numPlayers: 1,
+		setupDir: func(dir string) {
+			fileDir = filepath.Join(dir, "accounts", "00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff", "files")
+			if err := os.MkdirAll(fileDir, 0700); err != nil {
+				t.Fatalf("Failed to create files directory: %s", err)
+			}
+
+			oldPath = filepath.Join(fileDir, "01")
+			file, err := os.Create(oldPath)
+			if err != nil {
+				t.Fatalf("Failed to create file: %s", err)
+			}
+			file.Close()
+			oldTime := time.Now().AddDate(0, -2, 0)
+			if err := os.Chtimes(oldPath, oldTime, oldTime); err != nil {
+				t.Fatalf("Failed to set times for old file: %s", err)
+			}
+
+			newPath = filepath.Join(fileDir, "02")
+			file, err = os.Create(newPath)
+			if err != nil {
+				t.Fatalf("Failed to create file: %s", err)
+			}
+			file.Close()
+		},
+		actions: []action{
+			{
+				request: &pond.Request{},
+			},
+		},
+	})
+
+	if _, err := os.Stat(oldPath); !os.IsNotExist(err) {
+		t.Errorf("old path was not removed: %s", err)
+	}
+
+	if _, err := os.Stat(newPath); err != nil {
+		t.Errorf("new path was removed: %s", err)
+	}
+}
+
+func TestRevocation(t *testing.T) {
+	t.Parallel()
+
+	message := []byte{1, 2, 3}
+	var revocation *bbssig.Revocation
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				buildRequest: func(s *scriptState) *pond.Request {
+					memberKey, err := s.groupPrivateKeys[0].NewMember(rand.Reader)
+					if err != nil {
+						t.Errorf("Failed to create group member key: %s", err)
+					}
+					revocation = s.groupPrivateKeys[0].GenerateRevocation(memberKey)
+					return &pond.Request{
+						Revocation: &pond.SignedRevocation{
+							Revocation: &pond.SignedRevocation_Revocation{
+								Generation: proto.Uint32(0x1234),
+								Revocation: revocation.Marshal(),
+							},
+							Signature: []byte{7, 8, 9},
+						},
+					}
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to revocation: %s", reply)
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildDelivery(0, message, 0x1234)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status == nil || *reply.Status != pond.Reply_GENERATION_REVOKED {
+						t.Errorf("Bad status to delivery request: %#v", reply)
+					}
+					if reply.Revocation == nil {
+						t.Errorf("Missing revocation information: %#v", reply)
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					s.groupPrivateKeys[0].Update(revocation)
+					return s.buildDelivery(0, message, 0x1235)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to revocation: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestDoubleDelivery(t *testing.T) {
+	t.Parallel()
+
+	message := []byte{1, 2, 3}
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildHMACDelivery(0, message, 0)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status != nil {
+						t.Errorf("Bad reply to first message send: %s", reply)
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildHMACDelivery(0, message, 0)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status == nil || *reply.Status != pond.Reply_HMAC_USED {
+						t.Errorf("Bad reply to duplicate message send: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestDeliveryAfterRevocation(t *testing.T) {
+	t.Parallel()
+
+	message := []byte{1, 2, 3}
+
+	runScript(t, script{
+		numPlayers:             2,
+		numPlayersWithAccounts: 1,
+		actions: []action{
+			{
+				player: 0,
+				buildRequest: func(s *scriptState) *pond.Request {
+					_, _, hmac := s.makeOneTimePubKey(0, 0)
+					return &pond.Request{
+						HmacStrike: &pond.HMACStrike{
+							Hmacs: []uint64{hmac | 1<<63},
+						},
+					}
+				},
+			},
+			{
+				player: 1,
+				buildRequest: func(s *scriptState) *pond.Request {
+					return s.buildHMACDelivery(0, message, 0)
+				},
+				validate: func(t *testing.T, reply *pond.Reply) {
+					if reply.Status == nil || *reply.Status != pond.Reply_HMAC_REVOKED {
+						t.Errorf("Bad reply to duplicate message send: %s", reply)
+					}
+				},
+			},
+		},
+	})
+}
+
+func TestHMACInsertion(t *testing.T) {
+	dir, err := ioutil.TempDir("", "hmactest")
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	path := filepath.Join(dir, "hmacstrike")
+	values := math_rand.Perm(1024)
+
+	for i, v := range values {
+		v64 := uint64(v)
+		if i%2 == 0 {
+			v64 |= 1 << 63
+		}
+		result, ok := insertHMAC(path, v64)
+		if !ok {
+			t.Fatal("insert failed")
+		}
+		if result != hmacFresh {
+			t.Fatal("fresh value not recognised as such")
+		}
+	}
+
+	for i, v := range values {
+		result, ok := insertHMAC(path, uint64(v))
+		if !ok {
+			t.Fatal("insert failed")
+		}
+		expected := hmacUsed
+		if i%2 == 0 {
+			expected = hmacRevoked
+		}
+		if result != expected {
+			t.Fatal("value double inserted")
+		}
+	}
+
+	values = math_rand.Perm(2048)
+	var valueBatch [16]uint64
+	for i := 0; i < len(values); i += 16 {
+		for i, v := range values[i : i+16] {
+			valueBatch[i] = uint64(v)
+			if i%2 == 1 {
+				valueBatch[i] |= 1 << 63
+			}
+		}
+		if !insertHMACs(path, valueBatch[:]) {
+			t.Fatal("inserts failed")
+		}
+	}
+
+	for _, v := range values {
+		result, ok := insertHMAC(path, uint64(v))
+		if !ok {
+			t.Fatal("insert failed")
+		}
+		if result == hmacFresh {
+			t.Fatalf("value double inserted")
+		}
+	}
+}
diff --git a/transport/transport.go b/transport/transport.go
new file mode 100644
index 0000000..24cdf63
--- /dev/null
+++ b/transport/transport.go
@@ -0,0 +1,438 @@
+package transport
+
+import (
+	"crypto/hmac"
+	"crypto/rand"
+	"crypto/sha256"
+	"crypto/subtle"
+	"errors"
+	"hash"
+	"io"
+	"strconv"
+	"time"
+
+	pond "github.com/agl/pond/protos"
+	"github.com/golang/protobuf/proto"
+	"golang.org/x/crypto/curve25519"
+	"golang.org/x/crypto/nacl/secretbox"
+)
+
+// blockSize is the size of the blocks of data that we'll send and receive when
+// working in streaming mode. Each block is prefixed by two length bytes (which
+// aren't counted in blockSize) and includes secretbox.Overhead bytes of MAC
+// tag (which are).
+const blockSize = 4096 - 2
+
+type Conn struct {
+	conn                     io.ReadWriteCloser
+	isServer                 bool
+	identity, identityPublic [32]byte
+	Peer                     [32]byte
+
+	writeKey, readKey           [32]byte
+	writeKeyValid, readKeyValid bool
+	writeSequence, readSequence [24]byte
+
+	// readBuffer is used to receive bytes from the network when this Conn
+	// is used to stream data.
+	readBuffer []byte
+	// decryptBuffer is used to store decrypted payloads when this Conn is
+	// used to stream data and the caller's buffer isn't large enough to
+	// decrypt into directly.
+	decryptBuffer []byte
+	// readPending aliases into decryptBuffer when a partial decryption had
+	// to be returned to a caller because of buffer size limitations.
+	readPending []byte
+
+	// writeBuffer is used to hold encrypted payloads when this Conn is
+	// used for streaming data.
+	writeBuffer []byte
+}
+
+func NewServer(conn io.ReadWriteCloser, identity *[32]byte) *Conn {
+	c := &Conn{
+		conn:     conn,
+		isServer: true,
+	}
+	copy(c.identity[:], identity[:])
+	return c
+}
+
+func NewClient(conn io.ReadWriteCloser, myIdentity, myIdentityPublic, serverPublic *[32]byte) *Conn {
+	c := &Conn{
+		conn: conn,
+	}
+	copy(c.identity[:], myIdentity[:])
+	copy(c.identityPublic[:], myIdentityPublic[:])
+	copy(c.Peer[:], serverPublic[:])
+	return c
+}
+
+func incSequence(seq *[24]byte) {
+	n := uint32(1)
+
+	for i := 0; i < 8; i++ {
+		n += uint32(seq[i])
+		seq[i] = byte(n)
+		n >>= 8
+	}
+}
+
+type deadlineable interface {
+	SetDeadline(time.Time)
+}
+
+func (c *Conn) SetDeadline(t time.Time) {
+	if d, ok := c.conn.(deadlineable); ok {
+		d.SetDeadline(t)
+	}
+}
+
+func (c *Conn) Read(out []byte) (n int, err error) {
+	if len(c.readPending) > 0 {
+		n = copy(out, c.readPending)
+		c.readPending = c.readPending[n:]
+		return
+	}
+
+	if c.readBuffer == nil {
+		c.readBuffer = make([]byte, blockSize+2)
+	}
+
+	if _, err := io.ReadFull(c.conn, c.readBuffer[:2]); err != nil {
+		return 0, err
+	}
+	n = int(c.readBuffer[0]) | int(c.readBuffer[1])<<8
+	if n > len(c.readBuffer) {
+		return 0, errors.New("transport: peer's message too large for Read")
+	}
+	if _, err := io.ReadFull(c.conn, c.readBuffer[:n]); err != nil {
+		return 0, err
+	}
+
+	var ok bool
+	if len(out) >= n-secretbox.Overhead {
+		// We can decrypt directly into the output buffer.
+		out, ok = secretbox.Open(out[:0], c.readBuffer[:n], &c.readSequence, &c.readKey)
+		n = len(out)
+	} else {
+		// We need to decrypt into a side buffer and copy a prefix of
+		// the result into the caller's buffer.
+		c.decryptBuffer, ok = secretbox.Open(c.decryptBuffer[:0], c.readBuffer[:n], &c.readSequence, &c.readKey)
+		n = copy(out, c.decryptBuffer)
+		c.readPending = c.decryptBuffer[n:]
+	}
+	incSequence(&c.readSequence)
+	if !ok {
+		c.readPending = c.readPending[:0]
+		return 0, errors.New("transport: bad MAC")
+	}
+
+	return
+}
+
+func (c *Conn) Write(buf []byte) (n int, err error) {
+	if c.writeBuffer == nil {
+		c.writeBuffer = make([]byte, blockSize+2)
+	}
+
+	for len(buf) > 0 {
+		m := len(buf)
+		if m > blockSize-secretbox.Overhead {
+			m = blockSize - secretbox.Overhead
+		}
+		l := len(secretbox.Seal(c.writeBuffer[2:2], buf[:m], &c.writeSequence, &c.writeKey))
+		c.writeBuffer[0] = byte(l)
+		c.writeBuffer[1] = byte(l >> 8)
+		if _, err = c.conn.Write(c.writeBuffer[:2+l]); err != nil {
+			return n, err
+		}
+		n += m
+		buf = buf[m:]
+		incSequence(&c.writeSequence)
+	}
+
+	return
+}
+
+func (c *Conn) ReadProto(out proto.Message) error {
+	buf := make([]byte, pond.TransportSize+2+secretbox.Overhead)
+	n, err := c.read(buf)
+	if err != nil {
+		return err
+	}
+	if n != pond.TransportSize+2 {
+		return errors.New("transport: message wrong length")
+	}
+
+	n = int(buf[0]) | int(buf[1])<<8
+	buf = buf[2:]
+	if n > len(buf) {
+		return errors.New("transport: corrupt message")
+	}
+	return proto.Unmarshal(buf[:n], out)
+}
+
+func (c *Conn) WriteProto(msg proto.Message) error {
+	data, err := proto.Marshal(msg)
+	if err != nil {
+		return err
+	}
+	if len(data) > pond.TransportSize {
+		return errors.New("transport: message too large")
+	}
+
+	buf := make([]byte, pond.TransportSize+2)
+	buf[0] = byte(len(data))
+	buf[1] = byte(len(data) >> 8)
+	copy(buf[2:], data)
+	_, err = c.write(buf)
+	return err
+}
+
+func (c *Conn) Close() (err error) {
+	if !c.isServer {
+		_, err = c.write(nil)
+	}
+
+	if closeErr := c.conn.Close(); err == nil {
+		err = closeErr
+	}
+
+	return
+}
+
+func (c *Conn) WaitForClose() error {
+	if !c.isServer {
+		panic("non-server waited for connection close")
+	}
+	n, err := c.read(make([]byte, 128))
+	if err != nil {
+		return err
+	}
+	if n != 0 {
+		return errors.New("transport: non-close message received when expecting close")
+	}
+
+	return nil
+}
+
+func (c *Conn) read(data []byte) (n int, err error) {
+	var lengthBytes [2]byte
+
+	if _, err := io.ReadFull(c.conn, lengthBytes[:]); err != nil {
+		return 0, err
+	}
+
+	theirLength := int(lengthBytes[0]) + int(lengthBytes[1])<<8
+	if theirLength > len(data) {
+		return 0, errors.New("tranport: given buffer too small (" + strconv.Itoa(len(data)) + " vs " + strconv.Itoa(theirLength) + ")")
+	}
+
+	data = data[:theirLength]
+	if _, err := io.ReadFull(c.conn, data); err != nil {
+		return 0, err
+	}
+
+	decrypted, err := c.decrypt(data)
+	if err != nil {
+		return 0, err
+	}
+	copy(data, decrypted)
+
+	return len(decrypted), nil
+}
+
+func (c *Conn) write(data []byte) (n int, err error) {
+	encrypted := c.encrypt(data)
+
+	var lengthBytes [2]byte
+	lengthBytes[0] = byte(len(encrypted))
+	lengthBytes[1] = byte(len(encrypted) >> 8)
+
+	if _, err := c.conn.Write(lengthBytes[:]); err != nil {
+		return 0, err
+	}
+	if _, err := c.conn.Write(encrypted); err != nil {
+		return 0, err
+	}
+
+	return len(data), nil
+}
+
+func (c *Conn) encrypt(data []byte) []byte {
+	if !c.writeKeyValid {
+		return data
+	}
+
+	encrypted := secretbox.Seal(nil, data, &c.writeSequence, &c.writeKey)
+	incSequence(&c.writeSequence)
+	return encrypted
+}
+
+func (c *Conn) decrypt(data []byte) ([]byte, error) {
+	if !c.readKeyValid {
+		return data, nil
+	}
+
+	decrypted, ok := secretbox.Open(nil, data, &c.readSequence, &c.readKey)
+	incSequence(&c.readSequence)
+	if !ok {
+		return nil, errors.New("transport: bad MAC")
+	}
+	return decrypted, nil
+}
+
+var serverKeysMagic = []byte("server keys\x00")
+var clientKeysMagic = []byte("client keys\x00")
+
+func (c *Conn) setupKeys(ephemeralShared *[32]byte) {
+	var writeMagic, readMagic []byte
+	if c.isServer {
+		writeMagic, readMagic = serverKeysMagic, clientKeysMagic
+	} else {
+		writeMagic, readMagic = clientKeysMagic, serverKeysMagic
+	}
+
+	h := sha256.New()
+	h.Write(writeMagic)
+	h.Write(ephemeralShared[:])
+	h.Sum(c.writeKey[:0])
+	c.writeKeyValid = true
+
+	h.Reset()
+	h.Write(readMagic)
+	h.Write(ephemeralShared[:])
+	h.Sum(c.readKey[:0])
+	c.readKeyValid = true
+}
+
+var serverProofMagic = []byte("server proof\x00")
+var clientProofMagic = []byte("client proof\x00")
+
+var shortMessageError = errors.New("transport: received short handshake message")
+
+func (c *Conn) Handshake() error {
+	var ephemeralPrivate, ephemeralPublic, ephemeralShared [32]byte
+	if _, err := io.ReadFull(rand.Reader, ephemeralPrivate[:]); err != nil {
+		return err
+	}
+	curve25519.ScalarBaseMult(&ephemeralPublic, &ephemeralPrivate)
+
+	if _, err := c.write(ephemeralPublic[:]); err != nil {
+		return err
+	}
+
+	var theirEphemeralPublic [32]byte
+	if n, err := c.read(theirEphemeralPublic[:]); err != nil || n != len(theirEphemeralPublic) {
+		if err == nil {
+			err = shortMessageError
+		}
+		return err
+	}
+
+	handshakeHash := sha256.New()
+	if c.isServer {
+		handshakeHash.Write(theirEphemeralPublic[:])
+		handshakeHash.Write(ephemeralPublic[:])
+	} else {
+		handshakeHash.Write(ephemeralPublic[:])
+		handshakeHash.Write(theirEphemeralPublic[:])
+	}
+
+	curve25519.ScalarMult(&ephemeralShared, &ephemeralPrivate, &theirEphemeralPublic)
+	c.setupKeys(&ephemeralShared)
+
+	if c.isServer {
+		return c.handshakeServer(handshakeHash, &theirEphemeralPublic)
+	}
+	return c.handshakeClient(handshakeHash, &ephemeralPrivate)
+}
+
+func (c *Conn) handshakeClient(handshakeHash hash.Hash, ephemeralPrivate *[32]byte) error {
+	var ephemeralIdentityShared [32]byte
+	curve25519.ScalarMult(&ephemeralIdentityShared, ephemeralPrivate, &c.Peer)
+
+	digest := handshakeHash.Sum(nil)
+	h := hmac.New(sha256.New, ephemeralIdentityShared[:])
+	h.Write(serverProofMagic)
+	h.Write(digest)
+	digest = h.Sum(digest[:0])
+
+	digestReceived := make([]byte, len(digest)+secretbox.Overhead)
+	n, err := c.read(digestReceived)
+	if err != nil {
+		return err
+	}
+	if n != len(digest) {
+		return shortMessageError
+	}
+	digestReceived = digestReceived[:n]
+
+	if subtle.ConstantTimeCompare(digest, digestReceived) != 1 {
+		return errors.New("transport: server identity incorrect")
+	}
+
+	var identityShared [32]byte
+	curve25519.ScalarMult(&identityShared, &c.identity, &c.Peer)
+
+	handshakeHash.Write(digest)
+	digest = handshakeHash.Sum(digest[:0])
+
+	h = hmac.New(sha256.New, identityShared[:])
+	h.Write(clientProofMagic)
+	h.Write(digest)
+
+	finalMessage := make([]byte, 32+sha256.Size)
+	copy(finalMessage, c.identityPublic[:])
+	h.Sum(finalMessage[32:32])
+
+	if _, err := c.write(finalMessage); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+func (c *Conn) handshakeServer(handshakeHash hash.Hash, theirEphemeralPublic *[32]byte) error {
+	var ephemeralIdentityShared [32]byte
+	curve25519.ScalarMult(&ephemeralIdentityShared, &c.identity, theirEphemeralPublic)
+
+	digest := handshakeHash.Sum(nil)
+	h := hmac.New(sha256.New, ephemeralIdentityShared[:])
+	h.Write(serverProofMagic)
+	h.Write(digest)
+	digest = h.Sum(digest[:0])
+
+	if _, err := c.write(digest); err != nil {
+		return err
+	}
+
+	handshakeHash.Write(digest)
+	digest = handshakeHash.Sum(digest[:0])
+
+	finalMessage := make([]byte, 32+sha256.Size+secretbox.Overhead)
+	n, err := c.read(finalMessage)
+	if err != nil {
+		return err
+	}
+	if n != 32+sha256.Size {
+		return shortMessageError
+	}
+	finalMessage = finalMessage[:n]
+
+	copy(c.Peer[:], finalMessage[:32])
+	var identityShared [32]byte
+	curve25519.ScalarMult(&identityShared, &c.identity, &c.Peer)
+
+	h = hmac.New(sha256.New, identityShared[:])
+	h.Write(clientProofMagic)
+	h.Write(digest)
+	digest = h.Sum(digest[:0])
+
+	if subtle.ConstantTimeCompare(digest, finalMessage[32:]) != 1 {
+		return errors.New("transport: bad proof from client")
+	}
+
+	return nil
+}
diff --git a/transport/transport_test.go b/transport/transport_test.go
new file mode 100644
index 0000000..87309d1
--- /dev/null
+++ b/transport/transport_test.go
@@ -0,0 +1,156 @@
+package transport
+
+import (
+	"bytes"
+	"crypto/rand"
+	"crypto/sha256"
+	"errors"
+	"io"
+	"net"
+	"testing"
+
+	pond "github.com/agl/pond/protos"
+	"golang.org/x/crypto/curve25519"
+)
+
+func NewBiDiPipe() (x, y net.Conn) {
+	listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: net.IPv4(127, 0, 0, 1)})
+	if err != nil {
+		panic(err)
+	}
+
+	addr := listener.Addr().(*net.TCPAddr)
+	client, err := net.DialTCP("tcp", nil, addr)
+	if err != nil {
+		panic(err)
+	}
+
+	server, err := listener.Accept()
+	if err != nil {
+		panic(err)
+	}
+
+	listener.Close()
+
+	return client, server
+}
+
+func runHandshake(clientPrivate, clientPublic, serverPrivate, serverPublic *[32]byte) (error, error) {
+	x, y := NewBiDiPipe()
+	client := NewClient(x, clientPrivate, clientPublic, serverPublic)
+	server := NewServer(y, serverPrivate)
+
+	clientError := make(chan error, 1)
+	go func() {
+		defer x.Close()
+		defer close(clientError)
+		err := client.Handshake()
+		if err == nil {
+			err = client.WriteProto(&pond.Fetch{})
+		}
+		clientError <- err
+	}()
+
+	serverError := make(chan error, 1)
+	go func() {
+		defer y.Close()
+		defer close(serverError)
+		err := server.Handshake()
+		if err == nil {
+			if !bytes.Equal(server.Peer[:], clientPublic[:]) {
+				err = errors.New("server's view of client's identity is incorrect")
+			}
+		}
+		if err == nil {
+			msg := new(pond.Fetch)
+			err = server.ReadProto(msg)
+		}
+		serverError <- err
+	}()
+
+	err1 := <-clientError
+	err2 := <-serverError
+	return err1, err2
+}
+
+func randBytes(b []byte) {
+	if _, err := io.ReadFull(rand.Reader, b); err != nil {
+		panic(err)
+	}
+}
+
+func TestHandshake(t *testing.T) {
+	var serverPrivate, clientPrivate, serverPublic, clientPublic [32]byte
+
+	randBytes(serverPrivate[:])
+	randBytes(clientPrivate[:])
+	curve25519.ScalarBaseMult(&serverPublic, &serverPrivate)
+	curve25519.ScalarBaseMult(&clientPublic, &clientPrivate)
+
+	clientError, serverError := runHandshake(&clientPrivate, &clientPublic, &serverPrivate, &serverPublic)
+	if clientError != nil || serverError != nil {
+		t.Fatalf("handshake failed: client:'%s' server:'%s'", clientError, serverError)
+	}
+
+	serverPublic[0] ^= 0x40
+	clientError, serverError = runHandshake(&clientPrivate, &clientPublic, &serverPrivate, &serverPublic)
+	if clientError == nil && serverError == nil {
+		t.Fatal("bad handshake succeeded")
+	}
+}
+
+func TestStreamData(t *testing.T) {
+	var serverPrivate, clientPrivate, serverPublic, clientPublic [32]byte
+
+	randBytes(serverPrivate[:])
+	randBytes(clientPrivate[:])
+	curve25519.ScalarBaseMult(&serverPublic, &serverPrivate)
+	curve25519.ScalarBaseMult(&clientPublic, &clientPrivate)
+
+	x, y := NewBiDiPipe()
+	client := NewClient(x, &clientPrivate, &clientPublic, &serverPublic)
+	server := NewServer(y, &serverPrivate)
+
+	clientComplete := make(chan bool)
+	go func() {
+		defer x.Close()
+		err := client.Handshake()
+		if err != nil {
+			panic(err)
+		}
+		if _, err = client.Write(nil); err != nil {
+			panic(err)
+		}
+		if _, err = client.Write([]byte("hello")); err != nil {
+			panic(err)
+		}
+		if _, err = client.Write([]byte("world")); err != nil {
+			panic(err)
+		}
+		if _, err = client.Write(make([]byte, 20*1024)); err != nil {
+			panic(err)
+		}
+		close(clientComplete)
+	}()
+
+	serverComplete := make(chan bool)
+	go func() {
+		defer y.Close()
+		err := server.Handshake()
+		if err != nil {
+			panic(err)
+		}
+
+		h := sha256.New()
+		if _, err := io.Copy(h, server); err != nil {
+			panic(err)
+		}
+		if h.Sum(nil)[0] != 0xec {
+			panic("bad data received")
+		}
+		close(serverComplete)
+	}()
+
+	<-clientComplete
+	<-serverComplete
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/pond.git



More information about the Pkg-privacy-commits mailing list