Gs-commits
Threads by month
- ----- 2026 -----
- September
- 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
- 451 discussions
Grayskull Repository branch, master, updated. git-migration-252-g4ab7205
by noreply@mcs.anl.gov 07 Dec '09
by noreply@mcs.anl.gov 07 Dec '09
07 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 4ab72050c4ccf3b80a554d7da0b1eefdaae2872f (commit)
from cdae5e8d39a3d86efe82aae4330b6a29c99796f9 (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 4ab72050c4ccf3b80a554d7da0b1eefdaae2872f
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 17:50:23 2009 -0500
fixed some warnings
-----------------------------------------------------------------------
Summary of changes:
.../gsl/resources/cosd-prototype/cosd-prototype.c | 4 ++--
code/src/gsl/resources/storage/gs-storage.c | 3 +++
2 files changed, 5 insertions(+), 2 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 71d15bd..4c5431d 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -207,11 +207,11 @@ static void* thread_fn(void* foo)
return(NULL);
}
-static int txn_acc_compare(void *key, struct gs_hash_link *link)
+static int txn_acc_compare(void *key, struct gs_hash_link *hash_link)
{
struct txn_accumulator *txn_acc;
- txn_acc = gs_hash_get_entry(link, struct txn_accumulator, hash_link);
+ txn_acc = gs_hash_get_entry(hash_link, struct txn_accumulator, hash_link);
return(*((uint64_t*)key) == txn_acc->txn_number);
}
diff --git a/code/src/gsl/resources/storage/gs-storage.c b/code/src/gsl/resources/storage/gs-storage.c
index 3db73d7..5ff79a7 100644
--- a/code/src/gsl/resources/storage/gs-storage.c
+++ b/code/src/gsl/resources/storage/gs-storage.c
@@ -221,6 +221,9 @@ static int gs_storage_launch_op(struct gs_op *op, enum progress_mode mode)
gs_mutex_unlock(&storage_mutex);
return(-EINVAL);
break;
+ case GS_STO_PROG_MAX:
+ assert(0);
+ break;
}
return(0);
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-251-gcdae5e8
by noreply@mcs.anl.gov 05 Dec '09
by noreply@mcs.anl.gov 05 Dec '09
05 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via cdae5e8d39a3d86efe82aae4330b6a29c99796f9 (commit)
from dbab7da550883f0503e1e2e1f8e6ded95984c9cd (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 cdae5e8d39a3d86efe82aae4330b6a29c99796f9
Author: Samuel Lang <slang(a)bblogin.mcs.anl.gov>
Date: Sat Dec 5 14:45:48 2009 -0600
pprivate/pshared support.
The parser now supports pprivate and pshared storage specifiers in the pwait block.
This is the style of openmp. Variables declared pprivate get copied (shallow copy)
to every pbranch, variables declared pshared (or without a pprivate declaration) don't
get copied, and are shared by every pbranch in the pwait. The pprivate and pshared
tests in tests/correctness give some examples of their use.
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/tests/correctness/pprivate.gs | 79 ++++++++++++++++++++++
code/src/gsl/tests/correctness/pshared.gs | 97 ++++++++++++++++++++++++++++
2 files changed, 176 insertions(+), 0 deletions(-)
create mode 100644 code/src/gsl/tests/correctness/pprivate.gs
create mode 100644 code/src/gsl/tests/correctness/pshared.gs
Diff of changes:
diff --git a/code/src/gsl/tests/correctness/pprivate.gs b/code/src/gsl/tests/correctness/pprivate.gs
new file mode 100644
index 0000000..225c838
--- /dev/null
+++ b/code/src/gsl/tests/correctness/pprivate.gs
@@ -0,0 +1,79 @@
+#include "include/gs.h"
+#include "tests/correctness/btest.gsh"
+#include <assert.h>
+
+static __blocking void run_pprivate(void)
+{
+ pwait
+ {
+ pprivate int a;
+
+ a = 100;
+
+ pbranch
+ {
+ /* each pbranch block gets its own copy of pprivate variables */
+ assert(a == 100);
+
+ /* setting this pbranch's a to 200. */
+ a = 200;
+
+ btest1(&a);
+
+ /* this pbranch's a should be incremented by 1 */
+ assert(a == 201);
+ }
+
+ pbranch
+ {
+ /* each pbranch gets its own copy of pprivate variables, so a in this pbranch should
+ * still be 100, even though in the previous pbranch we set it to 200
+ */
+ assert(a == 100);
+
+ btest2(&a);
+
+ /* btest2 increments a by 2 */
+ assert(a == 102);
+ }
+ }
+
+ printf("pwait done\n");
+}
+
+static int done = 0;
+static void basic_cb(void *ptr)
+{
+ printf("%p\n", ptr);
+ printf("done\n");
+ done = 1;
+}
+
+int main(int argc, char *argv[])
+{
+ gs_op_id_t op_id;
+ void *myptr = malloc(1);
+
+ btest_init();
+ printf("%p\n", myptr);
+ run_pprivate_post(basic_cb, myptr, NULL, NULL, &op_id);
+
+ while(done == 0)
+ {
+ gs_poll(NULL, 0);
+ }
+
+ btest_finalize();
+ free(myptr);
+ return 0;
+}
+
+/*
+ * Local variables:
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ *
+ * vim: ft=c ts=8 sts=4 sw=4 expandtab
+ */
+
diff --git a/code/src/gsl/tests/correctness/pshared.gs b/code/src/gsl/tests/correctness/pshared.gs
new file mode 100644
index 0000000..1693e10
--- /dev/null
+++ b/code/src/gsl/tests/correctness/pshared.gs
@@ -0,0 +1,97 @@
+#include "include/gs.h"
+#include "tests/correctness/btest.gsh"
+#include <assert.h>
+
+static __blocking void run_pshared(void)
+{
+ pwait
+ {
+ pprivate int a;
+ pshared int b;
+ int c;
+
+ a = 100;
+ b = a;
+
+ pbranch
+ {
+ /* each pbranch block gets its own copy of pprivate variables */
+ assert(a == 100);
+ assert(a == b);
+
+ /* setting this pbranch's a to 200. */
+ a = 200;
+ assert(b == 100);
+ b = 300;
+
+ assert(c == 0);
+
+ btest1(&a);
+ /* this pbranch's a should be incremented by 1 */
+ assert(a == 201);
+
+ btest1(&b);
+ assert(b == 301);
+
+ /* c is shared */
+ assert(c == 400);
+ }
+
+ pbranch
+ {
+ /* each pbranch gets its own copy of pprivate variables, so a in this pbranch should
+ * still be 100, even though in the previous pbranch we set it to 200
+ */
+ assert(a == 100);
+
+ /* b is shared */
+ assert(b == 300);
+
+ c = 400;
+
+ btest2(&a);
+
+ /* btest2 increments a by 2 */
+ assert(a == 102);
+ }
+ }
+
+ printf("pwait done\n");
+}
+
+static int done = 0;
+static void basic_cb(void *ptr)
+{
+ printf("%p\n", ptr);
+ printf("done\n");
+ done = 1;
+}
+
+int main(int argc, char *argv[])
+{
+ gs_op_id_t op_id;
+ void *myptr = malloc(1);
+
+ btest_init();
+ printf("%p\n", myptr);
+ run_pshared_post(basic_cb, myptr, NULL, NULL, &op_id);
+
+ while(done == 0)
+ {
+ gs_poll(NULL, 0);
+ }
+
+ btest_finalize();
+ free(myptr);
+ return 0;
+}
+
+/*
+ * Local variables:
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * End:
+ *
+ * vim: ft=c ts=8 sts=4 sw=4 expandtab
+ */
+
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-250-gdbab7da
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via dbab7da550883f0503e1e2e1f8e6ded95984c9cd (commit)
from 4c45b23f0961414dbd552434baeaa95d980b7687 (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 dbab7da550883f0503e1e2e1f8e6ded95984c9cd
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 17:31:12 2009 -0500
fixes to prepare script
pushd is bash specific, and second prepare isn't necessarily in path
-----------------------------------------------------------------------
Summary of changes:
code/prepare | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
Diff of changes:
diff --git a/code/prepare b/code/prepare
index f90babe..f0693ee 100755
--- a/code/prepare
+++ b/code/prepare
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
rm -fv config.cache
@@ -11,6 +11,6 @@ fi
pushd src/gsl > /dev/null
-prepare
+./prepare
popd > /dev/null
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-249-g4c45b23
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 4c45b23f0961414dbd552434baeaa95d980b7687 (commit)
via 5a74f2ec6ed8e128098d9c1cf28f66b530c92fcf (commit)
via 3d7d2ab27cca12f54fb7bf7d0a451c65fac48905 (commit)
from 1e25eedcbd4355f609ac2f0de500ccbcf10b8f7b (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 4c45b23f0961414dbd552434baeaa95d980b7687
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 17:14:38 2009 -0500
fix whitespace
commit 5a74f2ec6ed8e128098d9c1cf28f66b530c92fcf
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 17:13:16 2009 -0500
fix cursor function pointers
All cursor function pointers start with c_ on older versions of BDB.
commit 3d7d2ab27cca12f54fb7bf7d0a451c65fac48905
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 17:01:49 2009 -0500
more TODO comments
-----------------------------------------------------------------------
Summary of changes:
.../gsl/resources/cosd-prototype/cosd-prototype.c | 16 ++++++++++------
1 files changed, 10 insertions(+), 6 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 826deee..71d15bd 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -14,13 +14,17 @@
#include <db.h>
#include <stdlib.h>
+/**************************************************************/
/* TODO: general stuff:
- * - deadlock detection and handling (and deadlock avoidance)
+ * - deadlock detection and avoidance
* - consider non-durable transactions in order to coalesce commits
* - use txn_checkpoint to flush when coalescing
* - consider rmw locks where appropriate
* - long term: consider fallocate hint for logs to keep them linear
+ * - try computing cksum along the way, store in db
+ * - either in log map itself or db that matches its keys
*/
+/**************************************************************/
/* TODO: figure out how to toggle something like this at run time; we don't
* need locking if initialized in polling mode
@@ -861,14 +865,14 @@ static int dump_op_worker(struct gs_op* op)
assert(ret == 0); /* TODO: err handling */
/* loop through version db, one entry per object */
- while ((ret = ver_dbcp->get(ver_dbcp, &ver_key, &ver_value, DB_NEXT)) == 0)
+ while ((ret = ver_dbcp->c_get(ver_dbcp, &ver_key, &ver_value, DB_NEXT)) == 0)
{
printf("OID: %llu\n", vk);
printf("=============================================\n");
printf(" version: %llu\n", vv);
/* next log offset entry should match, no need to search */
- ret = log_offset_dbcp->get(log_offset_dbcp, &log_offset_key,
+ ret = log_offset_dbcp->c_get(log_offset_dbcp, &log_offset_key,
&log_offset_value, DB_NEXT);
assert(ret == 0); /* TODO: err handling */
assert(lok == vk);
@@ -879,7 +883,7 @@ static int dump_op_worker(struct gs_op* op)
mvk.oid = vk;
mvk.version = 0;
c_get_flag = DB_SET_RANGE;
- while((ret = missing_ver_dbcp->get(missing_ver_dbcp,
+ while((ret = missing_ver_dbcp->c_get(missing_ver_dbcp,
&missing_ver_key, &missing_ver_value, c_get_flag)) == 0)
{
c_get_flag = DB_NEXT;
@@ -894,7 +898,7 @@ static int dump_op_worker(struct gs_op* op)
lmk.oid = vk;
lmk.logical_offset_end = 0;
c_get_flag = DB_SET_RANGE;
- while((ret = log_map_dbcp->get(log_map_dbcp,
+ while((ret = log_map_dbcp->c_get(log_map_dbcp,
&log_map_key, &log_map_value, c_get_flag)) == 0)
{
printf("logical_off: %lld, logical_end: %lld, size: %lld, log_off: %lld, ver: %llu\n",
@@ -1273,7 +1277,7 @@ static int txn_close_op_worker(struct gs_op* op)
* region
*/
/* delete it from db; will be added back later if necessary */
- ret = dbc_p->del(dbc_p, 0);
+ ret = dbc_p->c_del(dbc_p, 0);
if(ret != 0)
{
/* TODO: err handling */
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-246-g1e25eed
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 1e25eedcbd4355f609ac2f0de500ccbcf10b8f7b (commit)
via 536bb045744a46967b9593a60a0d45d86b283dc0 (commit)
via bcc3c0cf8553274cc38a026bbb4a85406688b2bc (commit)
from 2275e6c4c8407467eab6dbc06c543ed470fbb68d (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 1e25eedcbd4355f609ac2f0de500ccbcf10b8f7b
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 16:07:53 2009 -0600
New Rebuild02 test for traffic per Rebuild.
commit 536bb045744a46967b9593a60a0d45d86b283dc0
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 15:05:16 2009 -0600
Simpler Sweep.execute() argument list.
commit bcc3c0cf8553274cc38a026bbb4a85406688b2bc
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:40:16 2009 -0600
More fundamental sweep method.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/gobs/sim/Rebuild.java | 24 +-
sim/gobs/gobs/sim/Simulator.java | 6 +-
sim/gobs/gobs/sweep/AbstractSweep.java | 11 +
sim/gobs/gobs/sweep/ParallelSweep.java | 1 -
sim/gobs/gobs/sweep/Rebuild02.java | 126 +
sim/gobs/gobs/sweep/Sweep.java | 31 +-
sim/gobs/sweeps/{rb01-small.cfg => rb02-small.cfg} | 2 +-
.../{sweeps/rb01-small.cfg => wiki/rb02-small.cfg} | 2 +-
sim/gobs/wiki/rb02-small.eps | 7417 ++++++++++++++++++++
9 files changed, 7610 insertions(+), 10 deletions(-)
create mode 100644 sim/gobs/gobs/sweep/Rebuild02.java
copy sim/gobs/sweeps/{rb01-small.cfg => rb02-small.cfg} (97%)
copy sim/gobs/{sweeps/rb01-small.cfg => wiki/rb02-small.cfg} (97%)
create mode 100755 sim/gobs/wiki/rb02-small.eps
Diff of changes:
diff --git a/sim/gobs/gobs/sim/Rebuild.java b/sim/gobs/gobs/sim/Rebuild.java
index 6047d83..829f57b 100644
--- a/sim/gobs/gobs/sim/Rebuild.java
+++ b/sim/gobs/gobs/sim/Rebuild.java
@@ -11,7 +11,7 @@ import gobs.util.*;
Is only executed ({@link #rebuild}) once. Thus rebuild variables
can logically be declared at class level.
*/
-class Rebuild
+public class Rebuild
{
NavigableSet<Event> schedule = null;
@@ -151,7 +151,10 @@ class Rebuild
done.add(copy.object);
}
- int loadAt(double t)
+ /**
+ Compute the load from this Rebuild at absolute simulated time t.
+ */
+ public int loadAt(double t)
{
int result = 0;
NavigableSet<Event> view = schedule.tailSet(new Event(t), false);
@@ -165,6 +168,23 @@ class Rebuild
}
/**
+ Compute the load from this Rebuild at simulated time t relative
+ to the start of this Rebuild.
+ */
+ public int loadOffset(double t)
+ {
+ return loadAt(t+start);
+ }
+
+ /**
+ Simulated time from start to finish for this Rebuild.
+ */
+ public double length()
+ {
+ return finish-start;
+ }
+
+ /**
Debugging only.
*/
void dumpInflight(NavigableSet<Copy> inflight)
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
index 78595e5..ad23799 100644
--- a/sim/gobs/gobs/sim/Simulator.java
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -64,7 +64,7 @@ public class Simulator
/**
Aggregate properties from all input files:
*/
- Properties properties = new Properties();
+ public Properties properties = new Properties();
/**
Directory in which to look for properties files:
@@ -89,7 +89,7 @@ public class Simulator
/**
History of rebuilds.
*/
- List<Rebuild> rebuilds = new ArrayList<Rebuild>();
+ public List<Rebuild> rebuilds = new ArrayList<Rebuild>();
/**
Current rebuild in progress.
@@ -874,7 +874,7 @@ public class Simulator
*/
public void initialize(Properties properties)
{
- this.properties = properties;
+ this.properties = (Properties) properties.clone();
}
/**
diff --git a/sim/gobs/gobs/sweep/AbstractSweep.java b/sim/gobs/gobs/sweep/AbstractSweep.java
index efda893..f43a4c5 100644
--- a/sim/gobs/gobs/sweep/AbstractSweep.java
+++ b/sim/gobs/gobs/sweep/AbstractSweep.java
@@ -230,6 +230,17 @@ abstract class AbstractSweep
this.properties = getopts(args);
}
+ static Set<String> values(Collection<Simulator> list, String name)
+ {
+ Set<String> result = new HashSet<String>();
+ for (Simulator simulator : list)
+ {
+ String v = Tools.string(simulator.properties, name);
+ result.add(v);
+ }
+ return result;
+ }
+
static void reportRuntime()
{
long t = (new Date().getTime()-launch.getTime())/(60*1000);
diff --git a/sim/gobs/gobs/sweep/ParallelSweep.java b/sim/gobs/gobs/sweep/ParallelSweep.java
index a2f809e..b11b523 100644
--- a/sim/gobs/gobs/sweep/ParallelSweep.java
+++ b/sim/gobs/gobs/sweep/ParallelSweep.java
@@ -111,7 +111,6 @@ class ParallelSweep
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));
diff --git a/sim/gobs/gobs/sweep/Rebuild02.java b/sim/gobs/gobs/sweep/Rebuild02.java
new file mode 100644
index 0000000..bd1a9fd
--- /dev/null
+++ b/sim/gobs/gobs/sweep/Rebuild02.java
@@ -0,0 +1,126 @@
+
+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 rebuild activity over time during rebuild.
+ *
+ * Usage: Rebuild02 -n <repeats> -o <output.eps> *.cfg
+ * */
+
+class Rebuild02
+{
+ static Properties properties;
+
+ public static void main(String[] args)
+ {
+ properties = Sweep.getopts(args);
+
+ AbstractSweep.seed(properties);
+
+ String output = Tools.string(properties, "output");
+ double interval = Tools.decimal(properties,
+ "plot.traffic.interval");
+
+ int minNodes = Tools.integer(properties, "nodes.min");
+ int maxNodes = Tools.integer(properties, "nodes.max");
+ String step = Tools.string(properties, "nodes.step");
+ List<String> values = Sweep.values(step, minNodes, maxNodes);
+
+ System.out.println("Rebuild02: " + values);
+
+ final XYSeriesCollection collection = new XYSeriesCollection();
+
+ properties.setProperty("impl.placement", "Nearest");
+ Sweep pSweep = new Sweep(properties);
+ pSweep.repeats = Tools.integer(properties, "repeats");
+ pSweep.execute("nodes", values);
+
+ List<XYSeries> allSeries = new ArrayList<XYSeries>();
+
+ List<XYSeries> pSeries = plots(pSweep, "PAST", "nodes",
+ values, interval);
+ allSeries.addAll(pSeries);
+
+ /*
+ properties.setProperty("impl.placement", "Kademlia");
+ ArraySweep kSweep = new ArraySweep(properties);
+ kSweep.repeats = Tools.integer(properties, "repeats");
+ kSweep.execute("Kademlia", "nodes", values, "distribution");
+ allSeries.addAll(kSweep.collection);
+
+ properties.setProperty("impl.placement", "VertexGroups");
+ ArraySweep vgSweep = new ArraySweep(properties);
+ vgSweep.repeats = Tools.integer(properties, "repeats");
+ vgSweep.execute("Vertex Groups", "nodes", values, "distribution");
+ allSeries.addAll(vgSweep.collection);
+ */
+
+ for (XYSeries series : allSeries)
+ collection.addSeries(series);
+
+ MultiplePlot.plot(collection, "Rebuild Traffic",
+ "time", "copies in flight",
+ output);
+
+ // AsciiPlot.plot(pSweep.series, "Maximum Rebuild Load",
+ // "nodes", "load", "tmp.txt");
+ }
+
+ static List<XYSeries> plots(Sweep sweep, String label,
+ String xname, List<String> values,
+ double interval)
+ {
+ List<XYSeries> results = new ArrayList<XYSeries>();
+
+ for (String v : values)
+ {
+ XYSeries series = new XYSeries(label + " N=" + v);
+ List<Rebuild> rebuilds = new ArrayList<Rebuild>();
+ for (Simulator simulator : sweep.sims.values())
+ {
+ if (Tools.string(simulator.properties, xname).equals(v))
+ {
+ rebuilds.addAll(simulator.rebuilds);
+ }
+ }
+ loadsToSeries(series, rebuilds, interval);
+ results.add(series);
+ }
+ return results;
+ }
+
+ static void loadsToSeries(XYSeries series, List<Rebuild> rebuilds,
+ double interval)
+ {
+ double longest = longestRebuild(rebuilds);
+ double d = 0.0;
+ while (d <= longest)
+ {
+ double total = 0.0;
+ for (Rebuild rebuild : rebuilds)
+ total += rebuild.loadOffset(d);
+ double sample = total/rebuilds.size();
+ series.add(d, sample);
+ d += interval;
+ }
+ }
+
+ static double longestRebuild(List<Rebuild> rebuilds)
+ {
+ double max = 0.0;
+ for (Rebuild rebuild : rebuilds)
+ if (rebuild.length() > max)
+ max = rebuild.length();
+ return max;
+ }
+}
diff --git a/sim/gobs/gobs/sweep/Sweep.java b/sim/gobs/gobs/sweep/Sweep.java
index 666b600..85525f1 100644
--- a/sim/gobs/gobs/sweep/Sweep.java
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -18,7 +18,6 @@ class Sweep
extends AbstractSweep
{
Map<String,Simulator> sims = new Hashtable<String,Simulator>();
- List<Statistics> stats = new Vector<Statistics>();
XYSeries series;
int repeats;
@@ -41,6 +40,35 @@ class Sweep
/**
Execute the parameter sweep.
For each value in values, substitute it for xname in the
+ properties object. Run the simulation and store it in
+ sims under String "xname=value".
+ @param xname The property that will take the varying value.
+ @param values The values to plug into property xname.
+ */
+ void execute(String xname, List<String> values)
+ {
+ repeats = Tools.integer(properties, "repeats");
+
+ if (repeats <= 0)
+ System.out.println("WARNING: repeats=" + repeats);
+
+ for (String v : values)
+ {
+ for (int i = 0; i < repeats; i++)
+ {
+ System.out.println("execute");
+ properties.setProperty("unique", new Integer(i).toString());
+ properties.setProperty(xname, v);
+ Simulator simulator = new Simulator(properties);
+ simulator.execute();
+ sims.put(xname+"="+v+";unique="+i, simulator);
+ }
+ }
+ }
+
+ /**
+ 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.
@param description Tag passed into plot legend.
@@ -67,7 +95,6 @@ class Sweep
properties.setProperty(xname, v);
Simulator simulator = new Simulator(properties);
simulator.execute();
- stats.add(simulator.stats);
System.out.println("result: " + result(simulator, yname));
total += result(simulator, yname);
}
diff --git a/sim/gobs/sweeps/rb01-small.cfg b/sim/gobs/sweeps/rb02-small.cfg
similarity index 97%
copy from sim/gobs/sweeps/rb01-small.cfg
copy to sim/gobs/sweeps/rb02-small.cfg
index 6474dc5..d5ff9bb 100644
--- a/sim/gobs/sweeps/rb01-small.cfg
+++ b/sim/gobs/sweeps/rb02-small.cfg
@@ -20,7 +20,7 @@ B = 16
nodes.min = 12
nodes.max = 16
# Step through nodes: See AbstractSweep.values()
-nodes.step = literal_14,16,18
+nodes.step = literal_20,30,40
# Number of files:
files = 6
# Number of faults:
diff --git a/sim/gobs/sweeps/rb01-small.cfg b/sim/gobs/wiki/rb02-small.cfg
similarity index 97%
copy from sim/gobs/sweeps/rb01-small.cfg
copy to sim/gobs/wiki/rb02-small.cfg
index 6474dc5..d5ff9bb 100644
--- a/sim/gobs/sweeps/rb01-small.cfg
+++ b/sim/gobs/wiki/rb02-small.cfg
@@ -20,7 +20,7 @@ B = 16
nodes.min = 12
nodes.max = 16
# Step through nodes: See AbstractSweep.values()
-nodes.step = literal_14,16,18
+nodes.step = literal_20,30,40
# Number of files:
files = 6
# Number of faults:
diff --git a/sim/gobs/wiki/rb02-small.eps b/sim/gobs/wiki/rb02-small.eps
new file mode 100755
index 0000000..cdf3d23
--- /dev/null
+++ b/sim/gobs/wiki/rb02-small.eps
@@ -0,0 +1,7417 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: (Apache XML Graphics Commons: EPS Generator for Java2D)
+%%CreationDate: 2009-12-04T15:53:03
+%%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
+141.394 21.01 M
+136.94 21.01 lineto
+132.894 15.682 lineto
+131.581 15.682 lineto
+131.581 21.01 lineto
+127.94 21.01 lineto
+127.94 6.463 lineto
+133.8 6.463 lineto
+135.003 6.463 135.901 6.619 QUADTO
+136.8 6.775 137.565 7.244 QUADTO
+138.347 7.744 138.808 8.51 QUADTO
+139.269 9.275 139.269 10.463 QUADTO
+139.269 12.135 138.511 13.174 QUADTO
+137.753 14.213 136.503 14.822 QUADTO
+141.394 21.01 lineto
+closepath
+135.519 10.916 M
+135.519 10.369 135.308 9.979 QUADTO
+135.097 9.588 134.612 9.369 QUADTO
+134.269 9.229 133.847 9.189 QUADTO
+133.425 9.15 132.8 9.15 QUADTO
+131.581 9.15 lineto
+131.581 13.057 lineto
+132.628 13.057 lineto
+133.378 13.057 133.917 12.963 QUADTO
+134.456 12.869 134.815 12.572 QUADTO
+135.175 12.291 135.347 11.916 QUADTO
+135.519 11.541 135.519 10.916 QUADTO
+closepath
+147.884 21.307 M
+144.774 21.307 143.126 19.822 QUADTO
+141.478 18.338 141.478 15.588 QUADTO
+141.478 12.9 143.017 11.299 QUADTO
+144.556 9.697 147.337 9.697 QUADTO
+149.853 9.697 151.118 11.057 QUADTO
+152.384 12.416 152.384 14.947 QUADTO
+152.384 16.182 lineto
+144.899 16.182 lineto
+144.946 16.932 145.22 17.447 QUADTO
+145.493 17.963 145.946 18.26 QUADTO
+146.384 18.572 146.97 18.705 QUADTO
+147.556 18.838 148.243 18.838 QUADTO
+148.837 18.838 149.415 18.705 QUADTO
+149.993 18.572 150.478 18.354 QUADTO
+150.899 18.166 151.251 17.955 QUADTO
+151.603 17.744 151.837 17.572 QUADTO
+152.196 17.572 lineto
+152.196 20.4 lineto
+151.774 20.557 151.431 20.697 QUADTO
+151.087 20.838 150.478 20.994 QUADTO
+149.915 21.135 149.329 21.221 QUADTO
+148.743 21.307 147.884 21.307 QUADTO
+closepath
+149.024 14.119 M
+148.993 13.025 148.517 12.463 QUADTO
+148.04 11.9 147.071 11.9 QUADTO
+146.071 11.9 145.509 12.494 QUADTO
+144.946 13.088 144.884 14.119 QUADTO
+149.024 14.119 lineto
+closepath
+161.399 15.447 M
+161.399 13.807 160.899 13.104 QUADTO
+160.399 12.4 159.368 12.4 QUADTO
+158.915 12.4 158.462 12.541 QUADTO
+158.009 12.682 157.571 12.979 QUADTO
+157.571 18.494 lineto
+157.899 18.619 158.251 18.674 QUADTO
+158.603 18.729 158.946 18.729 QUADTO
+160.181 18.729 160.79 17.908 QUADTO
+161.399 17.088 161.399 15.447 QUADTO
+closepath
+164.899 15.369 M
+164.899 17.994 163.571 19.611 QUADTO
+162.243 21.229 160.274 21.229 QUADTO
+159.462 21.229 158.853 21.041 QUADTO
+158.243 20.854 157.571 20.463 QUADTO
+157.415 21.01 lineto
+154.149 21.01 lineto
+154.149 5.807 lineto
+157.571 5.807 lineto
+157.571 11.182 lineto
+158.321 10.541 159.103 10.143 QUADTO
+159.884 9.744 160.899 9.744 QUADTO
+162.821 9.744 163.86 11.236 QUADTO
+164.899 12.729 164.899 15.369 QUADTO
+closepath
+176.974 21.01 M
+173.552 21.01 lineto
+173.552 19.791 lineto
+172.661 20.541 171.919 20.924 QUADTO
+171.177 21.307 170.146 21.307 QUADTO
+168.521 21.307 167.606 20.275 QUADTO
+166.692 19.244 166.692 17.182 QUADTO
+166.692 10.041 lineto
+170.13 10.041 lineto
+170.13 15.479 lineto
+170.13 16.338 170.177 16.869 QUADTO
+170.224 17.4 170.38 17.775 QUADTO
+170.536 18.119 170.864 18.291 QUADTO
+171.192 18.463 171.786 18.463 QUADTO
+172.146 18.463 172.638 18.291 QUADTO
+173.13 18.119 173.552 17.822 QUADTO
+173.552 10.041 lineto
+176.974 10.041 lineto
+176.974 21.01 lineto
+closepath
+183.011 21.01 M
+179.589 21.01 lineto
+179.589 10.041 lineto
+183.011 10.041 lineto
+183.011 21.01 lineto
+closepath
+183.104 8.479 M
+179.495 8.479 lineto
+179.495 5.807 lineto
+183.104 5.807 lineto
+183.104 8.479 lineto
+closepath
+189.046 21.01 M
+185.624 21.01 lineto
+185.624 5.807 lineto
+189.046 5.807 lineto
+189.046 21.01 lineto
+closepath
+201.628 21.01 M
+198.206 21.01 lineto
+198.206 19.869 lineto
+197.878 20.135 197.456 20.447 QUADTO
+197.034 20.76 196.706 20.916 QUADTO
+196.3 21.119 195.894 21.213 QUADTO
+195.487 21.307 194.94 21.307 QUADTO
+193.065 21.307 191.972 19.76 QUADTO
+190.878 18.213 190.878 15.604 QUADTO
+190.878 14.166 191.245 13.111 QUADTO
+191.612 12.057 192.269 11.275 QUADTO
+192.862 10.572 193.714 10.158 QUADTO
+194.565 9.744 195.519 9.744 QUADTO
+196.378 9.744 196.925 9.924 QUADTO
+197.472 10.104 198.206 10.479 QUADTO
+198.206 5.807 lineto
+201.628 5.807 lineto
+201.628 21.01 lineto
+closepath
+198.206 17.979 M
+198.206 12.604 lineto
+197.956 12.479 197.542 12.393 QUADTO
+197.128 12.307 196.847 12.307 QUADTO
+195.612 12.307 194.995 13.166 QUADTO
+194.378 14.025 194.378 15.572 QUADTO
+194.378 17.197 194.87 17.916 QUADTO
+195.362 18.635 196.456 18.635 QUADTO
+196.909 18.635 197.37 18.463 QUADTO
+197.831 18.291 198.206 17.979 QUADTO
+closepath
+213.091 21.01 M
+213.091 9.244 lineto
+208.794 9.244 lineto
+208.794 6.463 lineto
+221.044 6.463 lineto
+221.044 9.244 lineto
+216.747 9.244 lineto
+216.747 21.01 lineto
+213.091 21.01 lineto
+closepath
+229.712 13.275 M
+229.431 13.275 lineto
+229.228 13.213 228.86 13.174 QUADTO
+228.493 13.135 228.04 13.135 QUADTO
+227.509 13.135 226.915 13.291 QUADTO
+226.321 13.447 225.774 13.666 QUADTO
+225.774 21.01 lineto
+222.353 21.01 lineto
+222.353 10.041 lineto
+225.774 10.041 lineto
+225.774 11.619 lineto
+226.009 11.4 226.423 11.072 QUADTO
+226.837 10.744 227.181 10.557 QUADTO
+227.54 10.322 228.032 10.166 QUADTO
+228.524 10.01 228.978 10.01 QUADTO
+229.134 10.01 229.337 10.018 QUADTO
+229.54 10.025 229.712 10.041 QUADTO
+229.712 13.275 lineto
+closepath
+237.071 18.15 M
+237.071 15.869 lineto
+236.196 15.947 235.657 16.01 QUADTO
+235.118 16.072 234.603 16.26 QUADTO
+234.149 16.416 233.907 16.736 QUADTO
+233.665 17.057 233.665 17.588 QUADTO
+233.665 18.354 234.079 18.643 QUADTO
+234.493 18.932 235.306 18.932 QUADTO
+235.743 18.932 236.212 18.729 QUADTO
+236.681 18.525 237.071 18.15 QUADTO
+closepath
+237.071 19.854 M
+236.712 20.135 236.438 20.369 QUADTO
+236.165 20.604 235.696 20.838 QUADTO
+235.228 21.072 234.798 21.189 QUADTO
+234.368 21.307 233.587 21.307 QUADTO
+232.118 21.307 231.157 20.33 QUADTO
+230.196 19.354 230.196 17.869 QUADTO
+230.196 16.65 230.688 15.893 QUADTO
+231.181 15.135 232.103 14.697 QUADTO
+233.024 14.244 234.313 14.072 QUADTO
+235.603 13.9 237.087 13.807 QUADTO
+237.087 13.744 lineto
+237.087 12.838 236.415 12.486 QUADTO
+235.743 12.135 234.415 12.135 QUADTO
+233.806 12.135 232.993 12.361 QUADTO
+232.181 12.588 231.415 12.916 QUADTO
+231.118 12.916 lineto
+231.118 10.275 lineto
+231.634 10.135 232.767 9.932 QUADTO
+233.899 9.729 235.04 9.729 QUADTO
+237.884 9.729 239.173 10.674 QUADTO
+240.462 11.619 240.462 13.541 QUADTO
+240.462 21.01 lineto
+237.071 21.01 lineto
+237.071 19.854 lineto
+closepath
+250.013 8.385 M
+249.747 8.385 lineto
+249.544 8.338 249.13 8.244 QUADTO
+248.716 8.15 248.341 8.15 QUADTO
+247.31 8.15 246.935 8.533 QUADTO
+246.56 8.916 246.56 9.947 QUADTO
+246.56 10.041 lineto
+249.278 10.041 lineto
+249.278 12.432 lineto
+246.669 12.432 lineto
+246.669 21.01 lineto
+243.263 21.01 lineto
+243.263 12.432 lineto
+241.888 12.432 lineto
+241.888 10.041 lineto
+243.263 10.041 lineto
+243.263 9.744 lineto
+243.263 7.729 244.317 6.721 QUADTO
+245.372 5.713 247.513 5.713 QUADTO
+248.247 5.713 248.896 5.768 QUADTO
+249.544 5.822 250.013 5.916 QUADTO
+250.013 8.385 lineto
+closepath
+257.659 8.385 M
+257.394 8.385 lineto
+257.19 8.338 256.776 8.244 QUADTO
+256.362 8.15 255.987 8.15 QUADTO
+254.956 8.15 254.581 8.533 QUADTO
+254.206 8.916 254.206 9.947 QUADTO
+254.206 10.041 lineto
+256.925 10.041 lineto
+256.925 12.432 lineto
+254.315 12.432 lineto
+254.315 21.01 lineto
+250.909 21.01 lineto
+250.909 12.432 lineto
+249.534 12.432 lineto
+249.534 10.041 lineto
+250.909 10.041 lineto
+250.909 9.744 lineto
+250.909 7.729 251.964 6.721 QUADTO
+253.019 5.713 255.159 5.713 QUADTO
+255.894 5.713 256.542 5.768 QUADTO
+257.19 5.822 257.659 5.916 QUADTO
+257.659 8.385 lineto
+closepath
+261.712 21.01 M
+258.29 21.01 lineto
+258.29 10.041 lineto
+261.712 10.041 lineto
+261.712 21.01 lineto
+closepath
+261.806 8.479 M
+258.196 8.479 lineto
+258.196 5.807 lineto
+261.806 5.807 lineto
+261.806 8.479 lineto
+closepath
+269.7 21.307 M
+268.341 21.307 267.216 20.963 QUADTO
+266.091 20.619 265.263 19.9 QUADTO
+264.435 19.197 263.981 18.119 QUADTO
+263.528 17.041 263.528 15.572 QUADTO
+263.528 13.994 264.021 12.893 QUADTO
+264.513 11.791 265.372 11.072 QUADTO
+266.185 10.4 267.294 10.072 QUADTO
+268.403 9.744 269.606 9.744 QUADTO
+270.513 9.744 271.419 9.955 QUADTO
+272.325 10.166 273.247 10.619 QUADTO
+273.247 13.541 lineto
+272.81 13.541 lineto
+272.606 13.354 272.31 13.119 QUADTO
+272.013 12.885 271.653 12.682 QUADTO
+271.278 12.479 270.81 12.338 QUADTO
+270.341 12.197 269.778 12.197 QUADTO
+268.466 12.197 267.747 13.111 QUADTO
+267.028 14.025 267.028 15.572 QUADTO
+267.028 17.213 267.794 18.025 QUADTO
+268.56 18.838 269.825 18.838 QUADTO
+270.481 18.838 270.966 18.689 QUADTO
+271.45 18.541 271.81 18.338 QUADTO
+272.138 18.135 272.388 17.916 QUADTO
+272.638 17.697 272.81 17.525 QUADTO
+273.247 17.525 lineto
+273.247 20.447 lineto
+272.95 20.572 272.567 20.744 QUADTO
+272.185 20.916 271.778 21.025 QUADTO
+271.278 21.15 270.849 21.229 QUADTO
+270.419 21.307 269.7 21.307 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
+71.356 376.516 M
+328.644 376.516 lineto
+328.644 399 lineto
+71.356 399 lineto
+71.356 376.516 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
+71.856 377.016 M
+328.144 377.016 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
+71.856 398.5 M
+328.144 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
+71.856 398.5 M
+71.856 377.016 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
+328.144 398.5 M
+328.144 377.016 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
+75.356 387.758 M
+89.356 387.758 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
+79.356 384.758 M
+85.356 384.758 lineto
+85.356 390.758 lineto
+79.356 390.758 lineto
+79.356 384.758 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
+79.356 384.758 M
+85.356 384.758 lineto
+85.356 390.758 lineto
+79.356 390.758 lineto
+79.356 384.758 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
+99.747 386.428 M
+99.747 386.99 99.544 387.498 QUADTO
+99.341 388.006 98.981 388.365 QUADTO
+98.544 388.818 97.935 389.045 QUADTO
+97.325 389.271 96.388 389.271 QUADTO
+95.403 389.271 lineto
+95.403 392.521 lineto
+94.247 392.521 lineto
+94.247 383.803 lineto
+96.435 383.803 lineto
+97.2 383.803 97.747 383.928 QUADTO
+98.294 384.053 98.716 384.334 QUADTO
+99.2 384.678 99.474 385.186 QUADTO
+99.747 385.693 99.747 386.428 QUADTO
+closepath
+98.544 386.459 M
+98.544 386.006 98.388 385.67 QUADTO
+98.231 385.334 97.919 385.131 QUADTO
+97.638 384.943 97.271 384.865 QUADTO
+96.903 384.787 96.356 384.787 QUADTO
+95.403 384.787 lineto
+95.403 388.271 lineto
+96.2 388.271 lineto
+96.903 388.271 97.333 388.162 QUADTO
+97.763 388.053 98.044 387.756 QUADTO
+98.31 387.49 98.427 387.178 QUADTO
+98.544 386.865 98.544 386.459 QUADTO
+closepath
+99.909 392.521 M
+102.862 383.803 lineto
+104.284 383.803 lineto
+107.222 392.521 lineto
+106.003 392.521 lineto
+105.206 390.084 lineto
+101.878 390.084 lineto
+101.081 392.521 lineto
+99.909 392.521 lineto
+closepath
+104.894 389.1 M
+103.534 384.975 lineto
+102.206 389.1 lineto
+104.894 389.1 lineto
+closepath
+110.479 392.678 M
+109.542 392.678 108.87 392.482 QUADTO
+108.198 392.287 107.62 392.006 QUADTO
+107.62 390.553 lineto
+107.698 390.553 lineto
+108.276 391.084 109.003 391.381 QUADTO
+109.729 391.678 110.401 391.678 QUADTO
+111.37 391.678 111.862 391.279 QUADTO
+112.354 390.881 112.354 390.225 QUADTO
+112.354 389.693 112.097 389.365 QUADTO
+111.839 389.037 111.276 388.881 QUADTO
+110.87 388.771 110.534 388.693 QUADTO
+110.198 388.615 109.698 388.49 QUADTO
+109.245 388.365 108.886 388.186 QUADTO
+108.526 388.006 108.245 387.709 QUADTO
+107.979 387.428 107.831 387.037 QUADTO
+107.683 386.646 107.683 386.131 QUADTO
+107.683 385.068 108.511 384.35 QUADTO
+109.339 383.631 110.62 383.631 QUADTO
+111.354 383.631 112.003 383.779 QUADTO
+112.651 383.928 113.214 384.193 QUADTO
+113.214 385.584 lineto
+113.12 385.584 lineto
+112.714 385.209 112.065 384.928 QUADTO
+111.417 384.646 110.698 384.646 QUADTO
+109.886 384.646 109.386 385.021 QUADTO
+108.886 385.396 108.886 386.006 QUADTO
+108.886 386.568 109.183 386.896 QUADTO
+109.479 387.225 110.026 387.381 QUADTO
+110.401 387.475 110.933 387.6 QUADTO
+111.464 387.725 111.823 387.834 QUADTO
+112.729 388.115 113.144 388.67 QUADTO
+113.558 389.225 113.558 390.037 QUADTO
+113.558 390.553 113.347 391.045 QUADTO
+113.136 391.537 112.761 391.881 QUADTO
+112.339 392.271 111.808 392.475 QUADTO
+111.276 392.678 110.479 392.678 QUADTO
+closepath
+116.774 392.521 M
+116.774 384.834 lineto
+113.853 384.834 lineto
+113.853 383.803 lineto
+120.868 383.803 lineto
+120.868 384.834 lineto
+117.931 384.834 lineto
+117.931 392.521 lineto
+116.774 392.521 lineto
+closepath
+131.735 392.521 M
+130.438 392.521 lineto
+126.579 384.99 lineto
+126.579 392.521 lineto
+125.501 392.521 lineto
+125.501 383.803 lineto
+127.142 383.803 lineto
+130.657 390.709 lineto
+130.657 383.803 lineto
+131.735 383.803 lineto
+131.735 392.521 lineto
+closepath
+140.229 387.943 M
+133.745 387.943 lineto
+133.745 387.006 lineto
+140.229 387.006 lineto
+140.229 387.943 lineto
+closepath
+140.229 390.396 M
+133.745 390.396 lineto
+133.745 389.459 lineto
+140.229 389.459 lineto
+140.229 390.396 lineto
+closepath
+147.382 392.521 M
+141.991 392.521 lineto
+141.991 391.303 lineto
+142.569 390.74 143.085 390.24 QUADTO
+143.601 389.74 144.101 389.193 QUADTO
+145.085 388.1 145.452 387.436 QUADTO
+145.819 386.771 145.819 386.068 QUADTO
+145.819 385.709 145.702 385.436 QUADTO
+145.585 385.162 145.382 384.975 QUADTO
+145.179 384.803 144.913 384.717 QUADTO
+144.647 384.631 144.319 384.631 QUADTO
+144.007 384.631 143.687 384.709 QUADTO
+143.366 384.787 143.085 384.896 QUADTO
+142.835 385.006 142.608 385.146 QUADTO
+142.382 385.287 142.241 385.381 QUADTO
+142.179 385.381 lineto
+142.179 384.146 lineto
+142.538 383.959 143.187 383.787 QUADTO
+143.835 383.615 144.413 383.615 QUADTO
+145.632 383.615 146.319 384.264 QUADTO
+147.007 384.912 147.007 386.021 QUADTO
+147.007 386.521 146.89 386.959 QUADTO
+146.772 387.396 146.554 387.756 QUADTO
+146.351 388.146 146.046 388.521 QUADTO
+145.741 388.896 145.397 389.256 QUADTO
+144.851 389.85 144.171 390.498 QUADTO
+143.491 391.146 143.085 391.521 QUADTO
+147.382 391.521 lineto
+147.382 392.521 lineto
+closepath
+153.964 388.162 M
+153.964 390.506 153.284 391.607 QUADTO
+152.604 392.709 151.183 392.709 QUADTO
+149.729 392.709 149.058 391.584 QUADTO
+148.386 390.459 148.386 388.162 QUADTO
+148.386 385.803 149.073 384.709 QUADTO
+149.761 383.615 151.183 383.615 QUADTO
+152.62 383.615 153.292 384.748 QUADTO
+153.964 385.881 153.964 388.162 QUADTO
+closepath
+152.464 390.818 M
+152.636 390.381 152.706 389.717 QUADTO
+152.776 389.053 152.776 388.162 QUADTO
+152.776 387.256 152.706 386.592 QUADTO
+152.636 385.928 152.464 385.49 QUADTO
+152.292 385.053 151.979 384.818 QUADTO
+151.667 384.584 151.183 384.584 QUADTO
+150.698 384.584 150.378 384.818 QUADTO
+150.058 385.053 149.886 385.506 QUADTO
+149.714 385.959 149.644 386.639 QUADTO
+149.573 387.318 149.573 388.162 QUADTO
+149.573 389.084 149.628 389.701 QUADTO
+149.683 390.318 149.87 390.803 QUADTO
+150.042 391.256 150.354 391.498 QUADTO
+150.667 391.74 151.183 391.74 QUADTO
+151.667 391.74 151.979 391.506 QUADTO
+152.292 391.271 152.464 390.818 QUADTO
+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
+160.452 387.758 M
+174.452 387.758 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
+170.452 387.758 M
+170.452 389.415 169.109 390.758 167.452 390.758 curveto
+165.795 390.758 164.452 389.415 164.452 387.758 curveto
+164.452 386.101 165.795 384.758 167.452 384.758 curveto
+169.109 384.758 170.452 386.101 170.452 387.758 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
+170.452 387.758 M
+170.452 389.415 169.109 390.758 167.452 390.758 curveto
+165.795 390.758 164.452 389.415 164.452 387.758 curveto
+164.452 386.101 165.795 384.758 167.452 384.758 curveto
+169.109 384.758 170.452 386.101 170.452 387.758 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
+184.843 386.428 M
+184.843 386.99 184.64 387.498 QUADTO
+184.437 388.006 184.077 388.365 QUADTO
+183.64 388.818 183.03 389.045 QUADTO
+182.421 389.271 181.483 389.271 QUADTO
+180.499 389.271 lineto
+180.499 392.521 lineto
+179.343 392.521 lineto
+179.343 383.803 lineto
+181.53 383.803 lineto
+182.296 383.803 182.843 383.928 QUADTO
+183.39 384.053 183.812 384.334 QUADTO
+184.296 384.678 184.569 385.186 QUADTO
+184.843 385.693 184.843 386.428 QUADTO
+closepath
+183.64 386.459 M
+183.64 386.006 183.483 385.67 QUADTO
+183.327 385.334 183.015 385.131 QUADTO
+182.733 384.943 182.366 384.865 QUADTO
+181.999 384.787 181.452 384.787 QUADTO
+180.499 384.787 lineto
+180.499 388.271 lineto
+181.296 388.271 lineto
+181.999 388.271 182.429 388.162 QUADTO
+182.858 388.053 183.14 387.756 QUADTO
+183.405 387.49 183.522 387.178 QUADTO
+183.64 386.865 183.64 386.459 QUADTO
+closepath
+185.005 392.521 M
+187.958 383.803 lineto
+189.38 383.803 lineto
+192.317 392.521 lineto
+191.099 392.521 lineto
+190.302 390.084 lineto
+186.974 390.084 lineto
+186.177 392.521 lineto
+185.005 392.521 lineto
+closepath
+189.989 389.1 M
+188.63 384.975 lineto
+187.302 389.1 lineto
+189.989 389.1 lineto
+closepath
+195.575 392.678 M
+194.638 392.678 193.966 392.482 QUADTO
+193.294 392.287 192.716 392.006 QUADTO
+192.716 390.553 lineto
+192.794 390.553 lineto
+193.372 391.084 194.099 391.381 QUADTO
+194.825 391.678 195.497 391.678 QUADTO
+196.466 391.678 196.958 391.279 QUADTO
+197.45 390.881 197.45 390.225 QUADTO
+197.45 389.693 197.192 389.365 QUADTO
+196.935 389.037 196.372 388.881 QUADTO
+195.966 388.771 195.63 388.693 QUADTO
+195.294 388.615 194.794 388.49 QUADTO
+194.341 388.365 193.981 388.186 QUADTO
+193.622 388.006 193.341 387.709 QUADTO
+193.075 387.428 192.927 387.037 QUADTO
+192.778 386.646 192.778 386.131 QUADTO
+192.778 385.068 193.606 384.35 QUADTO
+194.435 383.631 195.716 383.631 QUADTO
+196.45 383.631 197.099 383.779 QUADTO
+197.747 383.928 198.31 384.193 QUADTO
+198.31 385.584 lineto
+198.216 385.584 lineto
+197.81 385.209 197.161 384.928 QUADTO
+196.513 384.646 195.794 384.646 QUADTO
+194.981 384.646 194.481 385.021 QUADTO
+193.981 385.396 193.981 386.006 QUADTO
+193.981 386.568 194.278 386.896 QUADTO
+194.575 387.225 195.122 387.381 QUADTO
+195.497 387.475 196.028 387.6 QUADTO
+196.56 387.725 196.919 387.834 QUADTO
+197.825 388.115 198.239 388.67 QUADTO
+198.653 389.225 198.653 390.037 QUADTO
+198.653 390.553 198.442 391.045 QUADTO
+198.231 391.537 197.856 391.881 QUADTO
+197.435 392.271 196.903 392.475 QUADTO
+196.372 392.678 195.575 392.678 QUADTO
+closepath
+201.87 392.521 M
+201.87 384.834 lineto
+198.948 384.834 lineto
+198.948 383.803 lineto
+205.964 383.803 lineto
+205.964 384.834 lineto
+203.026 384.834 lineto
+203.026 392.521 lineto
+201.87 392.521 lineto
+closepath
+216.831 392.521 M
+215.534 392.521 lineto
+211.675 384.99 lineto
+211.675 392.521 lineto
+210.597 392.521 lineto
+210.597 383.803 lineto
+212.237 383.803 lineto
+215.753 390.709 lineto
+215.753 383.803 lineto
+216.831 383.803 lineto
+216.831 392.521 lineto
+closepath
+225.325 387.943 M
+218.841 387.943 lineto
+218.841 387.006 lineto
+225.325 387.006 lineto
+225.325 387.943 lineto
+closepath
+225.325 390.396 M
+218.841 390.396 lineto
+218.841 389.459 lineto
+225.325 389.459 lineto
+225.325 390.396 lineto
+closepath
+229.446 384.631 M
+229.118 384.631 228.806 384.709 QUADTO
+228.493 384.787 228.181 384.896 QUADTO
+227.899 385.021 227.696 385.146 QUADTO
+227.493 385.271 227.321 385.396 QUADTO
+227.259 385.396 lineto
+227.259 384.146 lineto
+227.634 383.943 228.29 383.779 QUADTO
+228.946 383.615 229.54 383.615 QUADTO
+230.134 383.615 230.571 383.732 QUADTO
+231.009 383.85 231.368 384.1 QUADTO
+231.759 384.381 231.954 384.779 QUADTO
+232.149 385.178 232.149 385.725 QUADTO
+232.149 386.443 231.673 386.982 QUADTO
+231.196 387.521 230.54 387.678 QUADTO
+230.54 387.756 lineto
+230.806 387.803 231.126 387.936 QUADTO
+231.446 388.068 231.712 388.318 QUADTO
+231.978 388.568 232.149 388.967 QUADTO
+232.321 389.365 232.321 389.928 QUADTO
+232.321 390.521 232.118 391.014 QUADTO
+231.915 391.506 231.54 391.896 QUADTO
+231.165 392.287 230.626 392.498 QUADTO
+230.087 392.709 229.399 392.709 QUADTO
+228.743 392.709 228.103 392.545 QUADTO
+227.462 392.381 227.009 392.162 QUADTO
+227.009 390.928 lineto
+227.103 390.928 lineto
+227.462 391.193 228.087 391.443 QUADTO
+228.712 391.693 229.337 391.693 QUADTO
+229.681 391.693 230.048 391.576 QUADTO
+230.415 391.459 230.649 391.209 QUADTO
+230.884 390.943 231.009 390.631 QUADTO
+231.134 390.318 231.134 389.85 QUADTO
+231.134 389.381 230.993 389.076 QUADTO
+230.853 388.771 230.603 388.584 QUADTO
+230.368 388.412 230.024 388.342 QUADTO
+229.681 388.271 229.29 388.271 QUADTO
+228.79 388.271 lineto
+228.79 387.303 lineto
+229.181 387.303 lineto
+229.978 387.303 230.47 386.928 QUADTO
+230.962 386.553 230.962 385.834 QUADTO
+230.962 385.506 230.837 385.271 QUADTO
+230.712 385.037 230.509 384.896 QUADTO
+230.29 384.74 230.017 384.686 QUADTO
+229.743 384.631 229.446 384.631 QUADTO
+closepath
+239.06 388.162 M
+239.06 390.506 238.38 391.607 QUADTO
+237.7 392.709 236.278 392.709 QUADTO
+234.825 392.709 234.153 391.584 QUADTO
+233.481 390.459 233.481 388.162 QUADTO
+233.481 385.803 234.169 384.709 QUADTO
+234.856 383.615 236.278 383.615 QUADTO
+237.716 383.615 238.388 384.748 QUADTO
+239.06 385.881 239.06 388.162 QUADTO
+closepath
+237.56 390.818 M
+237.731 390.381 237.802 389.717 QUADTO
+237.872 389.053 237.872 388.162 QUADTO
+237.872 387.256 237.802 386.592 QUADTO
+237.731 385.928 237.56 385.49 QUADTO
+237.388 385.053 237.075 384.818 QUADTO
+236.763 384.584 236.278 384.584 QUADTO
+235.794 384.584 235.474 384.818 QUADTO
+235.153 385.053 234.981 385.506 QUADTO
+234.81 385.959 234.739 386.639 QUADTO
+234.669 387.318 234.669 388.162 QUADTO
+234.669 389.084 234.724 389.701 QUADTO
+234.778 390.318 234.966 390.803 QUADTO
+235.138 391.256 235.45 391.498 QUADTO
+235.763 391.74 236.278 391.74 QUADTO
+236.763 391.74 237.075 391.506 QUADTO
+237.388 391.271 237.56 390.818 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+245.548 387.758 M
+259.548 387.758 lineto
+stroke
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+252.548 384.758 M
+255.548 390.758 lineto
+249.548 390.758 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+0 0 M
+400 0 lineto
+400 400 lineto
+0 400 lineto
+0 0 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+252.548 384.758 M
+255.548 390.758 lineto
+249.548 390.758 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
+269.938 386.428 M
+269.938 386.99 269.735 387.498 QUADTO
+269.532 388.006 269.173 388.365 QUADTO
+268.735 388.818 268.126 389.045 QUADTO
+267.517 389.271 266.579 389.271 QUADTO
+265.595 389.271 lineto
+265.595 392.521 lineto
+264.438 392.521 lineto
+264.438 383.803 lineto
+266.626 383.803 lineto
+267.392 383.803 267.938 383.928 QUADTO
+268.485 384.053 268.907 384.334 QUADTO
+269.392 384.678 269.665 385.186 QUADTO
+269.938 385.693 269.938 386.428 QUADTO
+closepath
+268.735 386.459 M
+268.735 386.006 268.579 385.67 QUADTO
+268.423 385.334 268.11 385.131 QUADTO
+267.829 384.943 267.462 384.865 QUADTO
+267.095 384.787 266.548 384.787 QUADTO
+265.595 384.787 lineto
+265.595 388.271 lineto
+266.392 388.271 lineto
+267.095 388.271 267.524 388.162 QUADTO
+267.954 388.053 268.235 387.756 QUADTO
+268.501 387.49 268.618 387.178 QUADTO
+268.735 386.865 268.735 386.459 QUADTO
+closepath
+270.101 392.521 M
+273.054 383.803 lineto
+274.476 383.803 lineto
+277.413 392.521 lineto
+276.194 392.521 lineto
+275.397 390.084 lineto
+272.069 390.084 lineto
+271.272 392.521 lineto
+270.101 392.521 lineto
+closepath
+275.085 389.1 M
+273.726 384.975 lineto
+272.397 389.1 lineto
+275.085 389.1 lineto
+closepath
+280.671 392.678 M
+279.733 392.678 279.062 392.482 QUADTO
+278.39 392.287 277.812 392.006 QUADTO
+277.812 390.553 lineto
+277.89 390.553 lineto
+278.468 391.084 279.194 391.381 QUADTO
+279.921 391.678 280.593 391.678 QUADTO
+281.562 391.678 282.054 391.279 QUADTO
+282.546 390.881 282.546 390.225 QUADTO
+282.546 389.693 282.288 389.365 QUADTO
+282.03 389.037 281.468 388.881 QUADTO
+281.062 388.771 280.726 388.693 QUADTO
+280.39 388.615 279.89 388.49 QUADTO
+279.437 388.365 279.077 388.186 QUADTO
+278.718 388.006 278.437 387.709 QUADTO
+278.171 387.428 278.022 387.037 QUADTO
+277.874 386.646 277.874 386.131 QUADTO
+277.874 385.068 278.702 384.35 QUADTO
+279.53 383.631 280.812 383.631 QUADTO
+281.546 383.631 282.194 383.779 QUADTO
+282.843 383.928 283.405 384.193 QUADTO
+283.405 385.584 lineto
+283.312 385.584 lineto
+282.905 385.209 282.257 384.928 QUADTO
+281.608 384.646 280.89 384.646 QUADTO
+280.077 384.646 279.577 385.021 QUADTO
+279.077 385.396 279.077 386.006 QUADTO
+279.077 386.568 279.374 386.896 QUADTO
+279.671 387.225 280.218 387.381 QUADTO
+280.593 387.475 281.124 387.6 QUADTO
+281.655 387.725 282.015 387.834 QUADTO
+282.921 388.115 283.335 388.67 QUADTO
+283.749 389.225 283.749 390.037 QUADTO
+283.749 390.553 283.538 391.045 QUADTO
+283.327 391.537 282.952 391.881 QUADTO
+282.53 392.271 281.999 392.475 QUADTO
+281.468 392.678 280.671 392.678 QUADTO
+closepath
+286.966 392.521 M
+286.966 384.834 lineto
+284.044 384.834 lineto
+284.044 383.803 lineto
+291.06 383.803 lineto
+291.06 384.834 lineto
+288.122 384.834 lineto
+288.122 392.521 lineto
+286.966 392.521 lineto
+closepath
+301.927 392.521 M
+300.63 392.521 lineto
+296.771 384.99 lineto
+296.771 392.521 lineto
+295.692 392.521 lineto
+295.692 383.803 lineto
+297.333 383.803 lineto
+300.849 390.709 lineto
+300.849 383.803 lineto
+301.927 383.803 lineto
+301.927 392.521 lineto
+closepath
+310.421 387.943 M
+303.937 387.943 lineto
+303.937 387.006 lineto
+310.421 387.006 lineto
+310.421 387.943 lineto
+closepath
+310.421 390.396 M
+303.937 390.396 lineto
+303.937 389.459 lineto
+310.421 389.459 lineto
+310.421 390.396 lineto
+closepath
+317.792 389.521 M
+316.761 389.521 lineto
+316.761 392.521 lineto
+315.636 392.521 lineto
+315.636 389.521 lineto
+311.776 389.521 lineto
+311.776 388.287 lineto
+315.683 383.803 lineto
+316.761 383.803 lineto
+316.761 388.584 lineto
+317.792 388.584 lineto
+317.792 389.521 lineto
+closepath
+315.636 388.584 M
+315.636 385.178 lineto
+312.698 388.584 lineto
+315.636 388.584 lineto
+closepath
+324.155 388.162 M
+324.155 390.506 323.476 391.607 QUADTO
+322.796 392.709 321.374 392.709 QUADTO
+319.921 392.709 319.249 391.584 QUADTO
+318.577 390.459 318.577 388.162 QUADTO
+318.577 385.803 319.265 384.709 QUADTO
+319.952 383.615 321.374 383.615 QUADTO
+322.812 383.615 323.483 384.748 QUADTO
+324.155 385.881 324.155 388.162 QUADTO
+closepath
+322.655 390.818 M
+322.827 390.381 322.897 389.717 QUADTO
+322.968 389.053 322.968 388.162 QUADTO
+322.968 387.256 322.897 386.592 QUADTO
+322.827 385.928 322.655 385.49 QUADTO
+322.483 385.053 322.171 384.818 QUADTO
+321.858 384.584 321.374 384.584 QUADTO
+320.89 384.584 320.569 384.818 QUADTO
+320.249 385.053 320.077 385.506 QUADTO
+319.905 385.959 319.835 386.639 QUADTO
+319.765 387.318 319.765 388.162 QUADTO
+319.765 389.084 319.819 389.701 QUADTO
+319.874 390.318 320.062 390.803 QUADTO
+320.233 391.256 320.546 391.498 QUADTO
+320.858 391.74 321.374 391.74 QUADTO
+321.858 391.74 322.171 391.506 QUADTO
+322.483 391.271 322.655 390.818 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
+59.633 34.141 M
+388 34.141 lineto
+388 326.133 lineto
+59.633 326.133 lineto
+59.633 34.141 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
+59.633 330.133 M
+388 330.133 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
+62.42 341.779 M
+62.42 344.123 61.74 345.225 QUADTO
+61.061 346.326 59.639 346.326 QUADTO
+58.186 346.326 57.514 345.201 QUADTO
+56.842 344.076 56.842 341.779 QUADTO
+56.842 339.42 57.529 338.326 QUADTO
+58.217 337.232 59.639 337.232 QUADTO
+61.076 337.232 61.748 338.365 QUADTO
+62.42 339.498 62.42 341.779 QUADTO
+closepath
+60.92 344.436 M
+61.092 343.998 61.162 343.334 QUADTO
+61.232 342.67 61.232 341.779 QUADTO
+61.232 340.873 61.162 340.209 QUADTO
+61.092 339.545 60.92 339.107 QUADTO
+60.748 338.67 60.436 338.436 QUADTO
+60.123 338.201 59.639 338.201 QUADTO
+59.154 338.201 58.834 338.436 QUADTO
+58.514 338.67 58.342 339.123 QUADTO
+58.17 339.576 58.1 340.256 QUADTO
+58.029 340.936 58.029 341.779 QUADTO
+58.029 342.701 58.084 343.318 QUADTO
+58.139 343.936 58.326 344.42 QUADTO
+58.498 344.873 58.811 345.115 QUADTO
+59.123 345.357 59.639 345.357 QUADTO
+60.123 345.357 60.436 345.123 QUADTO
+60.748 344.889 60.92 344.436 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
+59.633 332.133 M
+59.633 330.133 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
+93.106 346.139 M
+87.715 346.139 lineto
+87.715 344.92 lineto
+88.293 344.357 88.809 343.857 QUADTO
+89.324 343.357 89.824 342.811 QUADTO
+90.809 341.717 91.176 341.053 QUADTO
+91.543 340.389 91.543 339.686 QUADTO
+91.543 339.326 91.426 339.053 QUADTO
+91.309 338.779 91.106 338.592 QUADTO
+90.903 338.42 90.637 338.334 QUADTO
+90.371 338.248 90.043 338.248 QUADTO
+89.731 338.248 89.41 338.326 QUADTO
+89.09 338.404 88.809 338.514 QUADTO
+88.559 338.623 88.332 338.764 QUADTO
+88.106 338.904 87.965 338.998 QUADTO
+87.903 338.998 lineto
+87.903 337.764 lineto
+88.262 337.576 88.91 337.404 QUADTO
+89.559 337.232 90.137 337.232 QUADTO
+91.356 337.232 92.043 337.881 QUADTO
+92.731 338.529 92.731 339.639 QUADTO
+92.731 340.139 92.614 340.576 QUADTO
+92.496 341.014 92.278 341.373 QUADTO
+92.074 341.764 91.77 342.139 QUADTO
+91.465 342.514 91.121 342.873 QUADTO
+90.574 343.467 89.895 344.115 QUADTO
+89.215 344.764 88.809 345.139 QUADTO
+93.106 345.139 lineto
+93.106 346.139 lineto
+closepath
+99.547 343.357 M
+99.547 343.998 99.344 344.537 QUADTO
+99.141 345.076 98.782 345.467 QUADTO
+98.407 345.857 97.86 346.092 QUADTO
+97.313 346.326 96.641 346.326 QUADTO
+96.016 346.326 95.407 346.186 QUADTO
+94.797 346.045 94.36 345.826 QUADTO
+94.36 344.592 lineto
+94.438 344.592 lineto
+94.563 344.686 94.821 344.811 QUADTO
+95.078 344.936 95.375 345.045 QUADTO
+95.719 345.17 96.008 345.24 QUADTO
+96.297 345.311 96.657 345.311 QUADTO
+97 345.311 97.336 345.186 QUADTO
+97.672 345.061 97.922 344.779 QUADTO
+98.125 344.514 98.242 344.17 QUADTO
+98.36 343.826 98.36 343.357 QUADTO
+98.36 342.889 98.235 342.592 QUADTO
+98.11 342.295 97.875 342.107 QUADTO
+97.61 341.873 97.25 341.787 QUADTO
+96.891 341.701 96.438 341.701 QUADTO
+95.953 341.701 95.477 341.771 QUADTO
+95 341.842 94.703 341.904 QUADTO
+94.703 337.42 lineto
+99.5 337.42 lineto
+99.5 338.436 lineto
+95.844 338.436 lineto
+95.844 340.764 lineto
+96.047 340.732 96.258 340.725 QUADTO
+96.469 340.717 96.625 340.717 QUADTO
+97.297 340.717 97.758 340.826 QUADTO
+98.219 340.936 98.657 341.264 QUADTO
+99.094 341.592 99.321 342.084 QUADTO
+99.547 342.576 99.547 343.357 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
+93.625 332.133 M
+93.625 330.133 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
+126.989 343.357 M
+126.989 343.998 126.786 344.537 QUADTO
+126.583 345.076 126.223 345.467 QUADTO
+125.848 345.857 125.301 346.092 QUADTO
+124.754 346.326 124.083 346.326 QUADTO
+123.458 346.326 122.848 346.186 QUADTO
+122.239 346.045 121.801 345.826 QUADTO
+121.801 344.592 lineto
+121.879 344.592 lineto
+122.004 344.686 122.262 344.811 QUADTO
+122.52 344.936 122.817 345.045 QUADTO
+123.161 345.17 123.45 345.24 QUADTO
+123.739 345.311 124.098 345.311 QUADTO
+124.442 345.311 124.778 345.186 QUADTO
+125.114 345.061 125.364 344.779 QUADTO
+125.567 344.514 125.684 344.17 QUADTO
+125.801 343.826 125.801 343.357 QUADTO
+125.801 342.889 125.676 342.592 QUADTO
+125.551 342.295 125.317 342.107 QUADTO
+125.051 341.873 124.692 341.787 QUADTO
+124.333 341.701 123.879 341.701 QUADTO
+123.395 341.701 122.919 341.771 QUADTO
+122.442 341.842 122.145 341.904 QUADTO
+122.145 337.42 lineto
+126.942 337.42 lineto
+126.942 338.436 lineto
+123.286 338.436 lineto
+123.286 340.764 lineto
+123.489 340.732 123.7 340.725 QUADTO
+123.911 340.717 124.067 340.717 QUADTO
+124.739 340.717 125.2 340.826 QUADTO
+125.661 340.936 126.098 341.264 QUADTO
+126.536 341.592 126.762 342.084 QUADTO
+126.989 342.576 126.989 343.357 QUADTO
+closepath
+133.68 341.779 M
+133.68 344.123 133.001 345.225 QUADTO
+132.321 346.326 130.899 346.326 QUADTO
+129.446 346.326 128.774 345.201 QUADTO
+128.102 344.076 128.102 341.779 QUADTO
+128.102 339.42 128.79 338.326 QUADTO
+129.477 337.232 130.899 337.232 QUADTO
+132.336 337.232 133.008 338.365 QUADTO
+133.68 339.498 133.68 341.779 QUADTO
+closepath
+132.18 344.436 M
+132.352 343.998 132.422 343.334 QUADTO
+132.493 342.67 132.493 341.779 QUADTO
+132.493 340.873 132.422 340.209 QUADTO
+132.352 339.545 132.18 339.107 QUADTO
+132.008 338.67 131.696 338.436 QUADTO
+131.383 338.201 130.899 338.201 QUADTO
+130.415 338.201 130.094 338.436 QUADTO
+129.774 338.67 129.602 339.123 QUADTO
+129.43 339.576 129.36 340.256 QUADTO
+129.29 340.936 129.29 341.779 QUADTO
+129.29 342.701 129.344 343.318 QUADTO
+129.399 343.936 129.586 344.42 QUADTO
+129.758 344.873 130.071 345.115 QUADTO
+130.383 345.357 130.899 345.357 QUADTO
+131.383 345.357 131.696 345.123 QUADTO
+132.008 344.889 132.18 344.436 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
+127.618 332.133 M
+127.618 330.133 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
+161.184 338.717 M
+157.403 346.139 lineto
+156.153 346.139 lineto
+160.153 338.436 lineto
+155.638 338.436 lineto
+155.638 337.42 lineto
+161.184 337.42 lineto
+161.184 338.717 lineto
+closepath
+167.532 343.357 M
+167.532 343.998 167.329 344.537 QUADTO
+167.126 345.076 166.766 345.467 QUADTO
+166.391 345.857 165.845 346.092 QUADTO
+165.298 346.326 164.626 346.326 QUADTO
+164.001 346.326 163.391 346.186 QUADTO
+162.782 346.045 162.345 345.826 QUADTO
+162.345 344.592 lineto
+162.423 344.592 lineto
+162.548 344.686 162.806 344.811 QUADTO
+163.063 344.936 163.36 345.045 QUADTO
+163.704 345.17 163.993 345.24 QUADTO
+164.282 345.311 164.641 345.311 QUADTO
+164.985 345.311 165.321 345.186 QUADTO
+165.657 345.061 165.907 344.779 QUADTO
+166.11 344.514 166.227 344.17 QUADTO
+166.345 343.826 166.345 343.357 QUADTO
+166.345 342.889 166.22 342.592 QUADTO
+166.095 342.295 165.86 342.107 QUADTO
+165.595 341.873 165.235 341.787 QUADTO
+164.876 341.701 164.423 341.701 QUADTO
+163.938 341.701 163.462 341.771 QUADTO
+162.985 341.842 162.688 341.904 QUADTO
+162.688 337.42 lineto
+167.485 337.42 lineto
+167.485 338.436 lineto
+163.829 338.436 lineto
+163.829 340.764 lineto
+164.032 340.732 164.243 340.725 QUADTO
+164.454 340.717 164.61 340.717 QUADTO
+165.282 340.717 165.743 340.826 QUADTO
+166.204 340.936 166.641 341.264 QUADTO
+167.079 341.592 167.306 342.084 QUADTO
+167.532 342.576 167.532 343.357 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
+161.61 332.133 M
+161.61 330.133 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
+191.355 346.139 M
+187.105 346.139 lineto
+187.105 345.248 lineto
+188.683 345.248 lineto
+188.683 339.404 lineto
+187.105 339.404 lineto
+187.105 338.607 lineto
+187.995 338.607 188.425 338.35 QUADTO
+188.855 338.092 188.901 337.389 QUADTO
+189.808 337.389 lineto
+189.808 345.248 lineto
+191.355 345.248 lineto
+191.355 346.139 lineto
+closepath
+198.39 341.779 M
+198.39 344.123 197.71 345.225 QUADTO
+197.03 346.326 195.609 346.326 QUADTO
+194.155 346.326 193.484 345.201 QUADTO
+192.812 344.076 192.812 341.779 QUADTO
+192.812 339.42 193.499 338.326 QUADTO
+194.187 337.232 195.609 337.232 QUADTO
+197.046 337.232 197.718 338.365 QUADTO
+198.39 339.498 198.39 341.779 QUADTO
+closepath
+196.89 344.436 M
+197.062 343.998 197.132 343.334 QUADTO
+197.202 342.67 197.202 341.779 QUADTO
+197.202 340.873 197.132 340.209 QUADTO
+197.062 339.545 196.89 339.107 QUADTO
+196.718 338.67 196.405 338.436 QUADTO
+196.093 338.201 195.609 338.201 QUADTO
+195.124 338.201 194.804 338.436 QUADTO
+194.484 338.67 194.312 339.123 QUADTO
+194.14 339.576 194.069 340.256 QUADTO
+193.999 340.936 193.999 341.779 QUADTO
+193.999 342.701 194.054 343.318 QUADTO
+194.109 343.936 194.296 344.42 QUADTO
+194.468 344.873 194.78 345.115 QUADTO
+195.093 345.357 195.609 345.357 QUADTO
+196.093 345.357 196.405 345.123 QUADTO
+196.718 344.889 196.89 344.436 QUADTO
+closepath
+204.941 341.779 M
+204.941 344.123 204.261 345.225 QUADTO
+203.581 346.326 202.159 346.326 QUADTO
+200.706 346.326 200.034 345.201 QUADTO
+199.362 344.076 199.362 341.779 QUADTO
+199.362 339.42 200.05 338.326 QUADTO
+200.737 337.232 202.159 337.232 QUADTO
+203.597 337.232 204.269 338.365 QUADTO
+204.941 339.498 204.941 341.779 QUADTO
+closepath
+203.441 344.436 M
+203.612 343.998 203.683 343.334 QUADTO
+203.753 342.67 203.753 341.779 QUADTO
+203.753 340.873 203.683 340.209 QUADTO
+203.612 339.545 203.441 339.107 QUADTO
+203.269 338.67 202.956 338.436 QUADTO
+202.644 338.201 202.159 338.201 QUADTO
+201.675 338.201 201.355 338.436 QUADTO
+201.034 338.67 200.862 339.123 QUADTO
+200.691 339.576 200.62 340.256 QUADTO
+200.55 340.936 200.55 341.779 QUADTO
+200.55 342.701 200.605 343.318 QUADTO
+200.659 343.936 200.847 344.42 QUADTO
+201.019 344.873 201.331 345.115 QUADTO
+201.644 345.357 202.159 345.357 QUADTO
+202.644 345.357 202.956 345.123 QUADTO
+203.269 344.889 203.441 344.436 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
+195.603 332.133 M
+195.603 330.133 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
+225.347 346.139 M
+221.097 346.139 lineto
+221.097 345.248 lineto
+222.675 345.248 lineto
+222.675 339.404 lineto
+221.097 339.404 lineto
+221.097 338.607 lineto
+221.988 338.607 222.417 338.35 QUADTO
+222.847 338.092 222.894 337.389 QUADTO
+223.8 337.389 lineto
+223.8 345.248 lineto
+225.347 345.248 lineto
+225.347 346.139 lineto
+closepath
+232.351 346.139 M
+226.96 346.139 lineto
+226.96 344.92 lineto
+227.538 344.357 228.054 343.857 QUADTO
+228.57 343.357 229.07 342.811 QUADTO
+230.054 341.717 230.421 341.053 QUADTO
+230.788 340.389 230.788 339.686 QUADTO
+230.788 339.326 230.671 339.053 QUADTO
+230.554 338.779 230.351 338.592 QUADTO
+230.148 338.42 229.882 338.334 QUADTO
+229.617 338.248 229.288 338.248 QUADTO
+228.976 338.248 228.656 338.326 QUADTO
+228.335 338.404 228.054 338.514 QUADTO
+227.804 338.623 227.578 338.764 QUADTO
+227.351 338.904 227.21 338.998 QUADTO
+227.148 338.998 lineto
+227.148 337.764 lineto
+227.507 337.576 228.156 337.404 QUADTO
+228.804 337.232 229.382 337.232 QUADTO
+230.601 337.232 231.288 337.881 QUADTO
+231.976 338.529 231.976 339.639 QUADTO
+231.976 340.139 231.859 340.576 QUADTO
+231.742 341.014 231.523 341.373 QUADTO
+231.32 341.764 231.015 342.139 QUADTO
+230.71 342.514 230.367 342.873 QUADTO
+229.82 343.467 229.14 344.115 QUADTO
+228.46 344.764 228.054 345.139 QUADTO
+232.351 345.139 lineto
+232.351 346.139 lineto
+closepath
+238.792 343.357 M
+238.792 343.998 238.589 344.537 QUADTO
+238.386 345.076 238.027 345.467 QUADTO
+237.652 345.857 237.105 346.092 QUADTO
+236.558 346.326 235.886 346.326 QUADTO
+235.261 346.326 234.652 346.186 QUADTO
+234.042 346.045 233.605 345.826 QUADTO
+233.605 344.592 lineto
+233.683 344.592 lineto
+233.808 344.686 234.066 344.811 QUADTO
+234.324 344.936 234.621 345.045 QUADTO
+234.964 345.17 235.253 345.24 QUADTO
+235.542 345.311 235.902 345.311 QUADTO
+236.246 345.311 236.581 345.186 QUADTO
+236.917 345.061 237.167 344.779 QUADTO
+237.371 344.514 237.488 344.17 QUADTO
+237.605 343.826 237.605 343.357 QUADTO
+237.605 342.889 237.48 342.592 QUADTO
+237.355 342.295 237.121 342.107 QUADTO
+236.855 341.873 236.496 341.787 QUADTO
+236.136 341.701 235.683 341.701 QUADTO
+235.199 341.701 234.722 341.771 QUADTO
+234.246 341.842 233.949 341.904 QUADTO
+233.949 337.42 lineto
+238.746 337.42 lineto
+238.746 338.436 lineto
+235.089 338.436 lineto
+235.089 340.764 lineto
+235.292 340.732 235.503 340.725 QUADTO
+235.714 340.717 235.871 340.717 QUADTO
+236.542 340.717 237.003 340.826 QUADTO
+237.464 340.936 237.902 341.264 QUADTO
+238.339 341.592 238.566 342.084 QUADTO
+238.792 342.576 238.792 343.357 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
+229.595 332.133 M
+229.595 330.133 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
+259.34 346.139 M
+255.09 346.139 lineto
+255.09 345.248 lineto
+256.668 345.248 lineto
+256.668 339.404 lineto
+255.09 339.404 lineto
+255.09 338.607 lineto
+255.98 338.607 256.41 338.35 QUADTO
+256.84 338.092 256.886 337.389 QUADTO
+257.793 337.389 lineto
+257.793 345.248 lineto
+259.34 345.248 lineto
+259.34 346.139 lineto
+closepath
+266.234 343.357 M
+266.234 343.998 266.031 344.537 QUADTO
+265.828 345.076 265.468 345.467 QUADTO
+265.093 345.857 264.547 346.092 QUADTO
+264 346.326 263.328 346.326 QUADTO
+262.703 346.326 262.093 346.186 QUADTO
+261.484 346.045 261.047 345.826 QUADTO
+261.047 344.592 lineto
+261.125 344.592 lineto
+261.25 344.686 261.508 344.811 QUADTO
+261.765 344.936 262.062 345.045 QUADTO
+262.406 345.17 262.695 345.24 QUADTO
+262.984 345.311 263.343 345.311 QUADTO
+263.687 345.311 264.023 345.186 QUADTO
+264.359 345.061 264.609 344.779 QUADTO
+264.812 344.514 264.929 344.17 QUADTO
+265.047 343.826 265.047 343.357 QUADTO
+265.047 342.889 264.922 342.592 QUADTO
+264.797 342.295 264.562 342.107 QUADTO
+264.297 341.873 263.937 341.787 QUADTO
+263.578 341.701 263.125 341.701 QUADTO
+262.64 341.701 262.164 341.771 QUADTO
+261.687 341.842 261.39 341.904 QUADTO
+261.39 337.42 lineto
+266.187 337.42 lineto
+266.187 338.436 lineto
+262.531 338.436 lineto
+262.531 340.764 lineto
+262.734 340.732 262.945 340.725 QUADTO
+263.156 340.717 263.312 340.717 QUADTO
+263.984 340.717 264.445 340.826 QUADTO
+264.906 340.936 265.343 341.264 QUADTO
+265.781 341.592 266.008 342.084 QUADTO
+266.234 342.576 266.234 343.357 QUADTO
+closepath
+272.925 341.779 M
+272.925 344.123 272.246 345.225 QUADTO
+271.566 346.326 270.144 346.326 QUADTO
+268.691 346.326 268.019 345.201 QUADTO
+267.347 344.076 267.347 341.779 QUADTO
+267.347 339.42 268.035 338.326 QUADTO
+268.722 337.232 270.144 337.232 QUADTO
+271.582 337.232 272.254 338.365 QUADTO
+272.925 339.498 272.925 341.779 QUADTO
+closepath
+271.425 344.436 M
+271.597 343.998 271.668 343.334 QUADTO
+271.738 342.67 271.738 341.779 QUADTO
+271.738 340.873 271.668 340.209 QUADTO
+271.597 339.545 271.425 339.107 QUADTO
+271.254 338.67 270.941 338.436 QUADTO
+270.629 338.201 270.144 338.201 QUADTO
+269.66 338.201 269.34 338.436 QUADTO
+269.019 338.67 268.847 339.123 QUADTO
+268.675 339.576 268.605 340.256 QUADTO
+268.535 340.936 268.535 341.779 QUADTO
+268.535 342.701 268.59 343.318 QUADTO
+268.644 343.936 268.832 344.42 QUADTO
+269.004 344.873 269.316 345.115 QUADTO
+269.629 345.357 270.144 345.357 QUADTO
+270.629 345.357 270.941 345.123 QUADTO
+271.254 344.889 271.425 344.436 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
+263.588 332.133 M
+263.588 330.133 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
+293.332 346.139 M
+289.082 346.139 lineto
+289.082 345.248 lineto
+290.66 345.248 lineto
+290.66 339.404 lineto
+289.082 339.404 lineto
+289.082 338.607 lineto
+289.973 338.607 290.402 338.35 QUADTO
+290.832 338.092 290.879 337.389 QUADTO
+291.785 337.389 lineto
+291.785 345.248 lineto
+293.332 345.248 lineto
+293.332 346.139 lineto
+closepath
+300.43 338.717 M
+296.648 346.139 lineto
+295.398 346.139 lineto
+299.398 338.436 lineto
+294.883 338.436 lineto
+294.883 337.42 lineto
+300.43 337.42 lineto
+300.43 338.717 lineto
+closepath
+306.777 343.357 M
+306.777 343.998 306.574 344.537 QUADTO
+306.371 345.076 306.012 345.467 QUADTO
+305.637 345.857 305.09 346.092 QUADTO
+304.543 346.326 303.871 346.326 QUADTO
+303.246 346.326 302.637 346.186 QUADTO
+302.027 346.045 301.59 345.826 QUADTO
+301.59 344.592 lineto
+301.668 344.592 lineto
+301.793 344.686 302.051 344.811 QUADTO
+302.309 344.936 302.605 345.045 QUADTO
+302.949 345.17 303.238 345.24 QUADTO
+303.527 345.311 303.887 345.311 QUADTO
+304.23 345.311 304.566 345.186 QUADTO
+304.902 345.061 305.152 344.779 QUADTO
+305.355 344.514 305.473 344.17 QUADTO
+305.59 343.826 305.59 343.357 QUADTO
+305.59 342.889 305.465 342.592 QUADTO
+305.34 342.295 305.105 342.107 QUADTO
+304.84 341.873 304.48 341.787 QUADTO
+304.121 341.701 303.668 341.701 QUADTO
+303.184 341.701 302.707 341.771 QUADTO
+302.23 341.842 301.934 341.904 QUADTO
+301.934 337.42 lineto
+306.73 337.42 lineto
+306.73 338.436 lineto
+303.074 338.436 lineto
+303.074 340.764 lineto
+303.277 340.732 303.488 340.725 QUADTO
+303.699 340.717 303.855 340.717 QUADTO
+304.527 340.717 304.988 340.826 QUADTO
+305.449 340.936 305.887 341.264 QUADTO
+306.324 341.592 306.551 342.084 QUADTO
+306.777 342.576 306.777 343.357 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
+297.58 332.133 M
+297.58 330.133 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
+327.778 346.139 M
+322.387 346.139 lineto
+322.387 344.92 lineto
+322.965 344.357 323.481 343.857 QUADTO
+323.996 343.357 324.496 342.811 QUADTO
+325.481 341.717 325.848 341.053 QUADTO
+326.215 340.389 326.215 339.686 QUADTO
+326.215 339.326 326.098 339.053 QUADTO
+325.981 338.779 325.778 338.592 QUADTO
+325.574 338.42 325.309 338.334 QUADTO
+325.043 338.248 324.715 338.248 QUADTO
+324.403 338.248 324.082 338.326 QUADTO
+323.762 338.404 323.481 338.514 QUADTO
+323.231 338.623 323.004 338.764 QUADTO
+322.778 338.904 322.637 338.998 QUADTO
+322.574 338.998 lineto
+322.574 337.764 lineto
+322.934 337.576 323.582 337.404 QUADTO
+324.231 337.232 324.809 337.232 QUADTO
+326.028 337.232 326.715 337.881 QUADTO
+327.403 338.529 327.403 339.639 QUADTO
+327.403 340.139 327.285 340.576 QUADTO
+327.168 341.014 326.949 341.373 QUADTO
+326.746 341.764 326.442 342.139 QUADTO
+326.137 342.514 325.793 342.873 QUADTO
+325.246 343.467 324.567 344.115 QUADTO
+323.887 344.764 323.481 345.139 QUADTO
+327.778 345.139 lineto
+327.778 346.139 lineto
+closepath
+334.36 341.779 M
+334.36 344.123 333.68 345.225 QUADTO
+333 346.326 331.578 346.326 QUADTO
+330.125 346.326 329.453 345.201 QUADTO
+328.781 344.076 328.781 341.779 QUADTO
+328.781 339.42 329.469 338.326 QUADTO
+330.156 337.232 331.578 337.232 QUADTO
+333.016 337.232 333.688 338.365 QUADTO
+334.36 339.498 334.36 341.779 QUADTO
+closepath
+332.86 344.436 M
+333.031 343.998 333.102 343.334 QUADTO
+333.172 342.67 333.172 341.779 QUADTO
+333.172 340.873 333.102 340.209 QUADTO
+333.031 339.545 332.86 339.107 QUADTO
+332.688 338.67 332.375 338.436 QUADTO
+332.063 338.201 331.578 338.201 QUADTO
+331.094 338.201 330.774 338.436 QUADTO
+330.453 338.67 330.281 339.123 QUADTO
+330.11 339.576 330.039 340.256 QUADTO
+329.969 340.936 329.969 341.779 QUADTO
+329.969 342.701 330.024 343.318 QUADTO
+330.078 343.936 330.266 344.42 QUADTO
+330.438 344.873 330.75 345.115 QUADTO
+331.063 345.357 331.578 345.357 QUADTO
+332.063 345.357 332.375 345.123 QUADTO
+332.688 344.889 332.86 344.436 QUADTO
+closepath
+340.91 341.779 M
+340.91 344.123 340.231 345.225 QUADTO
+339.551 346.326 338.129 346.326 QUADTO
+336.676 346.326 336.004 345.201 QUADTO
+335.332 344.076 335.332 341.779 QUADTO
+335.332 339.42 336.02 338.326 QUADTO
+336.707 337.232 338.129 337.232 QUADTO
+339.567 337.232 340.239 338.365 QUADTO
+340.91 339.498 340.91 341.779 QUADTO
+closepath
+339.41 344.436 M
+339.582 343.998 339.653 343.334 QUADTO
+339.723 342.67 339.723 341.779 QUADTO
+339.723 340.873 339.653 340.209 QUADTO
+339.582 339.545 339.41 339.107 QUADTO
+339.239 338.67 338.926 338.436 QUADTO
+338.614 338.201 338.129 338.201 QUADTO
+337.645 338.201 337.324 338.436 QUADTO
+337.004 338.67 336.832 339.123 QUADTO
+336.66 339.576 336.59 340.256 QUADTO
+336.52 340.936 336.52 341.779 QUADTO
+336.52 342.701 336.574 343.318 QUADTO
+336.629 343.936 336.817 344.42 QUADTO
+336.989 344.873 337.301 345.115 QUADTO
+337.614 345.357 338.129 345.357 QUADTO
+338.614 345.357 338.926 345.123 QUADTO
+339.239 344.889 339.41 344.436 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
+331.573 332.133 M
+331.573 330.133 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
+361.77 346.139 M
+356.379 346.139 lineto
+356.379 344.92 lineto
+356.958 344.357 357.473 343.857 QUADTO
+357.989 343.357 358.489 342.811 QUADTO
+359.473 341.717 359.84 341.053 QUADTO
+360.208 340.389 360.208 339.686 QUADTO
+360.208 339.326 360.09 339.053 QUADTO
+359.973 338.779 359.77 338.592 QUADTO
+359.567 338.42 359.301 338.334 QUADTO
+359.036 338.248 358.708 338.248 QUADTO
+358.395 338.248 358.075 338.326 QUADTO
+357.754 338.404 357.473 338.514 QUADTO
+357.223 338.623 356.997 338.764 QUADTO
+356.77 338.904 356.629 338.998 QUADTO
+356.567 338.998 lineto
+356.567 337.764 lineto
+356.926 337.576 357.575 337.404 QUADTO
+358.223 337.232 358.801 337.232 QUADTO
+360.02 337.232 360.708 337.881 QUADTO
+361.395 338.529 361.395 339.639 QUADTO
+361.395 340.139 361.278 340.576 QUADTO
+361.161 341.014 360.942 341.373 QUADTO
+360.739 341.764 360.434 342.139 QUADTO
+360.129 342.514 359.786 342.873 QUADTO
+359.239 343.467 358.559 344.115 QUADTO
+357.879 344.764 357.473 345.139 QUADTO
+361.77 345.139 lineto
+361.77 346.139 lineto
+closepath
+368.321 346.139 M
+362.93 346.139 lineto
+362.93 344.92 lineto
+363.508 344.357 364.024 343.857 QUADTO
+364.54 343.357 365.04 342.811 QUADTO
+366.024 341.717 366.391 341.053 QUADTO
+366.758 340.389 366.758 339.686 QUADTO
+366.758 339.326 366.641 339.053 QUADTO
+366.524 338.779 366.321 338.592 QUADTO
+366.118 338.42 365.852 338.334 QUADTO
+365.586 338.248 365.258 338.248 QUADTO
+364.946 338.248 364.626 338.326 QUADTO
+364.305 338.404 364.024 338.514 QUADTO
+363.774 338.623 363.547 338.764 QUADTO
+363.321 338.904 363.18 338.998 QUADTO
+363.118 338.998 lineto
+363.118 337.764 lineto
+363.477 337.576 364.126 337.404 QUADTO
+364.774 337.232 365.352 337.232 QUADTO
+366.571 337.232 367.258 337.881 QUADTO
+367.946 338.529 367.946 339.639 QUADTO
+367.946 340.139 367.829 340.576 QUADTO
+367.711 341.014 367.493 341.373 QUADTO
+367.29 341.764 366.985 342.139 QUADTO
+366.68 342.514 366.336 342.873 QUADTO
+365.79 343.467 365.11 344.115 QUADTO
+364.43 344.764 364.024 345.139 QUADTO
+368.321 345.139 lineto
+368.321 346.139 lineto
+closepath
+374.762 343.357 M
+374.762 343.998 374.559 344.537 QUADTO
+374.356 345.076 373.997 345.467 QUADTO
+373.622 345.857 373.075 346.092 QUADTO
+372.528 346.326 371.856 346.326 QUADTO
+371.231 346.326 370.622 346.186 QUADTO
+370.012 346.045 369.575 345.826 QUADTO
+369.575 344.592 lineto
+369.653 344.592 lineto
+369.778 344.686 370.036 344.811 QUADTO
+370.293 344.936 370.59 345.045 QUADTO
+370.934 345.17 371.223 345.24 QUADTO
+371.512 345.311 371.872 345.311 QUADTO
+372.215 345.311 372.551 345.186 QUADTO
+372.887 345.061 373.137 344.779 QUADTO
+373.34 344.514 373.458 344.17 QUADTO
+373.575 343.826 373.575 343.357 QUADTO
+373.575 342.889 373.45 342.592 QUADTO
+373.325 342.295 373.09 342.107 QUADTO
+372.825 341.873 372.465 341.787 QUADTO
+372.106 341.701 371.653 341.701 QUADTO
+371.168 341.701 370.692 341.771 QUADTO
+370.215 341.842 369.918 341.904 QUADTO
+369.918 337.42 lineto
+374.715 337.42 lineto
+374.715 338.436 lineto
+371.059 338.436 lineto
+371.059 340.764 lineto
+371.262 340.732 371.473 340.725 QUADTO
+371.684 340.717 371.84 340.717 QUADTO
+372.512 340.717 372.973 340.826 QUADTO
+373.434 340.936 373.872 341.264 QUADTO
+374.309 341.592 374.536 342.084 QUADTO
+374.762 342.576 374.762 343.357 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.565 332.133 M
+365.565 330.133 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
+211.823 365.78 M
+210.354 365.78 209.69 365.179 QUADTO
+209.026 364.577 209.026 363.202 QUADTO
+209.026 359.608 lineto
+208.104 359.608 lineto
+208.104 357.952 lineto
+209.026 357.952 lineto
+209.026 355.749 lineto
+211.417 355.749 lineto
+211.417 357.952 lineto
+213.714 357.952 lineto
+213.714 359.608 lineto
+211.417 359.608 lineto
+211.417 362.343 lineto
+211.417 362.733 211.425 363.038 QUADTO
+211.433 363.343 211.526 363.577 QUADTO
+211.636 363.812 211.878 363.952 QUADTO
+212.12 364.093 212.573 364.093 QUADTO
+212.776 364.093 213.081 364.015 QUADTO
+213.386 363.937 213.511 363.874 QUADTO
+213.714 363.874 lineto
+213.714 365.562 lineto
+213.323 365.655 212.886 365.718 QUADTO
+212.448 365.78 211.823 365.78 QUADTO
+closepath
+217.094 365.624 M
+214.703 365.624 lineto
+214.703 357.952 lineto
+217.094 357.952 lineto
+217.094 365.624 lineto
+closepath
+217.156 356.858 M
+214.625 356.858 lineto
+214.625 354.983 lineto
+217.156 354.983 lineto
+217.156 356.858 lineto
+closepath
+228.1 365.624 M
+228.1 361.796 lineto
+228.1 361.218 228.076 360.827 QUADTO
+228.053 360.437 227.959 360.202 QUADTO
+227.85 359.952 227.631 359.835 QUADTO
+227.412 359.718 227.037 359.718 QUADTO
+226.756 359.718 226.49 359.843 QUADTO
+226.225 359.968 225.912 360.187 QUADTO
+225.912 365.624 lineto
+223.506 365.624 lineto
+223.506 361.796 lineto
+223.506 361.233 223.482 360.835 QUADTO
+223.459 360.437 223.35 360.202 QUADTO
+223.256 359.952 223.037 359.835 QUADTO
+222.818 359.718 222.443 359.718 QUADTO
+222.146 359.718 221.865 359.858 QUADTO
+221.584 359.999 221.318 360.187 QUADTO
+221.318 365.624 lineto
+218.928 365.624 lineto
+218.928 357.952 lineto
+221.318 357.952 lineto
+221.318 358.796 lineto
+221.896 358.296 222.42 358.015 QUADTO
+222.943 357.733 223.584 357.733 QUADTO
+224.303 357.733 224.834 358.069 QUADTO
+225.365 358.405 225.646 359.062 QUADTO
+226.334 358.421 226.943 358.077 QUADTO
+227.553 357.733 228.178 357.733 QUADTO
+228.725 357.733 229.146 357.905 QUADTO
+229.568 358.077 229.865 358.421 QUADTO
+230.178 358.78 230.342 359.296 QUADTO
+230.506 359.812 230.506 360.624 QUADTO
+230.506 365.624 lineto
+228.1 365.624 lineto
+closepath
+236.2 365.827 M
+234.028 365.827 232.872 364.788 QUADTO
+231.716 363.749 231.716 361.827 QUADTO
+231.716 359.952 232.794 358.827 QUADTO
+233.872 357.702 235.81 357.702 QUADTO
+237.575 357.702 238.466 358.655 QUADTO
+239.356 359.608 239.356 361.374 QUADTO
+239.356 362.233 lineto
+234.106 362.233 lineto
+234.153 362.78 234.341 363.132 QUADTO
+234.528 363.483 234.841 363.702 QUADTO
+235.153 363.921 235.56 364.007 QUADTO
+235.966 364.093 236.45 364.093 QUADTO
+236.872 364.093 237.278 364.007 QUADTO
+237.685 363.921 238.013 363.765 QUADTO
+238.31 363.64 238.56 363.483 QUADTO
+238.81 363.327 238.966 363.218 QUADTO
+239.216 363.218 lineto
+239.216 365.187 lineto
+238.919 365.312 238.677 365.413 QUADTO
+238.435 365.515 238.013 365.608 QUADTO
+237.622 365.718 237.208 365.772 QUADTO
+236.794 365.827 236.2 365.827 QUADTO
+closepath
+236.997 360.796 M
+236.981 360.046 236.646 359.647 QUADTO
+236.31 359.249 235.622 359.249 QUADTO
+234.935 359.249 234.544 359.663 QUADTO
+234.153 360.077 234.106 360.796 QUADTO
+236.997 360.796 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
+55.633 34.141 M
+55.633 326.133 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
+38.961 326.537 M
+38.961 328.881 38.281 329.982 QUADTO
+37.602 331.084 36.18 331.084 QUADTO
+34.727 331.084 34.055 329.959 QUADTO
+33.383 328.834 33.383 326.537 QUADTO
+33.383 324.178 34.07 323.084 QUADTO
+34.758 321.99 36.18 321.99 QUADTO
+37.617 321.99 38.289 323.123 QUADTO
+38.961 324.256 38.961 326.537 QUADTO
+closepath
+37.461 329.193 M
+37.633 328.756 37.703 328.092 QUADTO
+37.773 327.428 37.773 326.537 QUADTO
+37.773 325.631 37.703 324.967 QUADTO
+37.633 324.303 37.461 323.865 QUADTO
+37.289 323.428 36.977 323.193 QUADTO
+36.664 322.959 36.18 322.959 QUADTO
+35.695 322.959 35.375 323.193 QUADTO
+35.055 323.428 34.883 323.881 QUADTO
+34.711 324.334 34.641 325.014 QUADTO
+34.57 325.693 34.57 326.537 QUADTO
+34.57 327.459 34.625 328.076 QUADTO
+34.68 328.693 34.867 329.178 QUADTO
+35.039 329.631 35.352 329.873 QUADTO
+35.664 330.115 36.18 330.115 QUADTO
+36.664 330.115 36.977 329.881 QUADTO
+37.289 329.646 37.461 329.193 QUADTO
+closepath
+41.965 330.896 M
+40.559 330.896 lineto
+40.559 329.225 lineto
+41.965 329.225 lineto
+41.965 330.896 lineto
+closepath
+49.145 326.537 M
+49.145 328.881 48.465 329.982 QUADTO
+47.785 331.084 46.363 331.084 QUADTO
+44.91 331.084 44.238 329.959 QUADTO
+43.566 328.834 43.566 326.537 QUADTO
+43.566 324.178 44.254 323.084 QUADTO
+44.941 321.99 46.363 321.99 QUADTO
+47.801 321.99 48.473 323.123 QUADTO
+49.145 324.256 49.145 326.537 QUADTO
+closepath
+47.645 329.193 M
+47.816 328.756 47.887 328.092 QUADTO
+47.957 327.428 47.957 326.537 QUADTO
+47.957 325.631 47.887 324.967 QUADTO
+47.816 324.303 47.645 323.865 QUADTO
+47.473 323.428 47.16 323.193 QUADTO
+46.848 322.959 46.363 322.959 QUADTO
+45.879 322.959 45.559 323.193 QUADTO
+45.238 323.428 45.066 323.881 QUADTO
+44.895 324.334 44.824 325.014 QUADTO
+44.754 325.693 44.754 326.537 QUADTO
+44.754 327.459 44.809 328.076 QUADTO
+44.863 328.693 45.051 329.178 QUADTO
+45.223 329.631 45.535 329.873 QUADTO
+45.848 330.115 46.363 330.115 QUADTO
+46.848 330.115 47.16 329.881 QUADTO
+47.473 329.646 47.645 329.193 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
+53.633 326.133 M
+55.633 326.133 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
+38.961 300.053 M
+38.961 302.396 38.281 303.498 QUADTO
+37.602 304.599 36.18 304.599 QUADTO
+34.727 304.599 34.055 303.474 QUADTO
+33.383 302.349 33.383 300.053 QUADTO
+33.383 297.693 34.07 296.599 QUADTO
+34.758 295.506 36.18 295.506 QUADTO
+37.617 295.506 38.289 296.638 QUADTO
+38.961 297.771 38.961 300.053 QUADTO
+closepath
+37.461 302.709 M
+37.633 302.271 37.703 301.607 QUADTO
+37.773 300.943 37.773 300.053 QUADTO
+37.773 299.146 37.703 298.482 QUADTO
+37.633 297.818 37.461 297.381 QUADTO
+37.289 296.943 36.977 296.709 QUADTO
+36.664 296.474 36.18 296.474 QUADTO
+35.695 296.474 35.375 296.709 QUADTO
+35.055 296.943 34.883 297.396 QUADTO
+34.711 297.849 34.641 298.529 QUADTO
+34.57 299.209 34.57 300.053 QUADTO
+34.57 300.974 34.625 301.592 QUADTO
+34.68 302.209 34.867 302.693 QUADTO
+35.039 303.146 35.352 303.388 QUADTO
+35.664 303.631 36.18 303.631 QUADTO
+36.664 303.631 36.977 303.396 QUADTO
+37.289 303.162 37.461 302.709 QUADTO
+closepath
+41.965 304.412 M
+40.559 304.412 lineto
+40.559 302.74 lineto
+41.965 302.74 lineto
+41.965 304.412 lineto
+closepath
+48.66 304.412 M
+44.41 304.412 lineto
+44.41 303.521 lineto
+45.988 303.521 lineto
+45.988 297.678 lineto
+44.41 297.678 lineto
+44.41 296.881 lineto
+45.301 296.881 45.73 296.623 QUADTO
+46.16 296.365 46.207 295.662 QUADTO
+47.113 295.662 lineto
+47.113 303.521 lineto
+48.66 303.521 lineto
+48.66 304.412 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
+53.633 299.648 M
+55.633 299.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
+38.961 273.568 M
+38.961 275.912 38.281 277.013 QUADTO
+37.602 278.115 36.18 278.115 QUADTO
+34.727 278.115 34.055 276.99 QUADTO
+33.383 275.865 33.383 273.568 QUADTO
+33.383 271.209 34.07 270.115 QUADTO
+34.758 269.021 36.18 269.021 QUADTO
+37.617 269.021 38.289 270.154 QUADTO
+38.961 271.287 38.961 273.568 QUADTO
+closepath
+37.461 276.224 M
+37.633 275.787 37.703 275.123 QUADTO
+37.773 274.459 37.773 273.568 QUADTO
+37.773 272.662 37.703 271.998 QUADTO
+37.633 271.334 37.461 270.896 QUADTO
+37.289 270.459 36.977 270.224 QUADTO
+36.664 269.99 36.18 269.99 QUADTO
+35.695 269.99 35.375 270.224 QUADTO
+35.055 270.459 34.883 270.912 QUADTO
+34.711 271.365 34.641 272.045 QUADTO
+34.57 272.724 34.57 273.568 QUADTO
+34.57 274.49 34.625 275.107 QUADTO
+34.68 275.724 34.867 276.209 QUADTO
+35.039 276.662 35.352 276.904 QUADTO
+35.664 277.146 36.18 277.146 QUADTO
+36.664 277.146 36.977 276.912 QUADTO
+37.289 276.677 37.461 276.224 QUADTO
+closepath
+41.965 277.927 M
+40.559 277.927 lineto
+40.559 276.255 lineto
+41.965 276.255 lineto
+41.965 277.927 lineto
+closepath
+49.113 277.927 M
+43.723 277.927 lineto
+43.723 276.709 lineto
+44.301 276.146 44.816 275.646 QUADTO
+45.332 275.146 45.832 274.599 QUADTO
+46.816 273.505 47.184 272.841 QUADTO
+47.551 272.177 47.551 271.474 QUADTO
+47.551 271.115 47.434 270.841 QUADTO
+47.316 270.568 47.113 270.38 QUADTO
+46.91 270.209 46.645 270.123 QUADTO
+46.379 270.037 46.051 270.037 QUADTO
+45.738 270.037 45.418 270.115 QUADTO
+45.098 270.193 44.816 270.302 QUADTO
+44.566 270.412 44.34 270.552 QUADTO
+44.113 270.693 43.973 270.787 QUADTO
+43.91 270.787 lineto
+43.91 269.552 lineto
+44.27 269.365 44.918 269.193 QUADTO
+45.566 269.021 46.145 269.021 QUADTO
+47.363 269.021 48.051 269.67 QUADTO
+48.738 270.318 48.738 271.427 QUADTO
+48.738 271.927 48.621 272.365 QUADTO
+48.504 272.802 48.285 273.162 QUADTO
+48.082 273.552 47.777 273.927 QUADTO
+47.473 274.302 47.129 274.662 QUADTO
+46.582 275.255 45.902 275.904 QUADTO
+45.223 276.552 44.816 276.927 QUADTO
+49.113 276.927 lineto
+49.113 277.927 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
+53.633 273.164 M
+55.633 273.164 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
+38.961 247.083 M
+38.961 249.427 38.281 250.529 QUADTO
+37.602 251.63 36.18 251.63 QUADTO
+34.727 251.63 34.055 250.505 QUADTO
+33.383 249.38 33.383 247.083 QUADTO
+33.383 244.724 34.07 243.63 QUADTO
+34.758 242.537 36.18 242.537 QUADTO
+37.617 242.537 38.289 243.669 QUADTO
+38.961 244.802 38.961 247.083 QUADTO
+closepath
+37.461 249.74 M
+37.633 249.302 37.703 248.638 QUADTO
+37.773 247.974 37.773 247.083 QUADTO
+37.773 246.177 37.703 245.513 QUADTO
+37.633 244.849 37.461 244.412 QUADTO
+37.289 243.974 36.977 243.74 QUADTO
+36.664 243.505 36.18 243.505 QUADTO
+35.695 243.505 35.375 243.74 QUADTO
+35.055 243.974 34.883 244.427 QUADTO
+34.711 244.88 34.641 245.56 QUADTO
+34.57 246.24 34.57 247.083 QUADTO
+34.57 248.005 34.625 248.623 QUADTO
+34.68 249.24 34.867 249.724 QUADTO
+35.039 250.177 35.352 250.419 QUADTO
+35.664 250.662 36.18 250.662 QUADTO
+36.664 250.662 36.977 250.427 QUADTO
+37.289 250.193 37.461 249.74 QUADTO
+closepath
+41.965 251.443 M
+40.559 251.443 lineto
+40.559 249.771 lineto
+41.965 249.771 lineto
+41.965 251.443 lineto
+closepath
+46.082 243.552 M
+45.754 243.552 45.441 243.63 QUADTO
+45.129 243.708 44.816 243.818 QUADTO
+44.535 243.943 44.332 244.068 QUADTO
+44.129 244.193 43.957 244.318 QUADTO
+43.895 244.318 lineto
+43.895 243.068 lineto
+44.27 242.865 44.926 242.701 QUADTO
+45.582 242.537 46.176 242.537 QUADTO
+46.77 242.537 47.207 242.654 QUADTO
+47.645 242.771 48.004 243.021 QUADTO
+48.395 243.302 48.59 243.701 QUADTO
+48.785 244.099 48.785 244.646 QUADTO
+48.785 245.365 48.309 245.904 QUADTO
+47.832 246.443 47.176 246.599 QUADTO
+47.176 246.677 lineto
+47.441 246.724 47.762 246.857 QUADTO
+48.082 246.99 48.348 247.24 QUADTO
+48.613 247.49 48.785 247.888 QUADTO
+48.957 248.287 48.957 248.849 QUADTO
+48.957 249.443 48.754 249.935 QUADTO
+48.551 250.427 48.176 250.818 QUADTO
+47.801 251.208 47.262 251.419 QUADTO
+46.723 251.63 46.035 251.63 QUADTO
+45.379 251.63 44.738 251.466 QUADTO
+44.098 251.302 43.645 251.083 QUADTO
+43.645 249.849 lineto
+43.738 249.849 lineto
+44.098 250.115 44.723 250.365 QUADTO
+45.348 250.615 45.973 250.615 QUADTO
+46.316 250.615 46.684 250.498 QUADTO
+47.051 250.38 47.285 250.13 QUADTO
+47.52 249.865 47.645 249.552 QUADTO
+47.77 249.24 47.77 248.771 QUADTO
+47.77 248.302 47.629 247.998 QUADTO
+47.488 247.693 47.238 247.505 QUADTO
+47.004 247.333 46.66 247.263 QUADTO
+46.316 247.193 45.926 247.193 QUADTO
+45.426 247.193 lineto
+45.426 246.224 lineto
+45.816 246.224 lineto
+46.613 246.224 47.105 245.849 QUADTO
+47.598 245.474 47.598 244.755 QUADTO
+47.598 244.427 47.473 244.193 QUADTO
+47.348 243.958 47.145 243.818 QUADTO
+46.926 243.662 46.652 243.607 QUADTO
+46.379 243.552 46.082 243.552 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
+53.633 246.679 M
+55.633 246.679 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
+38.961 220.599 M
+38.961 222.943 38.281 224.044 QUADTO
+37.602 225.146 36.18 225.146 QUADTO
+34.727 225.146 34.055 224.021 QUADTO
+33.383 222.896 33.383 220.599 QUADTO
+33.383 218.24 34.07 217.146 QUADTO
+34.758 216.052 36.18 216.052 QUADTO
+37.617 216.052 38.289 217.185 QUADTO
+38.961 218.318 38.961 220.599 QUADTO
+closepath
+37.461 223.255 M
+37.633 222.818 37.703 222.154 QUADTO
+37.773 221.49 37.773 220.599 QUADTO
+37.773 219.693 37.703 219.029 QUADTO
+37.633 218.365 37.461 217.927 QUADTO
+37.289 217.49 36.977 217.255 QUADTO
+36.664 217.021 36.18 217.021 QUADTO
+35.695 217.021 35.375 217.255 QUADTO
+35.055 217.49 34.883 217.943 QUADTO
+34.711 218.396 34.641 219.075 QUADTO
+34.57 219.755 34.57 220.599 QUADTO
+34.57 221.521 34.625 222.138 QUADTO
+34.68 222.755 34.867 223.24 QUADTO
+35.039 223.693 35.352 223.935 QUADTO
+35.664 224.177 36.18 224.177 QUADTO
+36.664 224.177 36.977 223.943 QUADTO
+37.289 223.708 37.461 223.255 QUADTO
+closepath
+41.965 224.958 M
+40.559 224.958 lineto
+40.559 223.286 lineto
+41.965 223.286 lineto
+41.965 224.958 lineto
+closepath
+49.332 221.958 M
+48.301 221.958 lineto
+48.301 224.958 lineto
+47.176 224.958 lineto
+47.176 221.958 lineto
+43.316 221.958 lineto
+43.316 220.724 lineto
+47.223 216.24 lineto
+48.301 216.24 lineto
+48.301 221.021 lineto
+49.332 221.021 lineto
+49.332 221.958 lineto
+closepath
+47.176 221.021 M
+47.176 217.615 lineto
+44.238 221.021 lineto
+47.176 221.021 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
+53.633 220.195 M
+55.633 220.195 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
+38.961 194.114 M
+38.961 196.458 38.281 197.56 QUADTO
+37.602 198.661 36.18 198.661 QUADTO
+34.727 198.661 34.055 197.536 QUADTO
+33.383 196.411 33.383 194.114 QUADTO
+33.383 191.755 34.07 190.661 QUADTO
+34.758 189.567 36.18 189.567 QUADTO
+37.617 189.567 38.289 190.7 QUADTO
+38.961 191.833 38.961 194.114 QUADTO
+closepath
+37.461 196.771 M
+37.633 196.333 37.703 195.669 QUADTO
+37.773 195.005 37.773 194.114 QUADTO
+37.773 193.208 37.703 192.544 QUADTO
+37.633 191.88 37.461 191.442 QUADTO
+37.289 191.005 36.977 190.771 QUADTO
+36.664 190.536 36.18 190.536 QUADTO
+35.695 190.536 35.375 190.771 QUADTO
+35.055 191.005 34.883 191.458 QUADTO
+34.711 191.911 34.641 192.591 QUADTO
+34.57 193.271 34.57 194.114 QUADTO
+34.57 195.036 34.625 195.653 QUADTO
+34.68 196.271 34.867 196.755 QUADTO
+35.039 197.208 35.352 197.45 QUADTO
+35.664 197.692 36.18 197.692 QUADTO
+36.664 197.692 36.977 197.458 QUADTO
+37.289 197.224 37.461 196.771 QUADTO
+closepath
+41.965 198.474 M
+40.559 198.474 lineto
+40.559 196.802 lineto
+41.965 196.802 lineto
+41.965 198.474 lineto
+closepath
+49.004 195.692 M
+49.004 196.333 48.801 196.872 QUADTO
+48.598 197.411 48.238 197.802 QUADTO
+47.863 198.192 47.316 198.427 QUADTO
+46.77 198.661 46.098 198.661 QUADTO
+45.473 198.661 44.863 198.521 QUADTO
+44.254 198.38 43.816 198.161 QUADTO
+43.816 196.927 lineto
+43.895 196.927 lineto
+44.02 197.021 44.277 197.146 QUADTO
+44.535 197.271 44.832 197.38 QUADTO
+45.176 197.505 45.465 197.575 QUADTO
+45.754 197.646 46.113 197.646 QUADTO
+46.457 197.646 46.793 197.521 QUADTO
+47.129 197.396 47.379 197.114 QUADTO
+47.582 196.849 47.699 196.505 QUADTO
+47.816 196.161 47.816 195.692 QUADTO
+47.816 195.224 47.691 194.927 QUADTO
+47.566 194.63 47.332 194.442 QUADTO
+47.066 194.208 46.707 194.122 QUADTO
+46.348 194.036 45.895 194.036 QUADTO
+45.41 194.036 44.934 194.107 QUADTO
+44.457 194.177 44.16 194.239 QUADTO
+44.16 189.755 lineto
+48.957 189.755 lineto
+48.957 190.771 lineto
+45.301 190.771 lineto
+45.301 193.099 lineto
+45.504 193.067 45.715 193.06 QUADTO
+45.926 193.052 46.082 193.052 QUADTO
+46.754 193.052 47.215 193.161 QUADTO
+47.676 193.271 48.113 193.599 QUADTO
+48.551 193.927 48.777 194.419 QUADTO
+49.004 194.911 49.004 195.692 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
+53.633 193.71 M
+55.633 193.71 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
+38.961 167.63 M
+38.961 169.974 38.281 171.075 QUADTO
+37.602 172.177 36.18 172.177 QUADTO
+34.727 172.177 34.055 171.052 QUADTO
+33.383 169.927 33.383 167.63 QUADTO
+33.383 165.27 34.07 164.177 QUADTO
+34.758 163.083 36.18 163.083 QUADTO
+37.617 163.083 38.289 164.216 QUADTO
+38.961 165.349 38.961 167.63 QUADTO
+closepath
+37.461 170.286 M
+37.633 169.849 37.703 169.184 QUADTO
+37.773 168.52 37.773 167.63 QUADTO
+37.773 166.724 37.703 166.059 QUADTO
+37.633 165.395 37.461 164.958 QUADTO
+37.289 164.52 36.977 164.286 QUADTO
+36.664 164.052 36.18 164.052 QUADTO
+35.695 164.052 35.375 164.286 QUADTO
+35.055 164.52 34.883 164.974 QUADTO
+34.711 165.427 34.641 166.106 QUADTO
+34.57 166.786 34.57 167.63 QUADTO
+34.57 168.552 34.625 169.169 QUADTO
+34.68 169.786 34.867 170.27 QUADTO
+35.039 170.724 35.352 170.966 QUADTO
+35.664 171.208 36.18 171.208 QUADTO
+36.664 171.208 36.977 170.974 QUADTO
+37.289 170.739 37.461 170.286 QUADTO
+closepath
+41.965 171.989 M
+40.559 171.989 lineto
+40.559 170.317 lineto
+41.965 170.317 lineto
+41.965 171.989 lineto
+closepath
+49.238 169.161 M
+49.238 169.833 49.02 170.403 QUADTO
+48.801 170.974 48.426 171.349 QUADTO
+48.035 171.755 47.543 171.966 QUADTO
+47.051 172.177 46.473 172.177 QUADTO
+45.879 172.177 45.395 171.974 QUADTO
+44.91 171.77 44.535 171.38 QUADTO
+44.098 170.911 43.84 170.114 QUADTO
+43.582 169.317 43.582 168.161 QUADTO
+43.582 167.02 43.816 166.106 QUADTO
+44.051 165.192 44.535 164.505 QUADTO
+45.004 163.849 45.754 163.474 QUADTO
+46.504 163.099 47.488 163.099 QUADTO
+47.785 163.099 48.035 163.13 QUADTO
+48.285 163.161 48.488 163.224 QUADTO
+48.488 164.349 lineto
+48.426 164.349 lineto
+48.27 164.255 47.973 164.184 QUADTO
+47.676 164.114 47.332 164.114 QUADTO
+46.254 164.114 45.582 164.849 QUADTO
+44.91 165.583 44.785 167.02 QUADTO
+45.191 166.739 45.637 166.575 QUADTO
+46.082 166.411 46.598 166.411 QUADTO
+47.113 166.411 47.496 166.513 QUADTO
+47.879 166.614 48.285 166.927 QUADTO
+48.77 167.302 49.004 167.856 QUADTO
+49.238 168.411 49.238 169.161 QUADTO
+closepath
+48.051 169.208 M
+48.051 168.661 47.91 168.302 QUADTO
+47.77 167.942 47.457 167.677 QUADTO
+47.223 167.489 46.934 167.434 QUADTO
+46.645 167.38 46.348 167.38 QUADTO
+45.926 167.38 45.543 167.505 QUADTO
+45.16 167.63 44.785 167.864 QUADTO
+44.77 167.989 44.762 168.106 QUADTO
+44.754 168.224 44.754 168.411 QUADTO
+44.754 169.317 44.934 169.872 QUADTO
+45.113 170.427 45.379 170.724 QUADTO
+45.629 170.989 45.895 171.099 QUADTO
+46.16 171.208 46.473 171.208 QUADTO
+47.176 171.208 47.613 170.708 QUADTO
+48.051 170.208 48.051 169.208 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
+53.633 167.225 M
+55.633 167.225 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
+38.961 141.145 M
+38.961 143.489 38.281 144.591 QUADTO
+37.602 145.692 36.18 145.692 QUADTO
+34.727 145.692 34.055 144.567 QUADTO
+33.383 143.442 33.383 141.145 QUADTO
+33.383 138.786 34.07 137.692 QUADTO
+34.758 136.598 36.18 136.598 QUADTO
+37.617 136.598 38.289 137.731 QUADTO
+38.961 138.864 38.961 141.145 QUADTO
+closepath
+37.461 143.801 M
+37.633 143.364 37.703 142.7 QUADTO
+37.773 142.036 37.773 141.145 QUADTO
+37.773 140.239 37.703 139.575 QUADTO
+37.633 138.911 37.461 138.473 QUADTO
+37.289 138.036 36.977 137.801 QUADTO
+36.664 137.567 36.18 137.567 QUADTO
+35.695 137.567 35.375 137.801 QUADTO
+35.055 138.036 34.883 138.489 QUADTO
+34.711 138.942 34.641 139.622 QUADTO
+34.57 140.301 34.57 141.145 QUADTO
+34.57 142.067 34.625 142.684 QUADTO
+34.68 143.301 34.867 143.786 QUADTO
+35.039 144.239 35.352 144.481 QUADTO
+35.664 144.723 36.18 144.723 QUADTO
+36.664 144.723 36.977 144.489 QUADTO
+37.289 144.255 37.461 143.801 QUADTO
+closepath
+41.965 145.505 M
+40.559 145.505 lineto
+40.559 143.833 lineto
+41.965 143.833 lineto
+41.965 145.505 lineto
+closepath
+49.207 138.083 M
+45.426 145.505 lineto
+44.176 145.505 lineto
+48.176 137.801 lineto
+43.66 137.801 lineto
+43.66 136.786 lineto
+49.207 136.786 lineto
+49.207 138.083 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
+53.633 140.741 M
+55.633 140.741 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
+38.961 114.661 M
+38.961 117.004 38.281 118.106 QUADTO
+37.602 119.208 36.18 119.208 QUADTO
+34.727 119.208 34.055 118.083 QUADTO
+33.383 116.958 33.383 114.661 QUADTO
+33.383 112.301 34.07 111.208 QUADTO
+34.758 110.114 36.18 110.114 QUADTO
+37.617 110.114 38.289 111.247 QUADTO
+38.961 112.379 38.961 114.661 QUADTO
+closepath
+37.461 117.317 M
+37.633 116.879 37.703 116.215 QUADTO
+37.773 115.551 37.773 114.661 QUADTO
+37.773 113.754 37.703 113.09 QUADTO
+37.633 112.426 37.461 111.989 QUADTO
+37.289 111.551 36.977 111.317 QUADTO
+36.664 111.083 36.18 111.083 QUADTO
+35.695 111.083 35.375 111.317 QUADTO
+35.055 111.551 34.883 112.004 QUADTO
+34.711 112.458 34.641 113.137 QUADTO
+34.57 113.817 34.57 114.661 QUADTO
+34.57 115.583 34.625 116.2 QUADTO
+34.68 116.817 34.867 117.301 QUADTO
+35.039 117.754 35.352 117.997 QUADTO
+35.664 118.239 36.18 118.239 QUADTO
+36.664 118.239 36.977 118.004 QUADTO
+37.289 117.77 37.461 117.317 QUADTO
+closepath
+41.965 119.02 M
+40.559 119.02 lineto
+40.559 117.348 lineto
+41.965 117.348 lineto
+41.965 119.02 lineto
+closepath
+47.832 112.333 M
+47.832 111.739 47.441 111.348 QUADTO
+47.051 110.958 46.348 110.958 QUADTO
+45.707 110.958 45.301 111.309 QUADTO
+44.895 111.661 44.895 112.254 QUADTO
+44.895 112.692 45.105 112.989 QUADTO
+45.316 113.286 45.738 113.536 QUADTO
+45.91 113.629 46.285 113.801 QUADTO
+46.66 113.973 46.957 114.083 QUADTO
+47.473 113.692 47.652 113.278 QUADTO
+47.832 112.864 47.832 112.333 QUADTO
+closepath
+48.004 116.692 M
+48.004 116.161 47.793 115.84 QUADTO
+47.582 115.52 46.973 115.192 QUADTO
+46.77 115.083 46.441 114.958 QUADTO
+46.113 114.833 45.691 114.661 QUADTO
+45.207 114.973 44.949 115.45 QUADTO
+44.691 115.926 44.691 116.52 QUADTO
+44.691 117.317 45.168 117.833 QUADTO
+45.645 118.348 46.363 118.348 QUADTO
+47.113 118.348 47.559 117.903 QUADTO
+48.004 117.458 48.004 116.692 QUADTO
+closepath
+46.363 119.223 M
+45.707 119.223 45.176 119.028 QUADTO
+44.645 118.833 44.27 118.473 QUADTO
+43.895 118.114 43.707 117.629 QUADTO
+43.52 117.145 43.52 116.614 QUADTO
+43.52 115.895 43.895 115.301 QUADTO
+44.27 114.708 44.988 114.364 QUADTO
+44.988 114.333 lineto
+44.348 113.958 44.035 113.512 QUADTO
+43.723 113.067 43.723 112.395 QUADTO
+43.723 111.411 44.473 110.754 QUADTO
+45.223 110.098 46.363 110.098 QUADTO
+47.551 110.098 48.27 110.723 QUADTO
+48.988 111.348 48.988 112.317 QUADTO
+48.988 112.895 48.645 113.473 QUADTO
+48.301 114.051 47.66 114.379 QUADTO
+47.66 114.411 lineto
+48.41 114.77 48.809 115.278 QUADTO
+49.207 115.786 49.207 116.583 QUADTO
+49.207 117.708 48.395 118.465 QUADTO
+47.582 119.223 46.363 119.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
+53.633 114.256 M
+55.633 114.256 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
+38.961 88.176 M
+38.961 90.52 38.281 91.621 QUADTO
+37.602 92.723 36.18 92.723 QUADTO
+34.727 92.723 34.055 91.598 QUADTO
+33.383 90.473 33.383 88.176 QUADTO
+33.383 85.817 34.07 84.723 QUADTO
+34.758 83.629 36.18 83.629 QUADTO
+37.617 83.629 38.289 84.762 QUADTO
+38.961 85.895 38.961 88.176 QUADTO
+closepath
+37.461 90.832 M
+37.633 90.395 37.703 89.731 QUADTO
+37.773 89.067 37.773 88.176 QUADTO
+37.773 87.27 37.703 86.606 QUADTO
+37.633 85.942 37.461 85.504 QUADTO
+37.289 85.067 36.977 84.832 QUADTO
+36.664 84.598 36.18 84.598 QUADTO
+35.695 84.598 35.375 84.832 QUADTO
+35.055 85.067 34.883 85.52 QUADTO
+34.711 85.973 34.641 86.653 QUADTO
+34.57 87.332 34.57 88.176 QUADTO
+34.57 89.098 34.625 89.715 QUADTO
+34.68 90.332 34.867 90.817 QUADTO
+35.039 91.27 35.352 91.512 QUADTO
+35.664 91.754 36.18 91.754 QUADTO
+36.664 91.754 36.977 91.52 QUADTO
+37.289 91.286 37.461 90.832 QUADTO
+closepath
+41.965 92.536 M
+40.559 92.536 lineto
+40.559 90.864 lineto
+41.965 90.864 lineto
+41.965 92.536 lineto
+closepath
+47.957 87.395 M
+47.957 86.504 47.793 85.942 QUADTO
+47.629 85.379 47.348 85.082 QUADTO
+47.082 84.801 46.816 84.692 QUADTO
+46.551 84.582 46.238 84.582 QUADTO
+45.52 84.582 45.09 85.098 QUADTO
+44.66 85.614 44.66 86.598 QUADTO
+44.66 87.145 44.801 87.504 QUADTO
+44.941 87.864 45.27 88.129 QUADTO
+45.488 88.301 45.77 88.364 QUADTO
+46.051 88.426 46.363 88.426 QUADTO
+46.738 88.426 47.176 88.293 QUADTO
+47.613 88.161 47.941 87.942 QUADTO
+47.941 87.864 47.949 87.715 QUADTO
+47.957 87.567 47.957 87.395 QUADTO
+closepath
+43.473 86.645 M
+43.473 85.973 43.691 85.418 QUADTO
+43.91 84.864 44.301 84.457 QUADTO
+44.66 84.067 45.184 83.848 QUADTO
+45.707 83.629 46.254 83.629 QUADTO
+46.848 83.629 47.34 83.832 QUADTO
+47.832 84.036 48.191 84.426 QUADTO
+48.645 84.895 48.887 85.676 QUADTO
+49.129 86.457 49.129 87.645 QUADTO
+49.129 88.739 48.887 89.707 QUADTO
+48.645 90.676 48.176 91.317 QUADTO
+47.676 91.989 46.965 92.348 QUADTO
+46.254 92.707 45.223 92.707 QUADTO
+44.988 92.707 44.723 92.684 QUADTO
+44.457 92.661 44.238 92.582 QUADTO
+44.238 91.457 lineto
+44.285 91.457 lineto
+44.441 91.551 44.746 91.621 QUADTO
+45.051 91.692 45.379 91.692 QUADTO
+46.535 91.692 47.191 90.942 QUADTO
+47.848 90.192 47.926 88.786 QUADTO
+47.457 89.098 47.035 89.246 QUADTO
+46.613 89.395 46.113 89.395 QUADTO
+45.629 89.395 45.23 89.286 QUADTO
+44.832 89.176 44.426 88.879 QUADTO
+43.957 88.52 43.715 87.973 QUADTO
+43.473 87.426 43.473 86.645 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
+53.633 87.772 M
+55.633 87.772 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
+38.477 66.051 M
+34.227 66.051 lineto
+34.227 65.16 lineto
+35.805 65.16 lineto
+35.805 59.317 lineto
+34.227 59.317 lineto
+34.227 58.52 lineto
+35.117 58.52 35.547 58.262 QUADTO
+35.977 58.004 36.023 57.301 QUADTO
+36.93 57.301 lineto
+36.93 65.16 lineto
+38.477 65.16 lineto
+38.477 66.051 lineto
+closepath
+41.965 66.051 M
+40.559 66.051 lineto
+40.559 64.379 lineto
+41.965 64.379 lineto
+41.965 66.051 lineto
+closepath
+49.145 61.692 M
+49.145 64.035 48.465 65.137 QUADTO
+47.785 66.238 46.363 66.238 QUADTO
+44.91 66.238 44.238 65.113 QUADTO
+43.566 63.988 43.566 61.692 QUADTO
+43.566 59.332 44.254 58.238 QUADTO
+44.941 57.145 46.363 57.145 QUADTO
+47.801 57.145 48.473 58.278 QUADTO
+49.145 59.41 49.145 61.692 QUADTO
+closepath
+47.645 64.348 M
+47.816 63.91 47.887 63.246 QUADTO
+47.957 62.582 47.957 61.692 QUADTO
+47.957 60.785 47.887 60.121 QUADTO
+47.816 59.457 47.645 59.02 QUADTO
+47.473 58.582 47.16 58.348 QUADTO
+46.848 58.113 46.363 58.113 QUADTO
+45.879 58.113 45.559 58.348 QUADTO
+45.238 58.582 45.066 59.035 QUADTO
+44.895 59.488 44.824 60.168 QUADTO
+44.754 60.848 44.754 61.692 QUADTO
+44.754 62.613 44.809 63.231 QUADTO
+44.863 63.848 45.051 64.332 QUADTO
+45.223 64.785 45.535 65.028 QUADTO
+45.848 65.27 46.363 65.27 QUADTO
+46.848 65.27 47.16 65.035 QUADTO
+47.473 64.801 47.645 64.348 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
+53.633 61.287 M
+55.633 61.287 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
+38.477 39.566 M
+34.227 39.566 lineto
+34.227 38.676 lineto
+35.805 38.676 lineto
+35.805 32.832 lineto
+34.227 32.832 lineto
+34.227 32.035 lineto
+35.117 32.035 35.547 31.777 QUADTO
+35.977 31.52 36.023 30.816 QUADTO
+36.93 30.816 lineto
+36.93 38.676 lineto
+38.477 38.676 lineto
+38.477 39.566 lineto
+closepath
+41.965 39.566 M
+40.559 39.566 lineto
+40.559 37.895 lineto
+41.965 37.895 lineto
+41.965 39.566 lineto
+closepath
+48.66 39.566 M
+44.41 39.566 lineto
+44.41 38.676 lineto
+45.988 38.676 lineto
+45.988 32.832 lineto
+44.41 32.832 lineto
+44.41 32.035 lineto
+45.301 32.035 45.73 31.777 QUADTO
+46.16 31.52 46.207 30.816 QUADTO
+47.113 30.816 lineto
+47.113 38.676 lineto
+48.66 38.676 lineto
+48.66 39.566 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
+53.633 34.803 M
+55.633 34.803 lineto
+stroke
+grestore
+gsave
+[0 -1 1 0 -160.6875 199.58594] concat
+newpath
+199.586 160.688 M
+199.586 560.688 lineto
+-200.414 560.688 lineto
+-200.414 160.688 lineto
+199.586 160.688 lineto
+closepath
+clip
+0.251 setgray
+newpath
+-27.543 185.897 M
+-28.496 185.897 -29.285 185.655 QUADTO
+-30.074 185.413 -30.652 184.929 QUADTO
+-31.23 184.429 -31.551 183.671 QUADTO
+-31.871 182.913 -31.871 181.882 QUADTO
+-31.871 180.788 -31.527 180.015 QUADTO
+-31.184 179.241 -30.59 178.741 QUADTO
+-30.012 178.257 -29.23 178.03 QUADTO
+-28.449 177.804 -27.621 177.804 QUADTO
+-26.98 177.804 -26.348 177.952 QUADTO
+-25.715 178.101 -25.059 178.413 QUADTO
+-25.059 180.476 lineto
+-25.371 180.476 lineto
+-25.512 180.335 -25.723 180.171 QUADTO
+-25.934 180.007 -26.184 179.866 QUADTO
+-26.434 179.726 -26.762 179.624 QUADTO
+-27.09 179.522 -27.496 179.522 QUADTO
+-28.418 179.522 -28.918 180.163 QUADTO
+-29.418 180.804 -29.418 181.882 QUADTO
+-29.418 183.038 -28.879 183.608 QUADTO
+-28.34 184.179 -27.465 184.179 QUADTO
+-27.012 184.179 -26.668 184.077 QUADTO
+-26.324 183.976 -26.074 183.835 QUADTO
+-25.84 183.679 -25.668 183.53 QUADTO
+-25.496 183.382 -25.371 183.257 QUADTO
+-25.059 183.257 lineto
+-25.059 185.304 lineto
+-25.277 185.397 -25.543 185.515 QUADTO
+-25.809 185.632 -26.09 185.694 QUADTO
+-26.434 185.804 -26.738 185.851 QUADTO
+-27.043 185.897 -27.543 185.897 QUADTO
+closepath
+-16.566 181.866 M
+-16.566 183.757 -17.598 184.843 QUADTO
+-18.629 185.929 -20.52 185.929 QUADTO
+-22.41 185.929 -23.449 184.843 QUADTO
+-24.488 183.757 -24.488 181.866 QUADTO
+-24.488 179.944 -23.449 178.858 QUADTO
+-22.41 177.772 -20.52 177.772 QUADTO
+-18.645 177.772 -17.605 178.866 QUADTO
+-16.566 179.96 -16.566 181.866 QUADTO
+closepath
+-19.02 181.866 M
+-19.02 181.194 -19.129 180.733 QUADTO
+-19.238 180.272 -19.441 180.007 QUADTO
+-19.645 179.726 -19.918 179.608 QUADTO
+-20.191 179.491 -20.52 179.491 QUADTO
+-20.848 179.491 -21.105 179.593 QUADTO
+-21.363 179.694 -21.582 179.976 QUADTO
+-21.785 180.241 -21.91 180.702 QUADTO
+-22.035 181.163 -22.035 181.866 QUADTO
+-22.035 182.569 -21.918 183.007 QUADTO
+-21.801 183.444 -21.613 183.71 QUADTO
+-21.426 183.976 -21.137 184.093 QUADTO
+-20.848 184.21 -20.504 184.21 QUADTO
+-20.223 184.21 -19.926 184.093 QUADTO
+-19.629 183.976 -19.441 183.726 QUADTO
+-19.238 183.429 -19.129 183.015 QUADTO
+-19.02 182.601 -19.02 181.866 QUADTO
+closepath
+-7.77 181.757 M
+-7.77 183.585 -8.699 184.718 QUADTO
+-9.629 185.851 -11.004 185.851 QUADTO
+-11.566 185.851 -11.996 185.718 QUADTO
+-12.426 185.585 -12.895 185.304 QUADTO
+-12.895 188.507 lineto
+-15.285 188.507 lineto
+-15.285 178.022 lineto
+-12.895 178.022 lineto
+-12.895 178.819 lineto
+-12.379 178.366 -11.832 178.085 QUADTO
+-11.285 177.804 -10.566 177.804 QUADTO
+-9.223 177.804 -8.496 178.866 QUADTO
+-7.77 179.929 -7.77 181.757 QUADTO
+closepath
+-10.207 181.804 M
+-10.207 180.679 -10.551 180.171 QUADTO
+-10.895 179.663 -11.629 179.663 QUADTO
+-11.957 179.663 -12.277 179.765 QUADTO
+-12.598 179.866 -12.895 180.069 QUADTO
+-12.895 183.944 lineto
+-12.707 184.022 -12.48 184.054 QUADTO
+-12.254 184.085 -11.941 184.085 QUADTO
+-11.066 184.085 -10.637 183.515 QUADTO
+-10.207 182.944 -10.207 181.804 QUADTO
+closepath
+-4.083 185.694 M
+-6.474 185.694 lineto
+-6.474 178.022 lineto
+-4.083 178.022 lineto
+-4.083 185.694 lineto
+closepath
+-4.021 176.929 M
+-6.552 176.929 lineto
+-6.552 175.054 lineto
+-4.021 175.054 lineto
+-4.021 176.929 lineto
+closepath
+1.673 185.897 M
+-0.499 185.897 -1.655 184.858 QUADTO
+-2.812 183.819 -2.812 181.897 QUADTO
+-2.812 180.022 -1.733 178.897 QUADTO
+-0.655 177.772 1.282 177.772 QUADTO
+3.048 177.772 3.938 178.726 QUADTO
+4.829 179.679 4.829 181.444 QUADTO
+4.829 182.304 lineto
+-0.421 182.304 lineto
+-0.374 182.851 -0.187 183.202 QUADTO
+0.001 183.554 0.313 183.772 QUADTO
+0.626 183.991 1.032 184.077 QUADTO
+1.438 184.163 1.923 184.163 QUADTO
+2.345 184.163 2.751 184.077 QUADTO
+3.157 183.991 3.485 183.835 QUADTO
+3.782 183.71 4.032 183.554 QUADTO
+4.282 183.397 4.438 183.288 QUADTO
+4.688 183.288 lineto
+4.688 185.257 lineto
+4.392 185.382 4.149 185.483 QUADTO
+3.907 185.585 3.485 185.679 QUADTO
+3.095 185.788 2.681 185.843 QUADTO
+2.267 185.897 1.673 185.897 QUADTO
+closepath
+2.47 180.866 M
+2.454 180.116 2.118 179.718 QUADTO
+1.782 179.319 1.095 179.319 QUADTO
+0.407 179.319 0.017 179.733 QUADTO
+-0.374 180.147 -0.421 180.866 QUADTO
+2.47 180.866 lineto
+closepath
+8.392 185.913 M
+7.548 185.913 6.79 185.726 QUADTO
+6.032 185.538 5.548 185.288 QUADTO
+5.548 183.272 lineto
+5.751 183.272 lineto
+5.907 183.397 6.126 183.554 QUADTO
+6.345 183.71 6.735 183.882 QUADTO
+7.079 184.038 7.501 184.155 QUADTO
+7.923 184.272 8.407 184.272 QUADTO
+8.923 184.272 9.306 184.108 QUADTO
+9.688 183.944 9.688 183.616 QUADTO
+9.688 183.335 9.509 183.202 QUADTO
+9.329 183.069 8.813 182.944 QUADTO
+8.548 182.882 8.134 182.804 QUADTO
+7.72 182.726 7.392 182.616 QUADTO
+6.485 182.335 6.032 181.788 QUADTO
+5.579 181.241 5.579 180.335 QUADTO
+5.579 179.835 5.813 179.374 QUADTO
+6.048 178.913 6.517 178.569 QUADTO
+6.97 178.21 7.642 178.007 QUADTO
+8.313 177.804 9.157 177.804 QUADTO
+9.97 177.804 10.649 177.968 QUADTO
+11.329 178.132 11.782 178.351 QUADTO
+11.782 180.288 lineto
+11.595 180.288 lineto
+11.47 180.194 11.204 180.038 QUADTO
+10.938 179.882 10.688 179.757 QUADTO
+10.392 179.616 10.017 179.53 QUADTO
+9.642 179.444 9.251 179.444 QUADTO
+8.735 179.444 8.376 179.624 QUADTO
+8.017 179.804 8.017 180.101 QUADTO
+8.017 180.351 8.196 180.507 QUADTO
+8.376 180.663 8.97 180.804 QUADTO
+9.267 180.882 9.665 180.952 QUADTO
+10.063 181.022 10.438 181.147 QUADTO
+11.267 181.413 11.696 181.929 QUADTO
+12.126 182.444 12.126 183.288 QUADTO
+12.126 183.835 11.868 184.327 QUADTO
+11.61 184.819 11.157 185.147 QUADTO
+10.657 185.507 9.993 185.71 QUADTO
+9.329 185.913 8.392 185.913 QUADTO
+closepath
+19.761 185.694 M
+17.37 185.694 lineto
+17.37 178.022 lineto
+19.761 178.022 lineto
+19.761 185.694 lineto
+closepath
+19.823 176.929 M
+17.292 176.929 lineto
+17.292 175.054 lineto
+19.823 175.054 lineto
+19.823 176.929 lineto
+closepath
+28.782 185.694 M
+26.376 185.694 lineto
+26.376 181.882 lineto
+26.376 181.429 26.337 180.96 QUADTO
+26.298 180.491 26.204 180.272 QUADTO
+26.079 180.022 25.845 179.905 QUADTO
+25.61 179.788 25.22 179.788 QUADTO
+24.923 179.788 24.626 179.897 QUADTO
+24.329 180.007 23.985 180.257 QUADTO
+23.985 185.694 lineto
+21.595 185.694 lineto
+21.595 178.022 lineto
+23.985 178.022 lineto
+23.985 178.866 lineto
+24.563 178.366 25.126 178.085 QUADTO
+25.688 177.804 26.36 177.804 QUADTO
+27.532 177.804 28.157 178.546 QUADTO
+28.782 179.288 28.782 180.694 QUADTO
+28.782 185.694 lineto
+closepath
+39.564 176.866 M
+39.377 176.866 lineto
+39.236 176.819 38.947 176.757 QUADTO
+38.658 176.694 38.393 176.694 QUADTO
+37.674 176.694 37.408 176.96 QUADTO
+37.143 177.226 37.143 177.96 QUADTO
+37.143 178.022 lineto
+39.049 178.022 lineto
+39.049 179.679 lineto
+37.236 179.679 lineto
+37.236 185.694 lineto
+34.83 185.694 lineto
+34.83 179.679 lineto
+33.877 179.679 lineto
+33.877 178.022 lineto
+34.83 178.022 lineto
+34.83 177.804 lineto
+34.83 176.397 35.572 175.694 QUADTO
+36.314 174.991 37.814 174.991 QUADTO
+38.33 174.991 38.783 175.03 QUADTO
+39.236 175.069 39.564 175.132 QUADTO
+39.564 176.866 lineto
+closepath
+42.401 185.694 M
+40.011 185.694 lineto
+40.011 175.054 lineto
+42.401 175.054 lineto
+42.401 185.694 lineto
+closepath
+46.626 185.694 M
+44.235 185.694 lineto
+44.235 178.022 lineto
+46.626 178.022 lineto
+46.626 185.694 lineto
+closepath
+46.688 176.929 M
+44.157 176.929 lineto
+44.157 175.054 lineto
+46.688 175.054 lineto
+46.688 176.929 lineto
+closepath
+53.038 183.272 M
+53.038 179.788 lineto
+52.866 179.71 52.608 179.655 QUADTO
+52.351 179.601 52.085 179.601 QUADTO
+51.226 179.601 50.788 180.155 QUADTO
+50.351 180.71 50.351 181.71 QUADTO
+50.351 182.21 50.421 182.554 QUADTO
+50.491 182.897 50.663 183.179 QUADTO
+50.835 183.429 51.108 183.562 QUADTO
+51.382 183.694 51.819 183.694 QUADTO
+52.132 183.694 52.444 183.585 QUADTO
+52.757 183.476 53.038 183.272 QUADTO
+closepath
+55.429 184.819 M
+55.429 185.882 55.124 186.624 QUADTO
+54.819 187.366 54.288 187.788 QUADTO
+53.757 188.21 53.007 188.397 QUADTO
+52.257 188.585 51.351 188.585 QUADTO
+50.585 188.585 49.897 188.483 QUADTO
+49.21 188.382 48.71 188.257 QUADTO
+48.71 186.335 lineto
+48.991 186.335 lineto
+49.163 186.413 49.405 186.491 QUADTO
+49.647 186.569 49.897 186.632 QUADTO
+50.194 186.71 50.476 186.757 QUADTO
+50.757 186.804 51.038 186.804 QUADTO
+51.647 186.804 52.054 186.679 QUADTO
+52.46 186.554 52.679 186.319 QUADTO
+52.882 186.085 52.96 185.757 QUADTO
+53.038 185.429 53.038 184.944 QUADTO
+53.038 184.804 lineto
+52.632 185.147 52.108 185.366 QUADTO
+51.585 185.585 51.022 185.585 QUADTO
+49.522 185.585 48.718 184.616 QUADTO
+47.913 183.647 47.913 181.663 QUADTO
+47.913 180.757 48.163 180.038 QUADTO
+48.413 179.319 48.851 178.819 QUADTO
+49.272 178.335 49.874 178.069 QUADTO
+50.476 177.804 51.132 177.804 QUADTO
+51.71 177.804 52.179 177.952 QUADTO
+52.647 178.101 53.022 178.366 QUADTO
+53.116 178.022 lineto
+55.429 178.022 lineto
+55.429 184.819 lineto
+closepath
+64.459 185.694 M
+62.053 185.694 lineto
+62.053 181.882 lineto
+62.053 181.429 62.014 180.96 QUADTO
+61.975 180.491 61.881 180.272 QUADTO
+61.756 180.022 61.521 179.905 QUADTO
+61.287 179.788 60.896 179.788 QUADTO
+60.6 179.788 60.303 179.897 QUADTO
+60.006 180.007 59.662 180.257 QUADTO
+59.662 185.694 lineto
+57.271 185.694 lineto
+57.271 175.054 lineto
+59.662 175.054 lineto
+59.662 178.866 lineto
+60.24 178.366 60.803 178.085 QUADTO
+61.365 177.804 62.037 177.804 QUADTO
+63.209 177.804 63.834 178.546 QUADTO
+64.459 179.288 64.459 180.694 QUADTO
+64.459 185.694 lineto
+closepath
+69.171 185.851 M
+67.702 185.851 67.038 185.249 QUADTO
+66.374 184.647 66.374 183.272 QUADTO
+66.374 179.679 lineto
+65.452 179.679 lineto
+65.452 178.022 lineto
+66.374 178.022 lineto
+66.374 175.819 lineto
+68.765 175.819 lineto
+68.765 178.022 lineto
+71.062 178.022 lineto
+71.062 179.679 lineto
+68.765 179.679 lineto
+68.765 182.413 lineto
+68.765 182.804 68.772 183.108 QUADTO
+68.78 183.413 68.874 183.647 QUADTO
+68.983 183.882 69.226 184.022 QUADTO
+69.468 184.163 69.921 184.163 QUADTO
+70.124 184.163 70.429 184.085 QUADTO
+70.733 184.007 70.858 183.944 QUADTO
+71.062 183.944 lineto
+71.062 185.632 lineto
+70.671 185.726 70.233 185.788 QUADTO
+69.796 185.851 69.171 185.851 QUADTO
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+93.625 34.141 M
+93.625 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+127.618 34.141 M
+127.618 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+161.61 34.141 M
+161.61 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+195.603 34.141 M
+195.603 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+229.595 34.141 M
+229.595 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+263.588 34.141 M
+263.588 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+297.58 34.141 M
+297.58 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+331.573 34.141 M
+331.573 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+365.565 34.141 M
+365.565 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 326.133 M
+388 326.133 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 299.648 M
+388 299.648 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 273.164 M
+388 273.164 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 246.679 M
+388 246.679 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 220.195 M
+388 220.195 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 193.71 M
+388 193.71 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 167.225 M
+388 167.225 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 140.741 M
+388 140.741 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 114.256 M
+388 114.256 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 87.772 M
+388 87.772 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 61.287 M
+388 61.287 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 setgray
+[2 2] 0 setdash
+2 setlinejoin
+2 setlinejoin
+0.5 setlinewidth
+newpath
+59.633 34.803 M
+388 34.803 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+59.633 74.53 M
+73.23 74.53 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+73.23 74.53 M
+86.827 74.53 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+86.827 74.53 M
+100.424 74.53 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+100.424 74.53 M
+114.021 74.53 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+114.021 74.53 M
+127.618 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+127.618 206.952 M
+141.215 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+141.215 206.952 M
+154.812 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+154.812 206.952 M
+168.409 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+168.409 206.952 M
+182.006 220.195 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.006 220.195 M
+195.603 299.648 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+195.603 299.648 M
+209.2 299.648 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+209.2 299.648 M
+222.797 299.648 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+222.797 299.648 M
+236.394 299.648 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+236.394 299.648 M
+249.991 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+59.633 71.881 M
+73.23 71.881 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+73.23 71.881 M
+86.827 71.881 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+86.827 71.881 M
+100.424 71.881 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+100.424 71.881 M
+114.021 71.881 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+114.021 71.881 M
+127.618 167.225 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+127.618 167.225 M
+141.215 167.225 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+141.215 167.225 M
+154.812 167.225 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+154.812 167.225 M
+168.409 167.225 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+168.409 167.225 M
+182.006 188.413 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.006 188.413 M
+195.603 273.164 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+195.603 273.164 M
+209.2 273.164 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+209.2 273.164 M
+222.797 273.164 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+222.797 273.164 M
+236.394 273.164 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+236.394 273.164 M
+249.991 304.945 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+249.991 304.945 M
+263.588 315.539 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+263.588 315.539 M
+277.185 315.539 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+277.185 315.539 M
+290.782 315.539 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+290.782 315.539 M
+304.379 315.539 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+59.633 48.045 M
+73.23 48.045 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+73.23 48.045 M
+86.827 48.045 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+86.827 48.045 M
+100.424 48.045 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+100.424 48.045 M
+114.021 48.045 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+114.021 48.045 M
+127.618 101.014 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+127.618 101.014 M
+141.215 101.014 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+141.215 101.014 M
+154.812 101.014 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+154.812 101.014 M
+168.409 101.014 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+168.409 101.014 M
+182.006 101.014 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+182.006 101.014 M
+195.603 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+195.603 206.952 M
+209.2 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+209.2 206.952 M
+222.797 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+222.797 206.952 M
+236.394 206.952 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+236.394 206.952 M
+249.991 220.195 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+249.991 220.195 M
+263.588 286.406 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+263.588 286.406 M
+277.185 286.406 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+277.185 286.406 M
+290.782 286.406 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+290.782 286.406 M
+304.379 286.406 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+304.379 286.406 M
+317.976 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+317.976 312.891 M
+331.573 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+331.573 312.891 M
+345.169 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+345.169 312.891 M
+358.766 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+2 setlinejoin
+2 setlinejoin
+newpath
+358.766 312.891 M
+372.363 312.891 lineto
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+59.633 71.53 M
+62.633 77.53 lineto
+56.633 77.53 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+59.633 71.53 M
+62.633 77.53 lineto
+56.633 77.53 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+73.23 71.53 M
+76.23 77.53 lineto
+70.23 77.53 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+73.23 71.53 M
+76.23 77.53 lineto
+70.23 77.53 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+86.827 71.53 M
+89.827 77.53 lineto
+83.827 77.53 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+86.827 71.53 M
+89.827 77.53 lineto
+83.827 77.53 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+100.424 71.53 M
+103.424 77.53 lineto
+97.424 77.53 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+100.424 71.53 M
+103.424 77.53 lineto
+97.424 77.53 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+114.021 71.53 M
+117.021 77.53 lineto
+111.021 77.53 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+114.021 71.53 M
+117.021 77.53 lineto
+111.021 77.53 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+127.618 203.952 M
+130.618 209.952 lineto
+124.618 209.952 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+127.618 203.952 M
+130.618 209.952 lineto
+124.618 209.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+141.215 203.952 M
+144.215 209.952 lineto
+138.215 209.952 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+141.215 203.952 M
+144.215 209.952 lineto
+138.215 209.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+154.812 203.952 M
+157.812 209.952 lineto
+151.812 209.952 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+154.812 203.952 M
+157.812 209.952 lineto
+151.812 209.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+168.409 203.952 M
+171.409 209.952 lineto
+165.409 209.952 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+168.409 203.952 M
+171.409 209.952 lineto
+165.409 209.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+182.006 217.195 M
+185.006 223.195 lineto
+179.006 223.195 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+182.006 217.195 M
+185.006 223.195 lineto
+179.006 223.195 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+195.603 296.648 M
+198.603 302.648 lineto
+192.603 302.648 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+195.603 296.648 M
+198.603 302.648 lineto
+192.603 302.648 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+209.2 296.648 M
+212.2 302.648 lineto
+206.2 302.648 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+209.2 296.648 M
+212.2 302.648 lineto
+206.2 302.648 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+222.797 296.648 M
+225.797 302.648 lineto
+219.797 302.648 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+222.797 296.648 M
+225.797 302.648 lineto
+219.797 302.648 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+236.394 296.648 M
+239.394 302.648 lineto
+233.394 302.648 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+236.394 296.648 M
+239.394 302.648 lineto
+233.394 302.648 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+newpath
+249.991 309.891 M
+252.991 315.891 lineto
+246.991 315.891 lineto
+closepath
+eofill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 1 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+249.991 309.891 M
+252.991 315.891 lineto
+246.991 315.891 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+62.633 71.881 M
+62.633 73.538 61.29 74.881 59.633 74.881 curveto
+57.976 74.881 56.633 73.538 56.633 71.881 curveto
+56.633 70.224 57.976 68.881 59.633 68.881 curveto
+61.29 68.881 62.633 70.224 62.633 71.881 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+62.633 71.881 M
+62.633 73.538 61.29 74.881 59.633 74.881 curveto
+57.976 74.881 56.633 73.538 56.633 71.881 curveto
+56.633 70.224 57.976 68.881 59.633 68.881 curveto
+61.29 68.881 62.633 70.224 62.633 71.881 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+76.23 71.881 M
+76.23 73.538 74.887 74.881 73.23 74.881 curveto
+71.573 74.881 70.23 73.538 70.23 71.881 curveto
+70.23 70.224 71.573 68.881 73.23 68.881 curveto
+74.887 68.881 76.23 70.224 76.23 71.881 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+76.23 71.881 M
+76.23 73.538 74.887 74.881 73.23 74.881 curveto
+71.573 74.881 70.23 73.538 70.23 71.881 curveto
+70.23 70.224 71.573 68.881 73.23 68.881 curveto
+74.887 68.881 76.23 70.224 76.23 71.881 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+89.827 71.881 M
+89.827 73.538 88.484 74.881 86.827 74.881 curveto
+85.17 74.881 83.827 73.538 83.827 71.881 curveto
+83.827 70.224 85.17 68.881 86.827 68.881 curveto
+88.484 68.881 89.827 70.224 89.827 71.881 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+89.827 71.881 M
+89.827 73.538 88.484 74.881 86.827 74.881 curveto
+85.17 74.881 83.827 73.538 83.827 71.881 curveto
+83.827 70.224 85.17 68.881 86.827 68.881 curveto
+88.484 68.881 89.827 70.224 89.827 71.881 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+103.424 71.881 M
+103.424 73.538 102.081 74.881 100.424 74.881 curveto
+98.767 74.881 97.424 73.538 97.424 71.881 curveto
+97.424 70.224 98.767 68.881 100.424 68.881 curveto
+102.081 68.881 103.424 70.224 103.424 71.881 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+103.424 71.881 M
+103.424 73.538 102.081 74.881 100.424 74.881 curveto
+98.767 74.881 97.424 73.538 97.424 71.881 curveto
+97.424 70.224 98.767 68.881 100.424 68.881 curveto
+102.081 68.881 103.424 70.224 103.424 71.881 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+117.021 71.881 M
+117.021 73.538 115.678 74.881 114.021 74.881 curveto
+112.364 74.881 111.021 73.538 111.021 71.881 curveto
+111.021 70.224 112.364 68.881 114.021 68.881 curveto
+115.678 68.881 117.021 70.224 117.021 71.881 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+117.021 71.881 M
+117.021 73.538 115.678 74.881 114.021 74.881 curveto
+112.364 74.881 111.021 73.538 111.021 71.881 curveto
+111.021 70.224 112.364 68.881 114.021 68.881 curveto
+115.678 68.881 117.021 70.224 117.021 71.881 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+130.618 167.225 M
+130.618 168.882 129.275 170.225 127.618 170.225 curveto
+125.961 170.225 124.618 168.882 124.618 167.225 curveto
+124.618 165.569 125.961 164.225 127.618 164.225 curveto
+129.275 164.225 130.618 165.569 130.618 167.225 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+130.618 167.225 M
+130.618 168.882 129.275 170.225 127.618 170.225 curveto
+125.961 170.225 124.618 168.882 124.618 167.225 curveto
+124.618 165.569 125.961 164.225 127.618 164.225 curveto
+129.275 164.225 130.618 165.569 130.618 167.225 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+144.215 167.225 M
+144.215 168.882 142.872 170.225 141.215 170.225 curveto
+139.558 170.225 138.215 168.882 138.215 167.225 curveto
+138.215 165.569 139.558 164.225 141.215 164.225 curveto
+142.872 164.225 144.215 165.569 144.215 167.225 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+144.215 167.225 M
+144.215 168.882 142.872 170.225 141.215 170.225 curveto
+139.558 170.225 138.215 168.882 138.215 167.225 curveto
+138.215 165.569 139.558 164.225 141.215 164.225 curveto
+142.872 164.225 144.215 165.569 144.215 167.225 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+157.812 167.225 M
+157.812 168.882 156.469 170.225 154.812 170.225 curveto
+153.155 170.225 151.812 168.882 151.812 167.225 curveto
+151.812 165.569 153.155 164.225 154.812 164.225 curveto
+156.469 164.225 157.812 165.569 157.812 167.225 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+157.812 167.225 M
+157.812 168.882 156.469 170.225 154.812 170.225 curveto
+153.155 170.225 151.812 168.882 151.812 167.225 curveto
+151.812 165.569 153.155 164.225 154.812 164.225 curveto
+156.469 164.225 157.812 165.569 157.812 167.225 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+171.409 167.225 M
+171.409 168.882 170.066 170.225 168.409 170.225 curveto
+166.752 170.225 165.409 168.882 165.409 167.225 curveto
+165.409 165.569 166.752 164.225 168.409 164.225 curveto
+170.066 164.225 171.409 165.569 171.409 167.225 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+171.409 167.225 M
+171.409 168.882 170.066 170.225 168.409 170.225 curveto
+166.752 170.225 165.409 168.882 165.409 167.225 curveto
+165.409 165.569 166.752 164.225 168.409 164.225 curveto
+170.066 164.225 171.409 165.569 171.409 167.225 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+185.006 188.413 M
+185.006 190.07 183.663 191.413 182.006 191.413 curveto
+180.349 191.413 179.006 190.07 179.006 188.413 curveto
+179.006 186.756 180.349 185.413 182.006 185.413 curveto
+183.663 185.413 185.006 186.756 185.006 188.413 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+185.006 188.413 M
+185.006 190.07 183.663 191.413 182.006 191.413 curveto
+180.349 191.413 179.006 190.07 179.006 188.413 curveto
+179.006 186.756 180.349 185.413 182.006 185.413 curveto
+183.663 185.413 185.006 186.756 185.006 188.413 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+198.603 273.164 M
+198.603 274.821 197.26 276.164 195.603 276.164 curveto
+193.946 276.164 192.603 274.821 192.603 273.164 curveto
+192.603 271.507 193.946 270.164 195.603 270.164 curveto
+197.26 270.164 198.603 271.507 198.603 273.164 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+198.603 273.164 M
+198.603 274.821 197.26 276.164 195.603 276.164 curveto
+193.946 276.164 192.603 274.821 192.603 273.164 curveto
+192.603 271.507 193.946 270.164 195.603 270.164 curveto
+197.26 270.164 198.603 271.507 198.603 273.164 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+212.2 273.164 M
+212.2 274.821 210.857 276.164 209.2 276.164 curveto
+207.543 276.164 206.2 274.821 206.2 273.164 curveto
+206.2 271.507 207.543 270.164 209.2 270.164 curveto
+210.857 270.164 212.2 271.507 212.2 273.164 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+212.2 273.164 M
+212.2 274.821 210.857 276.164 209.2 276.164 curveto
+207.543 276.164 206.2 274.821 206.2 273.164 curveto
+206.2 271.507 207.543 270.164 209.2 270.164 curveto
+210.857 270.164 212.2 271.507 212.2 273.164 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+225.797 273.164 M
+225.797 274.821 224.453 276.164 222.797 276.164 curveto
+221.14 276.164 219.797 274.821 219.797 273.164 curveto
+219.797 271.507 221.14 270.164 222.797 270.164 curveto
+224.453 270.164 225.797 271.507 225.797 273.164 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+225.797 273.164 M
+225.797 274.821 224.453 276.164 222.797 276.164 curveto
+221.14 276.164 219.797 274.821 219.797 273.164 curveto
+219.797 271.507 221.14 270.164 222.797 270.164 curveto
+224.453 270.164 225.797 271.507 225.797 273.164 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+239.394 273.164 M
+239.394 274.821 238.05 276.164 236.394 276.164 curveto
+234.737 276.164 233.394 274.821 233.394 273.164 curveto
+233.394 271.507 234.737 270.164 236.394 270.164 curveto
+238.05 270.164 239.394 271.507 239.394 273.164 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+239.394 273.164 M
+239.394 274.821 238.05 276.164 236.394 276.164 curveto
+234.737 276.164 233.394 274.821 233.394 273.164 curveto
+233.394 271.507 234.737 270.164 236.394 270.164 curveto
+238.05 270.164 239.394 271.507 239.394 273.164 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+252.991 304.945 M
+252.991 306.602 251.647 307.945 249.991 307.945 curveto
+248.334 307.945 246.991 306.602 246.991 304.945 curveto
+246.991 303.288 248.334 301.945 249.991 301.945 curveto
+251.647 301.945 252.991 303.288 252.991 304.945 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+252.991 304.945 M
+252.991 306.602 251.647 307.945 249.991 307.945 curveto
+248.334 307.945 246.991 306.602 246.991 304.945 curveto
+246.991 303.288 248.334 301.945 249.991 301.945 curveto
+251.647 301.945 252.991 303.288 252.991 304.945 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+266.588 315.539 M
+266.588 317.196 265.244 318.539 263.588 318.539 curveto
+261.931 318.539 260.588 317.196 260.588 315.539 curveto
+260.588 313.882 261.931 312.539 263.588 312.539 curveto
+265.244 312.539 266.588 313.882 266.588 315.539 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+266.588 315.539 M
+266.588 317.196 265.244 318.539 263.588 318.539 curveto
+261.931 318.539 260.588 317.196 260.588 315.539 curveto
+260.588 313.882 261.931 312.539 263.588 312.539 curveto
+265.244 312.539 266.588 313.882 266.588 315.539 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+280.185 315.539 M
+280.185 317.196 278.841 318.539 277.185 318.539 curveto
+275.528 318.539 274.185 317.196 274.185 315.539 curveto
+274.185 313.882 275.528 312.539 277.185 312.539 curveto
+278.841 312.539 280.185 313.882 280.185 315.539 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+280.185 315.539 M
+280.185 317.196 278.841 318.539 277.185 318.539 curveto
+275.528 318.539 274.185 317.196 274.185 315.539 curveto
+274.185 313.882 275.528 312.539 277.185 312.539 curveto
+278.841 312.539 280.185 313.882 280.185 315.539 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+293.782 315.539 M
+293.782 317.196 292.438 318.539 290.782 318.539 curveto
+289.125 318.539 287.782 317.196 287.782 315.539 curveto
+287.782 313.882 289.125 312.539 290.782 312.539 curveto
+292.438 312.539 293.782 313.882 293.782 315.539 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+293.782 315.539 M
+293.782 317.196 292.438 318.539 290.782 318.539 curveto
+289.125 318.539 287.782 317.196 287.782 315.539 curveto
+287.782 313.882 289.125 312.539 290.782 312.539 curveto
+292.438 312.539 293.782 313.882 293.782 315.539 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+newpath
+307.379 315.539 M
+307.379 317.196 306.035 318.539 304.379 318.539 curveto
+302.722 318.539 301.379 317.196 301.379 315.539 curveto
+301.379 313.882 302.722 312.539 304.379 312.539 curveto
+306.035 312.539 307.379 313.882 307.379 315.539 curveto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+0.333 0.333 1 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+307.379 315.539 M
+307.379 317.196 306.035 318.539 304.379 318.539 curveto
+302.722 318.539 301.379 317.196 301.379 315.539 curveto
+301.379 313.882 302.722 312.539 304.379 312.539 curveto
+306.035 312.539 307.379 313.882 307.379 315.539 curveto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+56.633 45.045 M
+62.633 45.045 lineto
+62.633 51.045 lineto
+56.633 51.045 lineto
+56.633 45.045 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+56.633 45.045 M
+62.633 45.045 lineto
+62.633 51.045 lineto
+56.633 51.045 lineto
+56.633 45.045 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+70.23 45.045 M
+76.23 45.045 lineto
+76.23 51.045 lineto
+70.23 51.045 lineto
+70.23 45.045 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+70.23 45.045 M
+76.23 45.045 lineto
+76.23 51.045 lineto
+70.23 51.045 lineto
+70.23 45.045 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+83.827 45.045 M
+89.827 45.045 lineto
+89.827 51.045 lineto
+83.827 51.045 lineto
+83.827 45.045 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+83.827 45.045 M
+89.827 45.045 lineto
+89.827 51.045 lineto
+83.827 51.045 lineto
+83.827 45.045 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+97.424 45.045 M
+103.424 45.045 lineto
+103.424 51.045 lineto
+97.424 51.045 lineto
+97.424 45.045 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+97.424 45.045 M
+103.424 45.045 lineto
+103.424 51.045 lineto
+97.424 51.045 lineto
+97.424 45.045 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+111.021 45.045 M
+117.021 45.045 lineto
+117.021 51.045 lineto
+111.021 51.045 lineto
+111.021 45.045 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+111.021 45.045 M
+117.021 45.045 lineto
+117.021 51.045 lineto
+111.021 51.045 lineto
+111.021 45.045 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+124.618 98.014 M
+130.618 98.014 lineto
+130.618 104.014 lineto
+124.618 104.014 lineto
+124.618 98.014 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+124.618 98.014 M
+130.618 98.014 lineto
+130.618 104.014 lineto
+124.618 104.014 lineto
+124.618 98.014 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+138.215 98.014 M
+144.215 98.014 lineto
+144.215 104.014 lineto
+138.215 104.014 lineto
+138.215 98.014 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+138.215 98.014 M
+144.215 98.014 lineto
+144.215 104.014 lineto
+138.215 104.014 lineto
+138.215 98.014 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+151.812 98.014 M
+157.812 98.014 lineto
+157.812 104.014 lineto
+151.812 104.014 lineto
+151.812 98.014 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+151.812 98.014 M
+157.812 98.014 lineto
+157.812 104.014 lineto
+151.812 104.014 lineto
+151.812 98.014 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+165.409 98.014 M
+171.409 98.014 lineto
+171.409 104.014 lineto
+165.409 104.014 lineto
+165.409 98.014 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+165.409 98.014 M
+171.409 98.014 lineto
+171.409 104.014 lineto
+165.409 104.014 lineto
+165.409 98.014 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+179.006 98.014 M
+185.006 98.014 lineto
+185.006 104.014 lineto
+179.006 104.014 lineto
+179.006 98.014 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+179.006 98.014 M
+185.006 98.014 lineto
+185.006 104.014 lineto
+179.006 104.014 lineto
+179.006 98.014 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+192.603 203.952 M
+198.603 203.952 lineto
+198.603 209.952 lineto
+192.603 209.952 lineto
+192.603 203.952 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+192.603 203.952 M
+198.603 203.952 lineto
+198.603 209.952 lineto
+192.603 209.952 lineto
+192.603 203.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+206.2 203.952 M
+212.2 203.952 lineto
+212.2 209.952 lineto
+206.2 209.952 lineto
+206.2 203.952 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+206.2 203.952 M
+212.2 203.952 lineto
+212.2 209.952 lineto
+206.2 209.952 lineto
+206.2 203.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+219.797 203.952 M
+225.797 203.952 lineto
+225.797 209.952 lineto
+219.797 209.952 lineto
+219.797 203.952 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+219.797 203.952 M
+225.797 203.952 lineto
+225.797 209.952 lineto
+219.797 209.952 lineto
+219.797 203.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+233.394 203.952 M
+239.394 203.952 lineto
+239.394 209.952 lineto
+233.394 209.952 lineto
+233.394 203.952 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+233.394 203.952 M
+239.394 203.952 lineto
+239.394 209.952 lineto
+233.394 209.952 lineto
+233.394 203.952 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+246.991 217.195 M
+252.991 217.195 lineto
+252.991 223.195 lineto
+246.991 223.195 lineto
+246.991 217.195 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+246.991 217.195 M
+252.991 217.195 lineto
+252.991 223.195 lineto
+246.991 223.195 lineto
+246.991 217.195 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+260.588 283.406 M
+266.588 283.406 lineto
+266.588 289.406 lineto
+260.588 289.406 lineto
+260.588 283.406 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+260.588 283.406 M
+266.588 283.406 lineto
+266.588 289.406 lineto
+260.588 289.406 lineto
+260.588 283.406 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+274.185 283.406 M
+280.185 283.406 lineto
+280.185 289.406 lineto
+274.185 289.406 lineto
+274.185 283.406 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+274.185 283.406 M
+280.185 283.406 lineto
+280.185 289.406 lineto
+274.185 289.406 lineto
+274.185 283.406 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+287.782 283.406 M
+293.782 283.406 lineto
+293.782 289.406 lineto
+287.782 289.406 lineto
+287.782 283.406 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+287.782 283.406 M
+293.782 283.406 lineto
+293.782 289.406 lineto
+287.782 289.406 lineto
+287.782 283.406 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+301.379 283.406 M
+307.379 283.406 lineto
+307.379 289.406 lineto
+301.379 289.406 lineto
+301.379 283.406 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+301.379 283.406 M
+307.379 283.406 lineto
+307.379 289.406 lineto
+301.379 289.406 lineto
+301.379 283.406 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+314.976 309.891 M
+320.976 309.891 lineto
+320.976 315.891 lineto
+314.976 315.891 lineto
+314.976 309.891 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+314.976 309.891 M
+320.976 309.891 lineto
+320.976 315.891 lineto
+314.976 315.891 lineto
+314.976 309.891 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+328.573 309.891 M
+334.573 309.891 lineto
+334.573 315.891 lineto
+328.573 315.891 lineto
+328.573 309.891 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+328.573 309.891 M
+334.573 309.891 lineto
+334.573 315.891 lineto
+328.573 315.891 lineto
+328.573 309.891 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+342.169 309.891 M
+348.169 309.891 lineto
+348.169 315.891 lineto
+342.169 315.891 lineto
+342.169 309.891 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+342.169 309.891 M
+348.169 309.891 lineto
+348.169 315.891 lineto
+342.169 315.891 lineto
+342.169 309.891 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+355.766 309.891 M
+361.766 309.891 lineto
+361.766 315.891 lineto
+355.766 315.891 lineto
+355.766 309.891 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+355.766 309.891 M
+361.766 309.891 lineto
+361.766 315.891 lineto
+355.766 315.891 lineto
+355.766 309.891 lineto
+closepath
+stroke
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+newpath
+369.363 309.891 M
+375.363 309.891 lineto
+375.363 315.891 lineto
+369.363 315.891 lineto
+369.363 309.891 lineto
+closepath
+fill
+grestore
+gsave
+newpath
+59.633 34.141 M
+59.633 326.133 lineto
+388 326.133 lineto
+388 34.141 lineto
+closepath
+clip
+1 0.333 0.333 setrgbcolor
+2 setlinecap
+10.0 setmiterlimit
+newpath
+369.363 309.891 M
+375.363 309.891 lineto
+375.363 315.891 lineto
+369.363 315.891 lineto
+369.363 309.891 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
+59.633 34.141 M
+388 34.141 lineto
+388 326.133 lineto
+59.633 326.133 lineto
+59.633 34.141 lineto
+closepath
+stroke
+grestore
+%%Trailer
+%%Pages: 1
+%%EOF
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-243-g2275e6c
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 2275e6c4c8407467eab6dbc06c543ed470fbb68d (commit)
via 27f2dd994247ddddf3c87b944b7d41e548027075 (commit)
from 5242fac6b1db765e7f982bda316bb6e2fb3bd53c (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 2275e6c4c8407467eab6dbc06c543ed470fbb68d
Author: Samuel Lang <slang(a)bblogin.mcs.anl.gov>
Date: Fri Dec 4 16:07:04 2009 -0600
conflict with include parameter
commit 27f2dd994247ddddf3c87b944b7d41e548027075
Author: Samuel Lang <slang(a)bblogin.mcs.anl.gov>
Date: Fri Dec 4 16:06:31 2009 -0600
add mtl package.
The mtl (monad transformer library) is needed by happy.
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/include/gs-hash.h | 4 ++--
code/src/gsl/maint/hs/mtl-1.1.0.2.tar.gz | Bin 0 -> 18901 bytes
code/src/gsl/maint/hs/setup-hs-local | 8 ++++++++
3 files changed, 10 insertions(+), 2 deletions(-)
create mode 100644 code/src/gsl/maint/hs/mtl-1.1.0.2.tar.gz
mode change 100644 => 100755 code/src/gsl/maint/hs/setup-hs-local
Diff of changes:
diff --git a/code/src/gsl/include/gs-hash.h b/code/src/gsl/include/gs-hash.h
index b06c486..2621101 100644
--- a/code/src/gsl/include/gs-hash.h
+++ b/code/src/gsl/include/gs-hash.h
@@ -102,7 +102,7 @@ static inline void gs_hash_finalize(
static inline void gs_hash_add(
struct gs_hash_table *table,
void *key,
- struct gs_hash_link *link)
+ struct gs_hash_link *llink)
{
int hindex = 0;
@@ -111,7 +111,7 @@ static inline void gs_hash_add(
/* add to the tail of the linked list at that offset */
gs_mutex_lock(&table->lock);
- gs_list_add_tail(link, &(table->array[hindex]));
+ gs_list_add_tail(llink, &(table->array[hindex]));
gs_mutex_unlock(&table->lock);
return;
diff --git a/code/src/gsl/maint/hs/mtl-1.1.0.2.tar.gz b/code/src/gsl/maint/hs/mtl-1.1.0.2.tar.gz
new file mode 100644
index 0000000..d9d9e6d
Binary files /dev/null and b/code/src/gsl/maint/hs/mtl-1.1.0.2.tar.gz differ
diff --git a/code/src/gsl/maint/hs/setup-hs-local b/code/src/gsl/maint/hs/setup-hs-local
old mode 100644
new mode 100755
index 70afa5a..fbc2642
--- a/code/src/gsl/maint/hs/setup-hs-local
+++ b/code/src/gsl/maint/hs/setup-hs-local
@@ -2,6 +2,14 @@
OLDPWD=$PWD
+#wget http://hackage.haskell.org/packages/archive/mtl/1.1.0.2/mtl-1.1.0.2.tar.gz
+tar xvfz mtl-1.1.0.2.tar.gz
+cd mtl-1.1.0.2
+runhaskell Setup configure --prefix=${OLDPWD}/GHC --user
+runhaskell Setup build
+runhaskell Setup install --user
+
+cd ${OLDPWD}
#wget http://hackage.haskell.org/packages/archive/happy/1.18.4/happy-1.18.4.tar.gz
tar xvfz happy-1.18.4.tar.gz
cd happy-1.18.4
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-241-g5242fac
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 5242fac6b1db765e7f982bda316bb6e2fb3bd53c (commit)
via a01a2aa01e28419da5244a911c3faf1097296130 (commit)
via 7f34dba92572429460a8d796f429f7b10c58cf70 (commit)
via 933df7f7a1583a443bd403ee3fc73a2bb436f1e6 (commit)
from 662b0d4013e62c265708b31e5338282d4a30b9fb (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 5242fac6b1db765e7f982bda316bb6e2fb3bd53c
Author: Samuel Lang <slang(a)login1.mcs.anl.gov>
Date: Fri Dec 4 15:39:30 2009 -0600
update script to use local alex/happy installs.
commit a01a2aa01e28419da5244a911c3faf1097296130
Author: Samuel Lang <slang(a)login1.mcs.anl.gov>
Date: Fri Dec 4 15:38:35 2009 -0600
added alex/happy tarballs.
commit 7f34dba92572429460a8d796f429f7b10c58cf70
Author: Samuel Lang <slang(a)login1.mcs.anl.gov>
Date: Fri Dec 4 15:36:47 2009 -0600
updates for haskell/lang-c build
Created a separate directory: maint/hs for haskell related build scripts and tarballs. Added a script to allow building haskell dependencies without requiring root. Now we only required ghc to be pre-installed (or installed as root).
commit 933df7f7a1583a443bd403ee3fc73a2bb436f1e6
Author: Samuel Lang <slang(a)login1.mcs.anl.gov>
Date: Thu Dec 3 17:23:24 2009 -0600
fix for autoconf issue
autoconf comes in two flavors, versions >=2.13, and versions >=2.50. Both flavors of autoconf are installed on some systems. Our configure.in uses 2.5x supported syntax, which won't work with an autoconf-2.13 binary. The AC_PREREQ macro ensures the right version of autoconf gets used.
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/configure.in | 1 +
code/src/gsl/maint/hs/alex-2.3.1.tar.gz | Bin 0 -> 78951 bytes
code/src/gsl/maint/hs/happy-1.18.4.tar.gz | Bin 0 -> 157585 bytes
.../src/gsl/{ => maint/hs}/language-c-0.3.3.tar.gz | Bin 103493 -> 103493 bytes
code/src/gsl/{ => maint/hs}/language-c.patch | 0
code/src/gsl/{ => maint/hs}/setup-hs-debian | 0
code/src/gsl/maint/hs/setup-hs-local | 18 ++++++++++++++++++
code/src/gsl/{ => maint/hs}/setup-langc | 7 ++++++-
8 files changed, 25 insertions(+), 1 deletions(-)
create mode 100644 code/src/gsl/maint/hs/alex-2.3.1.tar.gz
create mode 100644 code/src/gsl/maint/hs/happy-1.18.4.tar.gz
rename code/src/gsl/{ => maint/hs}/language-c-0.3.3.tar.gz (100%)
rename code/src/gsl/{ => maint/hs}/language-c.patch (100%)
rename code/src/gsl/{ => maint/hs}/setup-hs-debian (100%)
create mode 100644 code/src/gsl/maint/hs/setup-hs-local
rename code/src/gsl/{ => maint/hs}/setup-langc (73%)
Diff of changes:
diff --git a/code/src/gsl/configure.in b/code/src/gsl/configure.in
index c9e6a8e..77768cb 100644
--- a/code/src/gsl/configure.in
+++ b/code/src/gsl/configure.in
@@ -12,6 +12,7 @@ GS_PRE="pre-$CONFIGURE_TIME"
GS_VERSION=$GS_MAJOR.$GS_MINOR.$GS_SUB$GS_PRE
+AC_PREREQ(2.50)
AC_INIT(grayskull, 0.1.1, gs-core(a)mcs.anl.gov)
AC_SUBST(GS_VERSION)
diff --git a/code/src/gsl/maint/hs/alex-2.3.1.tar.gz b/code/src/gsl/maint/hs/alex-2.3.1.tar.gz
new file mode 100644
index 0000000..c42c538
Binary files /dev/null and b/code/src/gsl/maint/hs/alex-2.3.1.tar.gz differ
diff --git a/code/src/gsl/maint/hs/happy-1.18.4.tar.gz b/code/src/gsl/maint/hs/happy-1.18.4.tar.gz
new file mode 100644
index 0000000..459a9b5
Binary files /dev/null and b/code/src/gsl/maint/hs/happy-1.18.4.tar.gz differ
diff --git a/code/src/gsl/language-c-0.3.3.tar.gz b/code/src/gsl/maint/hs/language-c-0.3.3.tar.gz
similarity index 100%
rename from code/src/gsl/language-c-0.3.3.tar.gz
rename to code/src/gsl/maint/hs/language-c-0.3.3.tar.gz
diff --git a/code/src/gsl/language-c.patch b/code/src/gsl/maint/hs/language-c.patch
similarity index 100%
rename from code/src/gsl/language-c.patch
rename to code/src/gsl/maint/hs/language-c.patch
diff --git a/code/src/gsl/setup-hs-debian b/code/src/gsl/maint/hs/setup-hs-debian
similarity index 100%
rename from code/src/gsl/setup-hs-debian
rename to code/src/gsl/maint/hs/setup-hs-debian
diff --git a/code/src/gsl/maint/hs/setup-hs-local b/code/src/gsl/maint/hs/setup-hs-local
new file mode 100644
index 0000000..70afa5a
--- /dev/null
+++ b/code/src/gsl/maint/hs/setup-hs-local
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+OLDPWD=$PWD
+
+#wget http://hackage.haskell.org/packages/archive/happy/1.18.4/happy-1.18.4.tar.gz
+tar xvfz happy-1.18.4.tar.gz
+cd happy-1.18.4
+runhaskell Setup configure --prefix=${OLDPWD}/GHC --user
+runhaskell Setup build
+runhaskell Setup install --user
+
+cd ${OLDPWD}
+#wget http://hackage.haskell.org/packages/archive/alex/2.3.1/alex-2.3.1.tar.gz
+tar xvfz alex-2.3.1.tar.gz
+cd alex-2.3.1
+runhaskell Setup configure --prefix=${OLDPWD}/GHC --user
+runhaskell Setup build
+runhaskell Setup install --user
diff --git a/code/src/gsl/setup-langc b/code/src/gsl/maint/hs/setup-langc
similarity index 73%
rename from code/src/gsl/setup-langc
rename to code/src/gsl/maint/hs/setup-langc
index 1595843..e87a9bc 100755
--- a/code/src/gsl/setup-langc
+++ b/code/src/gsl/maint/hs/setup-langc
@@ -2,11 +2,16 @@
#wget --connect-timeout=2 --read-timeout=2 --tries=1 http://hackage.haskell.org/packages/archive/language-c/0.3.1/language-c-0.3…
+OLDPWD=$PWD
+
+# put happy and alex in the path
+PATH=${OLDPWD}/GHC/bin:$PATH
+
# use local copy for now
tar xvfz language-c-0.3.3.tar.gz
cd language-c-0.3.3
patch -p 1 < ../language-c.patch
-runhaskell Setup configure --prefix=${OLDPWD}/language-gsl-install
+runhaskell Setup configure --prefix=${OLDPWD}/GHC
runhaskell Setup build
runhaskell Setup install --user
cd -
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-237-g662b0d4
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 662b0d4013e62c265708b31e5338282d4a30b9fb (commit)
via 32adb3bf7b3006d08c26f0f9d9122485e6dfe91d (commit)
from bc6482844ea4bc2c32e2fd20f38253c3e5f7c12f (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 662b0d4013e62c265708b31e5338282d4a30b9fb
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 16:04:22 2009 -0500
switch to new complete_op() function
Modified other resources (where applicable) to use new completion function
commit 32adb3bf7b3006d08c26f0f9d9122485e6dfe91d
Author: Phil Carns <carns(a)mcs.anl.gov>
Date: Fri Dec 4 15:42:58 2009 -0500
new op completion function to avoid race condition
-----------------------------------------------------------------------
Summary of changes:
code/src/gsl/include/gs-opcache.h | 12 ++++++++++
.../gsl/resources/cosd-prototype/cosd-prototype.c | 9 ++-----
code/src/gsl/resources/storage/gs-storage.c | 7 +----
code/src/gsl/resources/timer/gs-timer.c | 10 +-------
code/src/gsl/tests/correctness/btest-impl.c | 22 +++++++------------
5 files changed, 27 insertions(+), 33 deletions(-)
Diff of changes:
diff --git a/code/src/gsl/include/gs-opcache.h b/code/src/gsl/include/gs-opcache.h
index 3e3471f..84adece 100644
--- a/code/src/gsl/include/gs-opcache.h
+++ b/code/src/gsl/include/gs-opcache.h
@@ -10,6 +10,18 @@ typedef struct gs_opcache *gs_opcache_t;
#define GS_OPCACHE_INIT(_optype, _member, _size, _name) \
gs_opcache_init(sizeof(_optype), (int)(&((_optype *)0)->_member), _size, (_name))
+/* complete an operation by returning it to opcache and invoking callback */
+/* note that __error_code is copied on purpose for safety in case it is a
+ * member of the __op structure.
+ */
+#define gs_opcache_complete_op(__opcache, __op, __error_code) do { \
+ void (*__callback)(void *, int) = (__op)->callback; \
+ void* __user_ptr = (__op)->user_ptr; \
+ int __saved_error_code = __error_code; \
+ gs_opcache_put(__opcache, __op); \
+ __callback(__user_ptr, __saved_error_code); \
+ } while(0)
+
int gs_opcache_init(int typesize, int member_offset, int init_size, gs_opcache_t *cache);
int gs_opcache_double_size(gs_opcache_t cache);
diff --git a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
index 03da5a4..826deee 100644
--- a/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
+++ b/code/src/gsl/resources/cosd-prototype/cosd-prototype.c
@@ -191,9 +191,8 @@ static void* thread_fn(void* foo)
/* spin on op worker */
while(op->op_worker(op) != 1);
- /* trigger callback directly and complete operation */
- gs_invoke_callback(op, c_op->error_code);
- gs_opcache_put(cosd_opcache, op);
+ /* trigger completion of the operation */
+ gs_opcache_complete_op(cosd_opcache, op, c_op->error_code);
/* wake up any pollers */
gs_mutex_lock(&completed_counter_mutex);
@@ -349,9 +348,7 @@ static int gs_cosd_poll(gs_context_t context, int millisecs)
if(ret == 1)
{
/* done */
- gs_invoke_callback(gop, c_op->error_code);
- /* give the op back to the opcache */
- gs_opcache_put(cosd_opcache, gop);
+ gs_opcache_complete_op(cosd_opcache, gop, c_op->error_code);
}
else
{
diff --git a/code/src/gsl/resources/storage/gs-storage.c b/code/src/gsl/resources/storage/gs-storage.c
index 3f0f057..3db73d7 100644
--- a/code/src/gsl/resources/storage/gs-storage.c
+++ b/code/src/gsl/resources/storage/gs-storage.c
@@ -171,8 +171,7 @@ static void* thread_fn(void* foo)
while(op->op_worker(op) != 1);
/* done */
- gs_invoke_callback(op, sto_op->error_code);
- gs_opcache_put(storage_opcache, op);
+ gs_opcache_complete_op(storage_opcache, op, sto_op->error_code);
return(NULL);
}
@@ -441,9 +440,7 @@ static int gs_storage_poll(gs_context_t context, int millisecs)
if(ret == 1)
{
/* done */
- gs_invoke_callback(gop, sto_op->error_code);
- /* give the op back to the opcache */
- gs_opcache_put(storage_opcache, gop);
+ gs_opcache_complete_op(storage_opcache, gop, sto_op->error_code);
}
else
{
diff --git a/code/src/gsl/resources/timer/gs-timer.c b/code/src/gsl/resources/timer/gs-timer.c
index 14613a9..f577c77 100644
--- a/code/src/gsl/resources/timer/gs-timer.c
+++ b/code/src/gsl/resources/timer/gs-timer.c
@@ -110,10 +110,7 @@ static int gs_timer_poll(gs_context_t context, int millisecs)
/* this timer has hit, so we pop and call callback */
gop = gs_oplist_pop(&timer_oplist);
- gs_invoke_callback(gop, 0);
-
- /* give the op back to the opcache */
- gs_opcache_put(timer_opcache, gop);
+ gs_opcache_complete_op(timer_opcache, gop, 0);
/* setup for next iteration */
gop = gs_oplist_peek(&timer_oplist);
@@ -153,10 +150,7 @@ static int gs_timer_poll(gs_context_t context, int millisecs)
}
gop = gs_oplist_pop(&timer_oplist);
- gs_invoke_callback(gop, 0);
-
- /* give the op back to the opcache */
- gs_opcache_put(timer_opcache, gop);
+ gs_opcache_complete_op(timer_opcache, gop, 0);
/* setup for next iteration */
gop = gs_oplist_peek(&timer_oplist);
diff --git a/code/src/gsl/tests/correctness/btest-impl.c b/code/src/gsl/tests/correctness/btest-impl.c
index aa44a7f..4202ecc 100644
--- a/code/src/gsl/tests/correctness/btest-impl.c
+++ b/code/src/gsl/tests/correctness/btest-impl.c
@@ -62,8 +62,8 @@ static void *tctest1_threadfun(void *ptr)
op = (struct gs_op *)ptr;
bop = gs_op_entry(op, struct btest_op, op);
*(bop->value) += 1;
- gs_invoke_callback(&bop->op, 0);
- gs_opcache_put(test_opcache, &bop->op);
+ gs_opcache_complete_op(test_opcache, &bop->op, 0);
+
return NULL;
}
@@ -284,46 +284,40 @@ static int btest_poll(gs_context_t context, int ms)
if(b)
{
*(b->value) += 1;
- gs_invoke_callback(&b->op, 0);
- gs_opcache_put(test_opcache, &b->op);
+ gs_opcache_complete_op(test_opcache, &b->op, 0);
}
b = poll_list(&list2);
if(b)
{
*(b->value) += 2;
- gs_invoke_callback(&b->op, 0);
- gs_opcache_put(test_opcache, &b->op);
+ gs_opcache_complete_op(test_opcache, &b->op, 0);
}
b = poll_list(&list3);
if(b)
{
*(b->value) += 3;
- gs_invoke_callback(&b->op, 0);
- gs_opcache_put(test_opcache, &b->op);
+ gs_opcache_complete_op(test_opcache, &b->op, 0);
}
b = poll_list(&clist);
if(b)
{
- gs_invoke_callback(&b->op, -1);
- gs_opcache_put(test_opcache, &b->op);
+ gs_opcache_complete_op(test_opcache, &b->op, -1);
}
b = poll_list(&rlist);
if(b)
{
- gs_invoke_callback(&b->op, random());
- gs_opcache_put(test_opcache, &b->op);
+ gs_opcache_complete_op(test_opcache, &b->op, random());
}
s = poll_sleep_list();
if(s)
{
sleep(s->sleep);
- gs_invoke_callback(&s->op, 0);
- gs_opcache_put(sleep_opcache, &s->op);
+ gs_opcache_complete_op(sleep_opcache, &s->op, 0);
}
return 0;
}
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-235-gbc64828
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via bc6482844ea4bc2c32e2fd20f38253c3e5f7c12f (commit)
via 6ab746e8337133ef51a979b061a4a7acb018fdeb (commit)
via 9f20d87c88a3c199ad1e9ffa3eb26b0887f90914 (commit)
from 83c293f4366dbee928b9a729fc2ecbaf874b2426 (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 bc6482844ea4bc2c32e2fd20f38253c3e5f7c12f
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:25:53 2009 -0600
Better EOL fix.
commit 6ab746e8337133ef51a979b061a4a7acb018fdeb
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:23:39 2009 -0600
Same thing.
commit 9f20d87c88a3c199ad1e9ffa3eb26b0887f90914
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:21:58 2009 -0600
Somehow EOL changes to java did not stick.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/gobs/plot/AsciiPlot.java | 4 +-
sim/gobs/gobs/plot/LogPlot.java | 14 +++++-----
sim/gobs/gobs/plot/MultiLogXPlot.java | 16 ++++++------
sim/gobs/gobs/plot/MultiplePlot.java | 12 ++++----
sim/gobs/gobs/plot/SimplePlot.java | 14 +++++-----
sim/gobs/gobs/sim/Addressable.java | 8 +++---
sim/gobs/gobs/sim/Copy.java | 2 +-
sim/gobs/gobs/sim/Event.java | 4 +-
sim/gobs/gobs/sim/Fault.java | 4 +-
sim/gobs/gobs/sim/KClosest.java | 2 +-
sim/gobs/gobs/sim/Metric.java | 6 ++--
sim/gobs/gobs/sim/Nearest.java | 6 ++--
sim/gobs/gobs/sim/Node.java | 2 +-
sim/gobs/gobs/sim/PDSIFiles.java | 18 +++++++-------
sim/gobs/gobs/sim/ParallelRUSH.java | 6 ++--
sim/gobs/gobs/sim/Placement.java | 2 +-
sim/gobs/gobs/sim/RUSHp.java | 10 ++++----
sim/gobs/gobs/sim/RandomNodes.java | 2 +-
sim/gobs/gobs/sim/Rebuild.java | 4 +-
sim/gobs/gobs/sim/Replicated.java | 14 +++++-----
sim/gobs/gobs/sim/SimpleNodes.java | 4 +-
sim/gobs/gobs/sim/Simulator.java | 40 +++++++++++++++---------------
sim/gobs/gobs/sim/TraceFiles.java | 2 +-
sim/gobs/gobs/sim/VertexGroups.java | 4 +-
sim/gobs/gobs/sweep/AbstractSweep.java | 6 ++--
sim/gobs/gobs/sweep/Affected01.java | 4 +-
sim/gobs/gobs/sweep/ArraySweep.java | 4 +-
sim/gobs/gobs/sweep/Balance01.java | 6 ++--
sim/gobs/gobs/sweep/Balance02.java | 10 ++++----
sim/gobs/gobs/sweep/Decluster01.java | 6 ++--
sim/gobs/gobs/sweep/Decluster01P.java | 6 ++--
sim/gobs/gobs/sweep/Decluster02.java | 6 ++--
sim/gobs/gobs/sweep/Decluster03.java | 6 ++--
sim/gobs/gobs/sweep/Decluster04.java | 8 +++---
sim/gobs/gobs/sweep/ParallelSweep.java | 8 +++---
sim/gobs/gobs/sweep/Parallelism01.java | 8 +++---
sim/gobs/gobs/sweep/Rebuild01.java | 10 ++++----
sim/gobs/gobs/sweep/Sweep.java | 2 +-
sim/gobs/gobs/test/TestELHS.java | 2 +-
sim/gobs/gobs/test/TestExponential.java | 6 ++--
sim/gobs/gobs/test/TestFileFactory.java | 16 ++++++------
sim/gobs/gobs/util/Bits.java | 2 +-
sim/gobs/gobs/util/MapSorter.java | 4 +-
sim/gobs/gobs/util/Stats.java | 2 +-
sim/gobs/gobs/util/Tools.java | 6 ++--
sim/gobs/scripts/eol.zsh | 6 +---
sim/gobs/wiki/kpv02.cfg | 2 +-
47 files changed, 167 insertions(+), 169 deletions(-)
Diff of changes:
diff --git a/sim/gobs/gobs/plot/AsciiPlot.java b/sim/gobs/gobs/plot/AsciiPlot.java
index 54a95a8..1841a50 100644
--- a/sim/gobs/gobs/plot/AsciiPlot.java
+++ b/sim/gobs/gobs/plot/AsciiPlot.java
@@ -68,7 +68,7 @@ public class AsciiPlot
writer.println("# DESCRIPTION: " + 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));
@@ -85,7 +85,7 @@ public class AsciiPlot
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/LogPlot.java b/sim/gobs/gobs/plot/LogPlot.java
index 595dd08..d5b4867 100644
--- a/sim/gobs/gobs/plot/LogPlot.java
+++ b/sim/gobs/gobs/plot/LogPlot.java
@@ -53,7 +53,7 @@ public class LogPlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -79,9 +79,9 @@ public class LogPlot
}
final XYDataset collection = new XYSeriesCollection(series);
-
+
final boolean withLegend = false;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -106,7 +106,7 @@ public class LogPlot
// font = font.deriveFont(12.0f);
// domainAxis.setTickLabelFont(font);
plot.setDomainAxis(domainAxis);
-
+
chart.draw(g2d, rectangle);
try
@@ -117,8 +117,8 @@ public class LogPlot
{
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -133,7 +133,7 @@ public class LogPlot
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/plot/MultiLogXPlot.java b/sim/gobs/gobs/plot/MultiLogXPlot.java
index c2899a3..ca0c85a 100644
--- a/sim/gobs/gobs/plot/MultiLogXPlot.java
+++ b/sim/gobs/gobs/plot/MultiLogXPlot.java
@@ -52,7 +52,7 @@ public class MultiLogXPlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -75,7 +75,7 @@ public class MultiLogXPlot
}
final boolean withLegend = true;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -99,11 +99,11 @@ public class MultiLogXPlot
domainAxis.setLabelFont(labelFont);
domainAxis.setTickLabelFont(tickFont);
plot.setDomainAxis(domainAxis);
-
+
chart.draw(g2d, rectangle);
System.out.println("plotted");
-
+
try
{
g2d.finish();
@@ -113,8 +113,8 @@ public class MultiLogXPlot
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -124,7 +124,7 @@ public class MultiLogXPlot
public static void main(String[] args)
{
Bits.init();
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
int count = 0;
for (int j = 0; j < 3; j++)
@@ -136,7 +136,7 @@ public class MultiLogXPlot
}
collection.addSeries(series);
}
-
+
plot(collection, "TITLE", "XL", "YL", "tmp.eps");
}
}
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/gobs/plot/MultiplePlot.java
index 86ec5e6..bc18fe7 100644
--- a/sim/gobs/gobs/plot/MultiplePlot.java
+++ b/sim/gobs/gobs/plot/MultiplePlot.java
@@ -51,7 +51,7 @@ public class MultiplePlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -77,7 +77,7 @@ public class MultiplePlot
}
final boolean withLegend = true;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -99,8 +99,8 @@ public class MultiplePlot
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -110,7 +110,7 @@ public class MultiplePlot
public static void main(String[] args)
{
Bits.init();
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
int count = 0;
for (int j = 0; j < 3; j++)
@@ -122,7 +122,7 @@ public class MultiplePlot
}
collection.addSeries(series);
}
-
+
plot(collection, "TITLE", "XL", "YL", "tmp.eps");
}
}
diff --git a/sim/gobs/gobs/plot/SimplePlot.java b/sim/gobs/gobs/plot/SimplePlot.java
index cf9d596..fd90dde 100644
--- a/sim/gobs/gobs/plot/SimplePlot.java
+++ b/sim/gobs/gobs/plot/SimplePlot.java
@@ -49,7 +49,7 @@ public class SimplePlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -75,9 +75,9 @@ public class SimplePlot
}
final XYDataset collection = new XYSeriesCollection(series);
-
+
final boolean withLegend = false;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -91,7 +91,7 @@ public class SimplePlot
renderer.setBasePaint(Color.BLACK);
renderer.setBaseFillPaint(Color.BLACK);
plot.setRenderer(renderer);
-
+
chart.draw(g2d, rectangle);
try
@@ -102,8 +102,8 @@ public class SimplePlot
{
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -118,7 +118,7 @@ public class SimplePlot
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
index 627386c..b6a6e61 100644
--- a/sim/gobs/gobs/sim/Addressable.java
+++ b/sim/gobs/gobs/sim/Addressable.java
@@ -44,12 +44,12 @@ class Addressable
*/
int[] bitArray(int B)
{
-
+
// if (array != null)
// return array;
-
+
// int[] result =
- return bitArray(B, id);
+ return bitArray(B, id);
}
/**
@@ -60,7 +60,7 @@ class Addressable
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))
diff --git a/sim/gobs/gobs/sim/Copy.java b/sim/gobs/gobs/sim/Copy.java
index 1a20b3c..213bb42 100644
--- a/sim/gobs/gobs/sim/Copy.java
+++ b/sim/gobs/gobs/sim/Copy.java
@@ -37,7 +37,7 @@ class Copy
{
return log();
}
-
+
String log()
{
StringBuilder sb = new StringBuilder(128);
diff --git a/sim/gobs/gobs/sim/Event.java b/sim/gobs/gobs/sim/Event.java
index 8874ed8..5831a1f 100644
--- a/sim/gobs/gobs/sim/Event.java
+++ b/sim/gobs/gobs/sim/Event.java
@@ -19,7 +19,7 @@ class Event
Event()
{}
-
+
Event(double finish)
{
this.finish = finish;
@@ -40,4 +40,4 @@ class Event
{
return log();
}
-}
+}
diff --git a/sim/gobs/gobs/sim/Fault.java b/sim/gobs/gobs/sim/Fault.java
index dd236a9..ee67abb 100644
--- a/sim/gobs/gobs/sim/Fault.java
+++ b/sim/gobs/gobs/sim/Fault.java
@@ -6,7 +6,7 @@ class Fault
{
Fault()
{}
-
+
Fault(double finish)
{
this.finish = finish;
@@ -26,4 +26,4 @@ class Fault
{
return log();
}
-}
+}
diff --git a/sim/gobs/gobs/sim/KClosest.java b/sim/gobs/gobs/sim/KClosest.java
index f858710..59cd7d7 100644
--- a/sim/gobs/gobs/sim/KClosest.java
+++ b/sim/gobs/gobs/sim/KClosest.java
@@ -27,7 +27,7 @@ abstract class KClosest
{
BoundedSortedValues<Node,BigInteger> sites =
new BoundedSortedValues<Node,BigInteger>(object.replicas);
-
+
for (Node node : nodes)
{
BigInteger d = distance(object.id, node.id);
diff --git a/sim/gobs/gobs/sim/Metric.java b/sim/gobs/gobs/sim/Metric.java
index 1151095..0a9f5cf 100644
--- a/sim/gobs/gobs/sim/Metric.java
+++ b/sim/gobs/gobs/sim/Metric.java
@@ -23,7 +23,7 @@ public abstract class Metric
{
Node result = null;
BigInteger diff = null;
-
+
for (Node node : nodes)
if (diff == null ||
distance(id, node.id).compareTo(diff) < 0)
@@ -51,7 +51,7 @@ public abstract class Metric
if (source == null)
return null;
-
+
Copy result = regimen(object, primaryNode, primaryLocation,
source, sites);
logCopy(result);
@@ -127,7 +127,7 @@ public abstract class Metric
System.out.println("regimen(): could not handle: " + object);
return null;
}
-
+
return new Copy(payload, source, destination);
}
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/gobs/sim/Nearest.java
index c688b65..f84b3f2 100644
--- a/sim/gobs/gobs/sim/Nearest.java
+++ b/sim/gobs/gobs/sim/Nearest.java
@@ -41,7 +41,7 @@ public class Nearest
BigInteger d1 = b.subtract(a);
BigInteger d2 = M.subtract(b).add(a);
-
+
return (d2.compareTo(d1) < 0) ? d2 : d1;
}
@@ -55,9 +55,9 @@ public class Nearest
int B = 10;
BigInteger M = new BigInteger("10");
-
+
Nearest nearest = new Nearest(null, ReplicaSource.PRIMARY);
-
+
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 20d404e..c5ec5eb 100644
--- a/sim/gobs/gobs/sim/Node.java
+++ b/sim/gobs/gobs/sim/Node.java
@@ -45,7 +45,7 @@ public class Node
"Node.add(): " + id + " contains " +
object.toString(Simulator.current) + "\n" +
display());
-
+
objects.put(object.id, object);
}
diff --git a/sim/gobs/gobs/sim/PDSIFiles.java b/sim/gobs/gobs/sim/PDSIFiles.java
index acbd929..fc5ebe4 100644
--- a/sim/gobs/gobs/sim/PDSIFiles.java
+++ b/sim/gobs/gobs/sim/PDSIFiles.java
@@ -184,15 +184,15 @@ public class PDSIFiles
{
k = new double[points.length-1];
m = new double[points.length-1];
-
+
for (int i = 1; i < points.length; i++)
{
double p = points[i-1][0];
double q = points[i][0];
-
+
double a = points[i-1][1];
double b = points[i][1];
-
+
k[i-1] = log(b/a)/(q-p);
m[i-1] = a/exp(k[i-1]*p);
@@ -208,7 +208,7 @@ public class PDSIFiles
public File get()
{
long size = randomSize();
-
+
int width;
int strip;
int replicas;
@@ -224,7 +224,7 @@ public class PDSIFiles
strip = (int) size;
replicas = 3;
}
-
+
return new File(size, strip, width, replicas);
}
@@ -289,10 +289,10 @@ public class PDSIFiles
public static void debugInterpolation(String[] args)
{
long n = Long.parseLong(args[0]);
-
+
Bits.init();
Simulator simulator = new Simulator();
-
+
simulator.nodes = new ArrayList<Node>();
simulator.nodes.add(null);
@@ -307,7 +307,7 @@ public class PDSIFiles
points[3][1] = 64.0*1024*1024;
points[4][0] = 1.0;
points[4][1] = 1024.0*1024*1024*1024;
-
+
PDSIFiles factory = new PDSIFiles(simulator, points);
// generateCount(n);
@@ -320,7 +320,7 @@ public class PDSIFiles
// double d = bytes(v);
// System.out.println(d);
-
+
double[][] p = parse(v);
dumpPoints(p);
diff --git a/sim/gobs/gobs/sim/ParallelRUSH.java b/sim/gobs/gobs/sim/ParallelRUSH.java
index 18a6953..3e5cbbb 100644
--- a/sim/gobs/gobs/sim/ParallelRUSH.java
+++ b/sim/gobs/gobs/sim/ParallelRUSH.java
@@ -23,7 +23,7 @@ public class ParallelRUSH
The certainty that our primes are really prime.
*/
int certainty = Integer.MAX_VALUE;
-
+
/**
@param simulator Reference to the Simulator
@param source A ReplicaSource.
@@ -112,7 +112,7 @@ public class ParallelRUSH
/**
<a href="http://wiki.mcs.anl.gov/radix/grayskull/index.php/Stripe_placement_and_rebu…">From the wiki.</a>
-
+
@param x The object id (key).
@param i The strip number
@param r The replica number (in [0,x.replicas)).
@@ -201,7 +201,7 @@ public class ParallelRUSH
Simulator simulator = new Simulator();
RUSHp foop = new RUSHp(simulator, ReplicaSource.LAST);
-
+
long start = System.currentTimeMillis();
System.out.println("is prime? " + foop.isPrime(i));
long stop = System.currentTimeMillis();
diff --git a/sim/gobs/gobs/sim/Placement.java b/sim/gobs/gobs/sim/Placement.java
index 787b891..d1ccb07 100644
--- a/sim/gobs/gobs/sim/Placement.java
+++ b/sim/gobs/gobs/sim/Placement.java
@@ -19,7 +19,7 @@ public abstract class Placement
Placement(Simulator simulator)
{
this.simulator = simulator;
-
+
BigInteger two = new BigInteger("2");
M = two.pow(simulator.B);
}
diff --git a/sim/gobs/gobs/sim/RUSHp.java b/sim/gobs/gobs/sim/RUSHp.java
index 18ba3ed..a9ddc98 100644
--- a/sim/gobs/gobs/sim/RUSHp.java
+++ b/sim/gobs/gobs/sim/RUSHp.java
@@ -24,7 +24,7 @@ public class RUSHp
The certainty that our primes are really prime.
*/
int certainty = Integer.MAX_VALUE;
-
+
/**
@param simulator Reference to the Simulator
@param source A ReplicaSource.
@@ -50,7 +50,7 @@ public class RUSHp
Set<Node> sites = new HashSet<Node>();
Node primary = lookup(object.id, 0, object.replicas, nodes);
-
+
for (int i = 1; i <= object.replicas-1; i++)
{
Node node = lookup(object.id, i, object.replicas, nodes);
@@ -58,7 +58,7 @@ public class RUSHp
if (node != primary)
sites.add(node);
}
-
+
result.addAll(sites);
result.add(primary);
return result;
@@ -66,7 +66,7 @@ public class RUSHp
/**
Taken from paper Figure 3.
-
+
@param x The object id (key).
@param r The replica number (in [0,x.replicas)).
@param R The number of replicas for x (x.replicas).
@@ -150,7 +150,7 @@ public class RUSHp
Simulator simulator = new Simulator();
RUSHp foop = new RUSHp(simulator, ReplicaSource.LAST);
-
+
long start = System.currentTimeMillis();
System.out.println("is prime? " + foop.isPrime(i));
long stop = System.currentTimeMillis();
diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/gobs/sim/RandomNodes.java
index 9803cf5..3baf3a1 100644
--- a/sim/gobs/gobs/sim/RandomNodes.java
+++ b/sim/gobs/gobs/sim/RandomNodes.java
@@ -29,7 +29,7 @@ class RandomNodes
{
if (tries++ >= simulator.maxTries)
Tools.bail("Could not assign unique node id!");
-
+
id = new BigInteger(simulator.B, Bits.rng);
node = new Node(id);
}
diff --git a/sim/gobs/gobs/sim/Rebuild.java b/sim/gobs/gobs/sim/Rebuild.java
index 545c68e..6047d83 100644
--- a/sim/gobs/gobs/sim/Rebuild.java
+++ b/sim/gobs/gobs/sim/Rebuild.java
@@ -150,7 +150,7 @@ class Rebuild
todo.remove(copy.object);
done.add(copy.object);
}
-
+
int loadAt(double t)
{
int result = 0;
@@ -204,5 +204,5 @@ class Rebuild
}
}
return null;
- }
+ }
}
diff --git a/sim/gobs/gobs/sim/Replicated.java b/sim/gobs/gobs/sim/Replicated.java
index 4445fe7..9071d2b 100644
--- a/sim/gobs/gobs/sim/Replicated.java
+++ b/sim/gobs/gobs/sim/Replicated.java
@@ -22,7 +22,7 @@ public abstract class Replicated
{
super(simulator);
this.replicaSource = source;
-
+
BigInteger two = new BigInteger("2");
M = two.pow(simulator.B);
}
@@ -120,19 +120,19 @@ public abstract class Replicated
if (result == null ||
! result.contains(object.id))
result = randomSource(object, sites);
-
+
if (result == null)
simulator.lost(object);
else
sites.remove(result);
-
+
return result;
}
Node randomSource(SingleObject object, List<Node> sites)
{
List<Node> valid = new ArrayList<Node>(sites.size());
-
+
for (Node node : sites)
if (node.contains(object.id))
valid.add(node);
@@ -162,7 +162,7 @@ public abstract class Replicated
Node destination = null;
int origsize = sites.size();
-
+
while (sites.size() > 0)
{
int r = Bits.nextInt(sites.size());
@@ -173,7 +173,7 @@ public abstract class Replicated
break;
}
}
-
+
if (destination == null)
System.out.println("No destination: " + object);
@@ -189,7 +189,7 @@ public abstract class Replicated
object);
System.out.println("sites.size() : " + sites);
simulator.printNodeObjects(sites);
-
+
Tools.bail("Exit!");
}
diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/gobs/sim/SimpleNodes.java
index 62edd6a..11841aa 100644
--- a/sim/gobs/gobs/sim/SimpleNodes.java
+++ b/sim/gobs/gobs/sim/SimpleNodes.java
@@ -26,11 +26,11 @@ public class SimpleNodes
BigInteger bigM = new BigInteger("" + simulator.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);
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
index 56d8777..78595e5 100644
--- a/sim/gobs/gobs/sim/Simulator.java
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -143,7 +143,7 @@ public class Simulator
"<name>=<value>* <file.cfg>*");
Simulator simulator = new Simulator();
- for (int i = 0; i < args.length; i++)
+ for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-p"))
{
@@ -166,7 +166,7 @@ public class Simulator
Bits.init(simulator.integer("seed"));
else
Bits.init(true);
-
+
simulator.execute();
}
@@ -180,7 +180,7 @@ public class Simulator
public void execute()
{
Simulator.current = this;
-
+
setup();
System.out.println("\nexecute:");
@@ -191,7 +191,7 @@ public class Simulator
performAccesses();
induceFaults();
performAccesses();
-
+
computeStatistics();
Simulator.current = null;
@@ -315,7 +315,7 @@ public class Simulator
hub = new SimpleNodes(this);
else
bail("Bad NodeFactory name: " + nodesName);
-
+
nodes = new ArrayList<Node>(N);
}
@@ -354,7 +354,7 @@ public class Simulator
// System.out.println("allocateFile(): iterate: " + tries);
if (tries++ >= maxTries)
bail("Could not allocate new object ids!");
-
+
set = placer.allocateFile(file, nodes);
}
while (objects.containsAny(set));
@@ -367,9 +367,9 @@ public class Simulator
void place()
{
placer.place(objects, nodes);
-
+
origCount = countObjects(nodes);
-
+
// printNodes(nodes);
if (bool("print.initialnodes"))
printNodeObjects(nodes);
@@ -397,7 +397,7 @@ public class Simulator
System.out.println("reads: " + reads);
if (reads > 0)
printAccesses = bool("printAccesses");
-
+
for (int read = 0; read < reads; read++)
{
File file = randomFile();
@@ -409,7 +409,7 @@ public class Simulator
{
if (printAccesses)
System.out.println("read: " + file.id);
-
+
for (gobs.sim.Object object : file.objects)
{
List<Node> sites = placer.sites(object, nodes);
@@ -425,7 +425,7 @@ public class Simulator
{
if (writes > 0)
printAccesses = bool("printAccesses");
-
+
for (int write = 0; write < writes; write++)
{
File file = randomFile();
@@ -437,7 +437,7 @@ public class Simulator
{
if (printAccesses)
System.out.println("write: " + file.id);
-
+
for (gobs.sim.Object object : file.objects)
performWrite(object);
}
@@ -577,10 +577,10 @@ public class Simulator
computeTotalDeclustering(total);
computeAccesses();
computeTraffic();
-
+
stats.results.setProperty("lostObjects",
df.format(stats.lostObjects));
-
+
System.out.println("FLEXIBILITIES: " +
df.format(stats.avgFlexibility()));
System.out.println("LOST_OBJECTS: " + stats.lostObjects);
@@ -595,7 +595,7 @@ public class Simulator
void computeDiffs()
{
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())
@@ -604,11 +604,11 @@ public class Simulator
int after = faultCount.get(node);
diffs.put(node, new Integer(after-before));
}
-
+
// Sort load differences...
MapSorter<Node> sorter = new MapSorter<Node>();
sortedDiffs = sorter.sort(diffs);
-
+
// Display load differences...
if (string("print.loaddiffs").equals("true"))
printLoadDifferences(sortedDiffs);
@@ -759,7 +759,7 @@ public class Simulator
{
if (! has("plot.traffic.interval"))
return;
-
+
System.out.println("TRAFFIC: ");
double interval = decimal("plot.traffic.interval");
@@ -779,10 +779,10 @@ public class Simulator
}
intervals.add(d);
sample.add(0);
-
+
System.out.println(intervals.toString());
System.out.println(sample.toString());
-
+
stats.results.setProperty("traffic-x", intervals.toString());
stats.results.setProperty("traffic-y", sample.toString());
}
diff --git a/sim/gobs/gobs/sim/TraceFiles.java b/sim/gobs/gobs/sim/TraceFiles.java
index c6cae92..f09871a 100644
--- a/sim/gobs/gobs/sim/TraceFiles.java
+++ b/sim/gobs/gobs/sim/TraceFiles.java
@@ -93,7 +93,7 @@ class TraceFiles
}
index++;
-
+
return new File(size, strip, width, replicas);
}
}
diff --git a/sim/gobs/gobs/sim/VertexGroups.java b/sim/gobs/gobs/sim/VertexGroups.java
index 91f4428..5bca1a6 100644
--- a/sim/gobs/gobs/sim/VertexGroups.java
+++ b/sim/gobs/gobs/sim/VertexGroups.java
@@ -50,7 +50,7 @@ public class VertexGroups
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);
@@ -59,7 +59,7 @@ public class VertexGroups
if (node != primary)
sites.add(node);
}
-
+
result.addAll(sites);
result.add(primary);
return result;
diff --git a/sim/gobs/gobs/sweep/AbstractSweep.java b/sim/gobs/gobs/sweep/AbstractSweep.java
index 89e8f08..efda893 100644
--- a/sim/gobs/gobs/sweep/AbstractSweep.java
+++ b/sim/gobs/gobs/sweep/AbstractSweep.java
@@ -43,7 +43,7 @@ abstract class AbstractSweep
static Properties getopts(String[] args)
{
Properties result = new Properties();
-
+
if (args.length == 0)
{
System.out.println("usage: -n <n> <file.cfg>+");
@@ -157,7 +157,7 @@ abstract class AbstractSweep
p *= 2;
}
result.add(new Integer(max).toString());
-
+
return result;
}
@@ -191,7 +191,7 @@ abstract class AbstractSweep
if (m != previous)
result.add(new Integer(m).toString());
result.add(new Integer(max).toString());
-
+
return result;
}
diff --git a/sim/gobs/gobs/sweep/Affected01.java b/sim/gobs/gobs/sweep/Affected01.java
index 30e359d..f18efe2 100644
--- a/sim/gobs/gobs/sweep/Affected01.java
+++ b/sim/gobs/gobs/sweep/Affected01.java
@@ -25,11 +25,11 @@ class Affected01
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",
diff --git a/sim/gobs/gobs/sweep/ArraySweep.java b/sim/gobs/gobs/sweep/ArraySweep.java
index f5b0a66..18a3930 100644
--- a/sim/gobs/gobs/sweep/ArraySweep.java
+++ b/sim/gobs/gobs/sweep/ArraySweep.java
@@ -66,10 +66,10 @@ class ArraySweep
{
repeats = Tools.integer(properties, "repeats");
System.out.println("repeats: " + repeats);
-
+
if (repeats <= 0)
System.out.println("WARNING: repeats=" + repeats);
-
+
for (String v : values)
{
Set<double[]> xresult = new HashSet<double[]>();
diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java
index 2a7193a..ce0bd5e 100644
--- a/sim/gobs/gobs/sweep/Balance01.java
+++ b/sim/gobs/gobs/sweep/Balance01.java
@@ -21,7 +21,7 @@ class Balance01
public static void main(String[] args)
{
Bits.init(true);
-
+
Properties properties = Sweep.getopts(args);
properties.setProperty("faults", "0");
@@ -64,10 +64,10 @@ class Balance01
{
XYSeries series = new XYSeries(scheme);
series.setDescription(scheme);
-
+
MapSorter<Node> sorter = new MapSorter<Node>();
Map<Node,Integer> sorted = sorter.sort(simulator.origCount);
-
+
int i = 0;
for (Node node : sorted.keySet())
series.add(i++, sorted.get(node));
diff --git a/sim/gobs/gobs/sweep/Balance02.java b/sim/gobs/gobs/sweep/Balance02.java
index d63f57f..5363bd5 100644
--- a/sim/gobs/gobs/sweep/Balance02.java
+++ b/sim/gobs/gobs/sweep/Balance02.java
@@ -21,10 +21,10 @@ 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();
@@ -32,7 +32,7 @@ class Balance02
XYSeries series = new XYSeries("Balance");
Metric metric = (Metric) simulator.placer;
-
+
int i = 0;
for (Node node : simulator.nodes)
{
@@ -52,14 +52,14 @@ class Balance02
}
}
}
-
+
System.out.println
("i: " + i +
" node: " + node +
" load: " + node.objects.size() +
"\n\t distance: " + closestDistance);
}
-
+
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
index f5fc1f0..12c3ac1 100644
--- a/sim/gobs/gobs/sweep/Decluster01.java
+++ b/sim/gobs/gobs/sweep/Decluster01.java
@@ -18,13 +18,13 @@ class Decluster01
public static void main(String[] 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.exps(minNodes, maxNodes);
-
+
sweep.execute("Declustering", "nodes", values, "maxPulls");
SimplePlot.plot(sweep.series, "Maximum Rebuild Load", "nodes", "load",
diff --git a/sim/gobs/gobs/sweep/Decluster01P.java b/sim/gobs/gobs/sweep/Decluster01P.java
index 2c0682d..4387e61 100644
--- a/sim/gobs/gobs/sweep/Decluster01P.java
+++ b/sim/gobs/gobs/sweep/Decluster01P.java
@@ -18,13 +18,13 @@ 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",
diff --git a/sim/gobs/gobs/sweep/Decluster02.java b/sim/gobs/gobs/sweep/Decluster02.java
index a0aaba8..59cad0f 100644
--- a/sim/gobs/gobs/sweep/Decluster02.java
+++ b/sim/gobs/gobs/sweep/Decluster02.java
@@ -31,7 +31,7 @@ class Decluster02
{
properties = Sweep.getopts(args);
AbstractSweep.seed(properties);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "minNodes");
int maxNodes = Tools.integer(properties, "maxNodes");
@@ -39,7 +39,7 @@ class Decluster02
List<String> values = Sweep.values(step, minNodes, maxNodes);
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
@@ -58,7 +58,7 @@ class Decluster02
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "maxPulls");
collection.addSeries(vgSweep.series);
-
+
MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
"nodes", "load fraction (%)", output);
// AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
diff --git a/sim/gobs/gobs/sweep/Decluster03.java b/sim/gobs/gobs/sweep/Decluster03.java
index c18e10e..7812a69 100644
--- a/sim/gobs/gobs/sweep/Decluster03.java
+++ b/sim/gobs/gobs/sweep/Decluster03.java
@@ -26,16 +26,16 @@ class Decluster03
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("Decluster03: " + values);
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
diff --git a/sim/gobs/gobs/sweep/Decluster04.java b/sim/gobs/gobs/sweep/Decluster04.java
index eba8bb9..541633b 100644
--- a/sim/gobs/gobs/sweep/Decluster04.java
+++ b/sim/gobs/gobs/sweep/Decluster04.java
@@ -26,7 +26,7 @@ class Decluster04
Bits.init();
properties = Sweep.getopts(args);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "minNodes");
@@ -50,7 +50,7 @@ class Decluster04
kSweep.repeats = Tools.integer(properties, "repeats");
kSweep.execute("Kademlia", "nodes", values, "distribution");
allSeries.addAll(kSweep.collection);
-
+
properties.setProperty("impl.placement", "VertexGroups");
ArraySweep vgSweep = new ArraySweep(properties);
vgSweep.repeats = Tools.integer(properties, "repeats");
@@ -59,10 +59,10 @@ class Decluster04
for (XYSeries series : allSeries)
collection.addSeries(series);
-
+
MultiplePlot.plot(collection, "Rebuild Load Distribution",
"nodes involved", "load fraction(%)", output);
-
+
// AsciiPlot.plot(pSweep.series, "Maximum Rebuild Load",
// "nodes", "load", "tmp.txt");
}
diff --git a/sim/gobs/gobs/sweep/ParallelSweep.java b/sim/gobs/gobs/sweep/ParallelSweep.java
index ae2e238..a2f809e 100644
--- a/sim/gobs/gobs/sweep/ParallelSweep.java
+++ b/sim/gobs/gobs/sweep/ParallelSweep.java
@@ -47,7 +47,7 @@ class ParallelSweep
{
this.simulator = simulator;
}
-
+
public void run()
{
simulator.execute();
@@ -70,9 +70,9 @@ class ParallelSweep
System.out.println("WARNING: repeats=" + repeats);
System.out.println("cores: " + cores);
-
+
ExecutorService service = Executors.newFixedThreadPool(cores);
-
+
series = new XYSeries(description);
for (String v : values)
{
@@ -113,7 +113,7 @@ class ParallelSweep
Simulator simulator = sims.get(v + "_" + i);
stats.add(simulator.stats);
try
- {
+ {
System.out.println("result: " + result(simulator, yname));
}
catch (NullPointerException e)
diff --git a/sim/gobs/gobs/sweep/Parallelism01.java b/sim/gobs/gobs/sweep/Parallelism01.java
index 86fdb7b..ca5d378 100644
--- a/sim/gobs/gobs/sweep/Parallelism01.java
+++ b/sim/gobs/gobs/sweep/Parallelism01.java
@@ -27,16 +27,16 @@ class Parallelism01
properties = Sweep.getopts(args);
String output = Tools.string(properties, "output");
-
+
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("Parallelism01: " + values);
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
@@ -54,7 +54,7 @@ class Parallelism01
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "accessbalance");
collection.addSeries(vgSweep.series);
-
+
MultiLogXPlot.plot(collection, "Load Imbalance",
"nodes", "imbalance", output);
// AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
diff --git a/sim/gobs/gobs/sweep/Rebuild01.java b/sim/gobs/gobs/sweep/Rebuild01.java
index 7bdf937..b23f171 100644
--- a/sim/gobs/gobs/sweep/Rebuild01.java
+++ b/sim/gobs/gobs/sweep/Rebuild01.java
@@ -28,7 +28,7 @@ class Rebuild01
properties = Sweep.getopts(args);
AbstractSweep.seed(properties);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "nodes.min");
@@ -53,21 +53,21 @@ class Rebuild01
kSweep.repeats = Tools.integer(properties, "repeats");
kSweep.execute("Kademlia", "nodes", values, "distribution");
allSeries.addAll(kSweep.collection);
-
+
properties.setProperty("impl.placement", "VertexGroups");
ArraySweep vgSweep = new ArraySweep(properties);
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "distribution");
allSeries.addAll(vgSweep.collection);
*/
-
+
for (XYSeries series : allSeries)
collection.addSeries(series);
-
+
MultiplePlot.plot(collection, "Rebuild Traffic",
"time", "copies in flight",
output);
-
+
// AsciiPlot.plot(pSweep.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 5b445fc..666b600 100644
--- a/sim/gobs/gobs/sweep/Sweep.java
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -55,7 +55,7 @@ class Sweep
if (repeats <= 0)
System.out.println("WARNING: repeats=" + repeats);
-
+
series = new XYSeries(description);
for (String v : values)
{
diff --git a/sim/gobs/gobs/test/TestELHS.java b/sim/gobs/gobs/test/TestELHS.java
index 36d7c19..3ffedf1 100644
--- a/sim/gobs/gobs/test/TestELHS.java
+++ b/sim/gobs/gobs/test/TestELHS.java
@@ -16,7 +16,7 @@ class TestELHS
public static void main(String[] args)
{
int n = 10;
-
+
EnhancedLinkedHashSet<gobs.sim.Object> set =
new EnhancedLinkedHashSet<gobs.sim.Object>();
diff --git a/sim/gobs/gobs/test/TestExponential.java b/sim/gobs/gobs/test/TestExponential.java
index 4b4ee52..cf9ffaa 100644
--- a/sim/gobs/gobs/test/TestExponential.java
+++ b/sim/gobs/gobs/test/TestExponential.java
@@ -27,10 +27,10 @@ class TestExponential
{
check(args.length == 2,
"usage: TestExponential <lambda> <n>");
-
+
double lambda = Double.parseDouble(args[0]);
int n = Integer.parseInt(args[1]);
-
+
DRand engine = new DRand(new Date());
Exponential ed = new Exponential(lambda, engine);
@@ -47,7 +47,7 @@ class TestExponential
}
System.out.println("avg: " + Stats.avg(results));
-
+
SimplePlot.plot(series, "TestExponential", "step", "length",
"testexponential.eps");
}
diff --git a/sim/gobs/gobs/test/TestFileFactory.java b/sim/gobs/gobs/test/TestFileFactory.java
index d3453b2..d426826 100644
--- a/sim/gobs/gobs/test/TestFileFactory.java
+++ b/sim/gobs/gobs/test/TestFileFactory.java
@@ -40,12 +40,12 @@ class TestFileFactory
static PriorityQueue<File> generate(double[][] points, int n)
{
Simulator simulator = new Simulator();
-
+
simulator.nodes = new ArrayList<Node>();
simulator.nodes.add(null);
-
+
factory = new PDSIFiles(simulator, points);
-
+
PriorityQueue<File> files =
new PriorityQueue<File>(n+1, new FileSizeComparator());
for (int i = 0; i < n; i++)
@@ -96,14 +96,14 @@ class TestFileFactory
System.out.println("last: " + last);
series.add(last, 1.0);
*/
-
+
return series;
}
public static void main(String[] args)
{
Bits.init();
-
+
n = Integer.parseInt(args[0]);
double[][] points;
@@ -111,11 +111,11 @@ class TestFileFactory
points = PDSIFiles.parse(args[1]);
else
points = hardPoints();
-
+
PriorityQueue<File> files = generate(points, n);
dumpSizes(files);
-
+
XYSeries series = extract(files);
LogPlot.override = new DecimalFormat("0.##E0");
@@ -123,5 +123,5 @@ class TestFileFactory
"size (bytes)", "fraction smaller than size",
"distribution.eps");
System.out.println("plotted");
- }
+ }
}
diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/gobs/util/Bits.java
index 27ca414..7fd6ee5 100644
--- a/sim/gobs/gobs/util/Bits.java
+++ b/sim/gobs/gobs/util/Bits.java
@@ -34,7 +34,7 @@ public class Bits
if (print)
System.out.println("Bits.seed: " + seed);
-
+
return seed;
}
diff --git a/sim/gobs/gobs/util/MapSorter.java b/sim/gobs/gobs/util/MapSorter.java
index 72d4be3..559a756 100644
--- a/sim/gobs/gobs/util/MapSorter.java
+++ b/sim/gobs/gobs/util/MapSorter.java
@@ -25,7 +25,7 @@ public class MapSorter<T>
input.remove(minThing);
result.put(minThing, new Integer(minValue));
}
-
+
return result;
}
}
@@ -35,7 +35,7 @@ public class MapSorter<T>
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);
diff --git a/sim/gobs/gobs/util/Stats.java b/sim/gobs/gobs/util/Stats.java
index 302f21e..6387dc1 100644
--- a/sim/gobs/gobs/util/Stats.java
+++ b/sim/gobs/gobs/util/Stats.java
@@ -36,7 +36,7 @@ public class Stats
{
List<Double> result = new ArrayList<Double>();
int n = data.size();
-
+
int i = 0;
while (true)
{
diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/gobs/util/Tools.java
index e8272a5..4e270e5 100644
--- a/sim/gobs/gobs/util/Tools.java
+++ b/sim/gobs/gobs/util/Tools.java
@@ -96,7 +96,7 @@ public class Tools
public static void bail(String msg)
{
System.out.println(msg);
-
+
// Exit code 1 is a Java error:
System.exit(2);
}
@@ -124,7 +124,7 @@ public class Tools
{
if (file.length() == 0)
return;
-
+
if (path != null)
file = path+file;
java.io.FileInputStream cfg = null;
@@ -191,7 +191,7 @@ public class Tools
public static double[] positives(double[] array)
{
double[] result;
-
+
int c = 0;
int n = array.length;
for (int i = 0; i < n; i++)
diff --git a/sim/gobs/scripts/eol.zsh b/sim/gobs/scripts/eol.zsh
index c361ef7..292b1ae 100755
--- a/sim/gobs/scripts/eol.zsh
+++ b/sim/gobs/scripts/eol.zsh
@@ -3,12 +3,10 @@
files=()
for f in **/*.zsh
do
- if [[ ${f} != $0 ]]
+ if [[ ${f} != $0 ]]
then
files+=${f}
fi
done
-sed -i 's/ $//' **/*.java **/*.cfg ${files}
-
-# print -l **/*.java **/*.cfg ${files}
+sed -i 's/ *$//' **/*.java **/*.cfg ${files}
diff --git a/sim/gobs/wiki/kpv02.cfg b/sim/gobs/wiki/kpv02.cfg
index 6fd2b64..ccc00a6 100644
--- a/sim/gobs/wiki/kpv02.cfg
+++ b/sim/gobs/wiki/kpv02.cfg
@@ -6,7 +6,7 @@ include = kpv_output.cfg kpv_lit_big.cfg
### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
hooks/post-receive
--
Grayskull Repository
1
0
Grayskull Repository branch, master, updated. git-migration-232-g83c293f
by noreply@mcs.anl.gov 04 Dec '09
by noreply@mcs.anl.gov 04 Dec '09
04 Dec '09
A ref change was pushed to the repository containing
the project "Grayskull Repository".
The branch, master has been updated
via 83c293f4366dbee928b9a729fc2ecbaf874b2426 (commit)
via 7b8e0c764e306268ceb0a3a3a0a7e52ed915c961 (commit)
via d2afd99988f75fcbb5d12cc3cb0137e82349cb0a (commit)
via 2e6873d7715468fab9c9a59d6ce7cbaad2b55a08 (commit)
from bef92aefccb155702db11bb283d4a2f9393c89df (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 83c293f4366dbee928b9a729fc2ecbaf874b2426
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:13:55 2009 -0600
EOL fixes to all java, cfg, and scripts.
commit 7b8e0c764e306268ceb0a3a3a0a7e52ed915c961
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:13:07 2009 -0600
Better EOL fixer.
commit d2afd99988f75fcbb5d12cc3cb0137e82349cb0a
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:06:46 2009 -0600
eol.zsh uses ZSH-specific feature.
commit 2e6873d7715468fab9c9a59d6ce7cbaad2b55a08
Author: Justin Wozniak <wozniak(a)mcs.anl.gov>
Date: Fri Dec 4 14:03:52 2009 -0600
Script to fix end-of-line whitespace.
-----------------------------------------------------------------------
Summary of changes:
sim/gobs/examples/gobs.cfg | 12 ++--
sim/gobs/examples/params.cfg | 40 +++++-----
sim/gobs/gobs/plot/AsciiPlot.java | 8 +-
sim/gobs/gobs/plot/LogPlot.java | 16 ++--
sim/gobs/gobs/plot/MultiLogXPlot.java | 16 ++--
sim/gobs/gobs/plot/MultiplePlot.java | 12 ++--
sim/gobs/gobs/plot/SimplePlot.java | 14 ++--
sim/gobs/gobs/sim/Addressable.java | 14 ++--
sim/gobs/gobs/sim/Copy.java | 6 +-
sim/gobs/gobs/sim/Event.java | 6 +-
sim/gobs/gobs/sim/Fault.java | 4 +-
sim/gobs/gobs/sim/File.java | 6 +-
sim/gobs/gobs/sim/KClosest.java | 4 +-
sim/gobs/gobs/sim/Kademlia.java | 4 +-
sim/gobs/gobs/sim/LayoutScheme.java | 2 +-
sim/gobs/gobs/sim/Metric.java | 10 +-
sim/gobs/gobs/sim/Nearest.java | 8 +-
sim/gobs/gobs/sim/Node.java | 20 +++---
sim/gobs/gobs/sim/NodeFactory.java | 2 +-
sim/gobs/gobs/sim/Object.java | 4 +-
sim/gobs/gobs/sim/ObjectStrip.java | 2 +-
sim/gobs/gobs/sim/PDSIFiles.java | 48 ++++++------
sim/gobs/gobs/sim/ParallelRUSH.java | 16 ++--
sim/gobs/gobs/sim/Placement.java | 10 +-
sim/gobs/gobs/sim/PlainFiles.java | 2 +-
sim/gobs/gobs/sim/Primary.java | 2 +-
sim/gobs/gobs/sim/PrimaryStrip.java | 2 +-
sim/gobs/gobs/sim/RUSHp.java | 18 ++--
sim/gobs/gobs/sim/RandomFiles.java | 4 +-
sim/gobs/gobs/sim/RandomNodes.java | 4 +-
sim/gobs/gobs/sim/Rebuild.java | 18 ++--
sim/gobs/gobs/sim/Replicated.java | 20 +++---
sim/gobs/gobs/sim/SimpleNodes.java | 4 +-
sim/gobs/gobs/sim/Simulator.java | 100 ++++++++++++------------
sim/gobs/gobs/sim/SingleObject.java | 4 +-
sim/gobs/gobs/sim/Statistics.java | 2 +-
sim/gobs/gobs/sim/TraceFiles.java | 4 +-
sim/gobs/gobs/sim/VertexGroups.java | 12 ++--
sim/gobs/gobs/sweep/AbstractSweep.java | 20 +++---
sim/gobs/gobs/sweep/Affected01.java | 4 +-
sim/gobs/gobs/sweep/ArraySweep.java | 16 ++--
sim/gobs/gobs/sweep/Balance01.java | 6 +-
sim/gobs/gobs/sweep/Balance02.java | 12 ++--
sim/gobs/gobs/sweep/Decluster01.java | 8 +-
sim/gobs/gobs/sweep/Decluster01P.java | 8 +-
sim/gobs/gobs/sweep/Decluster02.java | 10 +-
sim/gobs/gobs/sweep/Decluster03.java | 10 +-
sim/gobs/gobs/sweep/Decluster04.java | 12 ++--
sim/gobs/gobs/sweep/ParallelSweep.java | 16 ++--
sim/gobs/gobs/sweep/Parallelism01.java | 12 ++--
sim/gobs/gobs/sweep/Rebuild01.java | 14 ++--
sim/gobs/gobs/sweep/Sweep.java | 6 +-
sim/gobs/gobs/test/TestELHS.java | 2 +-
sim/gobs/gobs/test/TestExponential.java | 6 +-
sim/gobs/gobs/test/TestFileFactory.java | 22 +++---
sim/gobs/gobs/util/Bits.java | 6 +-
sim/gobs/gobs/util/BoundedSortedValues.java | 12 ++--
sim/gobs/gobs/util/EnhancedLinkedHashSet.java | 2 +-
sim/gobs/gobs/util/LineReader.java | 4 +-
sim/gobs/gobs/util/MapSorter.java | 4 +-
sim/gobs/gobs/util/Stats.java | 4 +-
sim/gobs/gobs/util/Tools.java | 12 ++--
sim/gobs/scripts/eol.zsh | 14 ++++
sim/gobs/sweeps/Decluster01.cfg | 2 +-
sim/gobs/sweeps/bl01-small.cfg | 32 ++++----
sim/gobs/sweeps/bl01.cfg | 32 ++++----
sim/gobs/sweeps/bl01output.cfg | 4 +-
sim/gobs/sweeps/dc02kpv01.cfg | 4 +-
sim/gobs/sweeps/dc02kpv02.cfg | 4 +-
sim/gobs/sweeps/dc02kpv03.cfg | 4 +-
sim/gobs/sweeps/dc02kpv04.cfg | 4 +-
sim/gobs/sweeps/dc02kpv05.cfg | 4 +-
sim/gobs/sweeps/dc02kpv06.cfg | 4 +-
sim/gobs/sweeps/dc03kpv01.cfg | 4 +-
sim/gobs/sweeps/dc03kpv02.cfg | 4 +-
sim/gobs/sweeps/dc03kpv03.cfg | 4 +-
sim/gobs/sweeps/dc03kpv04.cfg | 4 +-
sim/gobs/sweeps/dc03kpv05.cfg | 4 +-
sim/gobs/sweeps/dc03kpv06.cfg | 4 +-
sim/gobs/sweeps/dc04kpv01.cfg | 4 +-
sim/gobs/sweeps/dc04kpv02.cfg | 4 +-
sim/gobs/sweeps/dc04kpv03.cfg | 4 +-
sim/gobs/sweeps/dc04kpv04.cfg | 4 +-
sim/gobs/sweeps/dc04kpv05.cfg | 4 +-
sim/gobs/sweeps/dc04kpv06.cfg | 4 +-
sim/gobs/sweeps/debug.cfg | 4 +-
sim/gobs/sweeps/decluster02.zsh | 14 ++--
sim/gobs/sweeps/decluster03.zsh | 10 +-
sim/gobs/sweeps/decluster04.zsh | 10 +-
sim/gobs/sweeps/kpv01.cfg | 8 +-
sim/gobs/sweeps/kpv02.cfg | 8 +-
sim/gobs/sweeps/kpv03.cfg | 6 +-
sim/gobs/sweeps/kpv04.cfg | 6 +-
sim/gobs/sweeps/kpv05.cfg | 6 +-
sim/gobs/sweeps/kpv06.cfg | 6 +-
sim/gobs/sweeps/kpv_lit_big.cfg | 20 +++---
sim/gobs/sweeps/kpv_lit_small.cfg | 20 +++---
sim/gobs/sweeps/kpv_output.cfg | 4 +-
sim/gobs/sweeps/kpv_scenario.cfg | 20 +++---
sim/gobs/sweeps/kpv_small.cfg | 20 +++---
sim/gobs/sweeps/output.cfg | 4 +-
sim/gobs/sweeps/parallelism01.zsh | 10 +-
sim/gobs/sweeps/pll01.cfg | 8 +-
sim/gobs/sweeps/pll01case01.cfg | 4 +-
sim/gobs/sweeps/pll01case02.cfg | 6 +-
sim/gobs/sweeps/pll_output.cfg | 6 +-
sim/gobs/sweeps/quick04.cfg | 48 ++++++------
sim/gobs/sweeps/rb01-range.cfg | 46 ++++++------
sim/gobs/sweeps/rb01-small.cfg | 48 ++++++------
sim/gobs/sweeps/rb_output.cfg | 8 +-
sim/gobs/sweeps/system_size_1000.cfg | 20 +++---
sim/gobs/sweeps/system_size_100_1000.cfg | 20 +++---
sim/gobs/sweeps/system_size_20-1000.cfg | 20 +++---
sim/gobs/sweeps/system_size_pdsi_100-1000.cfg | 10 +-
sim/gobs/sweeps/system_size_pdsi_20-40.cfg | 10 +-
sim/gobs/wiki/dc02kpv01.cfg | 4 +-
sim/gobs/wiki/dc02kpv02.cfg | 4 +-
sim/gobs/wiki/dc02kpv03.cfg | 4 +-
sim/gobs/wiki/dc02kpv04.cfg | 4 +-
sim/gobs/wiki/dc02kpv05.cfg | 4 +-
sim/gobs/wiki/dc02kpv06.cfg | 4 +-
sim/gobs/wiki/dc03kpv01.cfg | 4 +-
sim/gobs/wiki/dc03kpv02.cfg | 4 +-
sim/gobs/wiki/dc03kpv03.cfg | 4 +-
sim/gobs/wiki/dc03kpv04.cfg | 4 +-
sim/gobs/wiki/dc03kpv05.cfg | 4 +-
sim/gobs/wiki/dc03kpv06.cfg | 4 +-
sim/gobs/wiki/dc04kpv01.cfg | 4 +-
sim/gobs/wiki/dc04kpv02.cfg | 4 +-
sim/gobs/wiki/dc04kpv03.cfg | 4 +-
sim/gobs/wiki/dc04kpv04.cfg | 4 +-
sim/gobs/wiki/dc04kpv05.cfg | 4 +-
sim/gobs/wiki/dc04kpv06.cfg | 4 +-
sim/gobs/wiki/decluster02.zsh | 12 ++--
sim/gobs/wiki/decluster03.zsh | 10 +-
sim/gobs/wiki/decluster04.zsh | 10 +-
sim/gobs/wiki/kpv01.cfg | 6 +-
sim/gobs/wiki/kpv02.cfg | 8 +-
sim/gobs/wiki/kpv03.cfg | 6 +-
sim/gobs/wiki/kpv04.cfg | 4 +-
sim/gobs/wiki/kpv05.cfg | 4 +-
sim/gobs/wiki/kpv06.cfg | 6 +-
sim/gobs/wiki/kpv_lit_big.cfg | 20 +++---
sim/gobs/wiki/kpv_lit_small.cfg | 20 +++---
sim/gobs/wiki/kpv_output.cfg | 4 +-
sim/gobs/wiki/kpv_scenario.cfg | 20 +++---
sim/gobs/wiki/kpv_small.cfg | 20 +++---
sim/gobs/wiki/rb01-range.cfg | 46 ++++++------
sim/gobs/wiki/rb01-small.cfg | 48 ++++++------
sim/gobs/wiki/rb_output.cfg | 8 +-
sim/gobs/wiki/system_size_100_1000.cfg | 20 +++---
sim/gobs/wiki/system_size_20-1000.cfg | 20 +++---
152 files changed, 836 insertions(+), 822 deletions(-)
create mode 100755 sim/gobs/scripts/eol.zsh
Diff of changes:
diff --git a/sim/gobs/examples/gobs.cfg b/sim/gobs/examples/gobs.cfg
index ddb885c..df10e63 100644
--- a/sim/gobs/examples/gobs.cfg
+++ b/sim/gobs/examples/gobs.cfg
@@ -1,13 +1,13 @@
# Simulator configuration
-# Basics:
+# Basics:
# Print all properties at simulation start
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = true
@@ -16,9 +16,9 @@ print.files = false
# Print load change statistics (true/false)
print.loaddiffs = false
# Print user accesses
-print.accesses = false
+print.accesses = false
-# Statistics:
+# Statistics:
-# Rebuild traffic over time analysis:
+# Rebuild traffic over time analysis:
plot.traffic.interval = 10
diff --git a/sim/gobs/examples/params.cfg b/sim/gobs/examples/params.cfg
index 0f23672..9f5c40f 100644
--- a/sim/gobs/examples/params.cfg
+++ b/sim/gobs/examples/params.cfg
@@ -1,21 +1,21 @@
### Parameters for GOBS Simulator run
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 16
-# Number of servers:
+# Number of servers:
nodes = 128
-# Number of files:
+# Number of files:
files = 1000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of accesses:
+# Number of accesses:
reads = 10
writes = 0
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
#impl.placement = Kademlia
#impl.placement = Nearest
@@ -24,36 +24,36 @@ impl.placement = VertexGroups
VertexGroupPrefix = 6
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 140
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
+# Number of objects per file:
file.width = 3
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
diff --git a/sim/gobs/gobs/plot/AsciiPlot.java b/sim/gobs/gobs/plot/AsciiPlot.java
index 27e96e8..54a95a8 100644
--- a/sim/gobs/gobs/plot/AsciiPlot.java
+++ b/sim/gobs/gobs/plot/AsciiPlot.java
@@ -68,13 +68,13 @@ public class AsciiPlot
writer.println("# DESCRIPTION: " + 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));
}
- }
-
+ }
+
/**
Debugging only.
*/
@@ -85,7 +85,7 @@ public class AsciiPlot
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/LogPlot.java b/sim/gobs/gobs/plot/LogPlot.java
index 996645d..595dd08 100644
--- a/sim/gobs/gobs/plot/LogPlot.java
+++ b/sim/gobs/gobs/plot/LogPlot.java
@@ -34,7 +34,7 @@ import org.jfree.data.xy.XYSeriesCollection;
public class LogPlot
{
public static NumberFormat override = null;
-
+
/**
Generate simple plot.
@param series The x,y data.
@@ -53,7 +53,7 @@ public class LogPlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -79,9 +79,9 @@ public class LogPlot
}
final XYDataset collection = new XYSeriesCollection(series);
-
+
final boolean withLegend = false;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -106,7 +106,7 @@ public class LogPlot
// font = font.deriveFont(12.0f);
// domainAxis.setTickLabelFont(font);
plot.setDomainAxis(domainAxis);
-
+
chart.draw(g2d, rectangle);
try
@@ -117,8 +117,8 @@ public class LogPlot
{
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -133,7 +133,7 @@ public class LogPlot
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/plot/MultiLogXPlot.java b/sim/gobs/gobs/plot/MultiLogXPlot.java
index e7efeae..c2899a3 100644
--- a/sim/gobs/gobs/plot/MultiLogXPlot.java
+++ b/sim/gobs/gobs/plot/MultiLogXPlot.java
@@ -52,7 +52,7 @@ public class MultiLogXPlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -75,7 +75,7 @@ public class MultiLogXPlot
}
final boolean withLegend = true;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -99,11 +99,11 @@ public class MultiLogXPlot
domainAxis.setLabelFont(labelFont);
domainAxis.setTickLabelFont(tickFont);
plot.setDomainAxis(domainAxis);
-
+
chart.draw(g2d, rectangle);
System.out.println("plotted");
-
+
try
{
g2d.finish();
@@ -113,8 +113,8 @@ public class MultiLogXPlot
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -124,7 +124,7 @@ public class MultiLogXPlot
public static void main(String[] args)
{
Bits.init();
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
int count = 0;
for (int j = 0; j < 3; j++)
@@ -136,7 +136,7 @@ public class MultiLogXPlot
}
collection.addSeries(series);
}
-
+
plot(collection, "TITLE", "XL", "YL", "tmp.eps");
}
}
diff --git a/sim/gobs/gobs/plot/MultiplePlot.java b/sim/gobs/gobs/plot/MultiplePlot.java
index 11cd595..86ec5e6 100644
--- a/sim/gobs/gobs/plot/MultiplePlot.java
+++ b/sim/gobs/gobs/plot/MultiplePlot.java
@@ -51,7 +51,7 @@ public class MultiplePlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -77,7 +77,7 @@ public class MultiplePlot
}
final boolean withLegend = true;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -99,8 +99,8 @@ public class MultiplePlot
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -110,7 +110,7 @@ public class MultiplePlot
public static void main(String[] args)
{
Bits.init();
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
int count = 0;
for (int j = 0; j < 3; j++)
@@ -122,7 +122,7 @@ public class MultiplePlot
}
collection.addSeries(series);
}
-
+
plot(collection, "TITLE", "XL", "YL", "tmp.eps");
}
}
diff --git a/sim/gobs/gobs/plot/SimplePlot.java b/sim/gobs/gobs/plot/SimplePlot.java
index 5bec4d5..cf9d596 100644
--- a/sim/gobs/gobs/plot/SimplePlot.java
+++ b/sim/gobs/gobs/plot/SimplePlot.java
@@ -49,7 +49,7 @@ public class SimplePlot
int w = 400;
int h = 400;
-
+
try
{
out = new FileOutputStream(output);
@@ -75,9 +75,9 @@ public class SimplePlot
}
final XYDataset collection = new XYSeriesCollection(series);
-
+
final boolean withLegend = false;
-
+
JFreeChart chart =
ChartFactory.createXYLineChart
(title, xlabel, ylabel, collection,
@@ -91,7 +91,7 @@ public class SimplePlot
renderer.setBasePaint(Color.BLACK);
renderer.setBaseFillPaint(Color.BLACK);
plot.setRenderer(renderer);
-
+
chart.draw(g2d, rectangle);
try
@@ -102,8 +102,8 @@ public class SimplePlot
{
System.out.println("Err!");
}
- IOUtils.closeQuietly(out);
-
+ IOUtils.closeQuietly(out);
+
return true;
}
@@ -118,7 +118,7 @@ public class SimplePlot
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
index f29abb3..627386c 100644
--- a/sim/gobs/gobs/sim/Addressable.java
+++ b/sim/gobs/gobs/sim/Addressable.java
@@ -24,7 +24,7 @@ class Addressable
{
this.id = id;
}
-
+
/**
Does this Addressable start with the given bit prefix?
*/
@@ -44,12 +44,12 @@ class Addressable
*/
int[] bitArray(int B)
{
-
+
// if (array != null)
// return array;
-
+
// int[] result =
- return bitArray(B, id);
+ return bitArray(B, id);
}
/**
@@ -60,7 +60,7 @@ class Addressable
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))
@@ -79,7 +79,7 @@ class Addressable
{
return bitString(B, id);
}
-
+
/**
Convert the given address to a String of 0s and 1s.
*/
@@ -132,7 +132,7 @@ class Addressable
{
return id.compareTo(other.id);
}
-
+
/*
Debugging only.
diff --git a/sim/gobs/gobs/sim/Copy.java b/sim/gobs/gobs/sim/Copy.java
index b313774..1a20b3c 100644
--- a/sim/gobs/gobs/sim/Copy.java
+++ b/sim/gobs/gobs/sim/Copy.java
@@ -16,7 +16,7 @@ class Copy
double start = 0;
static DecimalFormat df = new DecimalFormat("0.00");
-
+
Copy(gobs.sim.Object object, Node source, Node destination)
{
assert (source != null);
@@ -32,12 +32,12 @@ class Copy
if (Simulator.current.bool("print.rebuilds"))
System.out.println("start: " + log());
}
-
+
public String toString()
{
return log();
}
-
+
String log()
{
StringBuilder sb = new StringBuilder(128);
diff --git a/sim/gobs/gobs/sim/Event.java b/sim/gobs/gobs/sim/Event.java
index 594f750..8874ed8 100644
--- a/sim/gobs/gobs/sim/Event.java
+++ b/sim/gobs/gobs/sim/Event.java
@@ -16,10 +16,10 @@ class Event
Format string used by Event, subclasses, and Rebuild.
*/
static DecimalFormat df = new DecimalFormat("0.00");
-
+
Event()
{}
-
+
Event(double finish)
{
this.finish = finish;
@@ -40,4 +40,4 @@ class Event
{
return log();
}
-}
+}
diff --git a/sim/gobs/gobs/sim/Fault.java b/sim/gobs/gobs/sim/Fault.java
index 2c4e52b..dd236a9 100644
--- a/sim/gobs/gobs/sim/Fault.java
+++ b/sim/gobs/gobs/sim/Fault.java
@@ -6,7 +6,7 @@ class Fault
{
Fault()
{}
-
+
Fault(double finish)
{
this.finish = finish;
@@ -26,4 +26,4 @@ class Fault
{
return log();
}
-}
+}
diff --git a/sim/gobs/gobs/sim/File.java b/sim/gobs/gobs/sim/File.java
index 09d8007..59d22c2 100644
--- a/sim/gobs/gobs/sim/File.java
+++ b/sim/gobs/gobs/sim/File.java
@@ -18,7 +18,7 @@ public class File
int id;
static int unique = 0;
-
+
Collection<gobs.sim.Object> objects;
File(long size, int strip, int width, int replicas)
@@ -30,7 +30,7 @@ public class File
id = unique++;
}
-
+
void link(Collection<gobs.sim.Object> objects)
{
this.objects = objects;
@@ -48,7 +48,7 @@ public class File
return (1 + strips/width)*strip;
return (strips/width)*strip;
}
-
+
public String toString(Simulator simulator)
{
StringBuilder sb =
diff --git a/sim/gobs/gobs/sim/KClosest.java b/sim/gobs/gobs/sim/KClosest.java
index 9985aae..f858710 100644
--- a/sim/gobs/gobs/sim/KClosest.java
+++ b/sim/gobs/gobs/sim/KClosest.java
@@ -18,7 +18,7 @@ abstract class KClosest
{
super(simulator, source);
}
-
+
/**
Obtain a list of nodes that may host the given object
with respect to the replica placement scheme used here.
@@ -27,7 +27,7 @@ abstract class KClosest
{
BoundedSortedValues<Node,BigInteger> sites =
new BoundedSortedValues<Node,BigInteger>(object.replicas);
-
+
for (Node node : nodes)
{
BigInteger d = distance(object.id, node.id);
diff --git a/sim/gobs/gobs/sim/Kademlia.java b/sim/gobs/gobs/sim/Kademlia.java
index cb99041..bbdc8c3 100644
--- a/sim/gobs/gobs/sim/Kademlia.java
+++ b/sim/gobs/gobs/sim/Kademlia.java
@@ -17,12 +17,12 @@ public class Kademlia
{
super(simulator, source);
}
-
+
public BigInteger distance(BigInteger id1, BigInteger id2)
{
return id1.xor(id2);
}
-
+
/**
XOR calculator.
*/
diff --git a/sim/gobs/gobs/sim/LayoutScheme.java b/sim/gobs/gobs/sim/LayoutScheme.java
index 355dddf..ec28942 100644
--- a/sim/gobs/gobs/sim/LayoutScheme.java
+++ b/sim/gobs/gobs/sim/LayoutScheme.java
@@ -19,6 +19,6 @@ abstract class LayoutScheme
BigInteger two = new BigInteger("2");
M = two.pow(B);
}
-
+
abstract List<SingleObject> generate(int fileSize, int objSize);
}
diff --git a/sim/gobs/gobs/sim/Metric.java b/sim/gobs/gobs/sim/Metric.java
index 451a46c..1151095 100644
--- a/sim/gobs/gobs/sim/Metric.java
+++ b/sim/gobs/gobs/sim/Metric.java
@@ -18,12 +18,12 @@ public abstract class Metric
}
public abstract BigInteger distance(BigInteger id1, BigInteger id2);
-
+
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)
@@ -51,7 +51,7 @@ public abstract class Metric
if (source == null)
return null;
-
+
Copy result = regimen(object, primaryNode, primaryLocation,
source, sites);
logCopy(result);
@@ -127,7 +127,7 @@ public abstract class Metric
System.out.println("regimen(): could not handle: " + object);
return null;
}
-
+
return new Copy(payload, source, destination);
}
@@ -135,7 +135,7 @@ public abstract class Metric
{
return sites.get(sites.size()-1);
}
-
+
void logCopy(Copy copy)
{
if (copy == null)
diff --git a/sim/gobs/gobs/sim/Nearest.java b/sim/gobs/gobs/sim/Nearest.java
index b851b71..c688b65 100644
--- a/sim/gobs/gobs/sim/Nearest.java
+++ b/sim/gobs/gobs/sim/Nearest.java
@@ -41,10 +41,10 @@ public class Nearest
BigInteger d1 = b.subtract(a);
BigInteger d2 = M.subtract(b).add(a);
-
+
return (d2.compareTo(d1) < 0) ? d2 : d1;
}
-
+
/**
Wrap-around calculator.
*/
@@ -55,9 +55,9 @@ public class Nearest
int B = 10;
BigInteger M = new BigInteger("10");
-
+
Nearest nearest = new Nearest(null, ReplicaSource.PRIMARY);
-
+
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 9626051..20d404e 100644
--- a/sim/gobs/gobs/sim/Node.java
+++ b/sim/gobs/gobs/sim/Node.java
@@ -22,7 +22,7 @@ public class Node
Counter for number of pushes during rebuilds.
*/
int pushes = 0;
-
+
/**
Counter for number of pulls during rebuilds.
*/
@@ -32,20 +32,20 @@ public class Node
Counter for number of user read/write accesses.
*/
int accesses = 0;
-
+
Node(BigInteger id)
{
super(id);
objects = new HashMap<BigInteger,gobs.sim.Object>();
}
-
+
void add(gobs.sim.Object object)
{
Tools.check(! objects.containsKey(object.id),
"Node.add(): " + id + " contains " +
object.toString(Simulator.current) + "\n" +
display());
-
+
objects.put(object.id, object);
}
@@ -56,7 +56,7 @@ public class Node
{
return objects.get(id);
}
-
+
/**
Remove and return an gobs.sim.Object with this id.
*/
@@ -70,9 +70,9 @@ public class Node
*/
public Collection<gobs.sim.Object> collection()
{
- return objects.values();
+ return objects.values();
}
-
+
/**
Act as though this Node's disk failed and was replaced.
Essentially just empties {@link #objects}.
@@ -81,7 +81,7 @@ public class Node
{
objects.clear();
}
-
+
/**
@return true iff this node has an object with the given id.
*/
@@ -103,7 +103,7 @@ public class Node
return true;
return false;
}
-
+
String loadReport(int B)
{
return bitString(B) + " " + objects.size();
@@ -113,7 +113,7 @@ public class Node
{
return display(Simulator.current);
}
-
+
public String display(Simulator simulator)
{
StringBuffer result = new StringBuffer(objects.size()*10);
diff --git a/sim/gobs/gobs/sim/NodeFactory.java b/sim/gobs/gobs/sim/NodeFactory.java
index 0bb7b46..82be327 100644
--- a/sim/gobs/gobs/sim/NodeFactory.java
+++ b/sim/gobs/gobs/sim/NodeFactory.java
@@ -10,7 +10,7 @@ import java.util.*;
public abstract class NodeFactory
{
Simulator simulator;
-
+
NodeFactory(Simulator simulator)
{
this.simulator = simulator;
diff --git a/sim/gobs/gobs/sim/Object.java b/sim/gobs/gobs/sim/Object.java
index 7f421a8..455a216 100644
--- a/sim/gobs/gobs/sim/Object.java
+++ b/sim/gobs/gobs/sim/Object.java
@@ -6,7 +6,7 @@ import java.math.BigInteger;
/**
* Tags objects.
* */
-
+
public abstract class Object
extends Addressable
{
@@ -16,7 +16,7 @@ public abstract class Object
this.size = size;
this.replicas = replicas;
}
-
+
/**
Simulated size in bytes.
*/
diff --git a/sim/gobs/gobs/sim/ObjectStrip.java b/sim/gobs/gobs/sim/ObjectStrip.java
index 19e990b..25de536 100644
--- a/sim/gobs/gobs/sim/ObjectStrip.java
+++ b/sim/gobs/gobs/sim/ObjectStrip.java
@@ -22,7 +22,7 @@ class ObjectStrip
super(id, size, replicas);
this.number = number;
}
-
+
PrimaryStrip toPrimaryStrip()
{
// return new Primary(B, id, size, replicas);
diff --git a/sim/gobs/gobs/sim/PDSIFiles.java b/sim/gobs/gobs/sim/PDSIFiles.java
index b0aa6c5..acbd929 100644
--- a/sim/gobs/gobs/sim/PDSIFiles.java
+++ b/sim/gobs/gobs/sim/PDSIFiles.java
@@ -23,7 +23,7 @@ import static java.lang.Math.*;
* 60% would have size in 1K-1M, and 20% would have size in 1M-1G.
* Thus the first segment is implied ([[0.0,0]]).
* The other ranges are interpolated in a piecewise exponential fashion;
- * the coefficients are stored in k and m.
+ * the coefficients are stored in k and m.
* */
public class PDSIFiles
@@ -38,7 +38,7 @@ public class PDSIFiles
A gibibyte.
*/
public static double GB = pow(1024, 3);
-
+
/**
A mebibyte.
*/
@@ -53,7 +53,7 @@ public class PDSIFiles
Pattern for suffix matching in {@link #bytes}.
*/
static Pattern pattern = Pattern.compile("[a-zA-Z]");
-
+
public Simulator simulator;
/**
@@ -70,9 +70,9 @@ public class PDSIFiles
Interpolant coefficients for m*e^(kt).
*/
double[] m;
-
+
/**
- Obtain file distribution by interpolating points.
+ Obtain file distribution by interpolating points.
@param simulator Required only to get node count
@param points points(i,j) indicates that fraction i
has size below j
@@ -96,12 +96,12 @@ public class PDSIFiles
{
this(simulator, parse(simulator.string("PDSIFilesPoints")));
}
-
+
/**
Parse input data points for interpolation.
Commas separate x,y numbers, semicolons separate
pairs, suffixes K, M, G, T, are valid for kibi, mibi,
- gibi, and tebi-bytes.
+ gibi, and tebi-bytes.
Example: "0.2,1024;1.0,1M" gives [[0.2][1024]][[1.0][1048576]].
*/
public static double[][] parse(String data)
@@ -128,7 +128,7 @@ public class PDSIFiles
/**
Parse K, M, G, and T byte suffixes.
- Example: "3.1M" gives 3250586.0 .
+ Example: "3.1M" gives 3250586.0 .
*/
static double bytes(String value)
{
@@ -151,14 +151,14 @@ public class PDSIFiles
double d = Double.parseDouble(v);
return Math.round(d*s);
}
-
+
static void dumpPoints(double[][] points)
{
for (int i = 0; i < points.length; i++)
System.out.println("" + i + ": " + points[i][0] + "," +
points[i][1]);
}
-
+
double[][] copy2s(double[][] src)
{
double[][] dest = new double[src.length][];
@@ -175,24 +175,24 @@ public class PDSIFiles
}
return dest;
}
-
+
/**
Coefficients k[i],m[i] interpolate between
- data points[i], points[i+1].
+ data points[i], points[i+1].
*/
public void interpolate()
{
k = new double[points.length-1];
m = new double[points.length-1];
-
+
for (int i = 1; i < points.length; i++)
{
double p = points[i-1][0];
double q = points[i][0];
-
+
double a = points[i-1][1];
double b = points[i][1];
-
+
k[i-1] = log(b/a)/(q-p);
m[i-1] = a/exp(k[i-1]*p);
@@ -203,12 +203,12 @@ public class PDSIFiles
/**
Produce piecewise linear interpolant between
- surrounding data points.
+ surrounding data points.
*/
public File get()
{
long size = randomSize();
-
+
int width;
int strip;
int replicas;
@@ -224,7 +224,7 @@ public class PDSIFiles
strip = (int) size;
replicas = 3;
}
-
+
return new File(size, strip, width, replicas);
}
@@ -245,7 +245,7 @@ public class PDSIFiles
}
return size;
}
-
+
int range(double d)
{
for (int i = 0; i < points.length; i++)
@@ -289,10 +289,10 @@ public class PDSIFiles
public static void debugInterpolation(String[] args)
{
long n = Long.parseLong(args[0]);
-
+
Bits.init();
Simulator simulator = new Simulator();
-
+
simulator.nodes = new ArrayList<Node>();
simulator.nodes.add(null);
@@ -307,7 +307,7 @@ public class PDSIFiles
points[3][1] = 64.0*1024*1024;
points[4][0] = 1.0;
points[4][1] = 1024.0*1024*1024*1024;
-
+
PDSIFiles factory = new PDSIFiles(simulator, points);
// generateCount(n);
@@ -320,12 +320,12 @@ public class PDSIFiles
// double d = bytes(v);
// System.out.println(d);
-
+
double[][] p = parse(v);
dumpPoints(p);
}
-
+
/**
Debugging only.
*/
diff --git a/sim/gobs/gobs/sim/ParallelRUSH.java b/sim/gobs/gobs/sim/ParallelRUSH.java
index 06f2bc6..18a6953 100644
--- a/sim/gobs/gobs/sim/ParallelRUSH.java
+++ b/sim/gobs/gobs/sim/ParallelRUSH.java
@@ -23,7 +23,7 @@ public class ParallelRUSH
The certainty that our primes are really prime.
*/
int certainty = Integer.MAX_VALUE;
-
+
/**
@param simulator Reference to the Simulator
@param source A ReplicaSource.
@@ -74,7 +74,7 @@ public class ParallelRUSH
node.add(object.toSecondaryStrip(primary));
}
}
-
+
List<Node> sites(gobs.sim.Object object, List<Node> nodes)
{
if (object instanceof ObjectStrip)
@@ -109,10 +109,10 @@ public class ParallelRUSH
return null;
}
*/
-
+
/**
<a href="http://wiki.mcs.anl.gov/radix/grayskull/index.php/Stripe_placement_and_rebu…">From the wiki.</a>
-
+
@param x The object id (key).
@param i The strip number
@param r The replica number (in [0,x.replicas)).
@@ -138,7 +138,7 @@ public class ParallelRUSH
BigInteger irjp = big_i.multiply(big_R).add(big_r)
.multiply(big_p);
- BigInteger v = x.add(big_z).add(irjp);
+ BigInteger v = x.add(big_z).add(irjp);
BigInteger z_ = big_z.add(irjp).mod(big_m);
int index = -1;
@@ -158,7 +158,7 @@ public class ParallelRUSH
// place(object, nodes);
return null;
}
-
+
/**
Advance the class member rng by j steps.
*/
@@ -186,7 +186,7 @@ public class ParallelRUSH
boolean result = i.isProbablePrime(certainty);
return result;
}
-
+
/**
Prime checker.
*/
@@ -201,7 +201,7 @@ public class ParallelRUSH
Simulator simulator = new Simulator();
RUSHp foop = new RUSHp(simulator, ReplicaSource.LAST);
-
+
long start = System.currentTimeMillis();
System.out.println("is prime? " + foop.isPrime(i));
long stop = System.currentTimeMillis();
diff --git a/sim/gobs/gobs/sim/Placement.java b/sim/gobs/gobs/sim/Placement.java
index 7bdb8a3..787b891 100644
--- a/sim/gobs/gobs/sim/Placement.java
+++ b/sim/gobs/gobs/sim/Placement.java
@@ -19,7 +19,7 @@ public abstract class Placement
Placement(Simulator simulator)
{
this.simulator = simulator;
-
+
BigInteger two = new BigInteger("2");
M = two.pow(simulator.B);
}
@@ -45,7 +45,7 @@ public abstract class Placement
throw new IllegalArgumentException();
return result;
}
-
+
/**
Obtain a Copy that will repair the loss of this SingleObject.
*/
@@ -67,7 +67,7 @@ public abstract class Placement
{
copy.destination.add(copy.object);
}
-
+
/**
Simply place each object on a node.
*/
@@ -101,7 +101,7 @@ public abstract class Placement
int index = Bits.nextInt(sites.size());
return sites.get(index);
}
-
+
void printRebuild(gobs.sim.Object object,
Node source, Node destination)
{
@@ -111,7 +111,7 @@ public abstract class Placement
source.name(simulator) + " -> " +
destination.name(simulator));
}
-
+
/**
New id anywhere in the address space.
*/
diff --git a/sim/gobs/gobs/sim/PlainFiles.java b/sim/gobs/gobs/sim/PlainFiles.java
index d92701b..ecef838 100644
--- a/sim/gobs/gobs/sim/PlainFiles.java
+++ b/sim/gobs/gobs/sim/PlainFiles.java
@@ -15,7 +15,7 @@ class PlainFiles
int strip;
int width;
int replicas;
-
+
PlainFiles(Simulator simulator)
{
size = simulator.integer("file.size");
diff --git a/sim/gobs/gobs/sim/Primary.java b/sim/gobs/gobs/sim/Primary.java
index 9c3d335..15327b8 100644
--- a/sim/gobs/gobs/sim/Primary.java
+++ b/sim/gobs/gobs/sim/Primary.java
@@ -26,7 +26,7 @@ class Primary
{
return toSecondary(this);
}
-
+
public String toString(Simulator simulator)
{
return name(simulator) + "[P](" + size + ")";
diff --git a/sim/gobs/gobs/sim/PrimaryStrip.java b/sim/gobs/gobs/sim/PrimaryStrip.java
index 818a044..f150c2a 100644
--- a/sim/gobs/gobs/sim/PrimaryStrip.java
+++ b/sim/gobs/gobs/sim/PrimaryStrip.java
@@ -14,7 +14,7 @@ class PrimaryStrip
{
super(id, number, size, replicas);
}
-
+
public String toString(Simulator simulator)
{
return name(simulator) + "[P][" + number + "](" + size + ")";
diff --git a/sim/gobs/gobs/sim/RUSHp.java b/sim/gobs/gobs/sim/RUSHp.java
index 25a6abd..18ba3ed 100644
--- a/sim/gobs/gobs/sim/RUSHp.java
+++ b/sim/gobs/gobs/sim/RUSHp.java
@@ -24,7 +24,7 @@ public class RUSHp
The certainty that our primes are really prime.
*/
int certainty = Integer.MAX_VALUE;
-
+
/**
@param simulator Reference to the Simulator
@param source A ReplicaSource.
@@ -33,7 +33,7 @@ public class RUSHp
{
super(simulator, source);
}
-
+
List<Node> sites(gobs.sim.Object object, List<Node> nodes)
{
if (object instanceof SingleObject)
@@ -50,7 +50,7 @@ public class RUSHp
Set<Node> sites = new HashSet<Node>();
Node primary = lookup(object.id, 0, object.replicas, nodes);
-
+
for (int i = 1; i <= object.replicas-1; i++)
{
Node node = lookup(object.id, i, object.replicas, nodes);
@@ -58,7 +58,7 @@ public class RUSHp
if (node != primary)
sites.add(node);
}
-
+
result.addAll(sites);
result.add(primary);
return result;
@@ -66,7 +66,7 @@ public class RUSHp
/**
Taken from paper Figure 3.
-
+
@param x The object id (key).
@param r The replica number (in [0,x.replicas)).
@param R The number of replicas for x (x.replicas).
@@ -88,7 +88,7 @@ public class RUSHp
BigInteger big_m = new BigInteger(""+m);
BigInteger rp = big_r.multiply(big_p);
- BigInteger v = x.add(big_z).add(rp);
+ BigInteger v = x.add(big_z).add(rp);
BigInteger z_ = big_z.add(rp).mod(big_m);
int index = -1;
@@ -108,7 +108,7 @@ public class RUSHp
// place(object, nodes);
return null;
}
-
+
/**
Advance the class member rng by j steps.
*/
@@ -135,7 +135,7 @@ public class RUSHp
BigInteger i = new BigInteger(""+z);
return i.isProbablePrime(certainty);
}
-
+
/**
Prime checker.
*/
@@ -150,7 +150,7 @@ public class RUSHp
Simulator simulator = new Simulator();
RUSHp foop = new RUSHp(simulator, ReplicaSource.LAST);
-
+
long start = System.currentTimeMillis();
System.out.println("is prime? " + foop.isPrime(i));
long stop = System.currentTimeMillis();
diff --git a/sim/gobs/gobs/sim/RandomFiles.java b/sim/gobs/gobs/sim/RandomFiles.java
index a4858bf..fe974e8 100644
--- a/sim/gobs/gobs/sim/RandomFiles.java
+++ b/sim/gobs/gobs/sim/RandomFiles.java
@@ -15,7 +15,7 @@ import gobs.util.Bits;
* Small files use replicas=3.
*
* Required properties settings: filewidth, filebigmax, filebigmin,
- * filesmallmax, filesmallmin.
+ * filesmallmax, filesmallmin.
* */
class RandomFiles
@@ -28,7 +28,7 @@ class RandomFiles
int strip;
int width;
int replicas;
-
+
RandomFiles(Simulator simulator)
{
sizebigmax = simulator.integer("filebigmax");
diff --git a/sim/gobs/gobs/sim/RandomNodes.java b/sim/gobs/gobs/sim/RandomNodes.java
index e6fab78..9803cf5 100644
--- a/sim/gobs/gobs/sim/RandomNodes.java
+++ b/sim/gobs/gobs/sim/RandomNodes.java
@@ -22,14 +22,14 @@ class RandomNodes
{
for (int i = 0; i < count; i++)
{
- BigInteger id;
+ BigInteger id;
Node node;
int tries = 0;
do
{
if (tries++ >= simulator.maxTries)
Tools.bail("Could not assign unique node id!");
-
+
id = new BigInteger(simulator.B, Bits.rng);
node = new Node(id);
}
diff --git a/sim/gobs/gobs/sim/Rebuild.java b/sim/gobs/gobs/sim/Rebuild.java
index bbc330d..545c68e 100644
--- a/sim/gobs/gobs/sim/Rebuild.java
+++ b/sim/gobs/gobs/sim/Rebuild.java
@@ -9,7 +9,7 @@ import gobs.util.*;
/**
Manages a rebuild after a fault.
Is only executed ({@link #rebuild}) once. Thus rebuild variables
- can logically be declared at class level.
+ can logically be declared at class level.
*/
class Rebuild
{
@@ -24,7 +24,7 @@ class Rebuild
Simulated time at which Rebuild ended.
*/
double finish = -1;
-
+
/**
Rebuild rate in bytes/sec.
*/
@@ -49,13 +49,13 @@ class Rebuild
Contains inflight Copies and the next Fault.
*/
NavigableSet<Event> inflight = new TreeSet<Event>();
-
+
/**
The fault that will occur after this Rebuild has started.
May or may not interrupt this Rebuild.
*/
Fault fault;
-
+
Rebuild(Simulator simulator)
{
this.simulator = simulator;
@@ -69,7 +69,7 @@ class Rebuild
fault = new Fault(t);
inflight.add(fault);
}
-
+
/**
Actually perform the rebuild.
TODO: Handle cases where more than one copy is needed.
@@ -150,7 +150,7 @@ class Rebuild
todo.remove(copy.object);
done.add(copy.object);
}
-
+
int loadAt(double t)
{
int result = 0;
@@ -163,7 +163,7 @@ class Rebuild
}
return result;
}
-
+
/**
Debugging only.
*/
@@ -188,7 +188,7 @@ class Rebuild
Collections.shuffle(result, Bits.rng);
return result;
}
-
+
Copy select(Queue<Copy> todo, Set<Node> busy)
throws NoSuchElementException
{
@@ -204,5 +204,5 @@ class Rebuild
}
}
return null;
- }
+ }
}
diff --git a/sim/gobs/gobs/sim/Replicated.java b/sim/gobs/gobs/sim/Replicated.java
index a65ddf6..4445fe7 100644
--- a/sim/gobs/gobs/sim/Replicated.java
+++ b/sim/gobs/gobs/sim/Replicated.java
@@ -22,7 +22,7 @@ public abstract class Replicated
{
super(simulator);
this.replicaSource = source;
-
+
BigInteger two = new BigInteger("2");
M = two.pow(simulator.B);
}
@@ -55,7 +55,7 @@ public abstract class Replicated
}
// public abstract Node lookup(BigInteger id, List<Node> nodes);
-
+
public void place(Collection<Object> objects, List<Node> nodes)
{
for (Object object : objects)
@@ -100,7 +100,7 @@ public abstract class Replicated
(this.getClass().toString() +
": does not support place(ObjectStrip)!");
}
-
+
abstract Copy regimen(SingleObject object, List<Node> nodes);
/**
@@ -120,19 +120,19 @@ public abstract class Replicated
if (result == null ||
! result.contains(object.id))
result = randomSource(object, sites);
-
+
if (result == null)
simulator.lost(object);
else
sites.remove(result);
-
+
return result;
}
Node randomSource(SingleObject object, List<Node> sites)
{
List<Node> valid = new ArrayList<Node>(sites.size());
-
+
for (Node node : sites)
if (node.contains(object.id))
valid.add(node);
@@ -162,7 +162,7 @@ public abstract class Replicated
Node destination = null;
int origsize = sites.size();
-
+
while (sites.size() > 0)
{
int r = Bits.nextInt(sites.size());
@@ -173,7 +173,7 @@ public abstract class Replicated
break;
}
}
-
+
if (destination == null)
System.out.println("No destination: " + object);
@@ -189,10 +189,10 @@ public abstract class Replicated
object);
System.out.println("sites.size() : " + sites);
simulator.printNodeObjects(sites);
-
+
Tools.bail("Exit!");
}
-
+
/**
New id anywhere in the address space.
*/
diff --git a/sim/gobs/gobs/sim/SimpleNodes.java b/sim/gobs/gobs/sim/SimpleNodes.java
index afaa8a7..62edd6a 100644
--- a/sim/gobs/gobs/sim/SimpleNodes.java
+++ b/sim/gobs/gobs/sim/SimpleNodes.java
@@ -26,11 +26,11 @@ public class SimpleNodes
BigInteger bigM = new BigInteger("" + simulator.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);
diff --git a/sim/gobs/gobs/sim/Simulator.java b/sim/gobs/gobs/sim/Simulator.java
index 0347a34..56d8777 100644
--- a/sim/gobs/gobs/sim/Simulator.java
+++ b/sim/gobs/gobs/sim/Simulator.java
@@ -31,7 +31,7 @@ public class Simulator
int writes;
double mttf;
-
+
public Placement placer;
public NodeFactory hub;
public FileFactory factory;
@@ -45,17 +45,17 @@ public class Simulator
Time at which to terminate, if set.
*/
double totalTime;
-
+
/**
Determines what will trigger the termination of this Simulation.
*/
Termination mode;
-
+
/**
Address id display mode.
*/
Addressable.Display display = Addressable.Display.BITS;
-
+
/**
Useful for helpful error messages:
*/
@@ -70,7 +70,7 @@ public class Simulator
Directory in which to look for properties files:
*/
String path = null;
-
+
public List<Node> nodes;
EnhancedLinkedHashSet<gobs.sim.Object> objects =
new EnhancedLinkedHashSet<gobs.sim.Object>();
@@ -95,10 +95,10 @@ public class Simulator
Current rebuild in progress.
*/
Rebuild currentRebuild = null;
-
+
static Simulator current;
static final int maxTries = 10;
-
+
DecimalFormat df = new DecimalFormat("0.00");
/**
@@ -118,7 +118,7 @@ public class Simulator
for MTTF samples.
*/
Exponential exponential;
-
+
public Simulator()
{
File.unique = 0;
@@ -143,7 +143,7 @@ public class Simulator
"<name>=<value>* <file.cfg>*");
Simulator simulator = new Simulator();
- for (int i = 0; i < args.length; i++)
+ for (int i = 0; i < args.length; i++)
{
if (args[i].equals("-p"))
{
@@ -166,7 +166,7 @@ public class Simulator
Bits.init(simulator.integer("seed"));
else
Bits.init(true);
-
+
simulator.execute();
}
@@ -176,11 +176,11 @@ public class Simulator
path = path+"/";
this.path = path;
}
-
+
public void execute()
{
Simulator.current = this;
-
+
setup();
System.out.println("\nexecute:");
@@ -191,7 +191,7 @@ public class Simulator
performAccesses();
induceFaults();
performAccesses();
-
+
computeStatistics();
Simulator.current = null;
@@ -249,7 +249,7 @@ public class Simulator
double lambda = 1.0/mttf;
exponential = new Exponential(lambda, engine);
}
-
+
void setupFileFactory()
{
String factoryName = properties.getProperty("impl.filefactory");
@@ -305,7 +305,7 @@ public class Simulator
M = placer.M;
}
-
+
void setupNodes()
{
String nodesName = string("impl.nodefactory");
@@ -315,10 +315,10 @@ public class Simulator
hub = new SimpleNodes(this);
else
bail("Bad NodeFactory name: " + nodesName);
-
+
nodes = new ArrayList<Node>(N);
}
-
+
void initializeNodes()
{
hub.generate(N, nodes);
@@ -336,7 +336,7 @@ public class Simulator
if (bool("print.files"))
printFiles();
}
-
+
void allocateFiles(int count)
{
for (int i = 0; i < count; i++)
@@ -354,7 +354,7 @@ public class Simulator
// System.out.println("allocateFile(): iterate: " + tries);
if (tries++ >= maxTries)
bail("Could not allocate new object ids!");
-
+
set = placer.allocateFile(file, nodes);
}
while (objects.containsAny(set));
@@ -367,9 +367,9 @@ public class Simulator
void place()
{
placer.place(objects, nodes);
-
+
origCount = countObjects(nodes);
-
+
// printNodes(nodes);
if (bool("print.initialnodes"))
printNodeObjects(nodes);
@@ -397,7 +397,7 @@ public class Simulator
System.out.println("reads: " + reads);
if (reads > 0)
printAccesses = bool("printAccesses");
-
+
for (int read = 0; read < reads; read++)
{
File file = randomFile();
@@ -409,7 +409,7 @@ public class Simulator
{
if (printAccesses)
System.out.println("read: " + file.id);
-
+
for (gobs.sim.Object object : file.objects)
{
List<Node> sites = placer.sites(object, nodes);
@@ -420,12 +420,12 @@ public class Simulator
node.accesses++;
}
}
-
+
void performWrites()
{
if (writes > 0)
printAccesses = bool("printAccesses");
-
+
for (int write = 0; write < writes; write++)
{
File file = randomFile();
@@ -437,11 +437,11 @@ public class Simulator
{
if (printAccesses)
System.out.println("write: " + file.id);
-
+
for (gobs.sim.Object object : file.objects)
performWrite(object);
}
-
+
void performWrite(gobs.sim.Object object)
{
List<Node> sites = placer.sites(object, nodes);
@@ -453,13 +453,13 @@ public class Simulator
node.accesses++;
}
}
-
+
File randomFile()
{
int index = Bits.nextInt(files.size());
return files.get(index);
}
-
+
void induceFaults()
{
System.out.println("faults: " + totalFaults);
@@ -493,7 +493,7 @@ public class Simulator
performCopies(copies, done);
completeRebuild();
}
-
+
/**
Setup a Rebuild.
*/
@@ -542,7 +542,7 @@ public class Simulator
/**
Actually perform copies that completed during the Rebuild.
- Clears Set done.
+ Clears Set done.
@param copies Index of {@link Placement#regimen} output
@param done Set of Objects that were copied
*/
@@ -556,7 +556,7 @@ public class Simulator
}
done.clear();
}
-
+
/**
Store current Rebuild; advance time to next fault.
*/
@@ -567,7 +567,7 @@ public class Simulator
if (string("print.nodes").equals("true"))
printNodeObjects(nodes);
}
-
+
void computeStatistics()
{
computeDiffs();
@@ -577,16 +577,16 @@ public class Simulator
computeTotalDeclustering(total);
computeAccesses();
computeTraffic();
-
+
stats.results.setProperty("lostObjects",
df.format(stats.lostObjects));
-
+
System.out.println("FLEXIBILITIES: " +
df.format(stats.avgFlexibility()));
System.out.println("LOST_OBJECTS: " + stats.lostObjects);
System.out.println("FINAL_OBJECTS: " + countObjects());
}
-
+
/**
Computes and prints load differences from before
and after the faults.
@@ -595,7 +595,7 @@ public class Simulator
void computeDiffs()
{
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())
@@ -604,11 +604,11 @@ public class Simulator
int after = faultCount.get(node);
diffs.put(node, new Integer(after-before));
}
-
+
// Sort load differences...
MapSorter<Node> sorter = new MapSorter<Node>();
sortedDiffs = sorter.sort(diffs);
-
+
// Display load differences...
if (string("print.loaddiffs").equals("true"))
printLoadDifferences(sortedDiffs);
@@ -682,7 +682,7 @@ public class Simulator
stats.results.setProperty("maxPushes", df.format(maxPercent));
}
-
+
/**
Compute and print object movement load on servers that are
pulling and pushing object copies.
@@ -716,7 +716,7 @@ public class Simulator
stats.results.setProperty("maxTotal", df.format(maxPercentTotal));
}
-
+
void computeAccesses()
{
// Did the user perform any operations?
@@ -759,7 +759,7 @@ public class Simulator
{
if (! has("plot.traffic.interval"))
return;
-
+
System.out.println("TRAFFIC: ");
double interval = decimal("plot.traffic.interval");
@@ -779,10 +779,10 @@ public class Simulator
}
intervals.add(d);
sample.add(0);
-
+
System.out.println(intervals.toString());
System.out.println(sample.toString());
-
+
stats.results.setProperty("traffic-x", intervals.toString());
stats.results.setProperty("traffic-y", sample.toString());
}
@@ -809,7 +809,7 @@ public class Simulator
count += node.objects.size();
return count;
}
-
+
void lost(gobs.sim.Object object)
{
new Exception().printStackTrace();
@@ -829,20 +829,20 @@ public class Simulator
bail("Bad termination condition!");
return true;
}
-
+
void printProperties()
{
properties.list(System.out);
System.out.println("");
}
-
+
void printNodes(List<Node> list)
{
System.out.println("NODES:");
for (Node node : list)
System.out.println(node.name(this));
}
-
+
void printNodeObjects(List<Node> list)
{
System.out.println("NODE_CONTENTS:");
@@ -885,7 +885,7 @@ public class Simulator
{
return (properties.getProperty(name) != null);
}
-
+
/**
Allow subordinate classes to obtain properties.
@return The value of property name as an int.
@@ -903,7 +903,7 @@ public class Simulator
{
return Tools.decimal(properties, name);
}
-
+
/**
Allow subordinate classes to obtain properties.
@return The value of property name.
diff --git a/sim/gobs/gobs/sim/SingleObject.java b/sim/gobs/gobs/sim/SingleObject.java
index 8c25bdb..0347506 100644
--- a/sim/gobs/gobs/sim/SingleObject.java
+++ b/sim/gobs/gobs/sim/SingleObject.java
@@ -14,7 +14,7 @@ public class SingleObject
{
super(id, size, replicas);
}
-
+
Primary toPrimary()
{
// return new Primary(B, id, size, replicas);
@@ -25,7 +25,7 @@ public class SingleObject
{
throw new UnsupportedOperationException();
}
-
+
Secondary toSecondary(Primary primary)
{
// return new Secondary(B, id, size, replicas, primary);
diff --git a/sim/gobs/gobs/sim/Statistics.java b/sim/gobs/gobs/sim/Statistics.java
index dea742d..e5eb9e9 100644
--- a/sim/gobs/gobs/sim/Statistics.java
+++ b/sim/gobs/gobs/sim/Statistics.java
@@ -12,7 +12,7 @@ public class Statistics
public int unique = 0;
public Properties results = new Properties();
-
+
public double nodes = 0;
public double maxDeclustering = 0.0;
public double totalTransfers = 0;
diff --git a/sim/gobs/gobs/sim/TraceFiles.java b/sim/gobs/gobs/sim/TraceFiles.java
index f1336b3..c6cae92 100644
--- a/sim/gobs/gobs/sim/TraceFiles.java
+++ b/sim/gobs/gobs/sim/TraceFiles.java
@@ -10,7 +10,7 @@ import gobs.util.*;
*
* Overwrites Simulator.fileCount!
*
- * File format: "file <size> <strip> <width> <replicas>"
+ * File format: "file <size> <strip> <width> <replicas>"
*
* If width is "OPT", width is the number of servers
* divided by replicas. If width is "MAX", width is
@@ -93,7 +93,7 @@ class TraceFiles
}
index++;
-
+
return new File(size, strip, width, replicas);
}
}
diff --git a/sim/gobs/gobs/sim/VertexGroups.java b/sim/gobs/gobs/sim/VertexGroups.java
index eff67c2..91f4428 100644
--- a/sim/gobs/gobs/sim/VertexGroups.java
+++ b/sim/gobs/gobs/sim/VertexGroups.java
@@ -17,7 +17,7 @@ public class VertexGroups
The prefix length.
*/
int P;
-
+
/**
@param simulator Reference to the Simulator
@param source A ReplicaSource
@@ -28,7 +28,7 @@ public class VertexGroups
super(simulator, source);
this.P = P;
}
-
+
public BigInteger distance(BigInteger id1, BigInteger id2)
{
return id1.xor(id2);
@@ -43,14 +43,14 @@ public class VertexGroups
("Incorrect use of VertexGroups: " +
"object must be an SingleObject.");
}
-
+
List<Node> sites(SingleObject object, List<Node> nodes)
{
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);
@@ -59,7 +59,7 @@ public class VertexGroups
if (node != primary)
sites.add(node);
}
-
+
result.addAll(sites);
result.add(primary);
return result;
@@ -78,7 +78,7 @@ public class VertexGroups
BigInteger op = new BigInteger(val);
return op.xor(id);
}
-
+
/**
Bit flipper.
*/
diff --git a/sim/gobs/gobs/sweep/AbstractSweep.java b/sim/gobs/gobs/sweep/AbstractSweep.java
index 63884fc..89e8f08 100644
--- a/sim/gobs/gobs/sweep/AbstractSweep.java
+++ b/sim/gobs/gobs/sweep/AbstractSweep.java
@@ -21,7 +21,7 @@ abstract class AbstractSweep
static String path = null;
static Date launch = new Date();
-
+
AbstractSweep()
{}
@@ -29,12 +29,12 @@ abstract class AbstractSweep
{
this.properties = properties;
}
-
+
AbstractSweep(String[] args)
{
properties = getopts(args);
}
-
+
/**
Read properties files and
repeat count from command line,
@@ -43,7 +43,7 @@ abstract class AbstractSweep
static Properties getopts(String[] args)
{
Properties result = new Properties();
-
+
if (args.length == 0)
{
System.out.println("usage: -n <n> <file.cfg>+");
@@ -157,7 +157,7 @@ abstract class AbstractSweep
p *= 2;
}
result.add(new Integer(max).toString());
-
+
return result;
}
@@ -191,7 +191,7 @@ abstract class AbstractSweep
if (m != previous)
result.add(new Integer(m).toString());
result.add(new Integer(max).toString());
-
+
return result;
}
@@ -199,7 +199,7 @@ abstract class AbstractSweep
Sweep over all integer values given by the literal.
Ignores min and max.
@param arg The argument, e.g., "literal_2,4,5".
- @return The list, e.g., 2,4,5.
+ @return The list, e.g., 2,4,5.
*/
static List<String> literal(String arg)
{
@@ -213,7 +213,7 @@ abstract class AbstractSweep
return result;
}
-
+
/**
Set properties from memory.
*/
@@ -229,7 +229,7 @@ abstract class AbstractSweep
{
this.properties = getopts(args);
}
-
+
static void reportRuntime()
{
long t = (new Date().getTime()-launch.getTime())/(60*1000);
@@ -247,7 +247,7 @@ abstract class AbstractSweep
Bits.init(true);
Bits.lock();
}
-
+
/**
Debugging only.
*/
diff --git a/sim/gobs/gobs/sweep/Affected01.java b/sim/gobs/gobs/sweep/Affected01.java
index 0ae4cd1..30e359d 100644
--- a/sim/gobs/gobs/sweep/Affected01.java
+++ b/sim/gobs/gobs/sweep/Affected01.java
@@ -25,11 +25,11 @@ class Affected01
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",
diff --git a/sim/gobs/gobs/sweep/ArraySweep.java b/sim/gobs/gobs/sweep/ArraySweep.java
index 385c42d..f5b0a66 100644
--- a/sim/gobs/gobs/sweep/ArraySweep.java
+++ b/sim/gobs/gobs/sweep/ArraySweep.java
@@ -22,7 +22,7 @@ class ArraySweep
static String path = null;
static Date launch = new Date();
-
+
ArraySweep()
{}
@@ -30,7 +30,7 @@ class ArraySweep
{
super(properties);
}
-
+
ArraySweep(String[] args)
{
super(args);
@@ -40,14 +40,14 @@ class ArraySweep
Execute the parameter sweep for.
For each value in values, substitute it for xname in the
properties object. Run the simulation and extract the
- yname property for the plot.
+ yname property for the plot.
*/
void execute(String description, String xname,
List<String> values, String yname)
{
execute(description, xname, values, null, yname);
}
-
+
/**
Execute the parameter sweep for.
For each value in values, substitute it for xname in the
@@ -66,10 +66,10 @@ class ArraySweep
{
repeats = Tools.integer(properties, "repeats");
System.out.println("repeats: " + repeats);
-
+
if (repeats <= 0)
System.out.println("WARNING: repeats=" + repeats);
-
+
for (String v : values)
{
Set<double[]> xresult = new HashSet<double[]>();
@@ -144,7 +144,7 @@ class ArraySweep
longest = result;
return longest;
}
-
+
int maxLength(Set<double[]> results)
{
int max = 0;
@@ -162,7 +162,7 @@ class ArraySweep
total += result[i];
return total/results.size();
}
-
+
/**
Debugging only.
*/
diff --git a/sim/gobs/gobs/sweep/Balance01.java b/sim/gobs/gobs/sweep/Balance01.java
index a0eada7..2a7193a 100644
--- a/sim/gobs/gobs/sweep/Balance01.java
+++ b/sim/gobs/gobs/sweep/Balance01.java
@@ -21,7 +21,7 @@ class Balance01
public static void main(String[] args)
{
Bits.init(true);
-
+
Properties properties = Sweep.getopts(args);
properties.setProperty("faults", "0");
@@ -64,10 +64,10 @@ class Balance01
{
XYSeries series = new XYSeries(scheme);
series.setDescription(scheme);
-
+
MapSorter<Node> sorter = new MapSorter<Node>();
Map<Node,Integer> sorted = sorter.sort(simulator.origCount);
-
+
int i = 0;
for (Node node : sorted.keySet())
series.add(i++, sorted.get(node));
diff --git a/sim/gobs/gobs/sweep/Balance02.java b/sim/gobs/gobs/sweep/Balance02.java
index d436bf9..d63f57f 100644
--- a/sim/gobs/gobs/sweep/Balance02.java
+++ b/sim/gobs/gobs/sweep/Balance02.java
@@ -21,10 +21,10 @@ 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();
@@ -32,7 +32,7 @@ class Balance02
XYSeries series = new XYSeries("Balance");
Metric metric = (Metric) simulator.placer;
-
+
int i = 0;
for (Node node : simulator.nodes)
{
@@ -52,15 +52,15 @@ class Balance02
}
}
}
-
+
System.out.println
("i: " + i +
" node: " + node +
" load: " + node.objects.size() +
"\n\t distance: " + closestDistance);
}
-
+
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
index ca7fc82..f5fc1f0 100644
--- a/sim/gobs/gobs/sweep/Decluster01.java
+++ b/sim/gobs/gobs/sweep/Decluster01.java
@@ -18,16 +18,16 @@ class Decluster01
public static void main(String[] 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.exps(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/Decluster01P.java b/sim/gobs/gobs/sweep/Decluster01P.java
index 5b889ba..2c0682d 100644
--- a/sim/gobs/gobs/sweep/Decluster01P.java
+++ b/sim/gobs/gobs/sweep/Decluster01P.java
@@ -18,16 +18,16 @@ 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 eaa0374..a0aaba8 100644
--- a/sim/gobs/gobs/sweep/Decluster02.java
+++ b/sim/gobs/gobs/sweep/Decluster02.java
@@ -26,12 +26,12 @@ import gobs.plot.*;
class Decluster02
{
static Properties properties;
-
+
public static void main(String[] args)
{
properties = Sweep.getopts(args);
AbstractSweep.seed(properties);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "minNodes");
int maxNodes = Tools.integer(properties, "maxNodes");
@@ -39,7 +39,7 @@ class Decluster02
List<String> values = Sweep.values(step, minNodes, maxNodes);
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
@@ -58,12 +58,12 @@ class Decluster02
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "maxPulls");
collection.addSeries(vgSweep.series);
-
+
MultiLogXPlot.plot(collection, "Maximum Rebuild Load",
"nodes", "load fraction (%)", output);
// AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
// "nodes", "load", "tmp.txt");
Sweep.reportRuntime();
- }
+ }
}
diff --git a/sim/gobs/gobs/sweep/Decluster03.java b/sim/gobs/gobs/sweep/Decluster03.java
index 3add2c8..c18e10e 100644
--- a/sim/gobs/gobs/sweep/Decluster03.java
+++ b/sim/gobs/gobs/sweep/Decluster03.java
@@ -20,22 +20,22 @@ import gobs.plot.*;
class Decluster03
{
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("Decluster03: " + values);
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
@@ -60,5 +60,5 @@ class Decluster03
"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
index c2f15a3..eba8bb9 100644
--- a/sim/gobs/gobs/sweep/Decluster04.java
+++ b/sim/gobs/gobs/sweep/Decluster04.java
@@ -20,13 +20,13 @@ import gobs.plot.*;
class Decluster04
{
static Properties properties;
-
+
public static void main(String[] args)
{
Bits.init();
properties = Sweep.getopts(args);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "minNodes");
@@ -50,7 +50,7 @@ class Decluster04
kSweep.repeats = Tools.integer(properties, "repeats");
kSweep.execute("Kademlia", "nodes", values, "distribution");
allSeries.addAll(kSweep.collection);
-
+
properties.setProperty("impl.placement", "VertexGroups");
ArraySweep vgSweep = new ArraySweep(properties);
vgSweep.repeats = Tools.integer(properties, "repeats");
@@ -59,11 +59,11 @@ class Decluster04
for (XYSeries series : allSeries)
collection.addSeries(series);
-
+
MultiplePlot.plot(collection, "Rebuild Load Distribution",
"nodes involved", "load fraction(%)", output);
-
+
// AsciiPlot.plot(pSweep.series, "Maximum Rebuild Load",
// "nodes", "load", "tmp.txt");
- }
+ }
}
diff --git a/sim/gobs/gobs/sweep/ParallelSweep.java b/sim/gobs/gobs/sweep/ParallelSweep.java
index c18bb14..ae2e238 100644
--- a/sim/gobs/gobs/sweep/ParallelSweep.java
+++ b/sim/gobs/gobs/sweep/ParallelSweep.java
@@ -31,7 +31,7 @@ class ParallelSweep
super(properties);
this.cores = Tools.integer(this.properties, "cores");
}
-
+
ParallelSweep(String[] args)
{
super(args);
@@ -47,19 +47,19 @@ class ParallelSweep
{
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.
+ yname property for the plot.
*/
void execute(String description, String xname,
List<String> values, String yname)
@@ -70,9 +70,9 @@ class ParallelSweep
System.out.println("WARNING: repeats=" + repeats);
System.out.println("cores: " + cores);
-
+
ExecutorService service = Executors.newFixedThreadPool(cores);
-
+
series = new XYSeries(description);
for (String v : values)
{
@@ -99,7 +99,7 @@ class ParallelSweep
catch (Exception e)
{
System.out.println(e);
- Tools.bail("Error!");
+ Tools.bail("Error!");
}
if (! complete)
Tools.bail("Timeout occurred!");
@@ -113,7 +113,7 @@ class ParallelSweep
Simulator simulator = sims.get(v + "_" + i);
stats.add(simulator.stats);
try
- {
+ {
System.out.println("result: " + result(simulator, yname));
}
catch (NullPointerException e)
diff --git a/sim/gobs/gobs/sweep/Parallelism01.java b/sim/gobs/gobs/sweep/Parallelism01.java
index 0d4f0b5..86fdb7b 100644
--- a/sim/gobs/gobs/sweep/Parallelism01.java
+++ b/sim/gobs/gobs/sweep/Parallelism01.java
@@ -19,7 +19,7 @@ import gobs.plot.*;
class Parallelism01
{
static Properties properties;
-
+
public static void main(String[] args)
{
Bits.init();
@@ -27,16 +27,16 @@ class Parallelism01
properties = Sweep.getopts(args);
String output = Tools.string(properties, "output");
-
+
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("Parallelism01: " + values);
-
+
final XYSeriesCollection collection = new XYSeriesCollection();
-
+
properties.setProperty("impl.placement", "Nearest");
Sweep nearestSweep = new Sweep(properties);
nearestSweep.repeats = Tools.integer(properties, "repeats");
@@ -54,10 +54,10 @@ class Parallelism01
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "accessbalance");
collection.addSeries(vgSweep.series);
-
+
MultiLogXPlot.plot(collection, "Load Imbalance",
"nodes", "imbalance", output);
// AsciiPlot.plot(nearestSweep.series, "Maximum Rebuild Load",
// "nodes", "load", "tmp.txt");
- }
+ }
}
diff --git a/sim/gobs/gobs/sweep/Rebuild01.java b/sim/gobs/gobs/sweep/Rebuild01.java
index 638fbef..7bdf937 100644
--- a/sim/gobs/gobs/sweep/Rebuild01.java
+++ b/sim/gobs/gobs/sweep/Rebuild01.java
@@ -22,13 +22,13 @@ import gobs.plot.*;
class Rebuild01
{
static Properties properties;
-
+
public static void main(String[] args)
{
properties = Sweep.getopts(args);
AbstractSweep.seed(properties);
-
+
String output = Tools.string(properties, "output");
int minNodes = Tools.integer(properties, "nodes.min");
@@ -53,22 +53,22 @@ class Rebuild01
kSweep.repeats = Tools.integer(properties, "repeats");
kSweep.execute("Kademlia", "nodes", values, "distribution");
allSeries.addAll(kSweep.collection);
-
+
properties.setProperty("impl.placement", "VertexGroups");
ArraySweep vgSweep = new ArraySweep(properties);
vgSweep.repeats = Tools.integer(properties, "repeats");
vgSweep.execute("Vertex Groups", "nodes", values, "distribution");
allSeries.addAll(vgSweep.collection);
*/
-
+
for (XYSeries series : allSeries)
collection.addSeries(series);
-
+
MultiplePlot.plot(collection, "Rebuild Traffic",
"time", "copies in flight",
output);
-
+
// AsciiPlot.plot(pSweep.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 bfc77fe..5b445fc 100644
--- a/sim/gobs/gobs/sweep/Sweep.java
+++ b/sim/gobs/gobs/sweep/Sweep.java
@@ -32,7 +32,7 @@ class Sweep
{
super(properties);
}
-
+
Sweep(String[] args)
{
super(args);
@@ -46,7 +46,7 @@ class Sweep
@param description Tag passed into plot legend.
@param xname The property that will take the varying value.
@param values The values to plug into property xname.
- @param yname The property to extract into {@link #series}.
+ @param yname The property to extract into {@link #series}.
*/
void execute(String description, String xname,
List<String> values, String yname)
@@ -55,7 +55,7 @@ class Sweep
if (repeats <= 0)
System.out.println("WARNING: repeats=" + repeats);
-
+
series = new XYSeries(description);
for (String v : values)
{
diff --git a/sim/gobs/gobs/test/TestELHS.java b/sim/gobs/gobs/test/TestELHS.java
index 98887ae..36d7c19 100644
--- a/sim/gobs/gobs/test/TestELHS.java
+++ b/sim/gobs/gobs/test/TestELHS.java
@@ -16,7 +16,7 @@ class TestELHS
public static void main(String[] args)
{
int n = 10;
-
+
EnhancedLinkedHashSet<gobs.sim.Object> set =
new EnhancedLinkedHashSet<gobs.sim.Object>();
diff --git a/sim/gobs/gobs/test/TestExponential.java b/sim/gobs/gobs/test/TestExponential.java
index f1cc94b..4b4ee52 100644
--- a/sim/gobs/gobs/test/TestExponential.java
+++ b/sim/gobs/gobs/test/TestExponential.java
@@ -27,10 +27,10 @@ class TestExponential
{
check(args.length == 2,
"usage: TestExponential <lambda> <n>");
-
+
double lambda = Double.parseDouble(args[0]);
int n = Integer.parseInt(args[1]);
-
+
DRand engine = new DRand(new Date());
Exponential ed = new Exponential(lambda, engine);
@@ -47,7 +47,7 @@ class TestExponential
}
System.out.println("avg: " + Stats.avg(results));
-
+
SimplePlot.plot(series, "TestExponential", "step", "length",
"testexponential.eps");
}
diff --git a/sim/gobs/gobs/test/TestFileFactory.java b/sim/gobs/gobs/test/TestFileFactory.java
index 33a58fc..d3453b2 100644
--- a/sim/gobs/gobs/test/TestFileFactory.java
+++ b/sim/gobs/gobs/test/TestFileFactory.java
@@ -36,16 +36,16 @@ class TestFileFactory
return points;
}
-
+
static PriorityQueue<File> generate(double[][] points, int n)
{
Simulator simulator = new Simulator();
-
+
simulator.nodes = new ArrayList<Node>();
simulator.nodes.add(null);
-
- factory = new PDSIFiles(simulator, points);
+ factory = new PDSIFiles(simulator, points);
+
PriorityQueue<File> files =
new PriorityQueue<File>(n+1, new FileSizeComparator());
for (int i = 0; i < n; i++)
@@ -63,7 +63,7 @@ class TestFileFactory
i++;
}
}
-
+
static XYSeries extract(PriorityQueue<File> files)
{
double t = 2, s = 1;
@@ -96,14 +96,14 @@ class TestFileFactory
System.out.println("last: " + last);
series.add(last, 1.0);
*/
-
+
return series;
}
-
+
public static void main(String[] args)
{
Bits.init();
-
+
n = Integer.parseInt(args[0]);
double[][] points;
@@ -111,11 +111,11 @@ class TestFileFactory
points = PDSIFiles.parse(args[1]);
else
points = hardPoints();
-
+
PriorityQueue<File> files = generate(points, n);
dumpSizes(files);
-
+
XYSeries series = extract(files);
LogPlot.override = new DecimalFormat("0.##E0");
@@ -123,5 +123,5 @@ class TestFileFactory
"size (bytes)", "fraction smaller than size",
"distribution.eps");
System.out.println("plotted");
- }
+ }
}
diff --git a/sim/gobs/gobs/util/Bits.java b/sim/gobs/gobs/util/Bits.java
index e4bb597..27ca414 100644
--- a/sim/gobs/gobs/util/Bits.java
+++ b/sim/gobs/gobs/util/Bits.java
@@ -34,10 +34,10 @@ public class Bits
if (print)
System.out.println("Bits.seed: " + seed);
-
+
return seed;
}
-
+
/**
If not locked, seed the generator
@param seed The seed.
@@ -100,7 +100,7 @@ public class Bits
int i = (new Double(d * t)).intValue();
return i;
}
-
+
public static boolean nextBoolean()
{
if (! ready)
diff --git a/sim/gobs/gobs/util/BoundedSortedValues.java b/sim/gobs/gobs/util/BoundedSortedValues.java
index 547a149..7cebb2c 100644
--- a/sim/gobs/gobs/util/BoundedSortedValues.java
+++ b/sim/gobs/gobs/util/BoundedSortedValues.java
@@ -11,7 +11,7 @@ public class BoundedSortedValues<T,V extends Comparable<V>>
int bound = 0;
Mode mode = Mode.SMALLEST;
-
+
public class Entry
implements Map.Entry<T,V>
{
@@ -50,12 +50,12 @@ public class BoundedSortedValues<T,V extends Comparable<V>>
return value;
}
}
-
+
enum Mode
{
SMALLEST, LARGEST
}
-
+
public BoundedSortedValues(int bound)
{
this.bound = bound;
@@ -63,7 +63,7 @@ public class BoundedSortedValues<T,V extends Comparable<V>>
throw new IndexOutOfBoundsException
("Bound must be non-negative!");
}
-
+
public boolean add(T thing, V value)
{
if (bound == 0)
@@ -111,7 +111,7 @@ public class BoundedSortedValues<T,V extends Comparable<V>>
result.add(pair.thing);
return result;
}
-
+
public String toString()
{
StringBuilder sb = new StringBuilder();
@@ -132,7 +132,7 @@ public class BoundedSortedValues<T,V extends Comparable<V>>
return sb.toString();
}
-
+
public static void main(String[] args)
{
BoundedSortedValues<String,Integer> v =
diff --git a/sim/gobs/gobs/util/EnhancedLinkedHashSet.java b/sim/gobs/gobs/util/EnhancedLinkedHashSet.java
index cabefbb..aaa96e2 100644
--- a/sim/gobs/gobs/util/EnhancedLinkedHashSet.java
+++ b/sim/gobs/gobs/util/EnhancedLinkedHashSet.java
@@ -13,7 +13,7 @@ public class EnhancedLinkedHashSet<T>
{
super();
}
-
+
public boolean containsAny(Collection<T> c)
{
for (T thing : c)
diff --git a/sim/gobs/gobs/util/LineReader.java b/sim/gobs/gobs/util/LineReader.java
index f68cf9f..a07f1c6 100644
--- a/sim/gobs/gobs/util/LineReader.java
+++ b/sim/gobs/gobs/util/LineReader.java
@@ -22,7 +22,7 @@ public class LineReader
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>();
@@ -77,7 +77,7 @@ public class LineReader
}
return result;
}
-
+
public static String[] tokenize(String line)
{
if (line == null)
diff --git a/sim/gobs/gobs/util/MapSorter.java b/sim/gobs/gobs/util/MapSorter.java
index 544b374..72d4be3 100644
--- a/sim/gobs/gobs/util/MapSorter.java
+++ b/sim/gobs/gobs/util/MapSorter.java
@@ -25,7 +25,7 @@ public class MapSorter<T>
input.remove(minThing);
result.put(minThing, new Integer(minValue));
}
-
+
return result;
}
}
@@ -35,7 +35,7 @@ public class MapSorter<T>
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);
diff --git a/sim/gobs/gobs/util/Stats.java b/sim/gobs/gobs/util/Stats.java
index be1541d..302f21e 100644
--- a/sim/gobs/gobs/util/Stats.java
+++ b/sim/gobs/gobs/util/Stats.java
@@ -27,7 +27,7 @@ public class Stats
sum += d;
return sum/data.size();
}
-
+
/**
Return the average of the corresponding
entries of each list.
@@ -36,7 +36,7 @@ public class Stats
{
List<Double> result = new ArrayList<Double>();
int n = data.size();
-
+
int i = 0;
while (true)
{
diff --git a/sim/gobs/gobs/util/Tools.java b/sim/gobs/gobs/util/Tools.java
index 2ea848d..e8272a5 100644
--- a/sim/gobs/gobs/util/Tools.java
+++ b/sim/gobs/gobs/util/Tools.java
@@ -49,7 +49,7 @@ public class Tools
}
return result;
}
-
+
public static boolean bool(Properties properties,
String variable)
{
@@ -64,7 +64,7 @@ public class Tools
" = " + properties.getProperty(variable));
return result;
}
-
+
public static String string(Properties properties, String variable)
{
String result = null;
@@ -92,11 +92,11 @@ public class Tools
if (!condition)
bail(msg);
}
-
+
public static void bail(String msg)
{
System.out.println(msg);
-
+
// Exit code 1 is a Java error:
System.exit(2);
}
@@ -124,7 +124,7 @@ public class Tools
{
if (file.length() == 0)
return;
-
+
if (path != null)
file = path+file;
java.io.FileInputStream cfg = null;
@@ -191,7 +191,7 @@ public class Tools
public static double[] positives(double[] array)
{
double[] result;
-
+
int c = 0;
int n = array.length;
for (int i = 0; i < n; i++)
diff --git a/sim/gobs/scripts/eol.zsh b/sim/gobs/scripts/eol.zsh
new file mode 100755
index 0000000..c361ef7
--- /dev/null
+++ b/sim/gobs/scripts/eol.zsh
@@ -0,0 +1,14 @@
+#!/bin/zsh
+
+files=()
+for f in **/*.zsh
+ do
+ if [[ ${f} != $0 ]]
+ then
+ files+=${f}
+ fi
+done
+
+sed -i 's/ $//' **/*.java **/*.cfg ${files}
+
+# print -l **/*.java **/*.cfg ${files}
diff --git a/sim/gobs/sweeps/Decluster01.cfg b/sim/gobs/sweeps/Decluster01.cfg
index d094f3b..8d14286 100644
--- a/sim/gobs/sweeps/Decluster01.cfg
+++ b/sim/gobs/sweeps/Decluster01.cfg
@@ -1,3 +1,3 @@
minNodes = 10
-maxNodes = 100
+maxNodes = 100
diff --git a/sim/gobs/sweeps/bl01-small.cfg b/sim/gobs/sweeps/bl01-small.cfg
index 30df6e6..174ddc0 100644
--- a/sim/gobs/sweeps/bl01-small.cfg
+++ b/sim/gobs/sweeps/bl01-small.cfg
@@ -1,51 +1,51 @@
-### BALANCE 01
+### BALANCE 01
include = bl01output.cfg
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 8
-# Number of files:
+# Number of files:
files = 2
-# Number of faults:
+# Number of faults:
faults = 0
-# Number of servers:
+# Number of servers:
nodes = 10
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver
VertexGroupPrefix = 5
-# No rebuilds will actually be performed. This is filler:
+# No rebuilds will actually be performed. This is filler:
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
impl.filefactory = TraceFiles
filetrace = traces/onebigfile.trace
-### User read/writes:
+### User read/writes:
# No user operations...
reads = 0
diff --git a/sim/gobs/sweeps/bl01.cfg b/sim/gobs/sweeps/bl01.cfg
index 76494bf..b0b6333 100644
--- a/sim/gobs/sweeps/bl01.cfg
+++ b/sim/gobs/sweeps/bl01.cfg
@@ -1,49 +1,49 @@
-### BALANCE 01
+### BALANCE 01
include = bl01output.cfg
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 1
-# Number of faults:
+# Number of faults:
faults = 0
-# Number of servers:
+# Number of servers:
nodes = 10
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver
-# No rebuilds will actually be performed. This is filler:
+# No rebuilds will actually be performed. This is filler:
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
impl.filefactory = TraceFiles
filetrace = traces/onebigfile.trace
-### User read/writes:
+### User read/writes:
# No user operations...
reads = 0
diff --git a/sim/gobs/sweeps/bl01output.cfg b/sim/gobs/sweeps/bl01output.cfg
index ba359e8..71aca33 100644
--- a/sim/gobs/sweeps/bl01output.cfg
+++ b/sim/gobs/sweeps/bl01output.cfg
@@ -3,9 +3,9 @@
# Dump properties for each Simulator execution
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = false
diff --git a/sim/gobs/sweeps/dc02kpv01.cfg b/sim/gobs/sweeps/dc02kpv01.cfg
index a8e3954..50636bd 100644
--- a/sim/gobs/sweeps/dc02kpv01.cfg
+++ b/sim/gobs/sweeps/dc02kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_20-1000.cfg
+include = kpv01.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc02kpv02.cfg b/sim/gobs/sweeps/dc02kpv02.cfg
index 4123f20..bb8ec1a 100644
--- a/sim/gobs/sweeps/dc02kpv02.cfg
+++ b/sim/gobs/sweeps/dc02kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_20-1000.cfg
+include = kpv02.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc02kpv03.cfg b/sim/gobs/sweeps/dc02kpv03.cfg
index 49e5b09..016f47b 100644
--- a/sim/gobs/sweeps/dc02kpv03.cfg
+++ b/sim/gobs/sweeps/dc02kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_20-1000.cfg
+include = kpv03.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc02kpv04.cfg b/sim/gobs/sweeps/dc02kpv04.cfg
index 9eb0f78..e131118 100644
--- a/sim/gobs/sweeps/dc02kpv04.cfg
+++ b/sim/gobs/sweeps/dc02kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_20-1000.cfg
+include = kpv04.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc02kpv05.cfg b/sim/gobs/sweeps/dc02kpv05.cfg
index 65f6d5d..ecbdca2 100644
--- a/sim/gobs/sweeps/dc02kpv05.cfg
+++ b/sim/gobs/sweeps/dc02kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_20-1000.cfg
+include = kpv05.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc02kpv06.cfg b/sim/gobs/sweeps/dc02kpv06.cfg
index 7585f4c..3fc5886 100644
--- a/sim/gobs/sweeps/dc02kpv06.cfg
+++ b/sim/gobs/sweeps/dc02kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_20-1000.cfg
+include = kpv06.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv01.cfg b/sim/gobs/sweeps/dc03kpv01.cfg
index a8e3954..50636bd 100644
--- a/sim/gobs/sweeps/dc03kpv01.cfg
+++ b/sim/gobs/sweeps/dc03kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_20-1000.cfg
+include = kpv01.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv02.cfg b/sim/gobs/sweeps/dc03kpv02.cfg
index 4123f20..bb8ec1a 100644
--- a/sim/gobs/sweeps/dc03kpv02.cfg
+++ b/sim/gobs/sweeps/dc03kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_20-1000.cfg
+include = kpv02.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv03.cfg b/sim/gobs/sweeps/dc03kpv03.cfg
index 49e5b09..016f47b 100644
--- a/sim/gobs/sweeps/dc03kpv03.cfg
+++ b/sim/gobs/sweeps/dc03kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_20-1000.cfg
+include = kpv03.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv04.cfg b/sim/gobs/sweeps/dc03kpv04.cfg
index 9eb0f78..e131118 100644
--- a/sim/gobs/sweeps/dc03kpv04.cfg
+++ b/sim/gobs/sweeps/dc03kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_20-1000.cfg
+include = kpv04.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv05.cfg b/sim/gobs/sweeps/dc03kpv05.cfg
index 65f6d5d..ecbdca2 100644
--- a/sim/gobs/sweeps/dc03kpv05.cfg
+++ b/sim/gobs/sweeps/dc03kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_20-1000.cfg
+include = kpv05.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc03kpv06.cfg b/sim/gobs/sweeps/dc03kpv06.cfg
index 7585f4c..3fc5886 100644
--- a/sim/gobs/sweeps/dc03kpv06.cfg
+++ b/sim/gobs/sweeps/dc03kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_20-1000.cfg
+include = kpv06.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv01.cfg b/sim/gobs/sweeps/dc04kpv01.cfg
index 9758fc8..876cab9 100644
--- a/sim/gobs/sweeps/dc04kpv01.cfg
+++ b/sim/gobs/sweeps/dc04kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_100_1000.cfg
+include = kpv01.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv02.cfg b/sim/gobs/sweeps/dc04kpv02.cfg
index a149523..5215e71 100644
--- a/sim/gobs/sweeps/dc04kpv02.cfg
+++ b/sim/gobs/sweeps/dc04kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_100_1000.cfg
+include = kpv02.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv03.cfg b/sim/gobs/sweeps/dc04kpv03.cfg
index efb2c84..05d4b8b 100644
--- a/sim/gobs/sweeps/dc04kpv03.cfg
+++ b/sim/gobs/sweeps/dc04kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_100_1000.cfg
+include = kpv03.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv04.cfg b/sim/gobs/sweeps/dc04kpv04.cfg
index 41d8741..5678cf6 100644
--- a/sim/gobs/sweeps/dc04kpv04.cfg
+++ b/sim/gobs/sweeps/dc04kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_100_1000.cfg
+include = kpv04.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv05.cfg b/sim/gobs/sweeps/dc04kpv05.cfg
index 8f2ef35..f7143ce 100644
--- a/sim/gobs/sweeps/dc04kpv05.cfg
+++ b/sim/gobs/sweeps/dc04kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_100_1000.cfg
+include = kpv05.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/dc04kpv06.cfg b/sim/gobs/sweeps/dc04kpv06.cfg
index 1e630c4..e872579 100644
--- a/sim/gobs/sweeps/dc04kpv06.cfg
+++ b/sim/gobs/sweeps/dc04kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_100_1000.cfg
+include = kpv06.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/sweeps/debug.cfg b/sim/gobs/sweeps/debug.cfg
index 0df7001..2a0f8b8 100644
--- a/sim/gobs/sweeps/debug.cfg
+++ b/sim/gobs/sweeps/debug.cfg
@@ -2,9 +2,9 @@
# Simulator configuration
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = true
# Print object tranfers during rebuilds (true/false)
print.rebuilds = true
diff --git a/sim/gobs/sweeps/decluster02.zsh b/sim/gobs/sweeps/decluster02.zsh
index 531f22e..e893f56 100755
--- a/sim/gobs/sweeps/decluster02.zsh
+++ b/sim/gobs/sweeps/decluster02.zsh
@@ -1,11 +1,11 @@
-#!/bin/zsh
+#!/bin/zsh
NAME=$1
N=$2
SEED=$3
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
-[[ ${N} == "" ]] && N=20
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${N} == "" ]] && N=20
[[ ${SEED} != "" ]] && SEED="seed=${SEED}"
NAME="dc02${NAME}"
@@ -15,9 +15,9 @@ EPS="${NAME}.eps"
OUT="${NAME}.out"
java -ea gobs.sweep.Decluster02 \
- -p sweeps -n ${N} -o ${EPS} ${SEED} ${CFG} >& ${OUT}
-ERR=$?
+ -p sweeps -n ${N} -o ${EPS} ${SEED} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/sweeps/decluster03.zsh b/sim/gobs/sweeps/decluster03.zsh
index 030df72..bf93ae6 100755
--- a/sim/gobs/sweeps/decluster03.zsh
+++ b/sim/gobs/sweeps/decluster03.zsh
@@ -2,7 +2,7 @@
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="dc03${NAME}"
@@ -10,9 +10,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Decluster03 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Decluster03 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/sweeps/decluster04.zsh b/sim/gobs/sweeps/decluster04.zsh
index 6a2da2e..862cfdf 100755
--- a/sim/gobs/sweeps/decluster04.zsh
+++ b/sim/gobs/sweeps/decluster04.zsh
@@ -2,7 +2,7 @@
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="dc04${NAME}"
@@ -10,9 +10,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Decluster04 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Decluster04 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/sweeps/kpv01.cfg b/sim/gobs/sweeps/kpv01.cfg
index 72fdcfd..67c3d63 100644
--- a/sim/gobs/sweeps/kpv01.cfg
+++ b/sim/gobs/sweeps/kpv01.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 01
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/kpv02.cfg b/sim/gobs/sweeps/kpv02.cfg
index d877857..bd79362 100644
--- a/sim/gobs/sweeps/kpv02.cfg
+++ b/sim/gobs/sweeps/kpv02.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 02
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
# impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/kpv03.cfg b/sim/gobs/sweeps/kpv03.cfg
index 8207b16..5c9a51b 100644
--- a/sim/gobs/sweeps/kpv03.cfg
+++ b/sim/gobs/sweeps/kpv03.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 03
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = random
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/kpv04.cfg b/sim/gobs/sweeps/kpv04.cfg
index 84c4332..580d721 100644
--- a/sim/gobs/sweeps/kpv04.cfg
+++ b/sim/gobs/sweeps/kpv04.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 04
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = random
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
# impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/kpv05.cfg b/sim/gobs/sweeps/kpv05.cfg
index 0ccfc44..9c0337c 100644
--- a/sim/gobs/sweeps/kpv05.cfg
+++ b/sim/gobs/sweeps/kpv05.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 05
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = last
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/kpv06.cfg b/sim/gobs/sweeps/kpv06.cfg
index ba02d69..ec8dde2 100644
--- a/sim/gobs/sweeps/kpv06.cfg
+++ b/sim/gobs/sweeps/kpv06.cfg
@@ -1,16 +1,16 @@
### Kademlia vs. PAST vs. Vertex Groups 06
-include = kpv_output.cfg
+include = kpv_output.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = last
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
diff --git a/sim/gobs/sweeps/kpv_lit_big.cfg b/sim/gobs/sweeps/kpv_lit_big.cfg
index adef78f..a2ca98d 100644
--- a/sim/gobs/sweeps/kpv_lit_big.cfg
+++ b/sim/gobs/sweeps/kpv_lit_big.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_100,1000
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/kpv_lit_small.cfg b/sim/gobs/sweeps/kpv_lit_small.cfg
index bdbbc08..a2cd9a4 100644
--- a/sim/gobs/sweeps/kpv_lit_small.cfg
+++ b/sim/gobs/sweeps/kpv_lit_small.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 100
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_30,50
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/kpv_output.cfg b/sim/gobs/sweeps/kpv_output.cfg
index 204275f..506e9c4 100644
--- a/sim/gobs/sweeps/kpv_output.cfg
+++ b/sim/gobs/sweeps/kpv_output.cfg
@@ -3,9 +3,9 @@
# Dump properties for each Simulator execution
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = true
# Print object tranfers during rebuilds (true/false)
print.rebuilds = true
diff --git a/sim/gobs/sweeps/kpv_scenario.cfg b/sim/gobs/sweeps/kpv_scenario.cfg
index 3c693ae..2172cf9 100644
--- a/sim/gobs/sweeps/kpv_scenario.cfg
+++ b/sim/gobs/sweeps/kpv_scenario.cfg
@@ -1,26 +1,26 @@
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/kpv_small.cfg b/sim/gobs/sweeps/kpv_small.cfg
index 22a8fee..88d2db4 100644
--- a/sim/gobs/sweeps/kpv_small.cfg
+++ b/sim/gobs/sweeps/kpv_small.cfg
@@ -1,26 +1,26 @@
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 1
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/output.cfg b/sim/gobs/sweeps/output.cfg
index 5f562c3..f3afc38 100644
--- a/sim/gobs/sweeps/output.cfg
+++ b/sim/gobs/sweeps/output.cfg
@@ -3,9 +3,9 @@
# Dump properties for each Simulator execution
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = false
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = false
diff --git a/sim/gobs/sweeps/parallelism01.zsh b/sim/gobs/sweeps/parallelism01.zsh
index fc715d7..5d66a0f 100755
--- a/sim/gobs/sweeps/parallelism01.zsh
+++ b/sim/gobs/sweeps/parallelism01.zsh
@@ -4,7 +4,7 @@
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="pll01${NAME}"
@@ -12,9 +12,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Parallelism01 -p sweeps -n 2 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Parallelism01 -p sweeps -n 2 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/sweeps/pll01.cfg b/sim/gobs/sweeps/pll01.cfg
index 276d6e9..ada6a57 100644
--- a/sim/gobs/sweeps/pll01.cfg
+++ b/sim/gobs/sweeps/pll01.cfg
@@ -1,18 +1,18 @@
### Kademlia vs. PAST vs. Vertex Groups 01
-include = pll_output.cfg
+include = pll_output.cfg
faults = 0
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/sweeps/pll01case01.cfg b/sim/gobs/sweeps/pll01case01.cfg
index b5dd12e..fb9cfe5 100644
--- a/sim/gobs/sweeps/pll01case01.cfg
+++ b/sim/gobs/sweeps/pll01case01.cfg
@@ -2,7 +2,7 @@
# PARALLELISM 01 CASE 01
include = pll01.cfg system_size_pdsi_100-1000.cfg
-# system_size_pdsi_20-40.cfg
-# #
+# system_size_pdsi_20-40.cfg
+# #
faults = 0
diff --git a/sim/gobs/sweeps/pll01case02.cfg b/sim/gobs/sweeps/pll01case02.cfg
index c19f3c9..d81371e 100644
--- a/sim/gobs/sweeps/pll01case02.cfg
+++ b/sim/gobs/sweeps/pll01case02.cfg
@@ -2,8 +2,8 @@
# PARALLELISM 01 CASE 01
include = pll01.cfg system_size_pdsi_100-1000.cfg
-# system_size_pdsi_20-40.cfg
-#
-#
+# system_size_pdsi_20-40.cfg
+#
+#
faults = 1
diff --git a/sim/gobs/sweeps/pll_output.cfg b/sim/gobs/sweeps/pll_output.cfg
index 51ff2ae..a8db116 100644
--- a/sim/gobs/sweeps/pll_output.cfg
+++ b/sim/gobs/sweeps/pll_output.cfg
@@ -3,15 +3,15 @@
# Dump properties for each Simulator execution
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = false
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = false
# Print file information (true/false)
print.files = false
# Print file access information (true/false)
-printAccesses = false
+printAccesses = false
# Print load change statistics (true/false)
print.loaddiffs = false
diff --git a/sim/gobs/sweeps/quick04.cfg b/sim/gobs/sweeps/quick04.cfg
index 952307d..47a4266 100644
--- a/sim/gobs/sweeps/quick04.cfg
+++ b/sim/gobs/sweeps/quick04.cfg
@@ -3,68 +3,68 @@
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 1000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
minNodes = 10
-maxNodes = 1000
+maxNodes = 1000
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver
replica.source = random
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
# impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Strip size:
+# Strip size:
#file.strip = 4
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
### Simulator output configuration
# Dump properties for each Simulator execution
print.properties = false
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = false
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = false
diff --git a/sim/gobs/sweeps/rb01-range.cfg b/sim/gobs/sweeps/rb01-range.cfg
index 6bab4cb..adc6d04 100644
--- a/sim/gobs/sweeps/rb01-range.cfg
+++ b/sim/gobs/sweeps/rb01-range.cfg
@@ -3,31 +3,31 @@
include = rb_output.cfg
-# Statistics:
+# Statistics:
-# Rebuild traffic over time analysis:
+# Rebuild traffic over time analysis:
plot.traffic.interval = 1000
### Parameters for GOBS Simulator run
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 16
-# Number of servers:
+# Number of servers:
nodes.min = 20
nodes.max = 200
-# Step through nodes: See AbstractSweep.values()
+# Step through nodes: See AbstractSweep.values()
nodes.step = mids
-# Number of files:
+# Number of files:
files = 100
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of accesses:
+# Number of accesses:
reads = 0
writes = 0
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
#impl.placement = Kademlia
impl.placement = Nearest
@@ -37,36 +37,36 @@ vertexgroups.prefix = 6
# Replica selection: See Replicated.locateSource()
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14000
-# Strip size:
+# Strip size:
file.strip = 1000
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
+# Number of objects per file:
file.width = 4
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
diff --git a/sim/gobs/sweeps/rb01-small.cfg b/sim/gobs/sweeps/rb01-small.cfg
index d3605be..6474dc5 100644
--- a/sim/gobs/sweeps/rb01-small.cfg
+++ b/sim/gobs/sweeps/rb01-small.cfg
@@ -1,37 +1,37 @@
# Simulator configuration
-# Basics:
+# Basics:
include = rb_output.cfg
-# Statistics:
+# Statistics:
-# Rebuild traffic over time analysis:
+# Rebuild traffic over time analysis:
plot.traffic.interval = 10
### Parameters for GOBS Simulator run
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 16
-# Number of servers:
+# Number of servers:
nodes.min = 12
nodes.max = 16
-# Step through nodes: See AbstractSweep.values()
+# Step through nodes: See AbstractSweep.values()
nodes.step = literal_14,16,18
-# Number of files:
+# Number of files:
files = 6
-# Number of faults:
+# Number of faults:
faults = 2
-# Number of accesses:
+# Number of accesses:
reads = 0
writes = 0
mttf = 500
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
#impl.placement = Kademlia
impl.placement = Nearest
@@ -41,36 +41,36 @@ vertexgroups.prefix = 6
# Replica selection: See Replicated.locateSource()
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 140
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
+# Number of objects per file:
file.width = 3
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
diff --git a/sim/gobs/sweeps/rb_output.cfg b/sim/gobs/sweeps/rb_output.cfg
index 727434f..ed08795 100644
--- a/sim/gobs/sweeps/rb_output.cfg
+++ b/sim/gobs/sweeps/rb_output.cfg
@@ -1,11 +1,11 @@
-# Basics:
+# Basics:
# Print all properties at simulation start
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = true
# Print object tranfers during rebuilds (true/false)
print.rebuilds = true
@@ -14,5 +14,5 @@ print.files = true
# Print load change statistics (true/false)
print.loaddiffs = true
# Print user accesses
-print.accesses = false
+print.accesses = false
diff --git a/sim/gobs/sweeps/system_size_1000.cfg b/sim/gobs/sweeps/system_size_1000.cfg
index 5107cdc..66c7fd5 100644
--- a/sim/gobs/sweeps/system_size_1000.cfg
+++ b/sim/gobs/sweeps/system_size_1000.cfg
@@ -3,27 +3,27 @@
### 20-1000 servers, selected exponentially
### 3000 files * 10 objects * 3 replicas = 90,000 objects
-# Number of servers:
+# Number of servers:
minNodes = 1000
maxNodes = 1000
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/system_size_100_1000.cfg b/sim/gobs/sweeps/system_size_100_1000.cfg
index adef78f..a2ca98d 100644
--- a/sim/gobs/sweeps/system_size_100_1000.cfg
+++ b/sim/gobs/sweeps/system_size_100_1000.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_100,1000
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/system_size_20-1000.cfg b/sim/gobs/sweeps/system_size_20-1000.cfg
index 57e29f8..6b34218 100644
--- a/sim/gobs/sweeps/system_size_20-1000.cfg
+++ b/sim/gobs/sweeps/system_size_20-1000.cfg
@@ -3,27 +3,27 @@
### 20-1000 servers, selected exponentially
### 3000 files * 10 objects * 3 replicas = 90,000 objects
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg b/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg
index aaf7a91..9c64871 100644
--- a/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg
+++ b/sim/gobs/sweeps/system_size_pdsi_100-1000.cfg
@@ -3,18 +3,18 @@
### 100-1000 servers, selected exponentially with midpoints
### TODO: 0 files * 10 objects * 3 replicas = 90,000 objects
-# Number of servers:
+# Number of servers:
minNodes = 100
maxNodes = 1000
step = literal_100,400,1000
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 1000
-# User accesses:
+# User accesses:
reads = 5000
writes = 10000
diff --git a/sim/gobs/sweeps/system_size_pdsi_20-40.cfg b/sim/gobs/sweeps/system_size_pdsi_20-40.cfg
index a8d9635..9c34612 100644
--- a/sim/gobs/sweeps/system_size_pdsi_20-40.cfg
+++ b/sim/gobs/sweeps/system_size_pdsi_20-40.cfg
@@ -3,18 +3,18 @@
### 20-40 servers, selected exponentially with midpoints
### TODO: 0 files * 10 objects * 3 replicas = 90,000 objects
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 40
step = mids
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 100
-# User accesses:
+# User accesses:
reads = 500
writes = 1000
diff --git a/sim/gobs/wiki/dc02kpv01.cfg b/sim/gobs/wiki/dc02kpv01.cfg
index a8e3954..50636bd 100644
--- a/sim/gobs/wiki/dc02kpv01.cfg
+++ b/sim/gobs/wiki/dc02kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_20-1000.cfg
+include = kpv01.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc02kpv02.cfg b/sim/gobs/wiki/dc02kpv02.cfg
index 4123f20..bb8ec1a 100644
--- a/sim/gobs/wiki/dc02kpv02.cfg
+++ b/sim/gobs/wiki/dc02kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_20-1000.cfg
+include = kpv02.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc02kpv03.cfg b/sim/gobs/wiki/dc02kpv03.cfg
index 49e5b09..016f47b 100644
--- a/sim/gobs/wiki/dc02kpv03.cfg
+++ b/sim/gobs/wiki/dc02kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_20-1000.cfg
+include = kpv03.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc02kpv04.cfg b/sim/gobs/wiki/dc02kpv04.cfg
index 9eb0f78..e131118 100644
--- a/sim/gobs/wiki/dc02kpv04.cfg
+++ b/sim/gobs/wiki/dc02kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_20-1000.cfg
+include = kpv04.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc02kpv05.cfg b/sim/gobs/wiki/dc02kpv05.cfg
index 65f6d5d..ecbdca2 100644
--- a/sim/gobs/wiki/dc02kpv05.cfg
+++ b/sim/gobs/wiki/dc02kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_20-1000.cfg
+include = kpv05.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc02kpv06.cfg b/sim/gobs/wiki/dc02kpv06.cfg
index 7585f4c..3fc5886 100644
--- a/sim/gobs/wiki/dc02kpv06.cfg
+++ b/sim/gobs/wiki/dc02kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_20-1000.cfg
+include = kpv06.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv01.cfg b/sim/gobs/wiki/dc03kpv01.cfg
index a8e3954..50636bd 100644
--- a/sim/gobs/wiki/dc03kpv01.cfg
+++ b/sim/gobs/wiki/dc03kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_20-1000.cfg
+include = kpv01.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv02.cfg b/sim/gobs/wiki/dc03kpv02.cfg
index 4123f20..bb8ec1a 100644
--- a/sim/gobs/wiki/dc03kpv02.cfg
+++ b/sim/gobs/wiki/dc03kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_20-1000.cfg
+include = kpv02.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv03.cfg b/sim/gobs/wiki/dc03kpv03.cfg
index 49e5b09..016f47b 100644
--- a/sim/gobs/wiki/dc03kpv03.cfg
+++ b/sim/gobs/wiki/dc03kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_20-1000.cfg
+include = kpv03.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv04.cfg b/sim/gobs/wiki/dc03kpv04.cfg
index 9eb0f78..e131118 100644
--- a/sim/gobs/wiki/dc03kpv04.cfg
+++ b/sim/gobs/wiki/dc03kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_20-1000.cfg
+include = kpv04.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv05.cfg b/sim/gobs/wiki/dc03kpv05.cfg
index 65f6d5d..ecbdca2 100644
--- a/sim/gobs/wiki/dc03kpv05.cfg
+++ b/sim/gobs/wiki/dc03kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_20-1000.cfg
+include = kpv05.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc03kpv06.cfg b/sim/gobs/wiki/dc03kpv06.cfg
index 7585f4c..3fc5886 100644
--- a/sim/gobs/wiki/dc03kpv06.cfg
+++ b/sim/gobs/wiki/dc03kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_20-1000.cfg
+include = kpv06.cfg system_size_20-1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv01.cfg b/sim/gobs/wiki/dc04kpv01.cfg
index 9758fc8..876cab9 100644
--- a/sim/gobs/wiki/dc04kpv01.cfg
+++ b/sim/gobs/wiki/dc04kpv01.cfg
@@ -1,7 +1,7 @@
-include = kpv01.cfg system_size_100_1000.cfg
+include = kpv01.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv02.cfg b/sim/gobs/wiki/dc04kpv02.cfg
index a149523..5215e71 100644
--- a/sim/gobs/wiki/dc04kpv02.cfg
+++ b/sim/gobs/wiki/dc04kpv02.cfg
@@ -1,7 +1,7 @@
-include = kpv02.cfg system_size_100_1000.cfg
+include = kpv02.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv03.cfg b/sim/gobs/wiki/dc04kpv03.cfg
index efb2c84..05d4b8b 100644
--- a/sim/gobs/wiki/dc04kpv03.cfg
+++ b/sim/gobs/wiki/dc04kpv03.cfg
@@ -1,7 +1,7 @@
-include = kpv03.cfg system_size_100_1000.cfg
+include = kpv03.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv04.cfg b/sim/gobs/wiki/dc04kpv04.cfg
index 41d8741..5678cf6 100644
--- a/sim/gobs/wiki/dc04kpv04.cfg
+++ b/sim/gobs/wiki/dc04kpv04.cfg
@@ -1,7 +1,7 @@
-include = kpv04.cfg system_size_100_1000.cfg
+include = kpv04.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv05.cfg b/sim/gobs/wiki/dc04kpv05.cfg
index 8f2ef35..f7143ce 100644
--- a/sim/gobs/wiki/dc04kpv05.cfg
+++ b/sim/gobs/wiki/dc04kpv05.cfg
@@ -1,7 +1,7 @@
-include = kpv05.cfg system_size_100_1000.cfg
+include = kpv05.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/dc04kpv06.cfg b/sim/gobs/wiki/dc04kpv06.cfg
index 1e630c4..e872579 100644
--- a/sim/gobs/wiki/dc04kpv06.cfg
+++ b/sim/gobs/wiki/dc04kpv06.cfg
@@ -1,7 +1,7 @@
-include = kpv06.cfg system_size_100_1000.cfg
+include = kpv06.cfg system_size_100_1000.cfg
-# This declustering test has no user accesses:
+# This declustering test has no user accesses:
reads = 0
writes = 0
diff --git a/sim/gobs/wiki/decluster02.zsh b/sim/gobs/wiki/decluster02.zsh
index 386483a..e6c1f5d 100755
--- a/sim/gobs/wiki/decluster02.zsh
+++ b/sim/gobs/wiki/decluster02.zsh
@@ -1,8 +1,8 @@
-#!/bin/zsh
+#!/bin/zsh
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="dc02${NAME}"
@@ -10,9 +10,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Decluster02 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Decluster02 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/wiki/decluster03.zsh b/sim/gobs/wiki/decluster03.zsh
index 030df72..bf93ae6 100755
--- a/sim/gobs/wiki/decluster03.zsh
+++ b/sim/gobs/wiki/decluster03.zsh
@@ -2,7 +2,7 @@
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="dc03${NAME}"
@@ -10,9 +10,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Decluster03 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Decluster03 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/wiki/decluster04.zsh b/sim/gobs/wiki/decluster04.zsh
index 6a2da2e..862cfdf 100755
--- a/sim/gobs/wiki/decluster04.zsh
+++ b/sim/gobs/wiki/decluster04.zsh
@@ -2,7 +2,7 @@
NAME=$1
-[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
+[[ ${NAME} == "" ]] && print "No NAME!" && exit 1
NAME="dc04${NAME}"
@@ -10,9 +10,9 @@ CFG="${NAME}.cfg"
EPS="${NAME}.eps"
OUT="${NAME}.out"
-java gobs.sweep.Decluster04 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
-ERR=$?
+java gobs.sweep.Decluster04 -p sweeps -n 20 -o ${EPS} ${CFG} >& ${OUT}
+ERR=$?
-[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
+[[ ${ERR} != 0 ]] && print "Crashed: ${NAME} ERR: ${ERR}" && exit 1
-exit 0
+exit 0
diff --git a/sim/gobs/wiki/kpv01.cfg b/sim/gobs/wiki/kpv01.cfg
index 8f5920d..a68a6f8 100644
--- a/sim/gobs/wiki/kpv01.cfg
+++ b/sim/gobs/wiki/kpv01.cfg
@@ -3,14 +3,14 @@
include = kpv_output.cfg kpv_lit_big.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/wiki/kpv02.cfg b/sim/gobs/wiki/kpv02.cfg
index ce9fc89..6fd2b64 100644
--- a/sim/gobs/wiki/kpv02.cfg
+++ b/sim/gobs/wiki/kpv02.cfg
@@ -1,17 +1,17 @@
### Kademlia vs. PAST vs. Vertex Groups 02
-include = kpv_output.cfg kpv_lit_big.cfg
+include = kpv_output.cfg kpv_lit_big.cfg
#kpv_scenario.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
-# Chosen by sweep driver.
+# Chosen by sweep driver.
replica.source = primary
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
# impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/wiki/kpv03.cfg b/sim/gobs/wiki/kpv03.cfg
index 3530d1a..23b4ef5 100644
--- a/sim/gobs/wiki/kpv03.cfg
+++ b/sim/gobs/wiki/kpv03.cfg
@@ -1,17 +1,17 @@
### Kademlia vs. PAST vs. Vertex Groups 03
-include = kpv_output.cfg kpv_lit_big.cfg
+include = kpv_output.cfg kpv_lit_big.cfg
# kpv_scenario.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = random
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/wiki/kpv04.cfg b/sim/gobs/wiki/kpv04.cfg
index f5bfc14..5a82198 100644
--- a/sim/gobs/wiki/kpv04.cfg
+++ b/sim/gobs/wiki/kpv04.cfg
@@ -4,14 +4,14 @@
include = kpv_output.cfg kpv_lit_big.cfg
# kpv_scenario.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = random
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
# impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/wiki/kpv05.cfg b/sim/gobs/wiki/kpv05.cfg
index a7a95cc..6fa55d1 100644
--- a/sim/gobs/wiki/kpv05.cfg
+++ b/sim/gobs/wiki/kpv05.cfg
@@ -4,14 +4,14 @@
include = kpv_output.cfg kpv_lit_big.cfg
# kpv_scenario.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = last
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
#impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
diff --git a/sim/gobs/wiki/kpv06.cfg b/sim/gobs/wiki/kpv06.cfg
index b6e7bd5..396119e 100644
--- a/sim/gobs/wiki/kpv06.cfg
+++ b/sim/gobs/wiki/kpv06.cfg
@@ -1,17 +1,17 @@
### Kademlia vs. PAST vs. Vertex Groups 06
-include = kpv_output.cfg kpv_lit_big.cfg
+include = kpv_output.cfg kpv_lit_big.cfg
# kpv_scenario.cfg
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
# Chosen by sweep driver.
replica.source = last
VertexGroupPrefix = 5
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
impl.nodefactory = RandomNodes
diff --git a/sim/gobs/wiki/kpv_lit_big.cfg b/sim/gobs/wiki/kpv_lit_big.cfg
index adef78f..a2ca98d 100644
--- a/sim/gobs/wiki/kpv_lit_big.cfg
+++ b/sim/gobs/wiki/kpv_lit_big.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_100,1000
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/wiki/kpv_lit_small.cfg b/sim/gobs/wiki/kpv_lit_small.cfg
index bdbbc08..a2cd9a4 100644
--- a/sim/gobs/wiki/kpv_lit_small.cfg
+++ b/sim/gobs/wiki/kpv_lit_small.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 100
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_30,50
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/wiki/kpv_output.cfg b/sim/gobs/wiki/kpv_output.cfg
index 5f562c3..f3afc38 100644
--- a/sim/gobs/wiki/kpv_output.cfg
+++ b/sim/gobs/wiki/kpv_output.cfg
@@ -3,9 +3,9 @@
# Dump properties for each Simulator execution
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = false
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = false
diff --git a/sim/gobs/wiki/kpv_scenario.cfg b/sim/gobs/wiki/kpv_scenario.cfg
index 3c693ae..2172cf9 100644
--- a/sim/gobs/wiki/kpv_scenario.cfg
+++ b/sim/gobs/wiki/kpv_scenario.cfg
@@ -1,26 +1,26 @@
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/wiki/kpv_small.cfg b/sim/gobs/wiki/kpv_small.cfg
index 22a8fee..88d2db4 100644
--- a/sim/gobs/wiki/kpv_small.cfg
+++ b/sim/gobs/wiki/kpv_small.cfg
@@ -1,26 +1,26 @@
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 1
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/wiki/rb01-range.cfg b/sim/gobs/wiki/rb01-range.cfg
index 6bab4cb..adc6d04 100644
--- a/sim/gobs/wiki/rb01-range.cfg
+++ b/sim/gobs/wiki/rb01-range.cfg
@@ -3,31 +3,31 @@
include = rb_output.cfg
-# Statistics:
+# Statistics:
-# Rebuild traffic over time analysis:
+# Rebuild traffic over time analysis:
plot.traffic.interval = 1000
### Parameters for GOBS Simulator run
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 16
-# Number of servers:
+# Number of servers:
nodes.min = 20
nodes.max = 200
-# Step through nodes: See AbstractSweep.values()
+# Step through nodes: See AbstractSweep.values()
nodes.step = mids
-# Number of files:
+# Number of files:
files = 100
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of accesses:
+# Number of accesses:
reads = 0
writes = 0
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
#impl.placement = Kademlia
impl.placement = Nearest
@@ -37,36 +37,36 @@ vertexgroups.prefix = 6
# Replica selection: See Replicated.locateSource()
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14000
-# Strip size:
+# Strip size:
file.strip = 1000
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
+# Number of objects per file:
file.width = 4
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
diff --git a/sim/gobs/wiki/rb01-small.cfg b/sim/gobs/wiki/rb01-small.cfg
index d3605be..6474dc5 100644
--- a/sim/gobs/wiki/rb01-small.cfg
+++ b/sim/gobs/wiki/rb01-small.cfg
@@ -1,37 +1,37 @@
# Simulator configuration
-# Basics:
+# Basics:
include = rb_output.cfg
-# Statistics:
+# Statistics:
-# Rebuild traffic over time analysis:
+# Rebuild traffic over time analysis:
plot.traffic.interval = 10
### Parameters for GOBS Simulator run
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 16
-# Number of servers:
+# Number of servers:
nodes.min = 12
nodes.max = 16
-# Step through nodes: See AbstractSweep.values()
+# Step through nodes: See AbstractSweep.values()
nodes.step = literal_14,16,18
-# Number of files:
+# Number of files:
files = 6
-# Number of faults:
+# Number of faults:
faults = 2
-# Number of accesses:
+# Number of accesses:
reads = 0
writes = 0
mttf = 500
-### Choose a PlacementScheme implementation:
+### Choose a PlacementScheme implementation:
#impl.placement = Kademlia
impl.placement = Nearest
@@ -41,36 +41,36 @@ vertexgroups.prefix = 6
# Replica selection: See Replicated.locateSource()
replica.source = primary
-### Choose a NodeScheme implementation:
+### Choose a NodeScheme implementation:
# impl.nodefactory = RandomNodes
impl.nodefactory = SimpleNodes
-### Choose one of the following FileFactory sections:
+### Choose one of the following FileFactory sections:
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 140
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
+# Number of objects per file:
file.width = 3
-# FileFactory implementation TraceFiles
+# FileFactory implementation TraceFiles
#impl.filefactory = TraceFiles
-# Trace filename:
-#filetrace = traces/test01.trace
+# Trace filename:
+#filetrace = traces/test01.trace
# FileFactory implementation RandomFiles
#impl.filefactory = RandomFiles
-# Max size of big files:
+# Max size of big files:
#filebigmax = 100
-# Min size of big files:
+# Min size of big files:
#filebigmin = 50
-# Max size of small files:
+# Max size of small files:
#filesmallmax = 20
-# Min size of small files:
+# Min size of small files:
#filesmallmin = 0
diff --git a/sim/gobs/wiki/rb_output.cfg b/sim/gobs/wiki/rb_output.cfg
index 99d53e4..e0c30c4 100644
--- a/sim/gobs/wiki/rb_output.cfg
+++ b/sim/gobs/wiki/rb_output.cfg
@@ -1,11 +1,11 @@
-# Basics:
+# Basics:
# Print all properties at simulation start
print.properties = true
-# Print nodes and objects at startup (true/false)
+# Print nodes and objects at startup (true/false)
print.initialnodes = true
-# Print nodes and objects after each rebuild (true/false)
+# Print nodes and objects after each rebuild (true/false)
print.nodes = false
# Print object tranfers during rebuilds (true/false)
print.rebuilds = true
@@ -14,5 +14,5 @@ print.files = false
# Print load change statistics (true/false)
print.loaddiffs = false
# Print user accesses
-print.accesses = false
+print.accesses = false
diff --git a/sim/gobs/wiki/system_size_100_1000.cfg b/sim/gobs/wiki/system_size_100_1000.cfg
index adef78f..a2ca98d 100644
--- a/sim/gobs/wiki/system_size_100_1000.cfg
+++ b/sim/gobs/wiki/system_size_100_1000.cfg
@@ -1,25 +1,25 @@
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
-# Number of servers:
+# Number of servers:
step = literal_100,1000
minNodes = 0
maxNodes = 0
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
diff --git a/sim/gobs/wiki/system_size_20-1000.cfg b/sim/gobs/wiki/system_size_20-1000.cfg
index 57e29f8..6b34218 100644
--- a/sim/gobs/wiki/system_size_20-1000.cfg
+++ b/sim/gobs/wiki/system_size_20-1000.cfg
@@ -3,27 +3,27 @@
### 20-1000 servers, selected exponentially
### 3000 files * 10 objects * 3 replicas = 90,000 objects
-# Number of servers:
+# Number of servers:
minNodes = 20
maxNodes = 1000
step = exps
-### General parameters:
+### General parameters:
-# Bit-length of addresses:
+# Bit-length of addresses:
B = 32
-# Number of files:
+# Number of files:
files = 3000
-# Number of faults:
+# Number of faults:
faults = 1
# FileFactory implementation PlainFiles
impl.filefactory = PlainFiles
-# File size:
+# File size:
file.size = 14
-# Strip size:
+# Strip size:
file.strip = 4
-# File/object replicas:
+# File/object replicas:
file.replicas = 3
-# Number of objects per file:
-file.width = 10
+# Number of objects per file:
+file.width = 10
hooks/post-receive
--
Grayskull Repository
1
0