Triton-commits
Threads by month
- ----- 2026 -----
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
August 2009
- 1 participants
- 11 discussions
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-77-gf1c5866
by noreply@mcs.anl.gov 31 Aug '09
by noreply@mcs.anl.gov 31 Aug '09
31 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via f1c58667bfbba74d518704571cd836356a3c9ab5 (commit)
from 536832b8a25dbc7a448c5cffa2efeb58e2456f2c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f1c58667bfbba74d518704571cd836356a3c9ab5
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 31 17:07:02 2009 -0500
Ready to run VertexGroup comparisons.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/gobs.cfg | 4 ++--
sim/gobs/gobs/sim/PlacementScheme.java | 6 +++---
sim/gobs/gobs/sweep/Decluster04.java | 6 ++----
sim/gobs/params.cfg | 6 +++---
sim/gobs/sweeps/kp01.cfg | 8 ++++++--
sim/gobs/sweeps/kp02.cfg | 9 +++++++--
sim/gobs/sweeps/kp03.cfg | 9 +++++----
sim/gobs/sweeps/kp04.cfg | 9 +++++----
8 files changed, 33 insertions(+), 24 deletions(-)
Diff of changes:
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
index f841394..4d9c679 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/gobs.cfg
@@ -3,11 +3,11 @@
printProperties = true
# Print nodes and objects at startup (true/false)
-printInitialNodes = false
+printInitialNodes = true
# Print nodes and objects after each rebuild (true/false)
printNodes = false
# Print object tranfers during rebuilds (true/false)
-printRebuilds = false
+printRebuilds = true
# Print file information (true/false)
printFiles = false
# Print load change statistics (true/false)
diff --git a/sim/gobs/gobs/sim/PlacementScheme.java b/sim/gobs/gobs/sim/PlacementScheme.java
index b8c0d52..9607618 100644
--- a/sim/gobs/gobs/sim/PlacementScheme.java
+++ b/sim/gobs/gobs/sim/PlacementScheme.java
@@ -102,7 +102,7 @@ public abstract class PlacementScheme
simulator.stats.flexibilities.add(sites.size());
Primary primary = object.toPrimary();
sites.remove(sites.size()-1).add(primary);
- for (int i = 0; i < object.replicas; i++)
+ for (int i = 0; i < object.replicas-1; i++)
{
if (sites.size() == 0)
{
@@ -132,7 +132,7 @@ public abstract class PlacementScheme
*/
void rebuild(Obj object, List<Node> nodes)
{
- System.out.println("rebuild: " + object.toString(simulator));
+ // System.out.println("rebuild: " + object.toString(simulator));
List<Node> sites = sites(object, nodes);
// System.out.println("sites.size(): " + sites.size());
Secondary secondary;
@@ -141,7 +141,7 @@ public abstract class PlacementScheme
{
Primary primary = (Primary) object;
Node primarySite = lookup(object.id, nodes);
- System.out.println("primary: " + primarySite.name(simulator));
+ // System.out.println("primary: " + primarySite.name(simulator));
if (primarySite.contains(object.id))
{
secondary = (Secondary) primarySite.remove(object.id);
diff --git a/sim/gobs/gobs/sweep/Decluster04.java b/sim/gobs/gobs/sweep/Decluster04.java
index 8481fd2..ecdd5f3 100644
--- a/sim/gobs/gobs/sweep/Decluster04.java
+++ b/sim/gobs/gobs/sweep/Decluster04.java
@@ -37,20 +37,18 @@ class Decluster04
final XYSeriesCollection collection = new XYSeriesCollection();
- /*
properties.setProperty("PlacementScheme", "Nearest");
- Sweep nearestSweep = new ParallelSweep(properties);
+ Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
nearestSweep.execute("PAST", "nodes", values, "maxTotal");
collection.addSeries(nearestSweep.series);
properties.setProperty("PlacementScheme", "Kademlia");
- Sweep kademliaSweep = new ParallelSweep(properties);
+ Sweep kademliaSweep = new Sweep(properties);
kademliaSweep.repeats = Tools.integer(properties, "repeats");
kademliaSweep.execute("Kademlia", "nodes", values,
"maxTotal");
collection.addSeries(kademliaSweep.series);
- */
properties.setProperty("PlacementScheme", "VertexGroups");
Sweep vgSweep = new Sweep(properties);
diff --git a/sim/gobs/params.cfg b/sim/gobs/params.cfg
index f0fe63d..32e9982 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/params.cfg
@@ -6,9 +6,9 @@
# Bit-length of addresses:
B = 16
# Number of servers:
-nodes = 16
+nodes = 128
# Number of files:
-files = 2
+files = 1000
# Number of faults:
faults = 1
@@ -18,7 +18,7 @@ faults = 1
#PlacementScheme = Nearest
PlacementScheme = VertexGroups
-VertexGroupPrefix = 5
+VertexGroupPrefix = 6
ReplaceSourcePrimary = false
### Choose a NodeScheme implementation:
diff --git a/sim/gobs/sweeps/kp01.cfg b/sim/gobs/sweeps/kp01.cfg
index b189818..4d29bbb 100644
--- a/sim/gobs/sweeps/kp01.cfg
+++ b/sim/gobs/sweeps/kp01.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 01
-step = mids
+step = exps
### General parameters:
@@ -13,13 +13,16 @@ files = 3000
faults = 1
# Number of servers:
-minNodes = 10
+minNodes = 20
maxNodes = 1000
### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
+ReplaceSourcePrimary = false
+VertexGroupPrefix = 5
+
### Choose a NodeScheme implementation:
# NodeScheme = RandomNodes
@@ -58,6 +61,7 @@ filewidth = 10
### Simulator output configuration
+printProperties = true
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/sweeps/kp02.cfg b/sim/gobs/sweeps/kp02.cfg
index c0f69c6..ba0332c 100644
--- a/sim/gobs/sweeps/kp02.cfg
+++ b/sim/gobs/sweeps/kp02.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 02
-step = mids
+step = exps
### General parameters:
@@ -13,13 +13,17 @@ files = 3000
faults = 1
# Number of servers:
-minNodes = 10
+minNodes = 20
maxNodes = 1000
### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
+ReplaceSourcePrimary = false
+VertexGroupPrefix = 5
+
+
### Choose a NodeScheme implementation:
NodeScheme = RandomNodes
@@ -58,6 +62,7 @@ filewidth = 10
### Simulator output configuration
+printProperties = false
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/sweeps/kp03.cfg b/sim/gobs/sweeps/kp03.cfg
index af729f7..6d0b28f 100644
--- a/sim/gobs/sweeps/kp03.cfg
+++ b/sim/gobs/sweeps/kp03.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 03
-step = mids
+step = exps
### General parameters:
@@ -13,14 +13,15 @@ files = 3000
faults = 1
# Number of servers:
-minNodes = 10
+minNodes = 20
maxNodes = 1000
### Choose a PlacementScheme implementation:
-# Chosen by sweep driver
+# Chosen by sweep driver.
ReplaceSourcePrimary = false
+VertexGroupPrefix = 5
### Choose a NodeScheme implementation:
@@ -61,7 +62,7 @@ filewidth = 10
### Simulator output configuration
# Dump properties for each Simulator execution
-printProperties = false
+printProperties = true
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/sweeps/kp04.cfg b/sim/gobs/sweeps/kp04.cfg
index b47fb06..4fe4b03 100644
--- a/sim/gobs/sweeps/kp04.cfg
+++ b/sim/gobs/sweeps/kp04.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 04
-step = mids
+step = exps
### General parameters:
@@ -13,14 +13,15 @@ files = 3000
faults = 1
# Number of servers:
-minNodes = 10
-maxNodes = 100
+minNodes = 20
+maxNodes = 1000
### Choose a PlacementScheme implementation:
-# Chosen by sweep driver
+# Chosen by sweep driver.
ReplaceSourcePrimary = false
+VertexGroupPrefix = 5
### Choose a NodeScheme implementation:
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-76-g536832b
by noreply@mcs.anl.gov 31 Aug '09
by noreply@mcs.anl.gov 31 Aug '09
31 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 536832b8a25dbc7a448c5cffa2efeb58e2456f2c (commit)
via 9d73fbb5ec4b3db93ac4ac64b48cd324af4260bf (commit)
via 20cec82eede72f187884e7a15fe8747f069b9ac9 (commit)
via 564c804ada74e16e8b845d6f3b35ba764f652625 (commit)
via 51daca1568d99bba656490bef1ddf312021974cc (commit)
via d840b84d7ce22e07122e5efa3718dc2aa7bda4c7 (commit)
from 6fa0ca9882e0715ff02ad41d983ee41517359f50 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 536832b8a25dbc7a448c5cffa2efeb58e2456f2c
Author: Justin Wozniak <wozniak(a)login4.mcs.anl.gov>
Date: Mon Aug 31 14:57:35 2009 -0500
New VertexGroups scheme for object placement.
commit 9d73fbb5ec4b3db93ac4ac64b48cd324af4260bf
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Thu Aug 27 14:56:42 2009 -0500
Header "Insertion Rate" -> "Performance".
commit 20cec82eede72f187884e7a15fe8747f069b9ac9
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 26 16:40:12 2009 -0500
Quick reference reorder.
Also add ANL logo.
commit 564c804ada74e16e8b845d6f3b35ba764f652625
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 26 16:16:59 2009 -0500
First draft of DHT poster for Euro PVM/MPI.
svc_model_poster is a colorized copy of svc_model .
commit 51daca1568d99bba656490bef1ddf312021974cc
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 25 13:17:06 2009 -0500
New experiments based on random replica sources.
commit d840b84d7ce22e07122e5efa3718dc2aa7bda4c7
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 25 13:15:11 2009 -0500
New functionality for parallel sweeps.
-----------------------------------------------------------------------
Summary of changes:
papers/MPI-DHT/dht-poster.odg | Bin 0 -> 73886 bytes
papers/MPI-DHT/dht-poster.tex | 154 +
papers/MPI-DHT/img/argonne_white_logo_137x124.jpg | Bin 0 -> 6357 bytes
papers/MPI-DHT/img/svc_model_poster.odg | Bin 0 -> 16812 bytes
papers/MPI-DHT/wozniak-copyright.pdf | Bin 69549 -> 0 bytes
sim/gobs/build.xml | 2 +-
sim/gobs/debug.cfg | 1 +
sim/gobs/gobs.cfg | 1 +
sim/gobs/gobs/sim/Addressable.java | 49 +-
sim/gobs/gobs/sim/File.java | 8 +-
sim/gobs/gobs/sim/KClosest.java | 36 +
sim/gobs/gobs/sim/Kademlia.java | 78 +-
sim/gobs/gobs/sim/Nearest.java | 68 +-
sim/gobs/gobs/sim/Node.java | 26 +-
sim/gobs/gobs/sim/NodeScheme.java | 8 +-
sim/gobs/gobs/sim/Obj.java | 27 +-
sim/gobs/gobs/sim/PlacementScheme.java | 225 +-
sim/gobs/gobs/sim/Primary.java | 11 +-
sim/gobs/gobs/sim/RandomFiles.java | 2 +-
sim/gobs/gobs/sim/RandomNodes.java | 10 +-
sim/gobs/gobs/sim/Secondary.java | 8 +-
sim/gobs/gobs/sim/SimpleNodes.java | 10 +-
sim/gobs/gobs/sim/Simulator.java | 185 +-
sim/gobs/gobs/sim/Statistics.java | 17 +-
sim/gobs/gobs/sim/UniformNodes.java | 149 -
sim/gobs/gobs/sim/VertexGroups.java | 112 +
sim/gobs/gobs/sweep/Balance01.java | 9 +-
sim/gobs/gobs/sweep/Balance02.java | 2 +-
sim/gobs/gobs/sweep/Decluster01.java | 2 +-
sim/gobs/gobs/sweep/Decluster01P.java | 33 +
sim/gobs/gobs/sweep/Decluster02.java | 9 +-
sim/gobs/gobs/sweep/Decluster03.java | 4 +-
sim/gobs/gobs/sweep/Decluster04.java | 67 +
sim/gobs/gobs/sweep/ParallelSweep.java | 152 +
sim/gobs/gobs/sweep/Sweep.java | 16 +-
sim/gobs/gobs/util/Bits.java | 24 +-
sim/gobs/params.cfg | 18 +-
sim/gobs/sweeps/kp01.cfg | 5 +-
sim/gobs/sweeps/kp02.cfg | 2 +-
sim/gobs/sweeps/kp03.cfg | 10 +-
sim/gobs/sweeps/kp04.cfg | 10 +-
sim/gobs/wiki/dc02kp01.eps | 5002 ++++++++++++++++++
sim/gobs/wiki/dc02kp01.png | Bin 0 -> 23340 bytes
sim/gobs/wiki/dc02kp02.eps | 5002 ++++++++++++++++++
sim/gobs/wiki/dc02kp02.png | Bin 0 -> 21671 bytes
sim/gobs/wiki/dc03kp01.eps | 5002 ++++++++++++++++++
sim/gobs/wiki/dc03kp01.png | Bin 16918 -> 22025 bytes
sim/gobs/wiki/dc03kp02.eps | 4836 ++++++++++++++++++
sim/gobs/wiki/dc03kp02.png | Bin 0 -> 19923 bytes
sim/gobs/wiki/dc03kp03.eps | 4754 +++++++++++++++++
sim/gobs/wiki/dc03kp03.png | Bin 0 -> 20439 bytes
sim/gobs/wiki/dc03kp04.eps | 5632 +++++++++++++++++++++
sim/gobs/wiki/dc03kp04.png | Bin 0 -> 22987 bytes
sim/gobs/wiki/kp01.cfg | 7 +-
sim/gobs/wiki/kp02.cfg | 70 +
sim/gobs/wiki/kp03.cfg | 74 +
sim/gobs/wiki/kp04.cfg | 74 +
57 files changed, 31500 insertions(+), 503 deletions(-)
create mode 100644 papers/MPI-DHT/dht-poster.odg
create mode 100644 papers/MPI-DHT/dht-poster.tex
create mode 100644 papers/MPI-DHT/img/argonne_white_logo_137x124.jpg
create mode 100644 papers/MPI-DHT/img/svc_model_poster.odg
delete mode 100644 papers/MPI-DHT/wozniak-copyright.pdf
create mode 100644 sim/gobs/gobs/sim/KClosest.java
delete mode 100644 sim/gobs/gobs/sim/UniformNodes.java
create mode 100644 sim/gobs/gobs/sim/VertexGroups.java
create mode 100644 sim/gobs/gobs/sweep/Decluster01P.java
create mode 100644 sim/gobs/gobs/sweep/Decluster04.java
create mode 100644 sim/gobs/gobs/sweep/ParallelSweep.java
create mode 100644 sim/gobs/wiki/dc02kp01.eps
create mode 100644 sim/gobs/wiki/dc02kp01.png
create mode 100644 sim/gobs/wiki/dc02kp02.eps
create mode 100644 sim/gobs/wiki/dc02kp02.png
create mode 100644 sim/gobs/wiki/dc03kp01.eps
create mode 100644 sim/gobs/wiki/dc03kp02.eps
create mode 100644 sim/gobs/wiki/dc03kp02.png
create mode 100644 sim/gobs/wiki/dc03kp03.eps
create mode 100644 sim/gobs/wiki/dc03kp03.png
create mode 100644 sim/gobs/wiki/dc03kp04.eps
create mode 100644 sim/gobs/wiki/dc03kp04.png
create mode 100644 sim/gobs/wiki/kp02.cfg
create mode 100644 sim/gobs/wiki/kp03.cfg
create mode 100644 sim/gobs/wiki/kp04.cfg
Diff of changes:
diff --git a/papers/MPI-DHT/dht-poster.odg b/papers/MPI-DHT/dht-poster.odg
new file mode 100644
index 0000000..021df14
Binary files /dev/null and b/papers/MPI-DHT/dht-poster.odg differ
diff --git a/papers/MPI-DHT/dht-poster.tex b/papers/MPI-DHT/dht-poster.tex
new file mode 100644
index 0000000..dc89b9a
--- /dev/null
+++ b/papers/MPI-DHT/dht-poster.tex
@@ -0,0 +1,154 @@
+
+% DHTs in MPI
+
+% Springer format, 10-page, 10pt, one-column
+\documentclass[runningheads,a4paper]{llncs}
+
+\usepackage{array}
+\usepackage{setspace}
+\usepackage{makeidx}
+\usepackage{cite}
+\usepackage[dvips]{graphicx}
+\usepackage{epsfig}
+\usepackage{amsmath}
+
+\usepackage{url}
+
+\urldef{\mailsa}\path|{wozniak, robl, slang, sson, rross }(a)mcs.anl.gov, bryan.jacobs(a)rochester.edu|
+
+\newcommand{\keywords}[1]{\par\addvspace\baselineskip
+\noindent\keywordname\enspace\ignorespaces#1}
+
+% Modified ABC lists (http://www.informatik.uni-freiburg.de/~frank)
+\newcounter{abccounter}
+\newcommand{\abc}{\item[Test \alph{abccounter}):]\stepcounter{abccounter}}
+\newenvironment{abctmp}{\begin{itemize}}{\end{itemize}}
+\newcommand{\alist}{\begin{abctmp} \setcounter{abccounter}{1}}
+\newcommand{\zlist}{\end{abctmp}}
+\newenvironment{abclist}{\alist}{\zlist}
+
+\begin{document}
+
+\mainmatter
+
+\title{Implementing Reliable Data Structures for MPI Services
+ in High Component Count Systems}
+
+\titlerunning{Implementing Reliable Data Structures}
+
+\author{Justin M. Wozniak \and Bryan Jacobs
+ \and Robert Latham
+ \and \\ Sam Lang \and Seung Woo Son \and Robert Ross}
+
+\authorrunning{Wozniak et al.}
+
+\institute{Mathematics and Computer Science Division, \\
+ Argonne National Laboratory,
+ Argonne, IL 60439, USA
+\mailsa\\
+}
+
+\maketitle
+
+High performance computing systems continue to grow:
+currently deployed systems exceed 160,000 cores and
+systems exceeding 1,000,000 cores are planned.
+Without significant improvements in component reliability,
+partial system failure modes could become an
+unacceptably regular occurrence, limiting the
+usability of advanced computing infrastructures.
+In this work, we intend to ease the development of
+survivable systems and applications through the implementation of
+a reliable key/value data store based on a distributed hash table (DHT).
+Borrowing from techniques developed for unreliable wide-area systems,
+we implemented a distributed data service built with
+MPI \cite{MPI-2_Standard_1997} that enables
+user data structures to survive partial system failure.
+The service is based on a new implementation of
+the Kademlia \cite{Kademlia_2002} distributed hash table.
+
+Small faults should have small impacts on applications,
+resulting in proportionate data movement costs to
+restore redundancy schemes to a nominal state
+and normalize the distributed data structures that enable
+the efficient management of the system.
+In a DHT-based system, a fault of
+unit size impacts a small number of cooperating processors,
+which provides the primary motivation for this work.
+Using such an implementation effectively
+in a high performance setting
+faces many challenges, including maintaining good performance,
+offering wide compatibility with diverse architectures,
+and handling multiple fault modes.
+The implementation described here employs a layered software design
+built on MPI functionality
+and offers a scalable data store that is
+fault tolerant to the extent of the capability of the
+MPI implementation.
+
+DHT implementations offer a simple equivalent to the
+the well-known hash table:
+${\it put} ({\bf key},{\bf value})$ to store a key/value pair and
+${\it get} ({\bf key})\rightarrow{\bf value}$ to retrieve a value.
+Peer-to-peer DHTs decentralize the organization of the
+system, requiring that each peer node be capable of
+participating in the self-organization of the system,
+enabling robust reassembly in the event of node failure
+or departure from the system.
+Additionally, each node is limited to an asymptotically small
+amount of information about the rest of the system.
+
+Our implementation enables the storage of critical application
+data in a distributed key/value database,
+achieving non-volatility through redundancy.
+We demonstrate that the data structure offers good
+asymptotic performance at large scale in terms of latency
+and memory usage and can endure multiple faults.
+The system can be used in various ways, including as a
+temporary in-core cache on a compute cluster
+or as a stand-alone distributed database.
+
+\section*{Background}
+\label{related}
+
+The fault handling characteristics of MPI have been extensively
+considered in previous work~
+\cite{MPI_Faults_LR_2004,MPI_Faults_GL_2004,MPI_Services_2006,MPI_Issues_2007}.
+In this work, we are interested in properly using
+the fault handling capabilities
+offered by the underlying infrastructure -~the MPI implementation~-
+and in providing reliability to a higher level application.
+
+A reliable numerical programming
+use case with FT-MPI~\cite{FT-MPI_2005} demonstrates how
+scientific data structures can achieve non-volatility through
+in-core parity-based checkpointing, reducing the need for
+checkpoint operations to disk.
+Other reliable MPI systems offer implementations that
+help the user checkpoint computational and messaging state.
+A semi-automatic system, the
+Cornell Checkpoint (pre-)Compiler ($C^3$)~\cite{CCC_2004},
+enables the use of preprocessor directives that direct
+checkpointing.
+MPICH-V~\cite{MPICH-V_2006} provides multiple techniques to
+log messages, operating at a low level
+of the MPI implementation stack, allowing for comparison
+among multiple fault tolerance protocols.
+
+Our project differs from these systems in multiple ways.
+First, we intend to provide a fault tolerant user data store,
+and not preserve the state of a computation or in-flight messages.
+Second, our implementation takes the form of a data service and
+associated library, not an MPI implementation.
+Since we use an MPI implementation to provide these
+services, we could potentially use a checkpoint-based
+fault-tolerant MPI implementation; however, the DHT
+provides its own redundancy and other fault tolerant
+characteristics.
+Hence, we require significantly less from the
+MPI implementation than is provided by the solutions above.
+
+\bibliographystyle{splncs.bst}
+\bibliography{dht}
+
+\end{document}
diff --git a/papers/MPI-DHT/img/argonne_white_logo_137x124.jpg b/papers/MPI-DHT/img/argonne_white_logo_137x124.jpg
new file mode 100644
index 0000000..268c4da
Binary files /dev/null and b/papers/MPI-DHT/img/argonne_white_logo_137x124.jpg differ
diff --git a/papers/MPI-DHT/img/svc_model_poster.odg b/papers/MPI-DHT/img/svc_model_poster.odg
new file mode 100644
index 0000000..16b20e2
Binary files /dev/null and b/papers/MPI-DHT/img/svc_model_poster.odg differ
diff --git a/papers/MPI-DHT/wozniak-copyright.pdf b/papers/MPI-DHT/wozniak-copyright.pdf
deleted file mode 100644
index a1c52de..0000000
Binary files a/papers/MPI-DHT/wozniak-copyright.pdf and /dev/null differ
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index fd9c937..07824c6 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -10,7 +10,7 @@
value=".:./prereqs/jcommon-1.0.16.jar:./prereqs/commons-io-1.4.jar:./prereqs/jfreechart-1.0.13.jar:./prereqs/xmlgraphics-commons-1.4svn.jar" />
<target name="all"
- depends="jar" />
+ depends="compile" />
<target name="jar"
depends="compile" >
diff --git a/sim/gobs/debug.cfg b/sim/gobs/debug.cfg
index 7600a77..b15d3bb 100644
--- a/sim/gobs/debug.cfg
+++ b/sim/gobs/debug.cfg
@@ -1,6 +1,7 @@
# Simulator configuration
+printProperties = true
# Print nodes and objects at startup (true/false)
printInitialNodes = true
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
index a1a41f7..f841394 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/gobs.cfg
@@ -1,6 +1,7 @@
# Simulator configuration
+printProperties = true
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/gobs/sim/Addressable.java b/sim/gobs/gobs/sim/Addressable.java
index 500fd18..a8ad4e1 100644
--- a/sim/gobs/gobs/sim/Addressable.java
+++ b/sim/gobs/gobs/sim/Addressable.java
@@ -9,14 +9,12 @@ import java.math.BigInteger;
class Addressable
{
- int B;
- BigInteger id;
+ // int B;
+ public BigInteger id;
// Cached result of bitArray():
- int[] array = null;
+ // int[] array = null;
- static Display display = Display.NUMERIC;
-
enum Display
{
/** Display addresses as raw bits. */
@@ -24,19 +22,26 @@ class Addressable
/** Display addresses as numbers. */
NUMERIC
}
-
+
+ /*
public Addressable(int B, BigInteger id)
{
this.B = B;
this.id = id;
}
+ */
+ public Addressable(BigInteger id)
+ {
+ this.id = id;
+ }
+
/**
Does this Addressable start with the given bit prefix?
*/
- boolean prefix(int[] p)
+ boolean prefix(int B, int[] p)
{
- int[] A = bitArray();
+ int[] A = bitArray(B);
for (int i = 0; i < p.length; i++)
{
if (p[i] != A[i])
@@ -48,14 +53,14 @@ class Addressable
/**
Obtain an array of bits for this Addressable.
*/
- int[] bitArray()
+ int[] bitArray(int B)
{
- if (array != null)
- return array;
- int[] result = bitArray(B, id);
- array = result;
- return result;
+ // if (array != null)
+ // return array;
+
+ // int[] result =
+ return bitArray(B, id);
}
/**
@@ -81,7 +86,7 @@ class Addressable
/**
Convert the Addressable to a String of 0s and 1s.
*/
- String bitString()
+ String bitString(int B)
{
return bitString(B, id);
}
@@ -110,22 +115,14 @@ class Addressable
return buffer.toString();
}
- String name()
+ String name(Simulator simulator)
{
- if (display == Display.BITS)
- return bitString();
+ if (simulator.display == Display.BITS)
+ return bitString(simulator.B);
else
return id.toString();
}
- /**
- Set address display mode.
- */
- static void display(Display mode)
- {
- display = mode;
- }
-
public int hashCode()
{
return id.hashCode();
diff --git a/sim/gobs/gobs/sim/File.java b/sim/gobs/gobs/sim/File.java
index 8875d3a..0684f82 100644
--- a/sim/gobs/gobs/sim/File.java
+++ b/sim/gobs/gobs/sim/File.java
@@ -28,8 +28,6 @@ class File
this.width = width;
this.replicas = replicas;
- // System.out.println("FILE: " + size + " " + strip + " " + width + " " + replicas);
-
id = unique++;
}
@@ -51,13 +49,13 @@ class File
return (strips/width)*strip;
}
- public String toString()
+ public String toString(Simulator simulator)
{
StringBuilder sb =
- new StringBuilder(100+objects.size()*(Simulator.current.B+10));
+ new StringBuilder(100+objects.size()*10);
sb.append("file[").append(id).append("]: ");
for (Obj object : objects)
- sb.append(object).append(" ");
+ sb.append(object.toString(simulator)).append(" ");
return sb.toString();
}
diff --git a/sim/gobs/gobs/sim/KClosest.java b/sim/gobs/gobs/sim/KClosest.java
new file mode 100644
index 0000000..7189cf5
--- /dev/null
+++ b/sim/gobs/gobs/sim/KClosest.java
@@ -0,0 +1,36 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.List;
+
+import gobs.util.BoundedSortedValues;
+
+abstract class KClosest
+ extends PlacementScheme
+{
+ KClosest(Simulator simulator, boolean sourcePrimary)
+ {
+ super(simulator, sourcePrimary);
+ }
+
+ /**
+ Obtain a list of nodes that may host the given object
+ with respect to the replica placement scheme used here.
+ */
+ List<Node> sites(Obj object, List<Node> nodes)
+ {
+ BoundedSortedValues<Node,BigInteger> sites =
+ new BoundedSortedValues<Node,BigInteger>(object.replicas);
+
+ for (Node node : nodes)
+ {
+ BigInteger d = distance(object.id, node.id);
+ sites.add(node, d);
+ }
+
+ // System.out.println(sites);
+
+ return sites.get();
+ }
+}
diff --git a/sim/gobs/gobs/sim/Kademlia.java b/sim/gobs/gobs/sim/Kademlia.java
index 33730d6..d2bc21c 100644
--- a/sim/gobs/gobs/sim/Kademlia.java
+++ b/sim/gobs/gobs/sim/Kademlia.java
@@ -11,83 +11,17 @@ import gobs.util.Tools;
* */
public class Kademlia
- extends PlacementScheme
+ extends KClosest
{
- Kademlia(int B)
+ // Kademlia(Simulator simulator, int B, boolean sourcePrimary)
+ Kademlia(Simulator simulator, boolean sourcePrimary)
{
- super(B);
+ super(simulator, sourcePrimary);
}
-
-
- /**
- Place this object to rebuild.
- */
- /* TRY SUPERCLASS!
- void rebuild(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Secondary secondary;
- Node source = null, destination = null;
- if (object instanceof Primary)
- {
- Primary primary = object.toPrimary();
- source = closest.remove(0);
- secondary = (Secondary) source.remove(primary.id);
- source.add(primary);
- }
- else
- {
- source = closest.remove(0);
- Primary primary = (Primary) source.get(object.id);
- secondary = primary.toSecondary(primary);
- }
-
- for (Node node : closest)
- {
- if (! node.contains(secondary.id))
- {
- destination = node;
- destination.add(secondary);
- break;
- }
- }
- System.out.println("rebuild: " + object.toString() + ": " +
- source.bitString() + " -> " +
- destination.bitString());
- }
- */
- /*
- List<Node> closestNodes(Obj object, List<Node> nodes)
- {
- List<Node> closest = new ArrayList<Node>(object.replicas*2);
-
- for (int i = 0; i < object.replicas; i++)
- {
- BigInteger closestDiff = null;
- Node closestNode = null;
- for (Node node : nodes)
- {
- BigInteger d = node.id.xor(object.id);
- if (d.compareTo(BigInteger.ZERO) < 0)
- System.out.println("NEGATIVE!");
- if ((closestDiff == null ||
- closestDiff.compareTo(d) > 0) &&
- ! closest.contains(node))
- {
- closestNode = node;
- closestDiff = d;
- }
- }
- closest.add(closestNode);
- }
- return closest;
- }
- */
- public BigInteger distance(Addressable address1,
- Addressable address2)
+ public BigInteger distance(BigInteger id1, BigInteger id2)
{
- return address1.id.xor(address2.id);
+ return id1.xor(id2);
}
/**
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/gobs/sim/Nearest.java
index 5a7d4ad..0bddfa5 100644
--- a/sim/gobs/gobs/sim/Nearest.java
+++ b/sim/gobs/gobs/sim/Nearest.java
@@ -11,40 +11,16 @@ import gobs.util.Tools;
* */
public class Nearest
- extends PlacementScheme
+ extends KClosest
{
- Nearest(int B)
+ Nearest(Simulator simulator, boolean sourcePrimary)
{
- super(B);
+ super(simulator, sourcePrimary);
}
- /*
- public void place(Collection<Obj> objects, List<Node> nodes)
+ public BigInteger distance(BigInteger id1, BigInteger id2)
{
- System.out.println("placing: " + objects.size());
- for (Obj object : objects)
- placeObject(object, nodes);
- }
-
- /**
- Allocate replicas for object and place all on nodes.
- *
- void placeObject(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Primary primary = object.toPrimary();
- closest.remove(0).add(primary);
- for (Node node : closest)
- {
- node.add(object.toSecondary(primary));
- }
- }
- */
-
- public BigInteger distance(Addressable address1,
- Addressable address2)
- {
- return difference(Simulator.current.M, address1.id, address2.id);
+ return difference(M, id1, id2);
}
public BigInteger difference(BigInteger M,
@@ -69,38 +45,6 @@ public class Nearest
return (d2.compareTo(d1) < 0) ? d2 : d1;
}
- /*
- List<Node> closestNodes(Obj object, List<Node> nodes)
- {
- List<Node> closest = new ArrayList<Node>(object.replicas*2);
-
- for (int i = 0; i < object.replicas; i++)
- {
- BigInteger closestDiff = null;
- Node closestNode = null;
- for (Node node : nodes)
- {
- BigInteger d = node.id.subtract(object.id).abs();
- if ((closestDiff == null ||
- closestDiff.compareTo(d) > 0) &&
- ! closest.contains(node))
- {
- closestNode = node;
- closestDiff = d;
- }
- }
- closest.add(closestNode);
- }
-
- if (closest.size() != object.replicas)
- {
- System.out.println("not enough closest nodes!");
- }
-
- return closest;
- }
- */
-
/**
Wrap-around calculator.
*/
@@ -112,7 +56,7 @@ public class Nearest
int B = 10;
BigInteger M = new BigInteger("10");
- Nearest nearest = new Nearest(B);
+ Nearest nearest = new Nearest(null, true);
BigInteger i1 = new BigInteger(args[0]);
BigInteger i2 = new BigInteger(args[1]);
diff --git a/sim/gobs/gobs/sim/Node.java b/sim/gobs/gobs/sim/Node.java
index 05f0224..e38c24d 100644
--- a/sim/gobs/gobs/sim/Node.java
+++ b/sim/gobs/gobs/sim/Node.java
@@ -25,12 +25,20 @@ public class Node
Counter for number of pulls during rebuilds.
*/
int pulls = 0;
-
+
+ /*
Node(int B, BigInteger id)
{
super(B, id);
objects = new ArrayList<Obj>();
}
+ */
+
+ Node(BigInteger id)
+ {
+ super(id);
+ objects = new ArrayList<Obj>();
+ }
void add(Obj object)
{
@@ -82,27 +90,27 @@ public class Node
}
return false;
}
-
- String loadReport()
+
+ String loadReport(int B)
{
- return bitString() + " " + objects.size();
+ return bitString(B) + " " + objects.size();
}
- public String display()
+ public String display(Simulator simulator)
{
StringBuffer result = new StringBuffer(objects.size()*10);
- result.append(name());
+ result.append(name(simulator));
result.append(":\t");
for (Obj object : objects)
{
- result.append(object.toString()).append(" ");
+ result.append(object.toString(simulator)).append(" ");
}
result.append("\n");
return result.toString();
}
- public String toString()
+ public String toString(Simulator simulator)
{
- return name();
+ return name(simulator);
}
}
diff --git a/sim/gobs/gobs/sim/NodeScheme.java b/sim/gobs/gobs/sim/NodeScheme.java
index 5983ec0..05e19da 100644
--- a/sim/gobs/gobs/sim/NodeScheme.java
+++ b/sim/gobs/gobs/sim/NodeScheme.java
@@ -9,13 +9,11 @@ import java.util.*;
abstract class NodeScheme
{
- int B;
- long M;
+ Simulator simulator;
- NodeScheme(int B)
+ NodeScheme(Simulator simulator)
{
- this.B = B;
- M = Math.round(Math.pow(2,B));
+ this.simulator = simulator;
}
/**
diff --git a/sim/gobs/gobs/sim/Obj.java b/sim/gobs/gobs/sim/Obj.java
index 9c6312e..691a2a0 100644
--- a/sim/gobs/gobs/sim/Obj.java
+++ b/sim/gobs/gobs/sim/Obj.java
@@ -11,30 +11,45 @@ import java.math.BigInteger;
class Obj
extends Addressable
{
- /** Simulated size in bytes. */
+ /**
+ Simulated size in bytes.
+ */
int size;
- /** Number of replicas, including primary. */
+ /**
+ Number of replicas, including primary.
+ */
int replicas;
+ /*
Obj(int B, BigInteger id, int size, int replicas)
{
super(B, id);
this.size = size;
this.replicas = replicas;
}
+ */
+ Obj(BigInteger id, int size, int replicas)
+ {
+ super(id);
+ this.size = size;
+ this.replicas = replicas;
+ }
+
Primary toPrimary()
{
- return new Primary(B, id, size, replicas);
+ // return new Primary(B, id, size, replicas);
+ return new Primary(id, size, replicas);
}
Secondary toSecondary(Primary primary)
{
- return new Secondary(B, id, size, replicas, primary);
+ // return new Secondary(B, id, size, replicas, primary);
+ return new Secondary(id, size, replicas, primary);
}
- public String toString()
+ public String toString(Simulator simulator)
{
- return name() + "(" + size + ")";
+ return name(simulator) + "(" + size + ")";
}
}
diff --git a/sim/gobs/gobs/sim/PlacementScheme.java b/sim/gobs/gobs/sim/PlacementScheme.java
index 9ffa9b1..b8c0d52 100644
--- a/sim/gobs/gobs/sim/PlacementScheme.java
+++ b/sim/gobs/gobs/sim/PlacementScheme.java
@@ -12,15 +12,30 @@ import gobs.util.*;
public abstract class PlacementScheme
{
- int B;
+ Simulator simulator;
+ // int B;
BigInteger M;
- PlacementScheme(int B)
+ /**
+ If true, always use the primary as the source
+ for new replicas.
+ */
+ boolean sourcePrimary = true;
+
+ /**
+ @param B Bit-length of addresses
+ @param sourcePrimary If true, always use the primary as the source
+ for new replicas
+ */
+ // PlacementScheme(Simulator simulator, int B, boolean sourcePrimary)
+ PlacementScheme(Simulator simulator, boolean sourcePrimary)
{
- this.B = B;
+ this.simulator = simulator;
+ // this.B = B;
+ this.sourcePrimary = sourcePrimary;
BigInteger two = new BigInteger("2");
- M = two.pow(B);
+ M = two.pow(simulator.B);
}
/**
@@ -39,7 +54,7 @@ public abstract class PlacementScheme
{
BigInteger id = p;
int bytes = file.objectSize(i);
- Obj obj = new Obj(B, id, bytes, file.replicas);
+ Obj obj = new Obj(id, bytes, file.replicas);
result.add(obj);
p = p.add(s).mod(M);
}
@@ -53,6 +68,22 @@ public abstract class PlacementScheme
return result;
}
+ public Node lookup(BigInteger id, List<Node> nodes)
+ {
+ Node result = null;
+ BigInteger diff = null;
+ for (Node node : nodes)
+ {
+ if (diff == null ||
+ distance(id, node.id).compareTo(diff) < 0)
+ {
+ result = node;
+ diff = distance(id, node.id);
+ }
+ }
+ return result;
+ }
+
public void place(Collection<Obj> objects, List<Node> nodes)
{
// System.out.println("place objects: " + objects.size());
@@ -61,91 +92,177 @@ public abstract class PlacementScheme
}
/**
- Allocate replicas for object and place all on nodes.
+ Initial placement: allocate replicas for object and place
+ on nodes.
*/
void placeObject(Obj object, List<Node> nodes)
{
// System.out.println("place: " + object);
- List<Node> closest = closestNodes(object, nodes);
+ List<Node> sites = sites(object, nodes);
+ simulator.stats.flexibilities.add(sites.size());
Primary primary = object.toPrimary();
- closest.remove(closest.size()-1).add(primary);
- for (Node node : closest)
+ sites.remove(sites.size()-1).add(primary);
+ for (int i = 0; i < object.replicas; i++)
{
+ if (sites.size() == 0)
+ {
+ System.out.println("Could not place all replicas!");
+ return;
+ }
+ int r = Bits.nextInt(sites.size());
+ Node node = sites.remove(r);
node.add(object.toSecondary(primary));
}
}
-
- /**
- Obtain a list of nodes closest to the given object with respect
- to the distance metric used here.
- */
- List<Node> closestNodes(Obj object, List<Node> nodes)
- {
- BoundedSortedValues<Node,BigInteger> closest =
- new BoundedSortedValues<Node,BigInteger>(object.replicas);
-
- for (Node node : nodes)
- {
- BigInteger d = distance(object, node);
- closest.add(node, d);
- }
- // System.out.println(closest);
-
- return closest.get();
- }
+ /**
+ Obtain a list of nodes that may host the given object
+ with respect to the replica placement scheme used here.
+ */
+ abstract List<Node> sites(Obj object, List<Node> nodes);
- public abstract BigInteger distance(Addressable address1,
- Addressable address2);
+ /**
+ The distance metric used by this scheme.
+ */
+ public abstract BigInteger distance(BigInteger id1,
+ BigInteger id2);
/**
Place this object to rebuild.
*/
void rebuild(Obj object, List<Node> nodes)
{
- // System.out.println("rebuild: " + object);
- List<Node> closest = closestNodes(object, nodes);
+ System.out.println("rebuild: " + object.toString(simulator));
+ List<Node> sites = sites(object, nodes);
+ // System.out.println("sites.size(): " + sites.size());
Secondary secondary;
Node source = null, destination = null;
if (object instanceof Primary)
{
- Primary primary = object.toPrimary();
- source = closest.remove(closest.size()-1);
- secondary = (Secondary) source.remove(primary.id);
- source.add(primary);
+ Primary primary = (Primary) object;
+ Node primarySite = lookup(object.id, nodes);
+ System.out.println("primary: " + primarySite.name(simulator));
+ if (primarySite.contains(object.id))
+ {
+ secondary = (Secondary) primarySite.remove(object.id);
+ source = locateSource(object, sites);
+ destination = primarySite;
+ destination.add(secondary);
+ }
+ else
+ {
+ source = locateSource(object, sites);
+ destination = primarySite;
+ }
+ primarySite.add(primary);
}
else
{
- source = closest.remove(closest.size()-1);
- Primary primary = (Primary) source.get(object.id);
- secondary = primary.toSecondary(primary);
+ Node primaryNode = sites.get(sites.size()-1);
+ Primary primary = (Primary) primaryNode.get(object.id);
+ source = locateSource(object, sites);
+ secondary = source.get(object.id).toSecondary(primary);
+ destination = locateDestination(object, sites);
+ destination.add(secondary);
}
- if (secondary == null)
+ if (source == null)
{
- System.out.println("rebuild: lost: " + object.bitString());
+ System.out.println("rebuild: lost: " +
+ object.bitString(simulator.B));
+ simulator.lost();
return;
}
+
+ source.pushes++;
+ destination.pulls++;
+
+ printRebuild(object, source, destination);
+ }
+
+ /**
+ Locate a replica of the given object on one of the given nodes
+ in accordance with the #sourcePrimary policy.
+ */
+ Node locateSource(Obj object, List<Node> sites)
+ {
+ int maxTries = sites.size()+1;
+ Node result = null;
+
+ if (sourcePrimary)
+ {
+ result = sites.remove(sites.size()-1);
+ if (result.contains(object.id))
+ return result;
+ }
+
+ // System.out.println("sites.size(): " + sites.size());
+
+ int r;
+ int i = 0;
+ r = Bits.nextInt(sites.size());
+ do
+ {
+ r = (r+1) % sites.size();
+ result = sites.get(r);
+ // System.out.println("trying: " + r + " " + result);
+ if (i++ > maxTries)
+ failLocateSource(object, sites);
+ } while (! result.contains(object.id));
+ sites.remove(r);
+
+ // System.out.println("located: " + result);
+
+ return result;
+ }
+
+ Node locateDestination(Obj object, List<Node> sites)
+ {
+ Node destination = null;
+
+ // System.out.println("destinations: ");
+ // simulator.printNodes(sites);
- for (Node node : closest)
+ while (sites.size() > 0)
{
- if (! node.contains(secondary.id))
+ int r = Bits.nextInt(sites.size());
+ Node node = sites.remove(r);
+ if (! node.contains(object.id))
{
destination = node;
break;
}
+ else
+ {
+ // System.out.println("" + node + " contains " + secondary.id);
+ }
}
+
+ if (destination == null)
+ Tools.bail("No destination!");
+ return destination;
+ }
- destination.add(secondary);
-
- source.pushes++;
- destination.pulls++;
+ /**
+ Report failure to perform replication and exit.
+ */
+ void failLocateSource(Obj object, List<Node> sites)
+ {
+ System.out.println("locateSource(): Could not find source for: " +
+ object);
+ System.out.println("sites.size() : " + sites);
+ simulator.printNodeObjects(sites);
+
+ Tools.bail("Exit!");
+ }
- if (Tools.string(Simulator.current.properties, "printRebuilds")
- .equals("true"))
- System.out.println("rebuild: " + object.toString() + ": " +
- source.name() + " -> " +
- destination.name());
+ void printRebuild(Obj object, Node source, Node destination)
+ {
+ if (simulator.bool("printRebuilds"))
+ System.out.println("rebuild: " + object.toString(simulator) +
+ ": " +
+ source.name(simulator) + " -> " +
+ destination.name(simulator));
}
/**
@@ -153,7 +270,7 @@ public abstract class PlacementScheme
*/
BigInteger randomID()
{
- BigInteger i = new BigInteger(B, Bits.rng);
+ BigInteger i = new BigInteger(simulator.B, Bits.rng);
return i;
}
@@ -162,6 +279,6 @@ public abstract class PlacementScheme
*/
BigInteger randomID(BigInteger i)
{
- return new BigInteger(B, Bits.rng).mod(i);
+ return new BigInteger(simulator.B, Bits.rng).mod(i);
}
}
diff --git a/sim/gobs/gobs/sim/Primary.java b/sim/gobs/gobs/sim/Primary.java
index 28a8de2..d9e6a46 100644
--- a/sim/gobs/gobs/sim/Primary.java
+++ b/sim/gobs/gobs/sim/Primary.java
@@ -10,13 +10,20 @@ import java.math.BigInteger;
class Primary
extends Obj
{
+ /*
Primary(int B, BigInteger id, int size, int replicas)
{
super(B, id, size, replicas);
}
+ */
+
+ Primary(BigInteger id, int size, int replicas)
+ {
+ super(id, size, replicas);
+ }
- public String toString()
+ public String toString(Simulator simulator)
{
- return name() + "[P](" + size + ")";
+ return name(simulator) + "[P](" + size + ")";
}
}
diff --git a/sim/gobs/gobs/sim/RandomFiles.java b/sim/gobs/gobs/sim/RandomFiles.java
index 073843a..13a81db 100644
--- a/sim/gobs/gobs/sim/RandomFiles.java
+++ b/sim/gobs/gobs/sim/RandomFiles.java
@@ -14,7 +14,7 @@ import gobs.util.Bits;
* Big files use replicas=2.
* Small files use replicas=3.
*
- * Required properties settings: filestrip, filebigmax, filebigmin,
+ * Required properties settings: filewidth, filebigmax, filebigmin,
* filesmallmax, filesmallmin.
* */
diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/gobs/sim/RandomNodes.java
index 9fb36e5..c29f7b4 100644
--- a/sim/gobs/gobs/sim/RandomNodes.java
+++ b/sim/gobs/gobs/sim/RandomNodes.java
@@ -13,9 +13,9 @@ import gobs.util.*;
class RandomNodes
extends NodeScheme
{
- RandomNodes(int B)
+ RandomNodes(Simulator simulator)
{
- super(B);
+ super(simulator);
}
public void generate(int count, List<Node> nodes)
@@ -27,11 +27,11 @@ class RandomNodes
int tries = 0;
do
{
- if (tries++ >= Simulator.maxTries)
+ if (tries++ >= simulator.maxTries)
Tools.bail("Could not assign unique node id!");
- id = new BigInteger(B, Bits.rng);
- node = new Node(B, id);
+ id = new BigInteger(simulator.B, Bits.rng);
+ node = new Node(id);
}
while (nodes.contains(node));
nodes.add(node);
diff --git a/sim/gobs/gobs/sim/Secondary.java b/sim/gobs/gobs/sim/Secondary.java
index 4865e1e..c92f841 100644
--- a/sim/gobs/gobs/sim/Secondary.java
+++ b/sim/gobs/gobs/sim/Secondary.java
@@ -12,15 +12,15 @@ class Secondary
{
Primary primary;
- Secondary(int B, BigInteger id, int size, int replicas,
+ Secondary(BigInteger id, int size, int replicas,
Primary primary)
{
- super(B, id, size, replicas);
+ super(id, size, replicas);
this.primary = primary;
}
- public String toString()
+ public String toString(Simulator simulator)
{
- return name() + "[S](" + size + ")";
+ return name(simulator) + "[S](" + size + ")";
}
}
diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/gobs/sim/SimpleNodes.java
index 9247111..99cae40 100644
--- a/sim/gobs/gobs/sim/SimpleNodes.java
+++ b/sim/gobs/gobs/sim/SimpleNodes.java
@@ -14,17 +14,17 @@ import gobs.util.*;
class SimpleNodes
extends NodeScheme
{
- SimpleNodes(int B)
+ SimpleNodes(Simulator simulator)
{
- super(B);
+ super(simulator);
}
public void generate(int count, List<Node> nodes)
{
- BigInteger offset = new BigInteger(B, Bits.rng);
+ BigInteger offset = new BigInteger(simulator.B, Bits.rng);
BigInteger c = new BigInteger("" + count);
- BigInteger bigM = new BigInteger("" + M);
+ BigInteger bigM = new BigInteger("" + simulator.M);
BigInteger fraction = bigM.divide(c);
for (int i = 0; i < count; i++)
@@ -34,7 +34,7 @@ class SimpleNodes
BigInteger bigi = new BigInteger("" + i);
BigInteger id =
offset.add(bigi.multiply(fraction)).mod(bigM);
- Node node = new Node(B, id);
+ Node node = new Node(id);
if (nodes.contains(node))
Tools.bail("Could not assign unique node id!");
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
index 5eb94fd..c3fb0fc 100644
--- a/sim/gobs/gobs/sim/Simulator.java
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -29,6 +29,11 @@ public class Simulator
FileFactory factory;
/**
+ Address id display mode.
+ */
+ Addressable.Display display = Addressable.Display.BITS;
+
+ /**
Useful for helpful error messages:
*/
String reading;
@@ -53,10 +58,10 @@ public class Simulator
*/
public Map<Node,Integer> origCount;
- static Simulator current;
+ // static Simulator current;
static final int maxTries = 10;
- DecimalFormat df = new DecimalFormat("0.0");
+ DecimalFormat df = new DecimalFormat("0.00");
public Statistics stats = new Statistics();
@@ -73,25 +78,31 @@ public class Simulator
return result;
}
- void printNodes(List<Node> nodes)
+ void printProperties()
+ {
+ properties.list(System.out);
+ System.out.println("");
+ }
+
+ void printNodes(List<Node> list)
{
System.out.println("NODES:");
- for (Node node : nodes)
- System.out.println(node.name());
+ for (Node node : list)
+ System.out.println(node.name(this));
}
- void printNodeObjects(List<Node> nodes)
+ void printNodeObjects(List<Node> list)
{
System.out.println("NODE_CONTENTS:");
- for (Node node : nodes)
- System.out.println(node.display());
+ for (Node node : list)
+ System.out.println(node.display(this));
}
void printFiles()
{
for (File f : files)
{
- System.out.println(f.toString());
+ System.out.println(f.toString(this));
}
}
@@ -102,29 +113,41 @@ public class Simulator
for (Node node : sorted.keySet())
{
Integer d = sorted.get(node);
- System.out.println(node.name() + ": " + d);
+ System.out.println(node.name(this) + ": " + d);
}
}
public static void main(String[] args)
{
- // String layoutName;
- // int B, N, fileCount, fileSize, strip;
-
- Bits.init();
-
if (args.length < 1)
bail("usage: Simulator <file.cfg>*");
- current = new Simulator();
+ Simulator simulator = new Simulator();
for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-p"))
- current.path(args[++i]);
+ {
+ simulator.path(args[++i]);
+ }
+ else if (args[i].contains("="))
+ {
+ int index = args[i].indexOf('=');
+ String key = args[i].substring(0, index);
+ String value = args[i].substring(index+1);
+ simulator.properties.setProperty(key, value);
+ }
else
- current.load(args[i]);
+ {
+ simulator.load(args[i]);
+ }
}
- current.execute();
+
+ if (simulator.has("seed"))
+ Bits.init(simulator.integer("seed"));
+ else
+ Bits.init(true);
+
+ simulator.execute();
}
void path(String path)
@@ -162,9 +185,17 @@ public class Simulator
}
/**
+ Allow subordinate classes to check properties.
+ */
+ public boolean has(String name)
+ {
+ return (properties.getProperty(name) != null);
+ }
+
+ /**
Allow subordinate classes to obtain properties.
*/
- int integer(String name)
+ public int integer(String name)
{
return Tools.integer(properties, name);
}
@@ -172,10 +203,18 @@ public class Simulator
/**
Allow subordinate classes to obtain properties.
*/
- String string(String name)
+ public String string(String name)
{
return Tools.string(properties, name);
}
+
+ /**
+ Allow subordinate classes to obtain properties.
+ */
+ public boolean bool(String name)
+ {
+ return Tools.bool(properties, name);
+ }
/**
Convert properties into simulator variables.
@@ -186,13 +225,22 @@ public class Simulator
// Process input...
int arg = 0;
- Simulator.current = this;
-
+ setupBasics();
+ setupFileFactory();
+ setupPlacementScheme();
+ setupNodes();
+ }
+
+ void setupBasics()
+ {
B = Tools.integer(properties, "B");
N = Tools.integer(properties, "nodes");
fileCount = Tools.integer(properties, "files");
faults = Tools.integer(properties, "faults");
-
+ }
+
+ void setupFileFactory()
+ {
String factoryName = properties.getProperty("FileFactory");
if (factoryName == null)
bail("No FileFactory given!");
@@ -204,45 +252,49 @@ public class Simulator
factory = new RandomFiles(this);
else
bail("Bad filefactory name: " + factoryName);
+ }
- String placerName = Tools.string(properties, "PlacementScheme");
+ void setupPlacementScheme()
+ {
+ String placerName = string("PlacementScheme");
+ boolean replSrcPrimary = bool("ReplaceSourcePrimary");
if (placerName.equals("Nearest"))
{
- Addressable.display(Addressable.Display.NUMERIC);
- placer = new Nearest(B);
+ display = Addressable.Display.NUMERIC;
+ placer = new Nearest(this, replSrcPrimary);
}
else if (placerName.equals("Kademlia"))
{
- Addressable.display(Addressable.Display.BITS);
- placer = new Kademlia(B);
+ display = Addressable.Display.BITS;
+ placer = new Kademlia(this, replSrcPrimary);
+ }
+ else if (placerName.equals("VertexGroups"))
+ {
+ display = Addressable.Display.BITS;
+ int P = integer("VertexGroupPrefix");
+ placer = new VertexGroups(this, replSrcPrimary, P);
}
else
bail("Bad PlacementScheme name: " + placerName);
M = placer.M;
-
+ }
+
+ void setupNodes()
+ {
String nodesName = Tools.string(properties, "NodeScheme");
if (nodesName.equals("RandomNodes"))
- hub = new RandomNodes(B);
+ hub = new RandomNodes(this);
else if (nodesName.equals("SimpleNodes"))
- hub = new SimpleNodes(B);
+ hub = new SimpleNodes(this);
else
bail("Bad NodeScheme name: " + nodesName);
nodes = new ArrayList<Node>(N);
}
- public void execute()
+ void allocateFiles()
{
- setup();
-
- // Initialize node addresses...
- hub.generate(N, nodes);
- stats.nodes = N;
-
- if (Tools.bool(properties, "printInitialNodes"))
- printNodes(nodes);
-
// Initialize object addresses...
for (int i = 0; i < fileCount; i++)
{
@@ -262,7 +314,26 @@ public class Simulator
while (objects.containsAny(set));
objects.addAll(set);
}
+ }
+
+ public void execute()
+ {
+ setup();
+
+ System.out.println("\nexecute:");
+
+ if (Tools.bool(properties, "printProperties"))
+ printProperties();
+
+ // Initialize node addresses...
+ hub.generate(N, nodes);
+ stats.nodes = N;
+
+ if (Tools.bool(properties, "printInitialNodes"))
+ printNodes(nodes);
+ allocateFiles();
+
System.out.println("nodes: " + N);
if (Tools.string(properties, "printFiles").equals("true"))
@@ -270,7 +341,7 @@ public class Simulator
// Place objects and add up load...
placer.place(objects, nodes);
-
+
origCount = countObjects(nodes);
// printNodes(nodes);
@@ -284,7 +355,7 @@ public class Simulator
// Cause a fault and reallocate objects...
int index = Bits.nextInt(nodes.size());
Node failed = nodes.remove(index);
- System.out.println("failed: " + failed.name() +
+ System.out.println("failed: " + failed.name(this) +
" (" + failed.objects.size() + ")");
List<Obj> replacements = failed.objects;
@@ -333,7 +404,7 @@ public class Simulator
if (d > 0)
{
percentPulls = (100.0*d)/total;
- System.out.println(node.name() + ": " +
+ System.out.println(node.name(this) + ": " +
df.format(percentPulls) + "%");
affected++;
last = node;
@@ -350,7 +421,7 @@ public class Simulator
if (d > 0)
{
percentTotal = (100.0*d)/(total*2);
- System.out.println(node.name() + ": " +
+ System.out.println(node.name(this) + ": " +
df.format(percentTotal) + "%");
if (percentTotal > maxPercentTotal)
{
@@ -358,11 +429,21 @@ public class Simulator
}
}
}
-
- stats.results.setProperty("maxPulls", df.format(percentPulls));
- stats.results.setProperty("affected", df.format(affected));
- stats.results.setProperty("maxTotal", df.format(maxPercentTotal));
-
- System.out.println("SERVERS_AFFECTED: " + affected);
+
+ Properties results = stats.results;
+ results.setProperty("maxPulls", df.format(percentPulls));
+ results.setProperty("affected", df.format(affected));
+ results.setProperty("maxTotal", df.format(maxPercentTotal));
+ results.setProperty("lostObjects", df.format(stats.lostObjects));
+
+ System.out.println("FLEXIBILITIES: " +
+ df.format(stats.avgFlexibility()));
+ System.out.println("SERVERS_AFFECTED: " + affected);
+ System.out.println("LOST_OBJECTS: " + stats.lostObjects);
+ }
+
+ void lost()
+ {
+ stats.lostObjects++;
}
}
diff --git a/sim/gobs/gobs/sim/Statistics.java b/sim/gobs/gobs/sim/Statistics.java
index 8d90128..7c1160d 100644
--- a/sim/gobs/gobs/sim/Statistics.java
+++ b/sim/gobs/gobs/sim/Statistics.java
@@ -1,7 +1,7 @@
package gobs.sim;
-import java.util.Properties;
+import java.util.*;
/**
* Stores results as doubles from a Simulator run.
@@ -9,11 +9,24 @@ import java.util.Properties;
public class Statistics
{
+ public int unique = 0;
+
public Properties results = new Properties();
- public int unique = 0;
public double nodes = 0;
public double maxDeclustering = 0.0;
public double totalTransfers = 0;
public double affected = 0;
+
+ public int lostObjects = 0;
+
+ public List<Integer> flexibilities = new ArrayList<Integer>();
+
+ double avgFlexibility()
+ {
+ double sum = 0.0;
+ for (Integer i : flexibilities)
+ sum += i;
+ return sum/flexibilities.size();
+ }
}
diff --git a/sim/gobs/gobs/sim/UniformNodes.java b/sim/gobs/gobs/sim/UniformNodes.java
deleted file mode 100644
index e9c9ca6..0000000
--- a/sim/gobs/gobs/sim/UniformNodes.java
+++ /dev/null
@@ -1,149 +0,0 @@
-
-package gobs.sim;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * New nodes insert themselves in the middle of
- * the largest gap in the node address space.
- * */
-
-class UniformNodes
- extends NodeScheme
-{
- UniformNodes(int B)
- {
- super(B);
- }
-
- BigInteger makeID(int[] prefix)
- {
- BigInteger result = BigInteger.ZERO;
-
- for (int i = prefix.length-1; i >= 0; i--)
- {
- if (prefix[i] == 1)
- result.setBit(i);
- }
- System.out.println("UniformNodes.makeID(): " + result);
-
- return result;
- }
-
- /**
- Fill in the biggest gap with a new node.
- */
- BigInteger assignID(List<Node> nodes)
- {
- int result = -1;
-
- for (int b = 1; b < B; b++)
- {
- Set<int[]> all = allPossible(B);
-
- for (int[] prefix : all)
- {
- boolean found = false;
- for (Node node : nodes)
- {
- if (node.prefix(prefix))
- {
- found = true;
- break;
- }
- }
- if (! found)
- {
- BigInteger id = makeID(prefix);
- return id;
- }
- }
- }
-
- System.out.println("UniformNodes.assignID(): " +
- "could not generate address!");
- System.exit(1);
- return BigInteger.ONE.negate();
- }
-
- /**
- All possible bit arrays of length i.
- */
- Set<int[]> allPossible(int i)
- {
- int[] A = new int[i];
- return children(A, 0);
- }
-
- /**
- Helper for allPossible().
- */
- Set<int[]> children(int[] A, int b)
- {
- Set<int[]> result = new HashSet<int[]>();
-
- int[] v1 = copy(A, b);
- int[] v2 = copy(A, b);
- v1[b] = 0;
- v2[b] = 1;
-
- if (b == A.length-1)
- {
- result.add(v1);
- result.add(v2);
- }
- else
- {
- result.addAll(children(v1,b+1));
- result.addAll(children(v2,b+1));
- }
-
- return result;
- }
-
- /**
- Obtain a new array the size of the given array with
- elements copied up to item n.
- */
- int[] copy(int[] array, int n)
- {
- int[] result = new int[array.length];
-
- for (int i = 0; i < n; i++)
- result[i] = array[i];
-
- return result;
- }
-
- public void generate(int count, List<Node> nodes)
- {
- for (int i = 0; i < count; i++)
- {
- BigInteger id = assignID(nodes);
- Node newNode = new Node(B, id);
- }
- }
-
- /*
- Debugging only.
-
- public static void main(String[] args)
- {
- int B = 6;
- BigInteger i = new BigInteger("8");
- int[] A = Node.bitArray(B, i);
- UniformNodes u = new UniformNodes(B);
- System.out.println(u.makeID(A));
-
- System.out.println("---");
-
- Set<int[]> s = u.allPossible(3);
- System.out.println(s.size());
- for (int[] v : s)
- System.out.println(Node.arrayString(v));
-
- // System.out.println(allPossible(3));
- }
- */
-}
diff --git a/sim/gobs/gobs/sim/VertexGroups.java b/sim/gobs/gobs/sim/VertexGroups.java
new file mode 100644
index 0000000..ffbfc4a
--- /dev/null
+++ b/sim/gobs/gobs/sim/VertexGroups.java
@@ -0,0 +1,112 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+import gobs.util.Tools;
+
+/**
+ * Places objects on the nearest node using the XOR distance metric.
+ * */
+
+public class VertexGroups
+ extends PlacementScheme
+{
+ int P;
+
+ /**
+ @param simulator Reference to the Simulator
+ @param sourcePrimary If true, always use the primary as the source
+ for new replicas
+ @param P The prefix length to use for vertex grouping
+ */
+ VertexGroups(Simulator simulator, boolean sourcePrimary,
+ int P)
+ {
+ super(simulator, sourcePrimary);
+ this.P = P;
+ }
+
+ public BigInteger distance(BigInteger id1, BigInteger id2)
+ {
+ return id1.xor(id2);
+ }
+
+ /**
+ Obtain a list of nodes that may host the given object
+ with respect to the replica placement scheme used here.
+ */
+ List<Node> sites(Obj object, List<Node> nodes)
+ {
+ // System.out.println("sites for: " +
+ // Addressable.bitString(simulator.B, object.id));
+
+ // System.out.println("P: " + P);
+
+ List<Node> result = new ArrayList<Node>(P+1);
+ Set<Node> sites = new HashSet<Node>(2*(P+1));
+
+ Node primary = lookup(object.id, nodes);
+
+ for (int i = 1; i <= P; i++)
+ {
+ BigInteger t = flip(simulator.B, i, object.id);
+ // System.out.println("t: " + Addressable.bitString(simulator.B,
+ // t));
+ Node node = lookup(t, nodes);
+
+ // System.out.println("node: " + Addressable.bitString(simulator.B,
+ // node.id));
+
+ if (node != primary)
+ sites.add(node);
+ }
+
+ result.addAll(sites);
+ result.add(primary);
+ // System.out.println("sites: " + result);
+
+ return result;
+ }
+
+ static BigInteger flip(int B, int i, BigInteger id)
+ {
+ int v = (int) Math.ceil(B/8.0);
+ // System.out.println("v: " + v);
+ byte[] val = new byte[v];
+ int vi = (i-1)/8;
+ int vj = (B-i)%8;
+
+ // System.out.println("vi: " + vi + " vj: " + vj);
+
+ byte b = new Integer(1 << vj).byteValue();
+ // System.out.println("b: " + b);
+ val[vi] = b;
+
+ // for (byte y : val)
+ // System.out.println(y);
+
+ BigInteger op = new BigInteger(val);
+ // System.out.println("op: " + Addressable.bitString(B, op));
+ return op.xor(id);
+ }
+
+ /**
+ Bit flipper.
+ */
+ public static void main(String[] args)
+ {
+ if (args.length < 3)
+ Tools.bail("Need 3 numbers!");
+
+ int B = Integer.parseInt(args[0]);
+ int i = Integer.parseInt(args[1]);
+ BigInteger id = new BigInteger(args[2], 10);
+
+ System.out.println("argument: " + Addressable.bitString(B, id));
+
+ System.out.println("result: " +
+ Addressable.bitString(B, flip(B, i, id)));
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java
index 1ca098d..7067103 100644
--- a/sim/gobs/gobs/sweep/Balance01.java
+++ b/sim/gobs/gobs/sweep/Balance01.java
@@ -7,7 +7,7 @@ import org.jfree.data.xy.XYSeries;
import gobs.sim.*;
import gobs.util.*;
-import gobs.plot.SimplePlot;
+import gobs.plot.*;
/**
* Reports object load on each server. Sorted.
@@ -39,8 +39,9 @@ class Balance01
Integer load = sorted.get(node);
series.add(i++, load);
}
-
- SimplePlot.plot(series, "Load Distribution", "nodes", "load",
- "Balance01.eps");
+
+ String output = Tools.string(properties, "output");
+ AsciiPlot.plot(series, "Load Distribution", "nodes", "load",
+ output);
}
}
diff --git a/sim/gobs/gobs/sweep/Balance02.java b/sim/gobs/gobs/sweep/Balance02.java
index 3bde37b..5dc142e 100644
--- a/sim/gobs/gobs/sweep/Balance02.java
+++ b/sim/gobs/gobs/sweep/Balance02.java
@@ -43,7 +43,7 @@ class Balance02
if (neighbor != node)
{
BigInteger distance =
- simulator.placer.distance(node,neighbor);
+ simulator.placer.distance(node.id,neighbor.id);
if (distance.compareTo(closestDistance) < 0)
{
closestNode = neighbor;
diff --git a/sim/gobs/gobs/sweep/Decluster01.java b/sim/gobs/gobs/sweep/Decluster01.java
index 99dcd11..7a0078d 100644
--- a/sim/gobs/gobs/sweep/Decluster01.java
+++ b/sim/gobs/gobs/sweep/Decluster01.java
@@ -23,7 +23,7 @@ class Decluster01
int minNodes = Tools.integer(sweep.properties, "minNodes");
int maxNodes = Tools.integer(sweep.properties, "maxNodes");
- List<String> values = Sweep.tens(minNodes, maxNodes);
+ List<String> values = Sweep.exps(minNodes, maxNodes);
sweep.execute("Declustering", "nodes", values, "maxPulls");
diff --git a/sim/gobs/gobs/sweep/Decluster01P.java b/sim/gobs/gobs/sweep/Decluster01P.java
new file mode 100644
index 0000000..d05dcd8
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Decluster01P.java
@@ -0,0 +1,33 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import gobs.plot.SimplePlot;
+import gobs.util.*;
+
+/**
+ * Modifies node count. Reports object movement load on the
+ * heaviest server during rebuild.
+ *
+ * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * */
+
+class Decluster01P
+{
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ Sweep sweep = new ParallelSweep(args);
+
+ int minNodes = Tools.integer(sweep.properties, "minNodes");
+ int maxNodes = Tools.integer(sweep.properties, "maxNodes");
+ List<String> values = Sweep.tens(minNodes, maxNodes);
+
+ sweep.execute("Declustering", "nodes", values, "maxPulls");
+
+ SimplePlot.plot(sweep.series, "Maximum Rebuild Load", "nodes", "load",
+ "Decluster01.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster02.java
index 0d26013..ab57584 100644
--- a/sim/gobs/gobs/sweep/Decluster02.java
+++ b/sim/gobs/gobs/sweep/Decluster02.java
@@ -29,13 +29,8 @@ class Decluster02
int minNodes = Tools.integer(properties, "minNodes");
int maxNodes = Tools.integer(properties, "maxNodes");
-
- List<String> values = null;
- String step = Tools.string(properties, "step");
- if (step.equals("tens"))
- values = Sweep.tens(minNodes, maxNodes);
- else if (step.equals("mids"))
- values = Sweep.exps(minNodes, maxNodes);
+ String step = Tools.string(properties, "step");
+ List<String> values = Sweep.values(step, minNodes, maxNodes);
final XYSeriesCollection collection = new XYSeriesCollection();
diff --git a/sim/gobs/gobs/sweep/Decluster03.java b/sim/gobs/gobs/sweep/Decluster03.java
index 4e5296b..ebc626f 100644
--- a/sim/gobs/gobs/sweep/Decluster03.java
+++ b/sim/gobs/gobs/sweep/Decluster03.java
@@ -33,6 +33,8 @@ class Decluster03
String step = Tools.string(properties, "step");
List<String> values = Sweep.values(step, minNodes, maxNodes);
+ System.out.println("Decluster03: " + values);
+
final XYSeriesCollection collection = new XYSeriesCollection();
properties.setProperty("PlacementScheme", "Nearest");
@@ -51,7 +53,7 @@ class Decluster03
String output = Tools.string(properties, "output");
MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
- "nodes", "load", output);
+ "nodes", "load fraction(%)", output);
// AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
// "nodes", "load", "tmp.txt");
}
diff --git a/sim/gobs/gobs/sweep/Decluster04.java b/sim/gobs/gobs/sweep/Decluster04.java
new file mode 100644
index 0000000..8481fd2
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Decluster04.java
@@ -0,0 +1,67 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+// import gobs.sim.*;
+import gobs.util.*;
+import gobs.plot.*;
+
+/**
+ * Modifies node count.
+ * Reports object movement load (pushes+pulls) on the
+ * busiest server during rebuild.
+ *
+ * Usage: Decluster04 -n <repeats> <cfg files>*
+ * */
+
+class Decluster04
+{
+ static Properties properties;
+
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ properties = Sweep.getopts(args);
+
+ int minNodes = Tools.integer(properties, "minNodes");
+ int maxNodes = Tools.integer(properties, "maxNodes");
+ String step = Tools.string(properties, "step");
+ List<String> values = Sweep.values(step, minNodes, maxNodes);
+
+ System.out.println("Decluster04: " + values);
+
+ final XYSeriesCollection collection = new XYSeriesCollection();
+
+ /*
+ properties.setProperty("PlacementScheme", "Nearest");
+ Sweep nearestSweep = new ParallelSweep(properties);
+ nearestSweep.repeats = Tools.integer(properties, "repeats");
+ nearestSweep.execute("PAST", "nodes", values, "maxTotal");
+ collection.addSeries(nearestSweep.series);
+
+ properties.setProperty("PlacementScheme", "Kademlia");
+ Sweep kademliaSweep = new ParallelSweep(properties);
+ kademliaSweep.repeats = Tools.integer(properties, "repeats");
+ kademliaSweep.execute("Kademlia", "nodes", values,
+ "maxTotal");
+ collection.addSeries(kademliaSweep.series);
+ */
+
+ properties.setProperty("PlacementScheme", "VertexGroups");
+ Sweep vgSweep = new Sweep(properties);
+ vgSweep.repeats = Tools.integer(properties, "repeats");
+ vgSweep.execute("Vertex Groups", "nodes", values, "maxTotal");
+ collection.addSeries(vgSweep.series);
+
+ String output = Tools.string(properties, "output");
+ MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
+ "nodes", "load fraction(%)", output);
+ // AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
+ // "nodes", "load", "tmp.txt");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/ParallelSweep.java b/sim/gobs/gobs/sweep/ParallelSweep.java
new file mode 100644
index 0000000..ff0fa15
--- /dev/null
+++ b/sim/gobs/gobs/sweep/ParallelSweep.java
@@ -0,0 +1,152 @@
+
+package gobs.sweep;
+
+import java.util.*;
+import java.util.concurrent.*;
+
+import org.jfree.data.xy.XYSeries;
+
+import gobs.sim.*;
+import gobs.util.*;
+
+/**
+ * Reusable framework for parallel parameter sweeps.
+ *
+ * Experiments that subclass this class
+ * */
+
+class ParallelSweep
+ extends Sweep
+{
+ int cores = -1;
+
+ ParallelSweep(int cores)
+ {
+ super();
+ this.cores = cores;
+ }
+
+ ParallelSweep(Properties properties)
+ {
+ super(properties);
+ this.cores = Tools.integer(this.properties, "cores");
+ }
+
+ ParallelSweep(String[] args)
+ {
+ super(args);
+ this.cores = Tools.integer(this.properties, "cores");
+ }
+
+ class SimulatorExecution
+ extends Thread
+ {
+ Simulator simulator;
+
+ SimulatorExecution(Simulator simulator)
+ {
+ this.simulator = simulator;
+ }
+
+ public void run()
+ {
+ simulator.execute();
+ System.out.println("Simulator done: " + simulator.string("nodes"));
+ }
+ }
+
+ /**
+ Execute the parameter sweep.
+ For each value in values, substitute it for xname in the
+ properties object. Run the simulation and extract the
+ yname property for the plot.
+ */
+ void execute(String description, String xname,
+ List<String> values, String yname)
+ {
+ repeats = Tools.integer(properties, "repeats");
+
+ if (repeats <= 0)
+ System.out.println("WARNING: repeats=" + repeats);
+
+ System.out.println("cores: " + cores);
+
+ ExecutorService service = Executors.newFixedThreadPool(cores);
+
+ series = new XYSeries(description);
+ for (String v : values)
+ {
+ double total = 0.0;
+ for (int i = 0; i < repeats; i++)
+ {
+ Simulator simulator = new Simulator();
+ properties.setProperty("unique", new Integer(i).toString());
+ properties.setProperty(xname, v);
+ simulator.initialize((Properties) properties.clone());
+ sims.put(v + "_" + i, simulator);
+ service.execute(new SimulatorExecution(simulator));
+ }
+ }
+
+ service.shutdown();
+ System.out.println("Submission complete.");
+ boolean complete = true;
+ try
+ {
+ complete = service.awaitTermination(repeats*values.size()*20,
+ TimeUnit.DAYS);
+ }
+ catch (Exception e)
+ {
+ System.out.println(e);
+ Tools.bail("Error!");
+ }
+ if (! complete)
+ Tools.bail("Timeout occurred!");
+ System.out.println("Termination complete.");
+
+ for (String v : values)
+ {
+ double total = 0.0;
+ for (int i = 0; i < repeats; i++)
+ {
+ Simulator simulator = sims.get(v + "_" + i);
+ stats.add(simulator.stats);
+ try
+ {
+ System.out.println("result: " + result(simulator, yname));
+ }
+ catch (NullPointerException e)
+ {
+ System.out.println("No result: " + yname + " " +
+ v + " " + i);
+ }
+ total += result(simulator, yname);
+ }
+ System.out.println("avg: " + total/repeats);
+ series.add(Double.parseDouble(v), total/repeats);
+ }
+ }
+
+ /**
+ Extract the variable name from the simulator results.
+ */
+ double result(Simulator simulator, String name)
+ {
+ return Double.parseDouble
+ (simulator.stats.results.getProperty(name));
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ int i1 = Integer.parseInt(args[0]);
+ int i2 = Integer.parseInt(args[1]);
+
+ List<String> list = mids(i1,i2);
+
+ System.out.println(list);
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Sweep.java b/sim/gobs/gobs/sweep/Sweep.java
index 686a2d9..7cf53da 100644
--- a/sim/gobs/gobs/sweep/Sweep.java
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -17,8 +17,9 @@ import gobs.util.*;
class Sweep
{
Properties properties = new Properties();
- List<String> values;
- List<Statistics> stats = new ArrayList<Statistics>();
+ List<String> values;
+ Map<String,Simulator> sims = new Hashtable<String,Simulator>();
+ List<Statistics> stats = new Vector<Statistics>();
XYSeries series;
int repeats;
@@ -60,6 +61,10 @@ class Sweep
{
result.setProperty("repeats", args[++i]);
}
+ else if (args[i].equals("-c"))
+ {
+ result.setProperty("cores", args[++i]);
+ }
else if (args[i].equals("-o"))
{
result.setProperty("output", args[++i]);
@@ -68,6 +73,13 @@ class Sweep
{
path(args[++i]);
}
+ else if (args[i].contains("="))
+ {
+ int index = args[i].indexOf('=');
+ String key = args[i].substring(0, index);
+ String value = args[i].substring(index+1);
+ result.setProperty(key, value);
+ }
else
{
load(result, args[i]);
diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/gobs/util/Bits.java
index 8851df9..1727b50 100644
--- a/sim/gobs/gobs/util/Bits.java
+++ b/sim/gobs/gobs/util/Bits.java
@@ -14,22 +14,40 @@ public class Bits
static boolean locked = false;
static boolean ready = false;
- /** If not locked, seed the generator with the clock. */
+ /**
+ If not locked, seed the generator with the clock.
+ */
public static void init()
{
init(System.currentTimeMillis());
}
/**
+ If not locked, seed the generator with the clock mod 100.
+ Useful for debugging.
+ @param dump If true, dump the seed.
+ */
+ public static long init(boolean dump)
+ {
+ long seed = System.currentTimeMillis() % 100;
+ init(seed);
+
+ if (dump)
+ System.out.println("Bits.init(" + seed + ")");
+
+ return seed;
+ }
+
+ /**
If not locked, seed the generator
@param s The seed.
*/
- public static void init(long s)
+ public static void init(long seed)
{
if (! locked)
{
// System.out.println("Seeding RNG...");
- rng = new Random(s);
+ rng = new Random(seed);
ready = true;
}
}
diff --git a/sim/gobs/params.cfg b/sim/gobs/params.cfg
index fccbf19..f0fe63d 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/params.cfg
@@ -4,18 +4,22 @@
### General parameters:
# Bit-length of addresses:
-B = 7
+B = 16
# Number of servers:
-nodes = 32
+nodes = 16
# Number of files:
-files = 6
+files = 2
# Number of faults:
faults = 1
### Choose a PlacementScheme implementation:
-PlacementScheme = Kademlia
-# PlacementScheme = Nearest
+#PlacementScheme = Kademlia
+#PlacementScheme = Nearest
+PlacementScheme = VertexGroups
+
+VertexGroupPrefix = 5
+ReplaceSourcePrimary = false
### Choose a NodeScheme implementation:
@@ -33,7 +37,7 @@ filestrip = 4
# File/object replicas:
filereplicas = 3
# Number of objects per file:
-filewidth = 10
+filewidth = 3
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -42,8 +46,6 @@ filewidth = 10
# FileFactory implementation RandomFiles
#FileFactory = RandomFiles
-# Strip size:
-#filestrip = 4
# Max size of big files:
#filebigmax = 100
# Min size of big files:
diff --git a/sim/gobs/sweeps/kp01.cfg b/sim/gobs/sweeps/kp01.cfg
index 599984f..b189818 100644
--- a/sim/gobs/sweeps/kp01.cfg
+++ b/sim/gobs/sweeps/kp01.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 01
-step = exps
+step = mids
### General parameters:
@@ -18,8 +18,7 @@ maxNodes = 1000
### Choose a PlacementScheme implementation:
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+# Chosen by sweep driver.
### Choose a NodeScheme implementation:
diff --git a/sim/gobs/sweeps/kp02.cfg b/sim/gobs/sweeps/kp02.cfg
index a972556..c0f69c6 100644
--- a/sim/gobs/sweeps/kp02.cfg
+++ b/sim/gobs/sweeps/kp02.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 02
-step = exps
+step = mids
### General parameters:
diff --git a/sim/gobs/sweeps/kp03.cfg b/sim/gobs/sweeps/kp03.cfg
index 25890dc..af729f7 100644
--- a/sim/gobs/sweeps/kp03.cfg
+++ b/sim/gobs/sweeps/kp03.cfg
@@ -1,7 +1,6 @@
### Kademlia vs. PAST 03
-output = kp03.eps
step = mids
### General parameters:
@@ -19,8 +18,9 @@ maxNodes = 1000
### Choose a PlacementScheme implementation:
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+# Chosen by sweep driver
+
+ReplaceSourcePrimary = false
### Choose a NodeScheme implementation:
@@ -60,12 +60,14 @@ filewidth = 10
### Simulator output configuration
+# Dump properties for each Simulator execution
+printProperties = false
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
printNodes = false
# Print object tranfers during rebuilds (true/false)
-printRebuilds = false
+printRebuilds = false
# Print file information (true/false)
printFiles = false
# Print load change statistics (true/false)
diff --git a/sim/gobs/sweeps/kp04.cfg b/sim/gobs/sweeps/kp04.cfg
index 716263c..b47fb06 100644
--- a/sim/gobs/sweeps/kp04.cfg
+++ b/sim/gobs/sweeps/kp04.cfg
@@ -1,7 +1,6 @@
### Kademlia vs. PAST 04
-output = kp04.eps
step = mids
### General parameters:
@@ -15,12 +14,13 @@ faults = 1
# Number of servers:
minNodes = 10
-maxNodes = 1000
+maxNodes = 100
### Choose a PlacementScheme implementation:
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+# Chosen by sweep driver
+
+ReplaceSourcePrimary = false
### Choose a NodeScheme implementation:
@@ -60,6 +60,8 @@ filewidth = 10
### Simulator output configuration
+# Dump properties for each Simulator execution
+printProperties = false
# Print nodes and objects at startup (true/false)
printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
diff --git a/sim/gobs/wiki/dc02kp01.eps b/sim/gobs/wiki/dc02kp01.eps
new file mode 100644
index 0000000..28d5227
--- /dev/null
+++ b/sim/gobs/wiki/dc02kp01.eps
@@ -0,0 +1,5002 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-21T18:08:22
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+58.148 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+59.869 345.481 M
+59.869 344.606 lineto
+61.604 344.606 lineto
+61.604 337.762 lineto
+59.869 338.2 lineto
+59.869 337.309 lineto
+62.76 336.59 lineto
+62.76 344.606 lineto
+64.494 344.606 lineto
+64.494 345.481 lineto
+59.869 345.481 lineto
+closepath
+69.41 345.7 M
+68.066 345.7 67.238 344.434 QUADTO
+66.41 343.168 66.41 341.137 QUADTO
+66.41 339.09 67.246 337.84 QUADTO
+68.082 336.59 69.441 336.59 QUADTO
+70.801 336.59 71.637 337.84 QUADTO
+72.473 339.09 72.473 341.122 QUADTO
+72.473 343.2 71.637 344.45 QUADTO
+70.801 345.7 69.41 345.7 QUADTO
+closepath
+69.426 344.825 M
+71.254 344.825 71.254 341.106 QUADTO
+71.254 337.465 69.441 337.465 QUADTO
+67.645 337.465 67.645 341.137 QUADTO
+67.645 344.825 69.426 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.645 331.931 M
+65.645 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+104.188 345.481 M
+104.188 344.465 lineto
+104.688 343.293 106.219 341.903 QUADTO
+106.891 341.309 lineto
+108.157 340.153 108.157 339.012 QUADTO
+108.157 338.293 107.727 337.879 QUADTO
+107.297 337.465 106.532 337.465 QUADTO
+105.625 337.465 104.407 338.153 QUADTO
+104.407 337.137 lineto
+105.563 336.59 106.688 336.59 QUADTO
+107.907 336.59 108.649 337.247 QUADTO
+109.391 337.903 109.391 338.981 QUADTO
+109.391 339.762 109.016 340.372 QUADTO
+108.641 340.981 107.625 341.84 QUADTO
+107.188 342.215 lineto
+105.797 343.387 105.579 344.465 QUADTO
+109.344 344.465 lineto
+109.344 345.481 lineto
+104.188 345.481 lineto
+closepath
+114.541 345.7 M
+113.198 345.7 112.37 344.434 QUADTO
+111.541 343.168 111.541 341.137 QUADTO
+111.541 339.09 112.377 337.84 QUADTO
+113.213 336.59 114.573 336.59 QUADTO
+115.932 336.59 116.768 337.84 QUADTO
+117.604 339.09 117.604 341.122 QUADTO
+117.604 343.2 116.768 344.45 QUADTO
+115.932 345.7 114.541 345.7 QUADTO
+closepath
+114.557 344.825 M
+116.385 344.825 116.385 341.106 QUADTO
+116.385 337.465 114.573 337.465 QUADTO
+112.776 337.465 112.776 341.137 QUADTO
+112.776 344.825 114.557 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+110.776 331.931 M
+110.776 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+130.807 345.418 M
+130.807 344.34 lineto
+132.057 344.825 132.76 344.825 QUADTO
+133.588 344.825 134.112 344.34 QUADTO
+134.635 343.856 134.635 343.09 QUADTO
+134.635 341.262 132.072 341.262 QUADTO
+131.604 341.262 lineto
+131.604 340.481 lineto
+132.01 340.481 lineto
+134.416 340.481 134.416 338.793 QUADTO
+134.416 337.465 132.838 337.465 QUADTO
+131.963 337.465 130.932 337.95 QUADTO
+130.932 336.934 lineto
+131.947 336.59 132.916 336.59 QUADTO
+135.572 336.59 135.572 338.606 QUADTO
+135.572 340.137 133.76 340.778 QUADTO
+135.869 341.262 135.869 343.075 QUADTO
+135.869 344.309 135.057 345.004 QUADTO
+134.244 345.7 132.838 345.7 QUADTO
+132.026 345.7 130.807 345.418 QUADTO
+closepath
+140.942 345.7 M
+139.598 345.7 138.77 344.434 QUADTO
+137.942 343.168 137.942 341.137 QUADTO
+137.942 339.09 138.778 337.84 QUADTO
+139.613 336.59 140.973 336.59 QUADTO
+142.332 336.59 143.168 337.84 QUADTO
+144.004 339.09 144.004 341.122 QUADTO
+144.004 343.2 143.168 344.45 QUADTO
+142.332 345.7 140.942 345.7 QUADTO
+closepath
+140.957 344.825 M
+142.785 344.825 142.785 341.106 QUADTO
+142.785 337.465 140.973 337.465 QUADTO
+139.176 337.465 139.176 341.137 QUADTO
+139.176 344.825 140.957 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+137.176 331.931 M
+137.176 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+155.907 331.931 M
+155.907 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+170.436 331.931 M
+170.436 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+182.307 331.931 M
+182.307 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.344 331.931 M
+192.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+201.038 331.931 M
+201.038 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+208.707 331.931 M
+208.707 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+205.998 345.481 M
+205.998 344.606 lineto
+207.732 344.606 lineto
+207.732 337.762 lineto
+205.998 338.2 lineto
+205.998 337.309 lineto
+208.889 336.59 lineto
+208.889 344.606 lineto
+210.623 344.606 lineto
+210.623 345.481 lineto
+205.998 345.481 lineto
+closepath
+215.539 345.7 M
+214.195 345.7 213.367 344.434 QUADTO
+212.539 343.168 212.539 341.137 QUADTO
+212.539 339.09 213.375 337.84 QUADTO
+214.211 336.59 215.57 336.59 QUADTO
+216.93 336.59 217.766 337.84 QUADTO
+218.602 339.09 218.602 341.122 QUADTO
+218.602 343.2 217.766 344.45 QUADTO
+216.93 345.7 215.539 345.7 QUADTO
+closepath
+215.555 344.825 M
+217.383 344.825 217.383 341.106 QUADTO
+217.383 337.465 215.57 337.465 QUADTO
+213.773 337.465 213.773 341.137 QUADTO
+213.773 344.825 215.555 344.825 QUADTO
+closepath
+223.127 345.7 M
+221.783 345.7 220.955 344.434 QUADTO
+220.127 343.168 220.127 341.137 QUADTO
+220.127 339.09 220.963 337.84 QUADTO
+221.799 336.59 223.158 336.59 QUADTO
+224.518 336.59 225.354 337.84 QUADTO
+226.189 339.09 226.189 341.122 QUADTO
+226.189 343.2 225.354 344.45 QUADTO
+224.518 345.7 223.127 345.7 QUADTO
+closepath
+223.143 344.825 M
+224.971 344.825 224.971 341.106 QUADTO
+224.971 337.465 223.158 337.465 QUADTO
+221.361 337.465 221.361 341.137 QUADTO
+221.361 344.825 223.143 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+250.317 345.481 M
+250.317 344.465 lineto
+250.817 343.293 252.348 341.903 QUADTO
+253.02 341.309 lineto
+254.286 340.153 254.286 339.012 QUADTO
+254.286 338.293 253.856 337.879 QUADTO
+253.426 337.465 252.661 337.465 QUADTO
+251.754 337.465 250.536 338.153 QUADTO
+250.536 337.137 lineto
+251.692 336.59 252.817 336.59 QUADTO
+254.036 336.59 254.778 337.247 QUADTO
+255.52 337.903 255.52 338.981 QUADTO
+255.52 339.762 255.145 340.372 QUADTO
+254.77 340.981 253.754 341.84 QUADTO
+253.317 342.215 lineto
+251.926 343.387 251.707 344.465 QUADTO
+255.473 344.465 lineto
+255.473 345.481 lineto
+250.317 345.481 lineto
+closepath
+260.67 345.7 M
+259.327 345.7 258.499 344.434 QUADTO
+257.67 343.168 257.67 341.137 QUADTO
+257.67 339.09 258.506 337.84 QUADTO
+259.342 336.59 260.702 336.59 QUADTO
+262.061 336.59 262.897 337.84 QUADTO
+263.733 339.09 263.733 341.122 QUADTO
+263.733 343.2 262.897 344.45 QUADTO
+262.061 345.7 260.67 345.7 QUADTO
+closepath
+260.686 344.825 M
+262.514 344.825 262.514 341.106 QUADTO
+262.514 337.465 260.702 337.465 QUADTO
+258.905 337.465 258.905 341.137 QUADTO
+258.905 344.825 260.686 344.825 QUADTO
+closepath
+268.258 345.7 M
+266.915 345.7 266.086 344.434 QUADTO
+265.258 343.168 265.258 341.137 QUADTO
+265.258 339.09 266.094 337.84 QUADTO
+266.93 336.59 268.29 336.59 QUADTO
+269.649 336.59 270.485 337.84 QUADTO
+271.321 339.09 271.321 341.122 QUADTO
+271.321 343.2 270.485 344.45 QUADTO
+269.649 345.7 268.258 345.7 QUADTO
+closepath
+268.274 344.825 M
+270.102 344.825 270.102 341.106 QUADTO
+270.102 337.465 268.29 337.465 QUADTO
+266.493 337.465 266.493 341.137 QUADTO
+266.493 344.825 268.274 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+260.699 331.931 M
+260.699 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+287.099 331.931 M
+287.099 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+305.83 331.931 M
+305.83 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.359 331.931 M
+320.359 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+332.23 331.931 M
+332.23 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+342.267 331.931 M
+342.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.961 331.931 M
+350.961 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+358.63 331.931 M
+358.63 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.127 345.481 M
+352.127 344.606 lineto
+353.861 344.606 lineto
+353.861 337.762 lineto
+352.127 338.2 lineto
+352.127 337.309 lineto
+355.018 336.59 lineto
+355.018 344.606 lineto
+356.752 344.606 lineto
+356.752 345.481 lineto
+352.127 345.481 lineto
+closepath
+361.668 345.7 M
+360.324 345.7 359.496 344.434 QUADTO
+358.668 343.168 358.668 341.137 QUADTO
+358.668 339.09 359.504 337.84 QUADTO
+360.34 336.59 361.699 336.59 QUADTO
+363.059 336.59 363.895 337.84 QUADTO
+364.73 339.09 364.73 341.122 QUADTO
+364.73 343.2 363.895 344.45 QUADTO
+363.059 345.7 361.668 345.7 QUADTO
+closepath
+361.684 344.825 M
+363.512 344.825 363.512 341.106 QUADTO
+363.512 337.465 361.699 337.465 QUADTO
+359.902 337.465 359.902 341.137 QUADTO
+359.902 344.825 361.684 344.825 QUADTO
+closepath
+369.256 345.7 M
+367.912 345.7 367.084 344.434 QUADTO
+366.256 343.168 366.256 341.137 QUADTO
+366.256 339.09 367.092 337.84 QUADTO
+367.928 336.59 369.287 336.59 QUADTO
+370.647 336.59 371.482 337.84 QUADTO
+372.318 339.09 372.318 341.122 QUADTO
+372.318 343.2 371.482 344.45 QUADTO
+370.647 345.7 369.256 345.7 QUADTO
+closepath
+369.272 344.825 M
+371.1 344.825 371.1 341.106 QUADTO
+371.1 337.465 369.287 337.465 QUADTO
+367.49 337.465 367.49 341.137 QUADTO
+367.49 344.825 369.272 344.825 QUADTO
+closepath
+376.844 345.7 M
+375.5 345.7 374.672 344.434 QUADTO
+373.844 343.168 373.844 341.137 QUADTO
+373.844 339.09 374.68 337.84 QUADTO
+375.516 336.59 376.875 336.59 QUADTO
+378.234 336.59 379.07 337.84 QUADTO
+379.906 339.09 379.906 341.122 QUADTO
+379.906 343.2 379.07 344.45 QUADTO
+378.234 345.7 376.844 345.7 QUADTO
+closepath
+376.859 344.825 M
+378.688 344.825 378.688 341.106 QUADTO
+378.688 337.465 376.875 337.465 QUADTO
+375.078 337.465 375.078 341.137 QUADTO
+375.078 344.825 376.859 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+202.574 364.954 M
+202.574 357.454 lineto
+204.59 357.454 lineto
+204.59 358.86 lineto
+205.59 357.282 207.152 357.282 QUADTO
+208.152 357.282 208.738 357.915 QUADTO
+209.324 358.548 209.324 359.641 QUADTO
+209.324 364.954 lineto
+207.293 364.954 lineto
+207.293 360.141 lineto
+207.293 358.876 206.449 358.876 QUADTO
+205.48 358.876 204.59 360.235 QUADTO
+204.59 364.954 lineto
+202.574 364.954 lineto
+closepath
+214.925 365.126 M
+213.159 365.126 212.128 364.063 QUADTO
+211.097 363.001 211.097 361.204 QUADTO
+211.097 359.376 212.136 358.329 QUADTO
+213.175 357.282 214.972 357.282 QUADTO
+216.769 357.282 217.808 358.329 QUADTO
+218.847 359.376 218.847 361.188 QUADTO
+218.847 363.032 217.8 364.079 QUADTO
+216.753 365.126 214.925 365.126 QUADTO
+closepath
+214.956 363.86 M
+216.69 363.86 216.69 361.188 QUADTO
+216.69 359.97 216.229 359.259 QUADTO
+215.769 358.548 214.972 358.548 QUADTO
+214.175 358.548 213.706 359.259 QUADTO
+213.237 359.97 213.237 361.204 QUADTO
+213.237 362.423 213.698 363.141 QUADTO
+214.159 363.86 214.956 363.86 QUADTO
+closepath
+225.429 364.954 M
+225.429 363.532 lineto
+224.647 365.126 222.976 365.126 QUADTO
+221.632 365.126 220.858 364.134 QUADTO
+220.085 363.141 220.085 361.407 QUADTO
+220.085 359.516 220.952 358.399 QUADTO
+221.819 357.282 223.288 357.282 QUADTO
+224.476 357.282 225.429 358.204 QUADTO
+225.429 354.157 lineto
+227.46 354.157 lineto
+227.46 364.954 lineto
+225.429 364.954 lineto
+closepath
+225.429 359.407 M
+224.694 358.595 223.866 358.595 QUADTO
+223.116 358.595 222.679 359.313 QUADTO
+222.241 360.032 222.241 361.235 QUADTO
+222.241 363.532 223.71 363.532 QUADTO
+224.616 363.532 225.429 362.376 QUADTO
+225.429 359.407 lineto
+closepath
+236.096 364.704 M
+234.658 365.126 233.361 365.126 QUADTO
+231.486 365.126 230.4 364.055 QUADTO
+229.314 362.985 229.314 361.141 QUADTO
+229.314 359.407 230.307 358.345 QUADTO
+231.299 357.282 232.939 357.282 QUADTO
+234.58 357.282 235.338 358.321 QUADTO
+236.096 359.36 236.096 361.61 QUADTO
+231.439 361.61 lineto
+231.643 363.751 233.799 363.751 QUADTO
+234.814 363.751 236.096 363.282 QUADTO
+236.096 364.704 lineto
+closepath
+231.408 360.47 M
+234.111 360.47 lineto
+234.111 358.548 232.877 358.548 QUADTO
+231.611 358.548 231.408 360.47 QUADTO
+closepath
+237.986 364.72 M
+237.986 363.235 lineto
+239.502 363.86 240.564 363.86 QUADTO
+241.799 363.86 241.799 363.016 QUADTO
+241.799 362.47 240.783 362.048 QUADTO
+240.096 361.782 lineto
+238.986 361.329 238.502 360.813 QUADTO
+238.018 360.298 238.018 359.532 QUADTO
+238.018 358.454 238.838 357.868 QUADTO
+239.658 357.282 241.111 357.282 QUADTO
+242.033 357.282 243.299 357.548 QUADTO
+243.299 358.97 lineto
+242.08 358.548 241.283 358.548 QUADTO
+240.018 358.548 240.018 359.313 QUADTO
+240.018 359.829 240.955 360.188 QUADTO
+241.533 360.407 lineto
+242.861 360.907 243.377 361.423 QUADTO
+243.893 361.938 243.893 362.751 QUADTO
+243.893 363.798 243.01 364.462 QUADTO
+242.127 365.126 240.721 365.126 QUADTO
+239.377 365.126 237.986 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+54.148 34.247 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+44.326 330.426 M
+42.982 330.426 42.154 329.16 QUADTO
+41.326 327.894 41.326 325.863 QUADTO
+41.326 323.816 42.162 322.566 QUADTO
+42.998 321.316 44.357 321.316 QUADTO
+45.717 321.316 46.553 322.566 QUADTO
+47.389 323.816 47.389 325.848 QUADTO
+47.389 327.926 46.553 329.176 QUADTO
+45.717 330.426 44.326 330.426 QUADTO
+closepath
+44.342 329.551 M
+46.17 329.551 46.17 325.832 QUADTO
+46.17 322.191 44.357 322.191 QUADTO
+42.561 322.191 42.561 325.863 QUADTO
+42.561 329.551 44.342 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 325.931 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+42.014 301.135 M
+42.014 300.103 lineto
+42.889 300.447 43.654 300.447 QUADTO
+44.514 300.447 45.006 299.947 QUADTO
+45.498 299.447 45.498 298.556 QUADTO
+45.498 296.603 42.811 296.603 QUADTO
+42.498 296.603 42.17 296.65 QUADTO
+42.17 292.431 lineto
+46.561 292.431 lineto
+46.561 293.431 lineto
+43.186 293.431 lineto
+43.186 295.728 lineto
+44.857 295.728 45.795 296.494 QUADTO
+46.732 297.26 46.732 298.619 QUADTO
+46.732 299.885 45.873 300.603 QUADTO
+45.014 301.322 43.514 301.322 QUADTO
+42.857 301.322 42.014 301.135 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 296.828 M
+54.148 296.828 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 272 M
+34.785 271.125 lineto
+36.52 271.125 lineto
+36.52 264.281 lineto
+34.785 264.718 lineto
+34.785 263.828 lineto
+37.676 263.109 lineto
+37.676 271.125 lineto
+39.41 271.125 lineto
+39.41 272 lineto
+34.785 272 lineto
+closepath
+44.326 272.218 M
+42.982 272.218 42.154 270.953 QUADTO
+41.326 269.687 41.326 267.656 QUADTO
+41.326 265.609 42.162 264.359 QUADTO
+42.998 263.109 44.357 263.109 QUADTO
+45.717 263.109 46.553 264.359 QUADTO
+47.389 265.609 47.389 267.64 QUADTO
+47.389 269.718 46.553 270.968 QUADTO
+45.717 272.218 44.326 272.218 QUADTO
+closepath
+44.342 271.343 M
+46.17 271.343 46.17 267.625 QUADTO
+46.17 263.984 44.357 263.984 QUADTO
+42.561 263.984 42.561 267.656 QUADTO
+42.561 271.343 44.342 271.343 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 267.724 M
+54.148 267.724 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 242.896 M
+34.785 242.021 lineto
+36.52 242.021 lineto
+36.52 235.177 lineto
+34.785 235.615 lineto
+34.785 234.724 lineto
+37.676 234.005 lineto
+37.676 242.021 lineto
+39.41 242.021 lineto
+39.41 242.896 lineto
+34.785 242.896 lineto
+closepath
+42.014 242.927 M
+42.014 241.896 lineto
+42.889 242.24 43.654 242.24 QUADTO
+44.514 242.24 45.006 241.74 QUADTO
+45.498 241.24 45.498 240.349 QUADTO
+45.498 238.396 42.811 238.396 QUADTO
+42.498 238.396 42.17 238.443 QUADTO
+42.17 234.224 lineto
+46.561 234.224 lineto
+46.561 235.224 lineto
+43.186 235.224 lineto
+43.186 237.521 lineto
+44.857 237.521 45.795 238.286 QUADTO
+46.732 239.052 46.732 240.411 QUADTO
+46.732 241.677 45.873 242.396 QUADTO
+45.014 243.115 43.514 243.115 QUADTO
+42.857 243.115 42.014 242.927 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 238.62 M
+54.148 238.62 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 213.792 M
+33.973 212.777 lineto
+34.473 211.605 36.004 210.214 QUADTO
+36.676 209.62 lineto
+37.941 208.464 37.941 207.323 QUADTO
+37.941 206.605 37.512 206.191 QUADTO
+37.082 205.777 36.316 205.777 QUADTO
+35.41 205.777 34.191 206.464 QUADTO
+34.191 205.448 lineto
+35.348 204.902 36.473 204.902 QUADTO
+37.691 204.902 38.434 205.558 QUADTO
+39.176 206.214 39.176 207.292 QUADTO
+39.176 208.073 38.801 208.683 QUADTO
+38.426 209.292 37.41 210.152 QUADTO
+36.973 210.527 lineto
+35.582 211.698 35.363 212.777 QUADTO
+39.129 212.777 lineto
+39.129 213.792 lineto
+33.973 213.792 lineto
+closepath
+44.326 214.011 M
+42.982 214.011 42.154 212.745 QUADTO
+41.326 211.48 41.326 209.448 QUADTO
+41.326 207.402 42.162 206.152 QUADTO
+42.998 204.902 44.357 204.902 QUADTO
+45.717 204.902 46.553 206.152 QUADTO
+47.389 207.402 47.389 209.433 QUADTO
+47.389 211.511 46.553 212.761 QUADTO
+45.717 214.011 44.326 214.011 QUADTO
+closepath
+44.342 213.136 M
+46.17 213.136 46.17 209.417 QUADTO
+46.17 205.777 44.357 205.777 QUADTO
+42.561 205.777 42.561 209.448 QUADTO
+42.561 213.136 44.342 213.136 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 209.516 M
+54.148 209.516 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 184.688 M
+33.973 183.673 lineto
+34.473 182.501 36.004 181.11 QUADTO
+36.676 180.517 lineto
+37.941 179.36 37.941 178.22 QUADTO
+37.941 177.501 37.512 177.087 QUADTO
+37.082 176.673 36.316 176.673 QUADTO
+35.41 176.673 34.191 177.36 QUADTO
+34.191 176.345 lineto
+35.348 175.798 36.473 175.798 QUADTO
+37.691 175.798 38.434 176.454 QUADTO
+39.176 177.11 39.176 178.188 QUADTO
+39.176 178.97 38.801 179.579 QUADTO
+38.426 180.188 37.41 181.048 QUADTO
+36.973 181.423 lineto
+35.582 182.595 35.363 183.673 QUADTO
+39.129 183.673 lineto
+39.129 184.688 lineto
+33.973 184.688 lineto
+closepath
+42.014 184.72 M
+42.014 183.688 lineto
+42.889 184.032 43.654 184.032 QUADTO
+44.514 184.032 45.006 183.532 QUADTO
+45.498 183.032 45.498 182.142 QUADTO
+45.498 180.188 42.811 180.188 QUADTO
+42.498 180.188 42.17 180.235 QUADTO
+42.17 176.017 lineto
+46.561 176.017 lineto
+46.561 177.017 lineto
+43.186 177.017 lineto
+43.186 179.313 lineto
+44.857 179.313 45.795 180.079 QUADTO
+46.732 180.845 46.732 182.204 QUADTO
+46.732 183.47 45.873 184.188 QUADTO
+45.014 184.907 43.514 184.907 QUADTO
+42.857 184.907 42.014 184.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 180.413 M
+54.148 180.413 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 155.522 M
+34.191 154.444 lineto
+35.441 154.928 36.145 154.928 QUADTO
+36.973 154.928 37.496 154.444 QUADTO
+38.02 153.96 38.02 153.194 QUADTO
+38.02 151.366 35.457 151.366 QUADTO
+34.988 151.366 lineto
+34.988 150.585 lineto
+35.395 150.585 lineto
+37.801 150.585 37.801 148.897 QUADTO
+37.801 147.569 36.223 147.569 QUADTO
+35.348 147.569 34.316 148.053 QUADTO
+34.316 147.038 lineto
+35.332 146.694 36.301 146.694 QUADTO
+38.957 146.694 38.957 148.71 QUADTO
+38.957 150.241 37.145 150.882 QUADTO
+39.254 151.366 39.254 153.178 QUADTO
+39.254 154.413 38.441 155.108 QUADTO
+37.629 155.803 36.223 155.803 QUADTO
+35.41 155.803 34.191 155.522 QUADTO
+closepath
+44.326 155.803 M
+42.982 155.803 42.154 154.538 QUADTO
+41.326 153.272 41.326 151.241 QUADTO
+41.326 149.194 42.162 147.944 QUADTO
+42.998 146.694 44.357 146.694 QUADTO
+45.717 146.694 46.553 147.944 QUADTO
+47.389 149.194 47.389 151.225 QUADTO
+47.389 153.303 46.553 154.553 QUADTO
+45.717 155.803 44.326 155.803 QUADTO
+closepath
+44.342 154.928 M
+46.17 154.928 46.17 151.21 QUADTO
+46.17 147.569 44.357 147.569 QUADTO
+42.561 147.569 42.561 151.241 QUADTO
+42.561 154.928 44.342 154.928 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 151.309 M
+54.148 151.309 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 126.419 M
+34.191 125.34 lineto
+35.441 125.825 36.145 125.825 QUADTO
+36.973 125.825 37.496 125.34 QUADTO
+38.02 124.856 38.02 124.09 QUADTO
+38.02 122.262 35.457 122.262 QUADTO
+34.988 122.262 lineto
+34.988 121.481 lineto
+35.395 121.481 lineto
+37.801 121.481 37.801 119.794 QUADTO
+37.801 118.465 36.223 118.465 QUADTO
+35.348 118.465 34.316 118.95 QUADTO
+34.316 117.934 lineto
+35.332 117.59 36.301 117.59 QUADTO
+38.957 117.59 38.957 119.606 QUADTO
+38.957 121.137 37.145 121.778 QUADTO
+39.254 122.262 39.254 124.075 QUADTO
+39.254 125.309 38.441 126.004 QUADTO
+37.629 126.7 36.223 126.7 QUADTO
+35.41 126.7 34.191 126.419 QUADTO
+closepath
+42.014 126.512 M
+42.014 125.481 lineto
+42.889 125.825 43.654 125.825 QUADTO
+44.514 125.825 45.006 125.325 QUADTO
+45.498 124.825 45.498 123.934 QUADTO
+45.498 121.981 42.811 121.981 QUADTO
+42.498 121.981 42.17 122.028 QUADTO
+42.17 117.809 lineto
+46.561 117.809 lineto
+46.561 118.809 lineto
+43.186 118.809 lineto
+43.186 121.106 lineto
+44.857 121.106 45.795 121.872 QUADTO
+46.732 122.637 46.732 123.997 QUADTO
+46.732 125.262 45.873 125.981 QUADTO
+45.014 126.7 43.514 126.7 QUADTO
+42.857 126.7 42.014 126.512 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 122.205 M
+54.148 122.205 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 97.377 M
+37.488 94.924 lineto
+33.582 94.924 lineto
+33.582 94.049 lineto
+37.488 88.705 lineto
+38.582 88.705 lineto
+38.582 93.971 lineto
+39.738 93.971 lineto
+39.738 94.924 lineto
+38.582 94.924 lineto
+38.582 97.377 lineto
+37.488 97.377 lineto
+closepath
+34.723 93.971 M
+37.566 93.971 lineto
+37.566 90.127 lineto
+34.723 93.971 lineto
+closepath
+44.326 97.596 M
+42.982 97.596 42.154 96.33 QUADTO
+41.326 95.065 41.326 93.034 QUADTO
+41.326 90.987 42.162 89.737 QUADTO
+42.998 88.487 44.357 88.487 QUADTO
+45.717 88.487 46.553 89.737 QUADTO
+47.389 90.987 47.389 93.018 QUADTO
+47.389 95.096 46.553 96.346 QUADTO
+45.717 97.596 44.326 97.596 QUADTO
+closepath
+44.342 96.721 M
+46.17 96.721 46.17 93.002 QUADTO
+46.17 89.362 44.357 89.362 QUADTO
+42.561 89.362 42.561 93.034 QUADTO
+42.561 96.721 44.342 96.721 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 93.102 M
+54.148 93.102 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 68.274 M
+37.488 65.82 lineto
+33.582 65.82 lineto
+33.582 64.945 lineto
+37.488 59.602 lineto
+38.582 59.602 lineto
+38.582 64.867 lineto
+39.738 64.867 lineto
+39.738 65.82 lineto
+38.582 65.82 lineto
+38.582 68.274 lineto
+37.488 68.274 lineto
+closepath
+34.723 64.867 M
+37.566 64.867 lineto
+37.566 61.024 lineto
+34.723 64.867 lineto
+closepath
+42.014 68.305 M
+42.014 67.274 lineto
+42.889 67.617 43.654 67.617 QUADTO
+44.514 67.617 45.006 67.117 QUADTO
+45.498 66.617 45.498 65.727 QUADTO
+45.498 63.774 42.811 63.774 QUADTO
+42.498 63.774 42.17 63.82 QUADTO
+42.17 59.602 lineto
+46.561 59.602 lineto
+46.561 60.602 lineto
+43.186 60.602 lineto
+43.186 62.899 lineto
+44.857 62.899 45.795 63.664 QUADTO
+46.732 64.43 46.732 65.789 QUADTO
+46.732 67.055 45.873 67.774 QUADTO
+45.014 68.492 43.514 68.492 QUADTO
+42.857 68.492 42.014 68.305 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 63.998 M
+54.148 63.998 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.426 39.201 M
+34.426 38.17 lineto
+35.301 38.514 36.066 38.514 QUADTO
+36.926 38.514 37.418 38.014 QUADTO
+37.91 37.514 37.91 36.623 QUADTO
+37.91 34.67 35.223 34.67 QUADTO
+34.91 34.67 34.582 34.717 QUADTO
+34.582 30.498 lineto
+38.973 30.498 lineto
+38.973 31.498 lineto
+35.598 31.498 lineto
+35.598 33.795 lineto
+37.27 33.795 38.207 34.561 QUADTO
+39.145 35.326 39.145 36.686 QUADTO
+39.145 37.951 38.285 38.67 QUADTO
+37.426 39.389 35.926 39.389 QUADTO
+35.27 39.389 34.426 39.201 QUADTO
+closepath
+44.326 39.389 M
+42.982 39.389 42.154 38.123 QUADTO
+41.326 36.857 41.326 34.826 QUADTO
+41.326 32.779 42.162 31.529 QUADTO
+42.998 30.279 44.357 30.279 QUADTO
+45.717 30.279 46.553 31.529 QUADTO
+47.389 32.779 47.389 34.811 QUADTO
+47.389 36.889 46.553 38.139 QUADTO
+45.717 39.389 44.326 39.389 QUADTO
+closepath
+44.342 38.514 M
+46.17 38.514 46.17 34.795 QUADTO
+46.17 31.154 44.357 31.154 QUADTO
+42.561 31.154 42.561 34.826 QUADTO
+42.561 38.514 44.342 38.514 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 34.894 M
+54.148 34.894 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -160.60265 199.57533] concat
+newpath
+199.575 160.603 M
+199.575 560.603 lineto
+-200.425 560.603 lineto
+-200.425 160.603 lineto
+199.575 160.603 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-38.14 185.077 M
+-38.14 174.28 lineto
+-36.124 174.28 lineto
+-36.124 185.077 lineto
+-38.14 185.077 lineto
+closepath
+-30.431 185.249 M
+-32.196 185.249 -33.228 184.187 QUADTO
+-34.259 183.124 -34.259 181.327 QUADTO
+-34.259 179.499 -33.22 178.452 QUADTO
+-32.181 177.405 -30.384 177.405 QUADTO
+-28.587 177.405 -27.548 178.452 QUADTO
+-26.509 179.499 -26.509 181.312 QUADTO
+-26.509 183.155 -27.556 184.202 QUADTO
+-28.603 185.249 -30.431 185.249 QUADTO
+closepath
+-30.399 183.983 M
+-28.665 183.983 -28.665 181.312 QUADTO
+-28.665 180.093 -29.126 179.382 QUADTO
+-29.587 178.671 -30.384 178.671 QUADTO
+-31.181 178.671 -31.649 179.382 QUADTO
+-32.118 180.093 -32.118 181.327 QUADTO
+-32.118 182.546 -31.657 183.265 QUADTO
+-31.196 183.983 -30.399 183.983 QUADTO
+closepath
+-20.974 184.265 M
+-21.974 185.249 -23.13 185.249 QUADTO
+-24.114 185.249 -24.731 184.648 QUADTO
+-25.349 184.046 -25.349 183.093 QUADTO
+-25.349 181.843 -24.356 181.171 QUADTO
+-23.364 180.499 -21.505 180.499 QUADTO
+-20.974 180.499 lineto
+-20.974 179.812 lineto
+-20.974 178.64 -22.302 178.64 QUADTO
+-23.489 178.64 -24.692 179.312 QUADTO
+-24.692 177.921 lineto
+-23.317 177.405 -21.974 177.405 QUADTO
+-19.021 177.405 -19.021 179.749 QUADTO
+-19.021 183.062 lineto
+-19.021 183.952 -18.458 183.952 QUADTO
+-18.364 183.952 -18.192 183.921 QUADTO
+-18.146 185.062 lineto
+-18.786 185.249 -19.286 185.249 QUADTO
+-20.521 185.249 -20.88 184.265 QUADTO
+-20.974 184.265 lineto
+closepath
+-20.974 183.187 M
+-20.974 181.655 lineto
+-21.442 181.655 lineto
+-23.411 181.655 -23.411 182.89 QUADTO
+-23.411 183.312 -23.13 183.593 QUADTO
+-22.849 183.874 -22.427 183.874 QUADTO
+-21.708 183.874 -20.974 183.187 QUADTO
+closepath
+-11.696 185.077 M
+-11.696 183.655 lineto
+-12.478 185.249 -14.149 185.249 QUADTO
+-15.493 185.249 -16.267 184.257 QUADTO
+-17.04 183.265 -17.04 181.53 QUADTO
+-17.04 179.64 -16.173 178.523 QUADTO
+-15.306 177.405 -13.837 177.405 QUADTO
+-12.649 177.405 -11.696 178.327 QUADTO
+-11.696 174.28 lineto
+-9.665 174.28 lineto
+-9.665 185.077 lineto
+-11.696 185.077 lineto
+closepath
+-11.696 179.53 M
+-12.431 178.718 -13.259 178.718 QUADTO
+-14.009 178.718 -14.446 179.437 QUADTO
+-14.884 180.155 -14.884 181.358 QUADTO
+-14.884 183.655 -13.415 183.655 QUADTO
+-12.509 183.655 -11.696 182.499 QUADTO
+-11.696 179.53 lineto
+closepath
+-2.306 185.077 M
+-2.306 178.843 lineto
+-3.353 178.843 lineto
+-3.353 177.577 lineto
+-2.306 177.577 lineto
+-2.306 177.03 lineto
+-2.306 174.108 0.46 174.108 QUADTO
+1.351 174.108 2.304 174.374 QUADTO
+2.304 175.733 lineto
+1.444 175.374 0.757 175.374 QUADTO
+-0.29 175.374 -0.29 176.952 QUADTO
+-0.29 177.577 lineto
+1.616 177.577 lineto
+1.616 178.843 lineto
+-0.29 178.843 lineto
+-0.29 185.077 lineto
+-2.306 185.077 lineto
+closepath
+3.279 185.077 M
+3.279 177.577 lineto
+5.295 177.577 lineto
+5.295 178.983 lineto
+6.092 177.405 7.701 177.405 QUADTO
+7.889 177.405 8.076 177.437 QUADTO
+8.076 179.249 lineto
+7.639 179.093 7.264 179.093 QUADTO
+6.061 179.093 5.295 180.312 QUADTO
+5.295 185.077 lineto
+3.279 185.077 lineto
+closepath
+13.315 184.265 M
+12.315 185.249 11.159 185.249 QUADTO
+10.175 185.249 9.558 184.648 QUADTO
+8.94 184.046 8.94 183.093 QUADTO
+8.94 181.843 9.933 181.171 QUADTO
+10.925 180.499 12.784 180.499 QUADTO
+13.315 180.499 lineto
+13.315 179.812 lineto
+13.315 178.64 11.987 178.64 QUADTO
+10.8 178.64 9.597 179.312 QUADTO
+9.597 177.921 lineto
+10.972 177.405 12.315 177.405 QUADTO
+15.269 177.405 15.269 179.749 QUADTO
+15.269 183.062 lineto
+15.269 183.952 15.831 183.952 QUADTO
+15.925 183.952 16.097 183.921 QUADTO
+16.144 185.062 lineto
+15.503 185.249 15.003 185.249 QUADTO
+13.769 185.249 13.409 184.265 QUADTO
+13.315 184.265 lineto
+closepath
+13.315 183.187 M
+13.315 181.655 lineto
+12.847 181.655 lineto
+10.878 181.655 10.878 182.89 QUADTO
+10.878 183.312 11.159 183.593 QUADTO
+11.44 183.874 11.862 183.874 QUADTO
+12.581 183.874 13.315 183.187 QUADTO
+closepath
+23.405 184.905 M
+22.155 185.249 21.077 185.249 QUADTO
+19.28 185.249 18.241 184.194 QUADTO
+17.202 183.14 17.202 181.312 QUADTO
+17.202 179.483 18.272 178.444 QUADTO
+19.343 177.405 21.233 177.405 QUADTO
+22.155 177.405 23.343 177.687 QUADTO
+23.343 179.155 lineto
+22.108 178.749 21.358 178.749 QUADTO
+20.452 178.749 19.897 179.452 QUADTO
+19.343 180.155 19.343 181.296 QUADTO
+19.343 182.483 19.944 183.194 QUADTO
+20.546 183.905 21.53 183.905 QUADTO
+22.452 183.905 23.405 183.515 QUADTO
+23.405 184.905 lineto
+closepath
+29.2 185.03 M
+28.466 185.249 28.06 185.249 QUADTO
+25.419 185.249 25.419 182.78 QUADTO
+25.419 178.843 lineto
+24.575 178.843 lineto
+24.575 177.577 lineto
+25.419 177.577 lineto
+25.419 176.312 lineto
+27.45 176.077 lineto
+27.45 177.577 lineto
+29.044 177.577 lineto
+29.044 178.843 lineto
+27.45 178.843 lineto
+27.45 182.515 lineto
+27.45 183.905 28.575 183.905 QUADTO
+28.825 183.905 29.2 183.812 QUADTO
+29.2 185.03 lineto
+closepath
+30.999 185.077 M
+30.999 177.577 lineto
+33.015 177.577 lineto
+33.015 185.077 lineto
+30.999 185.077 lineto
+closepath
+30.999 176.312 M
+30.999 174.624 lineto
+33.015 174.624 lineto
+33.015 176.312 lineto
+30.999 176.312 lineto
+closepath
+38.708 185.249 M
+36.942 185.249 35.911 184.187 QUADTO
+34.88 183.124 34.88 181.327 QUADTO
+34.88 179.499 35.919 178.452 QUADTO
+36.958 177.405 38.755 177.405 QUADTO
+40.552 177.405 41.591 178.452 QUADTO
+42.63 179.499 42.63 181.312 QUADTO
+42.63 183.155 41.583 184.202 QUADTO
+40.536 185.249 38.708 185.249 QUADTO
+closepath
+38.739 183.983 M
+40.474 183.983 40.474 181.312 QUADTO
+40.474 180.093 40.013 179.382 QUADTO
+39.552 178.671 38.755 178.671 QUADTO
+37.958 178.671 37.489 179.382 QUADTO
+37.021 180.093 37.021 181.327 QUADTO
+37.021 182.546 37.481 183.265 QUADTO
+37.942 183.983 38.739 183.983 QUADTO
+closepath
+44.493 185.077 M
+44.493 177.577 lineto
+46.509 177.577 lineto
+46.509 178.983 lineto
+47.509 177.405 49.071 177.405 QUADTO
+50.071 177.405 50.657 178.038 QUADTO
+51.243 178.671 51.243 179.765 QUADTO
+51.243 185.077 lineto
+49.212 185.077 lineto
+49.212 180.265 lineto
+49.212 178.999 48.368 178.999 QUADTO
+47.399 178.999 46.509 180.358 QUADTO
+46.509 185.077 lineto
+44.493 185.077 lineto
+closepath
+61.552 174.202 M
+61.552 175.499 lineto
+59.724 177.343 59.724 180.687 QUADTO
+59.724 184.046 61.552 185.874 QUADTO
+61.552 187.187 lineto
+59.88 186.28 58.88 184.507 QUADTO
+57.88 182.733 57.88 180.687 QUADTO
+57.88 178.64 58.864 176.89 QUADTO
+59.849 175.14 61.552 174.202 QUADTO
+closepath
+63.053 185.327 M
+71.006 174.702 lineto
+72.365 174.702 lineto
+64.412 185.327 lineto
+63.053 185.327 lineto
+closepath
+64.771 180.015 M
+63.678 180.015 63.037 179.335 QUADTO
+62.396 178.655 62.396 177.483 QUADTO
+62.396 176.312 63.037 175.632 QUADTO
+63.678 174.952 64.803 174.952 QUADTO
+65.912 174.952 66.561 175.632 QUADTO
+67.209 176.312 67.209 177.483 QUADTO
+67.209 178.671 66.561 179.343 QUADTO
+65.912 180.015 64.771 180.015 QUADTO
+closepath
+64.787 178.999 M
+65.678 178.999 65.678 177.483 QUADTO
+65.678 175.968 64.803 175.968 QUADTO
+63.912 175.968 63.912 177.483 QUADTO
+63.912 178.999 64.787 178.999 QUADTO
+closepath
+70.6 185.077 M
+69.49 185.077 68.85 184.398 QUADTO
+68.209 183.718 68.209 182.546 QUADTO
+68.209 181.358 68.857 180.687 QUADTO
+69.506 180.015 70.615 180.015 QUADTO
+71.74 180.015 72.381 180.687 QUADTO
+73.021 181.358 73.021 182.546 QUADTO
+73.021 183.733 72.381 184.405 QUADTO
+71.74 185.077 70.6 185.077 QUADTO
+closepath
+70.6 184.062 M
+71.506 184.062 71.506 182.546 QUADTO
+71.506 181.03 70.615 181.03 QUADTO
+69.725 181.03 69.725 182.546 QUADTO
+69.725 184.062 70.6 184.062 QUADTO
+closepath
+73.674 174.202 M
+73.674 175.499 lineto
+75.502 177.343 75.502 180.687 QUADTO
+75.502 184.046 73.674 185.874 QUADTO
+73.674 187.187 lineto
+75.346 186.28 76.346 184.507 QUADTO
+77.346 182.733 77.346 180.687 QUADTO
+77.346 178.64 76.361 176.89 QUADTO
+75.377 175.14 73.674 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+65.645 34.247 M
+65.645 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+110.776 34.247 M
+110.776 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+137.176 34.247 M
+137.176 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+155.907 34.247 M
+155.907 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+170.436 34.247 M
+170.436 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+182.307 34.247 M
+182.307 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+192.344 34.247 M
+192.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+201.038 34.247 M
+201.038 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+208.707 34.247 M
+208.707 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+260.699 34.247 M
+260.699 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+287.099 34.247 M
+287.099 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+305.83 34.247 M
+305.83 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+320.359 34.247 M
+320.359 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+332.23 34.247 M
+332.23 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+342.267 34.247 M
+342.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+350.961 34.247 M
+350.961 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+358.63 34.247 M
+358.63 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 296.828 M
+388 296.828 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 267.724 M
+388 267.724 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 238.62 M
+388 238.62 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 209.516 M
+388 209.516 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 180.413 M
+388 180.413 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 151.309 M
+388 151.309 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 122.205 M
+388 122.205 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 93.102 M
+388 93.102 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 63.998 M
+388 63.998 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 34.894 M
+388 34.894 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 74.417 M
+92.045 139.289 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 139.289 M
+110.776 56.518 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 56.518 M
+137.176 136.466 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 136.466 M
+155.907 68.509 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 68.509 M
+182.307 137.63 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 137.63 M
+201.038 57.915 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 57.915 M
+227.439 130.645 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 130.645 M
+246.17 64.696 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 64.696 M
+272.57 123.602 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 123.602 M
+291.301 55.82 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 55.82 M
+317.701 123.37 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 123.37 M
+336.432 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 48.136 M
+352.569 80.121 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 80.121 M
+365.49 102.939 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 227.677 M
+92.045 226.513 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 226.513 M
+110.776 225.436 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 225.436 M
+137.176 223.777 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 223.777 M
+155.907 221.682 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 221.682 M
+182.307 221.565 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 221.565 M
+201.038 218.975 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 218.975 M
+227.439 218.888 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 218.888 M
+246.17 215.948 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 215.948 M
+272.57 213.824 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 213.824 M
+291.301 210.943 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 210.943 M
+317.701 204.103 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 204.103 M
+336.432 203.405 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 203.405 M
+352.569 195.43 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 195.43 M
+365.49 197.788 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+68.645 74.417 M
+68.645 76.074 67.301 77.417 65.645 77.417 curveto
+63.988 77.417 62.645 76.074 62.645 74.417 curveto
+62.645 72.76 63.988 71.417 65.645 71.417 curveto
+67.301 71.417 68.645 72.76 68.645 74.417 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+68.645 74.417 M
+68.645 76.074 67.301 77.417 65.645 77.417 curveto
+63.988 77.417 62.645 76.074 62.645 74.417 curveto
+62.645 72.76 63.988 71.417 65.645 71.417 curveto
+67.301 71.417 68.645 72.76 68.645 74.417 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+95.045 139.289 M
+95.045 140.946 93.702 142.289 92.045 142.289 curveto
+90.388 142.289 89.045 140.946 89.045 139.289 curveto
+89.045 137.632 90.388 136.289 92.045 136.289 curveto
+93.702 136.289 95.045 137.632 95.045 139.289 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+95.045 139.289 M
+95.045 140.946 93.702 142.289 92.045 142.289 curveto
+90.388 142.289 89.045 140.946 89.045 139.289 curveto
+89.045 137.632 90.388 136.289 92.045 136.289 curveto
+93.702 136.289 95.045 137.632 95.045 139.289 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+113.776 56.518 M
+113.776 58.175 112.433 59.518 110.776 59.518 curveto
+109.119 59.518 107.776 58.175 107.776 56.518 curveto
+107.776 54.861 109.119 53.518 110.776 53.518 curveto
+112.433 53.518 113.776 54.861 113.776 56.518 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+113.776 56.518 M
+113.776 58.175 112.433 59.518 110.776 59.518 curveto
+109.119 59.518 107.776 58.175 107.776 56.518 curveto
+107.776 54.861 109.119 53.518 110.776 53.518 curveto
+112.433 53.518 113.776 54.861 113.776 56.518 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+140.176 136.466 M
+140.176 138.123 138.833 139.466 137.176 139.466 curveto
+135.519 139.466 134.176 138.123 134.176 136.466 curveto
+134.176 134.809 135.519 133.466 137.176 133.466 curveto
+138.833 133.466 140.176 134.809 140.176 136.466 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+140.176 136.466 M
+140.176 138.123 138.833 139.466 137.176 139.466 curveto
+135.519 139.466 134.176 138.123 134.176 136.466 curveto
+134.176 134.809 135.519 133.466 137.176 133.466 curveto
+138.833 133.466 140.176 134.809 140.176 136.466 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+158.907 68.509 M
+158.907 70.166 157.564 71.509 155.907 71.509 curveto
+154.25 71.509 152.907 70.166 152.907 68.509 curveto
+152.907 66.852 154.25 65.509 155.907 65.509 curveto
+157.564 65.509 158.907 66.852 158.907 68.509 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+158.907 68.509 M
+158.907 70.166 157.564 71.509 155.907 71.509 curveto
+154.25 71.509 152.907 70.166 152.907 68.509 curveto
+152.907 66.852 154.25 65.509 155.907 65.509 curveto
+157.564 65.509 158.907 66.852 158.907 68.509 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+185.307 137.63 M
+185.307 139.287 183.964 140.63 182.307 140.63 curveto
+180.65 140.63 179.307 139.287 179.307 137.63 curveto
+179.307 135.973 180.65 134.63 182.307 134.63 curveto
+183.964 134.63 185.307 135.973 185.307 137.63 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+185.307 137.63 M
+185.307 139.287 183.964 140.63 182.307 140.63 curveto
+180.65 140.63 179.307 139.287 179.307 137.63 curveto
+179.307 135.973 180.65 134.63 182.307 134.63 curveto
+183.964 134.63 185.307 135.973 185.307 137.63 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+204.038 57.915 M
+204.038 59.572 202.695 60.915 201.038 60.915 curveto
+199.382 60.915 198.038 59.572 198.038 57.915 curveto
+198.038 56.258 199.382 54.915 201.038 54.915 curveto
+202.695 54.915 204.038 56.258 204.038 57.915 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.038 57.915 M
+204.038 59.572 202.695 60.915 201.038 60.915 curveto
+199.382 60.915 198.038 59.572 198.038 57.915 curveto
+198.038 56.258 199.382 54.915 201.038 54.915 curveto
+202.695 54.915 204.038 56.258 204.038 57.915 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+230.439 130.645 M
+230.439 132.302 229.095 133.645 227.439 133.645 curveto
+225.782 133.645 224.439 132.302 224.439 130.645 curveto
+224.439 128.989 225.782 127.645 227.439 127.645 curveto
+229.095 127.645 230.439 128.989 230.439 130.645 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+230.439 130.645 M
+230.439 132.302 229.095 133.645 227.439 133.645 curveto
+225.782 133.645 224.439 132.302 224.439 130.645 curveto
+224.439 128.989 225.782 127.645 227.439 127.645 curveto
+229.095 127.645 230.439 128.989 230.439 130.645 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+249.17 64.696 M
+249.17 66.353 247.827 67.696 246.17 67.696 curveto
+244.513 67.696 243.17 66.353 243.17 64.696 curveto
+243.17 63.04 244.513 61.696 246.17 61.696 curveto
+247.827 61.696 249.17 63.04 249.17 64.696 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+249.17 64.696 M
+249.17 66.353 247.827 67.696 246.17 67.696 curveto
+244.513 67.696 243.17 66.353 243.17 64.696 curveto
+243.17 63.04 244.513 61.696 246.17 61.696 curveto
+247.827 61.696 249.17 63.04 249.17 64.696 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+275.57 123.602 M
+275.57 125.259 274.227 126.602 272.57 126.602 curveto
+270.913 126.602 269.57 125.259 269.57 123.602 curveto
+269.57 121.945 270.913 120.602 272.57 120.602 curveto
+274.227 120.602 275.57 121.945 275.57 123.602 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+275.57 123.602 M
+275.57 125.259 274.227 126.602 272.57 126.602 curveto
+270.913 126.602 269.57 125.259 269.57 123.602 curveto
+269.57 121.945 270.913 120.602 272.57 120.602 curveto
+274.227 120.602 275.57 121.945 275.57 123.602 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+294.301 55.82 M
+294.301 57.477 292.958 58.82 291.301 58.82 curveto
+289.644 58.82 288.301 57.477 288.301 55.82 curveto
+288.301 54.163 289.644 52.82 291.301 52.82 curveto
+292.958 52.82 294.301 54.163 294.301 55.82 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+294.301 55.82 M
+294.301 57.477 292.958 58.82 291.301 58.82 curveto
+289.644 58.82 288.301 57.477 288.301 55.82 curveto
+288.301 54.163 289.644 52.82 291.301 52.82 curveto
+292.958 52.82 294.301 54.163 294.301 55.82 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+320.701 123.37 M
+320.701 125.026 319.358 126.37 317.701 126.37 curveto
+316.044 126.37 314.701 125.026 314.701 123.37 curveto
+314.701 121.713 316.044 120.37 317.701 120.37 curveto
+319.358 120.37 320.701 121.713 320.701 123.37 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.701 123.37 M
+320.701 125.026 319.358 126.37 317.701 126.37 curveto
+316.044 126.37 314.701 125.026 314.701 123.37 curveto
+314.701 121.713 316.044 120.37 317.701 120.37 curveto
+319.358 120.37 320.701 121.713 320.701 123.37 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+339.432 48.136 M
+339.432 49.793 338.089 51.136 336.432 51.136 curveto
+334.775 51.136 333.432 49.793 333.432 48.136 curveto
+333.432 46.48 334.775 45.136 336.432 45.136 curveto
+338.089 45.136 339.432 46.48 339.432 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+339.432 48.136 M
+339.432 49.793 338.089 51.136 336.432 51.136 curveto
+334.775 51.136 333.432 49.793 333.432 48.136 curveto
+333.432 46.48 334.775 45.136 336.432 45.136 curveto
+338.089 45.136 339.432 46.48 339.432 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+355.569 80.121 M
+355.569 81.778 354.226 83.121 352.569 83.121 curveto
+350.912 83.121 349.569 81.778 349.569 80.121 curveto
+349.569 78.465 350.912 77.121 352.569 77.121 curveto
+354.226 77.121 355.569 78.465 355.569 80.121 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+355.569 80.121 M
+355.569 81.778 354.226 83.121 352.569 83.121 curveto
+350.912 83.121 349.569 81.778 349.569 80.121 curveto
+349.569 78.465 350.912 77.121 352.569 77.121 curveto
+354.226 77.121 355.569 78.465 355.569 80.121 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+368.49 102.939 M
+368.49 104.596 367.147 105.939 365.49 105.939 curveto
+363.833 105.939 362.49 104.596 362.49 102.939 curveto
+362.49 101.282 363.833 99.939 365.49 99.939 curveto
+367.147 99.939 368.49 101.282 368.49 102.939 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+368.49 102.939 M
+368.49 104.596 367.147 105.939 365.49 105.939 curveto
+363.833 105.939 362.49 104.596 362.49 102.939 curveto
+362.49 101.282 363.833 99.939 365.49 99.939 curveto
+367.147 99.939 368.49 101.282 368.49 102.939 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+62.645 224.677 M
+68.645 224.677 lineto
+68.645 230.677 lineto
+62.645 230.677 lineto
+62.645 224.677 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+62.645 224.677 M
+68.645 224.677 lineto
+68.645 230.677 lineto
+62.645 230.677 lineto
+62.645 224.677 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+89.045 223.513 M
+95.045 223.513 lineto
+95.045 229.513 lineto
+89.045 229.513 lineto
+89.045 223.513 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+89.045 223.513 M
+95.045 223.513 lineto
+95.045 229.513 lineto
+89.045 229.513 lineto
+89.045 223.513 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+107.776 222.436 M
+113.776 222.436 lineto
+113.776 228.436 lineto
+107.776 228.436 lineto
+107.776 222.436 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+107.776 222.436 M
+113.776 222.436 lineto
+113.776 228.436 lineto
+107.776 228.436 lineto
+107.776 222.436 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+134.176 220.777 M
+140.176 220.777 lineto
+140.176 226.777 lineto
+134.176 226.777 lineto
+134.176 220.777 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.176 220.777 M
+140.176 220.777 lineto
+140.176 226.777 lineto
+134.176 226.777 lineto
+134.176 220.777 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+152.907 218.682 M
+158.907 218.682 lineto
+158.907 224.682 lineto
+152.907 224.682 lineto
+152.907 218.682 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+152.907 218.682 M
+158.907 218.682 lineto
+158.907 224.682 lineto
+152.907 224.682 lineto
+152.907 218.682 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+179.307 218.565 M
+185.307 218.565 lineto
+185.307 224.565 lineto
+179.307 224.565 lineto
+179.307 218.565 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+179.307 218.565 M
+185.307 218.565 lineto
+185.307 224.565 lineto
+179.307 224.565 lineto
+179.307 218.565 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+198.038 215.975 M
+204.038 215.975 lineto
+204.038 221.975 lineto
+198.038 221.975 lineto
+198.038 215.975 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+198.038 215.975 M
+204.038 215.975 lineto
+204.038 221.975 lineto
+198.038 221.975 lineto
+198.038 215.975 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+224.439 215.888 M
+230.439 215.888 lineto
+230.439 221.888 lineto
+224.439 221.888 lineto
+224.439 215.888 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+224.439 215.888 M
+230.439 215.888 lineto
+230.439 221.888 lineto
+224.439 221.888 lineto
+224.439 215.888 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+243.17 212.948 M
+249.17 212.948 lineto
+249.17 218.948 lineto
+243.17 218.948 lineto
+243.17 212.948 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+243.17 212.948 M
+249.17 212.948 lineto
+249.17 218.948 lineto
+243.17 218.948 lineto
+243.17 212.948 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+269.57 210.824 M
+275.57 210.824 lineto
+275.57 216.824 lineto
+269.57 216.824 lineto
+269.57 210.824 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+269.57 210.824 M
+275.57 210.824 lineto
+275.57 216.824 lineto
+269.57 216.824 lineto
+269.57 210.824 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+288.301 207.943 M
+294.301 207.943 lineto
+294.301 213.943 lineto
+288.301 213.943 lineto
+288.301 207.943 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+288.301 207.943 M
+294.301 207.943 lineto
+294.301 213.943 lineto
+288.301 213.943 lineto
+288.301 207.943 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+314.701 201.103 M
+320.701 201.103 lineto
+320.701 207.103 lineto
+314.701 207.103 lineto
+314.701 201.103 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+314.701 201.103 M
+320.701 201.103 lineto
+320.701 207.103 lineto
+314.701 207.103 lineto
+314.701 201.103 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+333.432 200.405 M
+339.432 200.405 lineto
+339.432 206.405 lineto
+333.432 206.405 lineto
+333.432 200.405 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+333.432 200.405 M
+339.432 200.405 lineto
+339.432 206.405 lineto
+333.432 206.405 lineto
+333.432 200.405 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+349.569 192.43 M
+355.569 192.43 lineto
+355.569 198.43 lineto
+349.569 198.43 lineto
+349.569 192.43 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+349.569 192.43 M
+355.569 192.43 lineto
+355.569 198.43 lineto
+349.569 198.43 lineto
+349.569 192.43 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+362.49 194.788 M
+368.49 194.788 lineto
+368.49 200.788 lineto
+362.49 200.788 lineto
+362.49 194.788 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+362.49 194.788 M
+368.49 194.788 lineto
+368.49 200.788 lineto
+362.49 200.788 lineto
+362.49 194.788 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc02kp01.png b/sim/gobs/wiki/dc02kp01.png
new file mode 100644
index 0000000..19b2eab
Binary files /dev/null and b/sim/gobs/wiki/dc02kp01.png differ
diff --git a/sim/gobs/wiki/dc02kp02.eps b/sim/gobs/wiki/dc02kp02.eps
new file mode 100644
index 0000000..383c36b
--- /dev/null
+++ b/sim/gobs/wiki/dc02kp02.eps
@@ -0,0 +1,5002 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-21T17:58:11
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+58.148 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+59.869 345.481 M
+59.869 344.606 lineto
+61.604 344.606 lineto
+61.604 337.762 lineto
+59.869 338.2 lineto
+59.869 337.309 lineto
+62.76 336.59 lineto
+62.76 344.606 lineto
+64.494 344.606 lineto
+64.494 345.481 lineto
+59.869 345.481 lineto
+closepath
+69.41 345.7 M
+68.066 345.7 67.238 344.434 QUADTO
+66.41 343.168 66.41 341.137 QUADTO
+66.41 339.09 67.246 337.84 QUADTO
+68.082 336.59 69.441 336.59 QUADTO
+70.801 336.59 71.637 337.84 QUADTO
+72.473 339.09 72.473 341.122 QUADTO
+72.473 343.2 71.637 344.45 QUADTO
+70.801 345.7 69.41 345.7 QUADTO
+closepath
+69.426 344.825 M
+71.254 344.825 71.254 341.106 QUADTO
+71.254 337.465 69.441 337.465 QUADTO
+67.645 337.465 67.645 341.137 QUADTO
+67.645 344.825 69.426 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.645 331.931 M
+65.645 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+104.188 345.481 M
+104.188 344.465 lineto
+104.688 343.293 106.219 341.903 QUADTO
+106.891 341.309 lineto
+108.157 340.153 108.157 339.012 QUADTO
+108.157 338.293 107.727 337.879 QUADTO
+107.297 337.465 106.532 337.465 QUADTO
+105.625 337.465 104.407 338.153 QUADTO
+104.407 337.137 lineto
+105.563 336.59 106.688 336.59 QUADTO
+107.907 336.59 108.649 337.247 QUADTO
+109.391 337.903 109.391 338.981 QUADTO
+109.391 339.762 109.016 340.372 QUADTO
+108.641 340.981 107.625 341.84 QUADTO
+107.188 342.215 lineto
+105.797 343.387 105.579 344.465 QUADTO
+109.344 344.465 lineto
+109.344 345.481 lineto
+104.188 345.481 lineto
+closepath
+114.541 345.7 M
+113.198 345.7 112.37 344.434 QUADTO
+111.541 343.168 111.541 341.137 QUADTO
+111.541 339.09 112.377 337.84 QUADTO
+113.213 336.59 114.573 336.59 QUADTO
+115.932 336.59 116.768 337.84 QUADTO
+117.604 339.09 117.604 341.122 QUADTO
+117.604 343.2 116.768 344.45 QUADTO
+115.932 345.7 114.541 345.7 QUADTO
+closepath
+114.557 344.825 M
+116.385 344.825 116.385 341.106 QUADTO
+116.385 337.465 114.573 337.465 QUADTO
+112.776 337.465 112.776 341.137 QUADTO
+112.776 344.825 114.557 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+110.776 331.931 M
+110.776 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+130.807 345.418 M
+130.807 344.34 lineto
+132.057 344.825 132.76 344.825 QUADTO
+133.588 344.825 134.112 344.34 QUADTO
+134.635 343.856 134.635 343.09 QUADTO
+134.635 341.262 132.072 341.262 QUADTO
+131.604 341.262 lineto
+131.604 340.481 lineto
+132.01 340.481 lineto
+134.416 340.481 134.416 338.793 QUADTO
+134.416 337.465 132.838 337.465 QUADTO
+131.963 337.465 130.932 337.95 QUADTO
+130.932 336.934 lineto
+131.947 336.59 132.916 336.59 QUADTO
+135.572 336.59 135.572 338.606 QUADTO
+135.572 340.137 133.76 340.778 QUADTO
+135.869 341.262 135.869 343.075 QUADTO
+135.869 344.309 135.057 345.004 QUADTO
+134.244 345.7 132.838 345.7 QUADTO
+132.026 345.7 130.807 345.418 QUADTO
+closepath
+140.942 345.7 M
+139.598 345.7 138.77 344.434 QUADTO
+137.942 343.168 137.942 341.137 QUADTO
+137.942 339.09 138.778 337.84 QUADTO
+139.613 336.59 140.973 336.59 QUADTO
+142.332 336.59 143.168 337.84 QUADTO
+144.004 339.09 144.004 341.122 QUADTO
+144.004 343.2 143.168 344.45 QUADTO
+142.332 345.7 140.942 345.7 QUADTO
+closepath
+140.957 344.825 M
+142.785 344.825 142.785 341.106 QUADTO
+142.785 337.465 140.973 337.465 QUADTO
+139.176 337.465 139.176 341.137 QUADTO
+139.176 344.825 140.957 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+137.176 331.931 M
+137.176 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+155.907 331.931 M
+155.907 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+170.436 331.931 M
+170.436 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+182.307 331.931 M
+182.307 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.344 331.931 M
+192.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+201.038 331.931 M
+201.038 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+208.707 331.931 M
+208.707 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+205.998 345.481 M
+205.998 344.606 lineto
+207.732 344.606 lineto
+207.732 337.762 lineto
+205.998 338.2 lineto
+205.998 337.309 lineto
+208.889 336.59 lineto
+208.889 344.606 lineto
+210.623 344.606 lineto
+210.623 345.481 lineto
+205.998 345.481 lineto
+closepath
+215.539 345.7 M
+214.195 345.7 213.367 344.434 QUADTO
+212.539 343.168 212.539 341.137 QUADTO
+212.539 339.09 213.375 337.84 QUADTO
+214.211 336.59 215.57 336.59 QUADTO
+216.93 336.59 217.766 337.84 QUADTO
+218.602 339.09 218.602 341.122 QUADTO
+218.602 343.2 217.766 344.45 QUADTO
+216.93 345.7 215.539 345.7 QUADTO
+closepath
+215.555 344.825 M
+217.383 344.825 217.383 341.106 QUADTO
+217.383 337.465 215.57 337.465 QUADTO
+213.773 337.465 213.773 341.137 QUADTO
+213.773 344.825 215.555 344.825 QUADTO
+closepath
+223.127 345.7 M
+221.783 345.7 220.955 344.434 QUADTO
+220.127 343.168 220.127 341.137 QUADTO
+220.127 339.09 220.963 337.84 QUADTO
+221.799 336.59 223.158 336.59 QUADTO
+224.518 336.59 225.354 337.84 QUADTO
+226.189 339.09 226.189 341.122 QUADTO
+226.189 343.2 225.354 344.45 QUADTO
+224.518 345.7 223.127 345.7 QUADTO
+closepath
+223.143 344.825 M
+224.971 344.825 224.971 341.106 QUADTO
+224.971 337.465 223.158 337.465 QUADTO
+221.361 337.465 221.361 341.137 QUADTO
+221.361 344.825 223.143 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+250.317 345.481 M
+250.317 344.465 lineto
+250.817 343.293 252.348 341.903 QUADTO
+253.02 341.309 lineto
+254.286 340.153 254.286 339.012 QUADTO
+254.286 338.293 253.856 337.879 QUADTO
+253.426 337.465 252.661 337.465 QUADTO
+251.754 337.465 250.536 338.153 QUADTO
+250.536 337.137 lineto
+251.692 336.59 252.817 336.59 QUADTO
+254.036 336.59 254.778 337.247 QUADTO
+255.52 337.903 255.52 338.981 QUADTO
+255.52 339.762 255.145 340.372 QUADTO
+254.77 340.981 253.754 341.84 QUADTO
+253.317 342.215 lineto
+251.926 343.387 251.707 344.465 QUADTO
+255.473 344.465 lineto
+255.473 345.481 lineto
+250.317 345.481 lineto
+closepath
+260.67 345.7 M
+259.327 345.7 258.499 344.434 QUADTO
+257.67 343.168 257.67 341.137 QUADTO
+257.67 339.09 258.506 337.84 QUADTO
+259.342 336.59 260.702 336.59 QUADTO
+262.061 336.59 262.897 337.84 QUADTO
+263.733 339.09 263.733 341.122 QUADTO
+263.733 343.2 262.897 344.45 QUADTO
+262.061 345.7 260.67 345.7 QUADTO
+closepath
+260.686 344.825 M
+262.514 344.825 262.514 341.106 QUADTO
+262.514 337.465 260.702 337.465 QUADTO
+258.905 337.465 258.905 341.137 QUADTO
+258.905 344.825 260.686 344.825 QUADTO
+closepath
+268.258 345.7 M
+266.915 345.7 266.086 344.434 QUADTO
+265.258 343.168 265.258 341.137 QUADTO
+265.258 339.09 266.094 337.84 QUADTO
+266.93 336.59 268.29 336.59 QUADTO
+269.649 336.59 270.485 337.84 QUADTO
+271.321 339.09 271.321 341.122 QUADTO
+271.321 343.2 270.485 344.45 QUADTO
+269.649 345.7 268.258 345.7 QUADTO
+closepath
+268.274 344.825 M
+270.102 344.825 270.102 341.106 QUADTO
+270.102 337.465 268.29 337.465 QUADTO
+266.493 337.465 266.493 341.137 QUADTO
+266.493 344.825 268.274 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+260.699 331.931 M
+260.699 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+287.099 331.931 M
+287.099 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+305.83 331.931 M
+305.83 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.359 331.931 M
+320.359 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+332.23 331.931 M
+332.23 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+342.267 331.931 M
+342.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.961 331.931 M
+350.961 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+358.63 331.931 M
+358.63 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.127 345.481 M
+352.127 344.606 lineto
+353.861 344.606 lineto
+353.861 337.762 lineto
+352.127 338.2 lineto
+352.127 337.309 lineto
+355.018 336.59 lineto
+355.018 344.606 lineto
+356.752 344.606 lineto
+356.752 345.481 lineto
+352.127 345.481 lineto
+closepath
+361.668 345.7 M
+360.324 345.7 359.496 344.434 QUADTO
+358.668 343.168 358.668 341.137 QUADTO
+358.668 339.09 359.504 337.84 QUADTO
+360.34 336.59 361.699 336.59 QUADTO
+363.059 336.59 363.895 337.84 QUADTO
+364.73 339.09 364.73 341.122 QUADTO
+364.73 343.2 363.895 344.45 QUADTO
+363.059 345.7 361.668 345.7 QUADTO
+closepath
+361.684 344.825 M
+363.512 344.825 363.512 341.106 QUADTO
+363.512 337.465 361.699 337.465 QUADTO
+359.902 337.465 359.902 341.137 QUADTO
+359.902 344.825 361.684 344.825 QUADTO
+closepath
+369.256 345.7 M
+367.912 345.7 367.084 344.434 QUADTO
+366.256 343.168 366.256 341.137 QUADTO
+366.256 339.09 367.092 337.84 QUADTO
+367.928 336.59 369.287 336.59 QUADTO
+370.647 336.59 371.482 337.84 QUADTO
+372.318 339.09 372.318 341.122 QUADTO
+372.318 343.2 371.482 344.45 QUADTO
+370.647 345.7 369.256 345.7 QUADTO
+closepath
+369.272 344.825 M
+371.1 344.825 371.1 341.106 QUADTO
+371.1 337.465 369.287 337.465 QUADTO
+367.49 337.465 367.49 341.137 QUADTO
+367.49 344.825 369.272 344.825 QUADTO
+closepath
+376.844 345.7 M
+375.5 345.7 374.672 344.434 QUADTO
+373.844 343.168 373.844 341.137 QUADTO
+373.844 339.09 374.68 337.84 QUADTO
+375.516 336.59 376.875 336.59 QUADTO
+378.234 336.59 379.07 337.84 QUADTO
+379.906 339.09 379.906 341.122 QUADTO
+379.906 343.2 379.07 344.45 QUADTO
+378.234 345.7 376.844 345.7 QUADTO
+closepath
+376.859 344.825 M
+378.688 344.825 378.688 341.106 QUADTO
+378.688 337.465 376.875 337.465 QUADTO
+375.078 337.465 375.078 341.137 QUADTO
+375.078 344.825 376.859 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+202.574 364.954 M
+202.574 357.454 lineto
+204.59 357.454 lineto
+204.59 358.86 lineto
+205.59 357.282 207.152 357.282 QUADTO
+208.152 357.282 208.738 357.915 QUADTO
+209.324 358.548 209.324 359.641 QUADTO
+209.324 364.954 lineto
+207.293 364.954 lineto
+207.293 360.141 lineto
+207.293 358.876 206.449 358.876 QUADTO
+205.48 358.876 204.59 360.235 QUADTO
+204.59 364.954 lineto
+202.574 364.954 lineto
+closepath
+214.925 365.126 M
+213.159 365.126 212.128 364.063 QUADTO
+211.097 363.001 211.097 361.204 QUADTO
+211.097 359.376 212.136 358.329 QUADTO
+213.175 357.282 214.972 357.282 QUADTO
+216.769 357.282 217.808 358.329 QUADTO
+218.847 359.376 218.847 361.188 QUADTO
+218.847 363.032 217.8 364.079 QUADTO
+216.753 365.126 214.925 365.126 QUADTO
+closepath
+214.956 363.86 M
+216.69 363.86 216.69 361.188 QUADTO
+216.69 359.97 216.229 359.259 QUADTO
+215.769 358.548 214.972 358.548 QUADTO
+214.175 358.548 213.706 359.259 QUADTO
+213.237 359.97 213.237 361.204 QUADTO
+213.237 362.423 213.698 363.141 QUADTO
+214.159 363.86 214.956 363.86 QUADTO
+closepath
+225.429 364.954 M
+225.429 363.532 lineto
+224.647 365.126 222.976 365.126 QUADTO
+221.632 365.126 220.858 364.134 QUADTO
+220.085 363.141 220.085 361.407 QUADTO
+220.085 359.516 220.952 358.399 QUADTO
+221.819 357.282 223.288 357.282 QUADTO
+224.476 357.282 225.429 358.204 QUADTO
+225.429 354.157 lineto
+227.46 354.157 lineto
+227.46 364.954 lineto
+225.429 364.954 lineto
+closepath
+225.429 359.407 M
+224.694 358.595 223.866 358.595 QUADTO
+223.116 358.595 222.679 359.313 QUADTO
+222.241 360.032 222.241 361.235 QUADTO
+222.241 363.532 223.71 363.532 QUADTO
+224.616 363.532 225.429 362.376 QUADTO
+225.429 359.407 lineto
+closepath
+236.096 364.704 M
+234.658 365.126 233.361 365.126 QUADTO
+231.486 365.126 230.4 364.055 QUADTO
+229.314 362.985 229.314 361.141 QUADTO
+229.314 359.407 230.307 358.345 QUADTO
+231.299 357.282 232.939 357.282 QUADTO
+234.58 357.282 235.338 358.321 QUADTO
+236.096 359.36 236.096 361.61 QUADTO
+231.439 361.61 lineto
+231.643 363.751 233.799 363.751 QUADTO
+234.814 363.751 236.096 363.282 QUADTO
+236.096 364.704 lineto
+closepath
+231.408 360.47 M
+234.111 360.47 lineto
+234.111 358.548 232.877 358.548 QUADTO
+231.611 358.548 231.408 360.47 QUADTO
+closepath
+237.986 364.72 M
+237.986 363.235 lineto
+239.502 363.86 240.564 363.86 QUADTO
+241.799 363.86 241.799 363.016 QUADTO
+241.799 362.47 240.783 362.048 QUADTO
+240.096 361.782 lineto
+238.986 361.329 238.502 360.813 QUADTO
+238.018 360.298 238.018 359.532 QUADTO
+238.018 358.454 238.838 357.868 QUADTO
+239.658 357.282 241.111 357.282 QUADTO
+242.033 357.282 243.299 357.548 QUADTO
+243.299 358.97 lineto
+242.08 358.548 241.283 358.548 QUADTO
+240.018 358.548 240.018 359.313 QUADTO
+240.018 359.829 240.955 360.188 QUADTO
+241.533 360.407 lineto
+242.861 360.907 243.377 361.423 QUADTO
+243.893 361.938 243.893 362.751 QUADTO
+243.893 363.798 243.01 364.462 QUADTO
+242.127 365.126 240.721 365.126 QUADTO
+239.377 365.126 237.986 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+54.148 34.247 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+44.326 330.426 M
+42.982 330.426 42.154 329.16 QUADTO
+41.326 327.894 41.326 325.863 QUADTO
+41.326 323.816 42.162 322.566 QUADTO
+42.998 321.316 44.357 321.316 QUADTO
+45.717 321.316 46.553 322.566 QUADTO
+47.389 323.816 47.389 325.848 QUADTO
+47.389 327.926 46.553 329.176 QUADTO
+45.717 330.426 44.326 330.426 QUADTO
+closepath
+44.342 329.551 M
+46.17 329.551 46.17 325.832 QUADTO
+46.17 322.191 44.357 322.191 QUADTO
+42.561 322.191 42.561 325.863 QUADTO
+42.561 329.551 44.342 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 325.931 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+42.014 301.921 M
+42.014 300.889 lineto
+42.889 301.233 43.654 301.233 QUADTO
+44.514 301.233 45.006 300.733 QUADTO
+45.498 300.233 45.498 299.343 QUADTO
+45.498 297.389 42.811 297.389 QUADTO
+42.498 297.389 42.17 297.436 QUADTO
+42.17 293.218 lineto
+46.561 293.218 lineto
+46.561 294.218 lineto
+43.186 294.218 lineto
+43.186 296.514 lineto
+44.857 296.514 45.795 297.28 QUADTO
+46.732 298.046 46.732 299.405 QUADTO
+46.732 300.671 45.873 301.389 QUADTO
+45.014 302.108 43.514 302.108 QUADTO
+42.857 302.108 42.014 301.921 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 297.614 M
+54.148 297.614 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 273.572 M
+34.785 272.697 lineto
+36.52 272.697 lineto
+36.52 265.853 lineto
+34.785 266.291 lineto
+34.785 265.4 lineto
+37.676 264.681 lineto
+37.676 272.697 lineto
+39.41 272.697 lineto
+39.41 273.572 lineto
+34.785 273.572 lineto
+closepath
+44.326 273.791 M
+42.982 273.791 42.154 272.525 QUADTO
+41.326 271.259 41.326 269.228 QUADTO
+41.326 267.181 42.162 265.931 QUADTO
+42.998 264.681 44.357 264.681 QUADTO
+45.717 264.681 46.553 265.931 QUADTO
+47.389 267.181 47.389 269.213 QUADTO
+47.389 271.291 46.553 272.541 QUADTO
+45.717 273.791 44.326 273.791 QUADTO
+closepath
+44.342 272.916 M
+46.17 272.916 46.17 269.197 QUADTO
+46.17 265.556 44.357 265.556 QUADTO
+42.561 265.556 42.561 269.228 QUADTO
+42.561 272.916 44.342 272.916 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 269.296 M
+54.148 269.296 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 245.254 M
+34.785 244.379 lineto
+36.52 244.379 lineto
+36.52 237.536 lineto
+34.785 237.973 lineto
+34.785 237.083 lineto
+37.676 236.364 lineto
+37.676 244.379 lineto
+39.41 244.379 lineto
+39.41 245.254 lineto
+34.785 245.254 lineto
+closepath
+42.014 245.286 M
+42.014 244.254 lineto
+42.889 244.598 43.654 244.598 QUADTO
+44.514 244.598 45.006 244.098 QUADTO
+45.498 243.598 45.498 242.708 QUADTO
+45.498 240.754 42.811 240.754 QUADTO
+42.498 240.754 42.17 240.801 QUADTO
+42.17 236.583 lineto
+46.561 236.583 lineto
+46.561 237.583 lineto
+43.186 237.583 lineto
+43.186 239.879 lineto
+44.857 239.879 45.795 240.645 QUADTO
+46.732 241.411 46.732 242.77 QUADTO
+46.732 244.036 45.873 244.754 QUADTO
+45.014 245.473 43.514 245.473 QUADTO
+42.857 245.473 42.014 245.286 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 240.979 M
+54.148 240.979 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 216.937 M
+33.973 215.921 lineto
+34.473 214.749 36.004 213.359 QUADTO
+36.676 212.765 lineto
+37.941 211.609 37.941 210.468 QUADTO
+37.941 209.749 37.512 209.335 QUADTO
+37.082 208.921 36.316 208.921 QUADTO
+35.41 208.921 34.191 209.609 QUADTO
+34.191 208.593 lineto
+35.348 208.046 36.473 208.046 QUADTO
+37.691 208.046 38.434 208.702 QUADTO
+39.176 209.359 39.176 210.437 QUADTO
+39.176 211.218 38.801 211.827 QUADTO
+38.426 212.437 37.41 213.296 QUADTO
+36.973 213.671 lineto
+35.582 214.843 35.363 215.921 QUADTO
+39.129 215.921 lineto
+39.129 216.937 lineto
+33.973 216.937 lineto
+closepath
+44.326 217.156 M
+42.982 217.156 42.154 215.89 QUADTO
+41.326 214.624 41.326 212.593 QUADTO
+41.326 210.546 42.162 209.296 QUADTO
+42.998 208.046 44.357 208.046 QUADTO
+45.717 208.046 46.553 209.296 QUADTO
+47.389 210.546 47.389 212.577 QUADTO
+47.389 214.656 46.553 215.906 QUADTO
+45.717 217.156 44.326 217.156 QUADTO
+closepath
+44.342 216.281 M
+46.17 216.281 46.17 212.562 QUADTO
+46.17 208.921 44.357 208.921 QUADTO
+42.561 208.921 42.561 212.593 QUADTO
+42.561 216.281 44.342 216.281 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 212.661 M
+54.148 212.661 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 188.619 M
+33.973 187.604 lineto
+34.473 186.432 36.004 185.041 QUADTO
+36.676 184.447 lineto
+37.941 183.291 37.941 182.151 QUADTO
+37.941 181.432 37.512 181.018 QUADTO
+37.082 180.604 36.316 180.604 QUADTO
+35.41 180.604 34.191 181.291 QUADTO
+34.191 180.276 lineto
+35.348 179.729 36.473 179.729 QUADTO
+37.691 179.729 38.434 180.385 QUADTO
+39.176 181.041 39.176 182.119 QUADTO
+39.176 182.901 38.801 183.51 QUADTO
+38.426 184.119 37.41 184.979 QUADTO
+36.973 185.354 lineto
+35.582 186.526 35.363 187.604 QUADTO
+39.129 187.604 lineto
+39.129 188.619 lineto
+33.973 188.619 lineto
+closepath
+42.014 188.651 M
+42.014 187.619 lineto
+42.889 187.963 43.654 187.963 QUADTO
+44.514 187.963 45.006 187.463 QUADTO
+45.498 186.963 45.498 186.072 QUADTO
+45.498 184.119 42.811 184.119 QUADTO
+42.498 184.119 42.17 184.166 QUADTO
+42.17 179.947 lineto
+46.561 179.947 lineto
+46.561 180.947 lineto
+43.186 180.947 lineto
+43.186 183.244 lineto
+44.857 183.244 45.795 184.01 QUADTO
+46.732 184.776 46.732 186.135 QUADTO
+46.732 187.401 45.873 188.119 QUADTO
+45.014 188.838 43.514 188.838 QUADTO
+42.857 188.838 42.014 188.651 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 184.344 M
+54.148 184.344 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 160.239 M
+34.191 159.161 lineto
+35.441 159.646 36.145 159.646 QUADTO
+36.973 159.646 37.496 159.161 QUADTO
+38.02 158.677 38.02 157.911 QUADTO
+38.02 156.083 35.457 156.083 QUADTO
+34.988 156.083 lineto
+34.988 155.302 lineto
+35.395 155.302 lineto
+37.801 155.302 37.801 153.614 QUADTO
+37.801 152.286 36.223 152.286 QUADTO
+35.348 152.286 34.316 152.771 QUADTO
+34.316 151.755 lineto
+35.332 151.411 36.301 151.411 QUADTO
+38.957 151.411 38.957 153.427 QUADTO
+38.957 154.958 37.145 155.599 QUADTO
+39.254 156.083 39.254 157.896 QUADTO
+39.254 159.13 38.441 159.825 QUADTO
+37.629 160.521 36.223 160.521 QUADTO
+35.41 160.521 34.191 160.239 QUADTO
+closepath
+44.326 160.521 M
+42.982 160.521 42.154 159.255 QUADTO
+41.326 157.989 41.326 155.958 QUADTO
+41.326 153.911 42.162 152.661 QUADTO
+42.998 151.411 44.357 151.411 QUADTO
+45.717 151.411 46.553 152.661 QUADTO
+47.389 153.911 47.389 155.942 QUADTO
+47.389 158.021 46.553 159.271 QUADTO
+45.717 160.521 44.326 160.521 QUADTO
+closepath
+44.342 159.646 M
+46.17 159.646 46.17 155.927 QUADTO
+46.17 152.286 44.357 152.286 QUADTO
+42.561 152.286 42.561 155.958 QUADTO
+42.561 159.646 44.342 159.646 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 156.026 M
+54.148 156.026 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 131.922 M
+34.191 130.844 lineto
+35.441 131.328 36.145 131.328 QUADTO
+36.973 131.328 37.496 130.844 QUADTO
+38.02 130.359 38.02 129.594 QUADTO
+38.02 127.766 35.457 127.766 QUADTO
+34.988 127.766 lineto
+34.988 126.984 lineto
+35.395 126.984 lineto
+37.801 126.984 37.801 125.297 QUADTO
+37.801 123.969 36.223 123.969 QUADTO
+35.348 123.969 34.316 124.453 QUADTO
+34.316 123.437 lineto
+35.332 123.094 36.301 123.094 QUADTO
+38.957 123.094 38.957 125.109 QUADTO
+38.957 126.641 37.145 127.281 QUADTO
+39.254 127.766 39.254 129.578 QUADTO
+39.254 130.812 38.441 131.508 QUADTO
+37.629 132.203 36.223 132.203 QUADTO
+35.41 132.203 34.191 131.922 QUADTO
+closepath
+42.014 132.016 M
+42.014 130.984 lineto
+42.889 131.328 43.654 131.328 QUADTO
+44.514 131.328 45.006 130.828 QUADTO
+45.498 130.328 45.498 129.437 QUADTO
+45.498 127.484 42.811 127.484 QUADTO
+42.498 127.484 42.17 127.531 QUADTO
+42.17 123.312 lineto
+46.561 123.312 lineto
+46.561 124.312 lineto
+43.186 124.312 lineto
+43.186 126.609 lineto
+44.857 126.609 45.795 127.375 QUADTO
+46.732 128.141 46.732 129.5 QUADTO
+46.732 130.766 45.873 131.484 QUADTO
+45.014 132.203 43.514 132.203 QUADTO
+42.857 132.203 42.014 132.016 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 127.709 M
+54.148 127.709 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 103.667 M
+37.488 101.214 lineto
+33.582 101.214 lineto
+33.582 100.339 lineto
+37.488 94.995 lineto
+38.582 94.995 lineto
+38.582 100.261 lineto
+39.738 100.261 lineto
+39.738 101.214 lineto
+38.582 101.214 lineto
+38.582 103.667 lineto
+37.488 103.667 lineto
+closepath
+34.723 100.261 M
+37.566 100.261 lineto
+37.566 96.417 lineto
+34.723 100.261 lineto
+closepath
+44.326 103.886 M
+42.982 103.886 42.154 102.62 QUADTO
+41.326 101.354 41.326 99.323 QUADTO
+41.326 97.276 42.162 96.026 QUADTO
+42.998 94.776 44.357 94.776 QUADTO
+45.717 94.776 46.553 96.026 QUADTO
+47.389 97.276 47.389 99.307 QUADTO
+47.389 101.386 46.553 102.636 QUADTO
+45.717 103.886 44.326 103.886 QUADTO
+closepath
+44.342 103.011 M
+46.17 103.011 46.17 99.292 QUADTO
+46.17 95.651 44.357 95.651 QUADTO
+42.561 95.651 42.561 99.323 QUADTO
+42.561 103.011 44.342 103.011 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 99.391 M
+54.148 99.391 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 75.349 M
+37.488 72.896 lineto
+33.582 72.896 lineto
+33.582 72.021 lineto
+37.488 66.677 lineto
+38.582 66.677 lineto
+38.582 71.943 lineto
+39.738 71.943 lineto
+39.738 72.896 lineto
+38.582 72.896 lineto
+38.582 75.349 lineto
+37.488 75.349 lineto
+closepath
+34.723 71.943 M
+37.566 71.943 lineto
+37.566 68.099 lineto
+34.723 71.943 lineto
+closepath
+42.014 75.381 M
+42.014 74.349 lineto
+42.889 74.693 43.654 74.693 QUADTO
+44.514 74.693 45.006 74.193 QUADTO
+45.498 73.693 45.498 72.802 QUADTO
+45.498 70.849 42.811 70.849 QUADTO
+42.498 70.849 42.17 70.896 QUADTO
+42.17 66.677 lineto
+46.561 66.677 lineto
+46.561 67.677 lineto
+43.186 67.677 lineto
+43.186 69.974 lineto
+44.857 69.974 45.795 70.74 QUADTO
+46.732 71.506 46.732 72.865 QUADTO
+46.732 74.131 45.873 74.849 QUADTO
+45.014 75.568 43.514 75.568 QUADTO
+42.857 75.568 42.014 75.381 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 71.074 M
+54.148 71.074 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.426 47.063 M
+34.426 46.032 lineto
+35.301 46.375 36.066 46.375 QUADTO
+36.926 46.375 37.418 45.875 QUADTO
+37.91 45.375 37.91 44.485 QUADTO
+37.91 42.532 35.223 42.532 QUADTO
+34.91 42.532 34.582 42.579 QUADTO
+34.582 38.36 lineto
+38.973 38.36 lineto
+38.973 39.36 lineto
+35.598 39.36 lineto
+35.598 41.657 lineto
+37.27 41.657 38.207 42.422 QUADTO
+39.145 43.188 39.145 44.547 QUADTO
+39.145 45.813 38.285 46.532 QUADTO
+37.426 47.25 35.926 47.25 QUADTO
+35.27 47.25 34.426 47.063 QUADTO
+closepath
+44.326 47.25 M
+42.982 47.25 42.154 45.985 QUADTO
+41.326 44.719 41.326 42.688 QUADTO
+41.326 40.641 42.162 39.391 QUADTO
+42.998 38.141 44.357 38.141 QUADTO
+45.717 38.141 46.553 39.391 QUADTO
+47.389 40.641 47.389 42.672 QUADTO
+47.389 44.75 46.553 46 QUADTO
+45.717 47.25 44.326 47.25 QUADTO
+closepath
+44.342 46.375 M
+46.17 46.375 46.17 42.657 QUADTO
+46.17 39.016 44.357 39.016 QUADTO
+42.561 39.016 42.561 42.688 QUADTO
+42.561 46.375 44.342 46.375 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 42.756 M
+54.148 42.756 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -160.60265 199.57533] concat
+newpath
+199.575 160.603 M
+199.575 560.603 lineto
+-200.425 560.603 lineto
+-200.425 160.603 lineto
+199.575 160.603 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-38.14 185.077 M
+-38.14 174.28 lineto
+-36.124 174.28 lineto
+-36.124 185.077 lineto
+-38.14 185.077 lineto
+closepath
+-30.431 185.249 M
+-32.196 185.249 -33.228 184.187 QUADTO
+-34.259 183.124 -34.259 181.327 QUADTO
+-34.259 179.499 -33.22 178.452 QUADTO
+-32.181 177.405 -30.384 177.405 QUADTO
+-28.587 177.405 -27.548 178.452 QUADTO
+-26.509 179.499 -26.509 181.312 QUADTO
+-26.509 183.155 -27.556 184.202 QUADTO
+-28.603 185.249 -30.431 185.249 QUADTO
+closepath
+-30.399 183.983 M
+-28.665 183.983 -28.665 181.312 QUADTO
+-28.665 180.093 -29.126 179.382 QUADTO
+-29.587 178.671 -30.384 178.671 QUADTO
+-31.181 178.671 -31.649 179.382 QUADTO
+-32.118 180.093 -32.118 181.327 QUADTO
+-32.118 182.546 -31.657 183.265 QUADTO
+-31.196 183.983 -30.399 183.983 QUADTO
+closepath
+-20.974 184.265 M
+-21.974 185.249 -23.13 185.249 QUADTO
+-24.114 185.249 -24.731 184.648 QUADTO
+-25.349 184.046 -25.349 183.093 QUADTO
+-25.349 181.843 -24.356 181.171 QUADTO
+-23.364 180.499 -21.505 180.499 QUADTO
+-20.974 180.499 lineto
+-20.974 179.812 lineto
+-20.974 178.64 -22.302 178.64 QUADTO
+-23.489 178.64 -24.692 179.312 QUADTO
+-24.692 177.921 lineto
+-23.317 177.405 -21.974 177.405 QUADTO
+-19.021 177.405 -19.021 179.749 QUADTO
+-19.021 183.062 lineto
+-19.021 183.952 -18.458 183.952 QUADTO
+-18.364 183.952 -18.192 183.921 QUADTO
+-18.146 185.062 lineto
+-18.786 185.249 -19.286 185.249 QUADTO
+-20.521 185.249 -20.88 184.265 QUADTO
+-20.974 184.265 lineto
+closepath
+-20.974 183.187 M
+-20.974 181.655 lineto
+-21.442 181.655 lineto
+-23.411 181.655 -23.411 182.89 QUADTO
+-23.411 183.312 -23.13 183.593 QUADTO
+-22.849 183.874 -22.427 183.874 QUADTO
+-21.708 183.874 -20.974 183.187 QUADTO
+closepath
+-11.696 185.077 M
+-11.696 183.655 lineto
+-12.478 185.249 -14.149 185.249 QUADTO
+-15.493 185.249 -16.267 184.257 QUADTO
+-17.04 183.265 -17.04 181.53 QUADTO
+-17.04 179.64 -16.173 178.523 QUADTO
+-15.306 177.405 -13.837 177.405 QUADTO
+-12.649 177.405 -11.696 178.327 QUADTO
+-11.696 174.28 lineto
+-9.665 174.28 lineto
+-9.665 185.077 lineto
+-11.696 185.077 lineto
+closepath
+-11.696 179.53 M
+-12.431 178.718 -13.259 178.718 QUADTO
+-14.009 178.718 -14.446 179.437 QUADTO
+-14.884 180.155 -14.884 181.358 QUADTO
+-14.884 183.655 -13.415 183.655 QUADTO
+-12.509 183.655 -11.696 182.499 QUADTO
+-11.696 179.53 lineto
+closepath
+-2.306 185.077 M
+-2.306 178.843 lineto
+-3.353 178.843 lineto
+-3.353 177.577 lineto
+-2.306 177.577 lineto
+-2.306 177.03 lineto
+-2.306 174.108 0.46 174.108 QUADTO
+1.351 174.108 2.304 174.374 QUADTO
+2.304 175.733 lineto
+1.444 175.374 0.757 175.374 QUADTO
+-0.29 175.374 -0.29 176.952 QUADTO
+-0.29 177.577 lineto
+1.616 177.577 lineto
+1.616 178.843 lineto
+-0.29 178.843 lineto
+-0.29 185.077 lineto
+-2.306 185.077 lineto
+closepath
+3.279 185.077 M
+3.279 177.577 lineto
+5.295 177.577 lineto
+5.295 178.983 lineto
+6.092 177.405 7.701 177.405 QUADTO
+7.889 177.405 8.076 177.437 QUADTO
+8.076 179.249 lineto
+7.639 179.093 7.264 179.093 QUADTO
+6.061 179.093 5.295 180.312 QUADTO
+5.295 185.077 lineto
+3.279 185.077 lineto
+closepath
+13.315 184.265 M
+12.315 185.249 11.159 185.249 QUADTO
+10.175 185.249 9.558 184.648 QUADTO
+8.94 184.046 8.94 183.093 QUADTO
+8.94 181.843 9.933 181.171 QUADTO
+10.925 180.499 12.784 180.499 QUADTO
+13.315 180.499 lineto
+13.315 179.812 lineto
+13.315 178.64 11.987 178.64 QUADTO
+10.8 178.64 9.597 179.312 QUADTO
+9.597 177.921 lineto
+10.972 177.405 12.315 177.405 QUADTO
+15.269 177.405 15.269 179.749 QUADTO
+15.269 183.062 lineto
+15.269 183.952 15.831 183.952 QUADTO
+15.925 183.952 16.097 183.921 QUADTO
+16.144 185.062 lineto
+15.503 185.249 15.003 185.249 QUADTO
+13.769 185.249 13.409 184.265 QUADTO
+13.315 184.265 lineto
+closepath
+13.315 183.187 M
+13.315 181.655 lineto
+12.847 181.655 lineto
+10.878 181.655 10.878 182.89 QUADTO
+10.878 183.312 11.159 183.593 QUADTO
+11.44 183.874 11.862 183.874 QUADTO
+12.581 183.874 13.315 183.187 QUADTO
+closepath
+23.405 184.905 M
+22.155 185.249 21.077 185.249 QUADTO
+19.28 185.249 18.241 184.194 QUADTO
+17.202 183.14 17.202 181.312 QUADTO
+17.202 179.483 18.272 178.444 QUADTO
+19.343 177.405 21.233 177.405 QUADTO
+22.155 177.405 23.343 177.687 QUADTO
+23.343 179.155 lineto
+22.108 178.749 21.358 178.749 QUADTO
+20.452 178.749 19.897 179.452 QUADTO
+19.343 180.155 19.343 181.296 QUADTO
+19.343 182.483 19.944 183.194 QUADTO
+20.546 183.905 21.53 183.905 QUADTO
+22.452 183.905 23.405 183.515 QUADTO
+23.405 184.905 lineto
+closepath
+29.2 185.03 M
+28.466 185.249 28.06 185.249 QUADTO
+25.419 185.249 25.419 182.78 QUADTO
+25.419 178.843 lineto
+24.575 178.843 lineto
+24.575 177.577 lineto
+25.419 177.577 lineto
+25.419 176.312 lineto
+27.45 176.077 lineto
+27.45 177.577 lineto
+29.044 177.577 lineto
+29.044 178.843 lineto
+27.45 178.843 lineto
+27.45 182.515 lineto
+27.45 183.905 28.575 183.905 QUADTO
+28.825 183.905 29.2 183.812 QUADTO
+29.2 185.03 lineto
+closepath
+30.999 185.077 M
+30.999 177.577 lineto
+33.015 177.577 lineto
+33.015 185.077 lineto
+30.999 185.077 lineto
+closepath
+30.999 176.312 M
+30.999 174.624 lineto
+33.015 174.624 lineto
+33.015 176.312 lineto
+30.999 176.312 lineto
+closepath
+38.708 185.249 M
+36.942 185.249 35.911 184.187 QUADTO
+34.88 183.124 34.88 181.327 QUADTO
+34.88 179.499 35.919 178.452 QUADTO
+36.958 177.405 38.755 177.405 QUADTO
+40.552 177.405 41.591 178.452 QUADTO
+42.63 179.499 42.63 181.312 QUADTO
+42.63 183.155 41.583 184.202 QUADTO
+40.536 185.249 38.708 185.249 QUADTO
+closepath
+38.739 183.983 M
+40.474 183.983 40.474 181.312 QUADTO
+40.474 180.093 40.013 179.382 QUADTO
+39.552 178.671 38.755 178.671 QUADTO
+37.958 178.671 37.489 179.382 QUADTO
+37.021 180.093 37.021 181.327 QUADTO
+37.021 182.546 37.481 183.265 QUADTO
+37.942 183.983 38.739 183.983 QUADTO
+closepath
+44.493 185.077 M
+44.493 177.577 lineto
+46.509 177.577 lineto
+46.509 178.983 lineto
+47.509 177.405 49.071 177.405 QUADTO
+50.071 177.405 50.657 178.038 QUADTO
+51.243 178.671 51.243 179.765 QUADTO
+51.243 185.077 lineto
+49.212 185.077 lineto
+49.212 180.265 lineto
+49.212 178.999 48.368 178.999 QUADTO
+47.399 178.999 46.509 180.358 QUADTO
+46.509 185.077 lineto
+44.493 185.077 lineto
+closepath
+61.552 174.202 M
+61.552 175.499 lineto
+59.724 177.343 59.724 180.687 QUADTO
+59.724 184.046 61.552 185.874 QUADTO
+61.552 187.187 lineto
+59.88 186.28 58.88 184.507 QUADTO
+57.88 182.733 57.88 180.687 QUADTO
+57.88 178.64 58.864 176.89 QUADTO
+59.849 175.14 61.552 174.202 QUADTO
+closepath
+63.053 185.327 M
+71.006 174.702 lineto
+72.365 174.702 lineto
+64.412 185.327 lineto
+63.053 185.327 lineto
+closepath
+64.771 180.015 M
+63.678 180.015 63.037 179.335 QUADTO
+62.396 178.655 62.396 177.483 QUADTO
+62.396 176.312 63.037 175.632 QUADTO
+63.678 174.952 64.803 174.952 QUADTO
+65.912 174.952 66.561 175.632 QUADTO
+67.209 176.312 67.209 177.483 QUADTO
+67.209 178.671 66.561 179.343 QUADTO
+65.912 180.015 64.771 180.015 QUADTO
+closepath
+64.787 178.999 M
+65.678 178.999 65.678 177.483 QUADTO
+65.678 175.968 64.803 175.968 QUADTO
+63.912 175.968 63.912 177.483 QUADTO
+63.912 178.999 64.787 178.999 QUADTO
+closepath
+70.6 185.077 M
+69.49 185.077 68.85 184.398 QUADTO
+68.209 183.718 68.209 182.546 QUADTO
+68.209 181.358 68.857 180.687 QUADTO
+69.506 180.015 70.615 180.015 QUADTO
+71.74 180.015 72.381 180.687 QUADTO
+73.021 181.358 73.021 182.546 QUADTO
+73.021 183.733 72.381 184.405 QUADTO
+71.74 185.077 70.6 185.077 QUADTO
+closepath
+70.6 184.062 M
+71.506 184.062 71.506 182.546 QUADTO
+71.506 181.03 70.615 181.03 QUADTO
+69.725 181.03 69.725 182.546 QUADTO
+69.725 184.062 70.6 184.062 QUADTO
+closepath
+73.674 174.202 M
+73.674 175.499 lineto
+75.502 177.343 75.502 180.687 QUADTO
+75.502 184.046 73.674 185.874 QUADTO
+73.674 187.187 lineto
+75.346 186.28 76.346 184.507 QUADTO
+77.346 182.733 77.346 180.687 QUADTO
+77.346 178.64 76.361 176.89 QUADTO
+75.377 175.14 73.674 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+65.645 34.247 M
+65.645 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+110.776 34.247 M
+110.776 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+137.176 34.247 M
+137.176 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+155.907 34.247 M
+155.907 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+170.436 34.247 M
+170.436 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+182.307 34.247 M
+182.307 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+192.344 34.247 M
+192.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+201.038 34.247 M
+201.038 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+208.707 34.247 M
+208.707 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+260.699 34.247 M
+260.699 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+287.099 34.247 M
+287.099 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+305.83 34.247 M
+305.83 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+320.359 34.247 M
+320.359 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+332.23 34.247 M
+332.23 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+342.267 34.247 M
+342.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+350.961 34.247 M
+350.961 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+358.63 34.247 M
+358.63 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 297.614 M
+388 297.614 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 269.296 M
+388 269.296 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 240.979 M
+388 240.979 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 212.661 M
+388 212.661 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 184.344 M
+388 184.344 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 156.026 M
+388 156.026 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 127.709 M
+388 127.709 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 99.391 M
+388 99.391 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 71.074 M
+388 71.074 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 42.756 M
+388 42.756 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 100.665 M
+92.045 94.832 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 94.832 M
+110.776 110.548 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 110.548 M
+137.176 118.307 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 118.307 M
+155.907 88.574 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 88.574 M
+182.307 97.381 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 97.381 M
+201.038 96.135 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 96.135 M
+227.439 85.572 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 85.572 M
+246.17 85.374 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 85.374 M
+272.57 105.083 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 105.083 M
+291.301 88.715 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 88.715 M
+317.701 93.614 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 93.614 M
+336.432 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 48.136 M
+352.569 77.077 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 77.077 M
+365.49 64.023 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 104.687 M
+92.045 85.317 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 85.317 M
+110.776 104.885 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 104.885 M
+137.176 84.638 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 84.638 M
+155.907 101.43 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 101.43 M
+182.307 90.556 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 90.556 M
+201.038 107.716 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 107.716 M
+227.439 84.185 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 84.185 M
+246.17 87.554 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 87.554 M
+272.57 92.991 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 92.991 M
+291.301 102.789 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 102.789 M
+317.701 90.16 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 90.16 M
+336.432 85.402 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 85.402 M
+352.569 73.141 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 73.141 M
+365.49 63.739 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+68.645 100.665 M
+68.645 102.322 67.301 103.665 65.645 103.665 curveto
+63.988 103.665 62.645 102.322 62.645 100.665 curveto
+62.645 99.009 63.988 97.665 65.645 97.665 curveto
+67.301 97.665 68.645 99.009 68.645 100.665 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+68.645 100.665 M
+68.645 102.322 67.301 103.665 65.645 103.665 curveto
+63.988 103.665 62.645 102.322 62.645 100.665 curveto
+62.645 99.009 63.988 97.665 65.645 97.665 curveto
+67.301 97.665 68.645 99.009 68.645 100.665 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+95.045 94.832 M
+95.045 96.489 93.702 97.832 92.045 97.832 curveto
+90.388 97.832 89.045 96.489 89.045 94.832 curveto
+89.045 93.175 90.388 91.832 92.045 91.832 curveto
+93.702 91.832 95.045 93.175 95.045 94.832 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+95.045 94.832 M
+95.045 96.489 93.702 97.832 92.045 97.832 curveto
+90.388 97.832 89.045 96.489 89.045 94.832 curveto
+89.045 93.175 90.388 91.832 92.045 91.832 curveto
+93.702 91.832 95.045 93.175 95.045 94.832 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+113.776 110.548 M
+113.776 112.205 112.433 113.548 110.776 113.548 curveto
+109.119 113.548 107.776 112.205 107.776 110.548 curveto
+107.776 108.891 109.119 107.548 110.776 107.548 curveto
+112.433 107.548 113.776 108.891 113.776 110.548 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+113.776 110.548 M
+113.776 112.205 112.433 113.548 110.776 113.548 curveto
+109.119 113.548 107.776 112.205 107.776 110.548 curveto
+107.776 108.891 109.119 107.548 110.776 107.548 curveto
+112.433 107.548 113.776 108.891 113.776 110.548 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+140.176 118.307 M
+140.176 119.964 138.833 121.307 137.176 121.307 curveto
+135.519 121.307 134.176 119.964 134.176 118.307 curveto
+134.176 116.65 135.519 115.307 137.176 115.307 curveto
+138.833 115.307 140.176 116.65 140.176 118.307 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+140.176 118.307 M
+140.176 119.964 138.833 121.307 137.176 121.307 curveto
+135.519 121.307 134.176 119.964 134.176 118.307 curveto
+134.176 116.65 135.519 115.307 137.176 115.307 curveto
+138.833 115.307 140.176 116.65 140.176 118.307 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+158.907 88.574 M
+158.907 90.231 157.564 91.574 155.907 91.574 curveto
+154.25 91.574 152.907 90.231 152.907 88.574 curveto
+152.907 86.917 154.25 85.574 155.907 85.574 curveto
+157.564 85.574 158.907 86.917 158.907 88.574 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+158.907 88.574 M
+158.907 90.231 157.564 91.574 155.907 91.574 curveto
+154.25 91.574 152.907 90.231 152.907 88.574 curveto
+152.907 86.917 154.25 85.574 155.907 85.574 curveto
+157.564 85.574 158.907 86.917 158.907 88.574 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+185.307 97.381 M
+185.307 99.037 183.964 100.381 182.307 100.381 curveto
+180.65 100.381 179.307 99.037 179.307 97.381 curveto
+179.307 95.724 180.65 94.381 182.307 94.381 curveto
+183.964 94.381 185.307 95.724 185.307 97.381 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+185.307 97.381 M
+185.307 99.037 183.964 100.381 182.307 100.381 curveto
+180.65 100.381 179.307 99.037 179.307 97.381 curveto
+179.307 95.724 180.65 94.381 182.307 94.381 curveto
+183.964 94.381 185.307 95.724 185.307 97.381 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+204.038 96.135 M
+204.038 97.791 202.695 99.135 201.038 99.135 curveto
+199.382 99.135 198.038 97.791 198.038 96.135 curveto
+198.038 94.478 199.382 93.135 201.038 93.135 curveto
+202.695 93.135 204.038 94.478 204.038 96.135 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.038 96.135 M
+204.038 97.791 202.695 99.135 201.038 99.135 curveto
+199.382 99.135 198.038 97.791 198.038 96.135 curveto
+198.038 94.478 199.382 93.135 201.038 93.135 curveto
+202.695 93.135 204.038 94.478 204.038 96.135 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+230.439 85.572 M
+230.439 87.229 229.095 88.572 227.439 88.572 curveto
+225.782 88.572 224.439 87.229 224.439 85.572 curveto
+224.439 83.915 225.782 82.572 227.439 82.572 curveto
+229.095 82.572 230.439 83.915 230.439 85.572 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+230.439 85.572 M
+230.439 87.229 229.095 88.572 227.439 88.572 curveto
+225.782 88.572 224.439 87.229 224.439 85.572 curveto
+224.439 83.915 225.782 82.572 227.439 82.572 curveto
+229.095 82.572 230.439 83.915 230.439 85.572 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+249.17 85.374 M
+249.17 87.031 247.827 88.374 246.17 88.374 curveto
+244.513 88.374 243.17 87.031 243.17 85.374 curveto
+243.17 83.717 244.513 82.374 246.17 82.374 curveto
+247.827 82.374 249.17 83.717 249.17 85.374 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+249.17 85.374 M
+249.17 87.031 247.827 88.374 246.17 88.374 curveto
+244.513 88.374 243.17 87.031 243.17 85.374 curveto
+243.17 83.717 244.513 82.374 246.17 82.374 curveto
+247.827 82.374 249.17 83.717 249.17 85.374 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+275.57 105.083 M
+275.57 106.74 274.227 108.083 272.57 108.083 curveto
+270.913 108.083 269.57 106.74 269.57 105.083 curveto
+269.57 103.426 270.913 102.083 272.57 102.083 curveto
+274.227 102.083 275.57 103.426 275.57 105.083 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+275.57 105.083 M
+275.57 106.74 274.227 108.083 272.57 108.083 curveto
+270.913 108.083 269.57 106.74 269.57 105.083 curveto
+269.57 103.426 270.913 102.083 272.57 102.083 curveto
+274.227 102.083 275.57 103.426 275.57 105.083 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+294.301 88.715 M
+294.301 90.372 292.958 91.715 291.301 91.715 curveto
+289.644 91.715 288.301 90.372 288.301 88.715 curveto
+288.301 87.059 289.644 85.715 291.301 85.715 curveto
+292.958 85.715 294.301 87.059 294.301 88.715 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+294.301 88.715 M
+294.301 90.372 292.958 91.715 291.301 91.715 curveto
+289.644 91.715 288.301 90.372 288.301 88.715 curveto
+288.301 87.059 289.644 85.715 291.301 85.715 curveto
+292.958 85.715 294.301 87.059 294.301 88.715 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+320.701 93.614 M
+320.701 95.271 319.358 96.614 317.701 96.614 curveto
+316.044 96.614 314.701 95.271 314.701 93.614 curveto
+314.701 91.958 316.044 90.614 317.701 90.614 curveto
+319.358 90.614 320.701 91.958 320.701 93.614 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.701 93.614 M
+320.701 95.271 319.358 96.614 317.701 96.614 curveto
+316.044 96.614 314.701 95.271 314.701 93.614 curveto
+314.701 91.958 316.044 90.614 317.701 90.614 curveto
+319.358 90.614 320.701 91.958 320.701 93.614 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+339.432 48.136 M
+339.432 49.793 338.089 51.136 336.432 51.136 curveto
+334.775 51.136 333.432 49.793 333.432 48.136 curveto
+333.432 46.48 334.775 45.136 336.432 45.136 curveto
+338.089 45.136 339.432 46.48 339.432 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+339.432 48.136 M
+339.432 49.793 338.089 51.136 336.432 51.136 curveto
+334.775 51.136 333.432 49.793 333.432 48.136 curveto
+333.432 46.48 334.775 45.136 336.432 45.136 curveto
+338.089 45.136 339.432 46.48 339.432 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+355.569 77.077 M
+355.569 78.734 354.226 80.077 352.569 80.077 curveto
+350.912 80.077 349.569 78.734 349.569 77.077 curveto
+349.569 75.42 350.912 74.077 352.569 74.077 curveto
+354.226 74.077 355.569 75.42 355.569 77.077 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+355.569 77.077 M
+355.569 78.734 354.226 80.077 352.569 80.077 curveto
+350.912 80.077 349.569 78.734 349.569 77.077 curveto
+349.569 75.42 350.912 74.077 352.569 74.077 curveto
+354.226 74.077 355.569 75.42 355.569 77.077 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+368.49 64.023 M
+368.49 65.679 367.147 67.023 365.49 67.023 curveto
+363.833 67.023 362.49 65.679 362.49 64.023 curveto
+362.49 62.366 363.833 61.023 365.49 61.023 curveto
+367.147 61.023 368.49 62.366 368.49 64.023 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+368.49 64.023 M
+368.49 65.679 367.147 67.023 365.49 67.023 curveto
+363.833 67.023 362.49 65.679 362.49 64.023 curveto
+362.49 62.366 363.833 61.023 365.49 61.023 curveto
+367.147 61.023 368.49 62.366 368.49 64.023 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+62.645 101.687 M
+68.645 101.687 lineto
+68.645 107.687 lineto
+62.645 107.687 lineto
+62.645 101.687 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+62.645 101.687 M
+68.645 101.687 lineto
+68.645 107.687 lineto
+62.645 107.687 lineto
+62.645 101.687 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+89.045 82.317 M
+95.045 82.317 lineto
+95.045 88.317 lineto
+89.045 88.317 lineto
+89.045 82.317 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+89.045 82.317 M
+95.045 82.317 lineto
+95.045 88.317 lineto
+89.045 88.317 lineto
+89.045 82.317 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+107.776 101.885 M
+113.776 101.885 lineto
+113.776 107.885 lineto
+107.776 107.885 lineto
+107.776 101.885 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+107.776 101.885 M
+113.776 101.885 lineto
+113.776 107.885 lineto
+107.776 107.885 lineto
+107.776 101.885 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+134.176 81.638 M
+140.176 81.638 lineto
+140.176 87.638 lineto
+134.176 87.638 lineto
+134.176 81.638 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.176 81.638 M
+140.176 81.638 lineto
+140.176 87.638 lineto
+134.176 87.638 lineto
+134.176 81.638 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+152.907 98.43 M
+158.907 98.43 lineto
+158.907 104.43 lineto
+152.907 104.43 lineto
+152.907 98.43 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+152.907 98.43 M
+158.907 98.43 lineto
+158.907 104.43 lineto
+152.907 104.43 lineto
+152.907 98.43 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+179.307 87.556 M
+185.307 87.556 lineto
+185.307 93.556 lineto
+179.307 93.556 lineto
+179.307 87.556 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+179.307 87.556 M
+185.307 87.556 lineto
+185.307 93.556 lineto
+179.307 93.556 lineto
+179.307 87.556 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+198.038 104.716 M
+204.038 104.716 lineto
+204.038 110.716 lineto
+198.038 110.716 lineto
+198.038 104.716 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+198.038 104.716 M
+204.038 104.716 lineto
+204.038 110.716 lineto
+198.038 110.716 lineto
+198.038 104.716 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+224.439 81.185 M
+230.439 81.185 lineto
+230.439 87.185 lineto
+224.439 87.185 lineto
+224.439 81.185 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+224.439 81.185 M
+230.439 81.185 lineto
+230.439 87.185 lineto
+224.439 87.185 lineto
+224.439 81.185 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+243.17 84.554 M
+249.17 84.554 lineto
+249.17 90.554 lineto
+243.17 90.554 lineto
+243.17 84.554 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+243.17 84.554 M
+249.17 84.554 lineto
+249.17 90.554 lineto
+243.17 90.554 lineto
+243.17 84.554 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+269.57 89.991 M
+275.57 89.991 lineto
+275.57 95.991 lineto
+269.57 95.991 lineto
+269.57 89.991 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+269.57 89.991 M
+275.57 89.991 lineto
+275.57 95.991 lineto
+269.57 95.991 lineto
+269.57 89.991 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+288.301 99.789 M
+294.301 99.789 lineto
+294.301 105.789 lineto
+288.301 105.789 lineto
+288.301 99.789 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+288.301 99.789 M
+294.301 99.789 lineto
+294.301 105.789 lineto
+288.301 105.789 lineto
+288.301 99.789 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+314.701 87.16 M
+320.701 87.16 lineto
+320.701 93.16 lineto
+314.701 93.16 lineto
+314.701 87.16 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+314.701 87.16 M
+320.701 87.16 lineto
+320.701 93.16 lineto
+314.701 93.16 lineto
+314.701 87.16 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+333.432 82.402 M
+339.432 82.402 lineto
+339.432 88.402 lineto
+333.432 88.402 lineto
+333.432 82.402 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+333.432 82.402 M
+339.432 82.402 lineto
+339.432 88.402 lineto
+333.432 88.402 lineto
+333.432 82.402 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+349.569 70.141 M
+355.569 70.141 lineto
+355.569 76.141 lineto
+349.569 76.141 lineto
+349.569 70.141 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+349.569 70.141 M
+355.569 70.141 lineto
+355.569 76.141 lineto
+349.569 76.141 lineto
+349.569 70.141 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+362.49 60.739 M
+368.49 60.739 lineto
+368.49 66.739 lineto
+362.49 66.739 lineto
+362.49 60.739 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+362.49 60.739 M
+368.49 60.739 lineto
+368.49 66.739 lineto
+362.49 66.739 lineto
+362.49 60.739 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc02kp02.png b/sim/gobs/wiki/dc02kp02.png
new file mode 100644
index 0000000..031c5a2
Binary files /dev/null and b/sim/gobs/wiki/dc02kp02.png differ
diff --git a/sim/gobs/wiki/dc03kp01.eps b/sim/gobs/wiki/dc03kp01.eps
new file mode 100644
index 0000000..af8272b
--- /dev/null
+++ b/sim/gobs/wiki/dc03kp01.eps
@@ -0,0 +1,5002 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-21T18:13:05
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+58.148 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+59.869 345.481 M
+59.869 344.606 lineto
+61.604 344.606 lineto
+61.604 337.762 lineto
+59.869 338.2 lineto
+59.869 337.309 lineto
+62.76 336.59 lineto
+62.76 344.606 lineto
+64.494 344.606 lineto
+64.494 345.481 lineto
+59.869 345.481 lineto
+closepath
+69.41 345.7 M
+68.066 345.7 67.238 344.434 QUADTO
+66.41 343.168 66.41 341.137 QUADTO
+66.41 339.09 67.246 337.84 QUADTO
+68.082 336.59 69.441 336.59 QUADTO
+70.801 336.59 71.637 337.84 QUADTO
+72.473 339.09 72.473 341.122 QUADTO
+72.473 343.2 71.637 344.45 QUADTO
+70.801 345.7 69.41 345.7 QUADTO
+closepath
+69.426 344.825 M
+71.254 344.825 71.254 341.106 QUADTO
+71.254 337.465 69.441 337.465 QUADTO
+67.645 337.465 67.645 341.137 QUADTO
+67.645 344.825 69.426 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.645 331.931 M
+65.645 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+104.188 345.481 M
+104.188 344.465 lineto
+104.688 343.293 106.219 341.903 QUADTO
+106.891 341.309 lineto
+108.157 340.153 108.157 339.012 QUADTO
+108.157 338.293 107.727 337.879 QUADTO
+107.297 337.465 106.532 337.465 QUADTO
+105.625 337.465 104.407 338.153 QUADTO
+104.407 337.137 lineto
+105.563 336.59 106.688 336.59 QUADTO
+107.907 336.59 108.649 337.247 QUADTO
+109.391 337.903 109.391 338.981 QUADTO
+109.391 339.762 109.016 340.372 QUADTO
+108.641 340.981 107.625 341.84 QUADTO
+107.188 342.215 lineto
+105.797 343.387 105.579 344.465 QUADTO
+109.344 344.465 lineto
+109.344 345.481 lineto
+104.188 345.481 lineto
+closepath
+114.541 345.7 M
+113.198 345.7 112.37 344.434 QUADTO
+111.541 343.168 111.541 341.137 QUADTO
+111.541 339.09 112.377 337.84 QUADTO
+113.213 336.59 114.573 336.59 QUADTO
+115.932 336.59 116.768 337.84 QUADTO
+117.604 339.09 117.604 341.122 QUADTO
+117.604 343.2 116.768 344.45 QUADTO
+115.932 345.7 114.541 345.7 QUADTO
+closepath
+114.557 344.825 M
+116.385 344.825 116.385 341.106 QUADTO
+116.385 337.465 114.573 337.465 QUADTO
+112.776 337.465 112.776 341.137 QUADTO
+112.776 344.825 114.557 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+110.776 331.931 M
+110.776 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+130.807 345.418 M
+130.807 344.34 lineto
+132.057 344.825 132.76 344.825 QUADTO
+133.588 344.825 134.112 344.34 QUADTO
+134.635 343.856 134.635 343.09 QUADTO
+134.635 341.262 132.072 341.262 QUADTO
+131.604 341.262 lineto
+131.604 340.481 lineto
+132.01 340.481 lineto
+134.416 340.481 134.416 338.793 QUADTO
+134.416 337.465 132.838 337.465 QUADTO
+131.963 337.465 130.932 337.95 QUADTO
+130.932 336.934 lineto
+131.947 336.59 132.916 336.59 QUADTO
+135.572 336.59 135.572 338.606 QUADTO
+135.572 340.137 133.76 340.778 QUADTO
+135.869 341.262 135.869 343.075 QUADTO
+135.869 344.309 135.057 345.004 QUADTO
+134.244 345.7 132.838 345.7 QUADTO
+132.026 345.7 130.807 345.418 QUADTO
+closepath
+140.942 345.7 M
+139.598 345.7 138.77 344.434 QUADTO
+137.942 343.168 137.942 341.137 QUADTO
+137.942 339.09 138.778 337.84 QUADTO
+139.613 336.59 140.973 336.59 QUADTO
+142.332 336.59 143.168 337.84 QUADTO
+144.004 339.09 144.004 341.122 QUADTO
+144.004 343.2 143.168 344.45 QUADTO
+142.332 345.7 140.942 345.7 QUADTO
+closepath
+140.957 344.825 M
+142.785 344.825 142.785 341.106 QUADTO
+142.785 337.465 140.973 337.465 QUADTO
+139.176 337.465 139.176 341.137 QUADTO
+139.176 344.825 140.957 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+137.176 331.931 M
+137.176 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+155.907 331.931 M
+155.907 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+170.436 331.931 M
+170.436 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+182.307 331.931 M
+182.307 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.344 331.931 M
+192.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+201.038 331.931 M
+201.038 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+208.707 331.931 M
+208.707 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+205.998 345.481 M
+205.998 344.606 lineto
+207.732 344.606 lineto
+207.732 337.762 lineto
+205.998 338.2 lineto
+205.998 337.309 lineto
+208.889 336.59 lineto
+208.889 344.606 lineto
+210.623 344.606 lineto
+210.623 345.481 lineto
+205.998 345.481 lineto
+closepath
+215.539 345.7 M
+214.195 345.7 213.367 344.434 QUADTO
+212.539 343.168 212.539 341.137 QUADTO
+212.539 339.09 213.375 337.84 QUADTO
+214.211 336.59 215.57 336.59 QUADTO
+216.93 336.59 217.766 337.84 QUADTO
+218.602 339.09 218.602 341.122 QUADTO
+218.602 343.2 217.766 344.45 QUADTO
+216.93 345.7 215.539 345.7 QUADTO
+closepath
+215.555 344.825 M
+217.383 344.825 217.383 341.106 QUADTO
+217.383 337.465 215.57 337.465 QUADTO
+213.773 337.465 213.773 341.137 QUADTO
+213.773 344.825 215.555 344.825 QUADTO
+closepath
+223.127 345.7 M
+221.783 345.7 220.955 344.434 QUADTO
+220.127 343.168 220.127 341.137 QUADTO
+220.127 339.09 220.963 337.84 QUADTO
+221.799 336.59 223.158 336.59 QUADTO
+224.518 336.59 225.354 337.84 QUADTO
+226.189 339.09 226.189 341.122 QUADTO
+226.189 343.2 225.354 344.45 QUADTO
+224.518 345.7 223.127 345.7 QUADTO
+closepath
+223.143 344.825 M
+224.971 344.825 224.971 341.106 QUADTO
+224.971 337.465 223.158 337.465 QUADTO
+221.361 337.465 221.361 341.137 QUADTO
+221.361 344.825 223.143 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+215.567 331.931 M
+215.567 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+250.317 345.481 M
+250.317 344.465 lineto
+250.817 343.293 252.348 341.903 QUADTO
+253.02 341.309 lineto
+254.286 340.153 254.286 339.012 QUADTO
+254.286 338.293 253.856 337.879 QUADTO
+253.426 337.465 252.661 337.465 QUADTO
+251.754 337.465 250.536 338.153 QUADTO
+250.536 337.137 lineto
+251.692 336.59 252.817 336.59 QUADTO
+254.036 336.59 254.778 337.247 QUADTO
+255.52 337.903 255.52 338.981 QUADTO
+255.52 339.762 255.145 340.372 QUADTO
+254.77 340.981 253.754 341.84 QUADTO
+253.317 342.215 lineto
+251.926 343.387 251.707 344.465 QUADTO
+255.473 344.465 lineto
+255.473 345.481 lineto
+250.317 345.481 lineto
+closepath
+260.67 345.7 M
+259.327 345.7 258.499 344.434 QUADTO
+257.67 343.168 257.67 341.137 QUADTO
+257.67 339.09 258.506 337.84 QUADTO
+259.342 336.59 260.702 336.59 QUADTO
+262.061 336.59 262.897 337.84 QUADTO
+263.733 339.09 263.733 341.122 QUADTO
+263.733 343.2 262.897 344.45 QUADTO
+262.061 345.7 260.67 345.7 QUADTO
+closepath
+260.686 344.825 M
+262.514 344.825 262.514 341.106 QUADTO
+262.514 337.465 260.702 337.465 QUADTO
+258.905 337.465 258.905 341.137 QUADTO
+258.905 344.825 260.686 344.825 QUADTO
+closepath
+268.258 345.7 M
+266.915 345.7 266.086 344.434 QUADTO
+265.258 343.168 265.258 341.137 QUADTO
+265.258 339.09 266.094 337.84 QUADTO
+266.93 336.59 268.29 336.59 QUADTO
+269.649 336.59 270.485 337.84 QUADTO
+271.321 339.09 271.321 341.122 QUADTO
+271.321 343.2 270.485 344.45 QUADTO
+269.649 345.7 268.258 345.7 QUADTO
+closepath
+268.274 344.825 M
+270.102 344.825 270.102 341.106 QUADTO
+270.102 337.465 268.29 337.465 QUADTO
+266.493 337.465 266.493 341.137 QUADTO
+266.493 344.825 268.274 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+260.699 331.931 M
+260.699 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+287.099 331.931 M
+287.099 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+305.83 331.931 M
+305.83 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.359 331.931 M
+320.359 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+332.23 331.931 M
+332.23 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+342.267 331.931 M
+342.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.961 331.931 M
+350.961 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+358.63 331.931 M
+358.63 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.127 345.481 M
+352.127 344.606 lineto
+353.861 344.606 lineto
+353.861 337.762 lineto
+352.127 338.2 lineto
+352.127 337.309 lineto
+355.018 336.59 lineto
+355.018 344.606 lineto
+356.752 344.606 lineto
+356.752 345.481 lineto
+352.127 345.481 lineto
+closepath
+361.668 345.7 M
+360.324 345.7 359.496 344.434 QUADTO
+358.668 343.168 358.668 341.137 QUADTO
+358.668 339.09 359.504 337.84 QUADTO
+360.34 336.59 361.699 336.59 QUADTO
+363.059 336.59 363.895 337.84 QUADTO
+364.73 339.09 364.73 341.122 QUADTO
+364.73 343.2 363.895 344.45 QUADTO
+363.059 345.7 361.668 345.7 QUADTO
+closepath
+361.684 344.825 M
+363.512 344.825 363.512 341.106 QUADTO
+363.512 337.465 361.699 337.465 QUADTO
+359.902 337.465 359.902 341.137 QUADTO
+359.902 344.825 361.684 344.825 QUADTO
+closepath
+369.256 345.7 M
+367.912 345.7 367.084 344.434 QUADTO
+366.256 343.168 366.256 341.137 QUADTO
+366.256 339.09 367.092 337.84 QUADTO
+367.928 336.59 369.287 336.59 QUADTO
+370.647 336.59 371.482 337.84 QUADTO
+372.318 339.09 372.318 341.122 QUADTO
+372.318 343.2 371.482 344.45 QUADTO
+370.647 345.7 369.256 345.7 QUADTO
+closepath
+369.272 344.825 M
+371.1 344.825 371.1 341.106 QUADTO
+371.1 337.465 369.287 337.465 QUADTO
+367.49 337.465 367.49 341.137 QUADTO
+367.49 344.825 369.272 344.825 QUADTO
+closepath
+376.844 345.7 M
+375.5 345.7 374.672 344.434 QUADTO
+373.844 343.168 373.844 341.137 QUADTO
+373.844 339.09 374.68 337.84 QUADTO
+375.516 336.59 376.875 336.59 QUADTO
+378.234 336.59 379.07 337.84 QUADTO
+379.906 339.09 379.906 341.122 QUADTO
+379.906 343.2 379.07 344.45 QUADTO
+378.234 345.7 376.844 345.7 QUADTO
+closepath
+376.859 344.825 M
+378.688 344.825 378.688 341.106 QUADTO
+378.688 337.465 376.875 337.465 QUADTO
+375.078 337.465 375.078 341.137 QUADTO
+375.078 344.825 376.859 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+365.49 331.931 M
+365.49 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+202.574 364.954 M
+202.574 357.454 lineto
+204.59 357.454 lineto
+204.59 358.86 lineto
+205.59 357.282 207.152 357.282 QUADTO
+208.152 357.282 208.738 357.915 QUADTO
+209.324 358.548 209.324 359.641 QUADTO
+209.324 364.954 lineto
+207.293 364.954 lineto
+207.293 360.141 lineto
+207.293 358.876 206.449 358.876 QUADTO
+205.48 358.876 204.59 360.235 QUADTO
+204.59 364.954 lineto
+202.574 364.954 lineto
+closepath
+214.925 365.126 M
+213.159 365.126 212.128 364.063 QUADTO
+211.097 363.001 211.097 361.204 QUADTO
+211.097 359.376 212.136 358.329 QUADTO
+213.175 357.282 214.972 357.282 QUADTO
+216.769 357.282 217.808 358.329 QUADTO
+218.847 359.376 218.847 361.188 QUADTO
+218.847 363.032 217.8 364.079 QUADTO
+216.753 365.126 214.925 365.126 QUADTO
+closepath
+214.956 363.86 M
+216.69 363.86 216.69 361.188 QUADTO
+216.69 359.97 216.229 359.259 QUADTO
+215.769 358.548 214.972 358.548 QUADTO
+214.175 358.548 213.706 359.259 QUADTO
+213.237 359.97 213.237 361.204 QUADTO
+213.237 362.423 213.698 363.141 QUADTO
+214.159 363.86 214.956 363.86 QUADTO
+closepath
+225.429 364.954 M
+225.429 363.532 lineto
+224.647 365.126 222.976 365.126 QUADTO
+221.632 365.126 220.858 364.134 QUADTO
+220.085 363.141 220.085 361.407 QUADTO
+220.085 359.516 220.952 358.399 QUADTO
+221.819 357.282 223.288 357.282 QUADTO
+224.476 357.282 225.429 358.204 QUADTO
+225.429 354.157 lineto
+227.46 354.157 lineto
+227.46 364.954 lineto
+225.429 364.954 lineto
+closepath
+225.429 359.407 M
+224.694 358.595 223.866 358.595 QUADTO
+223.116 358.595 222.679 359.313 QUADTO
+222.241 360.032 222.241 361.235 QUADTO
+222.241 363.532 223.71 363.532 QUADTO
+224.616 363.532 225.429 362.376 QUADTO
+225.429 359.407 lineto
+closepath
+236.096 364.704 M
+234.658 365.126 233.361 365.126 QUADTO
+231.486 365.126 230.4 364.055 QUADTO
+229.314 362.985 229.314 361.141 QUADTO
+229.314 359.407 230.307 358.345 QUADTO
+231.299 357.282 232.939 357.282 QUADTO
+234.58 357.282 235.338 358.321 QUADTO
+236.096 359.36 236.096 361.61 QUADTO
+231.439 361.61 lineto
+231.643 363.751 233.799 363.751 QUADTO
+234.814 363.751 236.096 363.282 QUADTO
+236.096 364.704 lineto
+closepath
+231.408 360.47 M
+234.111 360.47 lineto
+234.111 358.548 232.877 358.548 QUADTO
+231.611 358.548 231.408 360.47 QUADTO
+closepath
+237.986 364.72 M
+237.986 363.235 lineto
+239.502 363.86 240.564 363.86 QUADTO
+241.799 363.86 241.799 363.016 QUADTO
+241.799 362.47 240.783 362.048 QUADTO
+240.096 361.782 lineto
+238.986 361.329 238.502 360.813 QUADTO
+238.018 360.298 238.018 359.532 QUADTO
+238.018 358.454 238.838 357.868 QUADTO
+239.658 357.282 241.111 357.282 QUADTO
+242.033 357.282 243.299 357.548 QUADTO
+243.299 358.97 lineto
+242.08 358.548 241.283 358.548 QUADTO
+240.018 358.548 240.018 359.313 QUADTO
+240.018 359.829 240.955 360.188 QUADTO
+241.533 360.407 lineto
+242.861 360.907 243.377 361.423 QUADTO
+243.893 361.938 243.893 362.751 QUADTO
+243.893 363.798 243.01 364.462 QUADTO
+242.127 365.126 240.721 365.126 QUADTO
+239.377 365.126 237.986 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+54.148 34.247 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+44.326 330.426 M
+42.982 330.426 42.154 329.16 QUADTO
+41.326 327.894 41.326 325.863 QUADTO
+41.326 323.816 42.162 322.566 QUADTO
+42.998 321.316 44.357 321.316 QUADTO
+45.717 321.316 46.553 322.566 QUADTO
+47.389 323.816 47.389 325.848 QUADTO
+47.389 327.926 46.553 329.176 QUADTO
+45.717 330.426 44.326 330.426 QUADTO
+closepath
+44.342 329.551 M
+46.17 329.551 46.17 325.832 QUADTO
+46.17 322.191 44.357 322.191 QUADTO
+42.561 322.191 42.561 325.863 QUADTO
+42.561 329.551 44.342 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 325.931 M
+54.148 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+42.014 302.459 M
+42.014 301.427 lineto
+42.889 301.771 43.654 301.771 QUADTO
+44.514 301.771 45.006 301.271 QUADTO
+45.498 300.771 45.498 299.881 QUADTO
+45.498 297.927 42.811 297.927 QUADTO
+42.498 297.927 42.17 297.974 QUADTO
+42.17 293.756 lineto
+46.561 293.756 lineto
+46.561 294.756 lineto
+43.186 294.756 lineto
+43.186 297.052 lineto
+44.857 297.052 45.795 297.818 QUADTO
+46.732 298.584 46.732 299.943 QUADTO
+46.732 301.209 45.873 301.927 QUADTO
+45.014 302.646 43.514 302.646 QUADTO
+42.857 302.646 42.014 302.459 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 298.152 M
+54.148 298.152 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 274.648 M
+34.785 273.773 lineto
+36.52 273.773 lineto
+36.52 266.929 lineto
+34.785 267.367 lineto
+34.785 266.476 lineto
+37.676 265.757 lineto
+37.676 273.773 lineto
+39.41 273.773 lineto
+39.41 274.648 lineto
+34.785 274.648 lineto
+closepath
+44.326 274.867 M
+42.982 274.867 42.154 273.601 QUADTO
+41.326 272.336 41.326 270.304 QUADTO
+41.326 268.257 42.162 267.007 QUADTO
+42.998 265.757 44.357 265.757 QUADTO
+45.717 265.757 46.553 267.007 QUADTO
+47.389 268.257 47.389 270.289 QUADTO
+47.389 272.367 46.553 273.617 QUADTO
+45.717 274.867 44.326 274.867 QUADTO
+closepath
+44.342 273.992 M
+46.17 273.992 46.17 270.273 QUADTO
+46.17 266.632 44.357 266.632 QUADTO
+42.561 266.632 42.561 270.304 QUADTO
+42.561 273.992 44.342 273.992 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 270.372 M
+54.148 270.372 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 246.868 M
+34.785 245.993 lineto
+36.52 245.993 lineto
+36.52 239.15 lineto
+34.785 239.587 lineto
+34.785 238.697 lineto
+37.676 237.978 lineto
+37.676 245.993 lineto
+39.41 245.993 lineto
+39.41 246.868 lineto
+34.785 246.868 lineto
+closepath
+42.014 246.9 M
+42.014 245.868 lineto
+42.889 246.212 43.654 246.212 QUADTO
+44.514 246.212 45.006 245.712 QUADTO
+45.498 245.212 45.498 244.322 QUADTO
+45.498 242.368 42.811 242.368 QUADTO
+42.498 242.368 42.17 242.415 QUADTO
+42.17 238.197 lineto
+46.561 238.197 lineto
+46.561 239.197 lineto
+43.186 239.197 lineto
+43.186 241.493 lineto
+44.857 241.493 45.795 242.259 QUADTO
+46.732 243.025 46.732 244.384 QUADTO
+46.732 245.65 45.873 246.368 QUADTO
+45.014 247.087 43.514 247.087 QUADTO
+42.857 247.087 42.014 246.9 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 242.593 M
+54.148 242.593 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 219.089 M
+33.973 218.073 lineto
+34.473 216.902 36.004 215.511 QUADTO
+36.676 214.917 lineto
+37.941 213.761 37.941 212.62 QUADTO
+37.941 211.902 37.512 211.487 QUADTO
+37.082 211.073 36.316 211.073 QUADTO
+35.41 211.073 34.191 211.761 QUADTO
+34.191 210.745 lineto
+35.348 210.198 36.473 210.198 QUADTO
+37.691 210.198 38.434 210.855 QUADTO
+39.176 211.511 39.176 212.589 QUADTO
+39.176 213.37 38.801 213.98 QUADTO
+38.426 214.589 37.41 215.448 QUADTO
+36.973 215.823 lineto
+35.582 216.995 35.363 218.073 QUADTO
+39.129 218.073 lineto
+39.129 219.089 lineto
+33.973 219.089 lineto
+closepath
+44.326 219.308 M
+42.982 219.308 42.154 218.042 QUADTO
+41.326 216.777 41.326 214.745 QUADTO
+41.326 212.698 42.162 211.448 QUADTO
+42.998 210.198 44.357 210.198 QUADTO
+45.717 210.198 46.553 211.448 QUADTO
+47.389 212.698 47.389 214.73 QUADTO
+47.389 216.808 46.553 218.058 QUADTO
+45.717 219.308 44.326 219.308 QUADTO
+closepath
+44.342 218.433 M
+46.17 218.433 46.17 214.714 QUADTO
+46.17 211.073 44.357 211.073 QUADTO
+42.561 211.073 42.561 214.745 QUADTO
+42.561 218.433 44.342 218.433 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 214.813 M
+54.148 214.813 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 191.31 M
+33.973 190.294 lineto
+34.473 189.122 36.004 187.731 QUADTO
+36.676 187.138 lineto
+37.941 185.981 37.941 184.841 QUADTO
+37.941 184.122 37.512 183.708 QUADTO
+37.082 183.294 36.316 183.294 QUADTO
+35.41 183.294 34.191 183.981 QUADTO
+34.191 182.966 lineto
+35.348 182.419 36.473 182.419 QUADTO
+37.691 182.419 38.434 183.075 QUADTO
+39.176 183.731 39.176 184.81 QUADTO
+39.176 185.591 38.801 186.2 QUADTO
+38.426 186.81 37.41 187.669 QUADTO
+36.973 188.044 lineto
+35.582 189.216 35.363 190.294 QUADTO
+39.129 190.294 lineto
+39.129 191.31 lineto
+33.973 191.31 lineto
+closepath
+42.014 191.341 M
+42.014 190.31 lineto
+42.889 190.653 43.654 190.653 QUADTO
+44.514 190.653 45.006 190.153 QUADTO
+45.498 189.653 45.498 188.763 QUADTO
+45.498 186.81 42.811 186.81 QUADTO
+42.498 186.81 42.17 186.856 QUADTO
+42.17 182.638 lineto
+46.561 182.638 lineto
+46.561 183.638 lineto
+43.186 183.638 lineto
+43.186 185.935 lineto
+44.857 185.935 45.795 186.7 QUADTO
+46.732 187.466 46.732 188.825 QUADTO
+46.732 190.091 45.873 190.81 QUADTO
+45.014 191.528 43.514 191.528 QUADTO
+42.857 191.528 42.014 191.341 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 187.034 M
+54.148 187.034 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 163.468 M
+34.191 162.389 lineto
+35.441 162.874 36.145 162.874 QUADTO
+36.973 162.874 37.496 162.389 QUADTO
+38.02 161.905 38.02 161.139 QUADTO
+38.02 159.311 35.457 159.311 QUADTO
+34.988 159.311 lineto
+34.988 158.53 lineto
+35.395 158.53 lineto
+37.801 158.53 37.801 156.843 QUADTO
+37.801 155.514 36.223 155.514 QUADTO
+35.348 155.514 34.316 155.999 QUADTO
+34.316 154.983 lineto
+35.332 154.639 36.301 154.639 QUADTO
+38.957 154.639 38.957 156.655 QUADTO
+38.957 158.186 37.145 158.827 QUADTO
+39.254 159.311 39.254 161.124 QUADTO
+39.254 162.358 38.441 163.053 QUADTO
+37.629 163.749 36.223 163.749 QUADTO
+35.41 163.749 34.191 163.468 QUADTO
+closepath
+44.326 163.749 M
+42.982 163.749 42.154 162.483 QUADTO
+41.326 161.218 41.326 159.186 QUADTO
+41.326 157.139 42.162 155.889 QUADTO
+42.998 154.639 44.357 154.639 QUADTO
+45.717 154.639 46.553 155.889 QUADTO
+47.389 157.139 47.389 159.171 QUADTO
+47.389 161.249 46.553 162.499 QUADTO
+45.717 163.749 44.326 163.749 QUADTO
+closepath
+44.342 162.874 M
+46.17 162.874 46.17 159.155 QUADTO
+46.17 155.514 44.357 155.514 QUADTO
+42.561 155.514 42.561 159.186 QUADTO
+42.561 162.874 44.342 162.874 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 159.254 M
+54.148 159.254 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 135.688 M
+34.191 134.61 lineto
+35.441 135.094 36.145 135.094 QUADTO
+36.973 135.094 37.496 134.61 QUADTO
+38.02 134.126 38.02 133.36 QUADTO
+38.02 131.532 35.457 131.532 QUADTO
+34.988 131.532 lineto
+34.988 130.751 lineto
+35.395 130.751 lineto
+37.801 130.751 37.801 129.063 QUADTO
+37.801 127.735 36.223 127.735 QUADTO
+35.348 127.735 34.316 128.219 QUADTO
+34.316 127.204 lineto
+35.332 126.86 36.301 126.86 QUADTO
+38.957 126.86 38.957 128.876 QUADTO
+38.957 130.407 37.145 131.047 QUADTO
+39.254 131.532 39.254 133.344 QUADTO
+39.254 134.579 38.441 135.274 QUADTO
+37.629 135.969 36.223 135.969 QUADTO
+35.41 135.969 34.191 135.688 QUADTO
+closepath
+42.014 135.782 M
+42.014 134.751 lineto
+42.889 135.094 43.654 135.094 QUADTO
+44.514 135.094 45.006 134.594 QUADTO
+45.498 134.094 45.498 133.204 QUADTO
+45.498 131.251 42.811 131.251 QUADTO
+42.498 131.251 42.17 131.297 QUADTO
+42.17 127.079 lineto
+46.561 127.079 lineto
+46.561 128.079 lineto
+43.186 128.079 lineto
+43.186 130.376 lineto
+44.857 130.376 45.795 131.141 QUADTO
+46.732 131.907 46.732 133.266 QUADTO
+46.732 134.532 45.873 135.251 QUADTO
+45.014 135.969 43.514 135.969 QUADTO
+42.857 135.969 42.014 135.782 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 131.475 M
+54.148 131.475 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 107.971 M
+37.488 105.518 lineto
+33.582 105.518 lineto
+33.582 104.643 lineto
+37.488 99.299 lineto
+38.582 99.299 lineto
+38.582 104.565 lineto
+39.738 104.565 lineto
+39.738 105.518 lineto
+38.582 105.518 lineto
+38.582 107.971 lineto
+37.488 107.971 lineto
+closepath
+34.723 104.565 M
+37.566 104.565 lineto
+37.566 100.721 lineto
+34.723 104.565 lineto
+closepath
+44.326 108.19 M
+42.982 108.19 42.154 106.924 QUADTO
+41.326 105.659 41.326 103.627 QUADTO
+41.326 101.58 42.162 100.33 QUADTO
+42.998 99.08 44.357 99.08 QUADTO
+45.717 99.08 46.553 100.33 QUADTO
+47.389 101.58 47.389 103.612 QUADTO
+47.389 105.69 46.553 106.94 QUADTO
+45.717 108.19 44.326 108.19 QUADTO
+closepath
+44.342 107.315 M
+46.17 107.315 46.17 103.596 QUADTO
+46.17 99.955 44.357 99.955 QUADTO
+42.561 99.955 42.561 103.627 QUADTO
+42.561 107.315 44.342 107.315 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 103.695 M
+54.148 103.695 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+37.488 80.192 M
+37.488 77.738 lineto
+33.582 77.738 lineto
+33.582 76.863 lineto
+37.488 71.52 lineto
+38.582 71.52 lineto
+38.582 76.785 lineto
+39.738 76.785 lineto
+39.738 77.738 lineto
+38.582 77.738 lineto
+38.582 80.192 lineto
+37.488 80.192 lineto
+closepath
+34.723 76.785 M
+37.566 76.785 lineto
+37.566 72.942 lineto
+34.723 76.785 lineto
+closepath
+42.014 80.223 M
+42.014 79.192 lineto
+42.889 79.535 43.654 79.535 QUADTO
+44.514 79.535 45.006 79.035 QUADTO
+45.498 78.535 45.498 77.645 QUADTO
+45.498 75.692 42.811 75.692 QUADTO
+42.498 75.692 42.17 75.738 QUADTO
+42.17 71.52 lineto
+46.561 71.52 lineto
+46.561 72.52 lineto
+43.186 72.52 lineto
+43.186 74.817 lineto
+44.857 74.817 45.795 75.582 QUADTO
+46.732 76.348 46.732 77.707 QUADTO
+46.732 78.973 45.873 79.692 QUADTO
+45.014 80.41 43.514 80.41 QUADTO
+42.857 80.41 42.014 80.223 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 75.916 M
+54.148 75.916 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.426 52.443 M
+34.426 51.412 lineto
+35.301 51.756 36.066 51.756 QUADTO
+36.926 51.756 37.418 51.256 QUADTO
+37.91 50.756 37.91 49.865 QUADTO
+37.91 47.912 35.223 47.912 QUADTO
+34.91 47.912 34.582 47.959 QUADTO
+34.582 43.74 lineto
+38.973 43.74 lineto
+38.973 44.74 lineto
+35.598 44.74 lineto
+35.598 47.037 lineto
+37.27 47.037 38.207 47.803 QUADTO
+39.145 48.568 39.145 49.928 QUADTO
+39.145 51.193 38.285 51.912 QUADTO
+37.426 52.631 35.926 52.631 QUADTO
+35.27 52.631 34.426 52.443 QUADTO
+closepath
+44.326 52.631 M
+42.982 52.631 42.154 51.365 QUADTO
+41.326 50.1 41.326 48.068 QUADTO
+41.326 46.021 42.162 44.771 QUADTO
+42.998 43.521 44.357 43.521 QUADTO
+45.717 43.521 46.553 44.771 QUADTO
+47.389 46.021 47.389 48.053 QUADTO
+47.389 50.131 46.553 51.381 QUADTO
+45.717 52.631 44.326 52.631 QUADTO
+closepath
+44.342 51.756 M
+46.17 51.756 46.17 48.037 QUADTO
+46.17 44.396 44.357 44.396 QUADTO
+42.561 44.396 42.561 48.068 QUADTO
+42.561 51.756 44.342 51.756 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+52.148 48.136 M
+54.148 48.136 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -160.60265 199.57533] concat
+newpath
+199.575 160.603 M
+199.575 560.603 lineto
+-200.425 560.603 lineto
+-200.425 160.603 lineto
+199.575 160.603 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-35.833 185.077 M
+-35.833 174.28 lineto
+-33.817 174.28 lineto
+-33.817 185.077 lineto
+-35.833 185.077 lineto
+closepath
+-28.124 185.249 M
+-29.889 185.249 -30.92 184.187 QUADTO
+-31.952 183.124 -31.952 181.327 QUADTO
+-31.952 179.499 -30.913 178.452 QUADTO
+-29.874 177.405 -28.077 177.405 QUADTO
+-26.28 177.405 -25.241 178.452 QUADTO
+-24.202 179.499 -24.202 181.312 QUADTO
+-24.202 183.155 -25.249 184.202 QUADTO
+-26.295 185.249 -28.124 185.249 QUADTO
+closepath
+-28.092 183.983 M
+-26.358 183.983 -26.358 181.312 QUADTO
+-26.358 180.093 -26.819 179.382 QUADTO
+-27.28 178.671 -28.077 178.671 QUADTO
+-28.874 178.671 -29.342 179.382 QUADTO
+-29.811 180.093 -29.811 181.327 QUADTO
+-29.811 182.546 -29.35 183.265 QUADTO
+-28.889 183.983 -28.092 183.983 QUADTO
+closepath
+-18.666 184.265 M
+-19.666 185.249 -20.823 185.249 QUADTO
+-21.807 185.249 -22.424 184.648 QUADTO
+-23.041 184.046 -23.041 183.093 QUADTO
+-23.041 181.843 -22.049 181.171 QUADTO
+-21.057 180.499 -19.198 180.499 QUADTO
+-18.666 180.499 lineto
+-18.666 179.812 lineto
+-18.666 178.64 -19.995 178.64 QUADTO
+-21.182 178.64 -22.385 179.312 QUADTO
+-22.385 177.921 lineto
+-21.01 177.405 -19.666 177.405 QUADTO
+-16.713 177.405 -16.713 179.749 QUADTO
+-16.713 183.062 lineto
+-16.713 183.952 -16.151 183.952 QUADTO
+-16.057 183.952 -15.885 183.921 QUADTO
+-15.838 185.062 lineto
+-16.479 185.249 -16.979 185.249 QUADTO
+-18.213 185.249 -18.573 184.265 QUADTO
+-18.666 184.265 lineto
+closepath
+-18.666 183.187 M
+-18.666 181.655 lineto
+-19.135 181.655 lineto
+-21.104 181.655 -21.104 182.89 QUADTO
+-21.104 183.312 -20.823 183.593 QUADTO
+-20.541 183.874 -20.12 183.874 QUADTO
+-19.401 183.874 -18.666 183.187 QUADTO
+closepath
+-9.389 185.077 M
+-9.389 183.655 lineto
+-10.17 185.249 -11.842 185.249 QUADTO
+-13.186 185.249 -13.959 184.257 QUADTO
+-14.733 183.265 -14.733 181.53 QUADTO
+-14.733 179.64 -13.866 178.523 QUADTO
+-12.999 177.405 -11.53 177.405 QUADTO
+-10.342 177.405 -9.389 178.327 QUADTO
+-9.389 174.28 lineto
+-7.358 174.28 lineto
+-7.358 185.077 lineto
+-9.389 185.077 lineto
+closepath
+-9.389 179.53 M
+-10.124 178.718 -10.952 178.718 QUADTO
+-11.702 178.718 -12.139 179.437 QUADTO
+-12.577 180.155 -12.577 181.358 QUADTO
+-12.577 183.655 -11.108 183.655 QUADTO
+-10.202 183.655 -9.389 182.499 QUADTO
+-9.389 179.53 lineto
+closepath
+0.001 185.077 M
+0.001 178.843 lineto
+-1.045 178.843 lineto
+-1.045 177.577 lineto
+0.001 177.577 lineto
+0.001 177.03 lineto
+0.001 174.108 2.767 174.108 QUADTO
+3.658 174.108 4.611 174.374 QUADTO
+4.611 175.733 lineto
+3.751 175.374 3.064 175.374 QUADTO
+2.017 175.374 2.017 176.952 QUADTO
+2.017 177.577 lineto
+3.923 177.577 lineto
+3.923 178.843 lineto
+2.017 178.843 lineto
+2.017 185.077 lineto
+0.001 185.077 lineto
+closepath
+5.586 185.077 M
+5.586 177.577 lineto
+7.602 177.577 lineto
+7.602 178.983 lineto
+8.399 177.405 10.008 177.405 QUADTO
+10.196 177.405 10.383 177.437 QUADTO
+10.383 179.249 lineto
+9.946 179.093 9.571 179.093 QUADTO
+8.368 179.093 7.602 180.312 QUADTO
+7.602 185.077 lineto
+5.586 185.077 lineto
+closepath
+15.623 184.265 M
+14.623 185.249 13.466 185.249 QUADTO
+12.482 185.249 11.865 184.648 QUADTO
+11.248 184.046 11.248 183.093 QUADTO
+11.248 181.843 12.24 181.171 QUADTO
+13.232 180.499 15.091 180.499 QUADTO
+15.623 180.499 lineto
+15.623 179.812 lineto
+15.623 178.64 14.294 178.64 QUADTO
+13.107 178.64 11.904 179.312 QUADTO
+11.904 177.921 lineto
+13.279 177.405 14.623 177.405 QUADTO
+17.576 177.405 17.576 179.749 QUADTO
+17.576 183.062 lineto
+17.576 183.952 18.138 183.952 QUADTO
+18.232 183.952 18.404 183.921 QUADTO
+18.451 185.062 lineto
+17.81 185.249 17.31 185.249 QUADTO
+16.076 185.249 15.716 184.265 QUADTO
+15.623 184.265 lineto
+closepath
+15.623 183.187 M
+15.623 181.655 lineto
+15.154 181.655 lineto
+13.185 181.655 13.185 182.89 QUADTO
+13.185 183.312 13.466 183.593 QUADTO
+13.748 183.874 14.169 183.874 QUADTO
+14.888 183.874 15.623 183.187 QUADTO
+closepath
+25.712 184.905 M
+24.462 185.249 23.384 185.249 QUADTO
+21.587 185.249 20.548 184.194 QUADTO
+19.509 183.14 19.509 181.312 QUADTO
+19.509 179.483 20.58 178.444 QUADTO
+21.65 177.405 23.541 177.405 QUADTO
+24.462 177.405 25.65 177.687 QUADTO
+25.65 179.155 lineto
+24.416 178.749 23.666 178.749 QUADTO
+22.759 178.749 22.205 179.452 QUADTO
+21.65 180.155 21.65 181.296 QUADTO
+21.65 182.483 22.251 183.194 QUADTO
+22.853 183.905 23.837 183.905 QUADTO
+24.759 183.905 25.712 183.515 QUADTO
+25.712 184.905 lineto
+closepath
+31.507 185.03 M
+30.773 185.249 30.367 185.249 QUADTO
+27.726 185.249 27.726 182.78 QUADTO
+27.726 178.843 lineto
+26.882 178.843 lineto
+26.882 177.577 lineto
+27.726 177.577 lineto
+27.726 176.312 lineto
+29.757 176.077 lineto
+29.757 177.577 lineto
+31.351 177.577 lineto
+31.351 178.843 lineto
+29.757 178.843 lineto
+29.757 182.515 lineto
+29.757 183.905 30.882 183.905 QUADTO
+31.132 183.905 31.507 183.812 QUADTO
+31.507 185.03 lineto
+closepath
+33.306 185.077 M
+33.306 177.577 lineto
+35.322 177.577 lineto
+35.322 185.077 lineto
+33.306 185.077 lineto
+closepath
+33.306 176.312 M
+33.306 174.624 lineto
+35.322 174.624 lineto
+35.322 176.312 lineto
+33.306 176.312 lineto
+closepath
+41.015 185.249 M
+39.25 185.249 38.218 184.187 QUADTO
+37.187 183.124 37.187 181.327 QUADTO
+37.187 179.499 38.226 178.452 QUADTO
+39.265 177.405 41.062 177.405 QUADTO
+42.859 177.405 43.898 178.452 QUADTO
+44.937 179.499 44.937 181.312 QUADTO
+44.937 183.155 43.89 184.202 QUADTO
+42.843 185.249 41.015 185.249 QUADTO
+closepath
+41.046 183.983 M
+42.781 183.983 42.781 181.312 QUADTO
+42.781 180.093 42.32 179.382 QUADTO
+41.859 178.671 41.062 178.671 QUADTO
+40.265 178.671 39.796 179.382 QUADTO
+39.328 180.093 39.328 181.327 QUADTO
+39.328 182.546 39.789 183.265 QUADTO
+40.25 183.983 41.046 183.983 QUADTO
+closepath
+46.8 185.077 M
+46.8 177.577 lineto
+48.816 177.577 lineto
+48.816 178.983 lineto
+49.816 177.405 51.378 177.405 QUADTO
+52.378 177.405 52.964 178.038 QUADTO
+53.55 178.671 53.55 179.765 QUADTO
+53.55 185.077 lineto
+51.519 185.077 lineto
+51.519 180.265 lineto
+51.519 178.999 50.675 178.999 QUADTO
+49.707 178.999 48.816 180.358 QUADTO
+48.816 185.077 lineto
+46.8 185.077 lineto
+closepath
+59.245 174.202 M
+59.245 175.499 lineto
+57.417 177.343 57.417 180.687 QUADTO
+57.417 184.046 59.245 185.874 QUADTO
+59.245 187.187 lineto
+57.573 186.28 56.573 184.507 QUADTO
+55.573 182.733 55.573 180.687 QUADTO
+55.573 178.64 56.557 176.89 QUADTO
+57.542 175.14 59.245 174.202 QUADTO
+closepath
+60.746 185.327 M
+68.699 174.702 lineto
+70.058 174.702 lineto
+62.105 185.327 lineto
+60.746 185.327 lineto
+closepath
+62.464 180.015 M
+61.371 180.015 60.73 179.335 QUADTO
+60.089 178.655 60.089 177.483 QUADTO
+60.089 176.312 60.73 175.632 QUADTO
+61.371 174.952 62.496 174.952 QUADTO
+63.605 174.952 64.253 175.632 QUADTO
+64.902 176.312 64.902 177.483 QUADTO
+64.902 178.671 64.253 179.343 QUADTO
+63.605 180.015 62.464 180.015 QUADTO
+closepath
+62.48 178.999 M
+63.371 178.999 63.371 177.483 QUADTO
+63.371 175.968 62.496 175.968 QUADTO
+61.605 175.968 61.605 177.483 QUADTO
+61.605 178.999 62.48 178.999 QUADTO
+closepath
+68.292 185.077 M
+67.183 185.077 66.542 184.398 QUADTO
+65.902 183.718 65.902 182.546 QUADTO
+65.902 181.358 66.55 180.687 QUADTO
+67.199 180.015 68.308 180.015 QUADTO
+69.433 180.015 70.074 180.687 QUADTO
+70.714 181.358 70.714 182.546 QUADTO
+70.714 183.733 70.074 184.405 QUADTO
+69.433 185.077 68.292 185.077 QUADTO
+closepath
+68.292 184.062 M
+69.199 184.062 69.199 182.546 QUADTO
+69.199 181.03 68.308 181.03 QUADTO
+67.417 181.03 67.417 182.546 QUADTO
+67.417 184.062 68.292 184.062 QUADTO
+closepath
+71.367 174.202 M
+71.367 175.499 lineto
+73.195 177.343 73.195 180.687 QUADTO
+73.195 184.046 71.367 185.874 QUADTO
+71.367 187.187 lineto
+73.039 186.28 74.039 184.507 QUADTO
+75.039 182.733 75.039 180.687 QUADTO
+75.039 178.64 74.054 176.89 QUADTO
+73.07 175.14 71.367 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+65.645 34.247 M
+65.645 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+110.776 34.247 M
+110.776 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+137.176 34.247 M
+137.176 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+155.907 34.247 M
+155.907 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+170.436 34.247 M
+170.436 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+182.307 34.247 M
+182.307 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+192.344 34.247 M
+192.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+201.038 34.247 M
+201.038 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+208.707 34.247 M
+208.707 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+215.567 34.247 M
+215.567 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+260.699 34.247 M
+260.699 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+287.099 34.247 M
+287.099 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+305.83 34.247 M
+305.83 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+320.359 34.247 M
+320.359 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+332.23 34.247 M
+332.23 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+342.267 34.247 M
+342.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+350.961 34.247 M
+350.961 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+358.63 34.247 M
+358.63 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.49 34.247 M
+365.49 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 298.152 M
+388 298.152 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 270.372 M
+388 270.372 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 242.593 M
+388 242.593 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 214.813 M
+388 214.813 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 187.034 M
+388 187.034 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 159.254 M
+388 159.254 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 131.475 M
+388 131.475 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 103.695 M
+388 103.695 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 75.916 M
+388 75.916 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+58.148 48.136 M
+388 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 111.251 M
+92.045 68.86 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 68.86 M
+110.776 90.583 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 90.583 M
+137.176 89.472 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 89.472 M
+155.907 128.308 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 128.308 M
+182.307 61.832 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 61.832 M
+201.038 115.418 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 115.418 M
+227.439 75.055 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 75.055 M
+246.17 112.001 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 112.001 M
+272.57 68.277 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 68.277 M
+291.301 106.334 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 106.334 M
+317.701 87.861 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 87.861 M
+336.432 110.307 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 110.307 M
+352.569 157.282 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 157.282 M
+365.49 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+65.645 139.503 M
+92.045 140.337 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+92.045 140.337 M
+110.776 139.42 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+110.776 139.42 M
+137.176 139.17 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.176 139.17 M
+155.907 140.337 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+155.907 140.337 M
+182.307 138.281 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.307 138.281 M
+201.038 138.392 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+201.038 138.392 M
+227.439 137.697 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+227.439 137.697 M
+246.17 137.614 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+246.17 137.614 M
+272.57 137.114 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+272.57 137.114 M
+291.301 136.725 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+291.301 136.725 M
+317.701 133.808 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.701 133.808 M
+336.432 132.419 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+336.432 132.419 M
+352.569 131.308 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+352.569 131.308 M
+365.49 131.669 lineto
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+68.645 111.251 M
+68.645 112.908 67.301 114.251 65.645 114.251 curveto
+63.988 114.251 62.645 112.908 62.645 111.251 curveto
+62.645 109.595 63.988 108.251 65.645 108.251 curveto
+67.301 108.251 68.645 109.595 68.645 111.251 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+68.645 111.251 M
+68.645 112.908 67.301 114.251 65.645 114.251 curveto
+63.988 114.251 62.645 112.908 62.645 111.251 curveto
+62.645 109.595 63.988 108.251 65.645 108.251 curveto
+67.301 108.251 68.645 109.595 68.645 111.251 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+95.045 68.86 M
+95.045 70.517 93.702 71.86 92.045 71.86 curveto
+90.388 71.86 89.045 70.517 89.045 68.86 curveto
+89.045 67.203 90.388 65.86 92.045 65.86 curveto
+93.702 65.86 95.045 67.203 95.045 68.86 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+95.045 68.86 M
+95.045 70.517 93.702 71.86 92.045 71.86 curveto
+90.388 71.86 89.045 70.517 89.045 68.86 curveto
+89.045 67.203 90.388 65.86 92.045 65.86 curveto
+93.702 65.86 95.045 67.203 95.045 68.86 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+113.776 90.583 M
+113.776 92.24 112.433 93.583 110.776 93.583 curveto
+109.119 93.583 107.776 92.24 107.776 90.583 curveto
+107.776 88.927 109.119 87.583 110.776 87.583 curveto
+112.433 87.583 113.776 88.927 113.776 90.583 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+113.776 90.583 M
+113.776 92.24 112.433 93.583 110.776 93.583 curveto
+109.119 93.583 107.776 92.24 107.776 90.583 curveto
+107.776 88.927 109.119 87.583 110.776 87.583 curveto
+112.433 87.583 113.776 88.927 113.776 90.583 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+140.176 89.472 M
+140.176 91.129 138.833 92.472 137.176 92.472 curveto
+135.519 92.472 134.176 91.129 134.176 89.472 curveto
+134.176 87.815 135.519 86.472 137.176 86.472 curveto
+138.833 86.472 140.176 87.815 140.176 89.472 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+140.176 89.472 M
+140.176 91.129 138.833 92.472 137.176 92.472 curveto
+135.519 92.472 134.176 91.129 134.176 89.472 curveto
+134.176 87.815 135.519 86.472 137.176 86.472 curveto
+138.833 86.472 140.176 87.815 140.176 89.472 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+158.907 128.308 M
+158.907 129.965 157.564 131.308 155.907 131.308 curveto
+154.25 131.308 152.907 129.965 152.907 128.308 curveto
+152.907 126.651 154.25 125.308 155.907 125.308 curveto
+157.564 125.308 158.907 126.651 158.907 128.308 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+158.907 128.308 M
+158.907 129.965 157.564 131.308 155.907 131.308 curveto
+154.25 131.308 152.907 129.965 152.907 128.308 curveto
+152.907 126.651 154.25 125.308 155.907 125.308 curveto
+157.564 125.308 158.907 126.651 158.907 128.308 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+185.307 61.832 M
+185.307 63.489 183.964 64.832 182.307 64.832 curveto
+180.65 64.832 179.307 63.489 179.307 61.832 curveto
+179.307 60.175 180.65 58.832 182.307 58.832 curveto
+183.964 58.832 185.307 60.175 185.307 61.832 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+185.307 61.832 M
+185.307 63.489 183.964 64.832 182.307 64.832 curveto
+180.65 64.832 179.307 63.489 179.307 61.832 curveto
+179.307 60.175 180.65 58.832 182.307 58.832 curveto
+183.964 58.832 185.307 60.175 185.307 61.832 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+204.038 115.418 M
+204.038 117.075 202.695 118.418 201.038 118.418 curveto
+199.382 118.418 198.038 117.075 198.038 115.418 curveto
+198.038 113.761 199.382 112.418 201.038 112.418 curveto
+202.695 112.418 204.038 113.761 204.038 115.418 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.038 115.418 M
+204.038 117.075 202.695 118.418 201.038 118.418 curveto
+199.382 118.418 198.038 117.075 198.038 115.418 curveto
+198.038 113.761 199.382 112.418 201.038 112.418 curveto
+202.695 112.418 204.038 113.761 204.038 115.418 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+230.439 75.055 M
+230.439 76.712 229.095 78.055 227.439 78.055 curveto
+225.782 78.055 224.439 76.712 224.439 75.055 curveto
+224.439 73.398 225.782 72.055 227.439 72.055 curveto
+229.095 72.055 230.439 73.398 230.439 75.055 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+230.439 75.055 M
+230.439 76.712 229.095 78.055 227.439 78.055 curveto
+225.782 78.055 224.439 76.712 224.439 75.055 curveto
+224.439 73.398 225.782 72.055 227.439 72.055 curveto
+229.095 72.055 230.439 73.398 230.439 75.055 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+249.17 112.001 M
+249.17 113.658 247.827 115.001 246.17 115.001 curveto
+244.513 115.001 243.17 113.658 243.17 112.001 curveto
+243.17 110.345 244.513 109.001 246.17 109.001 curveto
+247.827 109.001 249.17 110.345 249.17 112.001 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+249.17 112.001 M
+249.17 113.658 247.827 115.001 246.17 115.001 curveto
+244.513 115.001 243.17 113.658 243.17 112.001 curveto
+243.17 110.345 244.513 109.001 246.17 109.001 curveto
+247.827 109.001 249.17 110.345 249.17 112.001 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+275.57 68.277 M
+275.57 69.933 274.227 71.277 272.57 71.277 curveto
+270.913 71.277 269.57 69.933 269.57 68.277 curveto
+269.57 66.62 270.913 65.277 272.57 65.277 curveto
+274.227 65.277 275.57 66.62 275.57 68.277 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+275.57 68.277 M
+275.57 69.933 274.227 71.277 272.57 71.277 curveto
+270.913 71.277 269.57 69.933 269.57 68.277 curveto
+269.57 66.62 270.913 65.277 272.57 65.277 curveto
+274.227 65.277 275.57 66.62 275.57 68.277 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+294.301 106.334 M
+294.301 107.991 292.958 109.334 291.301 109.334 curveto
+289.644 109.334 288.301 107.991 288.301 106.334 curveto
+288.301 104.678 289.644 103.334 291.301 103.334 curveto
+292.958 103.334 294.301 104.678 294.301 106.334 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+294.301 106.334 M
+294.301 107.991 292.958 109.334 291.301 109.334 curveto
+289.644 109.334 288.301 107.991 288.301 106.334 curveto
+288.301 104.678 289.644 103.334 291.301 103.334 curveto
+292.958 103.334 294.301 104.678 294.301 106.334 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+320.701 87.861 M
+320.701 89.518 319.358 90.861 317.701 90.861 curveto
+316.044 90.861 314.701 89.518 314.701 87.861 curveto
+314.701 86.204 316.044 84.861 317.701 84.861 curveto
+319.358 84.861 320.701 86.204 320.701 87.861 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+320.701 87.861 M
+320.701 89.518 319.358 90.861 317.701 90.861 curveto
+316.044 90.861 314.701 89.518 314.701 87.861 curveto
+314.701 86.204 316.044 84.861 317.701 84.861 curveto
+319.358 84.861 320.701 86.204 320.701 87.861 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+339.432 110.307 M
+339.432 111.964 338.089 113.307 336.432 113.307 curveto
+334.775 113.307 333.432 111.964 333.432 110.307 curveto
+333.432 108.65 334.775 107.307 336.432 107.307 curveto
+338.089 107.307 339.432 108.65 339.432 110.307 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+339.432 110.307 M
+339.432 111.964 338.089 113.307 336.432 113.307 curveto
+334.775 113.307 333.432 111.964 333.432 110.307 curveto
+333.432 108.65 334.775 107.307 336.432 107.307 curveto
+338.089 107.307 339.432 108.65 339.432 110.307 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+355.569 157.282 M
+355.569 158.939 354.226 160.282 352.569 160.282 curveto
+350.912 160.282 349.569 158.939 349.569 157.282 curveto
+349.569 155.625 350.912 154.282 352.569 154.282 curveto
+354.226 154.282 355.569 155.625 355.569 157.282 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+355.569 157.282 M
+355.569 158.939 354.226 160.282 352.569 160.282 curveto
+350.912 160.282 349.569 158.939 349.569 157.282 curveto
+349.569 155.625 350.912 154.282 352.569 154.282 curveto
+354.226 154.282 355.569 155.625 355.569 157.282 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+368.49 48.136 M
+368.49 49.793 367.147 51.136 365.49 51.136 curveto
+363.833 51.136 362.49 49.793 362.49 48.136 curveto
+362.49 46.48 363.833 45.136 365.49 45.136 curveto
+367.147 45.136 368.49 46.48 368.49 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+368.49 48.136 M
+368.49 49.793 367.147 51.136 365.49 51.136 curveto
+363.833 51.136 362.49 49.793 362.49 48.136 curveto
+362.49 46.48 363.833 45.136 365.49 45.136 curveto
+367.147 45.136 368.49 46.48 368.49 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+62.645 136.503 M
+68.645 136.503 lineto
+68.645 142.503 lineto
+62.645 142.503 lineto
+62.645 136.503 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+62.645 136.503 M
+68.645 136.503 lineto
+68.645 142.503 lineto
+62.645 142.503 lineto
+62.645 136.503 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+89.045 137.337 M
+95.045 137.337 lineto
+95.045 143.337 lineto
+89.045 143.337 lineto
+89.045 137.337 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+89.045 137.337 M
+95.045 137.337 lineto
+95.045 143.337 lineto
+89.045 143.337 lineto
+89.045 137.337 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+107.776 136.42 M
+113.776 136.42 lineto
+113.776 142.42 lineto
+107.776 142.42 lineto
+107.776 136.42 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+107.776 136.42 M
+113.776 136.42 lineto
+113.776 142.42 lineto
+107.776 142.42 lineto
+107.776 136.42 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+134.176 136.17 M
+140.176 136.17 lineto
+140.176 142.17 lineto
+134.176 142.17 lineto
+134.176 136.17 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.176 136.17 M
+140.176 136.17 lineto
+140.176 142.17 lineto
+134.176 142.17 lineto
+134.176 136.17 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+152.907 137.337 M
+158.907 137.337 lineto
+158.907 143.337 lineto
+152.907 143.337 lineto
+152.907 137.337 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+152.907 137.337 M
+158.907 137.337 lineto
+158.907 143.337 lineto
+152.907 143.337 lineto
+152.907 137.337 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+179.307 135.281 M
+185.307 135.281 lineto
+185.307 141.281 lineto
+179.307 141.281 lineto
+179.307 135.281 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+179.307 135.281 M
+185.307 135.281 lineto
+185.307 141.281 lineto
+179.307 141.281 lineto
+179.307 135.281 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+198.038 135.392 M
+204.038 135.392 lineto
+204.038 141.392 lineto
+198.038 141.392 lineto
+198.038 135.392 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+198.038 135.392 M
+204.038 135.392 lineto
+204.038 141.392 lineto
+198.038 141.392 lineto
+198.038 135.392 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+224.439 134.697 M
+230.439 134.697 lineto
+230.439 140.697 lineto
+224.439 140.697 lineto
+224.439 134.697 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+224.439 134.697 M
+230.439 134.697 lineto
+230.439 140.697 lineto
+224.439 140.697 lineto
+224.439 134.697 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+243.17 134.614 M
+249.17 134.614 lineto
+249.17 140.614 lineto
+243.17 140.614 lineto
+243.17 134.614 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+243.17 134.614 M
+249.17 134.614 lineto
+249.17 140.614 lineto
+243.17 140.614 lineto
+243.17 134.614 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+269.57 134.114 M
+275.57 134.114 lineto
+275.57 140.114 lineto
+269.57 140.114 lineto
+269.57 134.114 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+269.57 134.114 M
+275.57 134.114 lineto
+275.57 140.114 lineto
+269.57 140.114 lineto
+269.57 134.114 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+288.301 133.725 M
+294.301 133.725 lineto
+294.301 139.725 lineto
+288.301 139.725 lineto
+288.301 133.725 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+288.301 133.725 M
+294.301 133.725 lineto
+294.301 139.725 lineto
+288.301 139.725 lineto
+288.301 133.725 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+314.701 130.808 M
+320.701 130.808 lineto
+320.701 136.808 lineto
+314.701 136.808 lineto
+314.701 130.808 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+314.701 130.808 M
+320.701 130.808 lineto
+320.701 136.808 lineto
+314.701 136.808 lineto
+314.701 130.808 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+333.432 129.419 M
+339.432 129.419 lineto
+339.432 135.419 lineto
+333.432 135.419 lineto
+333.432 129.419 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+333.432 129.419 M
+339.432 129.419 lineto
+339.432 135.419 lineto
+333.432 135.419 lineto
+333.432 129.419 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+349.569 128.308 M
+355.569 128.308 lineto
+355.569 134.308 lineto
+349.569 134.308 lineto
+349.569 128.308 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+349.569 128.308 M
+355.569 128.308 lineto
+355.569 134.308 lineto
+349.569 134.308 lineto
+349.569 128.308 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+362.49 128.669 M
+368.49 128.669 lineto
+368.49 134.669 lineto
+362.49 134.669 lineto
+362.49 128.669 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+58.148 34.247 M
+58.148 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+362.49 128.669 M
+368.49 128.669 lineto
+368.49 134.669 lineto
+362.49 134.669 lineto
+362.49 128.669 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+58.148 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+58.148 325.931 lineto
+58.148 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc03kp01.png b/sim/gobs/wiki/dc03kp01.png
index fe5eb78..5c3b61e 100644
Binary files a/sim/gobs/wiki/dc03kp01.png and b/sim/gobs/wiki/dc03kp01.png differ
diff --git a/sim/gobs/wiki/dc03kp02.eps b/sim/gobs/wiki/dc03kp02.eps
new file mode 100644
index 0000000..ba65891
--- /dev/null
+++ b/sim/gobs/wiki/dc03kp02.eps
@@ -0,0 +1,4836 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-21T17:29:59
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+69.533 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+70.995 345.481 M
+70.995 344.606 lineto
+72.73 344.606 lineto
+72.73 337.762 lineto
+70.995 338.2 lineto
+70.995 337.309 lineto
+73.886 336.59 lineto
+73.886 344.606 lineto
+75.62 344.606 lineto
+75.62 345.481 lineto
+70.995 345.481 lineto
+closepath
+80.536 345.7 M
+79.193 345.7 78.364 344.434 QUADTO
+77.536 343.168 77.536 341.137 QUADTO
+77.536 339.09 78.372 337.84 QUADTO
+79.208 336.59 80.568 336.59 QUADTO
+81.927 336.59 82.763 337.84 QUADTO
+83.599 339.09 83.599 341.122 QUADTO
+83.599 343.2 82.763 344.45 QUADTO
+81.927 345.7 80.536 345.7 QUADTO
+closepath
+80.552 344.825 M
+82.38 344.825 82.38 341.106 QUADTO
+82.38 337.465 80.568 337.465 QUADTO
+78.771 337.465 78.771 341.137 QUADTO
+78.771 344.825 80.552 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+76.771 331.931 M
+76.771 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+113.756 345.481 M
+113.756 344.465 lineto
+114.256 343.293 115.788 341.903 QUADTO
+116.459 341.309 lineto
+117.725 340.153 117.725 339.012 QUADTO
+117.725 338.293 117.295 337.879 QUADTO
+116.866 337.465 116.1 337.465 QUADTO
+115.194 337.465 113.975 338.153 QUADTO
+113.975 337.137 lineto
+115.131 336.59 116.256 336.59 QUADTO
+117.475 336.59 118.217 337.247 QUADTO
+118.959 337.903 118.959 338.981 QUADTO
+118.959 339.762 118.584 340.372 QUADTO
+118.209 340.981 117.194 341.84 QUADTO
+116.756 342.215 lineto
+115.366 343.387 115.147 344.465 QUADTO
+118.913 344.465 lineto
+118.913 345.481 lineto
+113.756 345.481 lineto
+closepath
+124.11 345.7 M
+122.766 345.7 121.938 344.434 QUADTO
+121.11 343.168 121.11 341.137 QUADTO
+121.11 339.09 121.946 337.84 QUADTO
+122.782 336.59 124.141 336.59 QUADTO
+125.5 336.59 126.336 337.84 QUADTO
+127.172 339.09 127.172 341.122 QUADTO
+127.172 343.2 126.336 344.45 QUADTO
+125.5 345.7 124.11 345.7 QUADTO
+closepath
+124.125 344.825 M
+125.954 344.825 125.954 341.106 QUADTO
+125.954 337.465 124.141 337.465 QUADTO
+122.344 337.465 122.344 341.137 QUADTO
+122.344 344.825 124.125 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+120.344 331.931 M
+120.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+139.464 345.418 M
+139.464 344.34 lineto
+140.714 344.825 141.417 344.825 QUADTO
+142.245 344.825 142.769 344.34 QUADTO
+143.292 343.856 143.292 343.09 QUADTO
+143.292 341.262 140.73 341.262 QUADTO
+140.261 341.262 lineto
+140.261 340.481 lineto
+140.667 340.481 lineto
+143.073 340.481 143.073 338.793 QUADTO
+143.073 337.465 141.495 337.465 QUADTO
+140.62 337.465 139.589 337.95 QUADTO
+139.589 336.934 lineto
+140.605 336.59 141.573 336.59 QUADTO
+144.23 336.59 144.23 338.606 QUADTO
+144.23 340.137 142.417 340.778 QUADTO
+144.526 341.262 144.526 343.075 QUADTO
+144.526 344.309 143.714 345.004 QUADTO
+142.901 345.7 141.495 345.7 QUADTO
+140.683 345.7 139.464 345.418 QUADTO
+closepath
+149.599 345.7 M
+148.255 345.7 147.427 344.434 QUADTO
+146.599 343.168 146.599 341.137 QUADTO
+146.599 339.09 147.435 337.84 QUADTO
+148.271 336.59 149.63 336.59 QUADTO
+150.989 336.59 151.825 337.84 QUADTO
+152.661 339.09 152.661 341.122 QUADTO
+152.661 343.2 151.825 344.45 QUADTO
+150.989 345.7 149.599 345.7 QUADTO
+closepath
+149.614 344.825 M
+151.442 344.825 151.442 341.106 QUADTO
+151.442 337.465 149.63 337.465 QUADTO
+147.833 337.465 147.833 341.137 QUADTO
+147.833 344.825 149.614 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+145.833 331.931 M
+145.833 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+163.918 331.931 M
+163.918 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+177.945 331.931 M
+177.945 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+189.407 331.931 M
+189.407 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+199.097 331.931 M
+199.097 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+207.491 331.931 M
+207.491 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+214.896 331.931 M
+214.896 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+211.95 345.481 M
+211.95 344.606 lineto
+213.684 344.606 lineto
+213.684 337.762 lineto
+211.95 338.2 lineto
+211.95 337.309 lineto
+214.84 336.59 lineto
+214.84 344.606 lineto
+216.575 344.606 lineto
+216.575 345.481 lineto
+211.95 345.481 lineto
+closepath
+221.491 345.7 M
+220.147 345.7 219.319 344.434 QUADTO
+218.491 343.168 218.491 341.137 QUADTO
+218.491 339.09 219.327 337.84 QUADTO
+220.162 336.59 221.522 336.59 QUADTO
+222.881 336.59 223.717 337.84 QUADTO
+224.553 339.09 224.553 341.122 QUADTO
+224.553 343.2 223.717 344.45 QUADTO
+222.881 345.7 221.491 345.7 QUADTO
+closepath
+221.506 344.825 M
+223.334 344.825 223.334 341.106 QUADTO
+223.334 337.465 221.522 337.465 QUADTO
+219.725 337.465 219.725 341.137 QUADTO
+219.725 344.825 221.506 344.825 QUADTO
+closepath
+229.078 345.7 M
+227.735 345.7 226.907 344.434 QUADTO
+226.078 343.168 226.078 341.137 QUADTO
+226.078 339.09 226.914 337.84 QUADTO
+227.75 336.59 229.11 336.59 QUADTO
+230.469 336.59 231.305 337.84 QUADTO
+232.141 339.09 232.141 341.122 QUADTO
+232.141 343.2 231.305 344.45 QUADTO
+230.469 345.7 229.078 345.7 QUADTO
+closepath
+229.094 344.825 M
+230.922 344.825 230.922 341.106 QUADTO
+230.922 337.465 229.11 337.465 QUADTO
+227.313 337.465 227.313 341.137 QUADTO
+227.313 344.825 229.094 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+254.711 345.481 M
+254.711 344.465 lineto
+255.211 343.293 256.742 341.903 QUADTO
+257.414 341.309 lineto
+258.679 340.153 258.679 339.012 QUADTO
+258.679 338.293 258.25 337.879 QUADTO
+257.82 337.465 257.054 337.465 QUADTO
+256.148 337.465 254.929 338.153 QUADTO
+254.929 337.137 lineto
+256.086 336.59 257.211 336.59 QUADTO
+258.429 336.59 259.172 337.247 QUADTO
+259.914 337.903 259.914 338.981 QUADTO
+259.914 339.762 259.539 340.372 QUADTO
+259.164 340.981 258.148 341.84 QUADTO
+257.711 342.215 lineto
+256.32 343.387 256.101 344.465 QUADTO
+259.867 344.465 lineto
+259.867 345.481 lineto
+254.711 345.481 lineto
+closepath
+265.064 345.7 M
+263.72 345.7 262.892 344.434 QUADTO
+262.064 343.168 262.064 341.137 QUADTO
+262.064 339.09 262.9 337.84 QUADTO
+263.736 336.59 265.095 336.59 QUADTO
+266.455 336.59 267.291 337.84 QUADTO
+268.127 339.09 268.127 341.122 QUADTO
+268.127 343.2 267.291 344.45 QUADTO
+266.455 345.7 265.064 345.7 QUADTO
+closepath
+265.08 344.825 M
+266.908 344.825 266.908 341.106 QUADTO
+266.908 337.465 265.095 337.465 QUADTO
+263.299 337.465 263.299 341.137 QUADTO
+263.299 344.825 265.08 344.825 QUADTO
+closepath
+272.652 345.7 M
+271.308 345.7 270.48 344.434 QUADTO
+269.652 343.168 269.652 341.137 QUADTO
+269.652 339.09 270.488 337.84 QUADTO
+271.324 336.59 272.683 336.59 QUADTO
+274.043 336.59 274.879 337.84 QUADTO
+275.715 339.09 275.715 341.122 QUADTO
+275.715 343.2 274.879 344.45 QUADTO
+274.043 345.7 272.652 345.7 QUADTO
+closepath
+272.668 344.825 M
+274.496 344.825 274.496 341.106 QUADTO
+274.496 337.465 272.683 337.465 QUADTO
+270.886 337.465 270.886 341.137 QUADTO
+270.886 344.825 272.668 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.092 331.931 M
+265.092 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+290.581 331.931 M
+290.581 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+308.666 331.931 M
+308.666 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+322.694 331.931 M
+322.694 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+334.155 331.931 M
+334.155 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+343.845 331.931 M
+343.845 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+352.24 331.931 M
+352.24 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+359.644 331.931 M
+359.644 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.904 345.481 M
+352.904 344.606 lineto
+354.638 344.606 lineto
+354.638 337.762 lineto
+352.904 338.2 lineto
+352.904 337.309 lineto
+355.795 336.59 lineto
+355.795 344.606 lineto
+357.529 344.606 lineto
+357.529 345.481 lineto
+352.904 345.481 lineto
+closepath
+362.445 345.7 M
+361.101 345.7 360.273 344.434 QUADTO
+359.445 343.168 359.445 341.137 QUADTO
+359.445 339.09 360.281 337.84 QUADTO
+361.117 336.59 362.476 336.59 QUADTO
+363.836 336.59 364.671 337.84 QUADTO
+365.507 339.09 365.507 341.122 QUADTO
+365.507 343.2 364.671 344.45 QUADTO
+363.836 345.7 362.445 345.7 QUADTO
+closepath
+362.461 344.825 M
+364.289 344.825 364.289 341.106 QUADTO
+364.289 337.465 362.476 337.465 QUADTO
+360.679 337.465 360.679 341.137 QUADTO
+360.679 344.825 362.461 344.825 QUADTO
+closepath
+370.033 345.7 M
+368.689 345.7 367.861 344.434 QUADTO
+367.033 343.168 367.033 341.137 QUADTO
+367.033 339.09 367.869 337.84 QUADTO
+368.705 336.59 370.064 336.59 QUADTO
+371.423 336.59 372.259 337.84 QUADTO
+373.095 339.09 373.095 341.122 QUADTO
+373.095 343.2 372.259 344.45 QUADTO
+371.423 345.7 370.033 345.7 QUADTO
+closepath
+370.048 344.825 M
+371.877 344.825 371.877 341.106 QUADTO
+371.877 337.465 370.064 337.465 QUADTO
+368.267 337.465 368.267 341.137 QUADTO
+368.267 344.825 370.048 344.825 QUADTO
+closepath
+377.621 345.7 M
+376.277 345.7 375.449 344.434 QUADTO
+374.621 343.168 374.621 341.137 QUADTO
+374.621 339.09 375.457 337.84 QUADTO
+376.293 336.59 377.652 336.59 QUADTO
+379.011 336.59 379.847 337.84 QUADTO
+380.683 339.09 380.683 341.122 QUADTO
+380.683 343.2 379.847 344.45 QUADTO
+379.011 345.7 377.621 345.7 QUADTO
+closepath
+377.636 344.825 M
+379.464 344.825 379.464 341.106 QUADTO
+379.464 337.465 377.652 337.465 QUADTO
+375.855 337.465 375.855 341.137 QUADTO
+375.855 344.825 377.636 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+208.267 364.954 M
+208.267 357.454 lineto
+210.282 357.454 lineto
+210.282 358.86 lineto
+211.282 357.282 212.845 357.282 QUADTO
+213.845 357.282 214.431 357.915 QUADTO
+215.017 358.548 215.017 359.641 QUADTO
+215.017 364.954 lineto
+212.985 364.954 lineto
+212.985 360.141 lineto
+212.985 358.876 212.142 358.876 QUADTO
+211.173 358.876 210.282 360.235 QUADTO
+210.282 364.954 lineto
+208.267 364.954 lineto
+closepath
+220.617 365.126 M
+218.852 365.126 217.82 364.063 QUADTO
+216.789 363.001 216.789 361.204 QUADTO
+216.789 359.376 217.828 358.329 QUADTO
+218.867 357.282 220.664 357.282 QUADTO
+222.461 357.282 223.5 358.329 QUADTO
+224.539 359.376 224.539 361.188 QUADTO
+224.539 363.032 223.492 364.079 QUADTO
+222.445 365.126 220.617 365.126 QUADTO
+closepath
+220.648 363.86 M
+222.383 363.86 222.383 361.188 QUADTO
+222.383 359.97 221.922 359.259 QUADTO
+221.461 358.548 220.664 358.548 QUADTO
+219.867 358.548 219.398 359.259 QUADTO
+218.93 359.97 218.93 361.204 QUADTO
+218.93 362.423 219.391 363.141 QUADTO
+219.852 363.86 220.648 363.86 QUADTO
+closepath
+231.121 364.954 M
+231.121 363.532 lineto
+230.34 365.126 228.668 365.126 QUADTO
+227.324 365.126 226.551 364.134 QUADTO
+225.777 363.141 225.777 361.407 QUADTO
+225.777 359.516 226.645 358.399 QUADTO
+227.512 357.282 228.98 357.282 QUADTO
+230.168 357.282 231.121 358.204 QUADTO
+231.121 354.157 lineto
+233.152 354.157 lineto
+233.152 364.954 lineto
+231.121 364.954 lineto
+closepath
+231.121 359.407 M
+230.387 358.595 229.559 358.595 QUADTO
+228.809 358.595 228.371 359.313 QUADTO
+227.934 360.032 227.934 361.235 QUADTO
+227.934 363.532 229.402 363.532 QUADTO
+230.309 363.532 231.121 362.376 QUADTO
+231.121 359.407 lineto
+closepath
+241.788 364.704 M
+240.351 365.126 239.054 365.126 QUADTO
+237.179 365.126 236.093 364.055 QUADTO
+235.007 362.985 235.007 361.141 QUADTO
+235.007 359.407 235.999 358.345 QUADTO
+236.991 357.282 238.632 357.282 QUADTO
+240.272 357.282 241.03 358.321 QUADTO
+241.788 359.36 241.788 361.61 QUADTO
+237.132 361.61 lineto
+237.335 363.751 239.491 363.751 QUADTO
+240.507 363.751 241.788 363.282 QUADTO
+241.788 364.704 lineto
+closepath
+237.101 360.47 M
+239.804 360.47 lineto
+239.804 358.548 238.569 358.548 QUADTO
+237.304 358.548 237.101 360.47 QUADTO
+closepath
+243.679 364.72 M
+243.679 363.235 lineto
+245.194 363.86 246.257 363.86 QUADTO
+247.491 363.86 247.491 363.016 QUADTO
+247.491 362.47 246.476 362.048 QUADTO
+245.788 361.782 lineto
+244.679 361.329 244.194 360.813 QUADTO
+243.71 360.298 243.71 359.532 QUADTO
+243.71 358.454 244.53 357.868 QUADTO
+245.351 357.282 246.804 357.282 QUADTO
+247.726 357.282 248.991 357.548 QUADTO
+248.991 358.97 lineto
+247.772 358.548 246.976 358.548 QUADTO
+245.71 358.548 245.71 359.313 QUADTO
+245.71 359.829 246.647 360.188 QUADTO
+247.226 360.407 lineto
+248.554 360.907 249.069 361.423 QUADTO
+249.585 361.938 249.585 362.751 QUADTO
+249.585 363.798 248.702 364.462 QUADTO
+247.819 365.126 246.413 365.126 QUADTO
+245.069 365.126 243.679 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.533 34.247 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+55.711 330.426 M
+54.367 330.426 53.539 329.16 QUADTO
+52.711 327.894 52.711 325.863 QUADTO
+52.711 323.816 53.547 322.566 QUADTO
+54.383 321.316 55.742 321.316 QUADTO
+57.102 321.316 57.938 322.566 QUADTO
+58.773 323.816 58.773 325.848 QUADTO
+58.773 327.926 57.938 329.176 QUADTO
+57.102 330.426 55.711 330.426 QUADTO
+closepath
+55.727 329.551 M
+57.555 329.551 57.555 325.832 QUADTO
+57.555 322.191 55.742 322.191 QUADTO
+53.945 322.191 53.945 325.863 QUADTO
+53.945 329.551 55.727 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 325.931 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+53.398 297.417 M
+53.398 296.386 lineto
+54.273 296.73 55.039 296.73 QUADTO
+55.898 296.73 56.391 296.23 QUADTO
+56.883 295.73 56.883 294.839 QUADTO
+56.883 292.886 54.195 292.886 QUADTO
+53.883 292.886 53.555 292.933 QUADTO
+53.555 288.714 lineto
+57.945 288.714 lineto
+57.945 289.714 lineto
+54.57 289.714 lineto
+54.57 292.011 lineto
+56.242 292.011 57.18 292.777 QUADTO
+58.117 293.542 58.117 294.902 QUADTO
+58.117 296.167 57.258 296.886 QUADTO
+56.398 297.605 54.898 297.605 QUADTO
+54.242 297.605 53.398 297.417 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 293.111 M
+65.533 293.111 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+46.17 264.565 M
+46.17 263.69 lineto
+47.904 263.69 lineto
+47.904 256.847 lineto
+46.17 257.284 lineto
+46.17 256.394 lineto
+49.061 255.675 lineto
+49.061 263.69 lineto
+50.795 263.69 lineto
+50.795 264.565 lineto
+46.17 264.565 lineto
+closepath
+55.711 264.784 M
+54.367 264.784 53.539 263.519 QUADTO
+52.711 262.253 52.711 260.222 QUADTO
+52.711 258.175 53.547 256.925 QUADTO
+54.383 255.675 55.742 255.675 QUADTO
+57.102 255.675 57.938 256.925 QUADTO
+58.773 258.175 58.773 260.206 QUADTO
+58.773 262.284 57.938 263.534 QUADTO
+57.102 264.784 55.711 264.784 QUADTO
+closepath
+55.727 263.909 M
+57.555 263.909 57.555 260.19 QUADTO
+57.555 256.55 55.742 256.55 QUADTO
+53.945 256.55 53.945 260.222 QUADTO
+53.945 263.909 55.727 263.909 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 260.29 M
+65.533 260.29 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+46.17 231.745 M
+46.17 230.87 lineto
+47.904 230.87 lineto
+47.904 224.026 lineto
+46.17 224.463 lineto
+46.17 223.573 lineto
+49.061 222.854 lineto
+49.061 230.87 lineto
+50.795 230.87 lineto
+50.795 231.745 lineto
+46.17 231.745 lineto
+closepath
+53.398 231.776 M
+53.398 230.745 lineto
+54.273 231.088 55.039 231.088 QUADTO
+55.898 231.088 56.391 230.588 QUADTO
+56.883 230.088 56.883 229.198 QUADTO
+56.883 227.245 54.195 227.245 QUADTO
+53.883 227.245 53.555 227.292 QUADTO
+53.555 223.073 lineto
+57.945 223.073 lineto
+57.945 224.073 lineto
+54.57 224.073 lineto
+54.57 226.37 lineto
+56.242 226.37 57.18 227.135 QUADTO
+58.117 227.901 58.117 229.26 QUADTO
+58.117 230.526 57.258 231.245 QUADTO
+56.398 231.963 54.898 231.963 QUADTO
+54.242 231.963 53.398 231.776 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 227.469 M
+65.533 227.469 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.357 198.924 M
+45.357 197.908 lineto
+45.857 196.736 47.389 195.346 QUADTO
+48.061 194.752 lineto
+49.326 193.596 49.326 192.455 QUADTO
+49.326 191.736 48.896 191.322 QUADTO
+48.467 190.908 47.701 190.908 QUADTO
+46.795 190.908 45.576 191.596 QUADTO
+45.576 190.58 lineto
+46.732 190.033 47.857 190.033 QUADTO
+49.076 190.033 49.818 190.69 QUADTO
+50.561 191.346 50.561 192.424 QUADTO
+50.561 193.205 50.186 193.815 QUADTO
+49.811 194.424 48.795 195.283 QUADTO
+48.357 195.658 lineto
+46.967 196.83 46.748 197.908 QUADTO
+50.514 197.908 lineto
+50.514 198.924 lineto
+45.357 198.924 lineto
+closepath
+55.711 199.143 M
+54.367 199.143 53.539 197.877 QUADTO
+52.711 196.611 52.711 194.58 QUADTO
+52.711 192.533 53.547 191.283 QUADTO
+54.383 190.033 55.742 190.033 QUADTO
+57.102 190.033 57.938 191.283 QUADTO
+58.773 192.533 58.773 194.565 QUADTO
+58.773 196.643 57.938 197.893 QUADTO
+57.102 199.143 55.711 199.143 QUADTO
+closepath
+55.727 198.268 M
+57.555 198.268 57.555 194.549 QUADTO
+57.555 190.908 55.742 190.908 QUADTO
+53.945 190.908 53.945 194.58 QUADTO
+53.945 198.268 55.727 198.268 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 194.648 M
+65.533 194.648 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.357 166.103 M
+45.357 165.088 lineto
+45.857 163.916 47.389 162.525 QUADTO
+48.061 161.931 lineto
+49.326 160.775 49.326 159.634 QUADTO
+49.326 158.916 48.896 158.502 QUADTO
+48.467 158.088 47.701 158.088 QUADTO
+46.795 158.088 45.576 158.775 QUADTO
+45.576 157.759 lineto
+46.732 157.213 47.857 157.213 QUADTO
+49.076 157.213 49.818 157.869 QUADTO
+50.561 158.525 50.561 159.603 QUADTO
+50.561 160.384 50.186 160.994 QUADTO
+49.811 161.603 48.795 162.463 QUADTO
+48.357 162.838 lineto
+46.967 164.009 46.748 165.088 QUADTO
+50.514 165.088 lineto
+50.514 166.103 lineto
+45.357 166.103 lineto
+closepath
+53.398 166.134 M
+53.398 165.103 lineto
+54.273 165.447 55.039 165.447 QUADTO
+55.898 165.447 56.391 164.947 QUADTO
+56.883 164.447 56.883 163.556 QUADTO
+56.883 161.603 54.195 161.603 QUADTO
+53.883 161.603 53.555 161.65 QUADTO
+53.555 157.431 lineto
+57.945 157.431 lineto
+57.945 158.431 lineto
+54.57 158.431 lineto
+54.57 160.728 lineto
+56.242 160.728 57.18 161.494 QUADTO
+58.117 162.259 58.117 163.619 QUADTO
+58.117 164.884 57.258 165.603 QUADTO
+56.398 166.322 54.898 166.322 QUADTO
+54.242 166.322 53.398 166.134 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 161.828 M
+65.533 161.828 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.576 133.22 M
+45.576 132.142 lineto
+46.826 132.626 47.529 132.626 QUADTO
+48.357 132.626 48.881 132.142 QUADTO
+49.404 131.657 49.404 130.892 QUADTO
+49.404 129.064 46.842 129.064 QUADTO
+46.373 129.064 lineto
+46.373 128.282 lineto
+46.779 128.282 lineto
+49.186 128.282 49.186 126.595 QUADTO
+49.186 125.267 47.607 125.267 QUADTO
+46.732 125.267 45.701 125.751 QUADTO
+45.701 124.736 lineto
+46.717 124.392 47.686 124.392 QUADTO
+50.342 124.392 50.342 126.407 QUADTO
+50.342 127.939 48.529 128.579 QUADTO
+50.639 129.064 50.639 130.876 QUADTO
+50.639 132.111 49.826 132.806 QUADTO
+49.014 133.501 47.607 133.501 QUADTO
+46.795 133.501 45.576 133.22 QUADTO
+closepath
+55.711 133.501 M
+54.367 133.501 53.539 132.236 QUADTO
+52.711 130.97 52.711 128.939 QUADTO
+52.711 126.892 53.547 125.642 QUADTO
+54.383 124.392 55.742 124.392 QUADTO
+57.102 124.392 57.938 125.642 QUADTO
+58.773 126.892 58.773 128.923 QUADTO
+58.773 131.001 57.938 132.251 QUADTO
+57.102 133.501 55.711 133.501 QUADTO
+closepath
+55.727 132.626 M
+57.555 132.626 57.555 128.907 QUADTO
+57.555 125.267 55.742 125.267 QUADTO
+53.945 125.267 53.945 128.939 QUADTO
+53.945 132.626 55.727 132.626 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 129.007 M
+65.533 129.007 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.576 100.399 M
+45.576 99.321 lineto
+46.826 99.805 47.529 99.805 QUADTO
+48.357 99.805 48.881 99.321 QUADTO
+49.404 98.837 49.404 98.071 QUADTO
+49.404 96.243 46.842 96.243 QUADTO
+46.373 96.243 lineto
+46.373 95.462 lineto
+46.779 95.462 lineto
+49.186 95.462 49.186 93.774 QUADTO
+49.186 92.446 47.607 92.446 QUADTO
+46.732 92.446 45.701 92.93 QUADTO
+45.701 91.915 lineto
+46.717 91.571 47.686 91.571 QUADTO
+50.342 91.571 50.342 93.587 QUADTO
+50.342 95.118 48.529 95.759 QUADTO
+50.639 96.243 50.639 98.055 QUADTO
+50.639 99.29 49.826 99.985 QUADTO
+49.014 100.68 47.607 100.68 QUADTO
+46.795 100.68 45.576 100.399 QUADTO
+closepath
+53.398 100.493 M
+53.398 99.462 lineto
+54.273 99.805 55.039 99.805 QUADTO
+55.898 99.805 56.391 99.305 QUADTO
+56.883 98.805 56.883 97.915 QUADTO
+56.883 95.962 54.195 95.962 QUADTO
+53.883 95.962 53.555 96.009 QUADTO
+53.555 91.79 lineto
+57.945 91.79 lineto
+57.945 92.79 lineto
+54.57 92.79 lineto
+54.57 95.087 lineto
+56.242 95.087 57.18 95.852 QUADTO
+58.117 96.618 58.117 97.977 QUADTO
+58.117 99.243 57.258 99.962 QUADTO
+56.398 100.68 54.898 100.68 QUADTO
+54.242 100.68 53.398 100.493 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 96.186 M
+65.533 96.186 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+48.873 67.641 M
+48.873 65.188 lineto
+44.967 65.188 lineto
+44.967 64.313 lineto
+48.873 58.969 lineto
+49.967 58.969 lineto
+49.967 64.235 lineto
+51.123 64.235 lineto
+51.123 65.188 lineto
+49.967 65.188 lineto
+49.967 67.641 lineto
+48.873 67.641 lineto
+closepath
+46.107 64.235 M
+48.951 64.235 lineto
+48.951 60.391 lineto
+46.107 64.235 lineto
+closepath
+55.711 67.86 M
+54.367 67.86 53.539 66.594 QUADTO
+52.711 65.328 52.711 63.297 QUADTO
+52.711 61.25 53.547 60 QUADTO
+54.383 58.75 55.742 58.75 QUADTO
+57.102 58.75 57.938 60 QUADTO
+58.773 61.25 58.773 63.282 QUADTO
+58.773 65.36 57.938 66.61 QUADTO
+57.102 67.86 55.711 67.86 QUADTO
+closepath
+55.727 66.985 M
+57.555 66.985 57.555 63.266 QUADTO
+57.555 59.625 55.742 59.625 QUADTO
+53.945 59.625 53.945 63.297 QUADTO
+53.945 66.985 55.727 66.985 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 63.365 M
+65.533 63.365 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -149.21789 210.96009] concat
+newpath
+210.96 149.218 M
+210.96 549.218 lineto
+-189.04 549.218 lineto
+-189.04 149.218 lineto
+210.96 149.218 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-24.448 185.077 M
+-24.448 174.28 lineto
+-22.432 174.28 lineto
+-22.432 185.077 lineto
+-24.448 185.077 lineto
+closepath
+-16.739 185.249 M
+-18.504 185.249 -19.536 184.187 QUADTO
+-20.567 183.124 -20.567 181.327 QUADTO
+-20.567 179.499 -19.528 178.452 QUADTO
+-18.489 177.405 -16.692 177.405 QUADTO
+-14.895 177.405 -13.856 178.452 QUADTO
+-12.817 179.499 -12.817 181.312 QUADTO
+-12.817 183.155 -13.864 184.202 QUADTO
+-14.911 185.249 -16.739 185.249 QUADTO
+closepath
+-16.708 183.983 M
+-14.973 183.983 -14.973 181.312 QUADTO
+-14.973 180.093 -15.434 179.382 QUADTO
+-15.895 178.671 -16.692 178.671 QUADTO
+-17.489 178.671 -17.958 179.382 QUADTO
+-18.426 180.093 -18.426 181.327 QUADTO
+-18.426 182.546 -17.965 183.265 QUADTO
+-17.504 183.983 -16.708 183.983 QUADTO
+closepath
+-7.282 184.265 M
+-8.282 185.249 -9.438 185.249 QUADTO
+-10.422 185.249 -11.04 184.648 QUADTO
+-11.657 184.046 -11.657 183.093 QUADTO
+-11.657 181.843 -10.665 181.171 QUADTO
+-9.672 180.499 -7.813 180.499 QUADTO
+-7.282 180.499 lineto
+-7.282 179.812 lineto
+-7.282 178.64 -8.61 178.64 QUADTO
+-9.797 178.64 -11 179.312 QUADTO
+-11 177.921 lineto
+-9.625 177.405 -8.282 177.405 QUADTO
+-5.329 177.405 -5.329 179.749 QUADTO
+-5.329 183.062 lineto
+-5.329 183.952 -4.766 183.952 QUADTO
+-4.672 183.952 -4.5 183.921 QUADTO
+-4.454 185.062 lineto
+-5.094 185.249 -5.594 185.249 QUADTO
+-6.829 185.249 -7.188 184.265 QUADTO
+-7.282 184.265 lineto
+closepath
+-7.282 183.187 M
+-7.282 181.655 lineto
+-7.75 181.655 lineto
+-9.719 181.655 -9.719 182.89 QUADTO
+-9.719 183.312 -9.438 183.593 QUADTO
+-9.157 183.874 -8.735 183.874 QUADTO
+-8.016 183.874 -7.282 183.187 QUADTO
+closepath
+1.996 185.077 M
+1.996 183.655 lineto
+1.214 185.249 -0.458 185.249 QUADTO
+-1.801 185.249 -2.575 184.257 QUADTO
+-3.348 183.265 -3.348 181.53 QUADTO
+-3.348 179.64 -2.481 178.523 QUADTO
+-1.614 177.405 -0.145 177.405 QUADTO
+1.042 177.405 1.996 178.327 QUADTO
+1.996 174.28 lineto
+4.027 174.28 lineto
+4.027 185.077 lineto
+1.996 185.077 lineto
+closepath
+1.996 179.53 M
+1.261 178.718 0.433 178.718 QUADTO
+-0.317 178.718 -0.754 179.437 QUADTO
+-1.192 180.155 -1.192 181.358 QUADTO
+-1.192 183.655 0.277 183.655 QUADTO
+1.183 183.655 1.996 182.499 QUADTO
+1.996 179.53 lineto
+closepath
+11.386 185.077 M
+11.386 178.843 lineto
+10.339 178.843 lineto
+10.339 177.577 lineto
+11.386 177.577 lineto
+11.386 177.03 lineto
+11.386 174.108 14.152 174.108 QUADTO
+15.042 174.108 15.996 174.374 QUADTO
+15.996 175.733 lineto
+15.136 175.374 14.449 175.374 QUADTO
+13.402 175.374 13.402 176.952 QUADTO
+13.402 177.577 lineto
+15.308 177.577 lineto
+15.308 178.843 lineto
+13.402 178.843 lineto
+13.402 185.077 lineto
+11.386 185.077 lineto
+closepath
+16.971 185.077 M
+16.971 177.577 lineto
+18.987 177.577 lineto
+18.987 178.983 lineto
+19.784 177.405 21.393 177.405 QUADTO
+21.581 177.405 21.768 177.437 QUADTO
+21.768 179.249 lineto
+21.331 179.093 20.956 179.093 QUADTO
+19.752 179.093 18.987 180.312 QUADTO
+18.987 185.077 lineto
+16.971 185.077 lineto
+closepath
+27.007 184.265 M
+26.007 185.249 24.851 185.249 QUADTO
+23.867 185.249 23.25 184.648 QUADTO
+22.632 184.046 22.632 183.093 QUADTO
+22.632 181.843 23.625 181.171 QUADTO
+24.617 180.499 26.476 180.499 QUADTO
+27.007 180.499 lineto
+27.007 179.812 lineto
+27.007 178.64 25.679 178.64 QUADTO
+24.492 178.64 23.289 179.312 QUADTO
+23.289 177.921 lineto
+24.664 177.405 26.007 177.405 QUADTO
+28.96 177.405 28.96 179.749 QUADTO
+28.96 183.062 lineto
+28.96 183.952 29.523 183.952 QUADTO
+29.617 183.952 29.789 183.921 QUADTO
+29.835 185.062 lineto
+29.195 185.249 28.695 185.249 QUADTO
+27.46 185.249 27.101 184.265 QUADTO
+27.007 184.265 lineto
+closepath
+27.007 183.187 M
+27.007 181.655 lineto
+26.539 181.655 lineto
+24.57 181.655 24.57 182.89 QUADTO
+24.57 183.312 24.851 183.593 QUADTO
+25.132 183.874 25.554 183.874 QUADTO
+26.273 183.874 27.007 183.187 QUADTO
+closepath
+37.097 184.905 M
+35.847 185.249 34.769 185.249 QUADTO
+32.972 185.249 31.933 184.194 QUADTO
+30.894 183.14 30.894 181.312 QUADTO
+30.894 179.483 31.964 178.444 QUADTO
+33.035 177.405 34.925 177.405 QUADTO
+35.847 177.405 37.035 177.687 QUADTO
+37.035 179.155 lineto
+35.8 178.749 35.05 178.749 QUADTO
+34.144 178.749 33.589 179.452 QUADTO
+33.035 180.155 33.035 181.296 QUADTO
+33.035 182.483 33.636 183.194 QUADTO
+34.238 183.905 35.222 183.905 QUADTO
+36.144 183.905 37.097 183.515 QUADTO
+37.097 184.905 lineto
+closepath
+42.892 185.03 M
+42.158 185.249 41.751 185.249 QUADTO
+39.111 185.249 39.111 182.78 QUADTO
+39.111 178.843 lineto
+38.267 178.843 lineto
+38.267 177.577 lineto
+39.111 177.577 lineto
+39.111 176.312 lineto
+41.142 176.077 lineto
+41.142 177.577 lineto
+42.736 177.577 lineto
+42.736 178.843 lineto
+41.142 178.843 lineto
+41.142 182.515 lineto
+41.142 183.905 42.267 183.905 QUADTO
+42.517 183.905 42.892 183.812 QUADTO
+42.892 185.03 lineto
+closepath
+44.691 185.077 M
+44.691 177.577 lineto
+46.707 177.577 lineto
+46.707 185.077 lineto
+44.691 185.077 lineto
+closepath
+44.691 176.312 M
+44.691 174.624 lineto
+46.707 174.624 lineto
+46.707 176.312 lineto
+44.691 176.312 lineto
+closepath
+52.4 185.249 M
+50.634 185.249 49.603 184.187 QUADTO
+48.572 183.124 48.572 181.327 QUADTO
+48.572 179.499 49.611 178.452 QUADTO
+50.65 177.405 52.447 177.405 QUADTO
+54.244 177.405 55.283 178.452 QUADTO
+56.322 179.499 56.322 181.312 QUADTO
+56.322 183.155 55.275 184.202 QUADTO
+54.228 185.249 52.4 185.249 QUADTO
+closepath
+52.431 183.983 M
+54.166 183.983 54.166 181.312 QUADTO
+54.166 180.093 53.705 179.382 QUADTO
+53.244 178.671 52.447 178.671 QUADTO
+51.65 178.671 51.181 179.382 QUADTO
+50.712 180.093 50.712 181.327 QUADTO
+50.712 182.546 51.173 183.265 QUADTO
+51.634 183.983 52.431 183.983 QUADTO
+closepath
+58.185 185.077 M
+58.185 177.577 lineto
+60.201 177.577 lineto
+60.201 178.983 lineto
+61.201 177.405 62.763 177.405 QUADTO
+63.763 177.405 64.349 178.038 QUADTO
+64.935 178.671 64.935 179.765 QUADTO
+64.935 185.077 lineto
+62.904 185.077 lineto
+62.904 180.265 lineto
+62.904 178.999 62.06 178.999 QUADTO
+61.091 178.999 60.201 180.358 QUADTO
+60.201 185.077 lineto
+58.185 185.077 lineto
+closepath
+70.629 174.202 M
+70.629 175.499 lineto
+68.801 177.343 68.801 180.687 QUADTO
+68.801 184.046 70.629 185.874 QUADTO
+70.629 187.187 lineto
+68.958 186.28 67.958 184.507 QUADTO
+66.958 182.733 66.958 180.687 QUADTO
+66.958 178.64 67.942 176.89 QUADTO
+68.926 175.14 70.629 174.202 QUADTO
+closepath
+72.13 185.327 M
+80.084 174.702 lineto
+81.443 174.702 lineto
+73.49 185.327 lineto
+72.13 185.327 lineto
+closepath
+73.849 180.015 M
+72.755 180.015 72.115 179.335 QUADTO
+71.474 178.655 71.474 177.483 QUADTO
+71.474 176.312 72.115 175.632 QUADTO
+72.755 174.952 73.88 174.952 QUADTO
+74.99 174.952 75.638 175.632 QUADTO
+76.287 176.312 76.287 177.483 QUADTO
+76.287 178.671 75.638 179.343 QUADTO
+74.99 180.015 73.849 180.015 QUADTO
+closepath
+73.865 178.999 M
+74.755 178.999 74.755 177.483 QUADTO
+74.755 175.968 73.88 175.968 QUADTO
+72.99 175.968 72.99 177.483 QUADTO
+72.99 178.999 73.865 178.999 QUADTO
+closepath
+79.677 185.077 M
+78.568 185.077 77.927 184.398 QUADTO
+77.287 183.718 77.287 182.546 QUADTO
+77.287 181.358 77.935 180.687 QUADTO
+78.584 180.015 79.693 180.015 QUADTO
+80.818 180.015 81.459 180.687 QUADTO
+82.099 181.358 82.099 182.546 QUADTO
+82.099 183.733 81.459 184.405 QUADTO
+80.818 185.077 79.677 185.077 QUADTO
+closepath
+79.677 184.062 M
+80.584 184.062 80.584 182.546 QUADTO
+80.584 181.03 79.693 181.03 QUADTO
+78.802 181.03 78.802 182.546 QUADTO
+78.802 184.062 79.677 184.062 QUADTO
+closepath
+82.751 174.202 M
+82.751 175.499 lineto
+84.58 177.343 84.58 180.687 QUADTO
+84.58 184.046 82.751 185.874 QUADTO
+82.751 187.187 lineto
+84.423 186.28 85.423 184.507 QUADTO
+86.423 182.733 86.423 180.687 QUADTO
+86.423 178.64 85.439 176.89 QUADTO
+84.455 175.14 82.751 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+76.771 34.247 M
+76.771 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+120.344 34.247 M
+120.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+145.833 34.247 M
+145.833 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+163.918 34.247 M
+163.918 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+177.945 34.247 M
+177.945 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+189.407 34.247 M
+189.407 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+199.097 34.247 M
+199.097 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+207.491 34.247 M
+207.491 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+214.896 34.247 M
+214.896 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+265.092 34.247 M
+265.092 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+290.581 34.247 M
+290.581 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+308.666 34.247 M
+308.666 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+322.694 34.247 M
+322.694 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+334.155 34.247 M
+334.155 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+343.845 34.247 M
+343.845 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+352.24 34.247 M
+352.24 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+359.644 34.247 M
+359.644 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 293.111 M
+388 293.111 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 260.29 M
+388 260.29 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 227.469 M
+388 227.469 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 194.648 M
+388 194.648 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 161.828 M
+388 161.828 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 129.007 M
+388 129.007 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 96.186 M
+388 96.186 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 63.365 M
+388 63.365 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 85.191 M
+102.26 79.283 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 79.283 M
+120.344 53.65 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 53.65 M
+145.833 56.932 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 56.932 M
+163.918 91.525 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 91.525 M
+189.407 78.824 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 78.824 M
+207.491 55.62 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 55.62 M
+232.98 57.983 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 57.983 M
+251.065 72.785 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 72.785 M
+276.554 65.696 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 65.696 M
+294.638 75.181 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 75.181 M
+320.127 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 48.136 M
+338.212 59.164 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 59.164 M
+353.792 88.276 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 88.276 M
+366.267 89.326 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 96.547 M
+102.26 82.172 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 82.172 M
+120.344 94.151 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 94.151 M
+145.833 78.167 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 78.167 M
+163.918 92.805 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 92.805 M
+189.407 91.099 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 91.099 M
+207.491 100.289 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 100.289 M
+232.98 86.865 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 86.865 M
+251.065 86.405 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 86.405 M
+276.554 79.086 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 79.086 M
+294.638 98.812 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 98.812 M
+320.127 94.611 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 94.611 M
+338.212 77.183 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 77.183 M
+353.792 95.562 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 95.562 M
+366.267 99.402 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+79.771 85.191 M
+79.771 86.848 78.427 88.191 76.771 88.191 curveto
+75.114 88.191 73.771 86.848 73.771 85.191 curveto
+73.771 83.534 75.114 82.191 76.771 82.191 curveto
+78.427 82.191 79.771 83.534 79.771 85.191 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+79.771 85.191 M
+79.771 86.848 78.427 88.191 76.771 88.191 curveto
+75.114 88.191 73.771 86.848 73.771 85.191 curveto
+73.771 83.534 75.114 82.191 76.771 82.191 curveto
+78.427 82.191 79.771 83.534 79.771 85.191 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+105.26 79.283 M
+105.26 80.94 103.916 82.283 102.26 82.283 curveto
+100.603 82.283 99.26 80.94 99.26 79.283 curveto
+99.26 77.626 100.603 76.283 102.26 76.283 curveto
+103.916 76.283 105.26 77.626 105.26 79.283 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+105.26 79.283 M
+105.26 80.94 103.916 82.283 102.26 82.283 curveto
+100.603 82.283 99.26 80.94 99.26 79.283 curveto
+99.26 77.626 100.603 76.283 102.26 76.283 curveto
+103.916 76.283 105.26 77.626 105.26 79.283 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+123.344 53.65 M
+123.344 55.307 122.001 56.65 120.344 56.65 curveto
+118.687 56.65 117.344 55.307 117.344 53.65 curveto
+117.344 51.993 118.687 50.65 120.344 50.65 curveto
+122.001 50.65 123.344 51.993 123.344 53.65 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+123.344 53.65 M
+123.344 55.307 122.001 56.65 120.344 56.65 curveto
+118.687 56.65 117.344 55.307 117.344 53.65 curveto
+117.344 51.993 118.687 50.65 120.344 50.65 curveto
+122.001 50.65 123.344 51.993 123.344 53.65 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+148.833 56.932 M
+148.833 58.589 147.49 59.932 145.833 59.932 curveto
+144.176 59.932 142.833 58.589 142.833 56.932 curveto
+142.833 55.276 144.176 53.932 145.833 53.932 curveto
+147.49 53.932 148.833 55.276 148.833 56.932 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+148.833 56.932 M
+148.833 58.589 147.49 59.932 145.833 59.932 curveto
+144.176 59.932 142.833 58.589 142.833 56.932 curveto
+142.833 55.276 144.176 53.932 145.833 53.932 curveto
+147.49 53.932 148.833 55.276 148.833 56.932 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+166.918 91.525 M
+166.918 93.182 165.575 94.525 163.918 94.525 curveto
+162.261 94.525 160.918 93.182 160.918 91.525 curveto
+160.918 89.869 162.261 88.525 163.918 88.525 curveto
+165.575 88.525 166.918 89.869 166.918 91.525 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+166.918 91.525 M
+166.918 93.182 165.575 94.525 163.918 94.525 curveto
+162.261 94.525 160.918 93.182 160.918 91.525 curveto
+160.918 89.869 162.261 88.525 163.918 88.525 curveto
+165.575 88.525 166.918 89.869 166.918 91.525 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+192.407 78.824 M
+192.407 80.481 191.064 81.824 189.407 81.824 curveto
+187.75 81.824 186.407 80.481 186.407 78.824 curveto
+186.407 77.167 187.75 75.824 189.407 75.824 curveto
+191.064 75.824 192.407 77.167 192.407 78.824 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.407 78.824 M
+192.407 80.481 191.064 81.824 189.407 81.824 curveto
+187.75 81.824 186.407 80.481 186.407 78.824 curveto
+186.407 77.167 187.75 75.824 189.407 75.824 curveto
+191.064 75.824 192.407 77.167 192.407 78.824 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+210.491 55.62 M
+210.491 57.276 209.148 58.62 207.491 58.62 curveto
+205.834 58.62 204.491 57.276 204.491 55.62 curveto
+204.491 53.963 205.834 52.62 207.491 52.62 curveto
+209.148 52.62 210.491 53.963 210.491 55.62 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+210.491 55.62 M
+210.491 57.276 209.148 58.62 207.491 58.62 curveto
+205.834 58.62 204.491 57.276 204.491 55.62 curveto
+204.491 53.963 205.834 52.62 207.491 52.62 curveto
+209.148 52.62 210.491 53.963 210.491 55.62 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+235.98 57.983 M
+235.98 59.64 234.637 60.983 232.98 60.983 curveto
+231.323 60.983 229.98 59.64 229.98 57.983 curveto
+229.98 56.326 231.323 54.983 232.98 54.983 curveto
+234.637 54.983 235.98 56.326 235.98 57.983 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+235.98 57.983 M
+235.98 59.64 234.637 60.983 232.98 60.983 curveto
+231.323 60.983 229.98 59.64 229.98 57.983 curveto
+229.98 56.326 231.323 54.983 232.98 54.983 curveto
+234.637 54.983 235.98 56.326 235.98 57.983 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+254.065 72.785 M
+254.065 74.442 252.722 75.785 251.065 75.785 curveto
+249.408 75.785 248.065 74.442 248.065 72.785 curveto
+248.065 71.128 249.408 69.785 251.065 69.785 curveto
+252.722 69.785 254.065 71.128 254.065 72.785 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+254.065 72.785 M
+254.065 74.442 252.722 75.785 251.065 75.785 curveto
+249.408 75.785 248.065 74.442 248.065 72.785 curveto
+248.065 71.128 249.408 69.785 251.065 69.785 curveto
+252.722 69.785 254.065 71.128 254.065 72.785 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+279.554 65.696 M
+279.554 67.352 278.211 68.696 276.554 68.696 curveto
+274.897 68.696 273.554 67.352 273.554 65.696 curveto
+273.554 64.039 274.897 62.696 276.554 62.696 curveto
+278.211 62.696 279.554 64.039 279.554 65.696 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+279.554 65.696 M
+279.554 67.352 278.211 68.696 276.554 68.696 curveto
+274.897 68.696 273.554 67.352 273.554 65.696 curveto
+273.554 64.039 274.897 62.696 276.554 62.696 curveto
+278.211 62.696 279.554 64.039 279.554 65.696 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+297.638 75.181 M
+297.638 76.838 296.295 78.181 294.638 78.181 curveto
+292.982 78.181 291.638 76.838 291.638 75.181 curveto
+291.638 73.524 292.982 72.181 294.638 72.181 curveto
+296.295 72.181 297.638 73.524 297.638 75.181 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+297.638 75.181 M
+297.638 76.838 296.295 78.181 294.638 78.181 curveto
+292.982 78.181 291.638 76.838 291.638 75.181 curveto
+291.638 73.524 292.982 72.181 294.638 72.181 curveto
+296.295 72.181 297.638 73.524 297.638 75.181 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+323.127 48.136 M
+323.127 49.793 321.784 51.136 320.127 51.136 curveto
+318.471 51.136 317.127 49.793 317.127 48.136 curveto
+317.127 46.48 318.471 45.136 320.127 45.136 curveto
+321.784 45.136 323.127 46.48 323.127 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+323.127 48.136 M
+323.127 49.793 321.784 51.136 320.127 51.136 curveto
+318.471 51.136 317.127 49.793 317.127 48.136 curveto
+317.127 46.48 318.471 45.136 320.127 45.136 curveto
+321.784 45.136 323.127 46.48 323.127 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+341.212 59.164 M
+341.212 60.821 339.869 62.164 338.212 62.164 curveto
+336.555 62.164 335.212 60.821 335.212 59.164 curveto
+335.212 57.507 336.555 56.164 338.212 56.164 curveto
+339.869 56.164 341.212 57.507 341.212 59.164 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+341.212 59.164 M
+341.212 60.821 339.869 62.164 338.212 62.164 curveto
+336.555 62.164 335.212 60.821 335.212 59.164 curveto
+335.212 57.507 336.555 56.164 338.212 56.164 curveto
+339.869 56.164 341.212 57.507 341.212 59.164 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+356.792 88.276 M
+356.792 89.933 355.449 91.276 353.792 91.276 curveto
+352.135 91.276 350.792 89.933 350.792 88.276 curveto
+350.792 86.619 352.135 85.276 353.792 85.276 curveto
+355.449 85.276 356.792 86.619 356.792 88.276 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+356.792 88.276 M
+356.792 89.933 355.449 91.276 353.792 91.276 curveto
+352.135 91.276 350.792 89.933 350.792 88.276 curveto
+350.792 86.619 352.135 85.276 353.792 85.276 curveto
+355.449 85.276 356.792 86.619 356.792 88.276 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+369.267 89.326 M
+369.267 90.983 367.924 92.326 366.267 92.326 curveto
+364.61 92.326 363.267 90.983 363.267 89.326 curveto
+363.267 87.67 364.61 86.326 366.267 86.326 curveto
+367.924 86.326 369.267 87.67 369.267 89.326 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+369.267 89.326 M
+369.267 90.983 367.924 92.326 366.267 92.326 curveto
+364.61 92.326 363.267 90.983 363.267 89.326 curveto
+363.267 87.67 364.61 86.326 366.267 86.326 curveto
+367.924 86.326 369.267 87.67 369.267 89.326 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+73.771 93.547 M
+79.771 93.547 lineto
+79.771 99.547 lineto
+73.771 99.547 lineto
+73.771 93.547 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+73.771 93.547 M
+79.771 93.547 lineto
+79.771 99.547 lineto
+73.771 99.547 lineto
+73.771 93.547 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+99.26 79.172 M
+105.26 79.172 lineto
+105.26 85.172 lineto
+99.26 85.172 lineto
+99.26 79.172 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+99.26 79.172 M
+105.26 79.172 lineto
+105.26 85.172 lineto
+99.26 85.172 lineto
+99.26 79.172 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+117.344 91.151 M
+123.344 91.151 lineto
+123.344 97.151 lineto
+117.344 97.151 lineto
+117.344 91.151 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+117.344 91.151 M
+123.344 91.151 lineto
+123.344 97.151 lineto
+117.344 97.151 lineto
+117.344 91.151 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+142.833 75.167 M
+148.833 75.167 lineto
+148.833 81.167 lineto
+142.833 81.167 lineto
+142.833 75.167 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+142.833 75.167 M
+148.833 75.167 lineto
+148.833 81.167 lineto
+142.833 81.167 lineto
+142.833 75.167 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+160.918 89.805 M
+166.918 89.805 lineto
+166.918 95.805 lineto
+160.918 95.805 lineto
+160.918 89.805 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+160.918 89.805 M
+166.918 89.805 lineto
+166.918 95.805 lineto
+160.918 95.805 lineto
+160.918 89.805 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+186.407 88.099 M
+192.407 88.099 lineto
+192.407 94.099 lineto
+186.407 94.099 lineto
+186.407 88.099 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+186.407 88.099 M
+192.407 88.099 lineto
+192.407 94.099 lineto
+186.407 94.099 lineto
+186.407 88.099 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+204.491 97.289 M
+210.491 97.289 lineto
+210.491 103.289 lineto
+204.491 103.289 lineto
+204.491 97.289 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.491 97.289 M
+210.491 97.289 lineto
+210.491 103.289 lineto
+204.491 103.289 lineto
+204.491 97.289 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+229.98 83.865 M
+235.98 83.865 lineto
+235.98 89.865 lineto
+229.98 89.865 lineto
+229.98 83.865 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+229.98 83.865 M
+235.98 83.865 lineto
+235.98 89.865 lineto
+229.98 89.865 lineto
+229.98 83.865 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+248.065 83.405 M
+254.065 83.405 lineto
+254.065 89.405 lineto
+248.065 89.405 lineto
+248.065 83.405 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+248.065 83.405 M
+254.065 83.405 lineto
+254.065 89.405 lineto
+248.065 89.405 lineto
+248.065 83.405 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+273.554 76.086 M
+279.554 76.086 lineto
+279.554 82.086 lineto
+273.554 82.086 lineto
+273.554 76.086 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+273.554 76.086 M
+279.554 76.086 lineto
+279.554 82.086 lineto
+273.554 82.086 lineto
+273.554 76.086 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+291.638 95.812 M
+297.638 95.812 lineto
+297.638 101.812 lineto
+291.638 101.812 lineto
+291.638 95.812 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+291.638 95.812 M
+297.638 95.812 lineto
+297.638 101.812 lineto
+291.638 101.812 lineto
+291.638 95.812 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+317.127 91.611 M
+323.127 91.611 lineto
+323.127 97.611 lineto
+317.127 97.611 lineto
+317.127 91.611 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+317.127 91.611 M
+323.127 91.611 lineto
+323.127 97.611 lineto
+317.127 97.611 lineto
+317.127 91.611 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+335.212 74.183 M
+341.212 74.183 lineto
+341.212 80.183 lineto
+335.212 80.183 lineto
+335.212 74.183 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+335.212 74.183 M
+341.212 74.183 lineto
+341.212 80.183 lineto
+335.212 80.183 lineto
+335.212 74.183 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+350.792 92.562 M
+356.792 92.562 lineto
+356.792 98.562 lineto
+350.792 98.562 lineto
+350.792 92.562 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.792 92.562 M
+356.792 92.562 lineto
+356.792 98.562 lineto
+350.792 98.562 lineto
+350.792 92.562 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+363.267 96.402 M
+369.267 96.402 lineto
+369.267 102.402 lineto
+363.267 102.402 lineto
+363.267 96.402 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+363.267 96.402 M
+369.267 96.402 lineto
+369.267 102.402 lineto
+363.267 102.402 lineto
+363.267 96.402 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc03kp02.png b/sim/gobs/wiki/dc03kp02.png
new file mode 100644
index 0000000..15f8027
Binary files /dev/null and b/sim/gobs/wiki/dc03kp02.png differ
diff --git a/sim/gobs/wiki/dc03kp03.eps b/sim/gobs/wiki/dc03kp03.eps
new file mode 100644
index 0000000..ddb8222
--- /dev/null
+++ b/sim/gobs/wiki/dc03kp03.eps
@@ -0,0 +1,4754 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-24T16:49:33
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+69.533 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+70.995 345.481 M
+70.995 344.606 lineto
+72.73 344.606 lineto
+72.73 337.762 lineto
+70.995 338.2 lineto
+70.995 337.309 lineto
+73.886 336.59 lineto
+73.886 344.606 lineto
+75.62 344.606 lineto
+75.62 345.481 lineto
+70.995 345.481 lineto
+closepath
+80.536 345.7 M
+79.193 345.7 78.364 344.434 QUADTO
+77.536 343.168 77.536 341.137 QUADTO
+77.536 339.09 78.372 337.84 QUADTO
+79.208 336.59 80.568 336.59 QUADTO
+81.927 336.59 82.763 337.84 QUADTO
+83.599 339.09 83.599 341.122 QUADTO
+83.599 343.2 82.763 344.45 QUADTO
+81.927 345.7 80.536 345.7 QUADTO
+closepath
+80.552 344.825 M
+82.38 344.825 82.38 341.106 QUADTO
+82.38 337.465 80.568 337.465 QUADTO
+78.771 337.465 78.771 341.137 QUADTO
+78.771 344.825 80.552 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+76.771 331.931 M
+76.771 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+113.756 345.481 M
+113.756 344.465 lineto
+114.256 343.293 115.788 341.903 QUADTO
+116.459 341.309 lineto
+117.725 340.153 117.725 339.012 QUADTO
+117.725 338.293 117.295 337.879 QUADTO
+116.866 337.465 116.1 337.465 QUADTO
+115.194 337.465 113.975 338.153 QUADTO
+113.975 337.137 lineto
+115.131 336.59 116.256 336.59 QUADTO
+117.475 336.59 118.217 337.247 QUADTO
+118.959 337.903 118.959 338.981 QUADTO
+118.959 339.762 118.584 340.372 QUADTO
+118.209 340.981 117.194 341.84 QUADTO
+116.756 342.215 lineto
+115.366 343.387 115.147 344.465 QUADTO
+118.913 344.465 lineto
+118.913 345.481 lineto
+113.756 345.481 lineto
+closepath
+124.11 345.7 M
+122.766 345.7 121.938 344.434 QUADTO
+121.11 343.168 121.11 341.137 QUADTO
+121.11 339.09 121.946 337.84 QUADTO
+122.782 336.59 124.141 336.59 QUADTO
+125.5 336.59 126.336 337.84 QUADTO
+127.172 339.09 127.172 341.122 QUADTO
+127.172 343.2 126.336 344.45 QUADTO
+125.5 345.7 124.11 345.7 QUADTO
+closepath
+124.125 344.825 M
+125.954 344.825 125.954 341.106 QUADTO
+125.954 337.465 124.141 337.465 QUADTO
+122.344 337.465 122.344 341.137 QUADTO
+122.344 344.825 124.125 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+120.344 331.931 M
+120.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+139.464 345.418 M
+139.464 344.34 lineto
+140.714 344.825 141.417 344.825 QUADTO
+142.245 344.825 142.769 344.34 QUADTO
+143.292 343.856 143.292 343.09 QUADTO
+143.292 341.262 140.73 341.262 QUADTO
+140.261 341.262 lineto
+140.261 340.481 lineto
+140.667 340.481 lineto
+143.073 340.481 143.073 338.793 QUADTO
+143.073 337.465 141.495 337.465 QUADTO
+140.62 337.465 139.589 337.95 QUADTO
+139.589 336.934 lineto
+140.605 336.59 141.573 336.59 QUADTO
+144.23 336.59 144.23 338.606 QUADTO
+144.23 340.137 142.417 340.778 QUADTO
+144.526 341.262 144.526 343.075 QUADTO
+144.526 344.309 143.714 345.004 QUADTO
+142.901 345.7 141.495 345.7 QUADTO
+140.683 345.7 139.464 345.418 QUADTO
+closepath
+149.599 345.7 M
+148.255 345.7 147.427 344.434 QUADTO
+146.599 343.168 146.599 341.137 QUADTO
+146.599 339.09 147.435 337.84 QUADTO
+148.271 336.59 149.63 336.59 QUADTO
+150.989 336.59 151.825 337.84 QUADTO
+152.661 339.09 152.661 341.122 QUADTO
+152.661 343.2 151.825 344.45 QUADTO
+150.989 345.7 149.599 345.7 QUADTO
+closepath
+149.614 344.825 M
+151.442 344.825 151.442 341.106 QUADTO
+151.442 337.465 149.63 337.465 QUADTO
+147.833 337.465 147.833 341.137 QUADTO
+147.833 344.825 149.614 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+145.833 331.931 M
+145.833 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+163.918 331.931 M
+163.918 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+177.945 331.931 M
+177.945 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+189.407 331.931 M
+189.407 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+199.097 331.931 M
+199.097 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+207.491 331.931 M
+207.491 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+214.896 331.931 M
+214.896 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+211.95 345.481 M
+211.95 344.606 lineto
+213.684 344.606 lineto
+213.684 337.762 lineto
+211.95 338.2 lineto
+211.95 337.309 lineto
+214.84 336.59 lineto
+214.84 344.606 lineto
+216.575 344.606 lineto
+216.575 345.481 lineto
+211.95 345.481 lineto
+closepath
+221.491 345.7 M
+220.147 345.7 219.319 344.434 QUADTO
+218.491 343.168 218.491 341.137 QUADTO
+218.491 339.09 219.327 337.84 QUADTO
+220.162 336.59 221.522 336.59 QUADTO
+222.881 336.59 223.717 337.84 QUADTO
+224.553 339.09 224.553 341.122 QUADTO
+224.553 343.2 223.717 344.45 QUADTO
+222.881 345.7 221.491 345.7 QUADTO
+closepath
+221.506 344.825 M
+223.334 344.825 223.334 341.106 QUADTO
+223.334 337.465 221.522 337.465 QUADTO
+219.725 337.465 219.725 341.137 QUADTO
+219.725 344.825 221.506 344.825 QUADTO
+closepath
+229.078 345.7 M
+227.735 345.7 226.907 344.434 QUADTO
+226.078 343.168 226.078 341.137 QUADTO
+226.078 339.09 226.914 337.84 QUADTO
+227.75 336.59 229.11 336.59 QUADTO
+230.469 336.59 231.305 337.84 QUADTO
+232.141 339.09 232.141 341.122 QUADTO
+232.141 343.2 231.305 344.45 QUADTO
+230.469 345.7 229.078 345.7 QUADTO
+closepath
+229.094 344.825 M
+230.922 344.825 230.922 341.106 QUADTO
+230.922 337.465 229.11 337.465 QUADTO
+227.313 337.465 227.313 341.137 QUADTO
+227.313 344.825 229.094 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+254.711 345.481 M
+254.711 344.465 lineto
+255.211 343.293 256.742 341.903 QUADTO
+257.414 341.309 lineto
+258.679 340.153 258.679 339.012 QUADTO
+258.679 338.293 258.25 337.879 QUADTO
+257.82 337.465 257.054 337.465 QUADTO
+256.148 337.465 254.929 338.153 QUADTO
+254.929 337.137 lineto
+256.086 336.59 257.211 336.59 QUADTO
+258.429 336.59 259.172 337.247 QUADTO
+259.914 337.903 259.914 338.981 QUADTO
+259.914 339.762 259.539 340.372 QUADTO
+259.164 340.981 258.148 341.84 QUADTO
+257.711 342.215 lineto
+256.32 343.387 256.101 344.465 QUADTO
+259.867 344.465 lineto
+259.867 345.481 lineto
+254.711 345.481 lineto
+closepath
+265.064 345.7 M
+263.72 345.7 262.892 344.434 QUADTO
+262.064 343.168 262.064 341.137 QUADTO
+262.064 339.09 262.9 337.84 QUADTO
+263.736 336.59 265.095 336.59 QUADTO
+266.455 336.59 267.291 337.84 QUADTO
+268.127 339.09 268.127 341.122 QUADTO
+268.127 343.2 267.291 344.45 QUADTO
+266.455 345.7 265.064 345.7 QUADTO
+closepath
+265.08 344.825 M
+266.908 344.825 266.908 341.106 QUADTO
+266.908 337.465 265.095 337.465 QUADTO
+263.299 337.465 263.299 341.137 QUADTO
+263.299 344.825 265.08 344.825 QUADTO
+closepath
+272.652 345.7 M
+271.308 345.7 270.48 344.434 QUADTO
+269.652 343.168 269.652 341.137 QUADTO
+269.652 339.09 270.488 337.84 QUADTO
+271.324 336.59 272.683 336.59 QUADTO
+274.043 336.59 274.879 337.84 QUADTO
+275.715 339.09 275.715 341.122 QUADTO
+275.715 343.2 274.879 344.45 QUADTO
+274.043 345.7 272.652 345.7 QUADTO
+closepath
+272.668 344.825 M
+274.496 344.825 274.496 341.106 QUADTO
+274.496 337.465 272.683 337.465 QUADTO
+270.886 337.465 270.886 341.137 QUADTO
+270.886 344.825 272.668 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.092 331.931 M
+265.092 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+290.581 331.931 M
+290.581 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+308.666 331.931 M
+308.666 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+322.694 331.931 M
+322.694 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+334.155 331.931 M
+334.155 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+343.845 331.931 M
+343.845 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+352.24 331.931 M
+352.24 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+359.644 331.931 M
+359.644 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.904 345.481 M
+352.904 344.606 lineto
+354.638 344.606 lineto
+354.638 337.762 lineto
+352.904 338.2 lineto
+352.904 337.309 lineto
+355.795 336.59 lineto
+355.795 344.606 lineto
+357.529 344.606 lineto
+357.529 345.481 lineto
+352.904 345.481 lineto
+closepath
+362.445 345.7 M
+361.101 345.7 360.273 344.434 QUADTO
+359.445 343.168 359.445 341.137 QUADTO
+359.445 339.09 360.281 337.84 QUADTO
+361.117 336.59 362.476 336.59 QUADTO
+363.836 336.59 364.671 337.84 QUADTO
+365.507 339.09 365.507 341.122 QUADTO
+365.507 343.2 364.671 344.45 QUADTO
+363.836 345.7 362.445 345.7 QUADTO
+closepath
+362.461 344.825 M
+364.289 344.825 364.289 341.106 QUADTO
+364.289 337.465 362.476 337.465 QUADTO
+360.679 337.465 360.679 341.137 QUADTO
+360.679 344.825 362.461 344.825 QUADTO
+closepath
+370.033 345.7 M
+368.689 345.7 367.861 344.434 QUADTO
+367.033 343.168 367.033 341.137 QUADTO
+367.033 339.09 367.869 337.84 QUADTO
+368.705 336.59 370.064 336.59 QUADTO
+371.423 336.59 372.259 337.84 QUADTO
+373.095 339.09 373.095 341.122 QUADTO
+373.095 343.2 372.259 344.45 QUADTO
+371.423 345.7 370.033 345.7 QUADTO
+closepath
+370.048 344.825 M
+371.877 344.825 371.877 341.106 QUADTO
+371.877 337.465 370.064 337.465 QUADTO
+368.267 337.465 368.267 341.137 QUADTO
+368.267 344.825 370.048 344.825 QUADTO
+closepath
+377.621 345.7 M
+376.277 345.7 375.449 344.434 QUADTO
+374.621 343.168 374.621 341.137 QUADTO
+374.621 339.09 375.457 337.84 QUADTO
+376.293 336.59 377.652 336.59 QUADTO
+379.011 336.59 379.847 337.84 QUADTO
+380.683 339.09 380.683 341.122 QUADTO
+380.683 343.2 379.847 344.45 QUADTO
+379.011 345.7 377.621 345.7 QUADTO
+closepath
+377.636 344.825 M
+379.464 344.825 379.464 341.106 QUADTO
+379.464 337.465 377.652 337.465 QUADTO
+375.855 337.465 375.855 341.137 QUADTO
+375.855 344.825 377.636 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+208.267 364.954 M
+208.267 357.454 lineto
+210.282 357.454 lineto
+210.282 358.86 lineto
+211.282 357.282 212.845 357.282 QUADTO
+213.845 357.282 214.431 357.915 QUADTO
+215.017 358.548 215.017 359.641 QUADTO
+215.017 364.954 lineto
+212.985 364.954 lineto
+212.985 360.141 lineto
+212.985 358.876 212.142 358.876 QUADTO
+211.173 358.876 210.282 360.235 QUADTO
+210.282 364.954 lineto
+208.267 364.954 lineto
+closepath
+220.617 365.126 M
+218.852 365.126 217.82 364.063 QUADTO
+216.789 363.001 216.789 361.204 QUADTO
+216.789 359.376 217.828 358.329 QUADTO
+218.867 357.282 220.664 357.282 QUADTO
+222.461 357.282 223.5 358.329 QUADTO
+224.539 359.376 224.539 361.188 QUADTO
+224.539 363.032 223.492 364.079 QUADTO
+222.445 365.126 220.617 365.126 QUADTO
+closepath
+220.648 363.86 M
+222.383 363.86 222.383 361.188 QUADTO
+222.383 359.97 221.922 359.259 QUADTO
+221.461 358.548 220.664 358.548 QUADTO
+219.867 358.548 219.398 359.259 QUADTO
+218.93 359.97 218.93 361.204 QUADTO
+218.93 362.423 219.391 363.141 QUADTO
+219.852 363.86 220.648 363.86 QUADTO
+closepath
+231.121 364.954 M
+231.121 363.532 lineto
+230.34 365.126 228.668 365.126 QUADTO
+227.324 365.126 226.551 364.134 QUADTO
+225.777 363.141 225.777 361.407 QUADTO
+225.777 359.516 226.645 358.399 QUADTO
+227.512 357.282 228.98 357.282 QUADTO
+230.168 357.282 231.121 358.204 QUADTO
+231.121 354.157 lineto
+233.152 354.157 lineto
+233.152 364.954 lineto
+231.121 364.954 lineto
+closepath
+231.121 359.407 M
+230.387 358.595 229.559 358.595 QUADTO
+228.809 358.595 228.371 359.313 QUADTO
+227.934 360.032 227.934 361.235 QUADTO
+227.934 363.532 229.402 363.532 QUADTO
+230.309 363.532 231.121 362.376 QUADTO
+231.121 359.407 lineto
+closepath
+241.788 364.704 M
+240.351 365.126 239.054 365.126 QUADTO
+237.179 365.126 236.093 364.055 QUADTO
+235.007 362.985 235.007 361.141 QUADTO
+235.007 359.407 235.999 358.345 QUADTO
+236.991 357.282 238.632 357.282 QUADTO
+240.272 357.282 241.03 358.321 QUADTO
+241.788 359.36 241.788 361.61 QUADTO
+237.132 361.61 lineto
+237.335 363.751 239.491 363.751 QUADTO
+240.507 363.751 241.788 363.282 QUADTO
+241.788 364.704 lineto
+closepath
+237.101 360.47 M
+239.804 360.47 lineto
+239.804 358.548 238.569 358.548 QUADTO
+237.304 358.548 237.101 360.47 QUADTO
+closepath
+243.679 364.72 M
+243.679 363.235 lineto
+245.194 363.86 246.257 363.86 QUADTO
+247.491 363.86 247.491 363.016 QUADTO
+247.491 362.47 246.476 362.048 QUADTO
+245.788 361.782 lineto
+244.679 361.329 244.194 360.813 QUADTO
+243.71 360.298 243.71 359.532 QUADTO
+243.71 358.454 244.53 357.868 QUADTO
+245.351 357.282 246.804 357.282 QUADTO
+247.726 357.282 248.991 357.548 QUADTO
+248.991 358.97 lineto
+247.772 358.548 246.976 358.548 QUADTO
+245.71 358.548 245.71 359.313 QUADTO
+245.71 359.829 246.647 360.188 QUADTO
+247.226 360.407 lineto
+248.554 360.907 249.069 361.423 QUADTO
+249.585 361.938 249.585 362.751 QUADTO
+249.585 363.798 248.702 364.462 QUADTO
+247.819 365.126 246.413 365.126 QUADTO
+245.069 365.126 243.679 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.533 34.247 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+55.711 330.426 M
+54.367 330.426 53.539 329.16 QUADTO
+52.711 327.894 52.711 325.863 QUADTO
+52.711 323.816 53.547 322.566 QUADTO
+54.383 321.316 55.742 321.316 QUADTO
+57.102 321.316 57.938 322.566 QUADTO
+58.773 323.816 58.773 325.848 QUADTO
+58.773 327.926 57.938 329.176 QUADTO
+57.102 330.426 55.711 330.426 QUADTO
+closepath
+55.727 329.551 M
+57.555 329.551 57.555 325.832 QUADTO
+57.555 322.191 55.742 322.191 QUADTO
+53.945 322.191 53.945 325.863 QUADTO
+53.945 329.551 55.727 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 325.931 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+53.398 293.696 M
+53.398 292.665 lineto
+54.273 293.008 55.039 293.008 QUADTO
+55.898 293.008 56.391 292.508 QUADTO
+56.883 292.008 56.883 291.118 QUADTO
+56.883 289.165 54.195 289.165 QUADTO
+53.883 289.165 53.555 289.211 QUADTO
+53.555 284.993 lineto
+57.945 284.993 lineto
+57.945 285.993 lineto
+54.57 285.993 lineto
+54.57 288.29 lineto
+56.242 288.29 57.18 289.055 QUADTO
+58.117 289.821 58.117 291.18 QUADTO
+58.117 292.446 57.258 293.165 QUADTO
+56.398 293.883 54.898 293.883 QUADTO
+54.242 293.883 53.398 293.696 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 289.389 M
+65.533 289.389 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+46.17 257.122 M
+46.17 256.247 lineto
+47.904 256.247 lineto
+47.904 249.404 lineto
+46.17 249.841 lineto
+46.17 248.95 lineto
+49.061 248.232 lineto
+49.061 256.247 lineto
+50.795 256.247 lineto
+50.795 257.122 lineto
+46.17 257.122 lineto
+closepath
+55.711 257.341 M
+54.367 257.341 53.539 256.075 QUADTO
+52.711 254.81 52.711 252.779 QUADTO
+52.711 250.732 53.547 249.482 QUADTO
+54.383 248.232 55.742 248.232 QUADTO
+57.102 248.232 57.938 249.482 QUADTO
+58.773 250.732 58.773 252.763 QUADTO
+58.773 254.841 57.938 256.091 QUADTO
+57.102 257.341 55.711 257.341 QUADTO
+closepath
+55.727 256.466 M
+57.555 256.466 57.555 252.747 QUADTO
+57.555 249.107 55.742 249.107 QUADTO
+53.945 249.107 53.945 252.779 QUADTO
+53.945 256.466 55.727 256.466 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 252.847 M
+65.533 252.847 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+46.17 220.58 M
+46.17 219.705 lineto
+47.904 219.705 lineto
+47.904 212.861 lineto
+46.17 213.299 lineto
+46.17 212.408 lineto
+49.061 211.689 lineto
+49.061 219.705 lineto
+50.795 219.705 lineto
+50.795 220.58 lineto
+46.17 220.58 lineto
+closepath
+53.398 220.611 M
+53.398 219.58 lineto
+54.273 219.924 55.039 219.924 QUADTO
+55.898 219.924 56.391 219.424 QUADTO
+56.883 218.924 56.883 218.033 QUADTO
+56.883 216.08 54.195 216.08 QUADTO
+53.883 216.08 53.555 216.127 QUADTO
+53.555 211.908 lineto
+57.945 211.908 lineto
+57.945 212.908 lineto
+54.57 212.908 lineto
+54.57 215.205 lineto
+56.242 215.205 57.18 215.971 QUADTO
+58.117 216.736 58.117 218.096 QUADTO
+58.117 219.361 57.258 220.08 QUADTO
+56.398 220.799 54.898 220.799 QUADTO
+54.242 220.799 53.398 220.611 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 216.304 M
+65.533 216.304 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.357 184.038 M
+45.357 183.022 lineto
+45.857 181.85 47.389 180.459 QUADTO
+48.061 179.866 lineto
+49.326 178.709 49.326 177.569 QUADTO
+49.326 176.85 48.896 176.436 QUADTO
+48.467 176.022 47.701 176.022 QUADTO
+46.795 176.022 45.576 176.709 QUADTO
+45.576 175.694 lineto
+46.732 175.147 47.857 175.147 QUADTO
+49.076 175.147 49.818 175.803 QUADTO
+50.561 176.459 50.561 177.538 QUADTO
+50.561 178.319 50.186 178.928 QUADTO
+49.811 179.538 48.795 180.397 QUADTO
+48.357 180.772 lineto
+46.967 181.944 46.748 183.022 QUADTO
+50.514 183.022 lineto
+50.514 184.038 lineto
+45.357 184.038 lineto
+closepath
+55.711 184.256 M
+54.367 184.256 53.539 182.991 QUADTO
+52.711 181.725 52.711 179.694 QUADTO
+52.711 177.647 53.547 176.397 QUADTO
+54.383 175.147 55.742 175.147 QUADTO
+57.102 175.147 57.938 176.397 QUADTO
+58.773 177.647 58.773 179.678 QUADTO
+58.773 181.756 57.938 183.006 QUADTO
+57.102 184.256 55.711 184.256 QUADTO
+closepath
+55.727 183.381 M
+57.555 183.381 57.555 179.663 QUADTO
+57.555 176.022 55.742 176.022 QUADTO
+53.945 176.022 53.945 179.694 QUADTO
+53.945 183.381 55.727 183.381 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 179.762 M
+65.533 179.762 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.357 147.495 M
+45.357 146.48 lineto
+45.857 145.308 47.389 143.917 QUADTO
+48.061 143.323 lineto
+49.326 142.167 49.326 141.027 QUADTO
+49.326 140.308 48.896 139.894 QUADTO
+48.467 139.48 47.701 139.48 QUADTO
+46.795 139.48 45.576 140.167 QUADTO
+45.576 139.152 lineto
+46.732 138.605 47.857 138.605 QUADTO
+49.076 138.605 49.818 139.261 QUADTO
+50.561 139.917 50.561 140.995 QUADTO
+50.561 141.777 50.186 142.386 QUADTO
+49.811 142.995 48.795 143.855 QUADTO
+48.357 144.23 lineto
+46.967 145.402 46.748 146.48 QUADTO
+50.514 146.48 lineto
+50.514 147.495 lineto
+45.357 147.495 lineto
+closepath
+53.398 147.527 M
+53.398 146.495 lineto
+54.273 146.839 55.039 146.839 QUADTO
+55.898 146.839 56.391 146.339 QUADTO
+56.883 145.839 56.883 144.948 QUADTO
+56.883 142.995 54.195 142.995 QUADTO
+53.883 142.995 53.555 143.042 QUADTO
+53.555 138.823 lineto
+57.945 138.823 lineto
+57.945 139.823 lineto
+54.57 139.823 lineto
+54.57 142.12 lineto
+56.242 142.12 57.18 142.886 QUADTO
+58.117 143.652 58.117 145.011 QUADTO
+58.117 146.277 57.258 146.995 QUADTO
+56.398 147.714 54.898 147.714 QUADTO
+54.242 147.714 53.398 147.527 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 143.22 M
+65.533 143.22 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.576 110.89 M
+45.576 109.812 lineto
+46.826 110.297 47.529 110.297 QUADTO
+48.357 110.297 48.881 109.812 QUADTO
+49.404 109.328 49.404 108.562 QUADTO
+49.404 106.734 46.842 106.734 QUADTO
+46.373 106.734 lineto
+46.373 105.953 lineto
+46.779 105.953 lineto
+49.186 105.953 49.186 104.265 QUADTO
+49.186 102.937 47.607 102.937 QUADTO
+46.732 102.937 45.701 103.422 QUADTO
+45.701 102.406 lineto
+46.717 102.062 47.686 102.062 QUADTO
+50.342 102.062 50.342 104.078 QUADTO
+50.342 105.609 48.529 106.25 QUADTO
+50.639 106.734 50.639 108.547 QUADTO
+50.639 109.781 49.826 110.476 QUADTO
+49.014 111.172 47.607 111.172 QUADTO
+46.795 111.172 45.576 110.89 QUADTO
+closepath
+55.711 111.172 M
+54.367 111.172 53.539 109.906 QUADTO
+52.711 108.64 52.711 106.609 QUADTO
+52.711 104.562 53.547 103.312 QUADTO
+54.383 102.062 55.742 102.062 QUADTO
+57.102 102.062 57.938 103.312 QUADTO
+58.773 104.562 58.773 106.594 QUADTO
+58.773 108.672 57.938 109.922 QUADTO
+57.102 111.172 55.711 111.172 QUADTO
+closepath
+55.727 110.297 M
+57.555 110.297 57.555 106.578 QUADTO
+57.555 102.937 55.742 102.937 QUADTO
+53.945 102.937 53.945 106.609 QUADTO
+53.945 110.297 55.727 110.297 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 106.677 M
+65.533 106.677 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+45.576 74.348 M
+45.576 73.27 lineto
+46.826 73.754 47.529 73.754 QUADTO
+48.357 73.754 48.881 73.27 QUADTO
+49.404 72.786 49.404 72.02 QUADTO
+49.404 70.192 46.842 70.192 QUADTO
+46.373 70.192 lineto
+46.373 69.411 lineto
+46.779 69.411 lineto
+49.186 69.411 49.186 67.723 QUADTO
+49.186 66.395 47.607 66.395 QUADTO
+46.732 66.395 45.701 66.879 QUADTO
+45.701 65.864 lineto
+46.717 65.52 47.686 65.52 QUADTO
+50.342 65.52 50.342 67.536 QUADTO
+50.342 69.067 48.529 69.707 QUADTO
+50.639 70.192 50.639 72.004 QUADTO
+50.639 73.239 49.826 73.934 QUADTO
+49.014 74.629 47.607 74.629 QUADTO
+46.795 74.629 45.576 74.348 QUADTO
+closepath
+53.398 74.442 M
+53.398 73.411 lineto
+54.273 73.754 55.039 73.754 QUADTO
+55.898 73.754 56.391 73.254 QUADTO
+56.883 72.754 56.883 71.864 QUADTO
+56.883 69.911 54.195 69.911 QUADTO
+53.883 69.911 53.555 69.957 QUADTO
+53.555 65.739 lineto
+57.945 65.739 lineto
+57.945 66.739 lineto
+54.57 66.739 lineto
+54.57 69.036 lineto
+56.242 69.036 57.18 69.801 QUADTO
+58.117 70.567 58.117 71.926 QUADTO
+58.117 73.192 57.258 73.911 QUADTO
+56.398 74.629 54.898 74.629 QUADTO
+54.242 74.629 53.398 74.442 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 70.135 M
+65.533 70.135 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -149.21789 210.96009] concat
+newpath
+210.96 149.218 M
+210.96 549.218 lineto
+-189.04 549.218 lineto
+-189.04 149.218 lineto
+210.96 149.218 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-24.448 185.077 M
+-24.448 174.28 lineto
+-22.432 174.28 lineto
+-22.432 185.077 lineto
+-24.448 185.077 lineto
+closepath
+-16.739 185.249 M
+-18.504 185.249 -19.536 184.187 QUADTO
+-20.567 183.124 -20.567 181.327 QUADTO
+-20.567 179.499 -19.528 178.452 QUADTO
+-18.489 177.405 -16.692 177.405 QUADTO
+-14.895 177.405 -13.856 178.452 QUADTO
+-12.817 179.499 -12.817 181.312 QUADTO
+-12.817 183.155 -13.864 184.202 QUADTO
+-14.911 185.249 -16.739 185.249 QUADTO
+closepath
+-16.708 183.983 M
+-14.973 183.983 -14.973 181.312 QUADTO
+-14.973 180.093 -15.434 179.382 QUADTO
+-15.895 178.671 -16.692 178.671 QUADTO
+-17.489 178.671 -17.958 179.382 QUADTO
+-18.426 180.093 -18.426 181.327 QUADTO
+-18.426 182.546 -17.965 183.265 QUADTO
+-17.504 183.983 -16.708 183.983 QUADTO
+closepath
+-7.282 184.265 M
+-8.282 185.249 -9.438 185.249 QUADTO
+-10.422 185.249 -11.04 184.648 QUADTO
+-11.657 184.046 -11.657 183.093 QUADTO
+-11.657 181.843 -10.665 181.171 QUADTO
+-9.672 180.499 -7.813 180.499 QUADTO
+-7.282 180.499 lineto
+-7.282 179.812 lineto
+-7.282 178.64 -8.61 178.64 QUADTO
+-9.797 178.64 -11 179.312 QUADTO
+-11 177.921 lineto
+-9.625 177.405 -8.282 177.405 QUADTO
+-5.329 177.405 -5.329 179.749 QUADTO
+-5.329 183.062 lineto
+-5.329 183.952 -4.766 183.952 QUADTO
+-4.672 183.952 -4.5 183.921 QUADTO
+-4.454 185.062 lineto
+-5.094 185.249 -5.594 185.249 QUADTO
+-6.829 185.249 -7.188 184.265 QUADTO
+-7.282 184.265 lineto
+closepath
+-7.282 183.187 M
+-7.282 181.655 lineto
+-7.75 181.655 lineto
+-9.719 181.655 -9.719 182.89 QUADTO
+-9.719 183.312 -9.438 183.593 QUADTO
+-9.157 183.874 -8.735 183.874 QUADTO
+-8.016 183.874 -7.282 183.187 QUADTO
+closepath
+1.996 185.077 M
+1.996 183.655 lineto
+1.214 185.249 -0.458 185.249 QUADTO
+-1.801 185.249 -2.575 184.257 QUADTO
+-3.348 183.265 -3.348 181.53 QUADTO
+-3.348 179.64 -2.481 178.523 QUADTO
+-1.614 177.405 -0.145 177.405 QUADTO
+1.042 177.405 1.996 178.327 QUADTO
+1.996 174.28 lineto
+4.027 174.28 lineto
+4.027 185.077 lineto
+1.996 185.077 lineto
+closepath
+1.996 179.53 M
+1.261 178.718 0.433 178.718 QUADTO
+-0.317 178.718 -0.754 179.437 QUADTO
+-1.192 180.155 -1.192 181.358 QUADTO
+-1.192 183.655 0.277 183.655 QUADTO
+1.183 183.655 1.996 182.499 QUADTO
+1.996 179.53 lineto
+closepath
+11.386 185.077 M
+11.386 178.843 lineto
+10.339 178.843 lineto
+10.339 177.577 lineto
+11.386 177.577 lineto
+11.386 177.03 lineto
+11.386 174.108 14.152 174.108 QUADTO
+15.042 174.108 15.996 174.374 QUADTO
+15.996 175.733 lineto
+15.136 175.374 14.449 175.374 QUADTO
+13.402 175.374 13.402 176.952 QUADTO
+13.402 177.577 lineto
+15.308 177.577 lineto
+15.308 178.843 lineto
+13.402 178.843 lineto
+13.402 185.077 lineto
+11.386 185.077 lineto
+closepath
+16.971 185.077 M
+16.971 177.577 lineto
+18.987 177.577 lineto
+18.987 178.983 lineto
+19.784 177.405 21.393 177.405 QUADTO
+21.581 177.405 21.768 177.437 QUADTO
+21.768 179.249 lineto
+21.331 179.093 20.956 179.093 QUADTO
+19.752 179.093 18.987 180.312 QUADTO
+18.987 185.077 lineto
+16.971 185.077 lineto
+closepath
+27.007 184.265 M
+26.007 185.249 24.851 185.249 QUADTO
+23.867 185.249 23.25 184.648 QUADTO
+22.632 184.046 22.632 183.093 QUADTO
+22.632 181.843 23.625 181.171 QUADTO
+24.617 180.499 26.476 180.499 QUADTO
+27.007 180.499 lineto
+27.007 179.812 lineto
+27.007 178.64 25.679 178.64 QUADTO
+24.492 178.64 23.289 179.312 QUADTO
+23.289 177.921 lineto
+24.664 177.405 26.007 177.405 QUADTO
+28.96 177.405 28.96 179.749 QUADTO
+28.96 183.062 lineto
+28.96 183.952 29.523 183.952 QUADTO
+29.617 183.952 29.789 183.921 QUADTO
+29.835 185.062 lineto
+29.195 185.249 28.695 185.249 QUADTO
+27.46 185.249 27.101 184.265 QUADTO
+27.007 184.265 lineto
+closepath
+27.007 183.187 M
+27.007 181.655 lineto
+26.539 181.655 lineto
+24.57 181.655 24.57 182.89 QUADTO
+24.57 183.312 24.851 183.593 QUADTO
+25.132 183.874 25.554 183.874 QUADTO
+26.273 183.874 27.007 183.187 QUADTO
+closepath
+37.097 184.905 M
+35.847 185.249 34.769 185.249 QUADTO
+32.972 185.249 31.933 184.194 QUADTO
+30.894 183.14 30.894 181.312 QUADTO
+30.894 179.483 31.964 178.444 QUADTO
+33.035 177.405 34.925 177.405 QUADTO
+35.847 177.405 37.035 177.687 QUADTO
+37.035 179.155 lineto
+35.8 178.749 35.05 178.749 QUADTO
+34.144 178.749 33.589 179.452 QUADTO
+33.035 180.155 33.035 181.296 QUADTO
+33.035 182.483 33.636 183.194 QUADTO
+34.238 183.905 35.222 183.905 QUADTO
+36.144 183.905 37.097 183.515 QUADTO
+37.097 184.905 lineto
+closepath
+42.892 185.03 M
+42.158 185.249 41.751 185.249 QUADTO
+39.111 185.249 39.111 182.78 QUADTO
+39.111 178.843 lineto
+38.267 178.843 lineto
+38.267 177.577 lineto
+39.111 177.577 lineto
+39.111 176.312 lineto
+41.142 176.077 lineto
+41.142 177.577 lineto
+42.736 177.577 lineto
+42.736 178.843 lineto
+41.142 178.843 lineto
+41.142 182.515 lineto
+41.142 183.905 42.267 183.905 QUADTO
+42.517 183.905 42.892 183.812 QUADTO
+42.892 185.03 lineto
+closepath
+44.691 185.077 M
+44.691 177.577 lineto
+46.707 177.577 lineto
+46.707 185.077 lineto
+44.691 185.077 lineto
+closepath
+44.691 176.312 M
+44.691 174.624 lineto
+46.707 174.624 lineto
+46.707 176.312 lineto
+44.691 176.312 lineto
+closepath
+52.4 185.249 M
+50.634 185.249 49.603 184.187 QUADTO
+48.572 183.124 48.572 181.327 QUADTO
+48.572 179.499 49.611 178.452 QUADTO
+50.65 177.405 52.447 177.405 QUADTO
+54.244 177.405 55.283 178.452 QUADTO
+56.322 179.499 56.322 181.312 QUADTO
+56.322 183.155 55.275 184.202 QUADTO
+54.228 185.249 52.4 185.249 QUADTO
+closepath
+52.431 183.983 M
+54.166 183.983 54.166 181.312 QUADTO
+54.166 180.093 53.705 179.382 QUADTO
+53.244 178.671 52.447 178.671 QUADTO
+51.65 178.671 51.181 179.382 QUADTO
+50.712 180.093 50.712 181.327 QUADTO
+50.712 182.546 51.173 183.265 QUADTO
+51.634 183.983 52.431 183.983 QUADTO
+closepath
+58.185 185.077 M
+58.185 177.577 lineto
+60.201 177.577 lineto
+60.201 178.983 lineto
+61.201 177.405 62.763 177.405 QUADTO
+63.763 177.405 64.349 178.038 QUADTO
+64.935 178.671 64.935 179.765 QUADTO
+64.935 185.077 lineto
+62.904 185.077 lineto
+62.904 180.265 lineto
+62.904 178.999 62.06 178.999 QUADTO
+61.091 178.999 60.201 180.358 QUADTO
+60.201 185.077 lineto
+58.185 185.077 lineto
+closepath
+70.629 174.202 M
+70.629 175.499 lineto
+68.801 177.343 68.801 180.687 QUADTO
+68.801 184.046 70.629 185.874 QUADTO
+70.629 187.187 lineto
+68.958 186.28 67.958 184.507 QUADTO
+66.958 182.733 66.958 180.687 QUADTO
+66.958 178.64 67.942 176.89 QUADTO
+68.926 175.14 70.629 174.202 QUADTO
+closepath
+72.13 185.327 M
+80.084 174.702 lineto
+81.443 174.702 lineto
+73.49 185.327 lineto
+72.13 185.327 lineto
+closepath
+73.849 180.015 M
+72.755 180.015 72.115 179.335 QUADTO
+71.474 178.655 71.474 177.483 QUADTO
+71.474 176.312 72.115 175.632 QUADTO
+72.755 174.952 73.88 174.952 QUADTO
+74.99 174.952 75.638 175.632 QUADTO
+76.287 176.312 76.287 177.483 QUADTO
+76.287 178.671 75.638 179.343 QUADTO
+74.99 180.015 73.849 180.015 QUADTO
+closepath
+73.865 178.999 M
+74.755 178.999 74.755 177.483 QUADTO
+74.755 175.968 73.88 175.968 QUADTO
+72.99 175.968 72.99 177.483 QUADTO
+72.99 178.999 73.865 178.999 QUADTO
+closepath
+79.677 185.077 M
+78.568 185.077 77.927 184.398 QUADTO
+77.287 183.718 77.287 182.546 QUADTO
+77.287 181.358 77.935 180.687 QUADTO
+78.584 180.015 79.693 180.015 QUADTO
+80.818 180.015 81.459 180.687 QUADTO
+82.099 181.358 82.099 182.546 QUADTO
+82.099 183.733 81.459 184.405 QUADTO
+80.818 185.077 79.677 185.077 QUADTO
+closepath
+79.677 184.062 M
+80.584 184.062 80.584 182.546 QUADTO
+80.584 181.03 79.693 181.03 QUADTO
+78.802 181.03 78.802 182.546 QUADTO
+78.802 184.062 79.677 184.062 QUADTO
+closepath
+82.751 174.202 M
+82.751 175.499 lineto
+84.58 177.343 84.58 180.687 QUADTO
+84.58 184.046 82.751 185.874 QUADTO
+82.751 187.187 lineto
+84.423 186.28 85.423 184.507 QUADTO
+86.423 182.733 86.423 180.687 QUADTO
+86.423 178.64 85.439 176.89 QUADTO
+84.455 175.14 82.751 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+76.771 34.247 M
+76.771 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+120.344 34.247 M
+120.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+145.833 34.247 M
+145.833 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+163.918 34.247 M
+163.918 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+177.945 34.247 M
+177.945 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+189.407 34.247 M
+189.407 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+199.097 34.247 M
+199.097 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+207.491 34.247 M
+207.491 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+214.896 34.247 M
+214.896 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+265.092 34.247 M
+265.092 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+290.581 34.247 M
+290.581 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+308.666 34.247 M
+308.666 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+322.694 34.247 M
+322.694 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+334.155 34.247 M
+334.155 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+343.845 34.247 M
+343.845 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+352.24 34.247 M
+352.24 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+359.644 34.247 M
+359.644 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 289.389 M
+388 289.389 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 252.847 M
+388 252.847 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 216.304 M
+388 216.304 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 179.762 M
+388 179.762 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 143.22 M
+388 143.22 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 106.677 M
+388 106.677 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 70.135 M
+388 70.135 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 99.259 M
+102.26 51.9 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 51.9 M
+120.344 94.143 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 94.143 M
+145.833 56.651 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 56.651 M
+163.918 103.133 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 103.133 M
+189.407 65.457 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 65.457 M
+207.491 107.664 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 107.664 M
+232.98 71.341 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 71.341 M
+251.065 86.14 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 86.14 M
+276.554 61.73 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 61.73 M
+294.638 90.562 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 90.562 M
+320.127 72.62 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 72.62 M
+338.212 97.834 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 97.834 M
+353.792 101.781 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 101.781 M
+366.267 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 162.404 M
+102.26 162.258 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 162.258 M
+120.344 160.906 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 160.906 M
+145.833 160.979 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 160.979 M
+163.918 161.783 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 161.783 M
+189.407 159.773 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 159.773 M
+207.491 162.514 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 162.514 M
+232.98 158.312 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 158.312 M
+251.065 158.75 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 158.75 M
+276.554 155.9 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 155.9 M
+294.638 155.534 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 155.534 M
+320.127 153.598 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 153.598 M
+338.212 154.328 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 154.328 M
+353.792 152.538 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 152.538 M
+366.267 150.418 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+79.771 99.259 M
+79.771 100.916 78.427 102.259 76.771 102.259 curveto
+75.114 102.259 73.771 100.916 73.771 99.259 curveto
+73.771 97.602 75.114 96.259 76.771 96.259 curveto
+78.427 96.259 79.771 97.602 79.771 99.259 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+79.771 99.259 M
+79.771 100.916 78.427 102.259 76.771 102.259 curveto
+75.114 102.259 73.771 100.916 73.771 99.259 curveto
+73.771 97.602 75.114 96.259 76.771 96.259 curveto
+78.427 96.259 79.771 97.602 79.771 99.259 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+105.26 51.9 M
+105.26 53.557 103.916 54.9 102.26 54.9 curveto
+100.603 54.9 99.26 53.557 99.26 51.9 curveto
+99.26 50.243 100.603 48.9 102.26 48.9 curveto
+103.916 48.9 105.26 50.243 105.26 51.9 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+105.26 51.9 M
+105.26 53.557 103.916 54.9 102.26 54.9 curveto
+100.603 54.9 99.26 53.557 99.26 51.9 curveto
+99.26 50.243 100.603 48.9 102.26 48.9 curveto
+103.916 48.9 105.26 50.243 105.26 51.9 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+123.344 94.143 M
+123.344 95.8 122.001 97.143 120.344 97.143 curveto
+118.687 97.143 117.344 95.8 117.344 94.143 curveto
+117.344 92.486 118.687 91.143 120.344 91.143 curveto
+122.001 91.143 123.344 92.486 123.344 94.143 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+123.344 94.143 M
+123.344 95.8 122.001 97.143 120.344 97.143 curveto
+118.687 97.143 117.344 95.8 117.344 94.143 curveto
+117.344 92.486 118.687 91.143 120.344 91.143 curveto
+122.001 91.143 123.344 92.486 123.344 94.143 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+148.833 56.651 M
+148.833 58.308 147.49 59.651 145.833 59.651 curveto
+144.176 59.651 142.833 58.308 142.833 56.651 curveto
+142.833 54.994 144.176 53.651 145.833 53.651 curveto
+147.49 53.651 148.833 54.994 148.833 56.651 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+148.833 56.651 M
+148.833 58.308 147.49 59.651 145.833 59.651 curveto
+144.176 59.651 142.833 58.308 142.833 56.651 curveto
+142.833 54.994 144.176 53.651 145.833 53.651 curveto
+147.49 53.651 148.833 54.994 148.833 56.651 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+166.918 103.133 M
+166.918 104.79 165.575 106.133 163.918 106.133 curveto
+162.261 106.133 160.918 104.79 160.918 103.133 curveto
+160.918 101.476 162.261 100.133 163.918 100.133 curveto
+165.575 100.133 166.918 101.476 166.918 103.133 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+166.918 103.133 M
+166.918 104.79 165.575 106.133 163.918 106.133 curveto
+162.261 106.133 160.918 104.79 160.918 103.133 curveto
+160.918 101.476 162.261 100.133 163.918 100.133 curveto
+165.575 100.133 166.918 101.476 166.918 103.133 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+192.407 65.457 M
+192.407 67.114 191.064 68.457 189.407 68.457 curveto
+187.75 68.457 186.407 67.114 186.407 65.457 curveto
+186.407 63.801 187.75 62.457 189.407 62.457 curveto
+191.064 62.457 192.407 63.801 192.407 65.457 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.407 65.457 M
+192.407 67.114 191.064 68.457 189.407 68.457 curveto
+187.75 68.457 186.407 67.114 186.407 65.457 curveto
+186.407 63.801 187.75 62.457 189.407 62.457 curveto
+191.064 62.457 192.407 63.801 192.407 65.457 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+210.491 107.664 M
+210.491 109.321 209.148 110.664 207.491 110.664 curveto
+205.834 110.664 204.491 109.321 204.491 107.664 curveto
+204.491 106.007 205.834 104.664 207.491 104.664 curveto
+209.148 104.664 210.491 106.007 210.491 107.664 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+210.491 107.664 M
+210.491 109.321 209.148 110.664 207.491 110.664 curveto
+205.834 110.664 204.491 109.321 204.491 107.664 curveto
+204.491 106.007 205.834 104.664 207.491 104.664 curveto
+209.148 104.664 210.491 106.007 210.491 107.664 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+235.98 71.341 M
+235.98 72.998 234.637 74.341 232.98 74.341 curveto
+231.323 74.341 229.98 72.998 229.98 71.341 curveto
+229.98 69.684 231.323 68.341 232.98 68.341 curveto
+234.637 68.341 235.98 69.684 235.98 71.341 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+235.98 71.341 M
+235.98 72.998 234.637 74.341 232.98 74.341 curveto
+231.323 74.341 229.98 72.998 229.98 71.341 curveto
+229.98 69.684 231.323 68.341 232.98 68.341 curveto
+234.637 68.341 235.98 69.684 235.98 71.341 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+254.065 86.14 M
+254.065 87.797 252.722 89.14 251.065 89.14 curveto
+249.408 89.14 248.065 87.797 248.065 86.14 curveto
+248.065 84.484 249.408 83.14 251.065 83.14 curveto
+252.722 83.14 254.065 84.484 254.065 86.14 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+254.065 86.14 M
+254.065 87.797 252.722 89.14 251.065 89.14 curveto
+249.408 89.14 248.065 87.797 248.065 86.14 curveto
+248.065 84.484 249.408 83.14 251.065 83.14 curveto
+252.722 83.14 254.065 84.484 254.065 86.14 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+279.554 61.73 M
+279.554 63.387 278.211 64.73 276.554 64.73 curveto
+274.897 64.73 273.554 63.387 273.554 61.73 curveto
+273.554 60.073 274.897 58.73 276.554 58.73 curveto
+278.211 58.73 279.554 60.073 279.554 61.73 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+279.554 61.73 M
+279.554 63.387 278.211 64.73 276.554 64.73 curveto
+274.897 64.73 273.554 63.387 273.554 61.73 curveto
+273.554 60.073 274.897 58.73 276.554 58.73 curveto
+278.211 58.73 279.554 60.073 279.554 61.73 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+297.638 90.562 M
+297.638 92.219 296.295 93.562 294.638 93.562 curveto
+292.982 93.562 291.638 92.219 291.638 90.562 curveto
+291.638 88.905 292.982 87.562 294.638 87.562 curveto
+296.295 87.562 297.638 88.905 297.638 90.562 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+297.638 90.562 M
+297.638 92.219 296.295 93.562 294.638 93.562 curveto
+292.982 93.562 291.638 92.219 291.638 90.562 curveto
+291.638 88.905 292.982 87.562 294.638 87.562 curveto
+296.295 87.562 297.638 88.905 297.638 90.562 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+323.127 72.62 M
+323.127 74.277 321.784 75.62 320.127 75.62 curveto
+318.471 75.62 317.127 74.277 317.127 72.62 curveto
+317.127 70.963 318.471 69.62 320.127 69.62 curveto
+321.784 69.62 323.127 70.963 323.127 72.62 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+323.127 72.62 M
+323.127 74.277 321.784 75.62 320.127 75.62 curveto
+318.471 75.62 317.127 74.277 317.127 72.62 curveto
+317.127 70.963 318.471 69.62 320.127 69.62 curveto
+321.784 69.62 323.127 70.963 323.127 72.62 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+341.212 97.834 M
+341.212 99.491 339.869 100.834 338.212 100.834 curveto
+336.555 100.834 335.212 99.491 335.212 97.834 curveto
+335.212 96.177 336.555 94.834 338.212 94.834 curveto
+339.869 94.834 341.212 96.177 341.212 97.834 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+341.212 97.834 M
+341.212 99.491 339.869 100.834 338.212 100.834 curveto
+336.555 100.834 335.212 99.491 335.212 97.834 curveto
+335.212 96.177 336.555 94.834 338.212 94.834 curveto
+339.869 94.834 341.212 96.177 341.212 97.834 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+356.792 101.781 M
+356.792 103.437 355.449 104.781 353.792 104.781 curveto
+352.135 104.781 350.792 103.437 350.792 101.781 curveto
+350.792 100.124 352.135 98.781 353.792 98.781 curveto
+355.449 98.781 356.792 100.124 356.792 101.781 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+356.792 101.781 M
+356.792 103.437 355.449 104.781 353.792 104.781 curveto
+352.135 104.781 350.792 103.437 350.792 101.781 curveto
+350.792 100.124 352.135 98.781 353.792 98.781 curveto
+355.449 98.781 356.792 100.124 356.792 101.781 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+369.267 48.136 M
+369.267 49.793 367.924 51.136 366.267 51.136 curveto
+364.61 51.136 363.267 49.793 363.267 48.136 curveto
+363.267 46.48 364.61 45.136 366.267 45.136 curveto
+367.924 45.136 369.267 46.48 369.267 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+369.267 48.136 M
+369.267 49.793 367.924 51.136 366.267 51.136 curveto
+364.61 51.136 363.267 49.793 363.267 48.136 curveto
+363.267 46.48 364.61 45.136 366.267 45.136 curveto
+367.924 45.136 369.267 46.48 369.267 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+73.771 159.404 M
+79.771 159.404 lineto
+79.771 165.404 lineto
+73.771 165.404 lineto
+73.771 159.404 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+73.771 159.404 M
+79.771 159.404 lineto
+79.771 165.404 lineto
+73.771 165.404 lineto
+73.771 159.404 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+99.26 159.258 M
+105.26 159.258 lineto
+105.26 165.258 lineto
+99.26 165.258 lineto
+99.26 159.258 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+99.26 159.258 M
+105.26 159.258 lineto
+105.26 165.258 lineto
+99.26 165.258 lineto
+99.26 159.258 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+117.344 157.906 M
+123.344 157.906 lineto
+123.344 163.906 lineto
+117.344 163.906 lineto
+117.344 157.906 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+117.344 157.906 M
+123.344 157.906 lineto
+123.344 163.906 lineto
+117.344 163.906 lineto
+117.344 157.906 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+142.833 157.979 M
+148.833 157.979 lineto
+148.833 163.979 lineto
+142.833 163.979 lineto
+142.833 157.979 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+142.833 157.979 M
+148.833 157.979 lineto
+148.833 163.979 lineto
+142.833 163.979 lineto
+142.833 157.979 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+160.918 158.783 M
+166.918 158.783 lineto
+166.918 164.783 lineto
+160.918 164.783 lineto
+160.918 158.783 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+160.918 158.783 M
+166.918 158.783 lineto
+166.918 164.783 lineto
+160.918 164.783 lineto
+160.918 158.783 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+186.407 156.773 M
+192.407 156.773 lineto
+192.407 162.773 lineto
+186.407 162.773 lineto
+186.407 156.773 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+186.407 156.773 M
+192.407 156.773 lineto
+192.407 162.773 lineto
+186.407 162.773 lineto
+186.407 156.773 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+204.491 159.514 M
+210.491 159.514 lineto
+210.491 165.514 lineto
+204.491 165.514 lineto
+204.491 159.514 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.491 159.514 M
+210.491 159.514 lineto
+210.491 165.514 lineto
+204.491 165.514 lineto
+204.491 159.514 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+229.98 155.312 M
+235.98 155.312 lineto
+235.98 161.312 lineto
+229.98 161.312 lineto
+229.98 155.312 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+229.98 155.312 M
+235.98 155.312 lineto
+235.98 161.312 lineto
+229.98 161.312 lineto
+229.98 155.312 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+248.065 155.75 M
+254.065 155.75 lineto
+254.065 161.75 lineto
+248.065 161.75 lineto
+248.065 155.75 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+248.065 155.75 M
+254.065 155.75 lineto
+254.065 161.75 lineto
+248.065 161.75 lineto
+248.065 155.75 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+273.554 152.9 M
+279.554 152.9 lineto
+279.554 158.9 lineto
+273.554 158.9 lineto
+273.554 152.9 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+273.554 152.9 M
+279.554 152.9 lineto
+279.554 158.9 lineto
+273.554 158.9 lineto
+273.554 152.9 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+291.638 152.534 M
+297.638 152.534 lineto
+297.638 158.534 lineto
+291.638 158.534 lineto
+291.638 152.534 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+291.638 152.534 M
+297.638 152.534 lineto
+297.638 158.534 lineto
+291.638 158.534 lineto
+291.638 152.534 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+317.127 150.598 M
+323.127 150.598 lineto
+323.127 156.598 lineto
+317.127 156.598 lineto
+317.127 150.598 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+317.127 150.598 M
+323.127 150.598 lineto
+323.127 156.598 lineto
+317.127 156.598 lineto
+317.127 150.598 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+335.212 151.328 M
+341.212 151.328 lineto
+341.212 157.328 lineto
+335.212 157.328 lineto
+335.212 151.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+335.212 151.328 M
+341.212 151.328 lineto
+341.212 157.328 lineto
+335.212 157.328 lineto
+335.212 151.328 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+350.792 149.538 M
+356.792 149.538 lineto
+356.792 155.538 lineto
+350.792 155.538 lineto
+350.792 149.538 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.792 149.538 M
+356.792 149.538 lineto
+356.792 155.538 lineto
+350.792 155.538 lineto
+350.792 149.538 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+363.267 147.418 M
+369.267 147.418 lineto
+369.267 153.418 lineto
+363.267 153.418 lineto
+363.267 147.418 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+363.267 147.418 M
+369.267 147.418 lineto
+369.267 153.418 lineto
+363.267 153.418 lineto
+363.267 147.418 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc03kp03.png b/sim/gobs/wiki/dc03kp03.png
new file mode 100644
index 0000000..a970ee8
Binary files /dev/null and b/sim/gobs/wiki/dc03kp03.png differ
diff --git a/sim/gobs/wiki/dc03kp04.eps b/sim/gobs/wiki/dc03kp04.eps
new file mode 100644
index 0000000..65e4237
--- /dev/null
+++ b/sim/gobs/wiki/dc03kp04.eps
@@ -0,0 +1,5632 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-08-24T18:33:06
+%%Pages: (atend)
+%%BoundingBox: 0 0 400 400
+%%LanguageLevel: 3
+%%EndComments
+%%BeginProlog
+%%BeginResource: procset (Apache XML Graphics Std ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2001-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (Basic set of procedures used by the XML Graphics project \(Batik and FOP\))
+/bd{bind def}bind def
+/ld{load def}bd
+/M/moveto ld
+/RM/rmoveto ld
+/t/show ld
+/A/ashow ld
+/cp/closepath ld
+/re {4 2 roll M
+1 index 0 rlineto
+0 exch rlineto
+neg 0 rlineto
+cp } bd
+/_ctm matrix def
+/_tm matrix def
+/BT { _ctm currentmatrix pop matrix _tm copy pop 0 0 moveto } bd
+/ET { _ctm setmatrix } bd
+/iTm { _ctm setmatrix _tm concat } bd
+/Tm { _tm astore pop iTm 0 0 moveto } bd
+/ux 0.0 def
+/uy 0.0 def
+/F {
+ /Tp exch def
+ /Tf exch def
+ Tf findfont Tp scalefont setfont
+ /cf Tf def /cs Tp def /cw ( ) stringwidth pop def
+} bd
+/ULS {currentpoint /uy exch def /ux exch def} bd
+/ULE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add moveto Tcx uy To add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/OLE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs add moveto Tcx uy To add cs add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/SOE {
+ /Tcx currentpoint pop def
+ gsave
+ newpath
+ cf findfont cs scalefont dup
+ /FontMatrix get 0 get /Ts exch def /FontInfo get dup
+ /UnderlinePosition get Ts mul /To exch def
+ /UnderlineThickness get Ts mul /Tt exch def
+ ux uy To add cs 10 mul 26 idiv add moveto Tcx uy To add cs 10 mul 26 idiv add lineto
+ Tt setlinewidth stroke
+ grestore
+} bd
+/QUADTO {
+/Y22 exch store
+/X22 exch store
+/Y21 exch store
+/X21 exch store
+currentpoint
+/Y21 load 2 mul add 3 div exch
+/X21 load 2 mul add 3 div exch
+/X21 load 2 mul /X22 load add 3 div
+/Y21 load 2 mul /Y22 load add 3 div
+/X22 load /Y22 load curveto
+} bd
+/SSPD {
+dup length /d exch dict def
+{
+/v exch def
+/k exch def
+currentpagedevice k known {
+/cpdv currentpagedevice k get def
+v cpdv ne {
+/upd false def
+/nullv v type /nulltype eq def
+/nullcpdv cpdv type /nulltype eq def
+nullv nullcpdv or
+{
+/upd true def
+} {
+/sametype v type cpdv type eq def
+sametype {
+v type /arraytype eq {
+/vlen v length def
+/cpdvlen cpdv length def
+vlen cpdvlen eq {
+0 1 vlen 1 sub {
+/i exch def
+/obj v i get def
+/cpdobj cpdv i get def
+obj cpdobj ne {
+/upd true def
+exit
+} if
+} for
+} {
+/upd true def
+} ifelse
+} {
+v type /dicttype eq {
+v {
+/dv exch def
+/dk exch def
+/cpddv cpdv dk get def
+dv cpddv ne {
+/upd true def
+exit
+} if
+} forall
+} {
+/upd true def
+} ifelse
+} ifelse
+} if
+} ifelse
+upd true eq {
+d k v put
+} if
+} if
+} if
+} forall
+d length 0 gt {
+d setpagedevice
+} if
+} bd
+%%EndResource
+%%BeginResource: procset (Apache XML Graphics EPS ProcSet) 1.0 0
+%%Version: 1.0 0
+%%Copyright: (Copyright 2002-2003 The Apache Software Foundation. License terms: http://www.apache.org/licenses/LICENSE-2.0)
+%%Title: (EPS procedures used by the Apache XML Graphics project \(Batik and FOP\))
+/BeginEPSF { %def
+/b4_Inc_state save def % Save state for cleanup
+/dict_count countdictstack def % Count objects on dict stack
+/op_count count 1 sub def % Count objects on operand stack
+userdict begin % Push userdict on dict stack
+/showpage { } def % Redefine showpage, { } = null proc
+0 setgray 0 setlinecap % Prepare graphics state
+1 setlinewidth 0 setlinejoin
+10 setmiterlimit [ ] 0 setdash newpath
+/languagelevel where % If level not equal to 1 then
+{pop languagelevel % set strokeadjust and
+1 ne % overprint to their defaults.
+{false setstrokeadjust false setoverprint
+} if
+} if
+} bd
+/EndEPSF { %def
+count op_count sub {pop} repeat % Clean up stacks
+countdictstack dict_count sub {end} repeat
+b4_Inc_state restore
+} bd
+%%EndResource
+%%EndProlog
+%%Page: 1 1
+%%PageBoundingBox: 0 0 400 400
+%%BeginPageSetup
+[1 0 0 -1 0 400] concat
+%%EndPageSetup
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+81.354 20.249 M
+81.354 5.796 lineto
+85.338 5.796 lineto
+88.807 15.968 lineto
+92.4 5.796 lineto
+95.885 5.796 lineto
+95.885 20.249 lineto
+93.119 20.249 lineto
+93.119 9.343 lineto
+89.588 19.281 lineto
+87.166 19.281 lineto
+83.713 9.187 lineto
+83.713 20.249 lineto
+81.354 20.249 lineto
+closepath
+104.758 19.093 M
+103.305 20.499 101.664 20.499 QUADTO
+100.258 20.499 99.375 19.64 QUADTO
+98.492 18.781 98.492 17.406 QUADTO
+98.492 15.624 99.914 14.663 QUADTO
+101.336 13.703 103.992 13.703 QUADTO
+104.758 13.703 lineto
+104.758 12.734 lineto
+104.758 11.062 102.852 11.062 QUADTO
+101.164 11.062 99.43 12.015 QUADTO
+99.43 10.031 lineto
+101.398 9.281 103.32 9.281 QUADTO
+107.523 9.281 107.523 12.624 QUADTO
+107.523 17.374 lineto
+107.523 18.64 108.336 18.64 QUADTO
+108.492 18.64 108.727 18.593 QUADTO
+108.789 20.218 lineto
+107.867 20.499 107.164 20.499 QUADTO
+105.398 20.499 104.883 19.093 QUADTO
+104.758 19.093 lineto
+closepath
+104.758 17.546 M
+104.758 15.359 lineto
+104.07 15.359 lineto
+101.273 15.359 101.273 17.124 QUADTO
+101.273 17.718 101.68 18.124 QUADTO
+102.086 18.531 102.68 18.531 QUADTO
+103.695 18.531 104.758 17.546 QUADTO
+closepath
+110.125 20.249 M
+113.797 14.874 lineto
+110.281 9.531 lineto
+113.562 9.531 lineto
+115.875 12.921 lineto
+118.078 9.531 lineto
+120.422 9.531 lineto
+117.062 14.796 lineto
+120.672 20.249 lineto
+117.375 20.249 lineto
+114.969 16.703 lineto
+112.516 20.249 lineto
+110.125 20.249 lineto
+closepath
+123.082 20.249 M
+123.082 9.531 lineto
+125.973 9.531 lineto
+125.973 20.249 lineto
+123.082 20.249 lineto
+closepath
+123.082 7.718 M
+123.082 5.312 lineto
+125.973 5.312 lineto
+125.973 7.718 lineto
+123.082 7.718 lineto
+closepath
+129.586 20.249 M
+129.586 9.531 lineto
+132.352 9.531 lineto
+132.352 11.546 lineto
+133.617 9.281 135.961 9.281 QUADTO
+137.18 9.281 137.961 9.874 QUADTO
+138.742 10.468 138.914 11.546 QUADTO
+140.414 9.281 142.555 9.281 QUADTO
+145.492 9.281 145.492 12.531 QUADTO
+145.492 20.249 lineto
+142.711 20.249 lineto
+142.711 13.468 lineto
+142.711 11.562 141.445 11.562 QUADTO
+140.148 11.562 138.914 13.437 QUADTO
+138.914 20.249 lineto
+136.148 20.249 lineto
+136.148 13.468 lineto
+136.148 11.562 134.867 11.562 QUADTO
+133.586 11.562 132.352 13.437 QUADTO
+132.352 20.249 lineto
+129.586 20.249 lineto
+closepath
+155.605 20.249 M
+155.605 18.234 lineto
+154.199 20.499 151.949 20.499 QUADTO
+150.512 20.499 149.684 19.585 QUADTO
+148.855 18.671 148.855 17.109 QUADTO
+148.855 9.531 lineto
+151.746 9.531 lineto
+151.746 16.39 lineto
+151.746 18.218 152.965 18.218 QUADTO
+154.34 18.218 155.605 16.281 QUADTO
+155.605 9.531 lineto
+158.496 9.531 lineto
+158.496 20.249 lineto
+155.605 20.249 lineto
+closepath
+162.115 20.249 M
+162.115 9.531 lineto
+164.881 9.531 lineto
+164.881 11.546 lineto
+166.146 9.281 168.49 9.281 QUADTO
+169.709 9.281 170.49 9.874 QUADTO
+171.271 10.468 171.443 11.546 QUADTO
+172.943 9.281 175.084 9.281 QUADTO
+178.021 9.281 178.021 12.531 QUADTO
+178.021 20.249 lineto
+175.24 20.249 lineto
+175.24 13.468 lineto
+175.24 11.562 173.975 11.562 QUADTO
+172.678 11.562 171.443 13.437 QUADTO
+171.443 20.249 lineto
+168.678 20.249 lineto
+168.678 13.468 lineto
+168.678 11.562 167.396 11.562 QUADTO
+166.115 11.562 164.881 13.437 QUADTO
+164.881 20.249 lineto
+162.115 20.249 lineto
+closepath
+188.102 20.249 M
+188.102 5.796 lineto
+193.508 5.796 lineto
+197.914 5.796 197.914 9.374 QUADTO
+197.914 10.718 197.164 11.82 QUADTO
+196.414 12.921 195.102 13.499 QUADTO
+199.836 20.249 lineto
+196.18 20.249 lineto
+192.586 14.343 lineto
+190.93 14.343 lineto
+190.93 20.249 lineto
+188.102 20.249 lineto
+closepath
+190.93 12.359 M
+191.617 12.359 lineto
+194.898 12.359 194.898 9.718 QUADTO
+194.898 7.781 191.977 7.781 QUADTO
+190.93 7.781 lineto
+190.93 12.359 lineto
+closepath
+210.619 19.89 M
+208.572 20.499 206.713 20.499 QUADTO
+204.041 20.499 202.486 18.976 QUADTO
+200.932 17.453 200.932 14.812 QUADTO
+200.932 12.312 202.354 10.796 QUADTO
+203.775 9.281 206.104 9.281 QUADTO
+208.463 9.281 209.541 10.765 QUADTO
+210.619 12.249 210.619 15.468 QUADTO
+203.979 15.468 lineto
+204.275 18.531 207.338 18.531 QUADTO
+208.807 18.531 210.619 17.859 QUADTO
+210.619 19.89 lineto
+closepath
+203.932 13.828 M
+207.791 13.828 lineto
+207.791 11.093 206.01 11.093 QUADTO
+204.213 11.093 203.932 13.828 QUADTO
+closepath
+213.619 20.249 M
+213.619 4.828 lineto
+216.51 4.828 lineto
+216.51 11.546 lineto
+217.619 9.281 220.01 9.281 QUADTO
+221.947 9.281 223.057 10.695 QUADTO
+224.166 12.109 224.166 14.593 QUADTO
+224.166 17.281 222.916 18.89 QUADTO
+221.666 20.499 219.572 20.499 QUADTO
+217.775 20.499 216.51 19.171 QUADTO
+215.963 20.249 lineto
+213.619 20.249 lineto
+closepath
+216.51 17.453 M
+217.557 18.624 218.744 18.624 QUADTO
+219.822 18.624 220.455 17.593 QUADTO
+221.088 16.562 221.088 14.843 QUADTO
+221.088 11.546 218.963 11.546 QUADTO
+217.682 11.546 216.51 13.203 QUADTO
+216.51 17.453 lineto
+closepath
+233.496 20.249 M
+233.496 18.234 lineto
+232.09 20.499 229.84 20.499 QUADTO
+228.402 20.499 227.574 19.585 QUADTO
+226.746 18.671 226.746 17.109 QUADTO
+226.746 9.531 lineto
+229.637 9.531 lineto
+229.637 16.39 lineto
+229.637 18.218 230.855 18.218 QUADTO
+232.23 18.218 233.496 16.281 QUADTO
+233.496 9.531 lineto
+236.387 9.531 lineto
+236.387 20.249 lineto
+233.496 20.249 lineto
+closepath
+240.006 20.249 M
+240.006 9.531 lineto
+242.896 9.531 lineto
+242.896 20.249 lineto
+240.006 20.249 lineto
+closepath
+240.006 7.718 M
+240.006 5.312 lineto
+242.896 5.312 lineto
+242.896 7.718 lineto
+240.006 7.718 lineto
+closepath
+246.51 20.249 M
+246.51 4.828 lineto
+249.4 4.828 lineto
+249.4 20.249 lineto
+246.51 20.249 lineto
+closepath
+259.764 20.249 M
+259.764 18.234 lineto
+258.639 20.499 256.248 20.499 QUADTO
+254.311 20.499 253.209 19.078 QUADTO
+252.107 17.656 252.107 15.187 QUADTO
+252.107 12.484 253.357 10.882 QUADTO
+254.607 9.281 256.701 9.281 QUADTO
+258.373 9.281 259.764 10.609 QUADTO
+259.764 4.828 lineto
+262.654 4.828 lineto
+262.654 20.249 lineto
+259.764 20.249 lineto
+closepath
+259.764 12.328 M
+258.717 11.156 257.514 11.156 QUADTO
+256.451 11.156 255.818 12.179 QUADTO
+255.186 13.203 255.186 14.937 QUADTO
+255.186 18.234 257.295 18.234 QUADTO
+258.592 18.234 259.764 16.578 QUADTO
+259.764 12.328 lineto
+closepath
+272.857 20.249 M
+272.857 5.796 lineto
+275.857 5.796 lineto
+275.857 18.203 lineto
+282.373 18.203 lineto
+282.373 20.249 lineto
+272.857 20.249 lineto
+closepath
+288.988 20.499 M
+286.473 20.499 284.996 18.976 QUADTO
+283.52 17.453 283.52 14.89 QUADTO
+283.52 12.296 285.004 10.788 QUADTO
+286.488 9.281 289.051 9.281 QUADTO
+291.629 9.281 293.113 10.788 QUADTO
+294.598 12.296 294.598 14.874 QUADTO
+294.598 17.499 293.105 18.999 QUADTO
+291.613 20.499 288.988 20.499 QUADTO
+closepath
+289.035 18.687 M
+291.52 18.687 291.52 14.874 QUADTO
+291.52 13.124 290.863 12.109 QUADTO
+290.207 11.093 289.051 11.093 QUADTO
+287.91 11.093 287.254 12.109 QUADTO
+286.598 13.124 286.598 14.89 QUADTO
+286.598 16.64 287.246 17.663 QUADTO
+287.895 18.687 289.035 18.687 QUADTO
+closepath
+302.512 19.093 M
+301.059 20.499 299.418 20.499 QUADTO
+298.012 20.499 297.129 19.64 QUADTO
+296.246 18.781 296.246 17.406 QUADTO
+296.246 15.624 297.668 14.663 QUADTO
+299.09 13.703 301.746 13.703 QUADTO
+302.512 13.703 lineto
+302.512 12.734 lineto
+302.512 11.062 300.605 11.062 QUADTO
+298.918 11.062 297.184 12.015 QUADTO
+297.184 10.031 lineto
+299.152 9.281 301.074 9.281 QUADTO
+305.277 9.281 305.277 12.624 QUADTO
+305.277 17.374 lineto
+305.277 18.64 306.09 18.64 QUADTO
+306.246 18.64 306.48 18.593 QUADTO
+306.543 20.218 lineto
+305.621 20.499 304.918 20.499 QUADTO
+303.152 20.499 302.637 19.093 QUADTO
+302.512 19.093 lineto
+closepath
+302.512 17.546 M
+302.512 15.359 lineto
+301.824 15.359 lineto
+299.027 15.359 299.027 17.124 QUADTO
+299.027 17.718 299.434 18.124 QUADTO
+299.84 18.531 300.434 18.531 QUADTO
+301.449 18.531 302.512 17.546 QUADTO
+closepath
+315.77 20.249 M
+315.77 18.234 lineto
+314.645 20.499 312.254 20.499 QUADTO
+310.316 20.499 309.215 19.078 QUADTO
+308.113 17.656 308.113 15.187 QUADTO
+308.113 12.484 309.363 10.882 QUADTO
+310.613 9.281 312.707 9.281 QUADTO
+314.379 9.281 315.77 10.609 QUADTO
+315.77 4.828 lineto
+318.66 4.828 lineto
+318.66 20.249 lineto
+315.77 20.249 lineto
+closepath
+315.77 12.328 M
+314.723 11.156 313.52 11.156 QUADTO
+312.457 11.156 311.824 12.179 QUADTO
+311.191 13.203 311.191 14.937 QUADTO
+311.191 18.234 313.301 18.234 QUADTO
+314.598 18.234 315.77 16.578 QUADTO
+315.77 12.328 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+133.785 376.452 M
+266.215 376.452 lineto
+266.215 399 lineto
+133.785 399 lineto
+133.785 376.452 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 376.952 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+265.715 398.5 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+134.285 398.5 M
+134.285 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.715 398.5 M
+265.715 376.952 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+137.785 387.726 M
+151.785 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.785 384.726 M
+147.785 384.726 lineto
+147.785 390.726 lineto
+141.785 390.726 lineto
+141.785 384.726 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+156.91 392.002 M
+156.91 383.33 lineto
+159.27 383.33 lineto
+160.832 383.33 161.52 383.861 QUADTO
+162.207 384.392 162.207 385.595 QUADTO
+162.207 386.986 161.27 387.767 QUADTO
+160.332 388.549 158.676 388.549 QUADTO
+158.129 388.549 lineto
+158.129 392.002 lineto
+156.91 392.002 lineto
+closepath
+158.129 387.627 M
+158.629 387.627 lineto
+159.723 387.627 160.316 387.119 QUADTO
+160.91 386.611 160.91 385.689 QUADTO
+160.91 384.924 160.441 384.588 QUADTO
+159.973 384.252 158.879 384.252 QUADTO
+158.129 384.252 lineto
+158.129 387.627 lineto
+closepath
+167.934 388.689 M
+166.449 384.939 lineto
+164.98 388.689 lineto
+167.934 388.689 lineto
+closepath
+169.23 392.002 M
+168.293 389.595 lineto
+164.621 389.595 lineto
+163.668 392.002 lineto
+162.512 392.002 lineto
+165.965 383.33 lineto
+167.184 383.33 lineto
+170.559 392.002 lineto
+169.23 392.002 lineto
+closepath
+173.51 392.22 M
+172.65 392.22 171.291 391.83 QUADTO
+171.291 390.611 lineto
+172.744 391.299 173.697 391.299 QUADTO
+174.416 391.299 174.861 390.916 QUADTO
+175.307 390.533 175.307 389.908 QUADTO
+175.307 389.408 175.018 389.049 QUADTO
+174.729 388.689 173.947 388.252 QUADTO
+173.354 387.908 lineto
+172.244 387.267 171.791 386.713 QUADTO
+171.338 386.158 171.338 385.408 QUADTO
+171.338 384.408 172.064 383.759 QUADTO
+172.791 383.111 173.916 383.111 QUADTO
+174.916 383.111 176.025 383.439 QUADTO
+176.025 384.564 lineto
+174.65 384.033 173.979 384.033 QUADTO
+173.338 384.033 172.924 384.369 QUADTO
+172.51 384.705 172.51 385.22 QUADTO
+172.51 385.658 172.814 385.994 QUADTO
+173.119 386.33 173.932 386.799 QUADTO
+174.541 387.142 lineto
+175.666 387.783 176.111 388.353 QUADTO
+176.557 388.924 176.557 389.72 QUADTO
+176.557 390.845 175.729 391.533 QUADTO
+174.9 392.22 173.51 392.22 QUADTO
+closepath
+180.348 392.002 M
+180.348 384.252 lineto
+177.27 384.252 lineto
+177.27 383.33 lineto
+184.645 383.33 lineto
+184.645 384.252 lineto
+181.566 384.252 lineto
+181.566 392.002 lineto
+180.348 392.002 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+190.748 387.726 M
+204.748 387.726 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+200.748 387.726 M
+200.748 389.383 199.405 390.726 197.748 390.726 curveto
+196.091 390.726 194.748 389.383 194.748 387.726 curveto
+194.748 386.069 196.091 384.726 197.748 384.726 curveto
+199.405 384.726 200.748 386.069 200.748 387.726 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+209.873 392.002 M
+209.873 383.33 lineto
+211.029 383.33 lineto
+211.029 387.595 lineto
+214.529 383.33 lineto
+215.764 383.33 lineto
+212.373 387.47 lineto
+216.373 392.002 lineto
+214.811 392.002 lineto
+211.029 387.611 lineto
+211.029 392.002 lineto
+209.873 392.002 lineto
+closepath
+221.02 391.189 M
+219.988 392.142 219.02 392.142 QUADTO
+218.223 392.142 217.707 391.65 QUADTO
+217.191 391.158 217.191 390.408 QUADTO
+217.191 389.361 218.066 388.799 QUADTO
+218.941 388.236 220.566 388.236 QUADTO
+220.848 388.236 lineto
+220.848 387.47 lineto
+220.848 386.361 219.707 386.361 QUADTO
+218.801 386.361 217.738 386.924 QUADTO
+217.738 385.97 lineto
+218.91 385.502 219.926 385.502 QUADTO
+220.988 385.502 221.496 385.978 QUADTO
+222.004 386.455 222.004 387.47 QUADTO
+222.004 390.361 lineto
+222.004 391.345 222.613 391.345 QUADTO
+222.691 391.345 222.832 391.314 QUADTO
+222.91 391.955 lineto
+222.52 392.142 222.051 392.142 QUADTO
+221.238 392.142 221.02 391.189 QUADTO
+closepath
+220.848 390.564 M
+220.848 388.924 lineto
+220.457 388.908 lineto
+219.52 388.908 218.934 389.267 QUADTO
+218.348 389.627 218.348 390.22 QUADTO
+218.348 390.627 218.637 390.916 QUADTO
+218.926 391.205 219.348 391.205 QUADTO
+220.066 391.205 220.848 390.564 QUADTO
+closepath
+228.443 392.002 M
+228.443 390.799 lineto
+227.74 392.142 226.334 392.142 QUADTO
+225.178 392.142 224.521 391.306 QUADTO
+223.865 390.47 223.865 389.017 QUADTO
+223.865 387.424 224.607 386.463 QUADTO
+225.35 385.502 226.568 385.502 QUADTO
+227.709 385.502 228.443 386.361 QUADTO
+228.443 382.752 lineto
+229.615 382.752 lineto
+229.615 392.002 lineto
+228.443 392.002 lineto
+closepath
+228.443 387.158 M
+227.553 386.361 226.756 386.361 QUADTO
+225.084 386.361 225.084 388.908 QUADTO
+225.084 391.127 226.568 391.127 QUADTO
+227.521 391.127 228.443 390.08 QUADTO
+228.443 387.158 lineto
+closepath
+236.574 391.799 M
+235.418 392.142 234.59 392.142 QUADTO
+233.184 392.142 232.301 391.213 QUADTO
+231.418 390.283 231.418 388.783 QUADTO
+231.418 387.345 232.199 386.416 QUADTO
+232.98 385.486 234.199 385.486 QUADTO
+235.355 385.486 235.98 386.306 QUADTO
+236.605 387.127 236.605 388.642 QUADTO
+236.605 389.002 lineto
+232.59 389.002 lineto
+232.84 391.267 234.809 391.267 QUADTO
+235.527 391.267 236.574 390.877 QUADTO
+236.574 391.799 lineto
+closepath
+232.637 388.127 M
+235.449 388.127 lineto
+235.449 386.361 234.121 386.361 QUADTO
+232.793 386.361 232.637 388.127 QUADTO
+closepath
+238.604 392.002 M
+238.604 385.642 lineto
+239.76 385.642 lineto
+239.76 386.83 lineto
+240.604 385.502 241.932 385.502 QUADTO
+243.197 385.502 243.666 386.83 QUADTO
+244.479 385.486 245.791 385.486 QUADTO
+246.635 385.486 247.104 385.986 QUADTO
+247.572 386.486 247.572 387.377 QUADTO
+247.572 392.002 lineto
+246.4 392.002 lineto
+246.4 387.549 lineto
+246.4 386.47 245.541 386.47 QUADTO
+244.65 386.47 243.666 387.736 QUADTO
+243.666 392.002 lineto
+242.51 392.002 lineto
+242.51 387.549 lineto
+242.51 386.455 241.619 386.455 QUADTO
+240.76 386.455 239.76 387.736 QUADTO
+239.76 392.002 lineto
+238.604 392.002 lineto
+closepath
+249.807 392.002 M
+249.807 382.752 lineto
+250.963 382.752 lineto
+250.963 392.002 lineto
+249.807 392.002 lineto
+closepath
+253.275 392.002 M
+253.275 385.642 lineto
+254.432 385.642 lineto
+254.432 392.002 lineto
+253.275 392.002 lineto
+closepath
+253.275 384.486 M
+253.275 383.33 lineto
+254.432 383.33 lineto
+254.432 384.486 lineto
+253.275 384.486 lineto
+closepath
+260.025 391.189 M
+258.994 392.142 258.025 392.142 QUADTO
+257.229 392.142 256.713 391.65 QUADTO
+256.197 391.158 256.197 390.408 QUADTO
+256.197 389.361 257.072 388.799 QUADTO
+257.947 388.236 259.572 388.236 QUADTO
+259.854 388.236 lineto
+259.854 387.47 lineto
+259.854 386.361 258.713 386.361 QUADTO
+257.807 386.361 256.744 386.924 QUADTO
+256.744 385.97 lineto
+257.916 385.502 258.932 385.502 QUADTO
+259.994 385.502 260.502 385.978 QUADTO
+261.01 386.455 261.01 387.47 QUADTO
+261.01 390.361 lineto
+261.01 391.345 261.619 391.345 QUADTO
+261.697 391.345 261.838 391.314 QUADTO
+261.916 391.955 lineto
+261.525 392.142 261.057 392.142 QUADTO
+260.244 392.142 260.025 391.189 QUADTO
+closepath
+259.854 390.564 M
+259.854 388.924 lineto
+259.463 388.908 lineto
+258.525 388.908 257.939 389.267 QUADTO
+257.354 389.627 257.354 390.22 QUADTO
+257.354 390.627 257.643 390.916 QUADTO
+257.932 391.205 258.354 391.205 QUADTO
+259.072 391.205 259.854 390.564 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+1 setgray
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+69.533 329.931 M
+388 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+70.995 345.481 M
+70.995 344.606 lineto
+72.73 344.606 lineto
+72.73 337.762 lineto
+70.995 338.2 lineto
+70.995 337.309 lineto
+73.886 336.59 lineto
+73.886 344.606 lineto
+75.62 344.606 lineto
+75.62 345.481 lineto
+70.995 345.481 lineto
+closepath
+80.536 345.7 M
+79.193 345.7 78.364 344.434 QUADTO
+77.536 343.168 77.536 341.137 QUADTO
+77.536 339.09 78.372 337.84 QUADTO
+79.208 336.59 80.568 336.59 QUADTO
+81.927 336.59 82.763 337.84 QUADTO
+83.599 339.09 83.599 341.122 QUADTO
+83.599 343.2 82.763 344.45 QUADTO
+81.927 345.7 80.536 345.7 QUADTO
+closepath
+80.552 344.825 M
+82.38 344.825 82.38 341.106 QUADTO
+82.38 337.465 80.568 337.465 QUADTO
+78.771 337.465 78.771 341.137 QUADTO
+78.771 344.825 80.552 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+76.771 331.931 M
+76.771 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+113.756 345.481 M
+113.756 344.465 lineto
+114.256 343.293 115.788 341.903 QUADTO
+116.459 341.309 lineto
+117.725 340.153 117.725 339.012 QUADTO
+117.725 338.293 117.295 337.879 QUADTO
+116.866 337.465 116.1 337.465 QUADTO
+115.194 337.465 113.975 338.153 QUADTO
+113.975 337.137 lineto
+115.131 336.59 116.256 336.59 QUADTO
+117.475 336.59 118.217 337.247 QUADTO
+118.959 337.903 118.959 338.981 QUADTO
+118.959 339.762 118.584 340.372 QUADTO
+118.209 340.981 117.194 341.84 QUADTO
+116.756 342.215 lineto
+115.366 343.387 115.147 344.465 QUADTO
+118.913 344.465 lineto
+118.913 345.481 lineto
+113.756 345.481 lineto
+closepath
+124.11 345.7 M
+122.766 345.7 121.938 344.434 QUADTO
+121.11 343.168 121.11 341.137 QUADTO
+121.11 339.09 121.946 337.84 QUADTO
+122.782 336.59 124.141 336.59 QUADTO
+125.5 336.59 126.336 337.84 QUADTO
+127.172 339.09 127.172 341.122 QUADTO
+127.172 343.2 126.336 344.45 QUADTO
+125.5 345.7 124.11 345.7 QUADTO
+closepath
+124.125 344.825 M
+125.954 344.825 125.954 341.106 QUADTO
+125.954 337.465 124.141 337.465 QUADTO
+122.344 337.465 122.344 341.137 QUADTO
+122.344 344.825 124.125 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+120.344 331.931 M
+120.344 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+139.464 345.418 M
+139.464 344.34 lineto
+140.714 344.825 141.417 344.825 QUADTO
+142.245 344.825 142.769 344.34 QUADTO
+143.292 343.856 143.292 343.09 QUADTO
+143.292 341.262 140.73 341.262 QUADTO
+140.261 341.262 lineto
+140.261 340.481 lineto
+140.667 340.481 lineto
+143.073 340.481 143.073 338.793 QUADTO
+143.073 337.465 141.495 337.465 QUADTO
+140.62 337.465 139.589 337.95 QUADTO
+139.589 336.934 lineto
+140.605 336.59 141.573 336.59 QUADTO
+144.23 336.59 144.23 338.606 QUADTO
+144.23 340.137 142.417 340.778 QUADTO
+144.526 341.262 144.526 343.075 QUADTO
+144.526 344.309 143.714 345.004 QUADTO
+142.901 345.7 141.495 345.7 QUADTO
+140.683 345.7 139.464 345.418 QUADTO
+closepath
+149.599 345.7 M
+148.255 345.7 147.427 344.434 QUADTO
+146.599 343.168 146.599 341.137 QUADTO
+146.599 339.09 147.435 337.84 QUADTO
+148.271 336.59 149.63 336.59 QUADTO
+150.989 336.59 151.825 337.84 QUADTO
+152.661 339.09 152.661 341.122 QUADTO
+152.661 343.2 151.825 344.45 QUADTO
+150.989 345.7 149.599 345.7 QUADTO
+closepath
+149.614 344.825 M
+151.442 344.825 151.442 341.106 QUADTO
+151.442 337.465 149.63 337.465 QUADTO
+147.833 337.465 147.833 341.137 QUADTO
+147.833 344.825 149.614 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+145.833 331.931 M
+145.833 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+163.918 331.931 M
+163.918 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+177.945 331.931 M
+177.945 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+189.407 331.931 M
+189.407 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+199.097 331.931 M
+199.097 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+207.491 331.931 M
+207.491 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+214.896 331.931 M
+214.896 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+211.95 345.481 M
+211.95 344.606 lineto
+213.684 344.606 lineto
+213.684 337.762 lineto
+211.95 338.2 lineto
+211.95 337.309 lineto
+214.84 336.59 lineto
+214.84 344.606 lineto
+216.575 344.606 lineto
+216.575 345.481 lineto
+211.95 345.481 lineto
+closepath
+221.491 345.7 M
+220.147 345.7 219.319 344.434 QUADTO
+218.491 343.168 218.491 341.137 QUADTO
+218.491 339.09 219.327 337.84 QUADTO
+220.162 336.59 221.522 336.59 QUADTO
+222.881 336.59 223.717 337.84 QUADTO
+224.553 339.09 224.553 341.122 QUADTO
+224.553 343.2 223.717 344.45 QUADTO
+222.881 345.7 221.491 345.7 QUADTO
+closepath
+221.506 344.825 M
+223.334 344.825 223.334 341.106 QUADTO
+223.334 337.465 221.522 337.465 QUADTO
+219.725 337.465 219.725 341.137 QUADTO
+219.725 344.825 221.506 344.825 QUADTO
+closepath
+229.078 345.7 M
+227.735 345.7 226.907 344.434 QUADTO
+226.078 343.168 226.078 341.137 QUADTO
+226.078 339.09 226.914 337.84 QUADTO
+227.75 336.59 229.11 336.59 QUADTO
+230.469 336.59 231.305 337.84 QUADTO
+232.141 339.09 232.141 341.122 QUADTO
+232.141 343.2 231.305 344.45 QUADTO
+230.469 345.7 229.078 345.7 QUADTO
+closepath
+229.094 344.825 M
+230.922 344.825 230.922 341.106 QUADTO
+230.922 337.465 229.11 337.465 QUADTO
+227.313 337.465 227.313 341.137 QUADTO
+227.313 344.825 229.094 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+221.519 331.931 M
+221.519 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+254.711 345.481 M
+254.711 344.465 lineto
+255.211 343.293 256.742 341.903 QUADTO
+257.414 341.309 lineto
+258.679 340.153 258.679 339.012 QUADTO
+258.679 338.293 258.25 337.879 QUADTO
+257.82 337.465 257.054 337.465 QUADTO
+256.148 337.465 254.929 338.153 QUADTO
+254.929 337.137 lineto
+256.086 336.59 257.211 336.59 QUADTO
+258.429 336.59 259.172 337.247 QUADTO
+259.914 337.903 259.914 338.981 QUADTO
+259.914 339.762 259.539 340.372 QUADTO
+259.164 340.981 258.148 341.84 QUADTO
+257.711 342.215 lineto
+256.32 343.387 256.101 344.465 QUADTO
+259.867 344.465 lineto
+259.867 345.481 lineto
+254.711 345.481 lineto
+closepath
+265.064 345.7 M
+263.72 345.7 262.892 344.434 QUADTO
+262.064 343.168 262.064 341.137 QUADTO
+262.064 339.09 262.9 337.84 QUADTO
+263.736 336.59 265.095 336.59 QUADTO
+266.455 336.59 267.291 337.84 QUADTO
+268.127 339.09 268.127 341.122 QUADTO
+268.127 343.2 267.291 344.45 QUADTO
+266.455 345.7 265.064 345.7 QUADTO
+closepath
+265.08 344.825 M
+266.908 344.825 266.908 341.106 QUADTO
+266.908 337.465 265.095 337.465 QUADTO
+263.299 337.465 263.299 341.137 QUADTO
+263.299 344.825 265.08 344.825 QUADTO
+closepath
+272.652 345.7 M
+271.308 345.7 270.48 344.434 QUADTO
+269.652 343.168 269.652 341.137 QUADTO
+269.652 339.09 270.488 337.84 QUADTO
+271.324 336.59 272.683 336.59 QUADTO
+274.043 336.59 274.879 337.84 QUADTO
+275.715 339.09 275.715 341.122 QUADTO
+275.715 343.2 274.879 344.45 QUADTO
+274.043 345.7 272.652 345.7 QUADTO
+closepath
+272.668 344.825 M
+274.496 344.825 274.496 341.106 QUADTO
+274.496 337.465 272.683 337.465 QUADTO
+270.886 337.465 270.886 341.137 QUADTO
+270.886 344.825 272.668 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+265.092 331.931 M
+265.092 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+290.581 331.931 M
+290.581 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+308.666 331.931 M
+308.666 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+322.694 331.931 M
+322.694 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+334.155 331.931 M
+334.155 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+343.845 331.931 M
+343.845 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+352.24 331.931 M
+352.24 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+359.644 331.931 M
+359.644 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+352.904 345.481 M
+352.904 344.606 lineto
+354.638 344.606 lineto
+354.638 337.762 lineto
+352.904 338.2 lineto
+352.904 337.309 lineto
+355.795 336.59 lineto
+355.795 344.606 lineto
+357.529 344.606 lineto
+357.529 345.481 lineto
+352.904 345.481 lineto
+closepath
+362.445 345.7 M
+361.101 345.7 360.273 344.434 QUADTO
+359.445 343.168 359.445 341.137 QUADTO
+359.445 339.09 360.281 337.84 QUADTO
+361.117 336.59 362.476 336.59 QUADTO
+363.836 336.59 364.671 337.84 QUADTO
+365.507 339.09 365.507 341.122 QUADTO
+365.507 343.2 364.671 344.45 QUADTO
+363.836 345.7 362.445 345.7 QUADTO
+closepath
+362.461 344.825 M
+364.289 344.825 364.289 341.106 QUADTO
+364.289 337.465 362.476 337.465 QUADTO
+360.679 337.465 360.679 341.137 QUADTO
+360.679 344.825 362.461 344.825 QUADTO
+closepath
+370.033 345.7 M
+368.689 345.7 367.861 344.434 QUADTO
+367.033 343.168 367.033 341.137 QUADTO
+367.033 339.09 367.869 337.84 QUADTO
+368.705 336.59 370.064 336.59 QUADTO
+371.423 336.59 372.259 337.84 QUADTO
+373.095 339.09 373.095 341.122 QUADTO
+373.095 343.2 372.259 344.45 QUADTO
+371.423 345.7 370.033 345.7 QUADTO
+closepath
+370.048 344.825 M
+371.877 344.825 371.877 341.106 QUADTO
+371.877 337.465 370.064 337.465 QUADTO
+368.267 337.465 368.267 341.137 QUADTO
+368.267 344.825 370.048 344.825 QUADTO
+closepath
+377.621 345.7 M
+376.277 345.7 375.449 344.434 QUADTO
+374.621 343.168 374.621 341.137 QUADTO
+374.621 339.09 375.457 337.84 QUADTO
+376.293 336.59 377.652 336.59 QUADTO
+379.011 336.59 379.847 337.84 QUADTO
+380.683 339.09 380.683 341.122 QUADTO
+380.683 343.2 379.847 344.45 QUADTO
+379.011 345.7 377.621 345.7 QUADTO
+closepath
+377.636 344.825 M
+379.464 344.825 379.464 341.106 QUADTO
+379.464 337.465 377.652 337.465 QUADTO
+375.855 337.465 375.855 341.137 QUADTO
+375.855 344.825 377.636 344.825 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+366.267 331.931 M
+366.267 329.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+newpath
+208.267 364.954 M
+208.267 357.454 lineto
+210.282 357.454 lineto
+210.282 358.86 lineto
+211.282 357.282 212.845 357.282 QUADTO
+213.845 357.282 214.431 357.915 QUADTO
+215.017 358.548 215.017 359.641 QUADTO
+215.017 364.954 lineto
+212.985 364.954 lineto
+212.985 360.141 lineto
+212.985 358.876 212.142 358.876 QUADTO
+211.173 358.876 210.282 360.235 QUADTO
+210.282 364.954 lineto
+208.267 364.954 lineto
+closepath
+220.617 365.126 M
+218.852 365.126 217.82 364.063 QUADTO
+216.789 363.001 216.789 361.204 QUADTO
+216.789 359.376 217.828 358.329 QUADTO
+218.867 357.282 220.664 357.282 QUADTO
+222.461 357.282 223.5 358.329 QUADTO
+224.539 359.376 224.539 361.188 QUADTO
+224.539 363.032 223.492 364.079 QUADTO
+222.445 365.126 220.617 365.126 QUADTO
+closepath
+220.648 363.86 M
+222.383 363.86 222.383 361.188 QUADTO
+222.383 359.97 221.922 359.259 QUADTO
+221.461 358.548 220.664 358.548 QUADTO
+219.867 358.548 219.398 359.259 QUADTO
+218.93 359.97 218.93 361.204 QUADTO
+218.93 362.423 219.391 363.141 QUADTO
+219.852 363.86 220.648 363.86 QUADTO
+closepath
+231.121 364.954 M
+231.121 363.532 lineto
+230.34 365.126 228.668 365.126 QUADTO
+227.324 365.126 226.551 364.134 QUADTO
+225.777 363.141 225.777 361.407 QUADTO
+225.777 359.516 226.645 358.399 QUADTO
+227.512 357.282 228.98 357.282 QUADTO
+230.168 357.282 231.121 358.204 QUADTO
+231.121 354.157 lineto
+233.152 354.157 lineto
+233.152 364.954 lineto
+231.121 364.954 lineto
+closepath
+231.121 359.407 M
+230.387 358.595 229.559 358.595 QUADTO
+228.809 358.595 228.371 359.313 QUADTO
+227.934 360.032 227.934 361.235 QUADTO
+227.934 363.532 229.402 363.532 QUADTO
+230.309 363.532 231.121 362.376 QUADTO
+231.121 359.407 lineto
+closepath
+241.788 364.704 M
+240.351 365.126 239.054 365.126 QUADTO
+237.179 365.126 236.093 364.055 QUADTO
+235.007 362.985 235.007 361.141 QUADTO
+235.007 359.407 235.999 358.345 QUADTO
+236.991 357.282 238.632 357.282 QUADTO
+240.272 357.282 241.03 358.321 QUADTO
+241.788 359.36 241.788 361.61 QUADTO
+237.132 361.61 lineto
+237.335 363.751 239.491 363.751 QUADTO
+240.507 363.751 241.788 363.282 QUADTO
+241.788 364.704 lineto
+closepath
+237.101 360.47 M
+239.804 360.47 lineto
+239.804 358.548 238.569 358.548 QUADTO
+237.304 358.548 237.101 360.47 QUADTO
+closepath
+243.679 364.72 M
+243.679 363.235 lineto
+245.194 363.86 246.257 363.86 QUADTO
+247.491 363.86 247.491 363.016 QUADTO
+247.491 362.47 246.476 362.048 QUADTO
+245.788 361.782 lineto
+244.679 361.329 244.194 360.813 QUADTO
+243.71 360.298 243.71 359.532 QUADTO
+243.71 358.454 244.53 357.868 QUADTO
+245.351 357.282 246.804 357.282 QUADTO
+247.726 357.282 248.991 357.548 QUADTO
+248.991 358.97 lineto
+247.772 358.548 246.976 358.548 QUADTO
+245.71 358.548 245.71 359.313 QUADTO
+245.71 359.829 246.647 360.188 QUADTO
+247.226 360.407 lineto
+248.554 360.907 249.069 361.423 QUADTO
+249.585 361.938 249.585 362.751 QUADTO
+249.585 363.798 248.702 364.462 QUADTO
+247.819 365.126 246.413 365.126 QUADTO
+245.069 365.126 243.679 364.72 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+65.533 34.247 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+44.326 330.426 M
+42.982 330.426 42.154 329.16 QUADTO
+41.326 327.894 41.326 325.863 QUADTO
+41.326 323.816 42.162 322.566 QUADTO
+42.998 321.316 44.357 321.316 QUADTO
+45.717 321.316 46.553 322.566 QUADTO
+47.389 323.816 47.389 325.848 QUADTO
+47.389 327.926 46.553 329.176 QUADTO
+45.717 330.426 44.326 330.426 QUADTO
+closepath
+44.342 329.551 M
+46.17 329.551 46.17 325.832 QUADTO
+46.17 322.191 44.357 322.191 QUADTO
+42.561 322.191 42.561 325.863 QUADTO
+42.561 329.551 44.342 329.551 QUADTO
+closepath
+49.32 330.207 M
+49.32 328.754 lineto
+50.773 328.754 lineto
+50.773 330.207 lineto
+49.32 330.207 lineto
+closepath
+55.711 330.426 M
+54.367 330.426 53.539 329.16 QUADTO
+52.711 327.894 52.711 325.863 QUADTO
+52.711 323.816 53.547 322.566 QUADTO
+54.383 321.316 55.742 321.316 QUADTO
+57.102 321.316 57.938 322.566 QUADTO
+58.773 323.816 58.773 325.848 QUADTO
+58.773 327.926 57.938 329.176 QUADTO
+57.102 330.426 55.711 330.426 QUADTO
+closepath
+55.727 329.551 M
+57.555 329.551 57.555 325.832 QUADTO
+57.555 322.191 55.742 322.191 QUADTO
+53.945 322.191 53.945 325.863 QUADTO
+53.945 329.551 55.727 329.551 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 325.931 M
+65.533 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+41.561 310.033 M
+41.561 309.017 lineto
+42.061 307.846 43.592 306.455 QUADTO
+44.264 305.861 lineto
+45.529 304.705 45.529 303.564 QUADTO
+45.529 302.846 45.1 302.431 QUADTO
+44.67 302.017 43.904 302.017 QUADTO
+42.998 302.017 41.779 302.705 QUADTO
+41.779 301.689 lineto
+42.936 301.142 44.061 301.142 QUADTO
+45.279 301.142 46.021 301.799 QUADTO
+46.764 302.455 46.764 303.533 QUADTO
+46.764 304.314 46.389 304.924 QUADTO
+46.014 305.533 44.998 306.392 QUADTO
+44.561 306.767 lineto
+43.17 307.939 42.951 309.017 QUADTO
+46.717 309.017 lineto
+46.717 310.033 lineto
+41.561 310.033 lineto
+closepath
+49.32 310.033 M
+49.32 308.58 lineto
+50.773 308.58 lineto
+50.773 310.033 lineto
+49.32 310.033 lineto
+closepath
+53.398 310.064 M
+53.398 309.033 lineto
+54.273 309.377 55.039 309.377 QUADTO
+55.898 309.377 56.391 308.877 QUADTO
+56.883 308.377 56.883 307.486 QUADTO
+56.883 305.533 54.195 305.533 QUADTO
+53.883 305.533 53.555 305.58 QUADTO
+53.555 301.361 lineto
+57.945 301.361 lineto
+57.945 302.361 lineto
+54.57 302.361 lineto
+54.57 304.658 lineto
+56.242 304.658 57.18 305.424 QUADTO
+58.117 306.189 58.117 307.549 QUADTO
+58.117 308.814 57.258 309.533 QUADTO
+56.398 310.252 54.898 310.252 QUADTO
+54.242 310.252 53.398 310.064 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 305.757 M
+65.533 305.757 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+42.014 289.89 M
+42.014 288.859 lineto
+42.889 289.203 43.654 289.203 QUADTO
+44.514 289.203 45.006 288.703 QUADTO
+45.498 288.203 45.498 287.312 QUADTO
+45.498 285.359 42.811 285.359 QUADTO
+42.498 285.359 42.17 285.406 QUADTO
+42.17 281.187 lineto
+46.561 281.187 lineto
+46.561 282.187 lineto
+43.186 282.187 lineto
+43.186 284.484 lineto
+44.857 284.484 45.795 285.25 QUADTO
+46.732 286.015 46.732 287.375 QUADTO
+46.732 288.64 45.873 289.359 QUADTO
+45.014 290.078 43.514 290.078 QUADTO
+42.857 290.078 42.014 289.89 QUADTO
+closepath
+49.32 289.859 M
+49.32 288.406 lineto
+50.773 288.406 lineto
+50.773 289.859 lineto
+49.32 289.859 lineto
+closepath
+55.711 290.078 M
+54.367 290.078 53.539 288.812 QUADTO
+52.711 287.547 52.711 285.515 QUADTO
+52.711 283.469 53.547 282.219 QUADTO
+54.383 280.969 55.742 280.969 QUADTO
+57.102 280.969 57.938 282.219 QUADTO
+58.773 283.469 58.773 285.5 QUADTO
+58.773 287.578 57.938 288.828 QUADTO
+57.102 290.078 55.711 290.078 QUADTO
+closepath
+55.727 289.203 M
+57.555 289.203 57.555 285.484 QUADTO
+57.555 281.844 55.742 281.844 QUADTO
+53.945 281.844 53.945 285.515 QUADTO
+53.945 289.203 55.727 289.203 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 285.583 M
+65.533 285.583 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+42.373 269.685 M
+42.529 268.67 42.85 267.935 QUADTO
+43.17 267.201 43.967 265.904 QUADTO
+46.326 262.091 lineto
+41.857 262.091 lineto
+41.857 261.013 lineto
+47.436 261.013 lineto
+47.436 262.091 lineto
+44.092 267.013 43.701 269.685 QUADTO
+42.373 269.685 lineto
+closepath
+49.32 269.685 M
+49.32 268.232 lineto
+50.773 268.232 lineto
+50.773 269.685 lineto
+49.32 269.685 lineto
+closepath
+53.398 269.716 M
+53.398 268.685 lineto
+54.273 269.029 55.039 269.029 QUADTO
+55.898 269.029 56.391 268.529 QUADTO
+56.883 268.029 56.883 267.138 QUADTO
+56.883 265.185 54.195 265.185 QUADTO
+53.883 265.185 53.555 265.232 QUADTO
+53.555 261.013 lineto
+57.945 261.013 lineto
+57.945 262.013 lineto
+54.57 262.013 lineto
+54.57 264.31 lineto
+56.242 264.31 57.18 265.076 QUADTO
+58.117 265.841 58.117 267.201 QUADTO
+58.117 268.466 57.258 269.185 QUADTO
+56.398 269.904 54.898 269.904 QUADTO
+54.242 269.904 53.398 269.716 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 265.41 M
+65.533 265.41 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 249.511 M
+34.785 248.636 lineto
+36.52 248.636 lineto
+36.52 241.793 lineto
+34.785 242.23 lineto
+34.785 241.339 lineto
+37.676 240.621 lineto
+37.676 248.636 lineto
+39.41 248.636 lineto
+39.41 249.511 lineto
+34.785 249.511 lineto
+closepath
+44.326 249.73 M
+42.982 249.73 42.154 248.464 QUADTO
+41.326 247.199 41.326 245.168 QUADTO
+41.326 243.121 42.162 241.871 QUADTO
+42.998 240.621 44.357 240.621 QUADTO
+45.717 240.621 46.553 241.871 QUADTO
+47.389 243.121 47.389 245.152 QUADTO
+47.389 247.23 46.553 248.48 QUADTO
+45.717 249.73 44.326 249.73 QUADTO
+closepath
+44.342 248.855 M
+46.17 248.855 46.17 245.136 QUADTO
+46.17 241.496 44.357 241.496 QUADTO
+42.561 241.496 42.561 245.168 QUADTO
+42.561 248.855 44.342 248.855 QUADTO
+closepath
+49.32 249.511 M
+49.32 248.058 lineto
+50.773 248.058 lineto
+50.773 249.511 lineto
+49.32 249.511 lineto
+closepath
+55.711 249.73 M
+54.367 249.73 53.539 248.464 QUADTO
+52.711 247.199 52.711 245.168 QUADTO
+52.711 243.121 53.547 241.871 QUADTO
+54.383 240.621 55.742 240.621 QUADTO
+57.102 240.621 57.938 241.871 QUADTO
+58.773 243.121 58.773 245.152 QUADTO
+58.773 247.23 57.938 248.48 QUADTO
+57.102 249.73 55.711 249.73 QUADTO
+closepath
+55.727 248.855 M
+57.555 248.855 57.555 245.136 QUADTO
+57.555 241.496 55.742 241.496 QUADTO
+53.945 241.496 53.945 245.168 QUADTO
+53.945 248.855 55.727 248.855 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 245.236 M
+65.533 245.236 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 229.337 M
+34.785 228.462 lineto
+36.52 228.462 lineto
+36.52 221.619 lineto
+34.785 222.056 lineto
+34.785 221.165 lineto
+37.676 220.447 lineto
+37.676 228.462 lineto
+39.41 228.462 lineto
+39.41 229.337 lineto
+34.785 229.337 lineto
+closepath
+41.561 229.337 M
+41.561 228.322 lineto
+42.061 227.15 43.592 225.759 QUADTO
+44.264 225.165 lineto
+45.529 224.009 45.529 222.869 QUADTO
+45.529 222.15 45.1 221.736 QUADTO
+44.67 221.322 43.904 221.322 QUADTO
+42.998 221.322 41.779 222.009 QUADTO
+41.779 220.994 lineto
+42.936 220.447 44.061 220.447 QUADTO
+45.279 220.447 46.021 221.103 QUADTO
+46.764 221.759 46.764 222.837 QUADTO
+46.764 223.619 46.389 224.228 QUADTO
+46.014 224.837 44.998 225.697 QUADTO
+44.561 226.072 lineto
+43.17 227.244 42.951 228.322 QUADTO
+46.717 228.322 lineto
+46.717 229.337 lineto
+41.561 229.337 lineto
+closepath
+49.32 229.337 M
+49.32 227.884 lineto
+50.773 227.884 lineto
+50.773 229.337 lineto
+49.32 229.337 lineto
+closepath
+53.398 229.369 M
+53.398 228.337 lineto
+54.273 228.681 55.039 228.681 QUADTO
+55.898 228.681 56.391 228.181 QUADTO
+56.883 227.681 56.883 226.79 QUADTO
+56.883 224.837 54.195 224.837 QUADTO
+53.883 224.837 53.555 224.884 QUADTO
+53.555 220.665 lineto
+57.945 220.665 lineto
+57.945 221.665 lineto
+54.57 221.665 lineto
+54.57 223.962 lineto
+56.242 223.962 57.18 224.728 QUADTO
+58.117 225.494 58.117 226.853 QUADTO
+58.117 228.119 57.258 228.837 QUADTO
+56.398 229.556 54.898 229.556 QUADTO
+54.242 229.556 53.398 229.369 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 225.062 M
+65.533 225.062 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 209.163 M
+34.785 208.288 lineto
+36.52 208.288 lineto
+36.52 201.445 lineto
+34.785 201.882 lineto
+34.785 200.992 lineto
+37.676 200.273 lineto
+37.676 208.288 lineto
+39.41 208.288 lineto
+39.41 209.163 lineto
+34.785 209.163 lineto
+closepath
+42.014 209.195 M
+42.014 208.163 lineto
+42.889 208.507 43.654 208.507 QUADTO
+44.514 208.507 45.006 208.007 QUADTO
+45.498 207.507 45.498 206.617 QUADTO
+45.498 204.663 42.811 204.663 QUADTO
+42.498 204.663 42.17 204.71 QUADTO
+42.17 200.492 lineto
+46.561 200.492 lineto
+46.561 201.492 lineto
+43.186 201.492 lineto
+43.186 203.788 lineto
+44.857 203.788 45.795 204.554 QUADTO
+46.732 205.32 46.732 206.679 QUADTO
+46.732 207.945 45.873 208.663 QUADTO
+45.014 209.382 43.514 209.382 QUADTO
+42.857 209.382 42.014 209.195 QUADTO
+closepath
+49.32 209.163 M
+49.32 207.71 lineto
+50.773 207.71 lineto
+50.773 209.163 lineto
+49.32 209.163 lineto
+closepath
+55.711 209.382 M
+54.367 209.382 53.539 208.117 QUADTO
+52.711 206.851 52.711 204.82 QUADTO
+52.711 202.773 53.547 201.523 QUADTO
+54.383 200.273 55.742 200.273 QUADTO
+57.102 200.273 57.938 201.523 QUADTO
+58.773 202.773 58.773 204.804 QUADTO
+58.773 206.882 57.938 208.132 QUADTO
+57.102 209.382 55.711 209.382 QUADTO
+closepath
+55.727 208.507 M
+57.555 208.507 57.555 204.788 QUADTO
+57.555 201.148 55.742 201.148 QUADTO
+53.945 201.148 53.945 204.82 QUADTO
+53.945 208.507 55.727 208.507 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 204.888 M
+65.533 204.888 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.785 188.99 M
+34.785 188.115 lineto
+36.52 188.115 lineto
+36.52 181.271 lineto
+34.785 181.708 lineto
+34.785 180.818 lineto
+37.676 180.099 lineto
+37.676 188.115 lineto
+39.41 188.115 lineto
+39.41 188.99 lineto
+34.785 188.99 lineto
+closepath
+42.373 188.99 M
+42.529 187.974 42.85 187.24 QUADTO
+43.17 186.505 43.967 185.208 QUADTO
+46.326 181.396 lineto
+41.857 181.396 lineto
+41.857 180.318 lineto
+47.436 180.318 lineto
+47.436 181.396 lineto
+44.092 186.318 43.701 188.99 QUADTO
+42.373 188.99 lineto
+closepath
+49.32 188.99 M
+49.32 187.536 lineto
+50.773 187.536 lineto
+50.773 188.99 lineto
+49.32 188.99 lineto
+closepath
+53.398 189.021 M
+53.398 187.99 lineto
+54.273 188.333 55.039 188.333 QUADTO
+55.898 188.333 56.391 187.833 QUADTO
+56.883 187.333 56.883 186.443 QUADTO
+56.883 184.49 54.195 184.49 QUADTO
+53.883 184.49 53.555 184.536 QUADTO
+53.555 180.318 lineto
+57.945 180.318 lineto
+57.945 181.318 lineto
+54.57 181.318 lineto
+54.57 183.615 lineto
+56.242 183.615 57.18 184.38 QUADTO
+58.117 185.146 58.117 186.505 QUADTO
+58.117 187.771 57.258 188.49 QUADTO
+56.398 189.208 54.898 189.208 QUADTO
+54.242 189.208 53.398 189.021 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 184.714 M
+65.533 184.714 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 168.816 M
+33.973 167.8 lineto
+34.473 166.628 36.004 165.237 QUADTO
+36.676 164.644 lineto
+37.941 163.487 37.941 162.347 QUADTO
+37.941 161.628 37.512 161.214 QUADTO
+37.082 160.8 36.316 160.8 QUADTO
+35.41 160.8 34.191 161.487 QUADTO
+34.191 160.472 lineto
+35.348 159.925 36.473 159.925 QUADTO
+37.691 159.925 38.434 160.581 QUADTO
+39.176 161.237 39.176 162.316 QUADTO
+39.176 163.097 38.801 163.706 QUADTO
+38.426 164.316 37.41 165.175 QUADTO
+36.973 165.55 lineto
+35.582 166.722 35.363 167.8 QUADTO
+39.129 167.8 lineto
+39.129 168.816 lineto
+33.973 168.816 lineto
+closepath
+44.326 169.034 M
+42.982 169.034 42.154 167.769 QUADTO
+41.326 166.503 41.326 164.472 QUADTO
+41.326 162.425 42.162 161.175 QUADTO
+42.998 159.925 44.357 159.925 QUADTO
+45.717 159.925 46.553 161.175 QUADTO
+47.389 162.425 47.389 164.456 QUADTO
+47.389 166.534 46.553 167.784 QUADTO
+45.717 169.034 44.326 169.034 QUADTO
+closepath
+44.342 168.159 M
+46.17 168.159 46.17 164.441 QUADTO
+46.17 160.8 44.357 160.8 QUADTO
+42.561 160.8 42.561 164.472 QUADTO
+42.561 168.159 44.342 168.159 QUADTO
+closepath
+49.32 168.816 M
+49.32 167.362 lineto
+50.773 167.362 lineto
+50.773 168.816 lineto
+49.32 168.816 lineto
+closepath
+55.711 169.034 M
+54.367 169.034 53.539 167.769 QUADTO
+52.711 166.503 52.711 164.472 QUADTO
+52.711 162.425 53.547 161.175 QUADTO
+54.383 159.925 55.742 159.925 QUADTO
+57.102 159.925 57.938 161.175 QUADTO
+58.773 162.425 58.773 164.456 QUADTO
+58.773 166.534 57.938 167.784 QUADTO
+57.102 169.034 55.711 169.034 QUADTO
+closepath
+55.727 168.159 M
+57.555 168.159 57.555 164.441 QUADTO
+57.555 160.8 55.742 160.8 QUADTO
+53.945 160.8 53.945 164.472 QUADTO
+53.945 168.159 55.727 168.159 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 164.54 M
+65.533 164.54 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 148.642 M
+33.973 147.626 lineto
+34.473 146.454 36.004 145.064 QUADTO
+36.676 144.47 lineto
+37.941 143.314 37.941 142.173 QUADTO
+37.941 141.454 37.512 141.04 QUADTO
+37.082 140.626 36.316 140.626 QUADTO
+35.41 140.626 34.191 141.314 QUADTO
+34.191 140.298 lineto
+35.348 139.751 36.473 139.751 QUADTO
+37.691 139.751 38.434 140.407 QUADTO
+39.176 141.064 39.176 142.142 QUADTO
+39.176 142.923 38.801 143.532 QUADTO
+38.426 144.142 37.41 145.001 QUADTO
+36.973 145.376 lineto
+35.582 146.548 35.363 147.626 QUADTO
+39.129 147.626 lineto
+39.129 148.642 lineto
+33.973 148.642 lineto
+closepath
+41.561 148.642 M
+41.561 147.626 lineto
+42.061 146.454 43.592 145.064 QUADTO
+44.264 144.47 lineto
+45.529 143.314 45.529 142.173 QUADTO
+45.529 141.454 45.1 141.04 QUADTO
+44.67 140.626 43.904 140.626 QUADTO
+42.998 140.626 41.779 141.314 QUADTO
+41.779 140.298 lineto
+42.936 139.751 44.061 139.751 QUADTO
+45.279 139.751 46.021 140.407 QUADTO
+46.764 141.064 46.764 142.142 QUADTO
+46.764 142.923 46.389 143.532 QUADTO
+46.014 144.142 44.998 145.001 QUADTO
+44.561 145.376 lineto
+43.17 146.548 42.951 147.626 QUADTO
+46.717 147.626 lineto
+46.717 148.642 lineto
+41.561 148.642 lineto
+closepath
+49.32 148.642 M
+49.32 147.189 lineto
+50.773 147.189 lineto
+50.773 148.642 lineto
+49.32 148.642 lineto
+closepath
+53.398 148.673 M
+53.398 147.642 lineto
+54.273 147.985 55.039 147.985 QUADTO
+55.898 147.985 56.391 147.485 QUADTO
+56.883 146.985 56.883 146.095 QUADTO
+56.883 144.142 54.195 144.142 QUADTO
+53.883 144.142 53.555 144.189 QUADTO
+53.555 139.97 lineto
+57.945 139.97 lineto
+57.945 140.97 lineto
+54.57 140.97 lineto
+54.57 143.267 lineto
+56.242 143.267 57.18 144.032 QUADTO
+58.117 144.798 58.117 146.157 QUADTO
+58.117 147.423 57.258 148.142 QUADTO
+56.398 148.86 54.898 148.86 QUADTO
+54.242 148.86 53.398 148.673 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 144.366 M
+65.533 144.366 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 128.468 M
+33.973 127.452 lineto
+34.473 126.28 36.004 124.89 QUADTO
+36.676 124.296 lineto
+37.941 123.14 37.941 121.999 QUADTO
+37.941 121.28 37.512 120.866 QUADTO
+37.082 120.452 36.316 120.452 QUADTO
+35.41 120.452 34.191 121.14 QUADTO
+34.191 120.124 lineto
+35.348 119.577 36.473 119.577 QUADTO
+37.691 119.577 38.434 120.233 QUADTO
+39.176 120.89 39.176 121.968 QUADTO
+39.176 122.749 38.801 123.358 QUADTO
+38.426 123.968 37.41 124.827 QUADTO
+36.973 125.202 lineto
+35.582 126.374 35.363 127.452 QUADTO
+39.129 127.452 lineto
+39.129 128.468 lineto
+33.973 128.468 lineto
+closepath
+42.014 128.499 M
+42.014 127.468 lineto
+42.889 127.811 43.654 127.811 QUADTO
+44.514 127.811 45.006 127.311 QUADTO
+45.498 126.811 45.498 125.921 QUADTO
+45.498 123.968 42.811 123.968 QUADTO
+42.498 123.968 42.17 124.015 QUADTO
+42.17 119.796 lineto
+46.561 119.796 lineto
+46.561 120.796 lineto
+43.186 120.796 lineto
+43.186 123.093 lineto
+44.857 123.093 45.795 123.858 QUADTO
+46.732 124.624 46.732 125.983 QUADTO
+46.732 127.249 45.873 127.968 QUADTO
+45.014 128.686 43.514 128.686 QUADTO
+42.857 128.686 42.014 128.499 QUADTO
+closepath
+49.32 128.468 M
+49.32 127.015 lineto
+50.773 127.015 lineto
+50.773 128.468 lineto
+49.32 128.468 lineto
+closepath
+55.711 128.686 M
+54.367 128.686 53.539 127.421 QUADTO
+52.711 126.155 52.711 124.124 QUADTO
+52.711 122.077 53.547 120.827 QUADTO
+54.383 119.577 55.742 119.577 QUADTO
+57.102 119.577 57.938 120.827 QUADTO
+58.773 122.077 58.773 124.108 QUADTO
+58.773 126.186 57.938 127.436 QUADTO
+57.102 128.686 55.711 128.686 QUADTO
+closepath
+55.727 127.811 M
+57.555 127.811 57.555 124.093 QUADTO
+57.555 120.452 55.742 120.452 QUADTO
+53.945 120.452 53.945 124.124 QUADTO
+53.945 127.811 55.727 127.811 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 124.192 M
+65.533 124.192 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+33.973 108.294 M
+33.973 107.278 lineto
+34.473 106.106 36.004 104.716 QUADTO
+36.676 104.122 lineto
+37.941 102.966 37.941 101.825 QUADTO
+37.941 101.106 37.512 100.692 QUADTO
+37.082 100.278 36.316 100.278 QUADTO
+35.41 100.278 34.191 100.966 QUADTO
+34.191 99.95 lineto
+35.348 99.403 36.473 99.403 QUADTO
+37.691 99.403 38.434 100.059 QUADTO
+39.176 100.716 39.176 101.794 QUADTO
+39.176 102.575 38.801 103.184 QUADTO
+38.426 103.794 37.41 104.653 QUADTO
+36.973 105.028 lineto
+35.582 106.2 35.363 107.278 QUADTO
+39.129 107.278 lineto
+39.129 108.294 lineto
+33.973 108.294 lineto
+closepath
+42.373 108.294 M
+42.529 107.278 42.85 106.544 QUADTO
+43.17 105.809 43.967 104.513 QUADTO
+46.326 100.7 lineto
+41.857 100.7 lineto
+41.857 99.622 lineto
+47.436 99.622 lineto
+47.436 100.7 lineto
+44.092 105.622 43.701 108.294 QUADTO
+42.373 108.294 lineto
+closepath
+49.32 108.294 M
+49.32 106.841 lineto
+50.773 106.841 lineto
+50.773 108.294 lineto
+49.32 108.294 lineto
+closepath
+53.398 108.325 M
+53.398 107.294 lineto
+54.273 107.638 55.039 107.638 QUADTO
+55.898 107.638 56.391 107.138 QUADTO
+56.883 106.638 56.883 105.747 QUADTO
+56.883 103.794 54.195 103.794 QUADTO
+53.883 103.794 53.555 103.841 QUADTO
+53.555 99.622 lineto
+57.945 99.622 lineto
+57.945 100.622 lineto
+54.57 100.622 lineto
+54.57 102.919 lineto
+56.242 102.919 57.18 103.684 QUADTO
+58.117 104.45 58.117 105.809 QUADTO
+58.117 107.075 57.258 107.794 QUADTO
+56.398 108.513 54.898 108.513 QUADTO
+54.242 108.513 53.398 108.325 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 104.018 M
+65.533 104.018 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 88.057 M
+34.191 86.979 lineto
+35.441 87.464 36.145 87.464 QUADTO
+36.973 87.464 37.496 86.979 QUADTO
+38.02 86.495 38.02 85.729 QUADTO
+38.02 83.901 35.457 83.901 QUADTO
+34.988 83.901 lineto
+34.988 83.12 lineto
+35.395 83.12 lineto
+37.801 83.12 37.801 81.432 QUADTO
+37.801 80.104 36.223 80.104 QUADTO
+35.348 80.104 34.316 80.589 QUADTO
+34.316 79.573 lineto
+35.332 79.229 36.301 79.229 QUADTO
+38.957 79.229 38.957 81.245 QUADTO
+38.957 82.776 37.145 83.417 QUADTO
+39.254 83.901 39.254 85.714 QUADTO
+39.254 86.948 38.441 87.643 QUADTO
+37.629 88.339 36.223 88.339 QUADTO
+35.41 88.339 34.191 88.057 QUADTO
+closepath
+44.326 88.339 M
+42.982 88.339 42.154 87.073 QUADTO
+41.326 85.807 41.326 83.776 QUADTO
+41.326 81.729 42.162 80.479 QUADTO
+42.998 79.229 44.357 79.229 QUADTO
+45.717 79.229 46.553 80.479 QUADTO
+47.389 81.729 47.389 83.761 QUADTO
+47.389 85.839 46.553 87.089 QUADTO
+45.717 88.339 44.326 88.339 QUADTO
+closepath
+44.342 87.464 M
+46.17 87.464 46.17 83.745 QUADTO
+46.17 80.104 44.357 80.104 QUADTO
+42.561 80.104 42.561 83.776 QUADTO
+42.561 87.464 44.342 87.464 QUADTO
+closepath
+49.32 88.12 M
+49.32 86.667 lineto
+50.773 86.667 lineto
+50.773 88.12 lineto
+49.32 88.12 lineto
+closepath
+55.711 88.339 M
+54.367 88.339 53.539 87.073 QUADTO
+52.711 85.807 52.711 83.776 QUADTO
+52.711 81.729 53.547 80.479 QUADTO
+54.383 79.229 55.742 79.229 QUADTO
+57.102 79.229 57.938 80.479 QUADTO
+58.773 81.729 58.773 83.761 QUADTO
+58.773 85.839 57.938 87.089 QUADTO
+57.102 88.339 55.711 88.339 QUADTO
+closepath
+55.727 87.464 M
+57.555 87.464 57.555 83.745 QUADTO
+57.555 80.104 55.742 80.104 QUADTO
+53.945 80.104 53.945 83.776 QUADTO
+53.945 87.464 55.727 87.464 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 83.844 M
+65.533 83.844 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 67.883 M
+34.191 66.805 lineto
+35.441 67.29 36.145 67.29 QUADTO
+36.973 67.29 37.496 66.805 QUADTO
+38.02 66.321 38.02 65.555 QUADTO
+38.02 63.727 35.457 63.727 QUADTO
+34.988 63.727 lineto
+34.988 62.946 lineto
+35.395 62.946 lineto
+37.801 62.946 37.801 61.258 QUADTO
+37.801 59.93 36.223 59.93 QUADTO
+35.348 59.93 34.316 60.415 QUADTO
+34.316 59.399 lineto
+35.332 59.055 36.301 59.055 QUADTO
+38.957 59.055 38.957 61.071 QUADTO
+38.957 62.602 37.145 63.243 QUADTO
+39.254 63.727 39.254 65.54 QUADTO
+39.254 66.774 38.441 67.469 QUADTO
+37.629 68.165 36.223 68.165 QUADTO
+35.41 68.165 34.191 67.883 QUADTO
+closepath
+41.561 67.946 M
+41.561 66.93 lineto
+42.061 65.758 43.592 64.368 QUADTO
+44.264 63.774 lineto
+45.529 62.618 45.529 61.477 QUADTO
+45.529 60.758 45.1 60.344 QUADTO
+44.67 59.93 43.904 59.93 QUADTO
+42.998 59.93 41.779 60.618 QUADTO
+41.779 59.602 lineto
+42.936 59.055 44.061 59.055 QUADTO
+45.279 59.055 46.021 59.712 QUADTO
+46.764 60.368 46.764 61.446 QUADTO
+46.764 62.227 46.389 62.837 QUADTO
+46.014 63.446 44.998 64.305 QUADTO
+44.561 64.68 lineto
+43.17 65.852 42.951 66.93 QUADTO
+46.717 66.93 lineto
+46.717 67.946 lineto
+41.561 67.946 lineto
+closepath
+49.32 67.946 M
+49.32 66.493 lineto
+50.773 66.493 lineto
+50.773 67.946 lineto
+49.32 67.946 lineto
+closepath
+53.398 67.977 M
+53.398 66.946 lineto
+54.273 67.29 55.039 67.29 QUADTO
+55.898 67.29 56.391 66.79 QUADTO
+56.883 66.29 56.883 65.399 QUADTO
+56.883 63.446 54.195 63.446 QUADTO
+53.883 63.446 53.555 63.493 QUADTO
+53.555 59.274 lineto
+57.945 59.274 lineto
+57.945 60.274 lineto
+54.57 60.274 lineto
+54.57 62.571 lineto
+56.242 62.571 57.18 63.337 QUADTO
+58.117 64.102 58.117 65.462 QUADTO
+58.117 66.727 57.258 67.446 QUADTO
+56.398 68.165 54.898 68.165 QUADTO
+54.242 68.165 53.398 67.977 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 63.67 M
+65.533 63.67 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.251 setgray
+newpath
+34.191 47.71 M
+34.191 46.631 lineto
+35.441 47.116 36.145 47.116 QUADTO
+36.973 47.116 37.496 46.631 QUADTO
+38.02 46.147 38.02 45.381 QUADTO
+38.02 43.553 35.457 43.553 QUADTO
+34.988 43.553 lineto
+34.988 42.772 lineto
+35.395 42.772 lineto
+37.801 42.772 37.801 41.085 QUADTO
+37.801 39.756 36.223 39.756 QUADTO
+35.348 39.756 34.316 40.241 QUADTO
+34.316 39.225 lineto
+35.332 38.881 36.301 38.881 QUADTO
+38.957 38.881 38.957 40.897 QUADTO
+38.957 42.428 37.145 43.069 QUADTO
+39.254 43.553 39.254 45.366 QUADTO
+39.254 46.6 38.441 47.296 QUADTO
+37.629 47.991 36.223 47.991 QUADTO
+35.41 47.991 34.191 47.71 QUADTO
+closepath
+42.014 47.803 M
+42.014 46.772 lineto
+42.889 47.116 43.654 47.116 QUADTO
+44.514 47.116 45.006 46.616 QUADTO
+45.498 46.116 45.498 45.225 QUADTO
+45.498 43.272 42.811 43.272 QUADTO
+42.498 43.272 42.17 43.319 QUADTO
+42.17 39.1 lineto
+46.561 39.1 lineto
+46.561 40.1 lineto
+43.186 40.1 lineto
+43.186 42.397 lineto
+44.857 42.397 45.795 43.163 QUADTO
+46.732 43.928 46.732 45.288 QUADTO
+46.732 46.553 45.873 47.272 QUADTO
+45.014 47.991 43.514 47.991 QUADTO
+42.857 47.991 42.014 47.803 QUADTO
+closepath
+49.32 47.772 M
+49.32 46.319 lineto
+50.773 46.319 lineto
+50.773 47.772 lineto
+49.32 47.772 lineto
+closepath
+55.711 47.991 M
+54.367 47.991 53.539 46.725 QUADTO
+52.711 45.46 52.711 43.428 QUADTO
+52.711 41.381 53.547 40.131 QUADTO
+54.383 38.881 55.742 38.881 QUADTO
+57.102 38.881 57.938 40.131 QUADTO
+58.773 41.381 58.773 43.413 QUADTO
+58.773 45.491 57.938 46.741 QUADTO
+57.102 47.991 55.711 47.991 QUADTO
+closepath
+55.727 47.116 M
+57.555 47.116 57.555 43.397 QUADTO
+57.555 39.756 55.742 39.756 QUADTO
+53.945 39.756 53.945 43.428 QUADTO
+53.945 47.116 55.727 47.116 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.502 setgray
+2 setlinecap
+10.0 setmiterlimit
+newpath
+63.533 43.496 M
+65.533 43.496 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -160.60265 199.57533] concat
+newpath
+199.575 160.603 M
+199.575 560.603 lineto
+-200.425 560.603 lineto
+-200.425 160.603 lineto
+199.575 160.603 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-35.833 185.077 M
+-35.833 174.28 lineto
+-33.817 174.28 lineto
+-33.817 185.077 lineto
+-35.833 185.077 lineto
+closepath
+-28.124 185.249 M
+-29.889 185.249 -30.92 184.187 QUADTO
+-31.952 183.124 -31.952 181.327 QUADTO
+-31.952 179.499 -30.913 178.452 QUADTO
+-29.874 177.405 -28.077 177.405 QUADTO
+-26.28 177.405 -25.241 178.452 QUADTO
+-24.202 179.499 -24.202 181.312 QUADTO
+-24.202 183.155 -25.249 184.202 QUADTO
+-26.295 185.249 -28.124 185.249 QUADTO
+closepath
+-28.092 183.983 M
+-26.358 183.983 -26.358 181.312 QUADTO
+-26.358 180.093 -26.819 179.382 QUADTO
+-27.28 178.671 -28.077 178.671 QUADTO
+-28.874 178.671 -29.342 179.382 QUADTO
+-29.811 180.093 -29.811 181.327 QUADTO
+-29.811 182.546 -29.35 183.265 QUADTO
+-28.889 183.983 -28.092 183.983 QUADTO
+closepath
+-18.666 184.265 M
+-19.666 185.249 -20.823 185.249 QUADTO
+-21.807 185.249 -22.424 184.648 QUADTO
+-23.041 184.046 -23.041 183.093 QUADTO
+-23.041 181.843 -22.049 181.171 QUADTO
+-21.057 180.499 -19.198 180.499 QUADTO
+-18.666 180.499 lineto
+-18.666 179.812 lineto
+-18.666 178.64 -19.995 178.64 QUADTO
+-21.182 178.64 -22.385 179.312 QUADTO
+-22.385 177.921 lineto
+-21.01 177.405 -19.666 177.405 QUADTO
+-16.713 177.405 -16.713 179.749 QUADTO
+-16.713 183.062 lineto
+-16.713 183.952 -16.151 183.952 QUADTO
+-16.057 183.952 -15.885 183.921 QUADTO
+-15.838 185.062 lineto
+-16.479 185.249 -16.979 185.249 QUADTO
+-18.213 185.249 -18.573 184.265 QUADTO
+-18.666 184.265 lineto
+closepath
+-18.666 183.187 M
+-18.666 181.655 lineto
+-19.135 181.655 lineto
+-21.104 181.655 -21.104 182.89 QUADTO
+-21.104 183.312 -20.823 183.593 QUADTO
+-20.541 183.874 -20.12 183.874 QUADTO
+-19.401 183.874 -18.666 183.187 QUADTO
+closepath
+-9.389 185.077 M
+-9.389 183.655 lineto
+-10.17 185.249 -11.842 185.249 QUADTO
+-13.186 185.249 -13.959 184.257 QUADTO
+-14.733 183.265 -14.733 181.53 QUADTO
+-14.733 179.64 -13.866 178.523 QUADTO
+-12.999 177.405 -11.53 177.405 QUADTO
+-10.342 177.405 -9.389 178.327 QUADTO
+-9.389 174.28 lineto
+-7.358 174.28 lineto
+-7.358 185.077 lineto
+-9.389 185.077 lineto
+closepath
+-9.389 179.53 M
+-10.124 178.718 -10.952 178.718 QUADTO
+-11.702 178.718 -12.139 179.437 QUADTO
+-12.577 180.155 -12.577 181.358 QUADTO
+-12.577 183.655 -11.108 183.655 QUADTO
+-10.202 183.655 -9.389 182.499 QUADTO
+-9.389 179.53 lineto
+closepath
+0.001 185.077 M
+0.001 178.843 lineto
+-1.045 178.843 lineto
+-1.045 177.577 lineto
+0.001 177.577 lineto
+0.001 177.03 lineto
+0.001 174.108 2.767 174.108 QUADTO
+3.658 174.108 4.611 174.374 QUADTO
+4.611 175.733 lineto
+3.751 175.374 3.064 175.374 QUADTO
+2.017 175.374 2.017 176.952 QUADTO
+2.017 177.577 lineto
+3.923 177.577 lineto
+3.923 178.843 lineto
+2.017 178.843 lineto
+2.017 185.077 lineto
+0.001 185.077 lineto
+closepath
+5.586 185.077 M
+5.586 177.577 lineto
+7.602 177.577 lineto
+7.602 178.983 lineto
+8.399 177.405 10.008 177.405 QUADTO
+10.196 177.405 10.383 177.437 QUADTO
+10.383 179.249 lineto
+9.946 179.093 9.571 179.093 QUADTO
+8.368 179.093 7.602 180.312 QUADTO
+7.602 185.077 lineto
+5.586 185.077 lineto
+closepath
+15.623 184.265 M
+14.623 185.249 13.466 185.249 QUADTO
+12.482 185.249 11.865 184.648 QUADTO
+11.248 184.046 11.248 183.093 QUADTO
+11.248 181.843 12.24 181.171 QUADTO
+13.232 180.499 15.091 180.499 QUADTO
+15.623 180.499 lineto
+15.623 179.812 lineto
+15.623 178.64 14.294 178.64 QUADTO
+13.107 178.64 11.904 179.312 QUADTO
+11.904 177.921 lineto
+13.279 177.405 14.623 177.405 QUADTO
+17.576 177.405 17.576 179.749 QUADTO
+17.576 183.062 lineto
+17.576 183.952 18.138 183.952 QUADTO
+18.232 183.952 18.404 183.921 QUADTO
+18.451 185.062 lineto
+17.81 185.249 17.31 185.249 QUADTO
+16.076 185.249 15.716 184.265 QUADTO
+15.623 184.265 lineto
+closepath
+15.623 183.187 M
+15.623 181.655 lineto
+15.154 181.655 lineto
+13.185 181.655 13.185 182.89 QUADTO
+13.185 183.312 13.466 183.593 QUADTO
+13.748 183.874 14.169 183.874 QUADTO
+14.888 183.874 15.623 183.187 QUADTO
+closepath
+25.712 184.905 M
+24.462 185.249 23.384 185.249 QUADTO
+21.587 185.249 20.548 184.194 QUADTO
+19.509 183.14 19.509 181.312 QUADTO
+19.509 179.483 20.58 178.444 QUADTO
+21.65 177.405 23.541 177.405 QUADTO
+24.462 177.405 25.65 177.687 QUADTO
+25.65 179.155 lineto
+24.416 178.749 23.666 178.749 QUADTO
+22.759 178.749 22.205 179.452 QUADTO
+21.65 180.155 21.65 181.296 QUADTO
+21.65 182.483 22.251 183.194 QUADTO
+22.853 183.905 23.837 183.905 QUADTO
+24.759 183.905 25.712 183.515 QUADTO
+25.712 184.905 lineto
+closepath
+31.507 185.03 M
+30.773 185.249 30.367 185.249 QUADTO
+27.726 185.249 27.726 182.78 QUADTO
+27.726 178.843 lineto
+26.882 178.843 lineto
+26.882 177.577 lineto
+27.726 177.577 lineto
+27.726 176.312 lineto
+29.757 176.077 lineto
+29.757 177.577 lineto
+31.351 177.577 lineto
+31.351 178.843 lineto
+29.757 178.843 lineto
+29.757 182.515 lineto
+29.757 183.905 30.882 183.905 QUADTO
+31.132 183.905 31.507 183.812 QUADTO
+31.507 185.03 lineto
+closepath
+33.306 185.077 M
+33.306 177.577 lineto
+35.322 177.577 lineto
+35.322 185.077 lineto
+33.306 185.077 lineto
+closepath
+33.306 176.312 M
+33.306 174.624 lineto
+35.322 174.624 lineto
+35.322 176.312 lineto
+33.306 176.312 lineto
+closepath
+41.015 185.249 M
+39.25 185.249 38.218 184.187 QUADTO
+37.187 183.124 37.187 181.327 QUADTO
+37.187 179.499 38.226 178.452 QUADTO
+39.265 177.405 41.062 177.405 QUADTO
+42.859 177.405 43.898 178.452 QUADTO
+44.937 179.499 44.937 181.312 QUADTO
+44.937 183.155 43.89 184.202 QUADTO
+42.843 185.249 41.015 185.249 QUADTO
+closepath
+41.046 183.983 M
+42.781 183.983 42.781 181.312 QUADTO
+42.781 180.093 42.32 179.382 QUADTO
+41.859 178.671 41.062 178.671 QUADTO
+40.265 178.671 39.796 179.382 QUADTO
+39.328 180.093 39.328 181.327 QUADTO
+39.328 182.546 39.789 183.265 QUADTO
+40.25 183.983 41.046 183.983 QUADTO
+closepath
+46.8 185.077 M
+46.8 177.577 lineto
+48.816 177.577 lineto
+48.816 178.983 lineto
+49.816 177.405 51.378 177.405 QUADTO
+52.378 177.405 52.964 178.038 QUADTO
+53.55 178.671 53.55 179.765 QUADTO
+53.55 185.077 lineto
+51.519 185.077 lineto
+51.519 180.265 lineto
+51.519 178.999 50.675 178.999 QUADTO
+49.707 178.999 48.816 180.358 QUADTO
+48.816 185.077 lineto
+46.8 185.077 lineto
+closepath
+59.245 174.202 M
+59.245 175.499 lineto
+57.417 177.343 57.417 180.687 QUADTO
+57.417 184.046 59.245 185.874 QUADTO
+59.245 187.187 lineto
+57.573 186.28 56.573 184.507 QUADTO
+55.573 182.733 55.573 180.687 QUADTO
+55.573 178.64 56.557 176.89 QUADTO
+57.542 175.14 59.245 174.202 QUADTO
+closepath
+60.746 185.327 M
+68.699 174.702 lineto
+70.058 174.702 lineto
+62.105 185.327 lineto
+60.746 185.327 lineto
+closepath
+62.464 180.015 M
+61.371 180.015 60.73 179.335 QUADTO
+60.089 178.655 60.089 177.483 QUADTO
+60.089 176.312 60.73 175.632 QUADTO
+61.371 174.952 62.496 174.952 QUADTO
+63.605 174.952 64.253 175.632 QUADTO
+64.902 176.312 64.902 177.483 QUADTO
+64.902 178.671 64.253 179.343 QUADTO
+63.605 180.015 62.464 180.015 QUADTO
+closepath
+62.48 178.999 M
+63.371 178.999 63.371 177.483 QUADTO
+63.371 175.968 62.496 175.968 QUADTO
+61.605 175.968 61.605 177.483 QUADTO
+61.605 178.999 62.48 178.999 QUADTO
+closepath
+68.292 185.077 M
+67.183 185.077 66.542 184.398 QUADTO
+65.902 183.718 65.902 182.546 QUADTO
+65.902 181.358 66.55 180.687 QUADTO
+67.199 180.015 68.308 180.015 QUADTO
+69.433 180.015 70.074 180.687 QUADTO
+70.714 181.358 70.714 182.546 QUADTO
+70.714 183.733 70.074 184.405 QUADTO
+69.433 185.077 68.292 185.077 QUADTO
+closepath
+68.292 184.062 M
+69.199 184.062 69.199 182.546 QUADTO
+69.199 181.03 68.308 181.03 QUADTO
+67.417 181.03 67.417 182.546 QUADTO
+67.417 184.062 68.292 184.062 QUADTO
+closepath
+71.367 174.202 M
+71.367 175.499 lineto
+73.195 177.343 73.195 180.687 QUADTO
+73.195 184.046 71.367 185.874 QUADTO
+71.367 187.187 lineto
+73.039 186.28 74.039 184.507 QUADTO
+75.039 182.733 75.039 180.687 QUADTO
+75.039 178.64 74.054 176.89 QUADTO
+73.07 175.14 71.367 174.202 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+76.771 34.247 M
+76.771 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+120.344 34.247 M
+120.344 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+145.833 34.247 M
+145.833 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+163.918 34.247 M
+163.918 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+177.945 34.247 M
+177.945 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+189.407 34.247 M
+189.407 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+199.097 34.247 M
+199.097 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+207.491 34.247 M
+207.491 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+214.896 34.247 M
+214.896 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+221.519 34.247 M
+221.519 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+265.092 34.247 M
+265.092 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+290.581 34.247 M
+290.581 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+308.666 34.247 M
+308.666 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+322.694 34.247 M
+322.694 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+334.155 34.247 M
+334.155 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+343.845 34.247 M
+343.845 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+352.24 34.247 M
+352.24 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+359.644 34.247 M
+359.644 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+366.267 34.247 M
+366.267 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 325.931 M
+388 325.931 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 305.757 M
+388 305.757 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 285.583 M
+388 285.583 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 265.41 M
+388 265.41 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 245.236 M
+388 245.236 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 225.062 M
+388 225.062 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 204.888 M
+388 204.888 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 184.714 M
+388 184.714 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 164.54 M
+388 164.54 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 144.366 M
+388 144.366 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 124.192 M
+388 124.192 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 104.018 M
+388 104.018 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 83.844 M
+388 83.844 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 63.67 M
+388 63.67 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+69.533 43.496 M
+388 43.496 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 84.893 M
+102.26 89.291 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 89.291 M
+120.344 91.995 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 91.995 M
+145.833 91.51 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 91.51 M
+163.918 92.761 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 92.761 M
+189.407 60.927 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 60.927 M
+207.491 72.668 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 72.668 M
+232.98 76.259 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 76.259 M
+251.065 89.049 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 89.049 M
+276.554 75.008 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 75.008 M
+294.638 85.458 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 85.458 M
+320.127 83.078 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 83.078 M
+338.212 48.136 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 48.136 M
+353.792 70.247 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 70.247 M
+366.267 78.639 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+76.771 96.11 M
+102.26 81.746 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+102.26 81.746 M
+120.344 88.081 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+120.344 88.081 M
+145.833 92.842 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+145.833 92.842 M
+163.918 110.635 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+163.918 110.635 M
+189.407 95.343 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+189.407 95.343 M
+207.491 93.81 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+207.491 93.81 M
+232.98 95.021 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+232.98 95.021 M
+251.065 103.009 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+251.065 103.009 M
+276.554 109.102 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+276.554 109.102 M
+294.638 97.038 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+294.638 97.038 M
+320.127 95.666 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+320.127 95.666 M
+338.212 86.063 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+338.212 86.063 M
+353.792 90.865 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+353.792 90.865 M
+366.267 72.587 lineto
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+79.771 84.893 M
+79.771 86.55 78.427 87.893 76.771 87.893 curveto
+75.114 87.893 73.771 86.55 73.771 84.893 curveto
+73.771 83.236 75.114 81.893 76.771 81.893 curveto
+78.427 81.893 79.771 83.236 79.771 84.893 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+79.771 84.893 M
+79.771 86.55 78.427 87.893 76.771 87.893 curveto
+75.114 87.893 73.771 86.55 73.771 84.893 curveto
+73.771 83.236 75.114 81.893 76.771 81.893 curveto
+78.427 81.893 79.771 83.236 79.771 84.893 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+105.26 89.291 M
+105.26 90.948 103.916 92.291 102.26 92.291 curveto
+100.603 92.291 99.26 90.948 99.26 89.291 curveto
+99.26 87.634 100.603 86.291 102.26 86.291 curveto
+103.916 86.291 105.26 87.634 105.26 89.291 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+105.26 89.291 M
+105.26 90.948 103.916 92.291 102.26 92.291 curveto
+100.603 92.291 99.26 90.948 99.26 89.291 curveto
+99.26 87.634 100.603 86.291 102.26 86.291 curveto
+103.916 86.291 105.26 87.634 105.26 89.291 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+123.344 91.995 M
+123.344 93.651 122.001 94.995 120.344 94.995 curveto
+118.687 94.995 117.344 93.651 117.344 91.995 curveto
+117.344 90.338 118.687 88.995 120.344 88.995 curveto
+122.001 88.995 123.344 90.338 123.344 91.995 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+123.344 91.995 M
+123.344 93.651 122.001 94.995 120.344 94.995 curveto
+118.687 94.995 117.344 93.651 117.344 91.995 curveto
+117.344 90.338 118.687 88.995 120.344 88.995 curveto
+122.001 88.995 123.344 90.338 123.344 91.995 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+148.833 91.51 M
+148.833 93.167 147.49 94.51 145.833 94.51 curveto
+144.176 94.51 142.833 93.167 142.833 91.51 curveto
+142.833 89.853 144.176 88.51 145.833 88.51 curveto
+147.49 88.51 148.833 89.853 148.833 91.51 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+148.833 91.51 M
+148.833 93.167 147.49 94.51 145.833 94.51 curveto
+144.176 94.51 142.833 93.167 142.833 91.51 curveto
+142.833 89.853 144.176 88.51 145.833 88.51 curveto
+147.49 88.51 148.833 89.853 148.833 91.51 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+166.918 92.761 M
+166.918 94.418 165.575 95.761 163.918 95.761 curveto
+162.261 95.761 160.918 94.418 160.918 92.761 curveto
+160.918 91.104 162.261 89.761 163.918 89.761 curveto
+165.575 89.761 166.918 91.104 166.918 92.761 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+166.918 92.761 M
+166.918 94.418 165.575 95.761 163.918 95.761 curveto
+162.261 95.761 160.918 94.418 160.918 92.761 curveto
+160.918 91.104 162.261 89.761 163.918 89.761 curveto
+165.575 89.761 166.918 91.104 166.918 92.761 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+192.407 60.927 M
+192.407 62.584 191.064 63.927 189.407 63.927 curveto
+187.75 63.927 186.407 62.584 186.407 60.927 curveto
+186.407 59.27 187.75 57.927 189.407 57.927 curveto
+191.064 57.927 192.407 59.27 192.407 60.927 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.407 60.927 M
+192.407 62.584 191.064 63.927 189.407 63.927 curveto
+187.75 63.927 186.407 62.584 186.407 60.927 curveto
+186.407 59.27 187.75 57.927 189.407 57.927 curveto
+191.064 57.927 192.407 59.27 192.407 60.927 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+210.491 72.668 M
+210.491 74.325 209.148 75.668 207.491 75.668 curveto
+205.834 75.668 204.491 74.325 204.491 72.668 curveto
+204.491 71.011 205.834 69.668 207.491 69.668 curveto
+209.148 69.668 210.491 71.011 210.491 72.668 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+210.491 72.668 M
+210.491 74.325 209.148 75.668 207.491 75.668 curveto
+205.834 75.668 204.491 74.325 204.491 72.668 curveto
+204.491 71.011 205.834 69.668 207.491 69.668 curveto
+209.148 69.668 210.491 71.011 210.491 72.668 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+235.98 76.259 M
+235.98 77.916 234.637 79.259 232.98 79.259 curveto
+231.323 79.259 229.98 77.916 229.98 76.259 curveto
+229.98 74.602 231.323 73.259 232.98 73.259 curveto
+234.637 73.259 235.98 74.602 235.98 76.259 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+235.98 76.259 M
+235.98 77.916 234.637 79.259 232.98 79.259 curveto
+231.323 79.259 229.98 77.916 229.98 76.259 curveto
+229.98 74.602 231.323 73.259 232.98 73.259 curveto
+234.637 73.259 235.98 74.602 235.98 76.259 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+254.065 89.049 M
+254.065 90.706 252.722 92.049 251.065 92.049 curveto
+249.408 92.049 248.065 90.706 248.065 89.049 curveto
+248.065 87.392 249.408 86.049 251.065 86.049 curveto
+252.722 86.049 254.065 87.392 254.065 89.049 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+254.065 89.049 M
+254.065 90.706 252.722 92.049 251.065 92.049 curveto
+249.408 92.049 248.065 90.706 248.065 89.049 curveto
+248.065 87.392 249.408 86.049 251.065 86.049 curveto
+252.722 86.049 254.065 87.392 254.065 89.049 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+279.554 75.008 M
+279.554 76.665 278.211 78.008 276.554 78.008 curveto
+274.897 78.008 273.554 76.665 273.554 75.008 curveto
+273.554 73.351 274.897 72.008 276.554 72.008 curveto
+278.211 72.008 279.554 73.351 279.554 75.008 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+279.554 75.008 M
+279.554 76.665 278.211 78.008 276.554 78.008 curveto
+274.897 78.008 273.554 76.665 273.554 75.008 curveto
+273.554 73.351 274.897 72.008 276.554 72.008 curveto
+278.211 72.008 279.554 73.351 279.554 75.008 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+297.638 85.458 M
+297.638 87.115 296.295 88.458 294.638 88.458 curveto
+292.982 88.458 291.638 87.115 291.638 85.458 curveto
+291.638 83.801 292.982 82.458 294.638 82.458 curveto
+296.295 82.458 297.638 83.801 297.638 85.458 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+297.638 85.458 M
+297.638 87.115 296.295 88.458 294.638 88.458 curveto
+292.982 88.458 291.638 87.115 291.638 85.458 curveto
+291.638 83.801 292.982 82.458 294.638 82.458 curveto
+296.295 82.458 297.638 83.801 297.638 85.458 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+323.127 83.078 M
+323.127 84.735 321.784 86.078 320.127 86.078 curveto
+318.471 86.078 317.127 84.735 317.127 83.078 curveto
+317.127 81.421 318.471 80.078 320.127 80.078 curveto
+321.784 80.078 323.127 81.421 323.127 83.078 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+323.127 83.078 M
+323.127 84.735 321.784 86.078 320.127 86.078 curveto
+318.471 86.078 317.127 84.735 317.127 83.078 curveto
+317.127 81.421 318.471 80.078 320.127 80.078 curveto
+321.784 80.078 323.127 81.421 323.127 83.078 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+341.212 48.136 M
+341.212 49.793 339.869 51.136 338.212 51.136 curveto
+336.555 51.136 335.212 49.793 335.212 48.136 curveto
+335.212 46.48 336.555 45.136 338.212 45.136 curveto
+339.869 45.136 341.212 46.48 341.212 48.136 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+341.212 48.136 M
+341.212 49.793 339.869 51.136 338.212 51.136 curveto
+336.555 51.136 335.212 49.793 335.212 48.136 curveto
+335.212 46.48 336.555 45.136 338.212 45.136 curveto
+339.869 45.136 341.212 46.48 341.212 48.136 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+356.792 70.247 M
+356.792 71.904 355.449 73.247 353.792 73.247 curveto
+352.135 73.247 350.792 71.904 350.792 70.247 curveto
+350.792 68.59 352.135 67.247 353.792 67.247 curveto
+355.449 67.247 356.792 68.59 356.792 70.247 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+356.792 70.247 M
+356.792 71.904 355.449 73.247 353.792 73.247 curveto
+352.135 73.247 350.792 71.904 350.792 70.247 curveto
+350.792 68.59 352.135 67.247 353.792 67.247 curveto
+355.449 67.247 356.792 68.59 356.792 70.247 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+369.267 78.639 M
+369.267 80.296 367.924 81.639 366.267 81.639 curveto
+364.61 81.639 363.267 80.296 363.267 78.639 curveto
+363.267 76.983 364.61 75.639 366.267 75.639 curveto
+367.924 75.639 369.267 76.983 369.267 78.639 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+369.267 78.639 M
+369.267 80.296 367.924 81.639 366.267 81.639 curveto
+364.61 81.639 363.267 80.296 363.267 78.639 curveto
+363.267 76.983 364.61 75.639 366.267 75.639 curveto
+367.924 75.639 369.267 76.983 369.267 78.639 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+73.771 93.11 M
+79.771 93.11 lineto
+79.771 99.11 lineto
+73.771 99.11 lineto
+73.771 93.11 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+73.771 93.11 M
+79.771 93.11 lineto
+79.771 99.11 lineto
+73.771 99.11 lineto
+73.771 93.11 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+99.26 78.746 M
+105.26 78.746 lineto
+105.26 84.746 lineto
+99.26 84.746 lineto
+99.26 78.746 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+99.26 78.746 M
+105.26 78.746 lineto
+105.26 84.746 lineto
+99.26 84.746 lineto
+99.26 78.746 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+117.344 85.081 M
+123.344 85.081 lineto
+123.344 91.081 lineto
+117.344 91.081 lineto
+117.344 85.081 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+117.344 85.081 M
+123.344 85.081 lineto
+123.344 91.081 lineto
+117.344 91.081 lineto
+117.344 85.081 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+142.833 89.842 M
+148.833 89.842 lineto
+148.833 95.842 lineto
+142.833 95.842 lineto
+142.833 89.842 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+142.833 89.842 M
+148.833 89.842 lineto
+148.833 95.842 lineto
+142.833 95.842 lineto
+142.833 89.842 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+160.918 107.635 M
+166.918 107.635 lineto
+166.918 113.635 lineto
+160.918 113.635 lineto
+160.918 107.635 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+160.918 107.635 M
+166.918 107.635 lineto
+166.918 113.635 lineto
+160.918 113.635 lineto
+160.918 107.635 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+186.407 92.343 M
+192.407 92.343 lineto
+192.407 98.343 lineto
+186.407 98.343 lineto
+186.407 92.343 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+186.407 92.343 M
+192.407 92.343 lineto
+192.407 98.343 lineto
+186.407 98.343 lineto
+186.407 92.343 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+204.491 90.81 M
+210.491 90.81 lineto
+210.491 96.81 lineto
+204.491 96.81 lineto
+204.491 90.81 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+204.491 90.81 M
+210.491 90.81 lineto
+210.491 96.81 lineto
+204.491 96.81 lineto
+204.491 90.81 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+229.98 92.021 M
+235.98 92.021 lineto
+235.98 98.021 lineto
+229.98 98.021 lineto
+229.98 92.021 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+229.98 92.021 M
+235.98 92.021 lineto
+235.98 98.021 lineto
+229.98 98.021 lineto
+229.98 92.021 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+248.065 100.009 M
+254.065 100.009 lineto
+254.065 106.009 lineto
+248.065 106.009 lineto
+248.065 100.009 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+248.065 100.009 M
+254.065 100.009 lineto
+254.065 106.009 lineto
+248.065 106.009 lineto
+248.065 100.009 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+273.554 106.102 M
+279.554 106.102 lineto
+279.554 112.102 lineto
+273.554 112.102 lineto
+273.554 106.102 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+273.554 106.102 M
+279.554 106.102 lineto
+279.554 112.102 lineto
+273.554 112.102 lineto
+273.554 106.102 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+291.638 94.038 M
+297.638 94.038 lineto
+297.638 100.038 lineto
+291.638 100.038 lineto
+291.638 94.038 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+291.638 94.038 M
+297.638 94.038 lineto
+297.638 100.038 lineto
+291.638 100.038 lineto
+291.638 94.038 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+317.127 92.666 M
+323.127 92.666 lineto
+323.127 98.666 lineto
+317.127 98.666 lineto
+317.127 92.666 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+317.127 92.666 M
+323.127 92.666 lineto
+323.127 98.666 lineto
+317.127 98.666 lineto
+317.127 92.666 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+335.212 83.063 M
+341.212 83.063 lineto
+341.212 89.063 lineto
+335.212 89.063 lineto
+335.212 83.063 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+335.212 83.063 M
+341.212 83.063 lineto
+341.212 89.063 lineto
+335.212 89.063 lineto
+335.212 83.063 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+350.792 87.865 M
+356.792 87.865 lineto
+356.792 93.865 lineto
+350.792 93.865 lineto
+350.792 87.865 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+350.792 87.865 M
+356.792 87.865 lineto
+356.792 93.865 lineto
+350.792 93.865 lineto
+350.792 87.865 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+363.267 69.587 M
+369.267 69.587 lineto
+369.267 75.587 lineto
+363.267 75.587 lineto
+363.267 69.587 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+69.533 34.247 M
+69.533 325.931 lineto
+388 325.931 lineto
+388 34.247 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+363.267 69.587 M
+369.267 69.587 lineto
+369.267 75.587 lineto
+363.267 75.587 lineto
+363.267 69.587 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+2 setlinecap
+10.0 setmiterlimit
+0.5 setlinewidth
+newpath
+69.533 34.247 M
+388 34.247 lineto
+388 325.931 lineto
+69.533 325.931 lineto
+69.533 34.247 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/sim/gobs/wiki/dc03kp04.png b/sim/gobs/wiki/dc03kp04.png
new file mode 100644
index 0000000..c51d1c9
Binary files /dev/null and b/sim/gobs/wiki/dc03kp04.png differ
diff --git a/sim/gobs/wiki/kp01.cfg b/sim/gobs/wiki/kp01.cfg
index 87f72c3..b189818 100644
--- a/sim/gobs/wiki/kp01.cfg
+++ b/sim/gobs/wiki/kp01.cfg
@@ -1,7 +1,7 @@
### Kademlia vs. PAST 01
-output = kp01.eps
+step = mids
### General parameters:
@@ -14,12 +14,11 @@ faults = 1
# Number of servers:
minNodes = 10
-maxNodes = 100
+maxNodes = 1000
### Choose a PlacementScheme implementation:
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+# Chosen by sweep driver.
### Choose a NodeScheme implementation:
diff --git a/sim/gobs/wiki/kp02.cfg b/sim/gobs/wiki/kp02.cfg
new file mode 100644
index 0000000..c0f69c6
--- /dev/null
+++ b/sim/gobs/wiki/kp02.cfg
@@ -0,0 +1,70 @@
+
+### Kademlia vs. PAST 02
+
+step = mids
+
+### General parameters:
+
+# Bit-length of addresses:
+B = 32
+# Number of files:
+files = 3000
+# Number of faults:
+faults = 1
+
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
+
+# Chosen by sweep driver.
+
+### Choose a NodeScheme implementation:
+
+NodeScheme = RandomNodes
+# NodeScheme = SimpleNodes
+
+### Choose one of the following FileFactory sections:
+
+# FileFactory implementation PlainFiles
+FileFactory = PlainFiles
+# File size:
+filesize = 14
+# Strip size:
+filestrip = 4
+# File/object replicas:
+filereplicas = 3
+# Number of objects per file:
+filewidth = 10
+
+# FileFactory implementation TraceFiles
+#FileFactory = TraceFiles
+# Trace filename:
+#filetrace = traces/test01.trace
+
+# FileFactory implementation RandomFiles
+#FileFactory = RandomFiles
+# Strip size:
+#filestrip = 4
+# Max size of big files:
+#filebigmax = 100
+# Min size of big files:
+#filebigmin = 50
+# Max size of small files:
+#filesmallmax = 20
+# Min size of small files:
+#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/wiki/kp03.cfg b/sim/gobs/wiki/kp03.cfg
new file mode 100644
index 0000000..af729f7
--- /dev/null
+++ b/sim/gobs/wiki/kp03.cfg
@@ -0,0 +1,74 @@
+
+### Kademlia vs. PAST 03
+
+step = mids
+
+### General parameters:
+
+# Bit-length of addresses:
+B = 32
+# Number of files:
+files = 3000
+# Number of faults:
+faults = 1
+
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
+
+# Chosen by sweep driver
+
+ReplaceSourcePrimary = false
+
+### Choose a NodeScheme implementation:
+
+#NodeScheme = RandomNodes
+NodeScheme = SimpleNodes
+
+### Choose one of the following FileFactory sections:
+
+# FileFactory implementation PlainFiles
+FileFactory = PlainFiles
+# File size:
+filesize = 14
+# Strip size:
+filestrip = 4
+# File/object replicas:
+filereplicas = 3
+# Number of objects per file:
+filewidth = 10
+
+# FileFactory implementation TraceFiles
+#FileFactory = TraceFiles
+# Trace filename:
+#filetrace = traces/test01.trace
+
+# FileFactory implementation RandomFiles
+#FileFactory = RandomFiles
+# Strip size:
+#filestrip = 4
+# Max size of big files:
+#filebigmax = 100
+# Min size of big files:
+#filebigmin = 50
+# Max size of small files:
+#filesmallmax = 20
+# Min size of small files:
+#filesmallmin = 0
+
+### Simulator output configuration
+
+# Dump properties for each Simulator execution
+printProperties = false
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/wiki/kp04.cfg b/sim/gobs/wiki/kp04.cfg
new file mode 100644
index 0000000..54b8350
--- /dev/null
+++ b/sim/gobs/wiki/kp04.cfg
@@ -0,0 +1,74 @@
+
+### Kademlia vs. PAST 04
+
+step = mids
+
+### General parameters:
+
+# Bit-length of addresses:
+B = 32
+# Number of files:
+files = 3000
+# Number of faults:
+faults = 1
+
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
+
+# Chosen by sweep driver
+
+ReplaceSourcePrimary = false
+
+### Choose a NodeScheme implementation:
+
+NodeScheme = RandomNodes
+# NodeScheme = SimpleNodes
+
+### Choose one of the following FileFactory sections:
+
+# FileFactory implementation PlainFiles
+FileFactory = PlainFiles
+# File size:
+filesize = 14
+# Strip size:
+filestrip = 4
+# File/object replicas:
+filereplicas = 3
+# Number of objects per file:
+filewidth = 10
+
+# FileFactory implementation TraceFiles
+#FileFactory = TraceFiles
+# Trace filename:
+#filetrace = traces/test01.trace
+
+# FileFactory implementation RandomFiles
+#FileFactory = RandomFiles
+# Strip size:
+#filestrip = 4
+# Max size of big files:
+#filebigmax = 100
+# Min size of big files:
+#filebigmin = 50
+# Max size of small files:
+#filesmallmax = 20
+# Min size of small files:
+#filesmallmin = 0
+
+### Simulator output configuration
+
+# Dump properties for each Simulator execution
+printProperties = false
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-70-g6fa0ca9
by noreply@mcs.anl.gov 21 Aug '09
by noreply@mcs.anl.gov 21 Aug '09
21 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 6fa0ca9882e0715ff02ad41d983ee41517359f50 (commit)
from c8f14d3064e343d526eb94b82b1c892e24e4846e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 6fa0ca9882e0715ff02ad41d983ee41517359f50
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Aug 21 15:25:41 2009 -0500
Checking in to run some tests on more processors.
New plotters.
New experiments.
Improved placement framework.
New sweep inputs and outputs for wiki reference.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 2 +-
sim/gobs/{gobs.cfg => debug.cfg} | 10 +-
sim/gobs/gobs/plot/AsciiPlot.java | 2 +-
.../gobs/plot/{SimplePlot.java => LogPlot.java} | 21 ++-
.../plot/{MultiplePlot.java => MultiLogXPlot.java} | 30 ++++-
sim/gobs/gobs/plot/MultiplePlot.java | 4 +
sim/gobs/gobs/sim/Addressable.java | 2 +-
sim/gobs/gobs/sim/Kademlia.java | 39 ++----
sim/gobs/gobs/sim/Nearest.java | 59 ++++++++-
sim/gobs/gobs/sim/Node.java | 7 +-
sim/gobs/gobs/sim/PlacementScheme.java | 62 ++++++---
sim/gobs/gobs/sim/Simulator.java | 55 ++++++--
sim/gobs/gobs/sweep/Balance01.java | 2 +-
sim/gobs/gobs/sweep/Balance02.java | 31 ++++-
sim/gobs/gobs/sweep/Decluster01.java | 14 +--
sim/gobs/gobs/sweep/Decluster02.java | 35 +++--
.../sweep/{Decluster02.java => Decluster03.java} | 40 +++---
sim/gobs/gobs/sweep/Sweep.java | 115 ++++++++++++++++-
sim/gobs/gobs/util/BoundedSortedValues.java | 144 ++++++++++++++++++++
.../gobs/{sim => util}/EnhancedLinkedHashSet.java | 15 +--
sim/gobs/gobs/util/Tools.java | 15 ++
sim/gobs/params.cfg | 21 ++--
sim/gobs/{params.cfg => sweeps/kp01.cfg} | 38 ++++--
sim/gobs/{params.cfg => sweeps/kp02.cfg} | 45 ++++--
sim/gobs/{params.cfg => sweeps/kp03.cfg} | 41 ++++--
sim/gobs/{params.cfg => sweeps/kp04.cfg} | 43 ++++--
sim/gobs/sweeps/nodes.cfg | 2 +-
sim/gobs/wiki/dc03kp01.png | Bin 0 -> 16918 bytes
sim/gobs/{params.cfg => wiki/kp01.cfg} | 38 ++++--
sim/gobs/wiki/kp01.png | Bin 0 -> 19030 bytes
sim/gobs/wiki/kp02.png | Bin 0 -> 18170 bytes
31 files changed, 724 insertions(+), 208 deletions(-)
copy sim/gobs/{gobs.cfg => debug.cfg} (67%)
copy sim/gobs/gobs/plot/{SimplePlot.java => LogPlot.java} (84%)
copy sim/gobs/gobs/plot/{MultiplePlot.java => MultiLogXPlot.java} (79%)
copy sim/gobs/gobs/sweep/{Decluster02.java => Decluster03.java} (52%)
create mode 100644 sim/gobs/gobs/util/BoundedSortedValues.java
rename sim/gobs/gobs/{sim => util}/EnhancedLinkedHashSet.java (73%)
copy sim/gobs/{params.cfg => sweeps/kp01.cfg} (56%)
copy sim/gobs/{params.cfg => sweeps/kp02.cfg} (50%)
copy sim/gobs/{params.cfg => sweeps/kp03.cfg} (54%)
copy sim/gobs/{params.cfg => sweeps/kp04.cfg} (52%)
create mode 100644 sim/gobs/wiki/dc03kp01.png
copy sim/gobs/{params.cfg => wiki/kp01.cfg} (56%)
create mode 100644 sim/gobs/wiki/kp01.png
create mode 100644 sim/gobs/wiki/kp02.png
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index e51e214..fd9c937 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -7,7 +7,7 @@
basedir=".">
<property name="prereqs"
- value=".:./prereqs/commons-io-1.4.jar:./prereqs/jfreechart-1.0.13.jar:./prereqs/xmlgraphics-commons-1.4svn.jar" />
+ value=".:./prereqs/jcommon-1.0.16.jar:./prereqs/commons-io-1.4.jar:./prereqs/jfreechart-1.0.13.jar:./prereqs/xmlgraphics-commons-1.4svn.jar" />
<target name="all"
depends="jar" />
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/debug.cfg
similarity index 67%
copy from sim/gobs/gobs.cfg
copy to sim/gobs/debug.cfg
index a1a41f7..7600a77 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/debug.cfg
@@ -2,12 +2,12 @@
# Simulator configuration
# Print nodes and objects at startup (true/false)
-printInitialNodes = false
+printInitialNodes = true
# Print nodes and objects after each rebuild (true/false)
-printNodes = false
+printNodes = true
# Print object tranfers during rebuilds (true/false)
-printRebuilds = false
+printRebuilds = true
# Print file information (true/false)
-printFiles = false
+printFiles = true
# Print load change statistics (true/false)
-printLoadDiffs = false
+printLoadDiffs = true
diff --git a/sim/gobs/gobs/plot/AsciiPlot.java b/sim/gobs/gobs/plot/AsciiPlot.java
index 073687b..d57b2ab 100644
--- a/sim/gobs/gobs/plot/AsciiPlot.java
+++ b/sim/gobs/gobs/plot/AsciiPlot.java
@@ -9,7 +9,7 @@ import org.jfree.data.xy.XYSeries;
* Will be easy to tie in gnuplot.
* */
-class AsciiPlot
+public class AsciiPlot
extends Plot
{
public static void plot(XYSeries series,
diff --git a/sim/gobs/gobs/plot/SimplePlot.java b/sim/gobs/gobs/plot/LogPlot.java
similarity index 84%
copy from sim/gobs/gobs/plot/SimplePlot.java
copy to sim/gobs/gobs/plot/LogPlot.java
index e704bc9..68be179 100644
--- a/sim/gobs/gobs/plot/SimplePlot.java
+++ b/sim/gobs/gobs/plot/LogPlot.java
@@ -17,6 +17,7 @@ import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
+import org.jfree.chart.axis.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYDotRenderer;
@@ -29,7 +30,7 @@ import org.jfree.data.xy.XYSeriesCollection;
* Simple abstraction over JFreeChart with EPS output.
* */
-public class SimplePlot
+public class LogPlot
{
/**
Generate simple plot.
@@ -85,12 +86,22 @@ public class SimplePlot
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.WHITE);
+
XYLineAndShapeRenderer renderer =
new XYLineAndShapeRenderer();
- renderer.setBaseOutlinePaint(Color.BLACK);
- renderer.setBasePaint(Color.BLACK);
- renderer.setBaseFillPaint(Color.BLACK);
- plot.setRenderer(renderer);
+ renderer.setSeriesPaint(0,Color.BLACK);
+ //renderer.setSeriesLinesVisible(0,false);
+ plot.setRenderer(renderer);
+
+ Font font;
+ LogarithmicAxis domainAxis = new LogarithmicAxis(xlabel);
+ ValueAxis rangeAxis = plot.getRangeAxis();
+ font = rangeAxis.getLabelFont();
+ domainAxis.setLabelFont(font);
+ font = plot.getRangeAxis().getTickLabelFont();
+ font = font.deriveFont(36.0f);
+ domainAxis.setTickLabelFont(font);
+ plot.setDomainAxis(domainAxis);
chart.draw(g2d, rectangle);
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/gobs/plot/MultiLogXPlot.java
similarity index 79%
copy from sim/gobs/gobs/plot/MultiplePlot.java
copy to sim/gobs/gobs/plot/MultiLogXPlot.java
index a1600ea..90f6e06 100644
--- a/sim/gobs/gobs/plot/MultiplePlot.java
+++ b/sim/gobs/gobs/plot/MultiLogXPlot.java
@@ -1,7 +1,7 @@
package gobs.plot;
-import java.awt.Color;
+import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
@@ -17,9 +17,11 @@ import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
+import org.jfree.chart.axis.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYDotRenderer;
+import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
@@ -30,7 +32,7 @@ import gobs.util.Bits;
* Simple abstraction over JFreeChart with EPS output.
* */
-public class MultiplePlot
+public class MultiLogXPlot
{
/**
Generate simple plot.
@@ -65,9 +67,6 @@ public class MultiplePlot
g2d.setGraphicContext
(new org.apache.xmlgraphics.java2d.GraphicContext());
g2d.setupDocument(out, w, h);
-
- //Paint a bounding box
- // g2d.drawRect(20, 20, 40, 40);
}
catch (IOException e)
{
@@ -84,8 +83,27 @@ public class MultiplePlot
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.WHITE);
+
+ // Turn on shapes...
+ XYLineAndShapeRenderer renderer =
+ new XYLineAndShapeRenderer();
+ plot.setRenderer(renderer);
+
+ // Cache default fonts...
+ ValueAxis rangeAxis = plot.getRangeAxis();
+ Font labelFont = rangeAxis.getLabelFont();
+ Font tickFont = rangeAxis.getTickLabelFont();
+
+ // Correct fonts...
+ LogarithmicAxis domainAxis = new LogarithmicAxis(xlabel);
+ domainAxis.setLabelFont(labelFont);
+ domainAxis.setTickLabelFont(tickFont);
+ plot.setDomainAxis(domainAxis);
+
chart.draw(g2d, rectangle);
+ System.out.println("plotted");
+
try
{
g2d.finish();
@@ -112,7 +130,7 @@ public class MultiplePlot
for (int j = 0; j < 3; j++)
{
XYSeries series = new XYSeries("data: " + count++);
- for (int i = 0; i < 9; i++)
+ for (int i = 1; i < 9; i++)
{
series.add(i, j*3+Bits.nextInt(3));
}
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/gobs/plot/MultiplePlot.java
index a1600ea..9d3ffa9 100644
--- a/sim/gobs/gobs/plot/MultiplePlot.java
+++ b/sim/gobs/gobs/plot/MultiplePlot.java
@@ -20,6 +20,7 @@ import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYDotRenderer;
+import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
@@ -82,8 +83,11 @@ public class MultiplePlot
(title, xlabel, ylabel, collection,
PlotOrientation.VERTICAL, withLegend, false, false);
+ XYLineAndShapeRenderer renderer =
+ new XYLineAndShapeRenderer();
XYPlot plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.WHITE);
+ plot.setRenderer(renderer);
chart.draw(g2d, rectangle);
try
diff --git a/sim/gobs/gobs/sim/Addressable.java b/sim/gobs/gobs/sim/Addressable.java
index 4d20785..500fd18 100644
--- a/sim/gobs/gobs/sim/Addressable.java
+++ b/sim/gobs/gobs/sim/Addressable.java
@@ -9,7 +9,7 @@ import java.math.BigInteger;
class Addressable
{
- int B;
+ int B;
BigInteger id;
// Cached result of bitArray():
diff --git a/sim/gobs/gobs/sim/Kademlia.java b/sim/gobs/gobs/sim/Kademlia.java
index 45292aa..33730d6 100644
--- a/sim/gobs/gobs/sim/Kademlia.java
+++ b/sim/gobs/gobs/sim/Kademlia.java
@@ -10,7 +10,7 @@ import gobs.util.Tools;
* Places objects on the nearest node using the XOR distance metric.
* */
-class Kademlia
+public class Kademlia
extends PlacementScheme
{
Kademlia(int B)
@@ -18,26 +18,6 @@ class Kademlia
super(B);
}
- public void place(Collection<Obj> objects, List<Node> nodes)
- {
- System.out.println("placing: " + objects.size());
- for (Obj object : objects)
- placeObject(object, nodes);
- }
-
- /**
- Allocate replicas for object and place all on nodes.
- */
- void placeObject(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Primary primary = object.toPrimary();
- closest.remove(0).add(primary);
- for (Node node : closest)
- {
- node.add(object.toSecondary(primary));
- }
- }
/**
Place this object to rebuild.
@@ -76,7 +56,7 @@ class Kademlia
destination.bitString());
}
*/
-
+ /*
List<Node> closestNodes(Obj object, List<Node> nodes)
{
List<Node> closest = new ArrayList<Node>(object.replicas*2);
@@ -87,7 +67,9 @@ class Kademlia
Node closestNode = null;
for (Node node : nodes)
{
- BigInteger d = node.id.xor(object.id);
+ BigInteger d = node.id.xor(object.id);
+ if (d.compareTo(BigInteger.ZERO) < 0)
+ System.out.println("NEGATIVE!");
if ((closestDiff == null ||
closestDiff.compareTo(d) > 0) &&
! closest.contains(node))
@@ -100,7 +82,14 @@ class Kademlia
}
return closest;
}
-
+ */
+
+ public BigInteger distance(Addressable address1,
+ Addressable address2)
+ {
+ return address1.id.xor(address2.id);
+ }
+
/**
XOR calculator.
*/
@@ -112,6 +101,6 @@ class Kademlia
BigInteger i1 = new BigInteger(args[0], 2);
BigInteger i2 = new BigInteger(args[1], 2);
- System.out.println(i2.subtract(i1).abs());
+ System.out.println(i2.xor(i1));
}
}
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/gobs/sim/Nearest.java
index a388575..5a7d4ad 100644
--- a/sim/gobs/gobs/sim/Nearest.java
+++ b/sim/gobs/gobs/sim/Nearest.java
@@ -4,18 +4,21 @@ package gobs.sim;
import java.math.BigInteger;
import java.util.*;
+import gobs.util.Tools;
+
/**
* Places objects on the nearest node using the XOR distance metric.
* */
-class Nearest
+public class Nearest
extends PlacementScheme
{
Nearest(int B)
{
super(B);
}
-
+
+ /*
public void place(Collection<Obj> objects, List<Node> nodes)
{
System.out.println("placing: " + objects.size());
@@ -25,7 +28,7 @@ class Nearest
/**
Allocate replicas for object and place all on nodes.
- */
+ *
void placeObject(Obj object, List<Node> nodes)
{
List<Node> closest = closestNodes(object, nodes);
@@ -36,7 +39,37 @@ class Nearest
node.add(object.toSecondary(primary));
}
}
+ */
+
+ public BigInteger distance(Addressable address1,
+ Addressable address2)
+ {
+ return difference(Simulator.current.M, address1.id, address2.id);
+ }
+
+ public BigInteger difference(BigInteger M,
+ BigInteger i1, BigInteger i2)
+ {
+ BigInteger a,b;
+
+ if (i1.compareTo(i2) < 0)
+ {
+ a = i1;
+ b = i2;
+ }
+ else
+ {
+ a = i2;
+ b = i1;
+ }
+
+ BigInteger d1 = b.subtract(a);
+ BigInteger d2 = M.subtract(b).add(a);
+
+ return (d2.compareTo(d1) < 0) ? d2 : d1;
+ }
+ /*
List<Node> closestNodes(Obj object, List<Node> nodes)
{
List<Node> closest = new ArrayList<Node>(object.replicas*2);
@@ -66,4 +99,24 @@ class Nearest
return closest;
}
+ */
+
+ /**
+ Wrap-around calculator.
+ */
+ public static void main(String[] args)
+ {
+ if (args.length < 2)
+ Tools.bail("Need 2 binary numbers!");
+
+ int B = 10;
+ BigInteger M = new BigInteger("10");
+
+ Nearest nearest = new Nearest(B);
+
+ BigInteger i1 = new BigInteger(args[0]);
+ BigInteger i2 = new BigInteger(args[1]);
+
+ System.out.println(nearest.difference(M,i1,i2));
+ }
}
diff --git a/sim/gobs/gobs/sim/Node.java b/sim/gobs/gobs/sim/Node.java
index 3264b5f..05f0224 100644
--- a/sim/gobs/gobs/sim/Node.java
+++ b/sim/gobs/gobs/sim/Node.java
@@ -88,7 +88,7 @@ public class Node
return bitString() + " " + objects.size();
}
- public String toString()
+ public String display()
{
StringBuffer result = new StringBuffer(objects.size()*10);
result.append(name());
@@ -100,4 +100,9 @@ public class Node
result.append("\n");
return result.toString();
}
+
+ public String toString()
+ {
+ return name();
+ }
}
diff --git a/sim/gobs/gobs/sim/PlacementScheme.java b/sim/gobs/gobs/sim/PlacementScheme.java
index bd5fb2a..9ffa9b1 100644
--- a/sim/gobs/gobs/sim/PlacementScheme.java
+++ b/sim/gobs/gobs/sim/PlacementScheme.java
@@ -10,7 +10,7 @@ import gobs.util.*;
* Interface to place a list of objects on a set of nodes.
* */
-abstract class PlacementScheme
+public abstract class PlacementScheme
{
int B;
BigInteger M;
@@ -30,16 +30,7 @@ abstract class PlacementScheme
{
ArrayList<Obj> result = new ArrayList<Obj>(file.width+2);
- // BigInteger two = new BigInteger("2");
BigInteger bigWidth = new BigInteger("" + file.width);
- /*
- BigInteger bigWidth2 = new BigInteger.ONE;
- while (bigWidth2.compareTo(bigWidth) <= 0)
- {
- bigWidth2 = bigWidth2.multiply(two);
- }
- */
-
BigInteger s = M.divide(bigWidth);
BigInteger p = randomID();
@@ -61,36 +52,71 @@ abstract class PlacementScheme
result.trimToSize();
return result;
}
-
+
+ public void place(Collection<Obj> objects, List<Node> nodes)
+ {
+ // System.out.println("place objects: " + objects.size());
+ for (Obj object : objects)
+ placeObject(object, nodes);
+ }
+
/**
- Place a set of objects.
+ Allocate replicas for object and place all on nodes.
*/
- abstract void place(Collection<Obj> objects, List<Node> nodes);
-
+ void placeObject(Obj object, List<Node> nodes)
+ {
+ // System.out.println("place: " + object);
+ List<Node> closest = closestNodes(object, nodes);
+ Primary primary = object.toPrimary();
+ closest.remove(closest.size()-1).add(primary);
+ for (Node node : closest)
+ {
+ node.add(object.toSecondary(primary));
+ }
+ }
+
/**
Obtain a list of nodes closest to the given object with respect
to the distance metric used here.
*/
- abstract List<Node> closestNodes(Obj object, List<Node> nodes);
+ List<Node> closestNodes(Obj object, List<Node> nodes)
+ {
+ BoundedSortedValues<Node,BigInteger> closest =
+ new BoundedSortedValues<Node,BigInteger>(object.replicas);
+
+ for (Node node : nodes)
+ {
+ BigInteger d = distance(object, node);
+ closest.add(node, d);
+ }
+
+ // System.out.println(closest);
+
+ return closest.get();
+ }
+
+ public abstract BigInteger distance(Addressable address1,
+ Addressable address2);
/**
Place this object to rebuild.
*/
void rebuild(Obj object, List<Node> nodes)
{
+ // System.out.println("rebuild: " + object);
List<Node> closest = closestNodes(object, nodes);
Secondary secondary;
Node source = null, destination = null;
if (object instanceof Primary)
{
Primary primary = object.toPrimary();
- source = closest.remove(0);
+ source = closest.remove(closest.size()-1);
secondary = (Secondary) source.remove(primary.id);
source.add(primary);
}
else
{
- source = closest.remove(0);
+ source = closest.remove(closest.size()-1);
Primary primary = (Primary) source.get(object.id);
secondary = primary.toSecondary(primary);
}
@@ -113,7 +139,7 @@ abstract class PlacementScheme
destination.add(secondary);
source.pushes++;
- source.pulls++;
+ destination.pulls++;
if (Tools.string(Simulator.current.properties, "printRebuilds")
.equals("true"))
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
index 2116710..5eb94fd 100644
--- a/sim/gobs/gobs/sim/Simulator.java
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -1,8 +1,8 @@
package gobs.sim;
-import java.math.BigInteger;
-import java.text.DecimalFormat;
+import java.math.BigInteger;
+import java.text.DecimalFormat;
import java.util.*;
import gobs.util.*;
@@ -19,10 +19,12 @@ public class Simulator
int B;
int N;
+ public BigInteger M;
+
int fileCount;
int faults;
- PlacementScheme placer;
+ public PlacementScheme placer;
NodeScheme hub;
FileFactory factory;
@@ -75,14 +77,14 @@ public class Simulator
{
System.out.println("NODES:");
for (Node node : nodes)
- System.out.println(node.bitString());
+ System.out.println(node.name());
}
void printNodeObjects(List<Node> nodes)
{
System.out.println("NODE_CONTENTS:");
for (Node node : nodes)
- System.out.println(node);
+ System.out.println(node.display());
}
void printFiles()
@@ -100,7 +102,7 @@ public class Simulator
for (Node node : sorted.keySet())
{
Integer d = sorted.get(node);
- System.out.println(node.bitString() + ": " + d);
+ System.out.println(node.name() + ": " + d);
}
}
@@ -216,6 +218,8 @@ public class Simulator
}
else
bail("Bad PlacementScheme name: " + placerName);
+
+ M = placer.M;
String nodesName = Tools.string(properties, "NodeScheme");
if (nodesName.equals("RandomNodes"))
@@ -235,6 +239,9 @@ public class Simulator
// Initialize node addresses...
hub.generate(N, nodes);
stats.nodes = N;
+
+ if (Tools.bool(properties, "printInitialNodes"))
+ printNodes(nodes);
// Initialize object addresses...
for (int i = 0; i < fileCount; i++)
@@ -270,6 +277,8 @@ public class Simulator
if (Tools.string(properties, "printInitialNodes").equals("true"))
printNodeObjects(nodes);
+ System.out.println("faults: " + faults);
+
for (int fault = 0; fault < faults; fault++)
{
// Cause a fault and reallocate objects...
@@ -317,25 +326,43 @@ public class Simulator
System.out.println("PULL_DECLUSTERING: ");
int affected = 0;
Node last = null;
- double percent = 0.0;
+ double percentPulls = 0.0;
for (Node node : sorted.keySet())
{
int d = sorted.get(node);
if (d > 0)
{
- percent = (100.0*d)/total;
+ percentPulls = (100.0*d)/total;
System.out.println(node.name() + ": " +
- df.format(percent) + "%");
+ df.format(percentPulls) + "%");
affected++;
last = node;
}
}
+
+ // Display data reallocation declustering...
+ System.out.println("TOTAL_DECLUSTERING: ");
+ double percentTotal = 0.0;
+ double maxPercentTotal = 0.0;
+ for (Node node : nodes)
+ {
+ int d = node.pushes+node.pulls;
+ if (d > 0)
+ {
+ percentTotal = (100.0*d)/(total*2);
+ System.out.println(node.name() + ": " +
+ df.format(percentTotal) + "%");
+ if (percentTotal > maxPercentTotal)
+ {
+ maxPercentTotal = percentTotal;
+ }
+ }
+ }
+
+ stats.results.setProperty("maxPulls", df.format(percentPulls));
+ stats.results.setProperty("affected", df.format(affected));
+ stats.results.setProperty("maxTotal", df.format(maxPercentTotal));
- stats.results.setProperty("maxDeclustering",
- new Double(percent).toString());
- stats.results.setProperty("affected",
- new Double(affected).toString());
-
System.out.println("SERVERS_AFFECTED: " + affected);
}
}
diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java
index 148a7de..1ca098d 100644
--- a/sim/gobs/gobs/sweep/Balance01.java
+++ b/sim/gobs/gobs/sweep/Balance01.java
@@ -10,7 +10,7 @@ import gobs.util.*;
import gobs.plot.SimplePlot;
/**
- * Reports object load on each server.
+ * Reports object load on each server. Sorted.
*
* Usage: Balance01 gobs.cfg params.cfg
* */
diff --git a/sim/gobs/gobs/sweep/Balance02.java b/sim/gobs/gobs/sweep/Balance02.java
index 6deceaa..3bde37b 100644
--- a/sim/gobs/gobs/sweep/Balance02.java
+++ b/sim/gobs/gobs/sweep/Balance02.java
@@ -1,6 +1,7 @@
package gobs.sweep;
+import java.math.BigInteger;
import java.util.*;
import org.jfree.data.xy.XYSeries;
@@ -10,9 +11,9 @@ import gobs.util.*;
import gobs.plot.SimplePlot;
/**
- * Reports object load on each server.
+ * Reports object load on each server. Unsorted.
*
- * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg
+ * Usage: Balance02 -n <repeats> gobs.cfg params.cfg
* */
class Balance02
@@ -30,10 +31,32 @@ class Balance02
XYSeries series = new XYSeries("Balance");
- int i = 0;
- for (Node node: simulator.nodes)
+ int i = 0;
+ for (Node node : simulator.nodes)
{
series.add(i++, node.objects.size());
+
+ Node closestNode = null;
+ BigInteger closestDistance = simulator.M;
+ for (Node neighbor : simulator.nodes)
+ {
+ if (neighbor != node)
+ {
+ BigInteger distance =
+ simulator.placer.distance(node,neighbor);
+ if (distance.compareTo(closestDistance) < 0)
+ {
+ closestNode = neighbor;
+ closestDistance = distance;
+ }
+ }
+ }
+
+ System.out.println
+ ("i: " + i +
+ " node: " + node +
+ " load: " + node.objects.size() +
+ "\n\t distance: " + closestDistance);
}
SimplePlot.plot(series, "Load Distribution", "nodes", "load",
diff --git a/sim/gobs/gobs/sweep/Decluster01.java b/sim/gobs/gobs/sweep/Decluster01.java
index f67cd06..99dcd11 100644
--- a/sim/gobs/gobs/sweep/Decluster01.java
+++ b/sim/gobs/gobs/sweep/Decluster01.java
@@ -3,8 +3,8 @@ package gobs.sweep;
import java.util.*;
-import gobs.util.Tools;
import gobs.plot.SimplePlot;
+import gobs.util.*;
/**
* Modifies node count. Reports object movement load on the
@@ -14,22 +14,18 @@ import gobs.plot.SimplePlot;
* */
class Decluster01
- extends Sweep
{
- Decluster01(String[] args)
- {
- super(args);
- }
-
public static void main(String[] args)
{
- Decluster01 sweep = new Decluster01(args);
+ Bits.init();
+
+ Sweep sweep = new Sweep(args);
int minNodes = Tools.integer(sweep.properties, "minNodes");
int maxNodes = Tools.integer(sweep.properties, "maxNodes");
List<String> values = Sweep.tens(minNodes, maxNodes);
- sweep.execute("Declustering", "nodes", values, "maxDeclustering");
+ sweep.execute("Declustering", "nodes", values, "maxPulls");
SimplePlot.plot(sweep.series, "Maximum Rebuild Load", "nodes", "load",
"Decluster01.eps");
diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster02.java
index f5fb374..0d26013 100644
--- a/sim/gobs/gobs/sweep/Decluster02.java
+++ b/sim/gobs/gobs/sweep/Decluster02.java
@@ -8,13 +8,13 @@ import org.jfree.data.xy.XYSeriesCollection;
// import gobs.sim.*;
import gobs.util.*;
-import gobs.plot.MultiplePlot;
+import gobs.plot.*;
/**
* Modifies node count. Reports object movement load on the
* heaviest server during rebuild.
*
- * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * Usage: Decluster02 -n <repeats> *.cfg
* */
class Decluster02
@@ -29,30 +29,35 @@ class Decluster02
int minNodes = Tools.integer(properties, "minNodes");
int maxNodes = Tools.integer(properties, "maxNodes");
+
+ List<String> values = null;
+ String step = Tools.string(properties, "step");
+ if (step.equals("tens"))
+ values = Sweep.tens(minNodes, maxNodes);
+ else if (step.equals("mids"))
+ values = Sweep.exps(minNodes, maxNodes);
final XYSeriesCollection collection = new XYSeriesCollection();
- List<String> values = null;
-
Sweep nearestSweep = new Sweep();
properties.setProperty("PlacementScheme", "Nearest");
+ nearestSweep.initialize(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
- values = Sweep.tens(minNodes, maxNodes);
- nearestSweep.properties = properties;
- nearestSweep.execute("PAST", "nodes", values, "maxDeclustering");
+ nearestSweep.execute("PAST", "nodes", values, "maxPulls");
+ collection.addSeries(nearestSweep.series);
Sweep kademliaSweep = new Sweep();
properties.setProperty("PlacementScheme", "Kademlia");
+ kademliaSweep.initialize(properties);
kademliaSweep.repeats = Tools.integer(properties, "repeats");
- values = Sweep.tens(minNodes, maxNodes);
- kademliaSweep.properties = properties;
kademliaSweep.execute("Kademlia", "nodes", values,
- "maxDeclustering");
-
- collection.addSeries(nearestSweep.series);
+ "maxPulls");
collection.addSeries(kademliaSweep.series);
-
- MultiplePlot.plot(collection, "Maximum Rebuild Load",
- "nodes", "load", "Decluster01.eps");
+
+ String output = Tools.string(properties, "output");
+ MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
+ "nodes", "load fraction (%)", output);
+ // AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
+ // "nodes", "load", "tmp.txt");
}
}
diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster03.java
similarity index 52%
copy from sim/gobs/gobs/sweep/Decluster02.java
copy to sim/gobs/gobs/sweep/Decluster03.java
index f5fb374..4e5296b 100644
--- a/sim/gobs/gobs/sweep/Decluster02.java
+++ b/sim/gobs/gobs/sweep/Decluster03.java
@@ -8,16 +8,17 @@ import org.jfree.data.xy.XYSeriesCollection;
// import gobs.sim.*;
import gobs.util.*;
-import gobs.plot.MultiplePlot;
+import gobs.plot.*;
/**
- * Modifies node count. Reports object movement load on the
- * heaviest server during rebuild.
+ * Modifies node count.
+ * Reports object movement load (pushes+pulls) on the
+ * busiest server during rebuild.
*
- * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * Usage: Decluster03 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
* */
-class Decluster02
+class Decluster03
{
static Properties properties;
@@ -29,30 +30,29 @@ class Decluster02
int minNodes = Tools.integer(properties, "minNodes");
int maxNodes = Tools.integer(properties, "maxNodes");
+ String step = Tools.string(properties, "step");
+ List<String> values = Sweep.values(step, minNodes, maxNodes);
final XYSeriesCollection collection = new XYSeriesCollection();
- List<String> values = null;
-
- Sweep nearestSweep = new Sweep();
properties.setProperty("PlacementScheme", "Nearest");
+ Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
- values = Sweep.tens(minNodes, maxNodes);
- nearestSweep.properties = properties;
- nearestSweep.execute("PAST", "nodes", values, "maxDeclustering");
+ nearestSweep.execute("PAST", "nodes", values, "maxTotal");
+ collection.addSeries(nearestSweep.series);
- Sweep kademliaSweep = new Sweep();
+ Sweep kademliaSweep = new Sweep(properties
+ );
properties.setProperty("PlacementScheme", "Kademlia");
kademliaSweep.repeats = Tools.integer(properties, "repeats");
- values = Sweep.tens(minNodes, maxNodes);
- kademliaSweep.properties = properties;
kademliaSweep.execute("Kademlia", "nodes", values,
- "maxDeclustering");
-
- collection.addSeries(nearestSweep.series);
+ "maxTotal");
collection.addSeries(kademliaSweep.series);
-
- MultiplePlot.plot(collection, "Maximum Rebuild Load",
- "nodes", "load", "Decluster01.eps");
+
+ String output = Tools.string(properties, "output");
+ MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
+ "nodes", "load", output);
+ // AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
+ // "nodes", "load", "tmp.txt");
}
}
diff --git a/sim/gobs/gobs/sweep/Sweep.java b/sim/gobs/gobs/sweep/Sweep.java
index 1b200f8..686a2d9 100644
--- a/sim/gobs/gobs/sweep/Sweep.java
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -28,6 +28,11 @@ class Sweep
Sweep()
{}
+ Sweep(Properties properties)
+ {
+ this.properties = properties;
+ }
+
Sweep(String[] args)
{
properties = getopts(args);
@@ -55,6 +60,10 @@ class Sweep
{
result.setProperty("repeats", args[++i]);
}
+ else if (args[i].equals("-o"))
+ {
+ result.setProperty("output", args[++i]);
+ }
else if (args[i].equals("-p"))
{
path(args[++i]);
@@ -78,6 +87,21 @@ class Sweep
p = p+"/";
path = p;
}
+
+ static List<String> values(String type, int min, int max)
+ {
+ if (type.equals("all"))
+ return all(min,max);
+ else if (type.equals("tens"))
+ return tens(min,max);
+ else if (type.equals("exps"))
+ return exps(min,max);
+ else if (type.equals("mids"))
+ return mids(min,max);
+ else
+ Tools.bail("Sweep.values(): Bad values type: " + type);
+ return null;
+ }
/**
Sweep over all integer values between min and max.
@@ -101,11 +125,67 @@ class Sweep
for (int i = min+1; i < max; i++)
if (i % 10 == 0)
result.add(new Integer(i).toString());
+ if (min != max)
+ result.add(new Integer(max).toString());
+ return result;
+ }
+
+ /**
+ Sweep over all integer values between min and max that
+ are the product of min and 2^i for some i.
+ */
+ static List<String> exps(int min, int max)
+ {
+ List<String> result = new ArrayList<String>();
+
+ int p = 1;
+ int v = min;
+
+ while (v*p < max)
+ {
+ result.add(new Integer(v*p).toString());
+ p *= 2;
+ }
result.add(new Integer(max).toString());
+
return result;
}
/**
+ Sweep over all integer values between min and max that
+ are the product of min and 2^i for some i, and the values
+ between those.
+ */
+ static List<String> mids(int min, int max)
+ {
+ List<String> result = new ArrayList<String>();
+
+ int v = min;
+ int p = 1;
+ int previous = -1;
+
+ int vp = 0;
+ while ((vp = v*p) < max)
+ {
+ if (previous > 0)
+ {
+ int m = (vp+previous) / 2;
+ if (m != vp)
+ result.add(new Integer(m).toString());
+ }
+ result.add(new Integer(vp).toString());
+ previous = vp;
+ p *= 2;
+ }
+ int m = (max+previous) / 2;
+ if (m != previous)
+ result.add(new Integer(m).toString());
+ result.add(new Integer(max).toString());
+
+ return result;
+ }
+
+ /**
Load a properties file.
*/
static void load(Properties properties, String file)
@@ -121,11 +201,27 @@ class Sweep
}
catch (java.io.IOException e)
{
- Tools.bail("Could not open properties file!");
+ Tools.bail("Could not open properties file: " + file);
}
}
/**
+ Set properties from memory.
+ */
+ void initialize(Properties properties)
+ {
+ this.properties = properties;
+ }
+
+ /**
+ Set properties from command-line.
+ */
+ void initialize(String[] args)
+ {
+ this.properties = getopts(args);
+ }
+
+ /**
Execute the parameter sweep.
For each value in values, substitute it for xname in the
properties object. Run the simulation and extract the
@@ -134,6 +230,8 @@ class Sweep
void execute(String description, String xname,
List<String> values, String yname)
{
+ repeats = Tools.integer(properties, "repeats");
+
if (repeats <= 0)
System.out.println("WARNING: repeats=" + repeats);
@@ -150,8 +248,10 @@ class Sweep
simulator.initialize(properties);
simulator.execute();
stats.add(simulator.stats);
+ System.out.println("result: " + result(simulator, yname));
total += result(simulator, yname);
}
+ System.out.println("avg: " + total/repeats);
series.add(Double.parseDouble(v), total/repeats);
}
}
@@ -165,4 +265,17 @@ class Sweep
Double.parseDouble
((String) simulator.stats.results.get(name));
}
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ int i1 = Integer.parseInt(args[0]);
+ int i2 = Integer.parseInt(args[1]);
+
+ List<String> list = mids(i1,i2);
+
+ System.out.println(list);
+ }
}
diff --git a/sim/gobs/gobs/util/BoundedSortedValues.java b/sim/gobs/gobs/util/BoundedSortedValues.java
new file mode 100644
index 0000000..834c531
--- /dev/null
+++ b/sim/gobs/gobs/util/BoundedSortedValues.java
@@ -0,0 +1,144 @@
+
+package gobs.util;
+
+import java.util.*;
+
+public class BoundedSortedValues<T,V extends Comparable<V>>
+{
+ List<Entry> list = new LinkedList<Entry>();
+
+ Entry bottom = null;
+ int bound = 0;
+
+ Mode mode = Mode.SMALLEST;
+
+ public class Entry
+ implements Map.Entry<T,V>
+ {
+ T thing;
+ V value;
+
+ Entry(T thing, V value)
+ {
+ this.thing = thing;
+ this.value = value;
+ }
+
+ public boolean equals(Object o)
+ {
+ return thing.equals(o);
+ }
+
+ public T getKey()
+ {
+ return thing;
+ }
+
+ public V getValue()
+ {
+ return value;
+ }
+
+ public int hashCode()
+ {
+ return thing.hashCode() + value.hashCode();
+ }
+
+ public V setValue(V value)
+ {
+ this.value = value; // .intValue();
+ return value;
+ }
+ }
+
+ enum Mode
+ {
+ SMALLEST, LARGEST
+ }
+
+ public BoundedSortedValues(int bound)
+ {
+ this.bound = bound;
+ if (bound < 0)
+ throw new IndexOutOfBoundsException
+ ("Bound must be non-negative!");
+ }
+
+ public boolean add(T thing, V value)
+ {
+ if (bound == 0)
+ return false;
+
+ if (mode == Mode.SMALLEST)
+ {
+ if (bottom == null ||
+ value.compareTo(bottom.value) < 0 ||
+ list.size() < bound)
+ {
+ int i = 0;
+ for (Iterator<Entry> it = list.iterator(); it.hasNext(); )
+ {
+ Entry pair = it.next();
+ if (value.compareTo(pair.value) < 0)
+ i++;
+ else
+ break;
+ }
+ list.add(i, new Entry(thing, value));
+ if (list.size() > bound)
+ list.remove(0);
+ bottom = list.get(0);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Map.Entry<T,V> get(int index)
+ {
+ return list.get(index);
+ }
+
+ public int size()
+ {
+ return list.size();
+ }
+
+ public List<T> get()
+ {
+ List<T> result = new ArrayList<T>(list.size());
+ for (Entry pair : list)
+ result.add(pair.thing);
+ return result;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+
+ sb.append("[");
+ for (Iterator<Entry> it = list.iterator(); it.hasNext(); )
+ {
+ Entry pair = it.next();
+ sb.append("(");
+ sb.append(pair.thing);
+ sb.append(",");
+ sb.append(pair.value);
+ sb.append(")");
+ if (it.hasNext())
+ sb.append(",");
+ }
+ sb.append("]");
+
+ return sb.toString();
+ }
+
+ public static void main(String[] args)
+ {
+ BoundedSortedValues<String,Integer> v =
+ new BoundedSortedValues<String,Integer>(3);
+ for (String arg : args)
+ v.add(arg, arg.length());
+ System.out.println(v.toString());
+ }
+}
diff --git a/sim/gobs/gobs/sim/EnhancedLinkedHashSet.java b/sim/gobs/gobs/util/EnhancedLinkedHashSet.java
similarity index 73%
rename from sim/gobs/gobs/sim/EnhancedLinkedHashSet.java
rename to sim/gobs/gobs/util/EnhancedLinkedHashSet.java
index fb400dd..ac78648 100644
--- a/sim/gobs/gobs/sim/EnhancedLinkedHashSet.java
+++ b/sim/gobs/gobs/util/EnhancedLinkedHashSet.java
@@ -1,10 +1,10 @@
-package gobs.sim;
+package gobs.util;
import java.math.BigInteger;
import java.util.*;
-class EnhancedLinkedHashSet<T>
+public class EnhancedLinkedHashSet<T>
extends LinkedHashSet<T>
{
private static final long serialVersionUID = 1;
@@ -14,7 +14,7 @@ class EnhancedLinkedHashSet<T>
super();
}
- boolean containsAny(Collection<T> c)
+ public boolean containsAny(Collection<T> c)
{
for (T thing : c)
{
@@ -27,20 +27,15 @@ class EnhancedLinkedHashSet<T>
/**
Debugging only.
*/
+ /*
public static void main(String[] args)
{
EnhancedLinkedHashSet<Object> set = new EnhancedLinkedHashSet<Object>();
- /*
- String hello = "Hello";
- set.add(hello);
- if (set.contains("Hello"))
- System.out.println("true");
- */
-
Obj obj = new Obj(4, new BigInteger("3"), 0, 0);
set.add(obj);
if (set.contains(new Obj(5, new BigInteger("3"), 1, 1)))
System.out.println("true");
}
+ */
}
diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/gobs/util/Tools.java
index 52950f5..264b0fa 100644
--- a/sim/gobs/gobs/util/Tools.java
+++ b/sim/gobs/gobs/util/Tools.java
@@ -29,6 +29,21 @@ public class Tools
return result;
}
+ public static boolean bool(Properties properties,
+ String variable)
+ {
+ boolean result = false;
+ String value = string(properties, variable);
+ if (value.equalsIgnoreCase("true"))
+ result = true;
+ else if (value.equalsIgnoreCase("false"))
+ result = false;
+ else
+ bail("Could not read boolean from property: " + variable +
+ " = " + properties.getProperty(variable));
+ return result;
+ }
+
public static String string(Properties properties, String variable)
{
String result = null;
diff --git a/sim/gobs/params.cfg b/sim/gobs/params.cfg
index 9b089f0..fccbf19 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/params.cfg
@@ -1,22 +1,23 @@
### Parameters for GOBS Simulator run
-## General parameters...
+### General parameters:
+
# Bit-length of addresses:
-B = 16
+B = 7
# Number of servers:
nodes = 32
# Number of files:
-files = 10000
+files = 6
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+### Choose a PlacementScheme implementation:
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+PlacementScheme = Kademlia
+# PlacementScheme = Nearest
-### Choose a NodeScheme implementation
+### Choose a NodeScheme implementation:
# NodeScheme = RandomNodes
NodeScheme = SimpleNodes
@@ -26,13 +27,13 @@ NodeScheme = SimpleNodes
# FileFactory implementation PlainFiles
FileFactory = PlainFiles
# File size:
-filesize = 14
+filesize = 140
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
diff --git a/sim/gobs/params.cfg b/sim/gobs/sweeps/kp01.cfg
similarity index 56%
copy from sim/gobs/params.cfg
copy to sim/gobs/sweeps/kp01.cfg
index 9b089f0..599984f 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/sweeps/kp01.cfg
@@ -1,22 +1,27 @@
-### Parameters for GOBS Simulator run
+### Kademlia vs. PAST 01
+
+step = exps
+
+### General parameters:
-## General parameters...
# Bit-length of addresses:
-B = 16
-# Number of servers:
-nodes = 32
+B = 32
# Number of files:
-files = 10000
+files = 3000
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
# PlacementScheme = Kademlia
PlacementScheme = Nearest
-### Choose a NodeScheme implementation
+### Choose a NodeScheme implementation:
# NodeScheme = RandomNodes
NodeScheme = SimpleNodes
@@ -30,9 +35,9 @@ filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -51,3 +56,16 @@ filewidth = 1
#filesmallmax = 20
# Min size of small files:
#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/params.cfg b/sim/gobs/sweeps/kp02.cfg
similarity index 50%
copy from sim/gobs/params.cfg
copy to sim/gobs/sweeps/kp02.cfg
index 9b089f0..a972556 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/sweeps/kp02.cfg
@@ -1,25 +1,29 @@
-### Parameters for GOBS Simulator run
+### Kademlia vs. PAST 02
+
+step = exps
+
+### General parameters:
-## General parameters...
# Bit-length of addresses:
-B = 16
-# Number of servers:
-nodes = 32
+B = 32
# Number of files:
-files = 10000
+files = 3000
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
-# PlacementScheme = Kademlia
-PlacementScheme = Nearest
+### Choose a PlacementScheme implementation:
-### Choose a NodeScheme implementation
+# Chosen by sweep driver.
-# NodeScheme = RandomNodes
-NodeScheme = SimpleNodes
+### Choose a NodeScheme implementation:
+
+NodeScheme = RandomNodes
+# NodeScheme = SimpleNodes
### Choose one of the following FileFactory sections:
@@ -30,9 +34,9 @@ filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -51,3 +55,16 @@ filewidth = 1
#filesmallmax = 20
# Min size of small files:
#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/params.cfg b/sim/gobs/sweeps/kp03.cfg
similarity index 54%
copy from sim/gobs/params.cfg
copy to sim/gobs/sweeps/kp03.cfg
index 9b089f0..25890dc 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/sweeps/kp03.cfg
@@ -1,24 +1,30 @@
-### Parameters for GOBS Simulator run
+### Kademlia vs. PAST 03
+
+output = kp03.eps
+step = mids
+
+### General parameters:
-## General parameters...
# Bit-length of addresses:
-B = 16
-# Number of servers:
-nodes = 32
+B = 32
# Number of files:
-files = 10000
+files = 3000
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
# PlacementScheme = Kademlia
PlacementScheme = Nearest
-### Choose a NodeScheme implementation
+### Choose a NodeScheme implementation:
-# NodeScheme = RandomNodes
+#NodeScheme = RandomNodes
NodeScheme = SimpleNodes
### Choose one of the following FileFactory sections:
@@ -30,9 +36,9 @@ filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -51,3 +57,16 @@ filewidth = 1
#filesmallmax = 20
# Min size of small files:
#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/params.cfg b/sim/gobs/sweeps/kp04.cfg
similarity index 52%
copy from sim/gobs/params.cfg
copy to sim/gobs/sweeps/kp04.cfg
index 9b089f0..716263c 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/sweeps/kp04.cfg
@@ -1,25 +1,31 @@
-### Parameters for GOBS Simulator run
+### Kademlia vs. PAST 04
+
+output = kp04.eps
+step = mids
+
+### General parameters:
-## General parameters...
# Bit-length of addresses:
-B = 16
-# Number of servers:
-nodes = 32
+B = 32
# Number of files:
-files = 10000
+files = 3000
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+# Number of servers:
+minNodes = 10
+maxNodes = 1000
+
+### Choose a PlacementScheme implementation:
# PlacementScheme = Kademlia
PlacementScheme = Nearest
-### Choose a NodeScheme implementation
+### Choose a NodeScheme implementation:
-# NodeScheme = RandomNodes
-NodeScheme = SimpleNodes
+NodeScheme = RandomNodes
+# NodeScheme = SimpleNodes
### Choose one of the following FileFactory sections:
@@ -30,9 +36,9 @@ filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -51,3 +57,16 @@ filewidth = 1
#filesmallmax = 20
# Min size of small files:
#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/sweeps/nodes.cfg b/sim/gobs/sweeps/nodes.cfg
index d094f3b..408d7ef 100644
--- a/sim/gobs/sweeps/nodes.cfg
+++ b/sim/gobs/sweeps/nodes.cfg
@@ -1,3 +1,3 @@
minNodes = 10
-maxNodes = 100
+maxNodes = 10
diff --git a/sim/gobs/wiki/dc03kp01.png b/sim/gobs/wiki/dc03kp01.png
new file mode 100644
index 0000000..fe5eb78
Binary files /dev/null and b/sim/gobs/wiki/dc03kp01.png differ
diff --git a/sim/gobs/params.cfg b/sim/gobs/wiki/kp01.cfg
similarity index 56%
copy from sim/gobs/params.cfg
copy to sim/gobs/wiki/kp01.cfg
index 9b089f0..87f72c3 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/wiki/kp01.cfg
@@ -1,22 +1,27 @@
-### Parameters for GOBS Simulator run
+### Kademlia vs. PAST 01
+
+output = kp01.eps
+
+### General parameters:
-## General parameters...
# Bit-length of addresses:
-B = 16
-# Number of servers:
-nodes = 32
+B = 32
# Number of files:
-files = 10000
+files = 3000
# Number of faults:
faults = 1
-### Choose a PlacementScheme implementation
+# Number of servers:
+minNodes = 10
+maxNodes = 100
+
+### Choose a PlacementScheme implementation:
# PlacementScheme = Kademlia
PlacementScheme = Nearest
-### Choose a NodeScheme implementation
+### Choose a NodeScheme implementation:
# NodeScheme = RandomNodes
NodeScheme = SimpleNodes
@@ -30,9 +35,9 @@ filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 1
+filereplicas = 3
# Number of objects per file:
-filewidth = 1
+filewidth = 10
# FileFactory implementation TraceFiles
#FileFactory = TraceFiles
@@ -51,3 +56,16 @@ filewidth = 1
#filesmallmax = 20
# Min size of small files:
#filesmallmin = 0
+
+### Simulator output configuration
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
+# Print file information (true/false)
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/wiki/kp01.png b/sim/gobs/wiki/kp01.png
new file mode 100644
index 0000000..ed8515b
Binary files /dev/null and b/sim/gobs/wiki/kp01.png differ
diff --git a/sim/gobs/wiki/kp02.png b/sim/gobs/wiki/kp02.png
new file mode 100644
index 0000000..55412b6
Binary files /dev/null and b/sim/gobs/wiki/kp02.png differ
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-69-gc8f14d3
by noreply@mcs.anl.gov 18 Aug '09
by noreply@mcs.anl.gov 18 Aug '09
18 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via c8f14d3064e343d526eb94b82b1c892e24e4846e (commit)
via 96088c7f968bdb8ee2f49ba56c5d8afec2b61975 (commit)
via 9b126c50c2d552215479d2d6ffc0d45c8a01966d (commit)
via 2081e5fe9b86874e22996d3e1255237f5626b0b8 (commit)
via 1a4e1f7e8622ea6bab62037f16f4855e9ec98439 (commit)
from 17142f431fa29d9f658584e6bfc606108a5457fd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit c8f14d3064e343d526eb94b82b1c892e24e4846e
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 18 17:05:52 2009 -0500
Reordered directories, added experiments.
commit 96088c7f968bdb8ee2f49ba56c5d8afec2b61975
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 17 16:56:35 2009 -0500
Significant bug fix to PlacementScheme.allocateFile().
commit 9b126c50c2d552215479d2d6ffc0d45c8a01966d
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 17 16:28:17 2009 -0500
Adding new NodeScheme: SimpleNodes.
commit 2081e5fe9b86874e22996d3e1255237f5626b0b8
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 17 14:48:55 2009 -0500
More easily reusable sweep framework.
New experiment counts the number of servers affected by the fault.
Move much sweep functionality into Sweep superclass.
commit 1a4e1f7e8622ea6bab62037f16f4855e9ec98439
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Aug 14 11:09:14 2009 -0500
Improved stats collection.
Also contains settings for first image posted to wiki.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 40 ++-
sim/gobs/gobs.cfg | 10 +-
sim/gobs/gobs/Addressable.java | 126 ----------
sim/gobs/gobs/Bits.java | 119 ---------
sim/gobs/gobs/EnhancedLinkedHashSet.java | 46 ----
sim/gobs/gobs/File.java | 74 ------
sim/gobs/gobs/FileFactory.java | 11 -
sim/gobs/gobs/Kademlia.java | 99 --------
sim/gobs/gobs/LayoutScheme.java | 24 --
sim/gobs/gobs/LineReader.java | 105 --------
sim/gobs/gobs/MapSorter.java | 53 ----
sim/gobs/gobs/Nearest.java | 125 ----------
sim/gobs/gobs/Node.java | 90 -------
sim/gobs/gobs/NodeScheme.java | 26 --
sim/gobs/gobs/Obj.java | 40 ---
sim/gobs/gobs/PlacementScheme.java | 76 ------
sim/gobs/gobs/PlainFiles.java | 31 ---
sim/gobs/gobs/Primary.java | 22 --
sim/gobs/gobs/RandomFiles.java | 58 -----
sim/gobs/gobs/RandomNodes.java | 38 ---
sim/gobs/gobs/Secondary.java | 26 --
sim/gobs/gobs/Simulator.java | 281 ---------------------
sim/gobs/gobs/Statistics.java | 15 --
sim/gobs/gobs/Tools.java | 53 ----
sim/gobs/gobs/TraceFiles.java | 74 ------
sim/gobs/gobs/UniformNodes.java | 149 -----------
sim/gobs/gobs/plot/AsciiPlot.java | 54 ++++
sim/gobs/gobs/plot/MultiplePlot.java | 124 ++++++++++
sim/gobs/gobs/plot/Plot.java | 12 +
sim/gobs/gobs/plot/SimplePlot.java | 124 ++++++++++
sim/gobs/gobs/sim/Addressable.java | 152 ++++++++++++
sim/gobs/gobs/sim/EnhancedLinkedHashSet.java | 46 ++++
sim/gobs/gobs/sim/File.java | 74 ++++++
sim/gobs/gobs/sim/FileFactory.java | 11 +
sim/gobs/gobs/sim/Kademlia.java | 117 +++++++++
sim/gobs/gobs/sim/LayoutScheme.java | 24 ++
sim/gobs/gobs/sim/Nearest.java | 69 ++++++
sim/gobs/gobs/sim/Node.java | 103 ++++++++
sim/gobs/gobs/sim/NodeScheme.java | 26 ++
sim/gobs/gobs/sim/Obj.java | 40 +++
sim/gobs/gobs/sim/PlacementScheme.java | 141 +++++++++++
sim/gobs/gobs/sim/PlainFiles.java | 31 +++
sim/gobs/gobs/sim/Primary.java | 22 ++
sim/gobs/gobs/sim/RandomFiles.java | 60 +++++
sim/gobs/gobs/sim/RandomNodes.java | 40 +++
sim/gobs/gobs/sim/Secondary.java | 26 ++
sim/gobs/gobs/sim/SimpleNodes.java | 44 ++++
sim/gobs/gobs/sim/Simulator.java | 341 ++++++++++++++++++++++++++
sim/gobs/gobs/sim/Statistics.java | 19 ++
sim/gobs/gobs/sim/TraceFiles.java | 76 ++++++
sim/gobs/gobs/sim/UniformNodes.java | 149 +++++++++++
sim/gobs/gobs/sweep/Affected01.java | 38 +++
sim/gobs/gobs/sweep/Balance01.java | 46 ++++
sim/gobs/gobs/sweep/Balance02.java | 42 ++++
sim/gobs/gobs/sweep/Decluster01.java | 37 +++
sim/gobs/gobs/sweep/Decluster02.java | 58 +++++
sim/gobs/gobs/sweep/Sweep.java | 168 +++++++++++++
sim/gobs/gobs/util/Bits.java | 119 +++++++++
sim/gobs/gobs/util/LineReader.java | 105 ++++++++
sim/gobs/gobs/util/MapSorter.java | 53 ++++
sim/gobs/gobs/util/Tools.java | 53 ++++
sim/gobs/manifest.mf | 2 +-
sim/gobs/params.cfg | 50 +++--
sim/gobs/plot/SimplePlot.java | 109 --------
sim/gobs/sweep/Decluster01.cfg | 5 -
sim/gobs/sweep/Decluster01.java | 110 ---------
sim/gobs/sweep/Sweep.java | 22 --
sim/gobs/sweeps/Decluster01.cfg | 3 +
sim/gobs/sweeps/nodes.cfg | 3 +
69 files changed, 2716 insertions(+), 2043 deletions(-)
delete mode 100644 sim/gobs/gobs/Addressable.java
delete mode 100644 sim/gobs/gobs/Bits.java
delete mode 100644 sim/gobs/gobs/EnhancedLinkedHashSet.java
delete mode 100644 sim/gobs/gobs/File.java
delete mode 100644 sim/gobs/gobs/FileFactory.java
delete mode 100644 sim/gobs/gobs/Kademlia.java
delete mode 100644 sim/gobs/gobs/LayoutScheme.java
delete mode 100644 sim/gobs/gobs/LineReader.java
delete mode 100644 sim/gobs/gobs/MapSorter.java
delete mode 100644 sim/gobs/gobs/Nearest.java
delete mode 100644 sim/gobs/gobs/Node.java
delete mode 100644 sim/gobs/gobs/NodeScheme.java
delete mode 100644 sim/gobs/gobs/Obj.java
delete mode 100644 sim/gobs/gobs/PlacementScheme.java
delete mode 100644 sim/gobs/gobs/PlainFiles.java
delete mode 100644 sim/gobs/gobs/Primary.java
delete mode 100644 sim/gobs/gobs/RandomFiles.java
delete mode 100644 sim/gobs/gobs/RandomNodes.java
delete mode 100644 sim/gobs/gobs/Secondary.java
delete mode 100644 sim/gobs/gobs/Simulator.java
delete mode 100644 sim/gobs/gobs/Statistics.java
delete mode 100644 sim/gobs/gobs/Tools.java
delete mode 100644 sim/gobs/gobs/TraceFiles.java
delete mode 100644 sim/gobs/gobs/UniformNodes.java
create mode 100644 sim/gobs/gobs/plot/AsciiPlot.java
create mode 100644 sim/gobs/gobs/plot/MultiplePlot.java
create mode 100644 sim/gobs/gobs/plot/Plot.java
create mode 100644 sim/gobs/gobs/plot/SimplePlot.java
create mode 100644 sim/gobs/gobs/sim/Addressable.java
create mode 100644 sim/gobs/gobs/sim/EnhancedLinkedHashSet.java
create mode 100644 sim/gobs/gobs/sim/File.java
create mode 100644 sim/gobs/gobs/sim/FileFactory.java
create mode 100644 sim/gobs/gobs/sim/Kademlia.java
create mode 100644 sim/gobs/gobs/sim/LayoutScheme.java
create mode 100644 sim/gobs/gobs/sim/Nearest.java
create mode 100644 sim/gobs/gobs/sim/Node.java
create mode 100644 sim/gobs/gobs/sim/NodeScheme.java
create mode 100644 sim/gobs/gobs/sim/Obj.java
create mode 100644 sim/gobs/gobs/sim/PlacementScheme.java
create mode 100644 sim/gobs/gobs/sim/PlainFiles.java
create mode 100644 sim/gobs/gobs/sim/Primary.java
create mode 100644 sim/gobs/gobs/sim/RandomFiles.java
create mode 100644 sim/gobs/gobs/sim/RandomNodes.java
create mode 100644 sim/gobs/gobs/sim/Secondary.java
create mode 100644 sim/gobs/gobs/sim/SimpleNodes.java
create mode 100644 sim/gobs/gobs/sim/Simulator.java
create mode 100644 sim/gobs/gobs/sim/Statistics.java
create mode 100644 sim/gobs/gobs/sim/TraceFiles.java
create mode 100644 sim/gobs/gobs/sim/UniformNodes.java
create mode 100644 sim/gobs/gobs/sweep/Affected01.java
create mode 100644 sim/gobs/gobs/sweep/Balance01.java
create mode 100644 sim/gobs/gobs/sweep/Balance02.java
create mode 100644 sim/gobs/gobs/sweep/Decluster01.java
create mode 100644 sim/gobs/gobs/sweep/Decluster02.java
create mode 100644 sim/gobs/gobs/sweep/Sweep.java
create mode 100644 sim/gobs/gobs/util/Bits.java
create mode 100644 sim/gobs/gobs/util/LineReader.java
create mode 100644 sim/gobs/gobs/util/MapSorter.java
create mode 100644 sim/gobs/gobs/util/Tools.java
delete mode 100644 sim/gobs/plot/SimplePlot.java
delete mode 100644 sim/gobs/sweep/Decluster01.cfg
delete mode 100644 sim/gobs/sweep/Decluster01.java
delete mode 100644 sim/gobs/sweep/Sweep.java
create mode 100644 sim/gobs/sweeps/Decluster01.cfg
create mode 100644 sim/gobs/sweeps/nodes.cfg
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index 4d6c77f..e51e214 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -17,14 +17,15 @@
<jar destfile="GOBS.jar"
manifest="manifest.mf">
<zipfileset dir="."
- includes="gobs/*.class" />
+ includes="gobs/*/*.class" />
</jar>
</target>
- <target name="compile" depends="compile_gobs,compile_plot,compile_sweep"/>
+ <target name="compile" depends="compile_sim,compile_sweep"/>
- <target name="compile_gobs">
- <javac srcdir="gobs"
+ <target name="compile_sim"
+ depends="compile_plot,compile_util">
+ <javac srcdir="gobs/sim"
classpath="."
listfiles="${lf}"
debug="true"
@@ -33,8 +34,9 @@
</javac>
</target>
- <target name="compile_plot">
- <javac srcdir="plot"
+ <target name="compile_plot"
+ depends="compile_util">
+ <javac srcdir="gobs/plot"
classpath="${prereqs}"
listfiles="${lf}"
debug="true"
@@ -44,8 +46,9 @@
</javac>
</target>
- <target name="compile_sweep">
- <javac srcdir="sweep"
+ <target name="compile_sweep"
+ depends="compile_util">
+ <javac srcdir="gobs/sweep"
classpath="${prereqs}"
listfiles="${lf}"
debug="true"
@@ -54,10 +57,20 @@
</javac>
</target>
+ <target name="compile_util">
+ <javac srcdir="gobs/util"
+ classpath="."
+ listfiles="${lf}"
+ debug="true"
+ debuglevel="source,lines,vars">
+ <compilerarg value="-Xlint"/>
+ </javac>
+ </target>
+
<target name="doc">
<javadoc destdir="docs"
author="true"
- classpath="."
+ classpath="${prereqs}"
breakiterator="yes"
private="true">
<fileset dir="."
@@ -70,13 +83,16 @@
<fileset dir=".">
<filename name="GOBS.jar" />
</fileset>
- <fileset dir="gobs">
+ <fileset dir="gobs/sim">
+ <filename name="*.class" />
+ </fileset>
+ <fileset dir="gobs/plot">
<filename name="*.class" />
</fileset>
- <fileset dir="plot">
+ <fileset dir="gobs/sweep">
<filename name="*.class" />
</fileset>
- <fileset dir="sweep">
+ <fileset dir="gobs/util">
<filename name="*.class" />
</fileset>
</delete>
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
index 8aed049..a1a41f7 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/gobs.cfg
@@ -2,10 +2,12 @@
# Simulator configuration
# Print nodes and objects at startup (true/false)
-printInitialNodes = true
+printInitialNodes = false
# Print nodes and objects after each rebuild (true/false)
-printNodes = true
+printNodes = false
# Print object tranfers during rebuilds (true/false)
-printRebuilds = true
+printRebuilds = false
# Print file information (true/false)
-printFiles = true
+printFiles = false
+# Print load change statistics (true/false)
+printLoadDiffs = false
diff --git a/sim/gobs/gobs/Addressable.java b/sim/gobs/gobs/Addressable.java
deleted file mode 100644
index 6f873a9..0000000
--- a/sim/gobs/gobs/Addressable.java
+++ /dev/null
@@ -1,126 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-
-/**
- * Superclass for things with an address: objects and nodes.
- * */
-
-class Addressable
-{
- int B;
- BigInteger id;
-
- // Cached result of bitArray():
- int[] array = null;
-
- Addressable(int B, BigInteger id)
- {
- this.B = B;
- this.id = id;
- }
-
- /**
- Does this Addressable start with the given bit prefix?
- */
- boolean prefix(int[] p)
- {
- int[] A = bitArray();
- for (int i = 0; i < p.length; i++)
- {
- if (p[i] != A[i])
- return false;
- }
- return true;
- }
-
- /**
- Obtain an array of bits for this Addressable.
- */
- int[] bitArray()
- {
- if (array != null)
- return array;
-
- int[] result = bitArray(B, id);
- array = result;
- return result;
- }
-
- /**
- Obtain the array of bits for the given address.
- */
- static int[] bitArray(int B, BigInteger i)
- {
- int[] result = new int[B];
-
- BigInteger two = new BigInteger("2");
-
- for (int k = 0; k < B; k++)
- {
- if (i.shiftRight(k).mod(two).equals(BigInteger.ZERO))
- result[B-k-1] = 0;
- else
- result[B-k-1] = 1;
- }
-
- return result;
- }
-
- /**
- Convert the Addressable to a String of 0s and 1s.
- */
- String bitString()
- {
- return bitString(B, id);
- }
-
- /**
- Convert the given address to a String of 0s and 1s.
- */
- static String bitString(int B, BigInteger i)
- {
- return arrayString(bitArray(B, i));
- }
-
- /**
- Convert the given bits to a String.
- */
- static String arrayString(int[] bits)
- {
- StringBuilder buffer = new StringBuilder();
- for (int i = 0; i < bits.length; i++)
- {
- if (bits[i] == 0)
- buffer.append("0");
- else
- buffer.append("1");
- }
- return buffer.toString();
- }
-
- public int hashCode()
- {
- return id.hashCode();
- }
-
- public boolean equals(Object other)
- {
- if (other instanceof Addressable)
- {
- if (((Addressable) other).id.equals(id))
- return true;
- }
- return false;
- }
-
- /*
- Debugging only.
-
- public static void main(String[] args)
- {
- // System.out.println(bitString(10, ));
- }
- */
-}
diff --git a/sim/gobs/gobs/Bits.java b/sim/gobs/gobs/Bits.java
deleted file mode 100644
index b3c0610..0000000
--- a/sim/gobs/gobs/Bits.java
+++ /dev/null
@@ -1,119 +0,0 @@
-
-package gobs;
-
-import java.util.*;
-
-/**
- * Provides random bits, statically.
- * Kills VM exit code 2 on misuse.
- * */
-
-public class Bits
-{
- public static Random rng = null;
- static boolean locked = false;
- static boolean ready = false;
-
- /** If not locked, seed the generator with the clock. */
- public static void init()
- {
- init(System.currentTimeMillis());
- }
-
- /**
- If not locked, seed the generator
- @param s The seed.
- */
- public static void init(long s)
- {
- if (! locked)
- {
- // System.out.println("Seeding RNG...");
- rng = new Random(s);
- ready = true;
- }
- }
-
- /**
- Lock the generator to prevent seeding
- */
- public static void lock()
- {
- locked = true;
- }
-
- /**
- Unlock the generator
- */
- public static void unlock()
- {
- locked = false;
- }
-
- public static double nextDouble()
- {
- if (! ready)
- {
- System.err.println("Bits not ready!");
- System.exit(2);
- }
- return rng.nextDouble();
- }
-
- public static double nextDouble(double d)
- {
- return rng.nextDouble() * d;
- }
-
- public static int nextInt()
- {
- if (! ready)
- {
- System.err.println("Bits not ready!");
- System.exit(2);
- }
- return rng.nextInt();
- }
-
- /**
- Return a integer in [0..t).
- */
- public static int nextInt(int t)
- {
- double d = nextDouble();
- int i = (new Double(d * t)).intValue();
- return i;
- }
-
- public static boolean nextBoolean()
- {
- if (! ready)
- {
- System.err.println("Bits not ready!");
- System.exit(2);
- }
- return rng.nextBoolean();
- }
-
- public static long nextLong()
- {
- if (! ready)
- {
- System.err.println("Bits not ready!");
- System.exit(2);
- }
- return rng.nextLong();
- }
-
- public static long nextLong(long t)
- {
- double d = nextDouble();
- long i = (new Double(d * t)).longValue();
- return i;
- }
-
- public static void nextBytes(byte[] bytes)
- {
- rng.nextBytes(bytes);
- }
-}
diff --git a/sim/gobs/gobs/EnhancedLinkedHashSet.java b/sim/gobs/gobs/EnhancedLinkedHashSet.java
deleted file mode 100644
index 2c491d8..0000000
--- a/sim/gobs/gobs/EnhancedLinkedHashSet.java
+++ /dev/null
@@ -1,46 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-class EnhancedLinkedHashSet<T>
- extends LinkedHashSet<T>
-{
- private static final long serialVersionUID = 1;
-
- public EnhancedLinkedHashSet()
- {
- super();
- }
-
- boolean containsAny(Collection<T> c)
- {
- for (T thing : c)
- {
- if (contains(thing))
- return true;
- }
- return false;
- }
-
- /**
- Debugging only.
- */
- public static void main(String[] args)
- {
- EnhancedLinkedHashSet<Object> set = new EnhancedLinkedHashSet<Object>();
-
- /*
- String hello = "Hello";
- set.add(hello);
- if (set.contains("Hello"))
- System.out.println("true");
- */
-
- Obj obj = new Obj(4, new BigInteger("3"), 0, 0);
- set.add(obj);
- if (set.contains(new Obj(5, new BigInteger("3"), 1, 1)))
- System.out.println("true");
- }
-}
diff --git a/sim/gobs/gobs/File.java b/sim/gobs/gobs/File.java
deleted file mode 100644
index ebd5507..0000000
--- a/sim/gobs/gobs/File.java
+++ /dev/null
@@ -1,74 +0,0 @@
-
-package gobs;
-
-import java.util.Collection;
-
-import static java.lang.Math.*;
-
-/**
- * Simulated file.
- * */
-
-class File
-{
- int size;
- int strip;
- int width;
- int replicas;
- int id;
-
- static int unique = 0;
-
- Collection<Obj> objects;
-
- File(int size, int strip, int width, int replicas)
- {
- this.size = size;
- this.strip = strip;
- this.width = width;
- this.replicas = replicas;
-
- // System.out.println("FILE: " + size + " " + strip + " " + width + " " + replicas);
-
- id = unique++;
- }
-
- void link(Collection<Obj> objects)
- {
- this.objects = objects;
- }
-
- /**
- What is the size of the ith object for this File?
- */
- int objectSize(int i)
- {
- int strips = round((float)
- ceil(((float) size) / ((float) strip)));
- int extras = strips % width;
- if (i < extras)
- return (1 + strips/width)*strip;
- return (strips/width)*strip;
- }
-
- public String toString()
- {
- StringBuilder sb =
- new StringBuilder(100+objects.size()*(Simulator.current.B+10));
- sb.append("file[").append(id).append("]: ");
- for (Obj object : objects)
- sb.append(object).append(" ");
- return sb.toString();
- }
-
- /**
- Debugging only.
- */
- public static void main(String[] args)
- {
- File file = new File(0, 3, 3, 1);
- System.out.println(file.objectSize(0));
- System.out.println(file.objectSize(1));
- System.out.println(file.objectSize(2));
- }
-}
diff --git a/sim/gobs/gobs/FileFactory.java b/sim/gobs/gobs/FileFactory.java
deleted file mode 100644
index 0963aed..0000000
--- a/sim/gobs/gobs/FileFactory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-
-package gobs;
-
-/**
- * File distribution factory.
- * */
-
-interface FileFactory
-{
- File get();
-}
diff --git a/sim/gobs/gobs/Kademlia.java b/sim/gobs/gobs/Kademlia.java
deleted file mode 100644
index 5c660c4..0000000
--- a/sim/gobs/gobs/Kademlia.java
+++ /dev/null
@@ -1,99 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Places objects on the nearest node using the XOR distance metric.
- * */
-
-class Kademlia
- extends PlacementScheme
-{
- Kademlia(int B)
- {
- super(B);
- }
-
- public void place(Collection<Obj> objects, List<Node> nodes)
- {
- System.out.println("placing: " + objects.size());
- for (Obj object : objects)
- placeObject(object, nodes);
- }
-
- /**
- Allocate replicas for object and place all on nodes.
- */
- void placeObject(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Primary primary = object.toPrimary();
- closest.remove(0).add(primary);
- for (Node node : closest)
- {
- node.add(object.toSecondary(primary));
- }
- }
-
- /**
- Place this object to rebuild.
- */
- void rebuild(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Secondary secondary;
- Node source = null, destination = null;
- if (object instanceof Primary)
- {
- Primary primary = object.toPrimary();
- source = closest.remove(0);
- secondary = (Secondary) source.remove(primary.id);
- source.add(primary);
- }
- else
- {
- source = closest.remove(0);
- Primary primary = (Primary) source.get(object.id);
- secondary = primary.toSecondary(primary);
- }
-
- for (Node node : closest)
- {
- if (! node.contains(secondary.id))
- {
- destination = node;
- destination.add(secondary);
- break;
- }
- }
- System.out.println("rebuild: " + object.toString() + ": " +
- source.bitString() + " -> " +
- destination.bitString());
- }
-
- List<Node> closestNodes(Obj object, List<Node> nodes)
- {
- List<Node> closest = new ArrayList<Node>(object.replicas*2);
-
- for (int i = 0; i < object.replicas; i++)
- {
- BigInteger closestDiff = null;
- Node closestNode = null;
- for (Node node : nodes)
- {
- BigInteger d = node.id.xor(object.id);
- if ((closestDiff == null ||
- closestDiff.compareTo(d) > 0) &&
- ! closest.contains(node))
- {
- closestNode = node;
- closestDiff = d;
- }
- }
- closest.add(closestNode);
- }
- return closest;
- }
-}
diff --git a/sim/gobs/gobs/LayoutScheme.java b/sim/gobs/gobs/LayoutScheme.java
deleted file mode 100644
index 4587278..0000000
--- a/sim/gobs/gobs/LayoutScheme.java
+++ /dev/null
@@ -1,24 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.List;
-
-/**
- * LayoutSchemes generate object ids within a file.
- * */
-
-abstract class LayoutScheme
-{
- int B;
- BigInteger M;
-
- LayoutScheme(int B)
- {
- this.B = B;
- BigInteger two = new BigInteger("2");
- M = two.pow(B);
- }
-
- abstract List<Obj> generate(int fileSize, int objSize);
-}
diff --git a/sim/gobs/gobs/LineReader.java b/sim/gobs/gobs/LineReader.java
deleted file mode 100644
index f0e94a1..0000000
--- a/sim/gobs/gobs/LineReader.java
+++ /dev/null
@@ -1,105 +0,0 @@
-
-package gobs;
-
-import java.util.*;
-
-public class LineReader
-{
- LineReader()
- {}
-
- public static List<String> read(java.io.File file)
- throws java.io.FileNotFoundException
- {
- java.io.BufferedReader reader =
- new java.io.BufferedReader(new java.io.FileReader(file));
- return read(reader);
- }
-
- public static List<String> read(String s)
- {
- java.io.BufferedReader reader =
- new java.io.BufferedReader(new java.io.StringReader(s));
- return read(reader);
- }
-
- public static List<String> read(java.io.BufferedReader reader)
- {
- List<String> result = new ArrayList<String>();
- try
- {
- String prevline = "";
- String line = "";
- while ((line = reader.readLine()) != null)
- {
- int hash = line.indexOf("#");
- if (hash >= 0)
- line = line.substring(0,hash);
- line = spaces(line);
- line = (prevline + " " + line).trim();
- if (line.endsWith("\\"))
- {
- line = line.substring(0, line.length()-2);
- prevline = line;
- continue;
- }
- else
- {
- prevline = "";
- line = line.trim();
- if (line.length() > 0)
- result.add(line);
- }
- }
- }
- catch (java.io.IOException e)
- {
- System.out.println("LineReader: I/O problem.");
- return null;
- }
- return result;
- }
-
- public static String spaces(String line)
- {
- String result = "";
- for (int i = 0; i < line.length(); i++)
- {
- if (line.charAt(i) == '=' &&
- line.charAt(i+1) != '=' &&
- line.charAt(i-1) != '=')
- {
- result += " = ";
- }
- else
- result += line.substring(i,i+1);
- }
- return result;
- }
-
- public static String[] tokenize(String line)
- {
- if (line == null)
- return null;
- List<String> words = new ArrayList<String>();
- String[] ws = line.split("\\s");
- for (int i = 0; i < ws.length; i++)
- if (ws[i].length() > 0)
- words.add(ws[i]);
- String[] result = new String[words.size()];
- for (int i = 0; i < words.size(); i++)
- result[i] = words.get(i);
- return result;
- }
-
- /*
- public static List<String> list(String line)
- {
- List<String> result = new ArrayList<String>();
- String[] tokens = tokenize(line);
- for (int i = 0; i < tokens.length; i++)
- result.add(tokens[i]);
- return result;
- }
- */
-}
diff --git a/sim/gobs/gobs/MapSorter.java b/sim/gobs/gobs/MapSorter.java
deleted file mode 100644
index 190c7eb..0000000
--- a/sim/gobs/gobs/MapSorter.java
+++ /dev/null
@@ -1,53 +0,0 @@
-
-package gobs;
-
-import java.util.*;
-
-class MapSorter<T>
-{
- LinkedHashMap<T,Integer> sort(Map<T,Integer> input)
- {
- LinkedHashMap<T,Integer> result = new LinkedHashMap<T,Integer>();
-
- while (! input.isEmpty())
- {
- int minValue = Integer.MAX_VALUE;
- T minThing = null;
- for (T thing : input.keySet())
- {
- Integer i = input.get(thing);
- if (i < minValue)
- {
- minValue = i;
- minThing = thing;
- }
- }
- input.remove(minThing);
- result.put(minThing, new Integer(minValue));
- }
-
- return result;
- }
-}
-
- /* Debugging sortMap():
-
- public static void main(String[] args)
- {
- int B = 4;
-
- Map<Node,Integer> table = new Hashtable<Node,Integer>();
-
- table.put(new Node(B, new BigInteger("3")), 2);
- table.put(new Node(B, new BigInteger("5")), 1);
- table.put(new Node(B, new BigInteger("8")), 4);
- table.put(new Node(B, new BigInteger("3")), 3);
-
- Map<Node,Integer> sorted = (Map<Node,Integer>) sortMap(table);
- for (Node node : sorted.keySet())
- {
- System.out.println(node.toString() + " " + sorted.get(node));
- }
- }
- */
-
diff --git a/sim/gobs/gobs/Nearest.java b/sim/gobs/gobs/Nearest.java
deleted file mode 100644
index 2f24966..0000000
--- a/sim/gobs/gobs/Nearest.java
+++ /dev/null
@@ -1,125 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Places objects on the nearest node using the XOR distance metric.
- * */
-
-class Nearest
- extends PlacementScheme
-{
- Nearest(int B)
- {
- super(B);
- }
-
- public void place(Collection<Obj> objects, List<Node> nodes)
- {
- System.out.println("placing: " + objects.size());
- for (Obj object : objects)
- placeObject(object, nodes);
- }
-
- /**
- Allocate replicas for object and place all on nodes.
- */
- void placeObject(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Primary primary = object.toPrimary();
- closest.remove(0).add(primary);
- for (Node node : closest)
- {
- node.add(object.toSecondary(primary));
- }
- }
-
- /**
- Place this object to rebuild.
- */
- void rebuild(Obj object, List<Node> nodes)
- {
- List<Node> closest = closestNodes(object, nodes);
- Secondary secondary;
- Node source = null, destination = null;
- if (object instanceof Primary)
- {
- Primary primary = object.toPrimary();
- source = closest.remove(0);
- secondary = (Secondary) source.remove(primary.id);
- source.add(primary);
- }
- else
- {
- source = closest.remove(0);
- Primary primary = (Primary) source.get(object.id);
- secondary = primary.toSecondary(primary);
- }
-
- if (secondary == null)
- {
- System.out.println("rebuild: lost: " + object.bitString());
- return;
- }
-
- for (Node node : closest)
- {
- if (! node.contains(secondary.id))
- {
- destination = node;
- break;
- }
- }
-
- destination.add(secondary);
-
- if (destination == null)
- {
- if (Simulator.current.properties.getProperty("printRebuilds")
- .equals("true"))
- System.out.println("rebuild: " + object.toString() + ": " +
- source.bitString() + " ok ");
- }
- else
- {
- if (Simulator.current.properties.getProperty("printRebuilds")
- .equals("true"))
- System.out.println("rebuild: " + object.toString() + ": " +
- source.bitString() + " -> " +
- destination.bitString());
- }
- }
-
- List<Node> closestNodes(Obj object, List<Node> nodes)
- {
- List<Node> closest = new ArrayList<Node>(object.replicas*2);
-
- for (int i = 0; i < object.replicas; i++)
- {
- BigInteger closestDiff = null;
- Node closestNode = null;
- for (Node node : nodes)
- {
- BigInteger d = node.id.subtract(object.id).abs();
- if ((closestDiff == null ||
- closestDiff.compareTo(d) > 0) &&
- ! closest.contains(node))
- {
- closestNode = node;
- closestDiff = d;
- }
- }
- closest.add(closestNode);
- }
-
- if (closest.size() != object.replicas)
- {
- System.out.println("not enough closest nodes!");
- }
-
- return closest;
- }
-}
diff --git a/sim/gobs/gobs/Node.java b/sim/gobs/gobs/Node.java
deleted file mode 100644
index 6ab4896..0000000
--- a/sim/gobs/gobs/Node.java
+++ /dev/null
@@ -1,90 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Simulates an object store.
- * */
-
-class Node
- extends Addressable
-{
- List<Obj> objects;
-
- Node(int B, BigInteger id)
- {
- super(B, id);
- objects = new ArrayList<Obj>();
- }
-
- void add(Obj object)
- {
- objects.add(object);
- }
-
- /**
- @return An Obj with this id.
- */
- Obj get(BigInteger id)
- {
- for (Iterator<Obj> it = objects.iterator(); it.hasNext(); )
- {
- Obj object = it.next();
- if (object.id.equals(id))
- {
- return object;
- }
- }
- return null;
- }
-
- /**
- Remove and return an Obj with this id.
- */
- Obj remove(BigInteger id)
- {
- for (Iterator<Obj> it = objects.iterator(); it.hasNext(); )
- {
- Obj object = it.next();
- if (object.id.equals(id))
- {
- it.remove();
- return object;
- }
- }
- return null;
- }
-
- /**
- @return true iff this node has an object with the given id.
- */
- boolean contains(BigInteger id)
- {
- for (Obj object : objects)
- {
- if (object.id.equals(id))
- return true;
- }
- return false;
- }
-
- String loadReport()
- {
- return bitString() + " " + objects.size();
- }
-
- public String toString()
- {
- StringBuffer result = new StringBuffer(objects.size()*10);
- result.append(bitString());
- result.append(":\t");
- for (Obj object : objects)
- {
- result.append(object.toString()).append(" ");
- }
- result.append("\n");
- return result.toString();
- }
-}
diff --git a/sim/gobs/gobs/NodeScheme.java b/sim/gobs/gobs/NodeScheme.java
deleted file mode 100644
index 55de9fd..0000000
--- a/sim/gobs/gobs/NodeScheme.java
+++ /dev/null
@@ -1,26 +0,0 @@
-
-package gobs;
-
-import java.util.*;
-
-/**
- * Generates node addresses.
- * */
-
-abstract class NodeScheme
-{
- int B;
- long M;
-
- NodeScheme(int B)
- {
- this.B = B;
- M = Math.round(Math.pow(2,B));
- }
-
- /**
- Generate <tt>count</tt> new nodes and place them in
- <tt>nodes</tt>.
- */
- abstract void generate(int count, List<Node> nodes);
-}
diff --git a/sim/gobs/gobs/Obj.java b/sim/gobs/gobs/Obj.java
deleted file mode 100644
index 0ca2542..0000000
--- a/sim/gobs/gobs/Obj.java
+++ /dev/null
@@ -1,40 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-
-/**
- * Simulates a single object.
- * Identifier "Object" is used by Java.
- * */
-
-class Obj
- extends Addressable
-{
- /** Simulated size in bytes. */
- int size;
- /** Number of replicas, including primary. */
- int replicas;
-
- Obj(int B, BigInteger id, int size, int replicas)
- {
- super(B, id);
- this.size = size;
- this.replicas = replicas;
- }
-
- Primary toPrimary()
- {
- return new Primary(B, id, size, replicas);
- }
-
- Secondary toSecondary(Primary primary)
- {
- return new Secondary(B, id, size, replicas, primary);
- }
-
- public String toString()
- {
- return bitString() + "(" + size + ")";
- }
-}
diff --git a/sim/gobs/gobs/PlacementScheme.java b/sim/gobs/gobs/PlacementScheme.java
deleted file mode 100644
index 656a980..0000000
--- a/sim/gobs/gobs/PlacementScheme.java
+++ /dev/null
@@ -1,76 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Interface to place a list of objects on a set of nodes.
- * */
-
-abstract class PlacementScheme
-{
- int B;
- BigInteger M;
-
- PlacementScheme(int B)
- {
- this.B = B;
-
- BigInteger two = new BigInteger("2");
- M = two.pow(B);
- }
-
- /**
- Generate an object set for a file.
- */
- public Collection<Obj> allocateFile(File file, List<Node> nodes)
- {
- ArrayList<Obj> result = new ArrayList<Obj>(file.width+2);
-
- BigInteger p = randomID();
-
- BigInteger two = new BigInteger("2");
- BigInteger bigWidth = new BigInteger("" + file.width);
- BigInteger bigWidth2 = new BigInteger("2");
- while (bigWidth2.compareTo(bigWidth) < 0)
- {
- bigWidth2 = bigWidth2.multiply(two);
- }
-
- BigInteger s = M.divide(bigWidth2);
-
- int i;
- for (i = 0; i < file.width; i++)
- {
- BigInteger id = p;
- int bytes = file.objectSize(i);
- Obj obj = new Obj(B, id, bytes, file.replicas);
- result.add(obj);
- p = p.add(s);
- }
-
- /*
- for (Obj o : result)
- System.out.println(o);
- */
-
- result.trimToSize();
- return result;
- }
-
- /**
- Place a set of objects.
- */
- abstract void place(Collection<Obj> objects, List<Node> nodes);
-
- /**
- Find a new node to hold this object replica and place it.
- */
- abstract void rebuild(Obj object, List<Node> nodes);
-
- BigInteger randomID()
- {
- return new BigInteger(B, Bits.rng);
- }
-}
diff --git a/sim/gobs/gobs/PlainFiles.java b/sim/gobs/gobs/PlainFiles.java
deleted file mode 100644
index 71ff3c7..0000000
--- a/sim/gobs/gobs/PlainFiles.java
+++ /dev/null
@@ -1,31 +0,0 @@
-
-package gobs;
-
-/**
- * Generates same file repeatedly.
- *
- * Required properties settings: filesize, filestrip,
- * filewidth, filereplicas.
- * */
-
-class PlainFiles
- implements FileFactory
-{
- int size;
- int strip;
- int width;
- int replicas;
-
- PlainFiles(Simulator simulator)
- {
- size = simulator.integer("filesize");
- strip = simulator.integer("filestrip");
- width = simulator.integer("filewidth");
- replicas = simulator.integer("filereplicas");
- }
-
- public File get()
- {
- return new File(size, strip, width, replicas);
- }
-}
diff --git a/sim/gobs/gobs/Primary.java b/sim/gobs/gobs/Primary.java
deleted file mode 100644
index 8ebc9b6..0000000
--- a/sim/gobs/gobs/Primary.java
+++ /dev/null
@@ -1,22 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-
-/**
- * Simulates a single primary object.
- * */
-
-class Primary
- extends Obj
-{
- Primary(int B, BigInteger id, int size, int replicas)
- {
- super(B, id, size, replicas);
- }
-
- public String toString()
- {
- return bitString() + "[P](" + size + ")";
- }
-}
diff --git a/sim/gobs/gobs/RandomFiles.java b/sim/gobs/gobs/RandomFiles.java
deleted file mode 100644
index 4b4394b..0000000
--- a/sim/gobs/gobs/RandomFiles.java
+++ /dev/null
@@ -1,58 +0,0 @@
-
-package gobs;
-
-/**
- * Generates random files.
- *
- * Produces 50/50 mix of two file types: big and small.
- * Big files use strip=4MB.
- * Small files use strip=size.
- * Big files use filewidth.
- * Small files have width=1.
- * Big files use replicas=2.
- * Small files use replicas=3.
- *
- * Required properties settings: filestrip, filebigmax, filebigmin,
- * filesmallmax, filesmallmin.
- * */
-
-class RandomFiles
- implements FileFactory
-{
- int sizebigmax;
- int sizebigmin;
- int sizesmallmax;
- int sizesmallmin;
- int strip;
- int width;
- int replicas;
-
- RandomFiles(Simulator simulator)
- {
- sizebigmax = simulator.integer("filebigmax");
- sizebigmin = simulator.integer("filebigmin");
- sizesmallmax = simulator.integer("filesmallmax");
- sizesmallmin = simulator.integer("filesmallmin");
- strip = simulator.integer("filestrip");
- width = simulator.integer("filewidth");
- }
-
- public File get()
- {
- File result;
- int size;
- if (Bits.nextBoolean())
- {
- // Big file:
- size = Bits.nextInt(sizebigmax-sizebigmin)+sizebigmin;
- result = new File(size, 4*1024*1024, width, 2);
- }
- else
- {
- // Small file:
- size = Bits.nextInt(sizesmallmax-sizesmallmin)+sizesmallmin;
- result = new File(size, size, 1, 3);
- }
- return result;
- }
-}
diff --git a/sim/gobs/gobs/RandomNodes.java b/sim/gobs/gobs/RandomNodes.java
deleted file mode 100644
index bee7960..0000000
--- a/sim/gobs/gobs/RandomNodes.java
+++ /dev/null
@@ -1,38 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Places new nodes randomly without looking at existing nodes.
- * */
-
-class RandomNodes
- extends NodeScheme
-{
- RandomNodes(int B)
- {
- super(B);
- }
-
- public void generate(int count, List<Node> nodes)
- {
- for (int i = 0; i < count; i++)
- {
- BigInteger id;
- Node node;
- int tries = 0;
- do
- {
- if (tries++ >= Simulator.maxTries)
- Tools.bail("Could not assign unique node id!");
-
- id = new BigInteger(B, Bits.rng);
- node = new Node(B, id);
- }
- while (nodes.contains(node));
- nodes.add(node);
- }
- }
-}
diff --git a/sim/gobs/gobs/Secondary.java b/sim/gobs/gobs/Secondary.java
deleted file mode 100644
index 626d05b..0000000
--- a/sim/gobs/gobs/Secondary.java
+++ /dev/null
@@ -1,26 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-
-/**
- * Simulates a single secondary object.
- * */
-
-class Secondary
- extends Obj
-{
- Primary primary;
-
- Secondary(int B, BigInteger id, int size, int replicas,
- Primary primary)
- {
- super(B, id, size, replicas);
- this.primary = primary;
- }
-
- public String toString()
- {
- return bitString() + "[S](" + size + ")";
- }
-}
diff --git a/sim/gobs/gobs/Simulator.java b/sim/gobs/gobs/Simulator.java
deleted file mode 100644
index 4c76689..0000000
--- a/sim/gobs/gobs/Simulator.java
+++ /dev/null
@@ -1,281 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.text.DecimalFormat;
-import java.util.*;
-
-/**
- * <h3> GOBS placement simulator. </h3>
- *
- * Command-line arguments: <br>
- * B: Bit length of addresses <br>
- * nodes: Number of nodes <br>
- * fileCount: Number of files <br>
- * fileSize: Size of each file <br>
- * chunk: Size of a contiguous chunk
- * */
-
-public class Simulator
-{
- int B;
- int N;
-
- int fileCount;
-
- PlacementScheme placer;
- NodeScheme hub;
- FileFactory factory;
-
- /**
- Useful for helpful error messages:
- */
- String reading;
- /**
- Aggregate properties from all input files:
- */
- Properties properties = new Properties();
-
- List<Node> nodes;
- EnhancedLinkedHashSet<Obj> objects =
- new EnhancedLinkedHashSet<Obj>();
- List<File> files = new ArrayList<File>();
-
- static Simulator current;
- static final int maxTries = 10;
-
- DecimalFormat df = new DecimalFormat("0.0");
-
- public Statistics stats = new Statistics();
-
- public Simulator()
- {}
-
- Map<Node,Integer> countObjects(List<Node> nodes)
- {
- Map<Node,Integer> result = new Hashtable<Node,Integer>();
- for (Node node : nodes)
- {
- result.put(node, node.objects.size());
- }
- return result;
- }
-
- void printNodes(List<Node> nodes)
- {
- System.out.println("NODES:");
- for (Node node : nodes)
- System.out.println(node.bitString());
- }
-
- void printNodeObjects(List<Node> nodes)
- {
- System.out.println("NODE_CONTENTS:");
- for (Node node : nodes)
- System.out.println(node);
- }
-
- void printFiles()
- {
- for (File f : files)
- {
- System.out.println(f.toString());
- }
- }
-
- public static void main(String[] args)
- {
- // String layoutName;
- // int B, N, fileCount, fileSize, strip;
-
- Bits.init();
-
- if (args.length < 1)
- Tools.bail("usage: Simulator <file.cfg>*");
-
- current = new Simulator();
- for (String arg : args)
- current.load(arg);
- current.execute();
- }
-
- /**
- Set properties from file.
- */
- public void load(String file)
- {
- try
- {
- java.io.FileInputStream cfg = new java.io.FileInputStream(file);
- properties.load(cfg);
- }
- catch (java.io.IOException e)
- {
- Tools.bail("Could not open properties file!");
- }
- }
-
- /**
- Set properties from memory.
- */
- public void initialize(Properties properties)
- {
- this.properties = properties;
- }
-
- /**
- Allow subordinate classes to obtain properties.
- */
- int integer(String name)
- {
- return Tools.integer(properties, name);
- }
-
- /**
- Allow subordinate classes to obtain properties.
- */
- String string(String name)
- {
- return Tools.string(properties, name);
- }
-
- /**
- Convert properties into simulator variables.
- Must be called before execute().
- */
- public void setup()
- {
- // Process input...
- int arg = 0;
-
- Simulator.current = this;
-
- B = Tools.integer(properties, "B");
- N = Tools.integer(properties, "nodes");
- fileCount = Tools.integer(properties, "files");
-
- String factoryName = properties.getProperty("filefactory");
- if (factoryName == null)
- Tools.bail("No FileFactory given!");
- else if (factoryName.trim().equals("PlainFiles"))
- factory = new PlainFiles(this);
- else if (factoryName.trim().equals("TraceFiles"))
- factory = new TraceFiles(this);
- else if (factoryName.trim().equals("RandomFiles"))
- factory = new RandomFiles(this);
- else
- Tools.bail("Bad filefactory name: \"" + factoryName + "\"");
-
- // PlacementScheme placer = new Kademlia(B);
- placer = new Nearest(B);
- hub = new RandomNodes(B);
- nodes = new ArrayList<Node>(N);
- }
-
- public void execute()
- {
- setup();
-
- // Initialize node addresses...
- hub.generate(N, nodes);
- stats.nodes = N;
-
- // Initialize object addresses...
- for (int i = 0; i < fileCount; i++)
- {
- File file = factory.get();
-
- int tries = 0;
- Collection<Obj> set;
- do
- {
- if (tries++ >= maxTries)
- Tools.bail("Could not allocate new object ids!");
-
- set = placer.allocateFile(file, nodes);
- file.link(set);
- files.add(file);
- }
- while (objects.containsAny(set));
- objects.addAll(set);
- }
-
- if (Tools.string(properties, "printFiles").equals("true"))
- printFiles();
-
- // Place objects and add up load...
- placer.place(objects, nodes);
- Map<Node,Integer> origCount = countObjects(nodes);
-
- // printNodes(nodes);
- if (Tools.string(properties, "printInitialNodes").equals("true"))
- printNodeObjects(nodes);
-
- // Cause a fault and reallocate objects...
- int index = Bits.nextInt(nodes.size());
- Node failed = nodes.remove(index);
- System.out.println("failed: " + failed.bitString() +
- " (" + failed.objects.size() + ")");
-
- List<Obj> replacements = failed.objects;
- for (Obj object : replacements)
- placer.rebuild(object, nodes);
- Map<Node,Integer> faultCount = countObjects(nodes);
-
- if (Tools.string(properties, "printInitialNodes").equals("true"))
- printNodeObjects(nodes);
-
- // Find the load difference from before the fault...
- Map<Node,Integer> diffs = new Hashtable<Node,Integer>();
- for (Node node : faultCount.keySet())
- {
- int before = origCount.get(node);
- int after = faultCount.get(node);
- diffs.put(node, new Integer(after-before));
- }
-
- // Sort load differences...
- MapSorter<Node> sorter = new MapSorter<Node>();
- Map<Node,Integer> sorted = sorter.sort(diffs);
-
- // Display load differences...
- System.out.println("");
- System.out.println("LOAD_INCREASES:");
- for (Node node : sorted.keySet())
- {
- Integer d = sorted.get(node);
- System.out.println(node.bitString() + ": " + d);
- }
-
- // Display data movement stats...
- int total = 0;
- for (Node node : sorted.keySet())
- {
- total += sorted.get(node);
- }
- System.out.println("TOTAL_TRANSFERS: " + total);
- stats.totalTransfers = total;
-
- // Display data reallocation declustering...
- System.out.println("PULL_DECLUSTERING: ");
- int affected = 0;
- Node last = null;
- double percent = 0.0;
- for (Node node : sorted.keySet())
- {
- int d = sorted.get(node);
- if (d > 0)
- {
- percent = (100.0*d)/total;
- System.out.println(node.bitString() + ": " +
- df.format(percent) + "%");
- affected++;
- last = node;
- }
- }
- stats.maxDeclustering = percent;
- stats.affected = affected;
-
- System.out.println("SERVERS_AFFECTED: " + affected);
- }
-}
diff --git a/sim/gobs/gobs/Statistics.java b/sim/gobs/gobs/Statistics.java
deleted file mode 100644
index 33e6fac..0000000
--- a/sim/gobs/gobs/Statistics.java
+++ /dev/null
@@ -1,15 +0,0 @@
-
-package gobs;
-
-/**
- * Stores results as doubles from a Simulator run.
- * */
-
-public class Statistics
-{
- public int unique = 0;
- public double nodes = 0;
- public double maxDeclustering = 0.0;
- public double totalTransfers = 0;
- public double affected = 0;
-}
diff --git a/sim/gobs/gobs/Tools.java b/sim/gobs/gobs/Tools.java
deleted file mode 100644
index d16105c..0000000
--- a/sim/gobs/gobs/Tools.java
+++ /dev/null
@@ -1,53 +0,0 @@
-
-package gobs;
-
-import java.util.Properties;
-
-/**
- * Helpful wrappers for Properties and fatal errors.
- * */
-
-public class Tools
-{
- public static int integer(Properties properties, String variable)
- {
- int result = 0;
- try
- {
- result =
- Integer.parseInt(properties.getProperty(variable).trim());
- }
- catch (NumberFormatException e)
- {
- bail("Could not read integer from property: " + variable +
- " = " + properties.getProperty(variable));
- }
- catch (NullPointerException e)
- {
- bail("Required property not found: " + variable);
- }
- return result;
- }
-
- public static String string(Properties properties, String variable)
- {
- String result = null;
- try
- {
- result = properties.getProperty(variable).trim();
- }
- catch (NullPointerException e)
- {
- bail("Required property not found: " + variable);
- }
- return result;
- }
-
- public static void bail(String msg)
- {
- System.out.println(msg);
-
- // Exit code 1 is a Java error:
- System.exit(2);
- }
-}
diff --git a/sim/gobs/gobs/TraceFiles.java b/sim/gobs/gobs/TraceFiles.java
deleted file mode 100644
index 68a3aeb..0000000
--- a/sim/gobs/gobs/TraceFiles.java
+++ /dev/null
@@ -1,74 +0,0 @@
-
-package gobs;
-
-import java.util.List;
-
-/**
- * Generates files from tracefile.
- *
- * Overwrites Simulator.fileCount!
- *
- * Required properties settings: filetrace
- * */
-
-class TraceFiles
- implements FileFactory
-{
- String filename;
- List<String> lines = null;
- int index = 0;
-
- TraceFiles(Simulator simulator)
- {
- filename = simulator.string("filetrace");
- try
- {
- lines = LineReader.read(new java.io.File(filename));
- }
- catch (java.io.FileNotFoundException e)
- {}
- finally
- {
- if (lines == null)
- Tools.bail("TraceFiles: Could not read: \"" +
- filename + "\"");
- }
-
- simulator.fileCount = lines.size();
- }
-
- public File get()
- {
- if (index > lines.size())
- Tools.bail("TraceFiles: Exceeded trace file length!");
-
- String[] tokens = LineReader.tokenize(lines.get(index));
-
- String file = tokens[0];
- if (! file.equals("file"))
- Tools.bail("Does not compute (should be file stats): " +
- lines.get(index));
-
- int size = 0;
- int strip = 0;
- int width = 0;
- int replicas = 0;
- try
- {
- size = Integer.parseInt(tokens[1]);
- strip = Integer.parseInt(tokens[2]);
- width = Integer.parseInt(tokens[3]);
- replicas = Integer.parseInt(tokens[4]);
- }
- catch (NumberFormatException e)
- {
- Tools.bail("TraceFiles: Error reading file: " +
- filename + "\n" +
- "line: " + lines.get(index));
- }
-
- index++;
-
- return new File(size, strip, width, replicas);
- }
-}
diff --git a/sim/gobs/gobs/UniformNodes.java b/sim/gobs/gobs/UniformNodes.java
deleted file mode 100644
index 431b677..0000000
--- a/sim/gobs/gobs/UniformNodes.java
+++ /dev/null
@@ -1,149 +0,0 @@
-
-package gobs;
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * New nodes insert themselves in the middle of
- * the largest gap in the node address space.
- * */
-
-class UniformNodes
- extends NodeScheme
-{
- UniformNodes(int B)
- {
- super(B);
- }
-
- BigInteger makeID(int[] prefix)
- {
- BigInteger result = BigInteger.ZERO;
-
- for (int i = prefix.length-1; i >= 0; i--)
- {
- if (prefix[i] == 1)
- result.setBit(i);
- }
- System.out.println("UniformNodes.makeID(): " + result);
-
- return result;
- }
-
- /**
- Fill in the biggest gap with a new node.
- */
- BigInteger assignID(List<Node> nodes)
- {
- int result = -1;
-
- for (int b = 1; b < B; b++)
- {
- Set<int[]> all = allPossible(B);
-
- for (int[] prefix : all)
- {
- boolean found = false;
- for (Node node : nodes)
- {
- if (node.prefix(prefix))
- {
- found = true;
- break;
- }
- }
- if (! found)
- {
- BigInteger id = makeID(prefix);
- return id;
- }
- }
- }
-
- System.out.println("UniformNodes.assignID(): " +
- "could not generate address!");
- System.exit(1);
- return BigInteger.ONE.negate();
- }
-
- /**
- All possible bit arrays of length i.
- */
- Set<int[]> allPossible(int i)
- {
- int[] A = new int[i];
- return children(A, 0);
- }
-
- /**
- Helper for allPossible().
- */
- Set<int[]> children(int[] A, int b)
- {
- Set<int[]> result = new HashSet<int[]>();
-
- int[] v1 = copy(A, b);
- int[] v2 = copy(A, b);
- v1[b] = 0;
- v2[b] = 1;
-
- if (b == A.length-1)
- {
- result.add(v1);
- result.add(v2);
- }
- else
- {
- result.addAll(children(v1,b+1));
- result.addAll(children(v2,b+1));
- }
-
- return result;
- }
-
- /**
- Obtain a new array the size of the given array with
- elements copied up to item n.
- */
- int[] copy(int[] array, int n)
- {
- int[] result = new int[array.length];
-
- for (int i = 0; i < n; i++)
- result[i] = array[i];
-
- return result;
- }
-
- public void generate(int count, List<Node> nodes)
- {
- for (int i = 0; i < count; i++)
- {
- BigInteger id = assignID(nodes);
- Node newNode = new Node(B, id);
- }
- }
-
- /*
- Debugging only.
-
- public static void main(String[] args)
- {
- int B = 6;
- BigInteger i = new BigInteger("8");
- int[] A = Node.bitArray(B, i);
- UniformNodes u = new UniformNodes(B);
- System.out.println(u.makeID(A));
-
- System.out.println("---");
-
- Set<int[]> s = u.allPossible(3);
- System.out.println(s.size());
- for (int[] v : s)
- System.out.println(Node.arrayString(v));
-
- // System.out.println(allPossible(3));
- }
- */
-}
diff --git a/sim/gobs/gobs/plot/AsciiPlot.java b/sim/gobs/gobs/plot/AsciiPlot.java
new file mode 100644
index 0000000..073687b
--- /dev/null
+++ b/sim/gobs/gobs/plot/AsciiPlot.java
@@ -0,0 +1,54 @@
+
+package gobs.plot;
+
+import java.io.*;
+
+import org.jfree.data.xy.XYSeries;
+
+/**
+ * Will be easy to tie in gnuplot.
+ * */
+
+class AsciiPlot
+ extends Plot
+{
+ public static void plot(XYSeries series,
+ String title, String xlabel,
+ String ylabel, String output)
+ {
+ try
+ {
+ PrintWriter writer = new PrintWriter(output);
+
+ writer.println("# TITLE: " + title);
+ writer.println("# XLABEL: " + xlabel);
+ writer.println("# YLABEL: " + ylabel);
+
+ for (int i = 0; i < series.getItemCount(); i++)
+ {
+ writer.println("" + series.getX(i) + " " + series.getY(i));
+ }
+
+ writer.close();
+ }
+ catch (IOException e)
+ {
+ System.out.println("AsciiPlot: Output error to: " + output);
+ }
+ }
+
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ XYSeries series = new XYSeries("ASCII");
+
+ series.add(3.0,4.0);
+ series.add(4.0,5.0);
+ series.add(5.0,1.0);
+
+ plot(series, "TITLE", "XL", "YL", "tmp.eps");
+ }
+}
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/gobs/plot/MultiplePlot.java
new file mode 100644
index 0000000..a1600ea
--- /dev/null
+++ b/sim/gobs/gobs/plot/MultiplePlot.java
@@ -0,0 +1,124 @@
+
+package gobs.plot;
+
+import java.awt.Color;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.util.*;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
+
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.XYDotRenderer;
+import org.jfree.data.xy.XYDataset;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+import gobs.util.Bits;
+
+/**
+ * Simple abstraction over JFreeChart with EPS output.
+ * */
+
+public class MultiplePlot
+{
+ /**
+ Generate simple plot.
+ @param data The x,y data.
+ @param title Plot title.
+ @param xlabel X label text.
+ @param ylabel Y label text.
+ @param output EPS filename.
+ */
+ public static boolean plot(XYSeriesCollection collection,
+ String title, String xlabel,
+ String ylabel, String output)
+ {
+ EPSDocumentGraphics2D g2d = null;
+ Rectangle2D.Double rectangle = null;
+ OutputStream out = null;
+
+ int w = 400;
+ int h = 400;
+
+ try
+ {
+ out = new FileOutputStream(output);
+ out = new BufferedOutputStream(out);
+
+ g2d = new EPSDocumentGraphics2D(false);
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+
+ rectangle = new Rectangle2D.Double(0, 0, w, h);
+
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+ g2d.setupDocument(out, w, h);
+
+ //Paint a bounding box
+ // g2d.drawRect(20, 20, 40, 40);
+ }
+ catch (IOException e)
+ {
+ System.out.println("Problem with file: " + output);
+ return false;
+ }
+
+ final boolean withLegend = true;
+
+ JFreeChart chart =
+ ChartFactory.createXYLineChart
+ (title, xlabel, ylabel, collection,
+ PlotOrientation.VERTICAL, withLegend, false, false);
+
+ XYPlot plot = chart.getXYPlot();
+ plot.setBackgroundPaint(Color.WHITE);
+ chart.draw(g2d, rectangle);
+
+ try
+ {
+ g2d.finish();
+ }
+ catch (Exception e)
+ {
+ System.out.println("Err!");
+ }
+
+ IOUtils.closeQuietly(out);
+
+ return true;
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ final XYSeriesCollection collection = new XYSeriesCollection();
+ int count = 0;
+ for (int j = 0; j < 3; j++)
+ {
+ XYSeries series = new XYSeries("data: " + count++);
+ for (int i = 0; i < 9; i++)
+ {
+ series.add(i, j*3+Bits.nextInt(3));
+ }
+ collection.addSeries(series);
+ }
+
+ plot(collection, "TITLE", "XL", "YL", "tmp.eps");
+ }
+}
diff --git a/sim/gobs/gobs/plot/Plot.java b/sim/gobs/gobs/plot/Plot.java
new file mode 100644
index 0000000..7f14637
--- /dev/null
+++ b/sim/gobs/gobs/plot/Plot.java
@@ -0,0 +1,12 @@
+
+package gobs.plot;
+
+import org.jfree.data.xy.XYSeries;
+
+abstract class Plot
+{
+ static void plot(XYSeries series,
+ String title, String xlabel,
+ String ylabel, String output)
+ {}
+}
diff --git a/sim/gobs/gobs/plot/SimplePlot.java b/sim/gobs/gobs/plot/SimplePlot.java
new file mode 100644
index 0000000..e704bc9
--- /dev/null
+++ b/sim/gobs/gobs/plot/SimplePlot.java
@@ -0,0 +1,124 @@
+
+package gobs.plot;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.util.LinkedHashMap;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
+
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.XYDotRenderer;
+import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
+import org.jfree.data.xy.XYDataset;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+/**
+ * Simple abstraction over JFreeChart with EPS output.
+ * */
+
+public class SimplePlot
+{
+ /**
+ Generate simple plot.
+ @param data The x,y data.
+ @param title Plot title.
+ @param xlabel X label text.
+ @param ylabel Y label text.
+ @param output EPS filename.
+ */
+ public static boolean plot(XYSeries series,
+ String title, String xlabel,
+ String ylabel, String output)
+ {
+ EPSDocumentGraphics2D g2d = null;
+ Rectangle2D.Double rectangle = null;
+ OutputStream out = null;
+
+ int w = 400;
+ int h = 400;
+
+ try
+ {
+ out = new FileOutputStream(output);
+ out = new BufferedOutputStream(out);
+
+ g2d = new EPSDocumentGraphics2D(false);
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+
+ rectangle = new Rectangle2D.Double(0, 0, w, h);
+
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+ g2d.setupDocument(out, w, h);
+
+ //Paint a bounding box
+ // g2d.drawRect(20, 20, 40, 40);
+ }
+ catch (IOException e)
+ {
+ System.out.println("Problem with file: " + output);
+ return false;
+ }
+
+ final XYDataset collection = new XYSeriesCollection(series);
+
+ final boolean withLegend = false;
+
+ JFreeChart chart =
+ ChartFactory.createXYLineChart
+ (title, xlabel, ylabel, collection,
+ PlotOrientation.VERTICAL, withLegend, false, false);
+
+ XYPlot plot = chart.getXYPlot();
+ plot.setBackgroundPaint(Color.WHITE);
+ XYLineAndShapeRenderer renderer =
+ new XYLineAndShapeRenderer();
+ renderer.setBaseOutlinePaint(Color.BLACK);
+ renderer.setBasePaint(Color.BLACK);
+ renderer.setBaseFillPaint(Color.BLACK);
+ plot.setRenderer(renderer);
+
+ chart.draw(g2d, rectangle);
+
+ try
+ {
+ g2d.finish();
+ }
+ catch (Exception e)
+ {
+ System.out.println("Err!");
+ }
+ IOUtils.closeQuietly(out);
+
+ return true;
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ XYSeries series = new XYSeries("debugging");
+
+ series.add(3.0,4.0);
+ series.add(4.0,5.0);
+ series.add(5.0,1.0);
+ series.add(8.0,0.0);
+
+ plot(series, "TITLE", "XL", "YL", "tmp.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sim/Addressable.java b/sim/gobs/gobs/sim/Addressable.java
new file mode 100644
index 0000000..4d20785
--- /dev/null
+++ b/sim/gobs/gobs/sim/Addressable.java
@@ -0,0 +1,152 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+
+/**
+ * Superclass for things with an address: objects and nodes.
+ * */
+
+class Addressable
+{
+ int B;
+ BigInteger id;
+
+ // Cached result of bitArray():
+ int[] array = null;
+
+ static Display display = Display.NUMERIC;
+
+ enum Display
+ {
+ /** Display addresses as raw bits. */
+ BITS,
+ /** Display addresses as numbers. */
+ NUMERIC
+ }
+
+ public Addressable(int B, BigInteger id)
+ {
+ this.B = B;
+ this.id = id;
+ }
+
+ /**
+ Does this Addressable start with the given bit prefix?
+ */
+ boolean prefix(int[] p)
+ {
+ int[] A = bitArray();
+ for (int i = 0; i < p.length; i++)
+ {
+ if (p[i] != A[i])
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ Obtain an array of bits for this Addressable.
+ */
+ int[] bitArray()
+ {
+ if (array != null)
+ return array;
+
+ int[] result = bitArray(B, id);
+ array = result;
+ return result;
+ }
+
+ /**
+ Obtain the array of bits for the given address.
+ */
+ static int[] bitArray(int B, BigInteger i)
+ {
+ int[] result = new int[B];
+
+ BigInteger two = new BigInteger("2");
+
+ for (int k = 0; k < B; k++)
+ {
+ if (i.shiftRight(k).mod(two).equals(BigInteger.ZERO))
+ result[B-k-1] = 0;
+ else
+ result[B-k-1] = 1;
+ }
+
+ return result;
+ }
+
+ /**
+ Convert the Addressable to a String of 0s and 1s.
+ */
+ String bitString()
+ {
+ return bitString(B, id);
+ }
+
+ /**
+ Convert the given address to a String of 0s and 1s.
+ */
+ static String bitString(int B, BigInteger i)
+ {
+ return arrayString(bitArray(B, i));
+ }
+
+ /**
+ Convert the given bits to a String.
+ */
+ static String arrayString(int[] bits)
+ {
+ StringBuilder buffer = new StringBuilder();
+ for (int i = 0; i < bits.length; i++)
+ {
+ if (bits[i] == 0)
+ buffer.append("0");
+ else
+ buffer.append("1");
+ }
+ return buffer.toString();
+ }
+
+ String name()
+ {
+ if (display == Display.BITS)
+ return bitString();
+ else
+ return id.toString();
+ }
+
+ /**
+ Set address display mode.
+ */
+ static void display(Display mode)
+ {
+ display = mode;
+ }
+
+ public int hashCode()
+ {
+ return id.hashCode();
+ }
+
+ public boolean equals(Object other)
+ {
+ if (other instanceof Addressable)
+ {
+ if (((Addressable) other).id.equals(id))
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ Debugging only.
+
+ public static void main(String[] args)
+ {
+ // System.out.println(bitString(10, ));
+ }
+ */
+}
diff --git a/sim/gobs/gobs/sim/EnhancedLinkedHashSet.java b/sim/gobs/gobs/sim/EnhancedLinkedHashSet.java
new file mode 100644
index 0000000..fb400dd
--- /dev/null
+++ b/sim/gobs/gobs/sim/EnhancedLinkedHashSet.java
@@ -0,0 +1,46 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+class EnhancedLinkedHashSet<T>
+ extends LinkedHashSet<T>
+{
+ private static final long serialVersionUID = 1;
+
+ public EnhancedLinkedHashSet()
+ {
+ super();
+ }
+
+ boolean containsAny(Collection<T> c)
+ {
+ for (T thing : c)
+ {
+ if (contains(thing))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ EnhancedLinkedHashSet<Object> set = new EnhancedLinkedHashSet<Object>();
+
+ /*
+ String hello = "Hello";
+ set.add(hello);
+ if (set.contains("Hello"))
+ System.out.println("true");
+ */
+
+ Obj obj = new Obj(4, new BigInteger("3"), 0, 0);
+ set.add(obj);
+ if (set.contains(new Obj(5, new BigInteger("3"), 1, 1)))
+ System.out.println("true");
+ }
+}
diff --git a/sim/gobs/gobs/sim/File.java b/sim/gobs/gobs/sim/File.java
new file mode 100644
index 0000000..8875d3a
--- /dev/null
+++ b/sim/gobs/gobs/sim/File.java
@@ -0,0 +1,74 @@
+
+package gobs.sim;
+
+import java.util.Collection;
+
+import static java.lang.Math.*;
+
+/**
+ * Simulated file.
+ * */
+
+class File
+{
+ int size;
+ int strip;
+ int width;
+ int replicas;
+ int id;
+
+ static int unique = 0;
+
+ Collection<Obj> objects;
+
+ File(int size, int strip, int width, int replicas)
+ {
+ this.size = size;
+ this.strip = strip;
+ this.width = width;
+ this.replicas = replicas;
+
+ // System.out.println("FILE: " + size + " " + strip + " " + width + " " + replicas);
+
+ id = unique++;
+ }
+
+ void link(Collection<Obj> objects)
+ {
+ this.objects = objects;
+ }
+
+ /**
+ What is the size of the ith object for this File?
+ */
+ int objectSize(int i)
+ {
+ int strips = round((float)
+ ceil(((float) size) / ((float) strip)));
+ int extras = strips % width;
+ if (i < extras)
+ return (1 + strips/width)*strip;
+ return (strips/width)*strip;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb =
+ new StringBuilder(100+objects.size()*(Simulator.current.B+10));
+ sb.append("file[").append(id).append("]: ");
+ for (Obj object : objects)
+ sb.append(object).append(" ");
+ return sb.toString();
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ File file = new File(0, 3, 3, 1);
+ System.out.println(file.objectSize(0));
+ System.out.println(file.objectSize(1));
+ System.out.println(file.objectSize(2));
+ }
+}
diff --git a/sim/gobs/gobs/sim/FileFactory.java b/sim/gobs/gobs/sim/FileFactory.java
new file mode 100644
index 0000000..f1802a5
--- /dev/null
+++ b/sim/gobs/gobs/sim/FileFactory.java
@@ -0,0 +1,11 @@
+
+package gobs.sim;
+
+/**
+ * File distribution factory.
+ * */
+
+interface FileFactory
+{
+ File get();
+}
diff --git a/sim/gobs/gobs/sim/Kademlia.java b/sim/gobs/gobs/sim/Kademlia.java
new file mode 100644
index 0000000..45292aa
--- /dev/null
+++ b/sim/gobs/gobs/sim/Kademlia.java
@@ -0,0 +1,117 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+import gobs.util.Tools;
+
+/**
+ * Places objects on the nearest node using the XOR distance metric.
+ * */
+
+class Kademlia
+ extends PlacementScheme
+{
+ Kademlia(int B)
+ {
+ super(B);
+ }
+
+ public void place(Collection<Obj> objects, List<Node> nodes)
+ {
+ System.out.println("placing: " + objects.size());
+ for (Obj object : objects)
+ placeObject(object, nodes);
+ }
+
+ /**
+ Allocate replicas for object and place all on nodes.
+ */
+ void placeObject(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = closestNodes(object, nodes);
+ Primary primary = object.toPrimary();
+ closest.remove(0).add(primary);
+ for (Node node : closest)
+ {
+ node.add(object.toSecondary(primary));
+ }
+ }
+
+ /**
+ Place this object to rebuild.
+ */
+ /* TRY SUPERCLASS!
+ void rebuild(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = closestNodes(object, nodes);
+ Secondary secondary;
+ Node source = null, destination = null;
+ if (object instanceof Primary)
+ {
+ Primary primary = object.toPrimary();
+ source = closest.remove(0);
+ secondary = (Secondary) source.remove(primary.id);
+ source.add(primary);
+ }
+ else
+ {
+ source = closest.remove(0);
+ Primary primary = (Primary) source.get(object.id);
+ secondary = primary.toSecondary(primary);
+ }
+
+ for (Node node : closest)
+ {
+ if (! node.contains(secondary.id))
+ {
+ destination = node;
+ destination.add(secondary);
+ break;
+ }
+ }
+ System.out.println("rebuild: " + object.toString() + ": " +
+ source.bitString() + " -> " +
+ destination.bitString());
+ }
+ */
+
+ List<Node> closestNodes(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = new ArrayList<Node>(object.replicas*2);
+
+ for (int i = 0; i < object.replicas; i++)
+ {
+ BigInteger closestDiff = null;
+ Node closestNode = null;
+ for (Node node : nodes)
+ {
+ BigInteger d = node.id.xor(object.id);
+ if ((closestDiff == null ||
+ closestDiff.compareTo(d) > 0) &&
+ ! closest.contains(node))
+ {
+ closestNode = node;
+ closestDiff = d;
+ }
+ }
+ closest.add(closestNode);
+ }
+ return closest;
+ }
+
+ /**
+ XOR calculator.
+ */
+ public static void main(String[] args)
+ {
+ if (args.length < 2)
+ Tools.bail("Need 2 binary numbers!");
+
+ BigInteger i1 = new BigInteger(args[0], 2);
+ BigInteger i2 = new BigInteger(args[1], 2);
+
+ System.out.println(i2.subtract(i1).abs());
+ }
+}
diff --git a/sim/gobs/gobs/sim/LayoutScheme.java b/sim/gobs/gobs/sim/LayoutScheme.java
new file mode 100644
index 0000000..1bf9d6e
--- /dev/null
+++ b/sim/gobs/gobs/sim/LayoutScheme.java
@@ -0,0 +1,24 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.List;
+
+/**
+ * LayoutSchemes generate object ids within a file.
+ * */
+
+abstract class LayoutScheme
+{
+ int B;
+ BigInteger M;
+
+ LayoutScheme(int B)
+ {
+ this.B = B;
+ BigInteger two = new BigInteger("2");
+ M = two.pow(B);
+ }
+
+ abstract List<Obj> generate(int fileSize, int objSize);
+}
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/gobs/sim/Nearest.java
new file mode 100644
index 0000000..a388575
--- /dev/null
+++ b/sim/gobs/gobs/sim/Nearest.java
@@ -0,0 +1,69 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * Places objects on the nearest node using the XOR distance metric.
+ * */
+
+class Nearest
+ extends PlacementScheme
+{
+ Nearest(int B)
+ {
+ super(B);
+ }
+
+ public void place(Collection<Obj> objects, List<Node> nodes)
+ {
+ System.out.println("placing: " + objects.size());
+ for (Obj object : objects)
+ placeObject(object, nodes);
+ }
+
+ /**
+ Allocate replicas for object and place all on nodes.
+ */
+ void placeObject(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = closestNodes(object, nodes);
+ Primary primary = object.toPrimary();
+ closest.remove(0).add(primary);
+ for (Node node : closest)
+ {
+ node.add(object.toSecondary(primary));
+ }
+ }
+
+ List<Node> closestNodes(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = new ArrayList<Node>(object.replicas*2);
+
+ for (int i = 0; i < object.replicas; i++)
+ {
+ BigInteger closestDiff = null;
+ Node closestNode = null;
+ for (Node node : nodes)
+ {
+ BigInteger d = node.id.subtract(object.id).abs();
+ if ((closestDiff == null ||
+ closestDiff.compareTo(d) > 0) &&
+ ! closest.contains(node))
+ {
+ closestNode = node;
+ closestDiff = d;
+ }
+ }
+ closest.add(closestNode);
+ }
+
+ if (closest.size() != object.replicas)
+ {
+ System.out.println("not enough closest nodes!");
+ }
+
+ return closest;
+ }
+}
diff --git a/sim/gobs/gobs/sim/Node.java b/sim/gobs/gobs/sim/Node.java
new file mode 100644
index 0000000..3264b5f
--- /dev/null
+++ b/sim/gobs/gobs/sim/Node.java
@@ -0,0 +1,103 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * Simulates an object store.
+ * */
+
+public class Node
+ extends Addressable
+{
+ /**
+ Object store.
+ */
+ public List<Obj> objects;
+
+ /**
+ Counter for number of pushes during rebuilds.
+ */
+ int pushes = 0;
+
+ /**
+ Counter for number of pulls during rebuilds.
+ */
+ int pulls = 0;
+
+ Node(int B, BigInteger id)
+ {
+ super(B, id);
+ objects = new ArrayList<Obj>();
+ }
+
+ void add(Obj object)
+ {
+ objects.add(object);
+ }
+
+ /**
+ @return An Obj with this id.
+ */
+ Obj get(BigInteger id)
+ {
+ for (Iterator<Obj> it = objects.iterator(); it.hasNext(); )
+ {
+ Obj object = it.next();
+ if (object.id.equals(id))
+ {
+ return object;
+ }
+ }
+ return null;
+ }
+
+ /**
+ Remove and return an Obj with this id.
+ */
+ Obj remove(BigInteger id)
+ {
+ for (Iterator<Obj> it = objects.iterator(); it.hasNext(); )
+ {
+ Obj object = it.next();
+ if (object.id.equals(id))
+ {
+ it.remove();
+ return object;
+ }
+ }
+ return null;
+ }
+
+ /**
+ @return true iff this node has an object with the given id.
+ */
+ boolean contains(BigInteger id)
+ {
+ for (Obj object : objects)
+ {
+ if (object.id.equals(id))
+ return true;
+ }
+ return false;
+ }
+
+ String loadReport()
+ {
+ return bitString() + " " + objects.size();
+ }
+
+ public String toString()
+ {
+ StringBuffer result = new StringBuffer(objects.size()*10);
+ result.append(name());
+ result.append(":\t");
+ for (Obj object : objects)
+ {
+ result.append(object.toString()).append(" ");
+ }
+ result.append("\n");
+ return result.toString();
+ }
+}
diff --git a/sim/gobs/gobs/sim/NodeScheme.java b/sim/gobs/gobs/sim/NodeScheme.java
new file mode 100644
index 0000000..5983ec0
--- /dev/null
+++ b/sim/gobs/gobs/sim/NodeScheme.java
@@ -0,0 +1,26 @@
+
+package gobs.sim;
+
+import java.util.*;
+
+/**
+ * Generates node addresses.
+ * */
+
+abstract class NodeScheme
+{
+ int B;
+ long M;
+
+ NodeScheme(int B)
+ {
+ this.B = B;
+ M = Math.round(Math.pow(2,B));
+ }
+
+ /**
+ Generate <tt>count</tt> new nodes and place them in
+ <tt>nodes</tt>.
+ */
+ abstract void generate(int count, List<Node> nodes);
+}
diff --git a/sim/gobs/gobs/sim/Obj.java b/sim/gobs/gobs/sim/Obj.java
new file mode 100644
index 0000000..9c6312e
--- /dev/null
+++ b/sim/gobs/gobs/sim/Obj.java
@@ -0,0 +1,40 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+
+/**
+ * Simulates a single object.
+ * Identifier "Object" is used by Java.
+ * */
+
+class Obj
+ extends Addressable
+{
+ /** Simulated size in bytes. */
+ int size;
+ /** Number of replicas, including primary. */
+ int replicas;
+
+ Obj(int B, BigInteger id, int size, int replicas)
+ {
+ super(B, id);
+ this.size = size;
+ this.replicas = replicas;
+ }
+
+ Primary toPrimary()
+ {
+ return new Primary(B, id, size, replicas);
+ }
+
+ Secondary toSecondary(Primary primary)
+ {
+ return new Secondary(B, id, size, replicas, primary);
+ }
+
+ public String toString()
+ {
+ return name() + "(" + size + ")";
+ }
+}
diff --git a/sim/gobs/gobs/sim/PlacementScheme.java b/sim/gobs/gobs/sim/PlacementScheme.java
new file mode 100644
index 0000000..bd5fb2a
--- /dev/null
+++ b/sim/gobs/gobs/sim/PlacementScheme.java
@@ -0,0 +1,141 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+import gobs.util.*;
+
+/**
+ * Interface to place a list of objects on a set of nodes.
+ * */
+
+abstract class PlacementScheme
+{
+ int B;
+ BigInteger M;
+
+ PlacementScheme(int B)
+ {
+ this.B = B;
+
+ BigInteger two = new BigInteger("2");
+ M = two.pow(B);
+ }
+
+ /**
+ Generate an object set for a file.
+ */
+ public Collection<Obj> allocateFile(File file, List<Node> nodes)
+ {
+ ArrayList<Obj> result = new ArrayList<Obj>(file.width+2);
+
+ // BigInteger two = new BigInteger("2");
+ BigInteger bigWidth = new BigInteger("" + file.width);
+ /*
+ BigInteger bigWidth2 = new BigInteger.ONE;
+ while (bigWidth2.compareTo(bigWidth) <= 0)
+ {
+ bigWidth2 = bigWidth2.multiply(two);
+ }
+ */
+
+ BigInteger s = M.divide(bigWidth);
+ BigInteger p = randomID();
+
+ int i;
+ for (i = 0; i < file.width; i++)
+ {
+ BigInteger id = p;
+ int bytes = file.objectSize(i);
+ Obj obj = new Obj(B, id, bytes, file.replicas);
+ result.add(obj);
+ p = p.add(s).mod(M);
+ }
+
+ /*
+ for (Obj o : result)
+ System.out.println(o);
+ */
+
+ result.trimToSize();
+ return result;
+ }
+
+ /**
+ Place a set of objects.
+ */
+ abstract void place(Collection<Obj> objects, List<Node> nodes);
+
+ /**
+ Obtain a list of nodes closest to the given object with respect
+ to the distance metric used here.
+ */
+ abstract List<Node> closestNodes(Obj object, List<Node> nodes);
+
+ /**
+ Place this object to rebuild.
+ */
+ void rebuild(Obj object, List<Node> nodes)
+ {
+ List<Node> closest = closestNodes(object, nodes);
+ Secondary secondary;
+ Node source = null, destination = null;
+ if (object instanceof Primary)
+ {
+ Primary primary = object.toPrimary();
+ source = closest.remove(0);
+ secondary = (Secondary) source.remove(primary.id);
+ source.add(primary);
+ }
+ else
+ {
+ source = closest.remove(0);
+ Primary primary = (Primary) source.get(object.id);
+ secondary = primary.toSecondary(primary);
+ }
+
+ if (secondary == null)
+ {
+ System.out.println("rebuild: lost: " + object.bitString());
+ return;
+ }
+
+ for (Node node : closest)
+ {
+ if (! node.contains(secondary.id))
+ {
+ destination = node;
+ break;
+ }
+ }
+
+ destination.add(secondary);
+
+ source.pushes++;
+ source.pulls++;
+
+ if (Tools.string(Simulator.current.properties, "printRebuilds")
+ .equals("true"))
+ System.out.println("rebuild: " + object.toString() + ": " +
+ source.name() + " -> " +
+ destination.name());
+ }
+
+ /**
+ New id anywhere in the address space.
+ */
+ BigInteger randomID()
+ {
+ BigInteger i = new BigInteger(B, Bits.rng);
+ return i;
+ }
+
+ /**
+ New id in the i first ids in the address space.
+ */
+ BigInteger randomID(BigInteger i)
+ {
+ return new BigInteger(B, Bits.rng).mod(i);
+ }
+}
diff --git a/sim/gobs/gobs/sim/PlainFiles.java b/sim/gobs/gobs/sim/PlainFiles.java
new file mode 100644
index 0000000..ef78f72
--- /dev/null
+++ b/sim/gobs/gobs/sim/PlainFiles.java
@@ -0,0 +1,31 @@
+
+package gobs.sim;
+
+/**
+ * Generates same file repeatedly.
+ *
+ * Required properties settings: filesize, filestrip,
+ * filewidth, filereplicas.
+ * */
+
+class PlainFiles
+ implements FileFactory
+{
+ int size;
+ int strip;
+ int width;
+ int replicas;
+
+ PlainFiles(Simulator simulator)
+ {
+ size = simulator.integer("filesize");
+ strip = simulator.integer("filestrip");
+ width = simulator.integer("filewidth");
+ replicas = simulator.integer("filereplicas");
+ }
+
+ public File get()
+ {
+ return new File(size, strip, width, replicas);
+ }
+}
diff --git a/sim/gobs/gobs/sim/Primary.java b/sim/gobs/gobs/sim/Primary.java
new file mode 100644
index 0000000..28a8de2
--- /dev/null
+++ b/sim/gobs/gobs/sim/Primary.java
@@ -0,0 +1,22 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+
+/**
+ * Simulates a single primary object.
+ * */
+
+class Primary
+ extends Obj
+{
+ Primary(int B, BigInteger id, int size, int replicas)
+ {
+ super(B, id, size, replicas);
+ }
+
+ public String toString()
+ {
+ return name() + "[P](" + size + ")";
+ }
+}
diff --git a/sim/gobs/gobs/sim/RandomFiles.java b/sim/gobs/gobs/sim/RandomFiles.java
new file mode 100644
index 0000000..073843a
--- /dev/null
+++ b/sim/gobs/gobs/sim/RandomFiles.java
@@ -0,0 +1,60 @@
+
+package gobs.sim;
+
+import gobs.util.Bits;
+
+/**
+ * Generates random files.
+ *
+ * Produces 50/50 mix of two file types: big and small.
+ * Big files use strip=4MB.
+ * Small files use strip=size.
+ * Big files use filewidth.
+ * Small files have width=1.
+ * Big files use replicas=2.
+ * Small files use replicas=3.
+ *
+ * Required properties settings: filestrip, filebigmax, filebigmin,
+ * filesmallmax, filesmallmin.
+ * */
+
+class RandomFiles
+ implements FileFactory
+{
+ int sizebigmax;
+ int sizebigmin;
+ int sizesmallmax;
+ int sizesmallmin;
+ int strip;
+ int width;
+ int replicas;
+
+ RandomFiles(Simulator simulator)
+ {
+ sizebigmax = simulator.integer("filebigmax");
+ sizebigmin = simulator.integer("filebigmin");
+ sizesmallmax = simulator.integer("filesmallmax");
+ sizesmallmin = simulator.integer("filesmallmin");
+ strip = simulator.integer("filestrip");
+ width = simulator.integer("filewidth");
+ }
+
+ public File get()
+ {
+ File result;
+ int size;
+ if (Bits.nextBoolean())
+ {
+ // Big file:
+ size = Bits.nextInt(sizebigmax-sizebigmin)+sizebigmin;
+ result = new File(size, 4*1024*1024, width, 2);
+ }
+ else
+ {
+ // Small file:
+ size = Bits.nextInt(sizesmallmax-sizesmallmin)+sizesmallmin;
+ result = new File(size, size, 1, 3);
+ }
+ return result;
+ }
+}
diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/gobs/sim/RandomNodes.java
new file mode 100644
index 0000000..9fb36e5
--- /dev/null
+++ b/sim/gobs/gobs/sim/RandomNodes.java
@@ -0,0 +1,40 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+import gobs.util.*;
+
+/**
+ * Places new nodes randomly without looking at existing nodes.
+ * */
+
+class RandomNodes
+ extends NodeScheme
+{
+ RandomNodes(int B)
+ {
+ super(B);
+ }
+
+ public void generate(int count, List<Node> nodes)
+ {
+ for (int i = 0; i < count; i++)
+ {
+ BigInteger id;
+ Node node;
+ int tries = 0;
+ do
+ {
+ if (tries++ >= Simulator.maxTries)
+ Tools.bail("Could not assign unique node id!");
+
+ id = new BigInteger(B, Bits.rng);
+ node = new Node(B, id);
+ }
+ while (nodes.contains(node));
+ nodes.add(node);
+ }
+ }
+}
diff --git a/sim/gobs/gobs/sim/Secondary.java b/sim/gobs/gobs/sim/Secondary.java
new file mode 100644
index 0000000..4865e1e
--- /dev/null
+++ b/sim/gobs/gobs/sim/Secondary.java
@@ -0,0 +1,26 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+
+/**
+ * Simulates a single secondary object.
+ * */
+
+class Secondary
+ extends Obj
+{
+ Primary primary;
+
+ Secondary(int B, BigInteger id, int size, int replicas,
+ Primary primary)
+ {
+ super(B, id, size, replicas);
+ this.primary = primary;
+ }
+
+ public String toString()
+ {
+ return name() + "[S](" + size + ")";
+ }
+}
diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/gobs/sim/SimpleNodes.java
new file mode 100644
index 0000000..9247111
--- /dev/null
+++ b/sim/gobs/gobs/sim/SimpleNodes.java
@@ -0,0 +1,44 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+import gobs.util.*;
+
+/**
+ * Places new nodes uniformly in address space
+ * without looking at existing nodes.
+ * */
+
+class SimpleNodes
+ extends NodeScheme
+{
+ SimpleNodes(int B)
+ {
+ super(B);
+ }
+
+ public void generate(int count, List<Node> nodes)
+ {
+ BigInteger offset = new BigInteger(B, Bits.rng);
+ BigInteger c = new BigInteger("" + count);
+
+ BigInteger bigM = new BigInteger("" + M);
+ BigInteger fraction = bigM.divide(c);
+
+ for (int i = 0; i < count; i++)
+ {
+ int tries = 0;
+
+ BigInteger bigi = new BigInteger("" + i);
+ BigInteger id =
+ offset.add(bigi.multiply(fraction)).mod(bigM);
+ Node node = new Node(B, id);
+
+ if (nodes.contains(node))
+ Tools.bail("Could not assign unique node id!");
+ nodes.add(node);
+ }
+ }
+}
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
new file mode 100644
index 0000000..2116710
--- /dev/null
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -0,0 +1,341 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.text.DecimalFormat;
+import java.util.*;
+
+import gobs.util.*;
+import static gobs.util.Tools.bail;
+
+/**
+ * <h3> GOBS placement simulator. </h3>
+ *
+ * Command-line arguments: <br>
+ * */
+
+public class Simulator
+{
+ int B;
+ int N;
+
+ int fileCount;
+ int faults;
+
+ PlacementScheme placer;
+ NodeScheme hub;
+ FileFactory factory;
+
+ /**
+ Useful for helpful error messages:
+ */
+ String reading;
+
+ /**
+ Aggregate properties from all input files:
+ */
+ Properties properties = new Properties();
+
+ /**
+ Directory in which to look for properties files:
+ */
+ String path = null;
+
+ public List<Node> nodes;
+ EnhancedLinkedHashSet<Obj> objects =
+ new EnhancedLinkedHashSet<Obj>();
+ List<File> files = new ArrayList<File>();
+
+ /**
+ Original allocation of objects. Read by gobs.sweep.Balance.
+ */
+ public Map<Node,Integer> origCount;
+
+ static Simulator current;
+ static final int maxTries = 10;
+
+ DecimalFormat df = new DecimalFormat("0.0");
+
+ public Statistics stats = new Statistics();
+
+ public Simulator()
+ {}
+
+ Map<Node,Integer> countObjects(List<Node> nodes)
+ {
+ Map<Node,Integer> result = new Hashtable<Node,Integer>();
+ for (Node node : nodes)
+ {
+ result.put(node, node.objects.size());
+ }
+ return result;
+ }
+
+ void printNodes(List<Node> nodes)
+ {
+ System.out.println("NODES:");
+ for (Node node : nodes)
+ System.out.println(node.bitString());
+ }
+
+ void printNodeObjects(List<Node> nodes)
+ {
+ System.out.println("NODE_CONTENTS:");
+ for (Node node : nodes)
+ System.out.println(node);
+ }
+
+ void printFiles()
+ {
+ for (File f : files)
+ {
+ System.out.println(f.toString());
+ }
+ }
+
+ void printLoadDifferences(Map<Node,Integer> sorted)
+ {
+ System.out.println("");
+ System.out.println("LOAD_INCREASES:");
+ for (Node node : sorted.keySet())
+ {
+ Integer d = sorted.get(node);
+ System.out.println(node.bitString() + ": " + d);
+ }
+ }
+
+ public static void main(String[] args)
+ {
+ // String layoutName;
+ // int B, N, fileCount, fileSize, strip;
+
+ Bits.init();
+
+ if (args.length < 1)
+ bail("usage: Simulator <file.cfg>*");
+
+ current = new Simulator();
+ for (int i = 0; i < args.length; i++)
+ {
+ if (args[i].equals("-p"))
+ current.path(args[++i]);
+ else
+ current.load(args[i]);
+ }
+ current.execute();
+ }
+
+ void path(String path)
+ {
+ if (! path.endsWith("/"))
+ path = path+"/";
+ this.path = path;
+ }
+
+ /**
+ Set properties from file.
+ */
+ public void load(String file)
+ {
+ if (path != null)
+ file = path+file;
+ try
+ {
+ java.io.FileInputStream cfg =
+ new java.io.FileInputStream(file);
+ properties.load(cfg);
+ }
+ catch (java.io.IOException e)
+ {
+ bail("Could not open properties file: " + file);
+ }
+ }
+
+ /**
+ Set properties from memory.
+ */
+ public void initialize(Properties properties)
+ {
+ this.properties = properties;
+ }
+
+ /**
+ Allow subordinate classes to obtain properties.
+ */
+ int integer(String name)
+ {
+ return Tools.integer(properties, name);
+ }
+
+ /**
+ Allow subordinate classes to obtain properties.
+ */
+ String string(String name)
+ {
+ return Tools.string(properties, name);
+ }
+
+ /**
+ Convert properties into simulator variables.
+ Must be called before execute().
+ */
+ public void setup()
+ {
+ // Process input...
+ int arg = 0;
+
+ Simulator.current = this;
+
+ B = Tools.integer(properties, "B");
+ N = Tools.integer(properties, "nodes");
+ fileCount = Tools.integer(properties, "files");
+ faults = Tools.integer(properties, "faults");
+
+ String factoryName = properties.getProperty("FileFactory");
+ if (factoryName == null)
+ bail("No FileFactory given!");
+ else if (factoryName.equals("PlainFiles"))
+ factory = new PlainFiles(this);
+ else if (factoryName.equals("TraceFiles"))
+ factory = new TraceFiles(this);
+ else if (factoryName.equals("RandomFiles"))
+ factory = new RandomFiles(this);
+ else
+ bail("Bad filefactory name: " + factoryName);
+
+ String placerName = Tools.string(properties, "PlacementScheme");
+ if (placerName.equals("Nearest"))
+ {
+ Addressable.display(Addressable.Display.NUMERIC);
+ placer = new Nearest(B);
+ }
+ else if (placerName.equals("Kademlia"))
+ {
+ Addressable.display(Addressable.Display.BITS);
+ placer = new Kademlia(B);
+ }
+ else
+ bail("Bad PlacementScheme name: " + placerName);
+
+ String nodesName = Tools.string(properties, "NodeScheme");
+ if (nodesName.equals("RandomNodes"))
+ hub = new RandomNodes(B);
+ else if (nodesName.equals("SimpleNodes"))
+ hub = new SimpleNodes(B);
+ else
+ bail("Bad NodeScheme name: " + nodesName);
+
+ nodes = new ArrayList<Node>(N);
+ }
+
+ public void execute()
+ {
+ setup();
+
+ // Initialize node addresses...
+ hub.generate(N, nodes);
+ stats.nodes = N;
+
+ // Initialize object addresses...
+ for (int i = 0; i < fileCount; i++)
+ {
+ File file = factory.get();
+
+ int tries = 0;
+ Collection<Obj> set;
+ do
+ {
+ if (tries++ >= maxTries)
+ bail("Could not allocate new object ids!");
+
+ set = placer.allocateFile(file, nodes);
+ file.link(set);
+ files.add(file);
+ }
+ while (objects.containsAny(set));
+ objects.addAll(set);
+ }
+
+ System.out.println("nodes: " + N);
+
+ if (Tools.string(properties, "printFiles").equals("true"))
+ printFiles();
+
+ // Place objects and add up load...
+ placer.place(objects, nodes);
+
+ origCount = countObjects(nodes);
+
+ // printNodes(nodes);
+ if (Tools.string(properties, "printInitialNodes").equals("true"))
+ printNodeObjects(nodes);
+
+ for (int fault = 0; fault < faults; fault++)
+ {
+ // Cause a fault and reallocate objects...
+ int index = Bits.nextInt(nodes.size());
+ Node failed = nodes.remove(index);
+ System.out.println("failed: " + failed.name() +
+ " (" + failed.objects.size() + ")");
+
+ List<Obj> replacements = failed.objects;
+ for (Obj object : replacements)
+ placer.rebuild(object, nodes);
+ if (Tools.string(properties, "printNodes").equals("true"))
+ printNodeObjects(nodes);
+ }
+
+ Map<Node,Integer> faultCount = countObjects(nodes);
+
+ // Find the load difference from before the faults...
+ Map<Node,Integer> diffs = new Hashtable<Node,Integer>();
+ for (Node node : faultCount.keySet())
+ {
+ int before = origCount.get(node);
+ int after = faultCount.get(node);
+ diffs.put(node, new Integer(after-before));
+ }
+
+ // Sort load differences...
+ MapSorter<Node> sorter = new MapSorter<Node>();
+ Map<Node,Integer> sorted = sorter.sort(diffs);
+
+ // Display load differences...
+ if (Tools.string(properties, "printLoadDiffs").equals("true"))
+ printLoadDifferences(sorted);
+
+ // Display data movement stats...
+ int total = 0;
+ for (Node node : nodes)
+ {
+ total += node.pushes;
+ }
+ System.out.println("TOTAL_TRANSFERS: " + total);
+ stats.totalTransfers = total;
+
+ // Display data reallocation declustering...
+ System.out.println("PULL_DECLUSTERING: ");
+ int affected = 0;
+ Node last = null;
+ double percent = 0.0;
+ for (Node node : sorted.keySet())
+ {
+ int d = sorted.get(node);
+ if (d > 0)
+ {
+ percent = (100.0*d)/total;
+ System.out.println(node.name() + ": " +
+ df.format(percent) + "%");
+ affected++;
+ last = node;
+ }
+ }
+
+ stats.results.setProperty("maxDeclustering",
+ new Double(percent).toString());
+ stats.results.setProperty("affected",
+ new Double(affected).toString());
+
+ System.out.println("SERVERS_AFFECTED: " + affected);
+ }
+}
diff --git a/sim/gobs/gobs/sim/Statistics.java b/sim/gobs/gobs/sim/Statistics.java
new file mode 100644
index 0000000..8d90128
--- /dev/null
+++ b/sim/gobs/gobs/sim/Statistics.java
@@ -0,0 +1,19 @@
+
+package gobs.sim;
+
+import java.util.Properties;
+
+/**
+ * Stores results as doubles from a Simulator run.
+ * */
+
+public class Statistics
+{
+ public Properties results = new Properties();
+
+ public int unique = 0;
+ public double nodes = 0;
+ public double maxDeclustering = 0.0;
+ public double totalTransfers = 0;
+ public double affected = 0;
+}
diff --git a/sim/gobs/gobs/sim/TraceFiles.java b/sim/gobs/gobs/sim/TraceFiles.java
new file mode 100644
index 0000000..d70c968
--- /dev/null
+++ b/sim/gobs/gobs/sim/TraceFiles.java
@@ -0,0 +1,76 @@
+
+package gobs.sim;
+
+import java.util.List;
+
+import gobs.util.*;
+
+/**
+ * Generates files from tracefile.
+ *
+ * Overwrites Simulator.fileCount!
+ *
+ * Required properties settings: filetrace
+ * */
+
+class TraceFiles
+ implements FileFactory
+{
+ String filename;
+ List<String> lines = null;
+ int index = 0;
+
+ TraceFiles(Simulator simulator)
+ {
+ filename = simulator.string("filetrace");
+ try
+ {
+ lines = LineReader.read(new java.io.File(filename));
+ }
+ catch (java.io.FileNotFoundException e)
+ {}
+ finally
+ {
+ if (lines == null)
+ Tools.bail("TraceFiles: Could not read: \"" +
+ filename + "\"");
+ }
+
+ simulator.fileCount = lines.size();
+ }
+
+ public File get()
+ {
+ if (index > lines.size())
+ Tools.bail("TraceFiles: Exceeded trace file length!");
+
+ String[] tokens = LineReader.tokenize(lines.get(index));
+
+ String file = tokens[0];
+ if (! file.equals("file"))
+ Tools.bail("Does not compute (should be file stats): " +
+ lines.get(index));
+
+ int size = 0;
+ int strip = 0;
+ int width = 0;
+ int replicas = 0;
+ try
+ {
+ size = Integer.parseInt(tokens[1]);
+ strip = Integer.parseInt(tokens[2]);
+ width = Integer.parseInt(tokens[3]);
+ replicas = Integer.parseInt(tokens[4]);
+ }
+ catch (NumberFormatException e)
+ {
+ Tools.bail("TraceFiles: Error reading file: " +
+ filename + "\n" +
+ "line: " + lines.get(index));
+ }
+
+ index++;
+
+ return new File(size, strip, width, replicas);
+ }
+}
diff --git a/sim/gobs/gobs/sim/UniformNodes.java b/sim/gobs/gobs/sim/UniformNodes.java
new file mode 100644
index 0000000..e9c9ca6
--- /dev/null
+++ b/sim/gobs/gobs/sim/UniformNodes.java
@@ -0,0 +1,149 @@
+
+package gobs.sim;
+
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * New nodes insert themselves in the middle of
+ * the largest gap in the node address space.
+ * */
+
+class UniformNodes
+ extends NodeScheme
+{
+ UniformNodes(int B)
+ {
+ super(B);
+ }
+
+ BigInteger makeID(int[] prefix)
+ {
+ BigInteger result = BigInteger.ZERO;
+
+ for (int i = prefix.length-1; i >= 0; i--)
+ {
+ if (prefix[i] == 1)
+ result.setBit(i);
+ }
+ System.out.println("UniformNodes.makeID(): " + result);
+
+ return result;
+ }
+
+ /**
+ Fill in the biggest gap with a new node.
+ */
+ BigInteger assignID(List<Node> nodes)
+ {
+ int result = -1;
+
+ for (int b = 1; b < B; b++)
+ {
+ Set<int[]> all = allPossible(B);
+
+ for (int[] prefix : all)
+ {
+ boolean found = false;
+ for (Node node : nodes)
+ {
+ if (node.prefix(prefix))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (! found)
+ {
+ BigInteger id = makeID(prefix);
+ return id;
+ }
+ }
+ }
+
+ System.out.println("UniformNodes.assignID(): " +
+ "could not generate address!");
+ System.exit(1);
+ return BigInteger.ONE.negate();
+ }
+
+ /**
+ All possible bit arrays of length i.
+ */
+ Set<int[]> allPossible(int i)
+ {
+ int[] A = new int[i];
+ return children(A, 0);
+ }
+
+ /**
+ Helper for allPossible().
+ */
+ Set<int[]> children(int[] A, int b)
+ {
+ Set<int[]> result = new HashSet<int[]>();
+
+ int[] v1 = copy(A, b);
+ int[] v2 = copy(A, b);
+ v1[b] = 0;
+ v2[b] = 1;
+
+ if (b == A.length-1)
+ {
+ result.add(v1);
+ result.add(v2);
+ }
+ else
+ {
+ result.addAll(children(v1,b+1));
+ result.addAll(children(v2,b+1));
+ }
+
+ return result;
+ }
+
+ /**
+ Obtain a new array the size of the given array with
+ elements copied up to item n.
+ */
+ int[] copy(int[] array, int n)
+ {
+ int[] result = new int[array.length];
+
+ for (int i = 0; i < n; i++)
+ result[i] = array[i];
+
+ return result;
+ }
+
+ public void generate(int count, List<Node> nodes)
+ {
+ for (int i = 0; i < count; i++)
+ {
+ BigInteger id = assignID(nodes);
+ Node newNode = new Node(B, id);
+ }
+ }
+
+ /*
+ Debugging only.
+
+ public static void main(String[] args)
+ {
+ int B = 6;
+ BigInteger i = new BigInteger("8");
+ int[] A = Node.bitArray(B, i);
+ UniformNodes u = new UniformNodes(B);
+ System.out.println(u.makeID(A));
+
+ System.out.println("---");
+
+ Set<int[]> s = u.allPossible(3);
+ System.out.println(s.size());
+ for (int[] v : s)
+ System.out.println(Node.arrayString(v));
+
+ // System.out.println(allPossible(3));
+ }
+ */
+}
diff --git a/sim/gobs/gobs/sweep/Affected01.java b/sim/gobs/gobs/sweep/Affected01.java
new file mode 100644
index 0000000..0b52468
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Affected01.java
@@ -0,0 +1,38 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import gobs.sim.*;
+import gobs.util.Tools;
+import gobs.plot.SimplePlot;
+
+/**
+ * Modifies node count.
+ * Reports fraction of servers involved in rebuild.
+ *
+ * Usage: Affected01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * */
+
+class Affected01
+ extends Sweep
+{
+ Affected01(String[] args)
+ {
+ super(args);
+ }
+
+ public static void main(String[] args)
+ {
+ Affected01 sweep = new Affected01(args);
+
+ int minNodes = Tools.integer(sweep.properties, "minNodes");
+ int maxNodes = Tools.integer(sweep.properties, "maxNodes");
+ List<String> values = Sweep.tens(minNodes, maxNodes);
+
+ sweep.execute("Affected", "nodes", values, "affected");
+
+ SimplePlot.plot(sweep.series, "Number of Affected Servers",
+ "nodes", "load", "Affected01.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java
new file mode 100644
index 0000000..148a7de
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Balance01.java
@@ -0,0 +1,46 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import org.jfree.data.xy.XYSeries;
+
+import gobs.sim.*;
+import gobs.util.*;
+import gobs.plot.SimplePlot;
+
+/**
+ * Reports object load on each server.
+ *
+ * Usage: Balance01 gobs.cfg params.cfg
+ * */
+
+class Balance01
+{
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ Properties properties = Sweep.getopts(args);
+ properties.setProperty("faults", "0");
+
+ Simulator simulator = new Simulator();
+ simulator.initialize(properties);
+ simulator.execute();
+
+ XYSeries series = new XYSeries("Balance");
+
+ MapSorter<Node> sorter = new MapSorter<Node>();
+ Map<Node,Integer> sorted = sorter.sort(simulator.origCount);
+
+ int i = 0;
+ for (Node node: sorted.keySet())
+ {
+ Integer load = sorted.get(node);
+ series.add(i++, load);
+ }
+
+ SimplePlot.plot(series, "Load Distribution", "nodes", "load",
+ "Balance01.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Balance02.java b/sim/gobs/gobs/sweep/Balance02.java
new file mode 100644
index 0000000..6deceaa
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Balance02.java
@@ -0,0 +1,42 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import org.jfree.data.xy.XYSeries;
+
+import gobs.sim.*;
+import gobs.util.*;
+import gobs.plot.SimplePlot;
+
+/**
+ * Reports object load on each server.
+ *
+ * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg
+ * */
+
+class Balance02
+{
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ Properties properties = Sweep.getopts(args);
+ properties.setProperty("faults", "0");
+
+ Simulator simulator = new Simulator();
+ simulator.initialize(properties);
+ simulator.execute();
+
+ XYSeries series = new XYSeries("Balance");
+
+ int i = 0;
+ for (Node node: simulator.nodes)
+ {
+ series.add(i++, node.objects.size());
+ }
+
+ SimplePlot.plot(series, "Load Distribution", "nodes", "load",
+ "Balance02.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Decluster01.java b/sim/gobs/gobs/sweep/Decluster01.java
new file mode 100644
index 0000000..f67cd06
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Decluster01.java
@@ -0,0 +1,37 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import gobs.util.Tools;
+import gobs.plot.SimplePlot;
+
+/**
+ * Modifies node count. Reports object movement load on the
+ * heaviest server during rebuild.
+ *
+ * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * */
+
+class Decluster01
+ extends Sweep
+{
+ Decluster01(String[] args)
+ {
+ super(args);
+ }
+
+ public static void main(String[] args)
+ {
+ Decluster01 sweep = new Decluster01(args);
+
+ int minNodes = Tools.integer(sweep.properties, "minNodes");
+ int maxNodes = Tools.integer(sweep.properties, "maxNodes");
+ List<String> values = Sweep.tens(minNodes, maxNodes);
+
+ sweep.execute("Declustering", "nodes", values, "maxDeclustering");
+
+ SimplePlot.plot(sweep.series, "Maximum Rebuild Load", "nodes", "load",
+ "Decluster01.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster02.java
new file mode 100644
index 0000000..f5fb374
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Decluster02.java
@@ -0,0 +1,58 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+// import gobs.sim.*;
+import gobs.util.*;
+import gobs.plot.MultiplePlot;
+
+/**
+ * Modifies node count. Reports object movement load on the
+ * heaviest server during rebuild.
+ *
+ * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
+ * */
+
+class Decluster02
+{
+ static Properties properties;
+
+ public static void main(String[] args)
+ {
+ Bits.init();
+
+ properties = Sweep.getopts(args);
+
+ int minNodes = Tools.integer(properties, "minNodes");
+ int maxNodes = Tools.integer(properties, "maxNodes");
+
+ final XYSeriesCollection collection = new XYSeriesCollection();
+
+ List<String> values = null;
+
+ Sweep nearestSweep = new Sweep();
+ properties.setProperty("PlacementScheme", "Nearest");
+ nearestSweep.repeats = Tools.integer(properties, "repeats");
+ values = Sweep.tens(minNodes, maxNodes);
+ nearestSweep.properties = properties;
+ nearestSweep.execute("PAST", "nodes", values, "maxDeclustering");
+
+ Sweep kademliaSweep = new Sweep();
+ properties.setProperty("PlacementScheme", "Kademlia");
+ kademliaSweep.repeats = Tools.integer(properties, "repeats");
+ values = Sweep.tens(minNodes, maxNodes);
+ kademliaSweep.properties = properties;
+ kademliaSweep.execute("Kademlia", "nodes", values,
+ "maxDeclustering");
+
+ collection.addSeries(nearestSweep.series);
+ collection.addSeries(kademliaSweep.series);
+
+ MultiplePlot.plot(collection, "Maximum Rebuild Load",
+ "nodes", "load", "Decluster01.eps");
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Sweep.java b/sim/gobs/gobs/sweep/Sweep.java
new file mode 100644
index 0000000..1b200f8
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -0,0 +1,168 @@
+
+package gobs.sweep;
+
+import java.util.*;
+
+import org.jfree.data.xy.XYSeries;
+
+import gobs.sim.*;
+import gobs.util.*;
+
+/**
+ * Reusable framework for parameter sweeps.
+ *
+ * Experiments that subclass this class
+ * */
+
+class Sweep
+{
+ Properties properties = new Properties();
+ List<String> values;
+ List<Statistics> stats = new ArrayList<Statistics>();
+ XYSeries series;
+
+ int repeats;
+
+ static String path = null;
+
+ Sweep()
+ {}
+
+ Sweep(String[] args)
+ {
+ properties = getopts(args);
+ }
+
+ /**
+ Read properties files and
+ repeat count from command line,
+ initialize random number generator, etc.
+ */
+ static Properties getopts(String[] args)
+ {
+ Properties result = new Properties();
+
+ if (args.length == 0)
+ {
+ System.out.println("usage: -n <n> <file.cfg>+");
+ System.exit(0);
+ }
+
+ int cfgs = 0;
+ for (int i = 0; i < args.length; i++)
+ {
+ if (args[i].equals("-n"))
+ {
+ result.setProperty("repeats", args[++i]);
+ }
+ else if (args[i].equals("-p"))
+ {
+ path(args[++i]);
+ }
+ else
+ {
+ load(result, args[i]);
+ cfgs++;
+ }
+ }
+
+ if (cfgs == 0)
+ Tools.bail("Need at least one input file!");
+
+ return result;
+ }
+
+ static void path(String p)
+ {
+ if (! p.endsWith("/"))
+ p = p+"/";
+ path = p;
+ }
+
+ /**
+ Sweep over all integer values between min and max.
+ */
+ static List<String> all(int min, int max)
+ {
+ List<String> result = new ArrayList<String>(max-min+1);
+ for (int i = min; i <= max; i++)
+ result.add(new Integer(i).toString());
+ return result;
+ }
+
+ /**
+ Sweep over all integer values between min and max that
+ are multiples of 10.
+ */
+ static List<String> tens(int min, int max)
+ {
+ List<String> result = new ArrayList<String>(max-min+1);
+ result.add(new Integer(min).toString());
+ for (int i = min+1; i < max; i++)
+ if (i % 10 == 0)
+ result.add(new Integer(i).toString());
+ result.add(new Integer(max).toString());
+ return result;
+ }
+
+ /**
+ Load a properties file.
+ */
+ static void load(Properties properties, String file)
+ {
+ if (path != null)
+ file = path+file;
+
+ try
+ {
+ java.io.FileInputStream cfg =
+ new java.io.FileInputStream(file);
+ properties.load(cfg);
+ }
+ catch (java.io.IOException e)
+ {
+ Tools.bail("Could not open properties file!");
+ }
+ }
+
+ /**
+ Execute the parameter sweep.
+ For each value in values, substitute it for xname in the
+ properties object. Run the simulation and extract the
+ yname property for the plot.
+ */
+ void execute(String description, String xname,
+ List<String> values, String yname)
+ {
+ if (repeats <= 0)
+ System.out.println("WARNING: repeats=" + repeats);
+
+ series = new XYSeries(description);
+ for (String v : values)
+ {
+ double total = 0.0;
+ for (int i = 0; i < repeats; i++)
+ {
+ System.out.println("execute");
+ Simulator simulator = new Simulator();
+ properties.setProperty("unique", new Integer(i).toString());
+ properties.setProperty(xname, v);
+ simulator.initialize(properties);
+ simulator.execute();
+ stats.add(simulator.stats);
+ total += result(simulator, yname);
+ }
+ series.add(Double.parseDouble(v), total/repeats);
+ }
+ }
+
+ /**
+ Extract the variable name from the simulator results.
+ */
+ double result(Simulator simulator, String name)
+ {
+ return
+ Double.parseDouble
+ ((String) simulator.stats.results.get(name));
+ }
+}
diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/gobs/util/Bits.java
new file mode 100644
index 0000000..8851df9
--- /dev/null
+++ b/sim/gobs/gobs/util/Bits.java
@@ -0,0 +1,119 @@
+
+package gobs.util;
+
+import java.util.*;
+
+/**
+ * Provides random bits, statically.
+ * Kills VM exit code 2 on misuse.
+ * */
+
+public class Bits
+{
+ public static Random rng = null;
+ static boolean locked = false;
+ static boolean ready = false;
+
+ /** If not locked, seed the generator with the clock. */
+ public static void init()
+ {
+ init(System.currentTimeMillis());
+ }
+
+ /**
+ If not locked, seed the generator
+ @param s The seed.
+ */
+ public static void init(long s)
+ {
+ if (! locked)
+ {
+ // System.out.println("Seeding RNG...");
+ rng = new Random(s);
+ ready = true;
+ }
+ }
+
+ /**
+ Lock the generator to prevent seeding
+ */
+ public static void lock()
+ {
+ locked = true;
+ }
+
+ /**
+ Unlock the generator
+ */
+ public static void unlock()
+ {
+ locked = false;
+ }
+
+ public static double nextDouble()
+ {
+ if (! ready)
+ {
+ System.err.println("Bits not ready!");
+ System.exit(2);
+ }
+ return rng.nextDouble();
+ }
+
+ public static double nextDouble(double d)
+ {
+ return rng.nextDouble() * d;
+ }
+
+ public static int nextInt()
+ {
+ if (! ready)
+ {
+ System.err.println("Bits not ready!");
+ System.exit(2);
+ }
+ return rng.nextInt();
+ }
+
+ /**
+ Return a integer in [0..t).
+ */
+ public static int nextInt(int t)
+ {
+ double d = nextDouble();
+ int i = (new Double(d * t)).intValue();
+ return i;
+ }
+
+ public static boolean nextBoolean()
+ {
+ if (! ready)
+ {
+ System.err.println("Bits not ready!");
+ System.exit(2);
+ }
+ return rng.nextBoolean();
+ }
+
+ public static long nextLong()
+ {
+ if (! ready)
+ {
+ System.err.println("Bits not ready!");
+ System.exit(2);
+ }
+ return rng.nextLong();
+ }
+
+ public static long nextLong(long t)
+ {
+ double d = nextDouble();
+ long i = (new Double(d * t)).longValue();
+ return i;
+ }
+
+ public static void nextBytes(byte[] bytes)
+ {
+ rng.nextBytes(bytes);
+ }
+}
diff --git a/sim/gobs/gobs/util/LineReader.java b/sim/gobs/gobs/util/LineReader.java
new file mode 100644
index 0000000..f090ac0
--- /dev/null
+++ b/sim/gobs/gobs/util/LineReader.java
@@ -0,0 +1,105 @@
+
+package gobs.util;
+
+import java.util.*;
+
+public class LineReader
+{
+ LineReader()
+ {}
+
+ public static List<String> read(java.io.File file)
+ throws java.io.FileNotFoundException
+ {
+ java.io.BufferedReader reader =
+ new java.io.BufferedReader(new java.io.FileReader(file));
+ return read(reader);
+ }
+
+ public static List<String> read(String s)
+ {
+ java.io.BufferedReader reader =
+ new java.io.BufferedReader(new java.io.StringReader(s));
+ return read(reader);
+ }
+
+ public static List<String> read(java.io.BufferedReader reader)
+ {
+ List<String> result = new ArrayList<String>();
+ try
+ {
+ String prevline = "";
+ String line = "";
+ while ((line = reader.readLine()) != null)
+ {
+ int hash = line.indexOf("#");
+ if (hash >= 0)
+ line = line.substring(0,hash);
+ line = spaces(line);
+ line = (prevline + " " + line).trim();
+ if (line.endsWith("\\"))
+ {
+ line = line.substring(0, line.length()-2);
+ prevline = line;
+ continue;
+ }
+ else
+ {
+ prevline = "";
+ line = line.trim();
+ if (line.length() > 0)
+ result.add(line);
+ }
+ }
+ }
+ catch (java.io.IOException e)
+ {
+ System.out.println("LineReader: I/O problem.");
+ return null;
+ }
+ return result;
+ }
+
+ public static String spaces(String line)
+ {
+ String result = "";
+ for (int i = 0; i < line.length(); i++)
+ {
+ if (line.charAt(i) == '=' &&
+ line.charAt(i+1) != '=' &&
+ line.charAt(i-1) != '=')
+ {
+ result += " = ";
+ }
+ else
+ result += line.substring(i,i+1);
+ }
+ return result;
+ }
+
+ public static String[] tokenize(String line)
+ {
+ if (line == null)
+ return null;
+ List<String> words = new ArrayList<String>();
+ String[] ws = line.split("\\s");
+ for (int i = 0; i < ws.length; i++)
+ if (ws[i].length() > 0)
+ words.add(ws[i]);
+ String[] result = new String[words.size()];
+ for (int i = 0; i < words.size(); i++)
+ result[i] = words.get(i);
+ return result;
+ }
+
+ /*
+ public static List<String> list(String line)
+ {
+ List<String> result = new ArrayList<String>();
+ String[] tokens = tokenize(line);
+ for (int i = 0; i < tokens.length; i++)
+ result.add(tokens[i]);
+ return result;
+ }
+ */
+}
diff --git a/sim/gobs/gobs/util/MapSorter.java b/sim/gobs/gobs/util/MapSorter.java
new file mode 100644
index 0000000..43f5641
--- /dev/null
+++ b/sim/gobs/gobs/util/MapSorter.java
@@ -0,0 +1,53 @@
+
+package gobs.util;
+
+import java.util.*;
+
+public class MapSorter<T>
+{
+ public LinkedHashMap<T,Integer> sort(Map<T,Integer> input)
+ {
+ LinkedHashMap<T,Integer> result = new LinkedHashMap<T,Integer>();
+
+ while (! input.isEmpty())
+ {
+ int minValue = Integer.MAX_VALUE;
+ T minThing = null;
+ for (T thing : input.keySet())
+ {
+ Integer i = input.get(thing);
+ if (i < minValue)
+ {
+ minValue = i;
+ minThing = thing;
+ }
+ }
+ input.remove(minThing);
+ result.put(minThing, new Integer(minValue));
+ }
+
+ return result;
+ }
+}
+
+ /* Debugging sortMap():
+
+ public static void main(String[] args)
+ {
+ int B = 4;
+
+ Map<Node,Integer> table = new Hashtable<Node,Integer>();
+
+ table.put(new Node(B, new BigInteger("3")), 2);
+ table.put(new Node(B, new BigInteger("5")), 1);
+ table.put(new Node(B, new BigInteger("8")), 4);
+ table.put(new Node(B, new BigInteger("3")), 3);
+
+ Map<Node,Integer> sorted = (Map<Node,Integer>) sortMap(table);
+ for (Node node : sorted.keySet())
+ {
+ System.out.println(node.toString() + " " + sorted.get(node));
+ }
+ }
+ */
+
diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/gobs/util/Tools.java
new file mode 100644
index 0000000..52950f5
--- /dev/null
+++ b/sim/gobs/gobs/util/Tools.java
@@ -0,0 +1,53 @@
+
+package gobs.util;
+
+import java.util.Properties;
+
+/**
+ * Helpful wrappers for Properties and fatal errors.
+ * */
+
+public class Tools
+{
+ public static int integer(Properties properties, String variable)
+ {
+ int result = 0;
+ try
+ {
+ result =
+ Integer.parseInt(properties.getProperty(variable).trim());
+ }
+ catch (NumberFormatException e)
+ {
+ bail("Could not read integer from property: " + variable +
+ " = " + properties.getProperty(variable));
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
+
+ public static String string(Properties properties, String variable)
+ {
+ String result = null;
+ try
+ {
+ result = properties.getProperty(variable).trim();
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
+
+ public static void bail(String msg)
+ {
+ System.out.println(msg);
+
+ // Exit code 1 is a Java error:
+ System.exit(2);
+ }
+}
diff --git a/sim/gobs/manifest.mf b/sim/gobs/manifest.mf
index d1e08e4..acdcf8d 100644
--- a/sim/gobs/manifest.mf
+++ b/sim/gobs/manifest.mf
@@ -1,2 +1,2 @@
GOBS-Version: 0.9.0
-Main-Class: gobs.Simulator
+Main-Class: gobs.sim.Simulator
diff --git a/sim/gobs/params.cfg b/sim/gobs/params.cfg
index d078870..9b089f0 100644
--- a/sim/gobs/params.cfg
+++ b/sim/gobs/params.cfg
@@ -3,39 +3,51 @@
## General parameters...
# Bit-length of addresses:
-B = 8
+B = 16
# Number of servers:
-nodes = 4
+nodes = 32
# Number of files:
-files = 3
+files = 10000
+# Number of faults:
+faults = 1
-### Choose one of the following sections:
+### Choose a PlacementScheme implementation
-# FileFactory implementation
-#filefactory = PlainFiles
+# PlacementScheme = Kademlia
+PlacementScheme = Nearest
+
+### Choose a NodeScheme implementation
+
+# NodeScheme = RandomNodes
+NodeScheme = SimpleNodes
+
+### Choose one of the following FileFactory sections:
+
+# FileFactory implementation PlainFiles
+FileFactory = PlainFiles
# File size:
-filesize = 1
+filesize = 14
# Strip size:
filestrip = 4
# File/object replicas:
-filereplicas = 4
+filereplicas = 1
# Number of objects per file:
-filewidth = 4
+filewidth = 1
-# FileFactory implementation:
-filefactory = TraceFiles
+# FileFactory implementation TraceFiles
+#FileFactory = TraceFiles
# Trace filename:
-filetrace = traces/test01.trace
+#filetrace = traces/test01.trace
-# FileFactory implementation:
-filefactory = RandomFiles
+# FileFactory implementation RandomFiles
+#FileFactory = RandomFiles
# Strip size:
-filestrip = 4
+#filestrip = 4
# Max size of big files:
-filebigmax = 100
+#filebigmax = 100
# Min size of big files:
-filebigmin = 50
+#filebigmin = 50
# Max size of small files:
-filesmallmax = 20
+#filesmallmax = 20
# Min size of small files:
-filesmallmin = 0
+#filesmallmin = 0
diff --git a/sim/gobs/plot/SimplePlot.java b/sim/gobs/plot/SimplePlot.java
deleted file mode 100644
index e1597e3..0000000
--- a/sim/gobs/plot/SimplePlot.java
+++ /dev/null
@@ -1,109 +0,0 @@
-
-package plot;
-
-import java.awt.*;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-
-import java.io.BufferedOutputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import java.util.LinkedHashMap;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
-
-import org.jfree.chart.ChartFactory;
-import org.jfree.chart.JFreeChart;
-import org.jfree.chart.plot.PlotOrientation;
-import org.jfree.chart.plot.XYPlot;
-import org.jfree.chart.renderer.xy.XYDotRenderer;
-import org.jfree.data.xy.XYDataset;
-import org.jfree.data.xy.XYSeries;
-import org.jfree.data.xy.XYSeriesCollection;
-
-public class SimplePlot
-{
- public static boolean plot(LinkedHashMap<Double,Double> data,
- String title, String xlabel,
- String ylabel, String output)
- {
- EPSDocumentGraphics2D g2d = null;
- Rectangle2D.Double rectangle = null;
- OutputStream out = null;
-
- int w = 400;
- int h = 400;
-
- try
- {
- out = new FileOutputStream(output);
- out = new BufferedOutputStream(out);
-
- g2d = new EPSDocumentGraphics2D(false);
- g2d.setGraphicContext
- (new org.apache.xmlgraphics.java2d.GraphicContext());
-
- rectangle = new Rectangle2D.Double(0, 0, w, h);
-
- g2d.setGraphicContext
- (new org.apache.xmlgraphics.java2d.GraphicContext());
- g2d.setupDocument(out, w, h);
-
- //Paint a bounding box
- // g2d.drawRect(20, 20, 40, 40);
- }
- catch (IOException e)
- {
- System.out.println("Problem with file: " + output);
- return false;
- }
-
- final XYSeries series = new XYSeries("Random Data");
- for (Double x : data.keySet())
- {
- series.add(x, data.get(x));
- }
- final XYDataset collection = new XYSeriesCollection(series);
-
- final boolean withLegend = false;
-
- JFreeChart chart =
- ChartFactory.createXYLineChart
- (title, xlabel, ylabel, collection,
- PlotOrientation.VERTICAL, withLegend, false, false);
-
- XYPlot plot = chart.getXYPlot();
- plot.setBackgroundPaint(Color.WHITE);
- chart.draw(g2d, rectangle);
-
- try
- {
- g2d.finish();
- }
- catch (Exception e)
- {
- System.out.println("Err!");
- }
- IOUtils.closeQuietly(out);
-
- return true;
- }
-
- /**
- Debugging only.
- */
- public static void main(String[] args)
- {
- LinkedHashMap<Double,Double> data =
- new LinkedHashMap<Double,Double>();
-
- data.put(3.0,4.0);
- data.put(4.0,5.0);
- data.put(5.0,1.0);
-
- plot(data, "TITLE", "XL", "YL", "tmp.eps");
- }
-}
diff --git a/sim/gobs/sweep/Decluster01.cfg b/sim/gobs/sweep/Decluster01.cfg
deleted file mode 100644
index 48f40c3..0000000
--- a/sim/gobs/sweep/Decluster01.cfg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-minNodes = 8
-maxNodes = 16
diff --git a/sim/gobs/sweep/Decluster01.java b/sim/gobs/sweep/Decluster01.java
deleted file mode 100644
index 70e640d..0000000
--- a/sim/gobs/sweep/Decluster01.java
+++ /dev/null
@@ -1,110 +0,0 @@
-
-package sweep;
-
-import java.util.*;
-
-import gobs.*;
-
-import plot.SimplePlot;
-
-/**
- * Modifies node count. Reports object movement load on the
- * heaviest server during rebuild.
- *
- * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
- * */
-
-class Decluster01
-{
- static Properties properties = new Properties();
- static List<String> values;
- static List<Statistics> stats = new ArrayList<Statistics>();
- static int repeats;
-
- public static void main(String[] args)
- {
- if (args.length == 0)
- {
- System.out.println("usage: -n <n> <file.cfg>+");
- System.exit(0);
- }
-
- Bits.init();
-
- int cfgs = 0;
- for (int i = 0; i < args.length; i++)
- {
- if (args[i].equals("-n"))
- try
- {
- repeats = Integer.parseInt(args[++i]);
- }
- catch (NumberFormatException e)
- {
- Tools.bail("Bad number: " + args[i+1]);
- }
- else
- {
- load(args[i]);
- cfgs++;
- }
- }
-
- if (cfgs == 0)
- Tools.bail("Need at least one input file!");
-
- int minNodes = Tools.integer(properties, "minNodes");
- int maxNodes = Tools.integer(properties, "maxNodes");
- values = Sweep.allValues(minNodes, maxNodes);
-
- execute();
- plot("Decluster01.eps");
- }
-
- static void load(String file)
- {
- try
- {
- java.io.FileInputStream cfg = new java.io.FileInputStream(file);
- properties.load(cfg);
- }
- catch (java.io.IOException e)
- {
- Tools.bail("Could not open properties file!");
- }
- }
-
- static void execute()
- {
- for (String v : values)
- {
- for (int i = 0; i < repeats; i++)
- {
- Simulator simulator = new Simulator();
- properties.setProperty("unique", new Integer(i).toString());
- properties.setProperty("nodes", v);
- simulator.initialize(properties);
- simulator.execute();
- stats.add(simulator.stats);
- }
- }
- }
-
- static void plot(String output)
- {
- System.out.println("plotting to " + output + " ...");
-
- LinkedHashMap<Double,Double> data =
- new LinkedHashMap<Double,Double>();
-
- System.out.print("adding " + stats.size() + " points...");
-
- for (Statistics s : stats)
- data.put(s.nodes, s.maxDeclustering);
-
- SimplePlot.plot(data, "Maximum Rebuild Load", "nodes", "load",
- output);
-
- System.out.println(" done.");
- }
-}
diff --git a/sim/gobs/sweep/Sweep.java b/sim/gobs/sweep/Sweep.java
deleted file mode 100644
index cfcb865..0000000
--- a/sim/gobs/sweep/Sweep.java
+++ /dev/null
@@ -1,22 +0,0 @@
-
-package sweep;
-
-import java.util.*;
-
-/**
- * Reusable helpers for parameter sweeps.
- * */
-
-class Sweep
-{
- /**
- Sweep over all integer values between min and max.
- */
- static List<String> allValues(int min, int max)
- {
- List<String> result = new ArrayList<String>(max-min+1);
- for (int i = min; i <= max; i++)
- result.add(new Integer(i).toString());
- return result;
- }
-}
diff --git a/sim/gobs/sweeps/Decluster01.cfg b/sim/gobs/sweeps/Decluster01.cfg
new file mode 100644
index 0000000..d094f3b
--- /dev/null
+++ b/sim/gobs/sweeps/Decluster01.cfg
@@ -0,0 +1,3 @@
+
+minNodes = 10
+maxNodes = 100
diff --git a/sim/gobs/sweeps/nodes.cfg b/sim/gobs/sweeps/nodes.cfg
new file mode 100644
index 0000000..d094f3b
--- /dev/null
+++ b/sim/gobs/sweeps/nodes.cfg
@@ -0,0 +1,3 @@
+
+minNodes = 10
+maxNodes = 100
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-64-g17142f4
by noreply@mcs.anl.gov 13 Aug '09
by noreply@mcs.anl.gov 13 Aug '09
13 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 17142f431fa29d9f658584e6bfc606108a5457fd (commit)
from 0e1877f6e0757a7bd6421c879001e5c19477dab0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 17142f431fa29d9f658584e6bfc606108a5457fd
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Thu Aug 13 14:05:27 2009 -0500
Basic plot for declustering experiment works.
Can obtain basic declustering stats for a rebuild
over a range of node counts.
Also made multiple internal changes to property processing.
Unfortunately, JFreeChart does not seem to generate text
on Linux but does on Windows, may be a font issue, will keep
looking...
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 30 +++++++++--
sim/gobs/gobs/PlainFiles.java | 8 ++--
sim/gobs/gobs/RandomFiles.java | 12 ++--
sim/gobs/gobs/RandomNodes.java | 2 +-
sim/gobs/gobs/Simulator.java | 114 ++++++++++++++++++---------------------
sim/gobs/gobs/Statistics.java | 10 +++-
sim/gobs/gobs/Tools.java | 53 ++++++++++++++++++
sim/gobs/gobs/TraceFiles.java | 10 ++--
sim/gobs/sweep/Decluster01.cfg | 5 ++
sim/gobs/sweep/Decluster01.java | 79 +++++++++++++++++++++------
sim/gobs/sweep/Sweep.java | 22 ++++++++
11 files changed, 244 insertions(+), 101 deletions(-)
create mode 100644 sim/gobs/gobs/Tools.java
create mode 100644 sim/gobs/sweep/Decluster01.cfg
create mode 100644 sim/gobs/sweep/Sweep.java
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index 01eb285..4d6c77f 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -7,7 +7,7 @@
basedir=".">
<property name="prereqs"
- value="prereqs/commons-io-1.4.jar;prereqs/jfreechart-1.0.13.jar;prereqs/jcommon-1.0.16.jar;xmlgraphics-commons-1.4svn.jar"/>
+ value=".:./prereqs/commons-io-1.4.jar:./prereqs/jfreechart-1.0.13.jar:./prereqs/xmlgraphics-commons-1.4svn.jar" />
<target name="all"
depends="jar" />
@@ -21,13 +21,14 @@
</jar>
</target>
- <target name="compile" depends="compile_gobs,compile_plot"/>
+ <target name="compile" depends="compile_gobs,compile_plot,compile_sweep"/>
<target name="compile_gobs">
<javac srcdir="gobs"
classpath="."
listfiles="${lf}"
- debug="true">
+ debug="true"
+ debuglevel="source,lines,vars">
<compilerarg value="-Xlint"/>
</javac>
</target>
@@ -36,7 +37,19 @@
<javac srcdir="plot"
classpath="${prereqs}"
listfiles="${lf}"
- debug="true">
+ debug="true"
+ debuglevel="source,lines,vars"
+ verbose="${v}">
+ <compilerarg value="-Xlint"/>
+ </javac>
+ </target>
+
+ <target name="compile_sweep">
+ <javac srcdir="sweep"
+ classpath="${prereqs}"
+ listfiles="${lf}"
+ debug="true"
+ debuglevel="source,lines,vars">
<compilerarg value="-Xlint"/>
</javac>
</target>
@@ -57,10 +70,17 @@
<fileset dir=".">
<filename name="GOBS.jar" />
</fileset>
- <fileset dir="gobs" >
+ <fileset dir="gobs">
+ <filename name="*.class" />
+ </fileset>
+ <fileset dir="plot">
+ <filename name="*.class" />
+ </fileset>
+ <fileset dir="sweep">
<filename name="*.class" />
</fileset>
</delete>
+ <delete dir="docs" />
</target>
</project>
diff --git a/sim/gobs/gobs/PlainFiles.java b/sim/gobs/gobs/PlainFiles.java
index 5d226f4..71ff3c7 100644
--- a/sim/gobs/gobs/PlainFiles.java
+++ b/sim/gobs/gobs/PlainFiles.java
@@ -18,10 +18,10 @@ class PlainFiles
PlainFiles(Simulator simulator)
{
- size = simulator.integerProperty("filesize");
- strip = simulator.integerProperty("filestrip");
- width = simulator.integerProperty("filewidth");
- replicas = simulator.integerProperty("filereplicas");
+ size = simulator.integer("filesize");
+ strip = simulator.integer("filestrip");
+ width = simulator.integer("filewidth");
+ replicas = simulator.integer("filereplicas");
}
public File get()
diff --git a/sim/gobs/gobs/RandomFiles.java b/sim/gobs/gobs/RandomFiles.java
index 20638bf..4b4394b 100644
--- a/sim/gobs/gobs/RandomFiles.java
+++ b/sim/gobs/gobs/RandomFiles.java
@@ -29,12 +29,12 @@ class RandomFiles
RandomFiles(Simulator simulator)
{
- sizebigmax = simulator.integerProperty("filebigmax");
- sizebigmin = simulator.integerProperty("filebigmin");
- sizesmallmax = simulator.integerProperty("filesmallmax");
- sizesmallmin = simulator.integerProperty("filesmallmin");
- strip = simulator.integerProperty("filestrip");
- width = simulator.integerProperty("filewidth");
+ sizebigmax = simulator.integer("filebigmax");
+ sizebigmin = simulator.integer("filebigmin");
+ sizesmallmax = simulator.integer("filesmallmax");
+ sizesmallmin = simulator.integer("filesmallmin");
+ strip = simulator.integer("filestrip");
+ width = simulator.integer("filewidth");
}
public File get()
diff --git a/sim/gobs/gobs/RandomNodes.java b/sim/gobs/gobs/RandomNodes.java
index 9358245..bee7960 100644
--- a/sim/gobs/gobs/RandomNodes.java
+++ b/sim/gobs/gobs/RandomNodes.java
@@ -26,7 +26,7 @@ class RandomNodes
do
{
if (tries++ >= Simulator.maxTries)
- Simulator.bail("Could not assign unique node id!");
+ Tools.bail("Could not assign unique node id!");
id = new BigInteger(B, Bits.rng);
node = new Node(B, id);
diff --git a/sim/gobs/gobs/Simulator.java b/sim/gobs/gobs/Simulator.java
index cf254f2..4c76689 100644
--- a/sim/gobs/gobs/Simulator.java
+++ b/sim/gobs/gobs/Simulator.java
@@ -16,7 +16,7 @@ import java.util.*;
* chunk: Size of a contiguous chunk
* */
-class Simulator
+public class Simulator
{
int B;
int N;
@@ -46,7 +46,7 @@ class Simulator
DecimalFormat df = new DecimalFormat("0.0");
- Statistics stats = new Statistics();
+ public Statistics stats = new Statistics();
public Simulator()
{}
@@ -83,14 +83,6 @@ class Simulator
}
}
- static void bail(String msg)
- {
- System.out.println(msg);
-
- // Exit code 1 is a Java error:
- System.exit(2);
- }
-
public static void main(String[] args)
{
// String layoutName;
@@ -99,7 +91,7 @@ class Simulator
Bits.init();
if (args.length < 1)
- bail("usage: Simulator <file.cfg>*");
+ Tools.bail("usage: Simulator <file.cfg>*");
current = new Simulator();
for (String arg : args)
@@ -119,11 +111,35 @@ class Simulator
}
catch (java.io.IOException e)
{
- bail("Could not open properties file!");
+ Tools.bail("Could not open properties file!");
}
}
/**
+ Set properties from memory.
+ */
+ public void initialize(Properties properties)
+ {
+ this.properties = properties;
+ }
+
+ /**
+ Allow subordinate classes to obtain properties.
+ */
+ int integer(String name)
+ {
+ return Tools.integer(properties, name);
+ }
+
+ /**
+ Allow subordinate classes to obtain properties.
+ */
+ String string(String name)
+ {
+ return Tools.string(properties, name);
+ }
+
+ /**
Convert properties into simulator variables.
Must be called before execute().
*/
@@ -132,13 +148,15 @@ class Simulator
// Process input...
int arg = 0;
- B = integerProperty("B");
- N = integerProperty("nodes");
- fileCount = integerProperty("files");
+ Simulator.current = this;
+
+ B = Tools.integer(properties, "B");
+ N = Tools.integer(properties, "nodes");
+ fileCount = Tools.integer(properties, "files");
String factoryName = properties.getProperty("filefactory");
if (factoryName == null)
- bail("No FileFactory given!");
+ Tools.bail("No FileFactory given!");
else if (factoryName.trim().equals("PlainFiles"))
factory = new PlainFiles(this);
else if (factoryName.trim().equals("TraceFiles"))
@@ -146,7 +164,7 @@ class Simulator
else if (factoryName.trim().equals("RandomFiles"))
factory = new RandomFiles(this);
else
- bail("Bad filefactory name: \"" + factoryName + "\"");
+ Tools.bail("Bad filefactory name: \"" + factoryName + "\"");
// PlacementScheme placer = new Kademlia(B);
placer = new Nearest(B);
@@ -154,48 +172,14 @@ class Simulator
nodes = new ArrayList<Node>(N);
}
- int integerProperty(String variable)
- {
- int result = 0;
- try
- {
- result =
- Integer.parseInt(properties.getProperty(variable).trim());
- }
- catch (NumberFormatException e)
- {
- bail("Could not read integer from property: " + variable +
- " = " + properties.getProperty(variable));
- }
- catch (NullPointerException e)
- {
- bail("Required property not found: " + variable);
- }
- return result;
- }
-
- String stringProperty(String variable)
- {
- String result = null;
- try
- {
- result = properties.getProperty(variable).trim();
- }
- catch (NullPointerException e)
- {
- bail("Required property not found: " + variable);
- }
- return result;
- }
-
-
public void execute()
{
setup();
// Initialize node addresses...
hub.generate(N, nodes);
-
+ stats.nodes = N;
+
// Initialize object addresses...
for (int i = 0; i < fileCount; i++)
{
@@ -206,7 +190,7 @@ class Simulator
do
{
if (tries++ >= maxTries)
- bail("Could not allocate new object ids!");
+ Tools.bail("Could not allocate new object ids!");
set = placer.allocateFile(file, nodes);
file.link(set);
@@ -216,7 +200,7 @@ class Simulator
objects.addAll(set);
}
- if (stringProperty("printFiles").equals("true"))
+ if (Tools.string(properties, "printFiles").equals("true"))
printFiles();
// Place objects and add up load...
@@ -224,7 +208,7 @@ class Simulator
Map<Node,Integer> origCount = countObjects(nodes);
// printNodes(nodes);
- if (stringProperty("printInitialNodes").equals("true"))
+ if (Tools.string(properties, "printInitialNodes").equals("true"))
printNodeObjects(nodes);
// Cause a fault and reallocate objects...
@@ -238,7 +222,7 @@ class Simulator
placer.rebuild(object, nodes);
Map<Node,Integer> faultCount = countObjects(nodes);
- if (stringProperty("printInitialNodes").equals("true"))
+ if (Tools.string(properties, "printInitialNodes").equals("true"))
printNodeObjects(nodes);
// Find the load difference from before the fault...
@@ -270,20 +254,28 @@ class Simulator
total += sorted.get(node);
}
System.out.println("TOTAL_TRANSFERS: " + total);
-
+ stats.totalTransfers = total;
+
// Display data reallocation declustering...
System.out.println("PULL_DECLUSTERING: ");
- int affected = 0;
+ int affected = 0;
+ Node last = null;
+ double percent = 0.0;
for (Node node : sorted.keySet())
{
int d = sorted.get(node);
if (d > 0)
{
+ percent = (100.0*d)/total;
System.out.println(node.bitString() + ": " +
- df.format((100.0*d)/total) + "%");
- affected++;
+ df.format(percent) + "%");
+ affected++;
+ last = node;
}
}
+ stats.maxDeclustering = percent;
+ stats.affected = affected;
+
System.out.println("SERVERS_AFFECTED: " + affected);
}
}
diff --git a/sim/gobs/gobs/Statistics.java b/sim/gobs/gobs/Statistics.java
index 29ce4d0..33e6fac 100644
--- a/sim/gobs/gobs/Statistics.java
+++ b/sim/gobs/gobs/Statistics.java
@@ -2,10 +2,14 @@
package gobs;
/**
- * Stores results from a Simulator run.
+ * Stores results as doubles from a Simulator run.
* */
-class Statistics
+public class Statistics
{
- float heaviest = 0;
+ public int unique = 0;
+ public double nodes = 0;
+ public double maxDeclustering = 0.0;
+ public double totalTransfers = 0;
+ public double affected = 0;
}
diff --git a/sim/gobs/gobs/Tools.java b/sim/gobs/gobs/Tools.java
new file mode 100644
index 0000000..d16105c
--- /dev/null
+++ b/sim/gobs/gobs/Tools.java
@@ -0,0 +1,53 @@
+
+package gobs;
+
+import java.util.Properties;
+
+/**
+ * Helpful wrappers for Properties and fatal errors.
+ * */
+
+public class Tools
+{
+ public static int integer(Properties properties, String variable)
+ {
+ int result = 0;
+ try
+ {
+ result =
+ Integer.parseInt(properties.getProperty(variable).trim());
+ }
+ catch (NumberFormatException e)
+ {
+ bail("Could not read integer from property: " + variable +
+ " = " + properties.getProperty(variable));
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
+
+ public static String string(Properties properties, String variable)
+ {
+ String result = null;
+ try
+ {
+ result = properties.getProperty(variable).trim();
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
+
+ public static void bail(String msg)
+ {
+ System.out.println(msg);
+
+ // Exit code 1 is a Java error:
+ System.exit(2);
+ }
+}
diff --git a/sim/gobs/gobs/TraceFiles.java b/sim/gobs/gobs/TraceFiles.java
index 3043727..68a3aeb 100644
--- a/sim/gobs/gobs/TraceFiles.java
+++ b/sim/gobs/gobs/TraceFiles.java
@@ -20,7 +20,7 @@ class TraceFiles
TraceFiles(Simulator simulator)
{
- filename = simulator.stringProperty("filetrace");
+ filename = simulator.string("filetrace");
try
{
lines = LineReader.read(new java.io.File(filename));
@@ -30,7 +30,7 @@ class TraceFiles
finally
{
if (lines == null)
- Simulator.bail("TraceFiles: Could not read: \"" +
+ Tools.bail("TraceFiles: Could not read: \"" +
filename + "\"");
}
@@ -40,13 +40,13 @@ class TraceFiles
public File get()
{
if (index > lines.size())
- Simulator.bail("TraceFiles: Exceeded trace file length!");
+ Tools.bail("TraceFiles: Exceeded trace file length!");
String[] tokens = LineReader.tokenize(lines.get(index));
String file = tokens[0];
if (! file.equals("file"))
- Simulator.bail("Does not compute (should be file stats): " +
+ Tools.bail("Does not compute (should be file stats): " +
lines.get(index));
int size = 0;
@@ -62,7 +62,7 @@ class TraceFiles
}
catch (NumberFormatException e)
{
- Simulator.bail("TraceFiles: Error reading file: " +
+ Tools.bail("TraceFiles: Error reading file: " +
filename + "\n" +
"line: " + lines.get(index));
}
diff --git a/sim/gobs/sweep/Decluster01.cfg b/sim/gobs/sweep/Decluster01.cfg
new file mode 100644
index 0000000..48f40c3
--- /dev/null
+++ b/sim/gobs/sweep/Decluster01.cfg
@@ -0,0 +1,5 @@
+
+
+
+minNodes = 8
+maxNodes = 16
diff --git a/sim/gobs/sweep/Decluster01.java b/sim/gobs/sweep/Decluster01.java
index 1cfa08e..70e640d 100644
--- a/sim/gobs/sweep/Decluster01.java
+++ b/sim/gobs/sweep/Decluster01.java
@@ -1,12 +1,25 @@
+package sweep;
+
+import java.util.*;
+
+import gobs.*;
+
+import plot.SimplePlot;
+
/**
- * Repeat given test parameters n times.
+ * Modifies node count. Reports object movement load on the
+ * heaviest server during rebuild.
+ *
+ * Usage: Decluster01 -n <repeats> gobs.cfg params.cfg Decluster01.cfg
* */
class Decluster01
{
- Properties properties = new Properties();
- List<Statistics> stats = new List<Statistics>();
+ static Properties properties = new Properties();
+ static List<String> values;
+ static List<Statistics> stats = new ArrayList<Statistics>();
+ static int repeats;
public static void main(String[] args)
{
@@ -16,17 +29,19 @@ class Decluster01
System.exit(0);
}
+ Bits.init();
+
int cfgs = 0;
for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-n"))
try
{
- n = Integer.parseInt(args[++i]);
+ repeats = Integer.parseInt(args[++i]);
}
catch (NumberFormatException e)
{
- Simulator.bail("Bad number: " + args[i+1]);
+ Tools.bail("Bad number: " + args[i+1]);
}
else
{
@@ -36,19 +51,17 @@ class Decluster01
}
if (cfgs == 0)
- Simulator.bail("Need at least one input file!");
+ Tools.bail("Need at least one input file!");
+
+ int minNodes = Tools.integer(properties, "minNodes");
+ int maxNodes = Tools.integer(properties, "maxNodes");
+ values = Sweep.allValues(minNodes, maxNodes);
- for (int i = 0; i < n; i++)
- {
- Simulator simulator = new Simulator();
- simulator.properties = properties;
- simulator.setup();
- simulator.execute();
- stats.add(simulator.stats);
- }
+ execute();
+ plot("Decluster01.eps");
}
- public void load(String file)
+ static void load(String file)
{
try
{
@@ -57,7 +70,41 @@ class Decluster01
}
catch (java.io.IOException e)
{
- bail("Could not open properties file!");
+ Tools.bail("Could not open properties file!");
+ }
+ }
+
+ static void execute()
+ {
+ for (String v : values)
+ {
+ for (int i = 0; i < repeats; i++)
+ {
+ Simulator simulator = new Simulator();
+ properties.setProperty("unique", new Integer(i).toString());
+ properties.setProperty("nodes", v);
+ simulator.initialize(properties);
+ simulator.execute();
+ stats.add(simulator.stats);
+ }
}
}
+
+ static void plot(String output)
+ {
+ System.out.println("plotting to " + output + " ...");
+
+ LinkedHashMap<Double,Double> data =
+ new LinkedHashMap<Double,Double>();
+
+ System.out.print("adding " + stats.size() + " points...");
+
+ for (Statistics s : stats)
+ data.put(s.nodes, s.maxDeclustering);
+
+ SimplePlot.plot(data, "Maximum Rebuild Load", "nodes", "load",
+ output);
+
+ System.out.println(" done.");
+ }
}
diff --git a/sim/gobs/sweep/Sweep.java b/sim/gobs/sweep/Sweep.java
new file mode 100644
index 0000000..cfcb865
--- /dev/null
+++ b/sim/gobs/sweep/Sweep.java
@@ -0,0 +1,22 @@
+
+package sweep;
+
+import java.util.*;
+
+/**
+ * Reusable helpers for parameter sweeps.
+ * */
+
+class Sweep
+{
+ /**
+ Sweep over all integer values between min and max.
+ */
+ static List<String> allValues(int min, int max)
+ {
+ List<String> result = new ArrayList<String>(max-min+1);
+ for (int i = min; i <= max; i++)
+ result.add(new Integer(i).toString());
+ return result;
+ }
+}
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-63-g0e1877f
by noreply@mcs.anl.gov 12 Aug '09
by noreply@mcs.anl.gov 12 Aug '09
12 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 0e1877f6e0757a7bd6421c879001e5c19477dab0 (commit)
via f7d0f3bc9733e741af4fb9d0a5bd92fe2fcad8de (commit)
from b21b0ee0c34f7a261a8ad13a150b497cf39e64c8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 0e1877f6e0757a7bd6421c879001e5c19477dab0
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 12 18:58:22 2009 -0500
Build rules for plotting.
commit f7d0f3bc9733e741af4fb9d0a5bd92fe2fcad8de
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 12 18:58:00 2009 -0500
Plotting framework for simulator experiments.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 18 ++++-
sim/gobs/plot/SimplePlot.java | 109 +++++++++++++++++++++++
sim/gobs/prereqs/commons-io-1.4.jar | Bin 0 -> 105025 bytes
sim/gobs/prereqs/jcommon-1.0.16.jar | Bin 0 -> 309293 bytes
sim/gobs/prereqs/jfreechart-1.0.13.jar | Bin 0 -> 1425744 bytes
sim/gobs/prereqs/xmlgraphics-commons-1.4svn.jar | Bin 0 -> 552552 bytes
6 files changed, 125 insertions(+), 2 deletions(-)
create mode 100644 sim/gobs/plot/SimplePlot.java
create mode 100644 sim/gobs/prereqs/commons-io-1.4.jar
create mode 100644 sim/gobs/prereqs/jcommon-1.0.16.jar
create mode 100644 sim/gobs/prereqs/jfreechart-1.0.13.jar
create mode 100644 sim/gobs/prereqs/xmlgraphics-commons-1.4svn.jar
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index 63b555a..01eb285 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -6,6 +6,9 @@
default="all"
basedir=".">
+ <property name="prereqs"
+ value="prereqs/commons-io-1.4.jar;prereqs/jfreechart-1.0.13.jar;prereqs/jcommon-1.0.16.jar;xmlgraphics-commons-1.4svn.jar"/>
+
<target name="all"
depends="jar" />
@@ -18,8 +21,10 @@
</jar>
</target>
- <target name="compile">
- <javac srcdir="."
+ <target name="compile" depends="compile_gobs,compile_plot"/>
+
+ <target name="compile_gobs">
+ <javac srcdir="gobs"
classpath="."
listfiles="${lf}"
debug="true">
@@ -27,6 +32,15 @@
</javac>
</target>
+ <target name="compile_plot">
+ <javac srcdir="plot"
+ classpath="${prereqs}"
+ listfiles="${lf}"
+ debug="true">
+ <compilerarg value="-Xlint"/>
+ </javac>
+ </target>
+
<target name="doc">
<javadoc destdir="docs"
author="true"
diff --git a/sim/gobs/plot/SimplePlot.java b/sim/gobs/plot/SimplePlot.java
new file mode 100644
index 0000000..e1597e3
--- /dev/null
+++ b/sim/gobs/plot/SimplePlot.java
@@ -0,0 +1,109 @@
+
+package plot;
+
+import java.awt.*;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import java.util.LinkedHashMap;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
+
+import org.jfree.chart.ChartFactory;
+import org.jfree.chart.JFreeChart;
+import org.jfree.chart.plot.PlotOrientation;
+import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.XYDotRenderer;
+import org.jfree.data.xy.XYDataset;
+import org.jfree.data.xy.XYSeries;
+import org.jfree.data.xy.XYSeriesCollection;
+
+public class SimplePlot
+{
+ public static boolean plot(LinkedHashMap<Double,Double> data,
+ String title, String xlabel,
+ String ylabel, String output)
+ {
+ EPSDocumentGraphics2D g2d = null;
+ Rectangle2D.Double rectangle = null;
+ OutputStream out = null;
+
+ int w = 400;
+ int h = 400;
+
+ try
+ {
+ out = new FileOutputStream(output);
+ out = new BufferedOutputStream(out);
+
+ g2d = new EPSDocumentGraphics2D(false);
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+
+ rectangle = new Rectangle2D.Double(0, 0, w, h);
+
+ g2d.setGraphicContext
+ (new org.apache.xmlgraphics.java2d.GraphicContext());
+ g2d.setupDocument(out, w, h);
+
+ //Paint a bounding box
+ // g2d.drawRect(20, 20, 40, 40);
+ }
+ catch (IOException e)
+ {
+ System.out.println("Problem with file: " + output);
+ return false;
+ }
+
+ final XYSeries series = new XYSeries("Random Data");
+ for (Double x : data.keySet())
+ {
+ series.add(x, data.get(x));
+ }
+ final XYDataset collection = new XYSeriesCollection(series);
+
+ final boolean withLegend = false;
+
+ JFreeChart chart =
+ ChartFactory.createXYLineChart
+ (title, xlabel, ylabel, collection,
+ PlotOrientation.VERTICAL, withLegend, false, false);
+
+ XYPlot plot = chart.getXYPlot();
+ plot.setBackgroundPaint(Color.WHITE);
+ chart.draw(g2d, rectangle);
+
+ try
+ {
+ g2d.finish();
+ }
+ catch (Exception e)
+ {
+ System.out.println("Err!");
+ }
+ IOUtils.closeQuietly(out);
+
+ return true;
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ LinkedHashMap<Double,Double> data =
+ new LinkedHashMap<Double,Double>();
+
+ data.put(3.0,4.0);
+ data.put(4.0,5.0);
+ data.put(5.0,1.0);
+
+ plot(data, "TITLE", "XL", "YL", "tmp.eps");
+ }
+}
diff --git a/sim/gobs/prereqs/commons-io-1.4.jar b/sim/gobs/prereqs/commons-io-1.4.jar
new file mode 100644
index 0000000..1fb8e29
Binary files /dev/null and b/sim/gobs/prereqs/commons-io-1.4.jar differ
diff --git a/sim/gobs/prereqs/jcommon-1.0.16.jar b/sim/gobs/prereqs/jcommon-1.0.16.jar
new file mode 100644
index 0000000..4cd6807
Binary files /dev/null and b/sim/gobs/prereqs/jcommon-1.0.16.jar differ
diff --git a/sim/gobs/prereqs/jfreechart-1.0.13.jar b/sim/gobs/prereqs/jfreechart-1.0.13.jar
new file mode 100644
index 0000000..83c6993
Binary files /dev/null and b/sim/gobs/prereqs/jfreechart-1.0.13.jar differ
diff --git a/sim/gobs/prereqs/xmlgraphics-commons-1.4svn.jar b/sim/gobs/prereqs/xmlgraphics-commons-1.4svn.jar
new file mode 100644
index 0000000..e5d81b0
Binary files /dev/null and b/sim/gobs/prereqs/xmlgraphics-commons-1.4svn.jar differ
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-61-gb21b0ee
by noreply@mcs.anl.gov 12 Aug '09
by noreply@mcs.anl.gov 12 Aug '09
12 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via b21b0ee0c34f7a261a8ad13a150b497cf39e64c8 (commit)
from 1bee1d9323db6042b0944f1bb02a689c5dbbd18c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit b21b0ee0c34f7a261a8ad13a150b497cf39e64c8
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 12 18:55:48 2009 -0500
Outline of experiment sweep functionality.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/sweep/Decluster01.java | 63 +++++++++++++++++++++++++++++++++++++++
1 files changed, 63 insertions(+), 0 deletions(-)
create mode 100644 sim/gobs/sweep/Decluster01.java
Diff of changes:
diff --git a/sim/gobs/sweep/Decluster01.java b/sim/gobs/sweep/Decluster01.java
new file mode 100644
index 0000000..1cfa08e
--- /dev/null
+++ b/sim/gobs/sweep/Decluster01.java
@@ -0,0 +1,63 @@
+
+/**
+ * Repeat given test parameters n times.
+ * */
+
+class Decluster01
+{
+ Properties properties = new Properties();
+ List<Statistics> stats = new List<Statistics>();
+
+ public static void main(String[] args)
+ {
+ if (args.length == 0)
+ {
+ System.out.println("usage: -n <n> <file.cfg>+");
+ System.exit(0);
+ }
+
+ int cfgs = 0;
+ for (int i = 0; i < args.length; i++)
+ {
+ if (args[i].equals("-n"))
+ try
+ {
+ n = Integer.parseInt(args[++i]);
+ }
+ catch (NumberFormatException e)
+ {
+ Simulator.bail("Bad number: " + args[i+1]);
+ }
+ else
+ {
+ load(args[i]);
+ cfgs++;
+ }
+ }
+
+ if (cfgs == 0)
+ Simulator.bail("Need at least one input file!");
+
+ for (int i = 0; i < n; i++)
+ {
+ Simulator simulator = new Simulator();
+ simulator.properties = properties;
+ simulator.setup();
+ simulator.execute();
+ stats.add(simulator.stats);
+ }
+ }
+
+ public void load(String file)
+ {
+ try
+ {
+ java.io.FileInputStream cfg = new java.io.FileInputStream(file);
+ properties.load(cfg);
+ }
+ catch (java.io.IOException e)
+ {
+ bail("Could not open properties file!");
+ }
+ }
+}
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-60-g1bee1d9
by noreply@mcs.anl.gov 12 Aug '09
by noreply@mcs.anl.gov 12 Aug '09
12 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 1bee1d9323db6042b0944f1bb02a689c5dbbd18c (commit)
via a3a1c45b357b958c67de9ad62ef2018ad43ef00f (commit)
via 74bedde0eb24ecc9574981c12b72070a21ac972f (commit)
via c7fa606b0e3cee3bd2f59430a5953a4c123ee2b6 (commit)
via 560e3762ce7765cf8376ab92e6478fa9bdd047f1 (commit)
via 0b61336dc052f35cf16135b21fa427e45bff5a5c (commit)
from 321e2ae174c785fe6072c25196f77db138cd385b (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 1bee1d9323db6042b0944f1bb02a689c5dbbd18c
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Wed Aug 12 09:36:05 2009 -0500
New stats for parameter sweeps, plots available soon.
commit a3a1c45b357b958c67de9ad62ef2018ad43ef00f
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 11 14:16:45 2009 -0500
New RandomFiles file generator.
commit 74bedde0eb24ecc9574981c12b72070a21ac972f
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 11 13:36:55 2009 -0500
nextBool() -> nextBoolean().
commit c7fa606b0e3cee3bd2f59430a5953a4c123ee2b6
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 11 13:24:25 2009 -0500
Allow FS traces to be imported into the simulator.
TraceFiles is a FileFactory implementation that reads a trace
file (e.g. traces/test01.trace) and simulates object placement
for that trace.
commit 560e3762ce7765cf8376ab92e6478fa9bdd047f1
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 11 13:05:37 2009 -0500
New file distribution creation framework.
Implementations of FileFactory create files based on
some distribution technique.
commit 0b61336dc052f35cf16135b21fa427e45bff5a5c
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Tue Aug 11 10:23:45 2009 -0500
New command-line.
Now accepts a simple list of properties files.
See gobs.cfg and params.cfg for examples.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/build.xml | 2 +-
sim/gobs/gobs.cfg | 4 +
sim/gobs/gobs/Bits.java | 2 +-
sim/gobs/gobs/File.java | 74 +++++++++++++++
sim/gobs/gobs/FileFactory.java | 11 +++
sim/gobs/gobs/LineReader.java | 105 +++++++++++++++++++++
sim/gobs/gobs/Nearest.java | 6 ++
sim/gobs/gobs/PlacementScheme.java | 27 ++----
sim/gobs/gobs/PlainFiles.java | 31 +++++++
sim/gobs/gobs/RandomFiles.java | 58 ++++++++++++
sim/gobs/gobs/Simulator.java | 175 +++++++++++++++++++++++-------------
sim/gobs/gobs/Statistics.java | 11 +++
sim/gobs/gobs/TraceFiles.java | 74 +++++++++++++++
sim/gobs/params.cfg | 41 +++++++++
sim/gobs/traces/test01.trace | 6 ++
15 files changed, 544 insertions(+), 83 deletions(-)
create mode 100644 sim/gobs/gobs/File.java
create mode 100644 sim/gobs/gobs/FileFactory.java
create mode 100644 sim/gobs/gobs/LineReader.java
create mode 100644 sim/gobs/gobs/PlainFiles.java
create mode 100644 sim/gobs/gobs/RandomFiles.java
create mode 100644 sim/gobs/gobs/Statistics.java
create mode 100644 sim/gobs/gobs/TraceFiles.java
create mode 100644 sim/gobs/params.cfg
create mode 100644 sim/gobs/traces/test01.trace
Diff of changes:
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index e6ec7e6..63b555a 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -34,7 +34,7 @@
breakiterator="yes"
private="true">
<fileset dir="."
- includes="*.java"/>
+ includes="**/*.java"/>
</javadoc>
</target>
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
index ee11791..8aed049 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/gobs.cfg
@@ -1,7 +1,11 @@
+# Simulator configuration
+
# Print nodes and objects at startup (true/false)
printInitialNodes = true
# Print nodes and objects after each rebuild (true/false)
printNodes = true
# Print object tranfers during rebuilds (true/false)
printRebuilds = true
+# Print file information (true/false)
+printFiles = true
diff --git a/sim/gobs/gobs/Bits.java b/sim/gobs/gobs/Bits.java
index f1cbed4..b3c0610 100644
--- a/sim/gobs/gobs/Bits.java
+++ b/sim/gobs/gobs/Bits.java
@@ -85,7 +85,7 @@ public class Bits
return i;
}
- public static boolean nextBool()
+ public static boolean nextBoolean()
{
if (! ready)
{
diff --git a/sim/gobs/gobs/File.java b/sim/gobs/gobs/File.java
new file mode 100644
index 0000000..ebd5507
--- /dev/null
+++ b/sim/gobs/gobs/File.java
@@ -0,0 +1,74 @@
+
+package gobs;
+
+import java.util.Collection;
+
+import static java.lang.Math.*;
+
+/**
+ * Simulated file.
+ * */
+
+class File
+{
+ int size;
+ int strip;
+ int width;
+ int replicas;
+ int id;
+
+ static int unique = 0;
+
+ Collection<Obj> objects;
+
+ File(int size, int strip, int width, int replicas)
+ {
+ this.size = size;
+ this.strip = strip;
+ this.width = width;
+ this.replicas = replicas;
+
+ // System.out.println("FILE: " + size + " " + strip + " " + width + " " + replicas);
+
+ id = unique++;
+ }
+
+ void link(Collection<Obj> objects)
+ {
+ this.objects = objects;
+ }
+
+ /**
+ What is the size of the ith object for this File?
+ */
+ int objectSize(int i)
+ {
+ int strips = round((float)
+ ceil(((float) size) / ((float) strip)));
+ int extras = strips % width;
+ if (i < extras)
+ return (1 + strips/width)*strip;
+ return (strips/width)*strip;
+ }
+
+ public String toString()
+ {
+ StringBuilder sb =
+ new StringBuilder(100+objects.size()*(Simulator.current.B+10));
+ sb.append("file[").append(id).append("]: ");
+ for (Obj object : objects)
+ sb.append(object).append(" ");
+ return sb.toString();
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ File file = new File(0, 3, 3, 1);
+ System.out.println(file.objectSize(0));
+ System.out.println(file.objectSize(1));
+ System.out.println(file.objectSize(2));
+ }
+}
diff --git a/sim/gobs/gobs/FileFactory.java b/sim/gobs/gobs/FileFactory.java
new file mode 100644
index 0000000..0963aed
--- /dev/null
+++ b/sim/gobs/gobs/FileFactory.java
@@ -0,0 +1,11 @@
+
+package gobs;
+
+/**
+ * File distribution factory.
+ * */
+
+interface FileFactory
+{
+ File get();
+}
diff --git a/sim/gobs/gobs/LineReader.java b/sim/gobs/gobs/LineReader.java
new file mode 100644
index 0000000..f0e94a1
--- /dev/null
+++ b/sim/gobs/gobs/LineReader.java
@@ -0,0 +1,105 @@
+
+package gobs;
+
+import java.util.*;
+
+public class LineReader
+{
+ LineReader()
+ {}
+
+ public static List<String> read(java.io.File file)
+ throws java.io.FileNotFoundException
+ {
+ java.io.BufferedReader reader =
+ new java.io.BufferedReader(new java.io.FileReader(file));
+ return read(reader);
+ }
+
+ public static List<String> read(String s)
+ {
+ java.io.BufferedReader reader =
+ new java.io.BufferedReader(new java.io.StringReader(s));
+ return read(reader);
+ }
+
+ public static List<String> read(java.io.BufferedReader reader)
+ {
+ List<String> result = new ArrayList<String>();
+ try
+ {
+ String prevline = "";
+ String line = "";
+ while ((line = reader.readLine()) != null)
+ {
+ int hash = line.indexOf("#");
+ if (hash >= 0)
+ line = line.substring(0,hash);
+ line = spaces(line);
+ line = (prevline + " " + line).trim();
+ if (line.endsWith("\\"))
+ {
+ line = line.substring(0, line.length()-2);
+ prevline = line;
+ continue;
+ }
+ else
+ {
+ prevline = "";
+ line = line.trim();
+ if (line.length() > 0)
+ result.add(line);
+ }
+ }
+ }
+ catch (java.io.IOException e)
+ {
+ System.out.println("LineReader: I/O problem.");
+ return null;
+ }
+ return result;
+ }
+
+ public static String spaces(String line)
+ {
+ String result = "";
+ for (int i = 0; i < line.length(); i++)
+ {
+ if (line.charAt(i) == '=' &&
+ line.charAt(i+1) != '=' &&
+ line.charAt(i-1) != '=')
+ {
+ result += " = ";
+ }
+ else
+ result += line.substring(i,i+1);
+ }
+ return result;
+ }
+
+ public static String[] tokenize(String line)
+ {
+ if (line == null)
+ return null;
+ List<String> words = new ArrayList<String>();
+ String[] ws = line.split("\\s");
+ for (int i = 0; i < ws.length; i++)
+ if (ws[i].length() > 0)
+ words.add(ws[i]);
+ String[] result = new String[words.size()];
+ for (int i = 0; i < words.size(); i++)
+ result[i] = words.get(i);
+ return result;
+ }
+
+ /*
+ public static List<String> list(String line)
+ {
+ List<String> result = new ArrayList<String>();
+ String[] tokens = tokenize(line);
+ for (int i = 0; i < tokens.length; i++)
+ result.add(tokens[i]);
+ return result;
+ }
+ */
+}
diff --git a/sim/gobs/gobs/Nearest.java b/sim/gobs/gobs/Nearest.java
index 8fcb446..2f24966 100644
--- a/sim/gobs/gobs/Nearest.java
+++ b/sim/gobs/gobs/Nearest.java
@@ -59,6 +59,12 @@ class Nearest
secondary = primary.toSecondary(primary);
}
+ if (secondary == null)
+ {
+ System.out.println("rebuild: lost: " + object.bitString());
+ return;
+ }
+
for (Node node : closest)
{
if (! node.contains(secondary.id))
diff --git a/sim/gobs/gobs/PlacementScheme.java b/sim/gobs/gobs/PlacementScheme.java
index 7b16a7e..656a980 100644
--- a/sim/gobs/gobs/PlacementScheme.java
+++ b/sim/gobs/gobs/PlacementScheme.java
@@ -24,15 +24,14 @@ abstract class PlacementScheme
/**
Generate an object set for a file.
*/
- public Collection<Obj> allocateFile(int size, int chunk, int width,
- int replicas, List<Node> nodes)
+ public Collection<Obj> allocateFile(File file, List<Node> nodes)
{
- List<Obj> result = new ArrayList<Obj>(width*2);
+ ArrayList<Obj> result = new ArrayList<Obj>(file.width+2);
BigInteger p = randomID();
BigInteger two = new BigInteger("2");
- BigInteger bigWidth = new BigInteger("" + width);
+ BigInteger bigWidth = new BigInteger("" + file.width);
BigInteger bigWidth2 = new BigInteger("2");
while (bigWidth2.compareTo(bigWidth) < 0)
{
@@ -41,23 +40,12 @@ abstract class PlacementScheme
BigInteger s = M.divide(bigWidth2);
- int chunks = size/chunk;
- int extras = chunks % width;
-
int i;
- for (i = 0; i < extras; i++)
- {
- BigInteger id = p;
- int bytes = (1 + chunks/width)*chunk;
- Obj obj = new Obj(B, id, bytes, replicas);
- result.add(obj);
- p = p.add(s);
- }
- for ( ; i < width; i++)
+ for (i = 0; i < file.width; i++)
{
BigInteger id = p;
- int bytes = (chunks/width)*chunk;
- Obj obj = new Obj(B, id, bytes, replicas);
+ int bytes = file.objectSize(i);
+ Obj obj = new Obj(B, id, bytes, file.replicas);
result.add(obj);
p = p.add(s);
}
@@ -66,7 +54,8 @@ abstract class PlacementScheme
for (Obj o : result)
System.out.println(o);
*/
-
+
+ result.trimToSize();
return result;
}
diff --git a/sim/gobs/gobs/PlainFiles.java b/sim/gobs/gobs/PlainFiles.java
new file mode 100644
index 0000000..5d226f4
--- /dev/null
+++ b/sim/gobs/gobs/PlainFiles.java
@@ -0,0 +1,31 @@
+
+package gobs;
+
+/**
+ * Generates same file repeatedly.
+ *
+ * Required properties settings: filesize, filestrip,
+ * filewidth, filereplicas.
+ * */
+
+class PlainFiles
+ implements FileFactory
+{
+ int size;
+ int strip;
+ int width;
+ int replicas;
+
+ PlainFiles(Simulator simulator)
+ {
+ size = simulator.integerProperty("filesize");
+ strip = simulator.integerProperty("filestrip");
+ width = simulator.integerProperty("filewidth");
+ replicas = simulator.integerProperty("filereplicas");
+ }
+
+ public File get()
+ {
+ return new File(size, strip, width, replicas);
+ }
+}
diff --git a/sim/gobs/gobs/RandomFiles.java b/sim/gobs/gobs/RandomFiles.java
new file mode 100644
index 0000000..20638bf
--- /dev/null
+++ b/sim/gobs/gobs/RandomFiles.java
@@ -0,0 +1,58 @@
+
+package gobs;
+
+/**
+ * Generates random files.
+ *
+ * Produces 50/50 mix of two file types: big and small.
+ * Big files use strip=4MB.
+ * Small files use strip=size.
+ * Big files use filewidth.
+ * Small files have width=1.
+ * Big files use replicas=2.
+ * Small files use replicas=3.
+ *
+ * Required properties settings: filestrip, filebigmax, filebigmin,
+ * filesmallmax, filesmallmin.
+ * */
+
+class RandomFiles
+ implements FileFactory
+{
+ int sizebigmax;
+ int sizebigmin;
+ int sizesmallmax;
+ int sizesmallmin;
+ int strip;
+ int width;
+ int replicas;
+
+ RandomFiles(Simulator simulator)
+ {
+ sizebigmax = simulator.integerProperty("filebigmax");
+ sizebigmin = simulator.integerProperty("filebigmin");
+ sizesmallmax = simulator.integerProperty("filesmallmax");
+ sizesmallmin = simulator.integerProperty("filesmallmin");
+ strip = simulator.integerProperty("filestrip");
+ width = simulator.integerProperty("filewidth");
+ }
+
+ public File get()
+ {
+ File result;
+ int size;
+ if (Bits.nextBoolean())
+ {
+ // Big file:
+ size = Bits.nextInt(sizebigmax-sizebigmin)+sizebigmin;
+ result = new File(size, 4*1024*1024, width, 2);
+ }
+ else
+ {
+ // Small file:
+ size = Bits.nextInt(sizesmallmax-sizesmallmin)+sizesmallmin;
+ result = new File(size, size, 1, 3);
+ }
+ return result;
+ }
+}
diff --git a/sim/gobs/gobs/Simulator.java b/sim/gobs/gobs/Simulator.java
index cf4424a..cf254f2 100644
--- a/sim/gobs/gobs/Simulator.java
+++ b/sim/gobs/gobs/Simulator.java
@@ -21,48 +21,35 @@ class Simulator
int B;
int N;
- int fileCount;
- int fileSize;
- int strip;
+ int fileCount;
+
PlacementScheme placer;
NodeScheme hub;
+ FileFactory factory;
+ /**
+ Useful for helpful error messages:
+ */
+ String reading;
+ /**
+ Aggregate properties from all input files:
+ */
Properties properties = new Properties();
List<Node> nodes;
EnhancedLinkedHashSet<Obj> objects =
new EnhancedLinkedHashSet<Obj>();
- Map<Integer,Collection<Obj>> files =
- new HashMap<Integer,Collection<Obj>>(fileCount);
+ List<File> files = new ArrayList<File>();
static Simulator current;
static final int maxTries = 10;
DecimalFormat df = new DecimalFormat("0.0");
- public Simulator(int B, int N, int fileCount, int fileSize,
- int strip, PlacementScheme placer, NodeScheme hub)
- {
- this.B = B;
- this.N = N;
- nodes = new ArrayList<Node>(N);
-
- this.fileCount = fileCount;
- this.fileSize = fileSize;
- this.strip = strip;
- this.placer = placer;
- this.hub = hub;
-
- try
- {
- java.io.FileInputStream cfg = new java.io.FileInputStream("gobs.cfg");
- properties.load(cfg);
- }
- catch (java.io.IOException e)
- {
- bail("Could not open properties file!");
- }
- }
+ Statistics stats = new Statistics();
+
+ public Simulator()
+ {}
Map<Node,Integer> countObjects(List<Node> nodes)
{
@@ -88,15 +75,11 @@ class Simulator
System.out.println(node);
}
- void printFiles(Map<Integer,List<Obj>> files)
+ void printFiles()
{
- for (Integer i : files.keySet())
+ for (File f : files)
{
- System.out.println("file: " + i);
- List<Obj> set = files.get(i);
- for (Obj object : set)
- System.out.print(object + " ");
- System.out.println("");
+ System.out.println(f.toString());
}
}
@@ -110,47 +93,113 @@ class Simulator
public static void main(String[] args)
{
- String layoutName;
- int B, N, fileCount, fileSize, strip;
+ // String layoutName;
+ // int B, N, fileCount, fileSize, strip;
Bits.init();
- if (args.length < 5)
+ if (args.length < 1)
+ bail("usage: Simulator <file.cfg>*");
+
+ current = new Simulator();
+ for (String arg : args)
+ current.load(arg);
+ current.execute();
+ }
+
+ /**
+ Set properties from file.
+ */
+ public void load(String file)
+ {
+ try
{
- bail("usage: Simulator <B> <nodes> <files> " +
- "<file size> <strip size>");
+ java.io.FileInputStream cfg = new java.io.FileInputStream(file);
+ properties.load(cfg);
}
+ catch (java.io.IOException e)
+ {
+ bail("Could not open properties file!");
+ }
+ }
+ /**
+ Convert properties into simulator variables.
+ Must be called before execute().
+ */
+ public void setup()
+ {
// Process input...
- int arg = 0;
- B = Integer.parseInt(args[arg++]);
- N = Integer.parseInt(args[arg++]);
- fileCount = Integer.parseInt(args[arg++]);
- fileSize = Integer.parseInt(args[arg++]);
- strip = Integer.parseInt(args[arg++]);
+ int arg = 0;
- // PlacementScheme placer = new Kademlia(B);
- PlacementScheme placer = new Nearest(B);
- NodeScheme hub = new RandomNodes(B);
+ B = integerProperty("B");
+ N = integerProperty("nodes");
+ fileCount = integerProperty("files");
+
+ String factoryName = properties.getProperty("filefactory");
+ if (factoryName == null)
+ bail("No FileFactory given!");
+ else if (factoryName.trim().equals("PlainFiles"))
+ factory = new PlainFiles(this);
+ else if (factoryName.trim().equals("TraceFiles"))
+ factory = new TraceFiles(this);
+ else if (factoryName.trim().equals("RandomFiles"))
+ factory = new RandomFiles(this);
+ else
+ bail("Bad filefactory name: \"" + factoryName + "\"");
- current =
- new Simulator(B, N, fileCount, fileSize, strip, placer, hub);
- current.execute();
+ // PlacementScheme placer = new Kademlia(B);
+ placer = new Nearest(B);
+ hub = new RandomNodes(B);
+ nodes = new ArrayList<Node>(N);
}
- public void execute()
+ int integerProperty(String variable)
{
- this.B = B;
+ int result = 0;
+ try
+ {
+ result =
+ Integer.parseInt(properties.getProperty(variable).trim());
+ }
+ catch (NumberFormatException e)
+ {
+ bail("Could not read integer from property: " + variable +
+ " = " + properties.getProperty(variable));
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
- int uniqueFile = 1;
+ String stringProperty(String variable)
+ {
+ String result = null;
+ try
+ {
+ result = properties.getProperty(variable).trim();
+ }
+ catch (NullPointerException e)
+ {
+ bail("Required property not found: " + variable);
+ }
+ return result;
+ }
+
+ public void execute()
+ {
+ setup();
+
// Initialize node addresses...
hub.generate(N, nodes);
// Initialize object addresses...
for (int i = 0; i < fileCount; i++)
{
- int fid = uniqueFile++;
+ File file = factory.get();
int tries = 0;
Collection<Obj> set;
@@ -159,21 +208,23 @@ class Simulator
if (tries++ >= maxTries)
bail("Could not allocate new object ids!");
- set = placer.allocateFile(fileSize, strip, 4, 3, nodes);
- files.put(fid, set);
+ set = placer.allocateFile(file, nodes);
+ file.link(set);
+ files.add(file);
}
while (objects.containsAny(set));
objects.addAll(set);
}
- // printFiles(files);
+ if (stringProperty("printFiles").equals("true"))
+ printFiles();
// Place objects and add up load...
placer.place(objects, nodes);
Map<Node,Integer> origCount = countObjects(nodes);
// printNodes(nodes);
- if (properties.getProperty("printInitialNodes").equals("true"))
+ if (stringProperty("printInitialNodes").equals("true"))
printNodeObjects(nodes);
// Cause a fault and reallocate objects...
@@ -187,7 +238,7 @@ class Simulator
placer.rebuild(object, nodes);
Map<Node,Integer> faultCount = countObjects(nodes);
- if (properties.getProperty("printInitialNodes").equals("true"))
+ if (stringProperty("printInitialNodes").equals("true"))
printNodeObjects(nodes);
// Find the load difference from before the fault...
diff --git a/sim/gobs/gobs/Statistics.java b/sim/gobs/gobs/Statistics.java
new file mode 100644
index 0000000..29ce4d0
--- /dev/null
+++ b/sim/gobs/gobs/Statistics.java
@@ -0,0 +1,11 @@
+
+package gobs;
+
+/**
+ * Stores results from a Simulator run.
+ * */
+
+class Statistics
+{
+ float heaviest = 0;
+}
diff --git a/sim/gobs/gobs/TraceFiles.java b/sim/gobs/gobs/TraceFiles.java
new file mode 100644
index 0000000..3043727
--- /dev/null
+++ b/sim/gobs/gobs/TraceFiles.java
@@ -0,0 +1,74 @@
+
+package gobs;
+
+import java.util.List;
+
+/**
+ * Generates files from tracefile.
+ *
+ * Overwrites Simulator.fileCount!
+ *
+ * Required properties settings: filetrace
+ * */
+
+class TraceFiles
+ implements FileFactory
+{
+ String filename;
+ List<String> lines = null;
+ int index = 0;
+
+ TraceFiles(Simulator simulator)
+ {
+ filename = simulator.stringProperty("filetrace");
+ try
+ {
+ lines = LineReader.read(new java.io.File(filename));
+ }
+ catch (java.io.FileNotFoundException e)
+ {}
+ finally
+ {
+ if (lines == null)
+ Simulator.bail("TraceFiles: Could not read: \"" +
+ filename + "\"");
+ }
+
+ simulator.fileCount = lines.size();
+ }
+
+ public File get()
+ {
+ if (index > lines.size())
+ Simulator.bail("TraceFiles: Exceeded trace file length!");
+
+ String[] tokens = LineReader.tokenize(lines.get(index));
+
+ String file = tokens[0];
+ if (! file.equals("file"))
+ Simulator.bail("Does not compute (should be file stats): " +
+ lines.get(index));
+
+ int size = 0;
+ int strip = 0;
+ int width = 0;
+ int replicas = 0;
+ try
+ {
+ size = Integer.parseInt(tokens[1]);
+ strip = Integer.parseInt(tokens[2]);
+ width = Integer.parseInt(tokens[3]);
+ replicas = Integer.parseInt(tokens[4]);
+ }
+ catch (NumberFormatException e)
+ {
+ Simulator.bail("TraceFiles: Error reading file: " +
+ filename + "\n" +
+ "line: " + lines.get(index));
+ }
+
+ index++;
+
+ return new File(size, strip, width, replicas);
+ }
+}
diff --git a/sim/gobs/params.cfg b/sim/gobs/params.cfg
new file mode 100644
index 0000000..d078870
--- /dev/null
+++ b/sim/gobs/params.cfg
@@ -0,0 +1,41 @@
+
+### Parameters for GOBS Simulator run
+
+## General parameters...
+# Bit-length of addresses:
+B = 8
+# Number of servers:
+nodes = 4
+# Number of files:
+files = 3
+
+### Choose one of the following sections:
+
+# FileFactory implementation
+#filefactory = PlainFiles
+# File size:
+filesize = 1
+# Strip size:
+filestrip = 4
+# File/object replicas:
+filereplicas = 4
+# Number of objects per file:
+filewidth = 4
+
+# FileFactory implementation:
+filefactory = TraceFiles
+# Trace filename:
+filetrace = traces/test01.trace
+
+# FileFactory implementation:
+filefactory = RandomFiles
+# Strip size:
+filestrip = 4
+# Max size of big files:
+filebigmax = 100
+# Min size of big files:
+filebigmin = 50
+# Max size of small files:
+filesmallmax = 20
+# Min size of small files:
+filesmallmin = 0
diff --git a/sim/gobs/traces/test01.trace b/sim/gobs/traces/test01.trace
new file mode 100644
index 0000000..a8ca7fc
--- /dev/null
+++ b/sim/gobs/traces/test01.trace
@@ -0,0 +1,6 @@
+
+# Format: file <size> <strip> <width> <replicas>
+
+file 10 3 4 1
+file 20 2 2 2
+
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-54-g321e2ae
by noreply@mcs.anl.gov 10 Aug '09
by noreply@mcs.anl.gov 10 Aug '09
10 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 321e2ae174c785fe6072c25196f77db138cd385b (commit)
from 7b262637d44b272ccf154ddf7c937a382da479e2 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 321e2ae174c785fe6072c25196f77db138cd385b
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 10 17:01:19 2009 -0500
Very necessary file (replaces GOBS.java).
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/gobs.cfg | 6 +-
sim/gobs/gobs/Simulator.java | 238 ++++++++++++++++++++++++++++++++++++++++++
2 files changed, 241 insertions(+), 3 deletions(-)
create mode 100644 sim/gobs/gobs/Simulator.java
Diff of changes:
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
index e51236d..ee11791 100644
--- a/sim/gobs/gobs.cfg
+++ b/sim/gobs/gobs.cfg
@@ -1,7 +1,7 @@
# Print nodes and objects at startup (true/false)
-printInitialNodes = false
+printInitialNodes = true
# Print nodes and objects after each rebuild (true/false)
-printNodes = false
+printNodes = true
# Print object tranfers during rebuilds (true/false)
-printRebuilds = false
+printRebuilds = true
diff --git a/sim/gobs/gobs/Simulator.java b/sim/gobs/gobs/Simulator.java
new file mode 100644
index 0000000..cf4424a
--- /dev/null
+++ b/sim/gobs/gobs/Simulator.java
@@ -0,0 +1,238 @@
+
+package gobs;
+
+import java.math.BigInteger;
+import java.text.DecimalFormat;
+import java.util.*;
+
+/**
+ * <h3> GOBS placement simulator. </h3>
+ *
+ * Command-line arguments: <br>
+ * B: Bit length of addresses <br>
+ * nodes: Number of nodes <br>
+ * fileCount: Number of files <br>
+ * fileSize: Size of each file <br>
+ * chunk: Size of a contiguous chunk
+ * */
+
+class Simulator
+{
+ int B;
+ int N;
+
+ int fileCount;
+ int fileSize;
+ int strip;
+ PlacementScheme placer;
+ NodeScheme hub;
+
+ Properties properties = new Properties();
+
+ List<Node> nodes;
+ EnhancedLinkedHashSet<Obj> objects =
+ new EnhancedLinkedHashSet<Obj>();
+ Map<Integer,Collection<Obj>> files =
+ new HashMap<Integer,Collection<Obj>>(fileCount);
+
+ static Simulator current;
+ static final int maxTries = 10;
+
+ DecimalFormat df = new DecimalFormat("0.0");
+
+ public Simulator(int B, int N, int fileCount, int fileSize,
+ int strip, PlacementScheme placer, NodeScheme hub)
+ {
+ this.B = B;
+ this.N = N;
+ nodes = new ArrayList<Node>(N);
+
+ this.fileCount = fileCount;
+ this.fileSize = fileSize;
+ this.strip = strip;
+ this.placer = placer;
+ this.hub = hub;
+
+ try
+ {
+ java.io.FileInputStream cfg = new java.io.FileInputStream("gobs.cfg");
+ properties.load(cfg);
+ }
+ catch (java.io.IOException e)
+ {
+ bail("Could not open properties file!");
+ }
+ }
+
+ Map<Node,Integer> countObjects(List<Node> nodes)
+ {
+ Map<Node,Integer> result = new Hashtable<Node,Integer>();
+ for (Node node : nodes)
+ {
+ result.put(node, node.objects.size());
+ }
+ return result;
+ }
+
+ void printNodes(List<Node> nodes)
+ {
+ System.out.println("NODES:");
+ for (Node node : nodes)
+ System.out.println(node.bitString());
+ }
+
+ void printNodeObjects(List<Node> nodes)
+ {
+ System.out.println("NODE_CONTENTS:");
+ for (Node node : nodes)
+ System.out.println(node);
+ }
+
+ void printFiles(Map<Integer,List<Obj>> files)
+ {
+ for (Integer i : files.keySet())
+ {
+ System.out.println("file: " + i);
+ List<Obj> set = files.get(i);
+ for (Obj object : set)
+ System.out.print(object + " ");
+ System.out.println("");
+ }
+ }
+
+ static void bail(String msg)
+ {
+ System.out.println(msg);
+
+ // Exit code 1 is a Java error:
+ System.exit(2);
+ }
+
+ public static void main(String[] args)
+ {
+ String layoutName;
+ int B, N, fileCount, fileSize, strip;
+
+ Bits.init();
+
+ if (args.length < 5)
+ {
+ bail("usage: Simulator <B> <nodes> <files> " +
+ "<file size> <strip size>");
+ }
+
+ // Process input...
+ int arg = 0;
+ B = Integer.parseInt(args[arg++]);
+ N = Integer.parseInt(args[arg++]);
+ fileCount = Integer.parseInt(args[arg++]);
+ fileSize = Integer.parseInt(args[arg++]);
+ strip = Integer.parseInt(args[arg++]);
+
+ // PlacementScheme placer = new Kademlia(B);
+ PlacementScheme placer = new Nearest(B);
+ NodeScheme hub = new RandomNodes(B);
+
+ current =
+ new Simulator(B, N, fileCount, fileSize, strip, placer, hub);
+ current.execute();
+ }
+
+ public void execute()
+ {
+ this.B = B;
+
+ int uniqueFile = 1;
+
+ // Initialize node addresses...
+ hub.generate(N, nodes);
+
+ // Initialize object addresses...
+ for (int i = 0; i < fileCount; i++)
+ {
+ int fid = uniqueFile++;
+
+ int tries = 0;
+ Collection<Obj> set;
+ do
+ {
+ if (tries++ >= maxTries)
+ bail("Could not allocate new object ids!");
+
+ set = placer.allocateFile(fileSize, strip, 4, 3, nodes);
+ files.put(fid, set);
+ }
+ while (objects.containsAny(set));
+ objects.addAll(set);
+ }
+
+ // printFiles(files);
+
+ // Place objects and add up load...
+ placer.place(objects, nodes);
+ Map<Node,Integer> origCount = countObjects(nodes);
+
+ // printNodes(nodes);
+ if (properties.getProperty("printInitialNodes").equals("true"))
+ printNodeObjects(nodes);
+
+ // Cause a fault and reallocate objects...
+ int index = Bits.nextInt(nodes.size());
+ Node failed = nodes.remove(index);
+ System.out.println("failed: " + failed.bitString() +
+ " (" + failed.objects.size() + ")");
+
+ List<Obj> replacements = failed.objects;
+ for (Obj object : replacements)
+ placer.rebuild(object, nodes);
+ Map<Node,Integer> faultCount = countObjects(nodes);
+
+ if (properties.getProperty("printInitialNodes").equals("true"))
+ printNodeObjects(nodes);
+
+ // Find the load difference from before the fault...
+ Map<Node,Integer> diffs = new Hashtable<Node,Integer>();
+ for (Node node : faultCount.keySet())
+ {
+ int before = origCount.get(node);
+ int after = faultCount.get(node);
+ diffs.put(node, new Integer(after-before));
+ }
+
+ // Sort load differences...
+ MapSorter<Node> sorter = new MapSorter<Node>();
+ Map<Node,Integer> sorted = sorter.sort(diffs);
+
+ // Display load differences...
+ System.out.println("");
+ System.out.println("LOAD_INCREASES:");
+ for (Node node : sorted.keySet())
+ {
+ Integer d = sorted.get(node);
+ System.out.println(node.bitString() + ": " + d);
+ }
+
+ // Display data movement stats...
+ int total = 0;
+ for (Node node : sorted.keySet())
+ {
+ total += sorted.get(node);
+ }
+ System.out.println("TOTAL_TRANSFERS: " + total);
+
+ // Display data reallocation declustering...
+ System.out.println("PULL_DECLUSTERING: ");
+ int affected = 0;
+ for (Node node : sorted.keySet())
+ {
+ int d = sorted.get(node);
+ if (d > 0)
+ {
+ System.out.println(node.bitString() + ": " +
+ df.format((100.0*d)/total) + "%");
+ affected++;
+ }
+ }
+ System.out.println("SERVERS_AFFECTED: " + affected);
+ }
+}
hooks/post-receive
--
Grayskull Repository
1
0
[Gs-commits] Grayskull Repository branch, master, updated. git-migration-53-g7b26263
by noreply@mcs.anl.gov 10 Aug '09
by noreply@mcs.anl.gov 10 Aug '09
10 Aug '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 7b262637d44b272ccf154ddf7c937a382da479e2 (commit)
from 084c6d138aa26ecbd4b6d001a00dab41af9f0957 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 7b262637d44b272ccf154ddf7c937a382da479e2
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Mon Aug 10 16:32:15 2009 -0500
Many changes and improvements.
Fixed some doc errors.
Reorganized structure and file names to move toward running
experimental sweeps.
Now checks for ID conflicts for Nodes and Objs.
New properties file. Currently allows disabling certain output.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/About.txt | 10 +-
sim/gobs/GOBS.java | 177 -----------------------------
sim/gobs/RandomNodes.java | 26 ----
sim/gobs/build.xml | 7 +-
sim/gobs/gobs.cfg | 7 +
sim/gobs/{ => }/gobs/Addressable.java | 17 +++
sim/gobs/{ => }/gobs/Bits.java | 2 +
sim/gobs/gobs/EnhancedLinkedHashSet.java | 46 ++++++++
sim/gobs/{ => }/gobs/Kademlia.java | 4 +-
sim/gobs/{ => }/gobs/LayoutScheme.java | 2 +
sim/gobs/{ => }/gobs/MapSorter.java | 2 +
sim/gobs/{ => }/gobs/Nearest.java | 36 +++++-
sim/gobs/{ => }/gobs/Node.java | 2 +
sim/gobs/{ => }/gobs/NodeScheme.java | 2 +
sim/gobs/{ => }/gobs/Obj.java | 4 +-
sim/gobs/{ => }/gobs/PlacementScheme.java | 8 +-
sim/gobs/{ => }/gobs/Primary.java | 2 +
sim/gobs/gobs/RandomNodes.java | 38 ++++++
sim/gobs/{ => }/gobs/Secondary.java | 2 +
sim/gobs/{ => }/gobs/UniformNodes.java | 2 +
sim/gobs/manifest.mf | 2 +-
21 files changed, 175 insertions(+), 223 deletions(-)
delete mode 100644 sim/gobs/GOBS.java
delete mode 100644 sim/gobs/RandomNodes.java
create mode 100644 sim/gobs/gobs.cfg
rename sim/gobs/{ => }/gobs/Addressable.java (87%)
rename sim/gobs/{ => }/gobs/Bits.java (99%)
create mode 100644 sim/gobs/gobs/EnhancedLinkedHashSet.java
rename sim/gobs/{ => }/gobs/Kademlia.java (96%)
rename sim/gobs/{ => }/gobs/LayoutScheme.java (95%)
rename sim/gobs/{ => }/gobs/MapSorter.java (98%)
rename sim/gobs/{ => }/gobs/Nearest.java (71%)
rename sim/gobs/{ => }/gobs/Node.java (98%)
rename sim/gobs/{ => }/gobs/NodeScheme.java (95%)
rename sim/gobs/{ => }/gobs/Obj.java (97%)
rename sim/gobs/{ => }/gobs/PlacementScheme.java (87%)
rename sim/gobs/{ => }/gobs/Primary.java (94%)
create mode 100644 sim/gobs/gobs/RandomNodes.java
rename sim/gobs/{ => }/gobs/Secondary.java (95%)
rename sim/gobs/{ => }/gobs/UniformNodes.java (99%)
Diff of changes:
diff --git a/sim/gobs/About.txt b/sim/gobs/About.txt
index 0ca351f..022aa82 100644
--- a/sim/gobs/About.txt
+++ b/sim/gobs/About.txt
@@ -3,8 +3,8 @@ GOBS: Simulator
Compile and run with:
-javac GOBS.java
-java GOBS
+javac gobs/Simulator.java
+java gobs.Simulator
or
@@ -13,7 +13,7 @@ java -jar GOBS.jar
Run with arguments:
- <B> <nodes> <files> <file size> <object size>
+ <B> <nodes> <files> <file size> <strip size>
where:
@@ -21,10 +21,10 @@ B is the bit length of the addresses
nodes is the number of object stores
files is the number of files
file size is the size of each file
-objects size is the chunk size within a file
+strip size is the size of the contiguously placed byte segments within a file
The simulator simply assigns the objects to the nodes
-in accordance with the (Kademlia) XOR metric.
+in accordance with the Nearest metric.
A single fault is induced and the objects are reallocated.
The output is the difference in object loads
diff --git a/sim/gobs/GOBS.java b/sim/gobs/GOBS.java
deleted file mode 100644
index e99108c..0000000
--- a/sim/gobs/GOBS.java
+++ /dev/null
@@ -1,177 +0,0 @@
-
-import java.math.BigInteger;
-import java.text.DecimalFormat;
-import java.util.*;
-
-/**
- * <h3> GOBS placement simulator. </h3>
- *
- * Command-line arguments: <br>
- * B: Bit length of addresses <br>
- * nodes: Number of nodes <br>
- * fileCount: Number of files <br>
- * fileSize: Size of each file <br>
- * chunk: Size of a contiguous chunk
- * */
-
-class GOBS
-{
- static int B;
- static int M;
-
- static DecimalFormat df = new DecimalFormat("0.0");
-
- static Map<Node,Integer> countObjects(List<Node> nodes)
- {
- Map<Node,Integer> result = new Hashtable<Node,Integer>();
- for (Node node : nodes)
- {
- result.put(node, node.objects.size());
- }
- return result;
- }
-
- static void printNodes(List<Node> nodes)
- {
- System.out.println("NODES:");
- for (Node node : nodes)
- System.out.println(node.bitString());
- }
-
- static void printNodeObjects(List<Node> nodes)
- {
- System.out.println("NODE CONTENTS:");
- for (Node node : nodes)
- System.out.println(node);
- }
-
- static void printFiles(Map<Integer,List<Obj>> files)
- {
- for (Integer i : files.keySet())
- {
- System.out.println("file: " + i);
- List<Obj> set = files.get(i);
- for (Obj object : set)
- System.out.print(object + " ");
- System.out.println("");
- }
- }
-
- public static void main(String[] args)
- {
- String layoutName;
- int N, fileCount, fileSize, chunk;
- int uniqueFile = 1;
-
- Bits.init();
-
- if (args.length < 5)
- {
- System.out.println
- ("usage: GOBS <B> <nodes> <files> " +
- "<file size> <object size>");
- System.exit(1);
- }
-
- // Process input...
- int arg = 0;
- B = Integer.parseInt(args[arg++]);
- N = Integer.parseInt(args[arg++]);
- fileCount = Integer.parseInt(args[arg++]);
- fileSize = Integer.parseInt(args[arg++]);
- chunk = Integer.parseInt(args[arg++]);
-
- //PlacementScheme placer = new Kademlia(B);
- PlacementScheme placer = new Nearest(B);
- NodeScheme hub = new RandomNodes(B);
-
- List<Node> nodes = new ArrayList<Node>(N);
- List<Obj> objects = new ArrayList<Obj>();
- Map<Integer,List<Obj>>
- files = new HashMap<Integer,List<Obj>>(fileCount);
-
- // Initialize node addresses...
- hub.generate(N, nodes);
-
- // Initialize object addresses...
- for (int i = 0; i < fileCount; i++)
- {
- int fid = uniqueFile++;
- if (! files.containsKey(fid))
- {
- List<Obj> set = placer.allocateFile(fileSize, chunk, 4,
- 3, nodes);
- files.put(fid, set);
- objects.addAll(set);
- }
- }
-
- printFiles(files);
-
- // Place objects and add up load...
- placer.place(objects, nodes);
- Map<Node,Integer> origCount = countObjects(nodes);
-
- // printNodes(nodes);
- printNodeObjects(nodes);
-
- // Cause a fault and reallocate objects...
- int index = Bits.nextInt(nodes.size());
- Node failed = nodes.remove(index);
- System.out.println("failed: " + failed.bitString() +
- " (" + failed.objects.size() + ")");
-
- List<Obj> replacements = failed.objects;
- for (Obj object : replacements)
- placer.rebuild(object, nodes);
- Map<Node,Integer> faultCount = countObjects(nodes);
-
- printNodeObjects(nodes);
-
- // Find the load difference from before the fault...
- Map<Node,Integer> diffs = new Hashtable<Node,Integer>();
- for (Node node : faultCount.keySet())
- {
- int before = origCount.get(node);
- int after = faultCount.get(node);
- diffs.put(node, new Integer(after-before));
- }
-
- // Sort load differences...
- MapSorter<Node> sorter = new MapSorter<Node>();
- Map<Node,Integer> sorted = sorter.sort(diffs);
-
- // Display load differences...
- System.out.println("");
- System.out.println("LOAD_INCREASES:");
- for (Node node : sorted.keySet())
- {
- Integer d = sorted.get(node);
- System.out.println(node.bitString() + ": " + d);
- }
-
- // Display data movement stats...
- int total = 0;
- for (Node node : sorted.keySet())
- {
- total += sorted.get(node);
- }
- System.out.println("TOTAL_TRANSFERS: " + total);
-
- // Display data reallocation declustering...
- System.out.println("PULL_DECLUSTERING: ");
- int affected = 0;
- for (Node node : sorted.keySet())
- {
- int d = sorted.get(node);
- if (d > 0)
- {
- System.out.println(node.bitString() + ": " +
- df.format((100.0*d)/total) + "%");
- affected++;
- }
- }
- System.out.println("SERVERS_AFFECTED: " + affected);
-
- }
-}
diff --git a/sim/gobs/RandomNodes.java b/sim/gobs/RandomNodes.java
deleted file mode 100644
index c625831..0000000
--- a/sim/gobs/RandomNodes.java
+++ /dev/null
@@ -1,26 +0,0 @@
-
-import java.math.BigInteger;
-import java.util.*;
-
-/**
- * Places new nodes randomly without looking at existing nodes.
- * */
-
-class RandomNodes
- extends NodeScheme
-{
- RandomNodes(int B)
- {
- super(B);
- }
-
- public void generate(int count, List<Node> nodes)
- {
- for (int i = 0; i < count; i++)
- {
- BigInteger id = new BigInteger(B, Bits.rng);
- Node node = new Node(B, id);
- nodes.add(node);
- }
- }
-}
diff --git a/sim/gobs/build.xml b/sim/gobs/build.xml
index dfab282..e6ec7e6 100644
--- a/sim/gobs/build.xml
+++ b/sim/gobs/build.xml
@@ -14,7 +14,7 @@
<jar destfile="GOBS.jar"
manifest="manifest.mf">
<zipfileset dir="."
- includes="*.class" />
+ includes="gobs/*.class" />
</jar>
</target>
@@ -40,7 +40,10 @@
<target name="clean">
<delete>
- <fileset dir="." >
+ <fileset dir=".">
+ <filename name="GOBS.jar" />
+ </fileset>
+ <fileset dir="gobs" >
<filename name="*.class" />
</fileset>
</delete>
diff --git a/sim/gobs/gobs.cfg b/sim/gobs/gobs.cfg
new file mode 100644
index 0000000..e51236d
--- /dev/null
+++ b/sim/gobs/gobs.cfg
@@ -0,0 +1,7 @@
+
+# Print nodes and objects at startup (true/false)
+printInitialNodes = false
+# Print nodes and objects after each rebuild (true/false)
+printNodes = false
+# Print object tranfers during rebuilds (true/false)
+printRebuilds = false
diff --git a/sim/gobs/Addressable.java b/sim/gobs/gobs/Addressable.java
similarity index 87%
rename from sim/gobs/Addressable.java
rename to sim/gobs/gobs/Addressable.java
index e96ffa6..6f873a9 100644
--- a/sim/gobs/Addressable.java
+++ b/sim/gobs/gobs/Addressable.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
/**
@@ -98,6 +100,21 @@ class Addressable
return buffer.toString();
}
+ public int hashCode()
+ {
+ return id.hashCode();
+ }
+
+ public boolean equals(Object other)
+ {
+ if (other instanceof Addressable)
+ {
+ if (((Addressable) other).id.equals(id))
+ return true;
+ }
+ return false;
+ }
+
/*
Debugging only.
diff --git a/sim/gobs/Bits.java b/sim/gobs/gobs/Bits.java
similarity index 99%
rename from sim/gobs/Bits.java
rename to sim/gobs/gobs/Bits.java
index d6dd4db..f1cbed4 100644
--- a/sim/gobs/Bits.java
+++ b/sim/gobs/gobs/Bits.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.util.*;
/**
diff --git a/sim/gobs/gobs/EnhancedLinkedHashSet.java b/sim/gobs/gobs/EnhancedLinkedHashSet.java
new file mode 100644
index 0000000..2c491d8
--- /dev/null
+++ b/sim/gobs/gobs/EnhancedLinkedHashSet.java
@@ -0,0 +1,46 @@
+
+package gobs;
+
+import java.math.BigInteger;
+import java.util.*;
+
+class EnhancedLinkedHashSet<T>
+ extends LinkedHashSet<T>
+{
+ private static final long serialVersionUID = 1;
+
+ public EnhancedLinkedHashSet()
+ {
+ super();
+ }
+
+ boolean containsAny(Collection<T> c)
+ {
+ for (T thing : c)
+ {
+ if (contains(thing))
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ Debugging only.
+ */
+ public static void main(String[] args)
+ {
+ EnhancedLinkedHashSet<Object> set = new EnhancedLinkedHashSet<Object>();
+
+ /*
+ String hello = "Hello";
+ set.add(hello);
+ if (set.contains("Hello"))
+ System.out.println("true");
+ */
+
+ Obj obj = new Obj(4, new BigInteger("3"), 0, 0);
+ set.add(obj);
+ if (set.contains(new Obj(5, new BigInteger("3"), 1, 1)))
+ System.out.println("true");
+ }
+}
diff --git a/sim/gobs/Kademlia.java b/sim/gobs/gobs/Kademlia.java
similarity index 96%
rename from sim/gobs/Kademlia.java
rename to sim/gobs/gobs/Kademlia.java
index 30c0f2b..5c660c4 100644
--- a/sim/gobs/Kademlia.java
+++ b/sim/gobs/gobs/Kademlia.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.*;
@@ -14,7 +16,7 @@ class Kademlia
super(B);
}
- public void place(List<Obj> objects, List<Node> nodes)
+ public void place(Collection<Obj> objects, List<Node> nodes)
{
System.out.println("placing: " + objects.size());
for (Obj object : objects)
diff --git a/sim/gobs/LayoutScheme.java b/sim/gobs/gobs/LayoutScheme.java
similarity index 95%
rename from sim/gobs/LayoutScheme.java
rename to sim/gobs/gobs/LayoutScheme.java
index 1222f50..4587278 100644
--- a/sim/gobs/LayoutScheme.java
+++ b/sim/gobs/gobs/LayoutScheme.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.List;
diff --git a/sim/gobs/MapSorter.java b/sim/gobs/gobs/MapSorter.java
similarity index 98%
rename from sim/gobs/MapSorter.java
rename to sim/gobs/gobs/MapSorter.java
index b92e4cf..190c7eb 100644
--- a/sim/gobs/MapSorter.java
+++ b/sim/gobs/gobs/MapSorter.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.util.*;
class MapSorter<T>
diff --git a/sim/gobs/Nearest.java b/sim/gobs/gobs/Nearest.java
similarity index 71%
rename from sim/gobs/Nearest.java
rename to sim/gobs/gobs/Nearest.java
index a4f78a1..8fcb446 100644
--- a/sim/gobs/Nearest.java
+++ b/sim/gobs/gobs/Nearest.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.*;
@@ -14,7 +16,7 @@ class Nearest
super(B);
}
- public void place(List<Obj> objects, List<Node> nodes)
+ public void place(Collection<Obj> objects, List<Node> nodes)
{
System.out.println("placing: " + objects.size());
for (Obj object : objects)
@@ -56,19 +58,33 @@ class Nearest
Primary primary = (Primary) source.get(object.id);
secondary = primary.toSecondary(primary);
}
-
+
for (Node node : closest)
{
if (! node.contains(secondary.id))
{
- destination = node;
- destination.add(secondary);
+ destination = node;
break;
}
}
- System.out.println("rebuild: " + object.toString() + ": " +
- source.bitString() + " -> " +
- destination.bitString());
+
+ destination.add(secondary);
+
+ if (destination == null)
+ {
+ if (Simulator.current.properties.getProperty("printRebuilds")
+ .equals("true"))
+ System.out.println("rebuild: " + object.toString() + ": " +
+ source.bitString() + " ok ");
+ }
+ else
+ {
+ if (Simulator.current.properties.getProperty("printRebuilds")
+ .equals("true"))
+ System.out.println("rebuild: " + object.toString() + ": " +
+ source.bitString() + " -> " +
+ destination.bitString());
+ }
}
List<Node> closestNodes(Obj object, List<Node> nodes)
@@ -92,6 +108,12 @@ class Nearest
}
closest.add(closestNode);
}
+
+ if (closest.size() != object.replicas)
+ {
+ System.out.println("not enough closest nodes!");
+ }
+
return closest;
}
}
diff --git a/sim/gobs/Node.java b/sim/gobs/gobs/Node.java
similarity index 98%
rename from sim/gobs/Node.java
rename to sim/gobs/gobs/Node.java
index 680d9db..6ab4896 100644
--- a/sim/gobs/Node.java
+++ b/sim/gobs/gobs/Node.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.*;
diff --git a/sim/gobs/NodeScheme.java b/sim/gobs/gobs/NodeScheme.java
similarity index 95%
rename from sim/gobs/NodeScheme.java
rename to sim/gobs/gobs/NodeScheme.java
index 09b3d1a..55de9fd 100644
--- a/sim/gobs/NodeScheme.java
+++ b/sim/gobs/gobs/NodeScheme.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.util.*;
/**
diff --git a/sim/gobs/Obj.java b/sim/gobs/gobs/Obj.java
similarity index 97%
rename from sim/gobs/Obj.java
rename to sim/gobs/gobs/Obj.java
index 2fb7025..0ca2542 100644
--- a/sim/gobs/Obj.java
+++ b/sim/gobs/gobs/Obj.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
/**
@@ -30,7 +32,7 @@ class Obj
{
return new Secondary(B, id, size, replicas, primary);
}
-
+
public String toString()
{
return bitString() + "(" + size + ")";
diff --git a/sim/gobs/PlacementScheme.java b/sim/gobs/gobs/PlacementScheme.java
similarity index 87%
rename from sim/gobs/PlacementScheme.java
rename to sim/gobs/gobs/PlacementScheme.java
index 989aee9..7b16a7e 100644
--- a/sim/gobs/PlacementScheme.java
+++ b/sim/gobs/gobs/PlacementScheme.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.*;
@@ -22,8 +24,8 @@ abstract class PlacementScheme
/**
Generate an object set for a file.
*/
- public List<Obj> allocateFile(int size, int chunk, int width,
- int replicas, List<Node> nodes)
+ public Collection<Obj> allocateFile(int size, int chunk, int width,
+ int replicas, List<Node> nodes)
{
List<Obj> result = new ArrayList<Obj>(width*2);
@@ -71,7 +73,7 @@ abstract class PlacementScheme
/**
Place a set of objects.
*/
- abstract void place(List<Obj> objects, List<Node> nodes);
+ abstract void place(Collection<Obj> objects, List<Node> nodes);
/**
Find a new node to hold this object replica and place it.
diff --git a/sim/gobs/Primary.java b/sim/gobs/gobs/Primary.java
similarity index 94%
rename from sim/gobs/Primary.java
rename to sim/gobs/gobs/Primary.java
index ecc90a7..8ebc9b6 100644
--- a/sim/gobs/Primary.java
+++ b/sim/gobs/gobs/Primary.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
/**
diff --git a/sim/gobs/gobs/RandomNodes.java b/sim/gobs/gobs/RandomNodes.java
new file mode 100644
index 0000000..9358245
--- /dev/null
+++ b/sim/gobs/gobs/RandomNodes.java
@@ -0,0 +1,38 @@
+
+package gobs;
+
+import java.math.BigInteger;
+import java.util.*;
+
+/**
+ * Places new nodes randomly without looking at existing nodes.
+ * */
+
+class RandomNodes
+ extends NodeScheme
+{
+ RandomNodes(int B)
+ {
+ super(B);
+ }
+
+ public void generate(int count, List<Node> nodes)
+ {
+ for (int i = 0; i < count; i++)
+ {
+ BigInteger id;
+ Node node;
+ int tries = 0;
+ do
+ {
+ if (tries++ >= Simulator.maxTries)
+ Simulator.bail("Could not assign unique node id!");
+
+ id = new BigInteger(B, Bits.rng);
+ node = new Node(B, id);
+ }
+ while (nodes.contains(node));
+ nodes.add(node);
+ }
+ }
+}
diff --git a/sim/gobs/Secondary.java b/sim/gobs/gobs/Secondary.java
similarity index 95%
rename from sim/gobs/Secondary.java
rename to sim/gobs/gobs/Secondary.java
index 8f691fc..626d05b 100644
--- a/sim/gobs/Secondary.java
+++ b/sim/gobs/gobs/Secondary.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
/**
diff --git a/sim/gobs/UniformNodes.java b/sim/gobs/gobs/UniformNodes.java
similarity index 99%
rename from sim/gobs/UniformNodes.java
rename to sim/gobs/gobs/UniformNodes.java
index 9f2988c..431b677 100644
--- a/sim/gobs/UniformNodes.java
+++ b/sim/gobs/gobs/UniformNodes.java
@@ -1,4 +1,6 @@
+package gobs;
+
import java.math.BigInteger;
import java.util.*;
diff --git a/sim/gobs/manifest.mf b/sim/gobs/manifest.mf
index 69e7daf..d1e08e4 100644
--- a/sim/gobs/manifest.mf
+++ b/sim/gobs/manifest.mf
@@ -1,2 +1,2 @@
GOBS-Version: 0.9.0
-Main-Class: GOBS
+Main-Class: gobs.Simulator
hooks/post-receive
--
Grayskull Repository
1
0