Compare commits
733 Commits
Author | SHA1 | Date | |
---|---|---|---|
c375ce1fcd | |||
df813b31c5 | |||
7db92e2951 | |||
6585518f78 | |||
6398e256e4 | |||
b64ebb45e7 | |||
307ac66d9c | |||
dc02f2ea8b | |||
b7386f9d84 | |||
223f9707ca | |||
ea5b00364f | |||
fb98df76b7 | |||
4ddbf8d509 | |||
aa80f69171 | |||
0ace22d03f | |||
0e6aca5a7e | |||
3f04226864 | |||
d308eed136 | |||
ed1149c8e0 | |||
48f58a88bc | |||
d238371b0c | |||
0b7e8d0162 | |||
18fd52367e | |||
2d665da3e1 | |||
5ef06a9d36 | |||
f4622d67e9 | |||
b65c9ea544 | |||
cc7c6c960e | |||
01697a9f5c | |||
ab361a8073 | |||
ec5c02cb7f | |||
e8124324ff | |||
1720fe6a46 | |||
e50bc0d34b | |||
45774dc4aa | |||
ea8d9d1aea | |||
221866f74e | |||
3e96d59359 | |||
8c19b6268c | |||
8ae26867c5 | |||
19baaea0da | |||
e3cebcf82d | |||
ccad5d5aaf | |||
d0bcde001e | |||
83a8e82626 | |||
7305a1f407 | |||
3975c7f8c9 | |||
ac1d075d73 | |||
73a278dc64 | |||
a042ee609a | |||
0d5c1239c6 | |||
027ec71aa9 | |||
ef718c651e | |||
fc2a0d53d9 | |||
bb47844ae6 | |||
b997d3eb4e | |||
9bcca268a3 | |||
8a2d4e2f72 | |||
335675c51c | |||
1bf2285fa2 | |||
71f77a8e0a | |||
644a7f9a44 | |||
965361ff69 | |||
4593d333c7 | |||
940519ea5a | |||
a0bcbf70d5 | |||
17fb8258e5 | |||
c350543b46 | |||
5b4ecb01ca | |||
28b115497f | |||
0604029661 | |||
2374cf09e2 | |||
ab475e4849 | |||
1c97b31eaf | |||
bd257050e3 | |||
2d362ed337 | |||
cb7117beac | |||
b358ff66e1 | |||
6309c97697 | |||
58727463e1 | |||
741d148a0d | |||
127553ce4b | |||
ecb055a252 | |||
dfa6fbaa0c | |||
cf11d4c7dc | |||
d0a4686990 | |||
2542d5dd42 | |||
1e0f2b2446 | |||
a8028fbb93 | |||
ed87229cec | |||
c4fd81fc1c | |||
ad43babe3d | |||
36c0cb052b | |||
ed58bcda4c | |||
268bb1b59b | |||
059764586a | |||
72b11081a4 | |||
0bbee9456f | |||
fcac910989 | |||
2e9ba149f2 | |||
d3712dd26d | |||
60877f9ba4 | |||
4f2c76150f | |||
137577fb86 | |||
bf623219d2 | |||
25d1f841ee | |||
517fe73734 | |||
890919d140 | |||
33ea1e0edd | |||
7614af2a45 | |||
1528959327 | |||
46b6cedff4 | |||
8d8f28c1d0 | |||
df782b93ae | |||
124f77cdb1 | |||
fc15f74c3c | |||
1d06aa3b31 | |||
0b263f8714 | |||
84b3e12e1f | |||
669282ae69 | |||
485806c488 | |||
1412ee1ca6 | |||
ef5fb6fa46 | |||
99432833d2 | |||
fa00803fbf | |||
04ef977509 | |||
87c6508305 | |||
ed0c1d3b52 | |||
8b5598fabd | |||
5b070ad014 | |||
6246405afd | |||
27c8ba6afc | |||
b832a03315 | |||
09686290bc | |||
4aaa7b30ca | |||
fe590da3b6 | |||
a7fa92b372 | |||
a25e57c397 | |||
eed676113e | |||
b57f24f1bc | |||
0e084358b4 | |||
f016c9a669 | |||
59ba1df910 | |||
71a2c90f21 | |||
8436457e75 | |||
3ac0192d40 | |||
3db159f616 | |||
e21f5c784e | |||
65c24db83c | |||
ed5101b031 | |||
1420628b28 | |||
15ab966ed1 | |||
b5a735878a | |||
b6d09f1901 | |||
78f6ddc5b7 | |||
4e595e8e3c | |||
79249360f7 | |||
336d5136bf | |||
0c8cee8c4a | |||
4c0420b884 | |||
0d7e093415 | |||
c835749563 | |||
0172d2a065 | |||
927f272f0e | |||
5e2891ae5d | |||
4f85481a2b | |||
d314e0395a | |||
69a6d07371 | |||
fab8ef379f | |||
408ef8b2cb | |||
a2a2f1c2d2 | |||
dc2888c9a3 | |||
9739be9ecf | |||
e61257695f | |||
b9988b62e4 | |||
d6b3961530 | |||
6d0be323ad | |||
09256adbc3 | |||
8e3a7da596 | |||
7d96510d17 | |||
0fd795a676 | |||
eff876881b | |||
9adf0d4ee0 | |||
3bc9789e8d | |||
fd207b6907 | |||
2226c1b75c | |||
a0964bb2c2 | |||
b5383b8b54 | |||
39f86050a6 | |||
a03d441e6f | |||
3900d09f6f | |||
e218f4e56e | |||
81ba18eea6 | |||
1671ece9df | |||
775fa0c968 | |||
dd276138c2 | |||
0c55b37976 | |||
966d077431 | |||
400412d76c | |||
c7e77a2238 | |||
64c42e28dc | |||
c2baf7b07d | |||
a52a9afa3c | |||
669502ede7 | |||
b19f730527 | |||
d5ff5f4739 | |||
1c82f84595 | |||
bea9cd9684 | |||
1bc9a9c23b | |||
c4faccc77f | |||
e6803daf10 | |||
effe6e3ff3 | |||
0d6c233747 | |||
015e696077 | |||
7faab2072c | |||
83718a3b3e | |||
4a074133f7 | |||
12eff5a2f9 | |||
4197cce8c9 | |||
fed3817ed3 | |||
4ffd7693d6 | |||
1596c961d9 | |||
fd7d5cbe0d | |||
7058287273 | |||
912aafcefd | |||
2f34f433b3 | |||
1ff4dd9a9a | |||
fdcaad96c7 | |||
14a72b0fc0 | |||
c13ab9f14e | |||
cff1bc6e71 | |||
bb6c4efe9b | |||
c324e71768 | |||
e2570c98ee | |||
b5125479ec | |||
989355e885 | |||
a2f2c46f87 | |||
605623baf5 | |||
fdc452c536 | |||
1b391dd36b | |||
917067741a | |||
34ed93d57c | |||
d400a64b9a | |||
2c7447b73e | |||
c0f0fa24f8 | |||
bda5f949bb | |||
992e985972 | |||
afaa359b0d | |||
3c17db41dc | |||
d62ed4f6b3 | |||
79f3194d0c | |||
b045f9a50d | |||
ce231602dc | |||
6f5e0cd161 | |||
1269a79a4d | |||
1b3424ff61 | |||
8b8033c72b | |||
7ca0109732 | |||
6b5172d002 | |||
9e19a635bb | |||
15193d0e1f | |||
f1c5c72e62 | |||
25dfed207c | |||
006cbee88a | |||
c95e5346a4 | |||
e54bf563b5 | |||
8f79327190 | |||
a197ac092a | |||
1e2b55c0d7 | |||
964ff522be | |||
934c32cbc6 | |||
9bd6be779f | |||
ce70d6eedc | |||
3a0d13aa77 | |||
f9323c5273 | |||
7587656cf6 | |||
023074650f | |||
d854e90c23 | |||
3aabeb2b81 | |||
65f5885bce | |||
7a132eabb4 | |||
7e1b380f01 | |||
1a2d9b8eed | |||
6eefa0b72d | |||
44372db955 | |||
e24cce4aed | |||
a8595c0418 | |||
340424e03a | |||
93036bec01 | |||
663e98969d | |||
37d1daf58e | |||
1a18f0ca55 | |||
bb950ec93e | |||
39ab3557a3 | |||
dcdc46b97c | |||
da3ed0dfb3 | |||
e391b9fb90 | |||
e346cdad26 | |||
7e4c6ff218 | |||
356f246a74 | |||
80da552834 | |||
2dd8ab197d | |||
1fe11e9ae2 | |||
21d5fe6272 | |||
52bc4a3598 | |||
cccaacee36 | |||
ebf6e1c0e9 | |||
5cf090c896 | |||
cc299053cc | |||
82b75796f9 | |||
a560d94a9f | |||
0827d52c6f | |||
a8d33c9950 | |||
43c32ea280 | |||
30d40e9a32 | |||
e28508ad56 | |||
182e4cec86 | |||
a32de96ab1 | |||
0de35fdd1f | |||
470d9cd752 | |||
87598c7612 | |||
57bf618627 | |||
c576a707b0 | |||
b78b1bbfa9 | |||
e710964d05 | |||
2d00657756 | |||
0526d4ff21 | |||
76e20015a4 | |||
f5e797e3aa | |||
787e36a28f | |||
8572b57834 | |||
ed0129f881 | |||
78836a9e22 | |||
4c08184379 | |||
da165d6943 | |||
8ffccfbaff | |||
a6d083d69d | |||
91bae9d510 | |||
f0f185509f | |||
5947ef7706 | |||
4f663a2a86 | |||
1d01777a13 | |||
6d3b8b6d7d | |||
50c1c08235 | |||
b16c30b4c6 | |||
ff1ca1e0d3 | |||
721c4378c1 | |||
5f4e0c7e3e | |||
e6af4511a8 | |||
965ad778dd | |||
3b78be83cf | |||
564cd4e09d | |||
699ca5fec1 | |||
f91ffbbfdf | |||
156292e408 | |||
81ae44f858 | |||
c948814eae | |||
b5dba77056 | |||
ef06d165b4 | |||
5cb23c814d | |||
8f7ded33e0 | |||
a17d5795fb | |||
ad4d41e602 | |||
9754fc789e | |||
fd3c6eb320 | |||
b7b68ecdba | |||
08ba27627d | |||
27d2c0aaf3 | |||
b714a4be63 | |||
2356b25c58 | |||
05cad05505 | |||
1e3082fbc0 | |||
80d2573b10 | |||
6adcdc41f4 | |||
2d08dddfc8 | |||
6da8f49d8b | |||
bcd072c5e8 | |||
e90a31781c | |||
2e89ec9105 | |||
865c42465a | |||
73c93cc345 | |||
cf32fdf672 | |||
c33b54794c | |||
6775e83420 | |||
719785a8d3 | |||
287995ffdf | |||
0e506a53b5 | |||
70e1a15973 | |||
09cff5e4cc | |||
57858b8015 | |||
07855e3125 | |||
2f5f8e7afd | |||
43897de12e | |||
4b577aa77b | |||
85c3d64f29 | |||
47dd293904 | |||
c4220a4853 | |||
48ab88a2af | |||
d9cf9709d2 | |||
9720c894f1 | |||
8dad3af36d | |||
e5425d4a27 | |||
58e6d4aabb | |||
9ce142606c | |||
e75a64a8a2 | |||
bc71e1b612 | |||
580ca36a62 | |||
447fe48d2a | |||
e8a6c8cd6d | |||
a8fd42c1df | |||
e782c26908 | |||
cd65a1e172 | |||
6e51c5685e | |||
84a37a2c0c | |||
7e94cc2cc3 | |||
7002ccb866 | |||
4fe0b116ae | |||
a0fb9de515 | |||
5d42dcc9ec | |||
96e88c90e8 | |||
75d94240ed | |||
6c544708e1 | |||
078e7246ac | |||
06cff1fb9f | |||
2e8bbed75b | |||
a707c9410e | |||
a956bb08d8 | |||
db52cc6749 | |||
73c6224a95 | |||
a217920561 | |||
48a36f59a6 | |||
965b132664 | |||
63f185f9bf | |||
e97b0088f2 | |||
374c17a0d9 | |||
4b3bc587ab | |||
06c63f2026 | |||
6b7d9942a7 | |||
760a56964f | |||
6ca575b5a3 | |||
ce1d36cacb | |||
87b2525e03 | |||
faa77aca2e | |||
5d2158792c | |||
e1ebaa902b | |||
e0564f628e | |||
44e45aa090 | |||
89f5f336af | |||
727be309b2 | |||
ce2d7a2d5a | |||
fad6c7201e | |||
8f0e1f3349 | |||
6f7d0c6928 | |||
120c8f244c | |||
352a367570 | |||
9f65d22909 | |||
141131f3a6 | |||
488420fdf2 | |||
10e6b8f769 | |||
419da18405 | |||
7329d4bf3a | |||
c8fe4043b6 | |||
3d133d61ca | |||
d51e42c707 | |||
79e39d6f0b | |||
7dec934bb3 | |||
83f866df01 | |||
d88d8e2dbb | |||
3a40dff999 | |||
3f69d58498 | |||
ca10cf081f | |||
f120449aae | |||
636f51c93c | |||
9bb47c8c61 | |||
8886db2000 | |||
a7040896f0 | |||
2ebfab8e07 | |||
9bd5888f5e | |||
8b7bbbc6af | |||
0383ffa5ab | |||
3c361eb759 | |||
37eaa6e4f9 | |||
0ae7e86fcb | |||
3f405d8908 | |||
0245847ea8 | |||
54f16ca2bf | |||
a096ade345 | |||
848fe51f3d | |||
e82db6fc2f | |||
4b3176a9a1 | |||
5e6c58716e | |||
e98132fd76 | |||
ff171baa67 | |||
05664d150b | |||
fcda972cec | |||
01f44f531e | |||
c5b076ec7e | |||
05cf5a38af | |||
bd22b641b3 | |||
6a9005645a | |||
7392505bd8 | |||
6aaf742dfe | |||
dcaf69a5d5 | |||
323673c3c0 | |||
e16ccf8cf8 | |||
434cde179f | |||
629a4b5bf8 | |||
6a8f6fb3cc | |||
807e930786 | |||
554188e88e | |||
585fca06a1 | |||
282667c4b5 | |||
8176470b7f | |||
acb7ce16ca | |||
12bdef51f5 | |||
84b07c81fd | |||
107360a001 | |||
3f541df669 | |||
da17783242 | |||
0ea2843ec9 | |||
7c92bf15e2 | |||
97589f77f8 | |||
504adcc8c8 | |||
f03ed9f5bf | |||
b22dc38ba1 | |||
7a7992ab0b | |||
3513f4ee84 | |||
f33703aefc | |||
389089859d | |||
844dddfee0 | |||
862e7a410d | |||
7ad64c8d45 | |||
5b50990879 | |||
71b93468d5 | |||
6b88da2b82 | |||
d01ea20273 | |||
f05860672c | |||
2b5e919a47 | |||
27c8df6140 | |||
9ac112104c | |||
98b80288ed | |||
ecdea54203 | |||
9d5a07bac4 | |||
7adc721d96 | |||
f5137028fa | |||
48f9b2fdcc | |||
b7d6ff6770 | |||
f7a87d5e52 | |||
75d1aa5135 | |||
49396a69bf | |||
d94041e98d | |||
cc5408482e | |||
115bf2613d | |||
1d172b07a8 | |||
777ae3c215 | |||
1b2a9270e8 | |||
e082418e4a | |||
83218c479a | |||
dbb8267b09 | |||
ea0ba19089 | |||
2db28cae41 | |||
dd54fff978 | |||
c4f3bb9b67 | |||
45487a91f9 | |||
dad5c62df5 | |||
a1ab81a896 | |||
1d0ba0d1f2 | |||
46a4ea8f67 | |||
42f2b14a74 | |||
bec5835289 | |||
0aa4dc904e | |||
f526c424c5 | |||
601d7a52e9 | |||
7f6fc74c36 | |||
9e2ce1751b | |||
8920ac02f6 | |||
06415de8ee | |||
12d471e2da | |||
7d6777a96f | |||
96c08cd295 | |||
f3633a2e04 | |||
feeb1cb566 | |||
146bc95c16 | |||
5792f5bfb5 | |||
11521dca08 | |||
6f457292ff | |||
696cb298ab | |||
6d2861f358 | |||
7879fa5095 | |||
a03062af4f | |||
19ecce1e32 | |||
5e0a69f68b | |||
a33bcac52f | |||
39cd6dff7d | |||
ed9cf3566c | |||
d4d246bfd1 | |||
c02a14c798 | |||
781ce30e27 | |||
4b68c7c154 | |||
daddd90058 | |||
5d2b27d916 | |||
7a37363817 | |||
bee3829960 | |||
e0600e5a91 | |||
b55b646f12 | |||
43e608af47 | |||
32d6d811c5 | |||
0d6fca5abc | |||
48a085c28f | |||
059e631f41 | |||
deb7ac549c | |||
891767c6b7 | |||
62810d769a | |||
5253c27ca8 | |||
1ffd6b4b4d | |||
6469606baf | |||
77cd292828 | |||
22d6951de5 | |||
33f7103eae | |||
c00216e3be | |||
42247e0e1a | |||
8a908a6864 | |||
2d6ed7142f | |||
9ecb844de7 | |||
3ab8185777 | |||
b8008ae1e9 | |||
ab9ec45c9d | |||
6a0d683f79 | |||
711487267d | |||
503bf69ab3 | |||
a60521269d | |||
fe96f85410 | |||
275fab003f | |||
edfb386ef0 | |||
186709ed75 | |||
b7d4330dd4 | |||
7c3be2ec9a | |||
8fac9102eb | |||
178854ac97 | |||
f4a089cc26 | |||
422eab5846 | |||
95e1404a2b | |||
cfc21e1225 | |||
3799190fa0 | |||
d6c3396182 | |||
a95d37ea25 | |||
d8e1a196bc | |||
1e2970b7e1 | |||
0d1fed78af | |||
709bda5939 | |||
8a28734603 | |||
9485eba73d | |||
23c4a7dc49 | |||
39b578fde9 | |||
8e16079157 | |||
eabd23fc07 | |||
c7932b710c | |||
9d7a926a8b | |||
0a390cbc91 | |||
76829457df | |||
703a5348e8 | |||
1a135fa30e | |||
e4d75c77bf | |||
75d505c431 | |||
b72c99e46a | |||
fae9c08815 | |||
c3e7deb4b6 | |||
c9245751e9 | |||
9b172879a2 | |||
9077a94dfe | |||
e2f07a5220 | |||
ae93d574c2 | |||
369f37a0a4 | |||
e1b7f40c2b | |||
94dcd3fe12 | |||
2dc1ae9026 | |||
7cfff75c3e | |||
a66a49d384 | |||
5f58e0661b | |||
f0a40862d6 | |||
f75c51ff71 | |||
d357192025 | |||
c996c8ff49 | |||
1af4e256c9 | |||
bc09365c98 | |||
ba688cf629 | |||
d5c8b26a45 | |||
d38f3f664f | |||
5ac435325b | |||
b874441a47 | |||
a35087a5ed | |||
1aeaf052a6 | |||
a0eafa12e3 | |||
757425a360 | |||
64d1e776f7 | |||
c6695a3120 | |||
076e384bb5 | |||
41cff1b49d | |||
6796b08909 | |||
f9df17d8d0 | |||
7f71a0ba37 | |||
0e2e13f018 | |||
bd099e2f4d | |||
42f56b9f86 | |||
704c50ea17 | |||
887bff572a | |||
1eaf71b5b4 | |||
0f872af502 | |||
b13696ea1a | |||
5fbbf7c748 | |||
e7fe0db051 | |||
dcb7bd8c74 | |||
92d485dd4d | |||
f4229a5d3e | |||
f97626346b | |||
7f4feaee08 | |||
5a30ef180a | |||
0a0412e47e | |||
57d4b50467 | |||
8d75efdc58 | |||
c706f9b2cd | |||
c810913861 | |||
2b13158e29 | |||
4fe1716c7a | |||
d7a82783be | |||
0a0f15baca | |||
58c144ee55 | |||
280315a314 | |||
506ff5809e | |||
acd1505050 | |||
578b56fc10 | |||
88cb0c6ae3 | |||
294662a1ce |
2
.github/stale.yml
vendored
@ -1,7 +1,7 @@
|
|||||||
only: pulls
|
only: pulls
|
||||||
|
|
||||||
# Number of days of inactivity before a pull request becomes stale
|
# Number of days of inactivity before a pull request becomes stale
|
||||||
daysUntilStale: 30
|
daysUntilStale: 7
|
||||||
|
|
||||||
# Number of days of inactivity before a stale pull request is closed
|
# Number of days of inactivity before a stale pull request is closed
|
||||||
daysUntilClose: 7
|
daysUntilClose: 7
|
||||||
|
1
.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
/book/html/
|
/book/html/
|
||||||
/book/src/tests.ok
|
/book/src/tests.ok
|
||||||
|
/book/src/.gitbook/assets/*.svg
|
||||||
/farf/
|
/farf/
|
||||||
/solana-release/
|
/solana-release/
|
||||||
/solana-release.tar.bz2
|
/solana-release.tar.bz2
|
||||||
|
40
.mergify.yml
@ -19,22 +19,6 @@ pull_request_rules:
|
|||||||
label:
|
label:
|
||||||
add:
|
add:
|
||||||
- automerge
|
- automerge
|
||||||
- name: v0.21 backport
|
|
||||||
conditions:
|
|
||||||
- base=master
|
|
||||||
- label=v0.21
|
|
||||||
actions:
|
|
||||||
backport:
|
|
||||||
branches:
|
|
||||||
- v0.21
|
|
||||||
- name: v0.22 backport
|
|
||||||
conditions:
|
|
||||||
- base=master
|
|
||||||
- label=v0.22
|
|
||||||
actions:
|
|
||||||
backport:
|
|
||||||
branches:
|
|
||||||
- v0.22
|
|
||||||
- name: v0.23 backport
|
- name: v0.23 backport
|
||||||
conditions:
|
conditions:
|
||||||
- base=master
|
- base=master
|
||||||
@ -43,3 +27,27 @@ pull_request_rules:
|
|||||||
backport:
|
backport:
|
||||||
branches:
|
branches:
|
||||||
- v0.23
|
- v0.23
|
||||||
|
- name: v1.0 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v1.0
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v1.0
|
||||||
|
- name: v1.1 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v1.1
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v1.1
|
||||||
|
- name: v1.2 backport
|
||||||
|
conditions:
|
||||||
|
- base=master
|
||||||
|
- label=v1.2
|
||||||
|
actions:
|
||||||
|
backport:
|
||||||
|
branches:
|
||||||
|
- v1.2
|
||||||
|
259
CONTRIBUTING.md
@ -1,23 +1,41 @@
|
|||||||
Solana Coding Guidelines
|
# Solana Coding Guidelines
|
||||||
===
|
|
||||||
|
|
||||||
The goal of these guidelines is to improve developer productivity by allowing developers to
|
The goal of these guidelines is to improve developer productivity by allowing
|
||||||
jump any file in the codebase and not need to adapt to inconsistencies in how the code is
|
developers to jump into any file in the codebase and not need to adapt to
|
||||||
written. The codebase should appear as if it had been authored by a single developer. If you
|
inconsistencies in how the code is written. The codebase should appear as if it
|
||||||
don't agree with a convention, submit a PR patching this document and let's discuss! Once
|
had been authored by a single developer. If you don't agree with a convention,
|
||||||
the PR is accepted, *all* code should be updated as soon as possible to reflect the new
|
submit a PR patching this document and let's discuss! Once the PR is accepted,
|
||||||
|
*all* code should be updated as soon as possible to reflect the new
|
||||||
conventions.
|
conventions.
|
||||||
|
|
||||||
Pull Requests
|
## Pull Requests
|
||||||
---
|
|
||||||
|
|
||||||
Small, frequent PRs are much preferred to large, infrequent ones. A large PR is difficult
|
Small, frequent PRs are much preferred to large, infrequent ones. A large PR is
|
||||||
to review, can block others from making progress, and can quickly get its author into
|
difficult to review, can block others from making progress, and can quickly get
|
||||||
"rebase hell". A large PR oftentimes arises when one change requires another, which requires
|
its author into "rebase hell". A large PR oftentimes arises when one change
|
||||||
another, and then another. When you notice those dependencies, put the fix into a commit of
|
requires another, which requires another, and then another. When you notice
|
||||||
its own, then checkout a new branch, and cherrypick it. Open a PR to start the review
|
those dependencies, put the fix into a commit of its own, then checkout a new
|
||||||
process and then jump back to your original branch to keep making progress. Once the commit
|
branch, and cherry-pick it.
|
||||||
is merged, you can use git-rebase to purge it from your original branch.
|
|
||||||
|
```bash
|
||||||
|
$ git commit -am "Fix foo, needed by bar"
|
||||||
|
$ git checkout master
|
||||||
|
$ git checkout -b fix-foo
|
||||||
|
$ git cherry-pick fix-bar
|
||||||
|
$ git push --set-upstream origin fix-foo
|
||||||
|
```
|
||||||
|
|
||||||
|
Open a PR to start the review process and then jump back to your original
|
||||||
|
branch to keep making progress. Consider rebasing to make your fix the first
|
||||||
|
commit:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ git checkout fix-bar
|
||||||
|
$ git rebase -i master <Move fix-foo to top>
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the commit is merged, rebase the original branch to purge the
|
||||||
|
cherry-picked commit:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ git pull --rebase upstream master
|
$ git pull --rebase upstream master
|
||||||
@ -25,26 +43,137 @@ $ git pull --rebase upstream master
|
|||||||
|
|
||||||
### How big is too big?
|
### How big is too big?
|
||||||
|
|
||||||
If there are no functional changes, PRs can be very large and that's no problem. If,
|
If there are no functional changes, PRs can be very large and that's no
|
||||||
however, your changes are making meaningful changes or additions, then about 1,000 lines of
|
problem. If, however, your changes are making meaningful changes or additions,
|
||||||
changes is about the most you should ask a Solana maintainer to review.
|
then about 1,000 lines of changes is about the most you should ask a Solana
|
||||||
|
maintainer to review.
|
||||||
|
|
||||||
### Should I send small PRs as I develop large, new components?
|
### Should I send small PRs as I develop large, new components?
|
||||||
|
|
||||||
Add only code to the codebase that is ready to be deployed. If you are building a large
|
Add only code to the codebase that is ready to be deployed. If you are building
|
||||||
library, consider developing it in a separate git repository. When it is ready to be
|
a large library, consider developing it in a separate git repository. When it
|
||||||
integrated, the Solana maintainers will work with you to decide on a path forward. Smaller
|
is ready to be integrated, the Solana maintainers will work with you to decide
|
||||||
libraries may be copied in whereas very large ones may be pulled in with a package manager.
|
on a path forward. Smaller libraries may be copied in whereas very large ones
|
||||||
|
may be pulled in with a package manager.
|
||||||
|
|
||||||
|
## Getting Pull Requests Merged
|
||||||
|
|
||||||
|
There is no single person assigned to watching GitHub PR queue and ushering you
|
||||||
|
through the process. Typically, you will ask the person that wrote a component
|
||||||
|
to review changes to it. You can find the author using `git blame` or asking on
|
||||||
|
Discord. When working to get your PR merged, it's most important to understand
|
||||||
|
that changing the code is your priority and not necessarily a priority of the
|
||||||
|
person you need an approval from. Also, while you may interact the most with
|
||||||
|
the component author, you should aim to be inclusive of others. Providing a
|
||||||
|
detailed problem description is the most effective means of engaging both the
|
||||||
|
component author and other potentially interested parties.
|
||||||
|
|
||||||
|
Consider opening all PRs as Draft Pull Requests first. Using a draft PR allows
|
||||||
|
you to kickstart the CI automation, which typically takes between 10 and 30
|
||||||
|
minutes to execute. Use that time to write a detailed problem description. Once
|
||||||
|
the description is written and CI succeeds, click the "Ready to Review" button
|
||||||
|
and add reviewers. Adding reviewers before CI succeeds is a fast path to losing
|
||||||
|
reviewer engagement. Not only will they be notified and see the PR is not yet
|
||||||
|
ready for them, they will also be bombarded them with additional notifications
|
||||||
|
each time you push a commit to get past CI or until they "mute" the PR. Once
|
||||||
|
muted, you'll need to reach out over some other medium, such as Discord, to
|
||||||
|
request they have another look. When you use draft PRs, no notifications are
|
||||||
|
sent when you push commits and edit the PR description. Use draft PRs
|
||||||
|
liberally. Don't bug the humans until you have gotten past the bots.
|
||||||
|
|
||||||
|
### What should be in my PR description?
|
||||||
|
|
||||||
|
Reviewing code is hard work and generally involves an attempt to guess the
|
||||||
|
author's intent at various levels. Please assume reviewer time is scarce and do
|
||||||
|
what you can to make your PR as consumable as possible. Inspired by techniques
|
||||||
|
for writing good whitepapers, the guidance here aims to maximize reviewer
|
||||||
|
engagement.
|
||||||
|
|
||||||
|
Assume the reviewer will spend no more than a few seconds reading the PR title.
|
||||||
|
If it doesn't describe a noteworthy change, don't expect the reviewer to click
|
||||||
|
to see more.
|
||||||
|
|
||||||
|
Next, like the abstract of a whitepaper, the reviewer will spend ~30 seconds
|
||||||
|
reading the PR problem description. If what is described there doesn't look
|
||||||
|
more important than competing issues, don't expect the reviewer to read on.
|
||||||
|
|
||||||
|
Next, the reviewer will read the proposed changes. At this point, the reviewer
|
||||||
|
needs to be convinced the proposed changes are a *good* solution to the problem
|
||||||
|
described above. If the proposed changes, not the code changes, generates
|
||||||
|
discussion, consider closing the PR and returning with a design proposal
|
||||||
|
instead.
|
||||||
|
|
||||||
|
Finally, once the reviewer understands the problem and agrees with the approach
|
||||||
|
to solving it, the reviewer will view the code changes. At this point, the
|
||||||
|
reviewer is simply looking to see if the implementation actually implements
|
||||||
|
what was proposed and if that implementation is maintainable. When a concise,
|
||||||
|
readable test for each new code path is present, the reviewer can safely ignore
|
||||||
|
the details of its implementation. When those tests are missing, expect to
|
||||||
|
either lose engagement or get a pile of review comments as the reviewer
|
||||||
|
attempts to consider every ambiguity in your implementation.
|
||||||
|
|
||||||
|
### The PR Title
|
||||||
|
|
||||||
|
The PR title should contain a brief summary of the change, from the perspective
|
||||||
|
of the user. Examples of good titles:
|
||||||
|
|
||||||
|
* Add rent to accounts
|
||||||
|
* Fix out-of-memory error in validator
|
||||||
|
* Clean up `process_message()` in runtime
|
||||||
|
|
||||||
|
The conventions here are all the same as a good git commit title:
|
||||||
|
|
||||||
|
* First word capitalized and in the imperative mood, not past tense ("add", not
|
||||||
|
"added")
|
||||||
|
* No trailing period
|
||||||
|
* What was done, whom it was done to, and in what context
|
||||||
|
|
||||||
|
### The PR Problem Statement
|
||||||
|
|
||||||
|
The git repo implements a product with various features. The problem statement
|
||||||
|
should describe how the product is missing a feature, how a feature is
|
||||||
|
incomplete, or how the implementation of a feature is somehow undesirable. If
|
||||||
|
an issue being fixed already describes the problem, go ahead and copy-paste it.
|
||||||
|
As mentioned above, reviewer time is scarce. Given a queue of PRs to review,
|
||||||
|
the reviewer may ignore PRs that expect them to click through links to see if
|
||||||
|
the PR warrants attention.
|
||||||
|
|
||||||
|
### The Proposed Changes
|
||||||
|
|
||||||
|
Typically the content under the "Proposed changes" section will be a bulleted
|
||||||
|
list of steps taken to solve the problem. Oftentimes, the list is identical to
|
||||||
|
the subject lines of the git commits contained in the PR. It's especially
|
||||||
|
generous (and not expected) to rebase or reword commits such that each change
|
||||||
|
matches the logical flow in your PR description.
|
||||||
|
|
||||||
### When will my PR be reviewed?
|
### When will my PR be reviewed?
|
||||||
|
|
||||||
PRs are typically reviewed and merged in under 7 days. If your PR has been open for longer,
|
PRs are typically reviewed and merged in under 7 days. If your PR has been open
|
||||||
it's a strong indicator that the reviewers aren't confident the change meets the quality
|
for longer, it's a strong indicator that the reviewers aren't confident the
|
||||||
standards of the codebase. You might consider closing it and coming back with smaller PRs
|
change meets the quality standards of the codebase. You might consider closing
|
||||||
and longer descriptions detailing what problem it solves and how it solves it.
|
it and coming back with smaller PRs and longer descriptions detailing what
|
||||||
|
problem it solves and how it solves it. Old PRs will be marked stale and then
|
||||||
|
closed automatically 7 days later.
|
||||||
|
|
||||||
Draft Pull Requests
|
### How to manage review feedback?
|
||||||
---
|
|
||||||
|
After a reviewer provides feedback, you can quickly say "acknowledged, will
|
||||||
|
fix" using a thumb's up emoji. If you're confident your fix is exactly as
|
||||||
|
prescribed, add a reply "Fixed in COMMIT\_HASH" and mark the comment as
|
||||||
|
resolved. If you're not sure, reply "Is this what you had in mind?
|
||||||
|
COMMIT\_HASH" and if so, the reviewer will reply and mark the conversation as
|
||||||
|
resolved. Marking conversations as resolved is an excellent way to engage more
|
||||||
|
reviewers. Leaving conversations open may imply the PR is not yet ready for
|
||||||
|
additional review.
|
||||||
|
|
||||||
|
### When will my PR be re-reviewed?
|
||||||
|
|
||||||
|
Recall that once your PR is opened, a notification is sent every time you push
|
||||||
|
a commit. After a reviewer adds feedback, they won't be checking on the status
|
||||||
|
of that feedback after every new commit. Instead, directly mention the reviewer
|
||||||
|
when you feel your PR is ready for another pass.
|
||||||
|
|
||||||
|
## Draft Pull Requests
|
||||||
|
|
||||||
If you want early feedback on your PR, use GitHub's "Draft Pull Request"
|
If you want early feedback on your PR, use GitHub's "Draft Pull Request"
|
||||||
mechanism. Draft PRs are a convenient way to collaborate with the Solana
|
mechanism. Draft PRs are a convenient way to collaborate with the Solana
|
||||||
@ -52,67 +181,69 @@ maintainers without triggering notifications as you make changes. When you feel
|
|||||||
your PR is ready for a broader audience, you can transition your draft PR to a
|
your PR is ready for a broader audience, you can transition your draft PR to a
|
||||||
standard PR with the click of a button.
|
standard PR with the click of a button.
|
||||||
|
|
||||||
Do not add reviewers to draft PRs. GitHub doesn't automatically clear approvals
|
Do not add reviewers to draft PRs. GitHub doesn't automatically clear
|
||||||
when you click "Ready for Review", so a review that meant "I approve of the
|
approvals when you click "Ready for Review", so a review that meant "I approve
|
||||||
direction" suddenly has the appearance of "I approve of these changes." Instead,
|
of the direction" suddenly has the appearance of "I approve of these changes."
|
||||||
add a comment that mentions the usernames that you would like a review from. Ask
|
Instead, add a comment that mentions the usernames that you would like a review
|
||||||
explicitly what you would like feedback on.
|
from. Ask explicitly what you would like feedback on.
|
||||||
|
|
||||||
Rust coding conventions
|
## Rust coding conventions
|
||||||
---
|
|
||||||
|
|
||||||
* All Rust code is formatted using the latest version of `rustfmt`. Once installed, it will be
|
* All Rust code is formatted using the latest version of `rustfmt`. Once
|
||||||
updated automatically when you update the compiler with `rustup`.
|
installed, it will be updated automatically when you update the compiler with
|
||||||
|
`rustup`.
|
||||||
|
|
||||||
* All Rust code is linted with Clippy. If you'd prefer to ignore its advice, do so explicitly:
|
* All Rust code is linted with Clippy. If you'd prefer to ignore its advice, do
|
||||||
|
so explicitly:
|
||||||
|
|
||||||
```rust
|
```rust #[allow(clippy::too_many_arguments)] ```
|
||||||
#[allow(clippy::too_many_arguments)]
|
|
||||||
```
|
|
||||||
|
|
||||||
Note: Clippy defaults can be overridden in the top-level file `.clippy.toml`.
|
Note: Clippy defaults can be overridden in the top-level file `.clippy.toml`.
|
||||||
|
|
||||||
* For variable names, when in doubt, spell it out. The mapping from type names to variable names
|
* For variable names, when in doubt, spell it out. The mapping from type names
|
||||||
is to lowercase the type name, putting an underscore before each capital letter. Variable names
|
to variable names is to lowercase the type name, putting an underscore before
|
||||||
should *not* be abbreviated unless being used as closure arguments and the brevity improves
|
each capital letter. Variable names should *not* be abbreviated unless being
|
||||||
readability. When a function has multiple instances of the same type, qualify each with a
|
used as closure arguments and the brevity improves readability. When a function
|
||||||
prefix and underscore (i.e. alice_keypair) or a numeric suffix (i.e. tx0).
|
has multiple instances of the same type, qualify each with a prefix and
|
||||||
|
underscore (i.e. alice\_keypair) or a numeric suffix (i.e. tx0).
|
||||||
|
|
||||||
* For function and method names, use `<verb>_<subject>`. For unit tests, that verb should
|
* For function and method names, use `<verb>_<subject>`. For unit tests, that
|
||||||
always be `test` and for benchmarks the verb should always be `bench`. Avoid namespacing
|
verb should always be `test` and for benchmarks the verb should always be
|
||||||
function names with some arbitrary word. Avoid abbreviating words in function names.
|
`bench`. Avoid namespacing function names with some arbitrary word. Avoid
|
||||||
|
abbreviating words in function names.
|
||||||
|
|
||||||
* As they say, "When in Rome, do as the Romans do." A good patch should acknowledge the coding
|
* As they say, "When in Rome, do as the Romans do." A good patch should
|
||||||
conventions of the code that surrounds it, even in the case where that code has not yet been
|
acknowledge the coding conventions of the code that surrounds it, even in the
|
||||||
updated to meet the conventions described here.
|
case where that code has not yet been updated to meet the conventions described
|
||||||
|
here.
|
||||||
|
|
||||||
|
|
||||||
Terminology
|
## Terminology
|
||||||
---
|
|
||||||
|
|
||||||
Inventing new terms is allowed, but should only be done when the term is widely used and
|
Inventing new terms is allowed, but should only be done when the term is widely
|
||||||
understood. Avoid introducing new 3-letter terms, which can be confused with 3-letter acronyms.
|
used and understood. Avoid introducing new 3-letter terms, which can be
|
||||||
|
confused with 3-letter acronyms.
|
||||||
|
|
||||||
[Terms currently in use](book/src/terminology.md)
|
[Terms currently in use](book/src/terminology.md)
|
||||||
|
|
||||||
|
|
||||||
Design Proposals
|
## Design Proposals
|
||||||
---
|
|
||||||
|
|
||||||
Solana's architecture is described by a book generated from markdown files in
|
Solana's architecture is described by a book generated from markdown files in
|
||||||
the `book/src/` directory, maintained by an *editor* (currently @garious). To
|
the `book/src/` directory, maintained by an *editor* (currently @garious). To
|
||||||
add a design proposal, you'll need to at least propose a change the content
|
add a design proposal, you'll need to at least propose a change the content
|
||||||
under the [Accepted Design
|
under the [Accepted Design
|
||||||
Proposals](https://docs.solana.com/book/v/master/proposals) chapter.
|
Proposals](https://docs.solana.com/book/v/master/proposals) chapter. Here's
|
||||||
Here's the full process:
|
the full process:
|
||||||
|
|
||||||
1. Propose a design by creating a PR that adds a markdown document to the
|
1. Propose a design by creating a PR that adds a markdown document to the
|
||||||
directory `book/src/` and references it from the [table of
|
directory `book/src/` and references it from the [table of
|
||||||
contents](book/src/SUMMARY.md). Add any relevant *maintainers* to the PR review.
|
contents](book/src/SUMMARY.md). Add any relevant *maintainers* to the PR
|
||||||
|
review.
|
||||||
2. The PR being merged indicates your proposed change was accepted and that the
|
2. The PR being merged indicates your proposed change was accepted and that the
|
||||||
maintainers support your plan of attack.
|
maintainers support your plan of attack.
|
||||||
3. Submit PRs that implement the proposal. When the implementation reveals the
|
3. Submit PRs that implement the proposal. When the implementation reveals the
|
||||||
need for tweaks to the proposal, be sure to update the proposal and have
|
need for tweaks to the proposal, be sure to update the proposal and have that
|
||||||
that change reviewed by the same people as in step 1.
|
change reviewed by the same people as in step 1.
|
||||||
4. Once the implementation is complete, submit a PR that moves the link from
|
4. Once the implementation is complete, submit a PR that moves the link from
|
||||||
the Accepted Proposals to the Implemented Proposals section.
|
the Accepted Proposals to the Implemented Proposals section.
|
||||||
|
2780
Cargo.lock
generated
19
Cargo.toml
@ -4,10 +4,13 @@ members = [
|
|||||||
"bench-streamer",
|
"bench-streamer",
|
||||||
"bench-tps",
|
"bench-tps",
|
||||||
"banking-bench",
|
"banking-bench",
|
||||||
|
"chacha",
|
||||||
|
"chacha-cuda",
|
||||||
"chacha-sys",
|
"chacha-sys",
|
||||||
|
"cli-config",
|
||||||
"client",
|
"client",
|
||||||
"core",
|
"core",
|
||||||
"drone",
|
"faucet",
|
||||||
"perf",
|
"perf",
|
||||||
"validator",
|
"validator",
|
||||||
"genesis",
|
"genesis",
|
||||||
@ -29,31 +32,33 @@ members = [
|
|||||||
"programs/btc_spv",
|
"programs/btc_spv",
|
||||||
"programs/btc_spv_bin",
|
"programs/btc_spv_bin",
|
||||||
"programs/config",
|
"programs/config",
|
||||||
"programs/config_tests",
|
|
||||||
"programs/exchange",
|
"programs/exchange",
|
||||||
"programs/failure",
|
"programs/failure",
|
||||||
"programs/noop",
|
"programs/noop",
|
||||||
"programs/ownable_api",
|
"programs/ownable",
|
||||||
"programs/stake",
|
"programs/stake",
|
||||||
"programs/stake_tests",
|
|
||||||
"programs/storage",
|
"programs/storage",
|
||||||
"programs/storage_tests",
|
|
||||||
"programs/vest",
|
"programs/vest",
|
||||||
"programs/vote",
|
"programs/vote",
|
||||||
"archiver",
|
"archiver",
|
||||||
|
"archiver-lib",
|
||||||
|
"archiver-utils",
|
||||||
|
"remote-wallet",
|
||||||
"runtime",
|
"runtime",
|
||||||
"sdk",
|
"sdk",
|
||||||
"sdk-c",
|
"sdk-c",
|
||||||
|
"scripts",
|
||||||
|
"sys-tuner",
|
||||||
"upload-perf",
|
"upload-perf",
|
||||||
"net-utils",
|
"net-utils",
|
||||||
"fixed-buf",
|
|
||||||
"vote-signer",
|
"vote-signer",
|
||||||
"cli",
|
"cli",
|
||||||
"rayon-threadlimit",
|
"rayon-threadlimit",
|
||||||
|
"watchtower",
|
||||||
]
|
]
|
||||||
|
|
||||||
exclude = [
|
exclude = [
|
||||||
"programs/bpf",
|
"programs/bpf",
|
||||||
"programs/move_loader",
|
"programs/move_loader",
|
||||||
"programs/librapay_api",
|
"programs/librapay",
|
||||||
]
|
]
|
||||||
|
10
README.md
@ -87,7 +87,8 @@ $ rustup update
|
|||||||
On Linux systems you may need to install libssl-dev, pkg-config, zlib1g-dev, etc. On Ubuntu:
|
On Linux systems you may need to install libssl-dev, pkg-config, zlib1g-dev, etc. On Ubuntu:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo apt-get install libssl-dev pkg-config zlib1g-dev llvm clang
|
$ sudo apt-get update
|
||||||
|
$ sudo apt-get install libssl-dev libudev-dev pkg-config zlib1g-dev llvm clang
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the source code:
|
Download the source code:
|
||||||
@ -120,16 +121,13 @@ $ cargo test
|
|||||||
Local Testnet
|
Local Testnet
|
||||||
---
|
---
|
||||||
|
|
||||||
Start your own testnet locally, instructions are in the book [Solana: Blockchain Rebuild for Scale: Getting Started](https://docs.solana.com/book/getting-started).
|
Start your own testnet locally, instructions are in the book [Solana: Blockchain Rebuild for Scale: Getting Started](https://docs.solana.com/book/building-from-source).
|
||||||
|
|
||||||
Remote Testnets
|
Remote Testnets
|
||||||
---
|
---
|
||||||
|
|
||||||
We maintain several testnets:
|
* `testnet` - public stable testnet accessible via devnet.solana.com. Runs 24/7
|
||||||
|
|
||||||
* `testnet` - public stable testnet accessible via testnet.solana.com. Runs 24/7
|
|
||||||
* `testnet-beta` - public beta channel testnet accessible via beta.testnet.solana.com. Runs 24/7
|
|
||||||
* `testnet-edge` - public edge channel testnet accessible via edge.testnet.solana.com. Runs 24/7
|
|
||||||
|
|
||||||
## Deploy process
|
## Deploy process
|
||||||
|
|
||||||
|
25
RELEASE.md
@ -140,28 +140,9 @@ TODO: Documentation update procedure is WIP as we move to gitbook
|
|||||||
|
|
||||||
Document the new recommended version by updating `book/src/running-archiver.md` and `book/src/validator-testnet.md` on the release (beta) branch to point at the `solana-install` for the upcoming release version.
|
Document the new recommended version by updating `book/src/running-archiver.md` and `book/src/validator-testnet.md` on the release (beta) branch to point at the `solana-install` for the upcoming release version.
|
||||||
|
|
||||||
#### Publish updated Book
|
### Update software on devnet.solana.com
|
||||||
We maintain three copies of the "book" as official documentation:
|
|
||||||
|
|
||||||
1) "Book" is the documentation for the latest official release. This should get manually updated whenever a new release is made. It is published here:
|
The testnet running on devnet.solana.com is set to use a fixed release tag
|
||||||
https://solana-labs.github.io/book/
|
|
||||||
|
|
||||||
2) "Book-edge" tracks the tip of the master branch and updates automatically.
|
|
||||||
https://solana-labs.github.io/book-edge/
|
|
||||||
|
|
||||||
3) "Book-beta" tracks the tip of the beta branch and updates automatically.
|
|
||||||
https://solana-labs.github.io/book-beta/
|
|
||||||
|
|
||||||
To manually trigger an update of the "Book", create a new job of the manual-update-book pipeline.
|
|
||||||
Set the tag of the latest release as the PUBLISH_BOOK_TAG environment variable.
|
|
||||||
```bash
|
|
||||||
PUBLISH_BOOK_TAG=v0.16.6
|
|
||||||
```
|
|
||||||
https://buildkite.com/solana-labs/manual-update-book
|
|
||||||
|
|
||||||
### Update software on testnet.solana.com
|
|
||||||
|
|
||||||
The testnet running on testnet.solana.com is set to use a fixed release tag
|
|
||||||
which is set in the Buildkite testnet-management pipeline.
|
which is set in the Buildkite testnet-management pipeline.
|
||||||
This tag needs to be updated and the testnet restarted after a new release
|
This tag needs to be updated and the testnet restarted after a new release
|
||||||
tag is created.
|
tag is created.
|
||||||
@ -201,4 +182,4 @@ TESTNET_OP=create-and-start
|
|||||||
### Alert the community
|
### Alert the community
|
||||||
|
|
||||||
Notify Discord users on #validator-support that a new release for
|
Notify Discord users on #validator-support that a new release for
|
||||||
testnet.solana.com is available
|
devnet.solana.com is available
|
||||||
|
39
archiver-lib/Cargo.toml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
[package]
|
||||||
|
name = "solana-archiver-lib"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "Solana Archiver Library"
|
||||||
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
homepage = "https://solana.com/"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bincode = "1.2.1"
|
||||||
|
crossbeam-channel = "0.3"
|
||||||
|
ed25519-dalek = "=1.0.0-pre.1"
|
||||||
|
log = "0.4.8"
|
||||||
|
rand = "0.6.5"
|
||||||
|
rand_chacha = "0.1.1"
|
||||||
|
solana-client = { path = "../client", version = "1.0.0" }
|
||||||
|
solana-storage-program = { path = "../programs/storage", version = "1.0.0" }
|
||||||
|
thiserror = "1.0"
|
||||||
|
serde = "1.0.104"
|
||||||
|
serde_json = "1.0.46"
|
||||||
|
serde_derive = "1.0.103"
|
||||||
|
solana-net-utils = { path = "../net-utils", version = "1.0.0" }
|
||||||
|
solana-chacha = { path = "../chacha", version = "1.0.0" }
|
||||||
|
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.0" }
|
||||||
|
solana-ledger = { path = "../ledger", version = "1.0.0" }
|
||||||
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
|
solana-perf = { path = "../perf", version = "1.0.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
|
solana-archiver-utils = { path = "../archiver-utils", version = "1.0.0" }
|
||||||
|
solana-metrics = { path = "../metrics", version = "1.0.0" }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
hex = "0.4.0"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "solana_archiver_lib"
|
@ -1,38 +1,42 @@
|
|||||||
use crate::{
|
use crate::result::ArchiverError;
|
||||||
chacha::{chacha_cbc_encrypt_ledger, CHACHA_BLOCK_SIZE},
|
use crossbeam_channel::unbounded;
|
||||||
|
use rand::{thread_rng, Rng, SeedableRng};
|
||||||
|
use rand_chacha::ChaChaRng;
|
||||||
|
use solana_archiver_utils::sample_file;
|
||||||
|
use solana_chacha::chacha::{chacha_cbc_encrypt_ledger, CHACHA_BLOCK_SIZE};
|
||||||
|
use solana_client::{
|
||||||
|
rpc_client::RpcClient, rpc_request::RpcRequest, rpc_response::RpcStorageTurn,
|
||||||
|
thin_client::ThinClient,
|
||||||
|
};
|
||||||
|
use solana_core::{
|
||||||
cluster_info::{ClusterInfo, Node, VALIDATOR_PORT_RANGE},
|
cluster_info::{ClusterInfo, Node, VALIDATOR_PORT_RANGE},
|
||||||
contact_info::ContactInfo,
|
contact_info::ContactInfo,
|
||||||
gossip_service::GossipService,
|
gossip_service::GossipService,
|
||||||
packet::{limited_deserialize, PACKET_DATA_SIZE},
|
packet::{limited_deserialize, PACKET_DATA_SIZE},
|
||||||
repair_service,
|
repair_service,
|
||||||
repair_service::{RepairService, RepairSlotRange, RepairStrategy},
|
repair_service::{RepairService, RepairSlotRange, RepairStrategy},
|
||||||
result::{Error, Result},
|
serve_repair::ServeRepair,
|
||||||
shred_fetch_stage::ShredFetchStage,
|
shred_fetch_stage::ShredFetchStage,
|
||||||
sigverify_stage::{DisabledSigVerifier, SigVerifyStage},
|
sigverify_stage::{DisabledSigVerifier, SigVerifyStage},
|
||||||
storage_stage::NUM_STORAGE_SAMPLES,
|
storage_stage::NUM_STORAGE_SAMPLES,
|
||||||
streamer::{receiver, responder, PacketReceiver},
|
streamer::{receiver, responder, PacketReceiver},
|
||||||
window_service::WindowService,
|
window_service::WindowService,
|
||||||
};
|
};
|
||||||
use crossbeam_channel::unbounded;
|
|
||||||
use ed25519_dalek;
|
|
||||||
use rand::{thread_rng, Rng, SeedableRng};
|
|
||||||
use rand_chacha::ChaChaRng;
|
|
||||||
use solana_client::{rpc_client::RpcClient, rpc_request::RpcRequest, thin_client::ThinClient};
|
|
||||||
use solana_ledger::{
|
use solana_ledger::{
|
||||||
blocktree::Blocktree, leader_schedule_cache::LeaderScheduleCache, shred::Shred,
|
blockstore::Blockstore, leader_schedule_cache::LeaderScheduleCache, shred::Shred,
|
||||||
};
|
};
|
||||||
use solana_net_utils::bind_in_range;
|
use solana_net_utils::bind_in_range;
|
||||||
use solana_perf::packet::Packets;
|
use solana_perf::packet::Packets;
|
||||||
use solana_perf::recycler::Recycler;
|
use solana_perf::recycler::Recycler;
|
||||||
use solana_sdk::packet::Packet;
|
use solana_sdk::packet::Packet;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
account_utils::State,
|
account_utils::StateMut,
|
||||||
client::{AsyncClient, SyncClient},
|
client::{AsyncClient, SyncClient},
|
||||||
clock::{get_complete_segment_from_slot, get_segment_from_slot, Slot},
|
clock::{get_complete_segment_from_slot, get_segment_from_slot, Slot},
|
||||||
commitment_config::CommitmentConfig,
|
commitment_config::CommitmentConfig,
|
||||||
hash::{Hash, Hasher},
|
hash::Hash,
|
||||||
message::Message,
|
message::Message,
|
||||||
signature::{Keypair, KeypairUtil, Signature},
|
signature::{Keypair, Signature, Signer},
|
||||||
timing::timestamp,
|
timing::timestamp,
|
||||||
transaction::Transaction,
|
transaction::Transaction,
|
||||||
transport::TransportError,
|
transport::TransportError,
|
||||||
@ -42,9 +46,7 @@ use solana_storage_program::{
|
|||||||
storage_instruction::{self, StorageAccountType},
|
storage_instruction::{self, StorageAccountType},
|
||||||
};
|
};
|
||||||
use std::{
|
use std::{
|
||||||
fs::File,
|
io::{self, ErrorKind},
|
||||||
io::{self, BufReader, ErrorKind, Read, Seek, SeekFrom},
|
|
||||||
mem::size_of,
|
|
||||||
net::{SocketAddr, UdpSocket},
|
net::{SocketAddr, UdpSocket},
|
||||||
path::{Path, PathBuf},
|
path::{Path, PathBuf},
|
||||||
result,
|
result,
|
||||||
@ -55,6 +57,8 @@ use std::{
|
|||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type Result<T> = std::result::Result<T, ArchiverError>;
|
||||||
|
|
||||||
static ENCRYPTED_FILENAME: &str = "ledger.enc";
|
static ENCRYPTED_FILENAME: &str = "ledger.enc";
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
@ -82,47 +86,12 @@ struct ArchiverMeta {
|
|||||||
client_commitment: CommitmentConfig,
|
client_commitment: CommitmentConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn sample_file(in_path: &Path, sample_offsets: &[u64]) -> io::Result<Hash> {
|
|
||||||
let in_file = File::open(in_path)?;
|
|
||||||
let metadata = in_file.metadata()?;
|
|
||||||
let mut buffer_file = BufReader::new(in_file);
|
|
||||||
|
|
||||||
let mut hasher = Hasher::default();
|
|
||||||
let sample_size = size_of::<Hash>();
|
|
||||||
let sample_size64 = sample_size as u64;
|
|
||||||
let mut buf = vec![0; sample_size];
|
|
||||||
|
|
||||||
let file_len = metadata.len();
|
|
||||||
if file_len < sample_size64 {
|
|
||||||
return Err(io::Error::new(ErrorKind::Other, "file too short!"));
|
|
||||||
}
|
|
||||||
for offset in sample_offsets {
|
|
||||||
if *offset > (file_len - sample_size64) / sample_size64 {
|
|
||||||
return Err(io::Error::new(ErrorKind::Other, "offset too large"));
|
|
||||||
}
|
|
||||||
buffer_file.seek(SeekFrom::Start(*offset * sample_size64))?;
|
|
||||||
trace!("sampling @ {} ", *offset);
|
|
||||||
match buffer_file.read(&mut buf) {
|
|
||||||
Ok(size) => {
|
|
||||||
assert_eq!(size, buf.len());
|
|
||||||
hasher.hash(&buf);
|
|
||||||
}
|
|
||||||
Err(e) => {
|
|
||||||
warn!("Error sampling file");
|
|
||||||
return Err(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(hasher.result())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_slot_from_signature(
|
fn get_slot_from_signature(
|
||||||
signature: &ed25519_dalek::Signature,
|
signature: &Signature,
|
||||||
storage_turn: u64,
|
storage_turn: u64,
|
||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
) -> u64 {
|
) -> u64 {
|
||||||
let signature_vec = signature.to_bytes();
|
let signature_vec = signature.as_ref();
|
||||||
let mut segment_index = u64::from(signature_vec[0])
|
let mut segment_index = u64::from(signature_vec[0])
|
||||||
| (u64::from(signature_vec[1]) << 8)
|
| (u64::from(signature_vec[1]) << 8)
|
||||||
| (u64::from(signature_vec[1]) << 16)
|
| (u64::from(signature_vec[1]) << 16)
|
||||||
@ -146,7 +115,7 @@ fn create_request_processor(
|
|||||||
let t_receiver = receiver(storage_socket.clone(), exit, s_reader, recycler, "archiver");
|
let t_receiver = receiver(storage_socket.clone(), exit, s_reader, recycler, "archiver");
|
||||||
thread_handles.push(t_receiver);
|
thread_handles.push(t_receiver);
|
||||||
|
|
||||||
let t_responder = responder("archiver-responder", storage_socket.clone(), r_responder);
|
let t_responder = responder("archiver-responder", storage_socket, r_responder);
|
||||||
thread_handles.push(t_responder);
|
thread_handles.push(t_responder);
|
||||||
|
|
||||||
let exit = exit.clone();
|
let exit = exit.clone();
|
||||||
@ -222,30 +191,24 @@ impl Archiver {
|
|||||||
// Note for now, this ledger will not contain any of the existing entries
|
// Note for now, this ledger will not contain any of the existing entries
|
||||||
// in the ledger located at ledger_path, and will only append on newly received
|
// in the ledger located at ledger_path, and will only append on newly received
|
||||||
// entries after being passed to window_service
|
// entries after being passed to window_service
|
||||||
let blocktree = Arc::new(
|
let blockstore = Arc::new(
|
||||||
Blocktree::open(ledger_path).expect("Expected to be able to open database ledger"),
|
Blockstore::open(ledger_path).expect("Expected to be able to open database ledger"),
|
||||||
);
|
);
|
||||||
|
|
||||||
let gossip_service = GossipService::new(
|
let gossip_service = GossipService::new(&cluster_info, None, node.sockets.gossip, &exit);
|
||||||
&cluster_info,
|
|
||||||
Some(blocktree.clone()),
|
|
||||||
None,
|
|
||||||
node.sockets.gossip,
|
|
||||||
&exit,
|
|
||||||
);
|
|
||||||
|
|
||||||
info!("Connecting to the cluster via {:?}", cluster_entrypoint);
|
info!("Connecting to the cluster via {:?}", cluster_entrypoint);
|
||||||
let (nodes, _) =
|
let (nodes, _) =
|
||||||
match crate::gossip_service::discover_cluster(&cluster_entrypoint.gossip, 1) {
|
match solana_core::gossip_service::discover_cluster(&cluster_entrypoint.gossip, 1) {
|
||||||
Ok(nodes_and_archivers) => nodes_and_archivers,
|
Ok(nodes_and_archivers) => nodes_and_archivers,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
//shutdown services before exiting
|
//shutdown services before exiting
|
||||||
exit.store(true, Ordering::Relaxed);
|
exit.store(true, Ordering::Relaxed);
|
||||||
gossip_service.join()?;
|
gossip_service.join()?;
|
||||||
return Err(Error::from(e));
|
return Err(e.into());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let client = crate::gossip_service::get_client(&nodes);
|
let client = solana_core::gossip_service::get_client(&nodes);
|
||||||
|
|
||||||
info!("Setting up mining account...");
|
info!("Setting up mining account...");
|
||||||
if let Err(e) = Self::setup_mining_account(
|
if let Err(e) = Self::setup_mining_account(
|
||||||
@ -294,7 +257,7 @@ impl Archiver {
|
|||||||
let window_service = match Self::setup(
|
let window_service = match Self::setup(
|
||||||
&mut meta,
|
&mut meta,
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
&blocktree,
|
&blockstore,
|
||||||
&exit,
|
&exit,
|
||||||
&node_info,
|
&node_info,
|
||||||
&storage_keypair,
|
&storage_keypair,
|
||||||
@ -320,7 +283,7 @@ impl Archiver {
|
|||||||
// run archiver
|
// run archiver
|
||||||
Self::run(
|
Self::run(
|
||||||
&mut meta,
|
&mut meta,
|
||||||
&blocktree,
|
&blockstore,
|
||||||
cluster_info,
|
cluster_info,
|
||||||
&keypair,
|
&keypair,
|
||||||
&storage_keypair,
|
&storage_keypair,
|
||||||
@ -344,14 +307,14 @@ impl Archiver {
|
|||||||
|
|
||||||
fn run(
|
fn run(
|
||||||
meta: &mut ArchiverMeta,
|
meta: &mut ArchiverMeta,
|
||||||
blocktree: &Arc<Blocktree>,
|
blockstore: &Arc<Blockstore>,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
archiver_keypair: &Arc<Keypair>,
|
archiver_keypair: &Arc<Keypair>,
|
||||||
storage_keypair: &Arc<Keypair>,
|
storage_keypair: &Arc<Keypair>,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
) {
|
) {
|
||||||
// encrypt segment
|
// encrypt segment
|
||||||
Self::encrypt_ledger(meta, blocktree).expect("ledger encrypt not successful");
|
Self::encrypt_ledger(meta, blockstore).expect("ledger encrypt not successful");
|
||||||
let enc_file_path = meta.ledger_data_file_encrypted.clone();
|
let enc_file_path = meta.ledger_data_file_encrypted.clone();
|
||||||
// do replicate
|
// do replicate
|
||||||
loop {
|
loop {
|
||||||
@ -408,7 +371,7 @@ impl Archiver {
|
|||||||
client_commitment: CommitmentConfig,
|
client_commitment: CommitmentConfig,
|
||||||
) {
|
) {
|
||||||
let nodes = cluster_info.read().unwrap().tvu_peers();
|
let nodes = cluster_info.read().unwrap().tvu_peers();
|
||||||
let client = crate::gossip_service::get_client(&nodes);
|
let client = solana_core::gossip_service::get_client(&nodes);
|
||||||
|
|
||||||
if let Ok(Some(account)) =
|
if let Ok(Some(account)) =
|
||||||
client.get_account_with_commitment(&storage_keypair.pubkey(), client_commitment.clone())
|
client.get_account_with_commitment(&storage_keypair.pubkey(), client_commitment.clone())
|
||||||
@ -421,14 +384,14 @@ impl Archiver {
|
|||||||
);
|
);
|
||||||
let message =
|
let message =
|
||||||
Message::new_with_payer(vec![ix], Some(&archiver_keypair.pubkey()));
|
Message::new_with_payer(vec![ix], Some(&archiver_keypair.pubkey()));
|
||||||
if let Err(e) = client.send_message(&[&archiver_keypair], message) {
|
if let Err(e) = client.send_message(&[archiver_keypair.as_ref()], message) {
|
||||||
error!("unable to redeem reward, tx failed: {:?}", e);
|
error!("unable to redeem reward, tx failed: {:?}", e);
|
||||||
} else {
|
} else {
|
||||||
info!(
|
info!(
|
||||||
"collected mining rewards: Account balance {:?}",
|
"collected mining rewards: Account balance {:?}",
|
||||||
client.get_balance_with_commitment(
|
client.get_balance_with_commitment(
|
||||||
&archiver_keypair.pubkey(),
|
&archiver_keypair.pubkey(),
|
||||||
client_commitment.clone()
|
client_commitment
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -443,7 +406,7 @@ impl Archiver {
|
|||||||
fn setup(
|
fn setup(
|
||||||
meta: &mut ArchiverMeta,
|
meta: &mut ArchiverMeta,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
blocktree: &Arc<Blocktree>,
|
blockstore: &Arc<Blockstore>,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
node_info: &ContactInfo,
|
node_info: &ContactInfo,
|
||||||
storage_keypair: &Arc<Keypair>,
|
storage_keypair: &Arc<Keypair>,
|
||||||
@ -474,13 +437,13 @@ impl Archiver {
|
|||||||
return Err(e);
|
return Err(e);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let signature = storage_keypair.sign(segment_blockhash.as_ref());
|
let signature = storage_keypair.sign_message(segment_blockhash.as_ref());
|
||||||
let slot = get_slot_from_signature(&signature, segment_slot, slots_per_segment);
|
let slot = get_slot_from_signature(&signature, segment_slot, slots_per_segment);
|
||||||
info!("replicating slot: {}", slot);
|
info!("replicating slot: {}", slot);
|
||||||
slot_sender.send(slot)?;
|
slot_sender.send(slot)?;
|
||||||
meta.slot = slot;
|
meta.slot = slot;
|
||||||
meta.slots_per_segment = slots_per_segment;
|
meta.slots_per_segment = slots_per_segment;
|
||||||
meta.signature = Signature::new(&signature.to_bytes());
|
meta.signature = signature;
|
||||||
meta.blockhash = segment_blockhash;
|
meta.blockhash = segment_blockhash;
|
||||||
|
|
||||||
let mut repair_slot_range = RepairSlotRange::default();
|
let mut repair_slot_range = RepairSlotRange::default();
|
||||||
@ -493,12 +456,12 @@ impl Archiver {
|
|||||||
|
|
||||||
let _sigverify_stage = SigVerifyStage::new(
|
let _sigverify_stage = SigVerifyStage::new(
|
||||||
shred_fetch_receiver,
|
shred_fetch_receiver,
|
||||||
verified_sender.clone(),
|
verified_sender,
|
||||||
DisabledSigVerifier::default(),
|
DisabledSigVerifier::default(),
|
||||||
);
|
);
|
||||||
|
|
||||||
let window_service = WindowService::new(
|
let window_service = WindowService::new(
|
||||||
blocktree.clone(),
|
blockstore.clone(),
|
||||||
cluster_info.clone(),
|
cluster_info.clone(),
|
||||||
verified_receiver,
|
verified_receiver,
|
||||||
retransmit_sender,
|
retransmit_sender,
|
||||||
@ -512,7 +475,7 @@ impl Archiver {
|
|||||||
Self::wait_for_segment_download(
|
Self::wait_for_segment_download(
|
||||||
slot,
|
slot,
|
||||||
slots_per_segment,
|
slots_per_segment,
|
||||||
&blocktree,
|
&blockstore,
|
||||||
&exit,
|
&exit,
|
||||||
&node_info,
|
&node_info,
|
||||||
cluster_info,
|
cluster_info,
|
||||||
@ -523,7 +486,7 @@ impl Archiver {
|
|||||||
fn wait_for_segment_download(
|
fn wait_for_segment_download(
|
||||||
start_slot: Slot,
|
start_slot: Slot,
|
||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
blocktree: &Arc<Blocktree>,
|
blockstore: &Arc<Blockstore>,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
node_info: &ContactInfo,
|
node_info: &ContactInfo,
|
||||||
cluster_info: Arc<RwLock<ClusterInfo>>,
|
cluster_info: Arc<RwLock<ClusterInfo>>,
|
||||||
@ -534,7 +497,7 @@ impl Archiver {
|
|||||||
);
|
);
|
||||||
let mut current_slot = start_slot;
|
let mut current_slot = start_slot;
|
||||||
'outer: loop {
|
'outer: loop {
|
||||||
while blocktree.is_full(current_slot) {
|
while blockstore.is_full(current_slot) {
|
||||||
current_slot += 1;
|
current_slot += 1;
|
||||||
info!("current slot: {}", current_slot);
|
info!("current slot: {}", current_slot);
|
||||||
if current_slot >= start_slot + slots_per_segment {
|
if current_slot >= start_slot + slots_per_segment {
|
||||||
@ -553,13 +516,15 @@ impl Archiver {
|
|||||||
let mut contact_info = node_info.clone();
|
let mut contact_info = node_info.clone();
|
||||||
contact_info.tvu = "0.0.0.0:0".parse().unwrap();
|
contact_info.tvu = "0.0.0.0:0".parse().unwrap();
|
||||||
contact_info.wallclock = timestamp();
|
contact_info.wallclock = timestamp();
|
||||||
|
// copy over the adopted shred_version from the entrypoint
|
||||||
|
contact_info.shred_version = cluster_info.read().unwrap().my_data().shred_version;
|
||||||
{
|
{
|
||||||
let mut cluster_info_w = cluster_info.write().unwrap();
|
let mut cluster_info_w = cluster_info.write().unwrap();
|
||||||
cluster_info_w.insert_self(contact_info);
|
cluster_info_w.insert_self(contact_info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn encrypt_ledger(meta: &mut ArchiverMeta, blocktree: &Arc<Blocktree>) -> Result<()> {
|
fn encrypt_ledger(meta: &mut ArchiverMeta, blockstore: &Arc<Blockstore>) -> Result<()> {
|
||||||
meta.ledger_data_file_encrypted = meta.ledger_path.join(ENCRYPTED_FILENAME);
|
meta.ledger_data_file_encrypted = meta.ledger_path.join(ENCRYPTED_FILENAME);
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -567,7 +532,7 @@ impl Archiver {
|
|||||||
ivec.copy_from_slice(&meta.signature.as_ref());
|
ivec.copy_from_slice(&meta.signature.as_ref());
|
||||||
|
|
||||||
let num_encrypted_bytes = chacha_cbc_encrypt_ledger(
|
let num_encrypted_bytes = chacha_cbc_encrypt_ledger(
|
||||||
blocktree,
|
blockstore,
|
||||||
meta.slot,
|
meta.slot,
|
||||||
meta.slots_per_segment,
|
meta.slots_per_segment,
|
||||||
&meta.ledger_data_file_encrypted,
|
&meta.ledger_data_file_encrypted,
|
||||||
@ -619,9 +584,7 @@ impl Archiver {
|
|||||||
client_commitment.clone(),
|
client_commitment.clone(),
|
||||||
)? == 0
|
)? == 0
|
||||||
{
|
{
|
||||||
return Err(
|
return Err(ArchiverError::EmptyStorageAccountBalance);
|
||||||
io::Error::new(io::ErrorKind::Other, "keypair account has no balance").into(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
info!("checking storage account keypair...");
|
info!("checking storage account keypair...");
|
||||||
@ -632,11 +595,8 @@ impl Archiver {
|
|||||||
let blockhash =
|
let blockhash =
|
||||||
match client.get_recent_blockhash_with_commitment(client_commitment.clone()) {
|
match client.get_recent_blockhash_with_commitment(client_commitment.clone()) {
|
||||||
Ok((blockhash, _)) => blockhash,
|
Ok((blockhash, _)) => blockhash,
|
||||||
Err(_) => {
|
Err(e) => {
|
||||||
return Err(Error::IO(<io::Error>::new(
|
return Err(ArchiverError::TransportError(e));
|
||||||
io::ErrorKind::Other,
|
|
||||||
"unable to get recent blockhash, can't submit proof",
|
|
||||||
)));
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -650,7 +610,7 @@ impl Archiver {
|
|||||||
let tx = Transaction::new_signed_instructions(&[keypair], ix, blockhash);
|
let tx = Transaction::new_signed_instructions(&[keypair], ix, blockhash);
|
||||||
let signature = client.async_send_transaction(tx)?;
|
let signature = client.async_send_transaction(tx)?;
|
||||||
client
|
client
|
||||||
.poll_for_signature_with_commitment(&signature, client_commitment.clone())
|
.poll_for_signature_with_commitment(&signature, client_commitment)
|
||||||
.map_err(|err| match err {
|
.map_err(|err| match err {
|
||||||
TransportError::IoError(e) => e,
|
TransportError::IoError(e) => e,
|
||||||
TransportError::TransactionError(_) => io::Error::new(
|
TransportError::TransactionError(_) => io::Error::new(
|
||||||
@ -670,7 +630,7 @@ impl Archiver {
|
|||||||
) {
|
) {
|
||||||
// No point if we've got no storage account...
|
// No point if we've got no storage account...
|
||||||
let nodes = cluster_info.read().unwrap().tvu_peers();
|
let nodes = cluster_info.read().unwrap().tvu_peers();
|
||||||
let client = crate::gossip_service::get_client(&nodes);
|
let client = solana_core::gossip_service::get_client(&nodes);
|
||||||
let storage_balance = client.poll_get_balance_with_commitment(
|
let storage_balance = client.poll_get_balance_with_commitment(
|
||||||
&storage_keypair.pubkey(),
|
&storage_keypair.pubkey(),
|
||||||
meta.client_commitment.clone(),
|
meta.client_commitment.clone(),
|
||||||
@ -711,7 +671,7 @@ impl Archiver {
|
|||||||
blockhash,
|
blockhash,
|
||||||
);
|
);
|
||||||
if let Err(err) = client.send_and_confirm_transaction(
|
if let Err(err) = client.send_and_confirm_transaction(
|
||||||
&[&archiver_keypair, &storage_keypair],
|
&[archiver_keypair.as_ref(), storage_keypair.as_ref()],
|
||||||
&mut transaction,
|
&mut transaction,
|
||||||
10,
|
10,
|
||||||
0,
|
0,
|
||||||
@ -734,10 +694,10 @@ impl Archiver {
|
|||||||
fn get_segment_config(
|
fn get_segment_config(
|
||||||
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
||||||
client_commitment: CommitmentConfig,
|
client_commitment: CommitmentConfig,
|
||||||
) -> result::Result<u64, Error> {
|
) -> Result<u64> {
|
||||||
let rpc_peers = {
|
let rpc_peers = {
|
||||||
let cluster_info = cluster_info.read().unwrap();
|
let cluster_info = cluster_info.read().unwrap();
|
||||||
cluster_info.rpc_peers()
|
cluster_info.all_rpc_peers()
|
||||||
};
|
};
|
||||||
debug!("rpc peers: {:?}", rpc_peers);
|
debug!("rpc peers: {:?}", rpc_peers);
|
||||||
if !rpc_peers.is_empty() {
|
if !rpc_peers.is_empty() {
|
||||||
@ -748,18 +708,17 @@ impl Archiver {
|
|||||||
Ok(rpc_client
|
Ok(rpc_client
|
||||||
.send(
|
.send(
|
||||||
&RpcRequest::GetSlotsPerSegment,
|
&RpcRequest::GetSlotsPerSegment,
|
||||||
None,
|
serde_json::json!([client_commitment]),
|
||||||
0,
|
0,
|
||||||
Some(client_commitment),
|
|
||||||
)
|
)
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
warn!("Error while making rpc request {:?}", err);
|
warn!("Error while making rpc request {:?}", err);
|
||||||
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
ArchiverError::ClientError(err)
|
||||||
})?
|
})?
|
||||||
.as_u64()
|
.as_u64()
|
||||||
.unwrap())
|
.unwrap())
|
||||||
} else {
|
} else {
|
||||||
Err(io::Error::new(io::ErrorKind::Other, "No RPC peers...".to_string()).into())
|
Err(ArchiverError::NoRpcPeers)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -769,7 +728,7 @@ impl Archiver {
|
|||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
previous_blockhash: &Hash,
|
previous_blockhash: &Hash,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
) -> result::Result<(Hash, u64), Error> {
|
) -> Result<(Hash, u64)> {
|
||||||
loop {
|
loop {
|
||||||
let (blockhash, turn_slot) = Self::poll_for_blockhash_and_slot(
|
let (blockhash, turn_slot) = Self::poll_for_blockhash_and_slot(
|
||||||
cluster_info,
|
cluster_info,
|
||||||
@ -789,12 +748,12 @@ impl Archiver {
|
|||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
previous_blockhash: &Hash,
|
previous_blockhash: &Hash,
|
||||||
exit: &Arc<AtomicBool>,
|
exit: &Arc<AtomicBool>,
|
||||||
) -> result::Result<(Hash, u64), Error> {
|
) -> Result<(Hash, u64)> {
|
||||||
info!("waiting for the next turn...");
|
info!("waiting for the next turn...");
|
||||||
loop {
|
loop {
|
||||||
let rpc_peers = {
|
let rpc_peers = {
|
||||||
let cluster_info = cluster_info.read().unwrap();
|
let cluster_info = cluster_info.read().unwrap();
|
||||||
cluster_info.rpc_peers()
|
cluster_info.all_rpc_peers()
|
||||||
};
|
};
|
||||||
debug!("rpc peers: {:?}", rpc_peers);
|
debug!("rpc peers: {:?}", rpc_peers);
|
||||||
if !rpc_peers.is_empty() {
|
if !rpc_peers.is_empty() {
|
||||||
@ -803,18 +762,20 @@ impl Archiver {
|
|||||||
RpcClient::new_socket(rpc_peers[node_index].rpc)
|
RpcClient::new_socket(rpc_peers[node_index].rpc)
|
||||||
};
|
};
|
||||||
let response = rpc_client
|
let response = rpc_client
|
||||||
.send(&RpcRequest::GetStorageTurn, None, 0, None)
|
.send(
|
||||||
|
&RpcRequest::GetStorageTurn,
|
||||||
|
serde_json::value::Value::Null,
|
||||||
|
0,
|
||||||
|
)
|
||||||
.map_err(|err| {
|
.map_err(|err| {
|
||||||
warn!("Error while making rpc request {:?}", err);
|
warn!("Error while making rpc request {:?}", err);
|
||||||
Error::IO(io::Error::new(ErrorKind::Other, "rpc error"))
|
ArchiverError::ClientError(err)
|
||||||
})?;
|
|
||||||
let (storage_blockhash, turn_slot) =
|
|
||||||
serde_json::from_value::<(String, u64)>(response).map_err(|err| {
|
|
||||||
io::Error::new(
|
|
||||||
io::ErrorKind::Other,
|
|
||||||
format!("Couldn't parse response: {:?}", err),
|
|
||||||
)
|
|
||||||
})?;
|
})?;
|
||||||
|
let RpcStorageTurn {
|
||||||
|
blockhash: storage_blockhash,
|
||||||
|
slot: turn_slot,
|
||||||
|
} = serde_json::from_value::<RpcStorageTurn>(response)
|
||||||
|
.map_err(ArchiverError::JsonError)?;
|
||||||
let turn_blockhash = storage_blockhash.parse().map_err(|err| {
|
let turn_blockhash = storage_blockhash.parse().map_err(|err| {
|
||||||
io::Error::new(
|
io::Error::new(
|
||||||
io::ErrorKind::Other,
|
io::ErrorKind::Other,
|
||||||
@ -832,7 +793,7 @@ impl Archiver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if exit.load(Ordering::Relaxed) {
|
if exit.load(Ordering::Relaxed) {
|
||||||
return Err(Error::IO(io::Error::new(
|
return Err(ArchiverError::IO(io::Error::new(
|
||||||
ErrorKind::Other,
|
ErrorKind::Other,
|
||||||
"exit signalled...",
|
"exit signalled...",
|
||||||
)));
|
)));
|
||||||
@ -841,15 +802,15 @@ impl Archiver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Ask an archiver to populate a given blocktree with its segment.
|
/// Ask an archiver to populate a given blockstore with its segment.
|
||||||
/// Return the slot at the start of the archiver's segment
|
/// Return the slot at the start of the archiver's segment
|
||||||
///
|
///
|
||||||
/// It is recommended to use a temporary blocktree for this since the download will not verify
|
/// It is recommended to use a temporary blockstore for this since the download will not verify
|
||||||
/// shreds received and might impact the chaining of shreds across slots
|
/// shreds received and might impact the chaining of shreds across slots
|
||||||
pub fn download_from_archiver(
|
pub fn download_from_archiver(
|
||||||
cluster_info: &Arc<RwLock<ClusterInfo>>,
|
serve_repair: &ServeRepair,
|
||||||
archiver_info: &ContactInfo,
|
archiver_info: &ContactInfo,
|
||||||
blocktree: &Arc<Blocktree>,
|
blockstore: &Arc<Blockstore>,
|
||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
) -> Result<u64> {
|
) -> Result<u64> {
|
||||||
// Create a client which downloads from the archiver and see that it
|
// Create a client which downloads from the archiver and see that it
|
||||||
@ -863,14 +824,14 @@ impl Archiver {
|
|||||||
let t_receiver = receiver(
|
let t_receiver = receiver(
|
||||||
repair_socket.clone(),
|
repair_socket.clone(),
|
||||||
&exit,
|
&exit,
|
||||||
s_reader.clone(),
|
s_reader,
|
||||||
Recycler::default(),
|
Recycler::default(),
|
||||||
"archiver_reeciver",
|
"archiver_reeciver",
|
||||||
);
|
);
|
||||||
let id = cluster_info.read().unwrap().id();
|
let id = serve_repair.keypair().pubkey();
|
||||||
info!(
|
info!(
|
||||||
"Sending repair requests from: {} to: {}",
|
"Sending repair requests from: {} to: {}",
|
||||||
cluster_info.read().unwrap().my_data().id,
|
serve_repair.my_info().id,
|
||||||
archiver_info.gossip
|
archiver_info.gossip
|
||||||
);
|
);
|
||||||
let repair_slot_range = RepairSlotRange {
|
let repair_slot_range = RepairSlotRange {
|
||||||
@ -881,7 +842,7 @@ impl Archiver {
|
|||||||
for _ in 0..120 {
|
for _ in 0..120 {
|
||||||
// Strategy used by archivers
|
// Strategy used by archivers
|
||||||
let repairs = RepairService::generate_repairs_in_range(
|
let repairs = RepairService::generate_repairs_in_range(
|
||||||
blocktree,
|
blockstore,
|
||||||
repair_service::MAX_REPAIR_LENGTH,
|
repair_service::MAX_REPAIR_LENGTH,
|
||||||
&repair_slot_range,
|
&repair_slot_range,
|
||||||
);
|
);
|
||||||
@ -890,9 +851,7 @@ impl Archiver {
|
|||||||
let reqs: Vec<_> = repairs
|
let reqs: Vec<_> = repairs
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|repair_request| {
|
.filter_map(|repair_request| {
|
||||||
cluster_info
|
serve_repair
|
||||||
.read()
|
|
||||||
.unwrap()
|
|
||||||
.map_repair_request(&repair_request)
|
.map_repair_request(&repair_request)
|
||||||
.map(|result| ((archiver_info.gossip, result), repair_request))
|
.map(|result| ((archiver_info.gossip, result), repair_request))
|
||||||
.ok()
|
.ok()
|
||||||
@ -927,10 +886,10 @@ impl Archiver {
|
|||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|p| Shred::new_from_serialized_shred(p.data.to_vec()).ok())
|
.filter_map(|p| Shred::new_from_serialized_shred(p.data.to_vec()).ok())
|
||||||
.collect();
|
.collect();
|
||||||
blocktree.insert_shreds(shreds, None, false)?;
|
blockstore.insert_shreds(shreds, None, false)?;
|
||||||
}
|
}
|
||||||
// check if all the slots in the segment are complete
|
// check if all the slots in the segment are complete
|
||||||
if Self::segment_complete(start_slot, slots_per_segment, blocktree) {
|
if Self::segment_complete(start_slot, slots_per_segment, blockstore) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
sleep(Duration::from_millis(500));
|
sleep(Duration::from_millis(500));
|
||||||
@ -939,10 +898,8 @@ impl Archiver {
|
|||||||
t_receiver.join().unwrap();
|
t_receiver.join().unwrap();
|
||||||
|
|
||||||
// check if all the slots in the segment are complete
|
// check if all the slots in the segment are complete
|
||||||
if !Self::segment_complete(start_slot, slots_per_segment, blocktree) {
|
if !Self::segment_complete(start_slot, slots_per_segment, blockstore) {
|
||||||
return Err(
|
return Err(ArchiverError::SegmentDownloadError);
|
||||||
io::Error::new(ErrorKind::Other, "Unable to download the full segment").into(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
Ok(start_slot)
|
Ok(start_slot)
|
||||||
}
|
}
|
||||||
@ -950,10 +907,10 @@ impl Archiver {
|
|||||||
fn segment_complete(
|
fn segment_complete(
|
||||||
start_slot: Slot,
|
start_slot: Slot,
|
||||||
slots_per_segment: u64,
|
slots_per_segment: u64,
|
||||||
blocktree: &Arc<Blocktree>,
|
blockstore: &Arc<Blockstore>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
for slot in start_slot..(start_slot + slots_per_segment) {
|
for slot in start_slot..(start_slot + slots_per_segment) {
|
||||||
if !blocktree.is_full(slot) {
|
if !blockstore.is_full(slot) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -985,74 +942,3 @@ impl Archiver {
|
|||||||
panic!("Couldn't get segment slot from archiver!");
|
panic!("Couldn't get segment slot from archiver!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use std::fs::{create_dir_all, remove_file};
|
|
||||||
use std::io::Write;
|
|
||||||
|
|
||||||
fn tmp_file_path(name: &str) -> PathBuf {
|
|
||||||
use std::env;
|
|
||||||
let out_dir = env::var("FARF_DIR").unwrap_or_else(|_| "farf".to_string());
|
|
||||||
let keypair = Keypair::new();
|
|
||||||
|
|
||||||
let mut path = PathBuf::new();
|
|
||||||
path.push(out_dir);
|
|
||||||
path.push("tmp");
|
|
||||||
create_dir_all(&path).unwrap();
|
|
||||||
|
|
||||||
path.push(format!("{}-{}", name, keypair.pubkey()));
|
|
||||||
path
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_sample_file() {
|
|
||||||
solana_logger::setup();
|
|
||||||
let in_path = tmp_file_path("test_sample_file_input.txt");
|
|
||||||
let num_strings = 4096;
|
|
||||||
let string = "12foobar";
|
|
||||||
{
|
|
||||||
let mut in_file = File::create(&in_path).unwrap();
|
|
||||||
for _ in 0..num_strings {
|
|
||||||
in_file.write(string.as_bytes()).unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let num_samples = (string.len() * num_strings / size_of::<Hash>()) as u64;
|
|
||||||
let samples: Vec<_> = (0..num_samples).collect();
|
|
||||||
let res = sample_file(&in_path, samples.as_slice());
|
|
||||||
let ref_hash: Hash = Hash::new(&[
|
|
||||||
173, 251, 182, 165, 10, 54, 33, 150, 133, 226, 106, 150, 99, 192, 179, 1, 230, 144,
|
|
||||||
151, 126, 18, 191, 54, 67, 249, 140, 230, 160, 56, 30, 170, 52,
|
|
||||||
]);
|
|
||||||
let res = res.unwrap();
|
|
||||||
assert_eq!(res, ref_hash);
|
|
||||||
|
|
||||||
// Sample just past the end
|
|
||||||
assert!(sample_file(&in_path, &[num_samples]).is_err());
|
|
||||||
remove_file(&in_path).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_sample_file_invalid_offset() {
|
|
||||||
let in_path = tmp_file_path("test_sample_file_invalid_offset_input.txt");
|
|
||||||
{
|
|
||||||
let mut in_file = File::create(&in_path).unwrap();
|
|
||||||
for _ in 0..4096 {
|
|
||||||
in_file.write("123456foobar".as_bytes()).unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let samples = [0, 200000];
|
|
||||||
let res = sample_file(&in_path, &samples);
|
|
||||||
assert!(res.is_err());
|
|
||||||
remove_file(in_path).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn test_sample_file_missing_file() {
|
|
||||||
let in_path = tmp_file_path("test_sample_file_that_doesnt_exist.txt");
|
|
||||||
let samples = [0, 5];
|
|
||||||
let res = sample_file(&in_path, &samples);
|
|
||||||
assert!(res.is_err());
|
|
||||||
}
|
|
||||||
}
|
|
11
archiver-lib/src/lib.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate serde_derive;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate solana_metrics;
|
||||||
|
|
||||||
|
pub mod archiver;
|
||||||
|
mod result;
|
48
archiver-lib/src/result.rs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
use serde_json;
|
||||||
|
use solana_client::client_error;
|
||||||
|
use solana_ledger::blockstore;
|
||||||
|
use solana_sdk::transport;
|
||||||
|
use std::any::Any;
|
||||||
|
use thiserror::Error;
|
||||||
|
|
||||||
|
#[derive(Error, Debug)]
|
||||||
|
pub enum ArchiverError {
|
||||||
|
#[error("IO error")]
|
||||||
|
IO(#[from] std::io::Error),
|
||||||
|
|
||||||
|
#[error("blockstore error")]
|
||||||
|
BlockstoreError(#[from] blockstore::BlockstoreError),
|
||||||
|
|
||||||
|
#[error("crossbeam error")]
|
||||||
|
CrossbeamSendError(#[from] crossbeam_channel::SendError<u64>),
|
||||||
|
|
||||||
|
#[error("send error")]
|
||||||
|
SendError(#[from] std::sync::mpsc::SendError<u64>),
|
||||||
|
|
||||||
|
#[error("join error")]
|
||||||
|
JoinError(Box<dyn Any + Send + 'static>),
|
||||||
|
|
||||||
|
#[error("transport error")]
|
||||||
|
TransportError(#[from] transport::TransportError),
|
||||||
|
|
||||||
|
#[error("client error")]
|
||||||
|
ClientError(#[from] client_error::ClientError),
|
||||||
|
|
||||||
|
#[error("Json parsing error")]
|
||||||
|
JsonError(#[from] serde_json::error::Error),
|
||||||
|
|
||||||
|
#[error("Storage account has no balance")]
|
||||||
|
EmptyStorageAccountBalance,
|
||||||
|
|
||||||
|
#[error("No RPC peers..")]
|
||||||
|
NoRpcPeers,
|
||||||
|
|
||||||
|
#[error("Couldn't download full segment")]
|
||||||
|
SegmentDownloadError,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl std::convert::From<Box<dyn Any + Send + 'static>> for ArchiverError {
|
||||||
|
fn from(e: Box<dyn Any + Send + 'static>) -> ArchiverError {
|
||||||
|
ArchiverError::JoinError(e)
|
||||||
|
}
|
||||||
|
}
|
25
archiver-utils/Cargo.toml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[package]
|
||||||
|
name = "solana-archiver-utils"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "Solana Archiver Utils"
|
||||||
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
|
repository = "https://github.com/solana-labs/solana"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
homepage = "https://solana.com/"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = "0.4.8"
|
||||||
|
rand = "0.6.5"
|
||||||
|
solana-chacha = { path = "../chacha", version = "1.0.0" }
|
||||||
|
solana-chacha-sys = { path = "../chacha-sys", version = "1.0.0" }
|
||||||
|
solana-ledger = { path = "../ledger", version = "1.0.0" }
|
||||||
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
|
solana-perf = { path = "../perf", version = "1.0.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
hex = "0.4.0"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "solana_archiver_utils"
|
120
archiver-utils/src/lib.rs
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
|
use solana_sdk::hash::{Hash, Hasher};
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{self, BufReader, ErrorKind, Read, Seek, SeekFrom};
|
||||||
|
use std::mem::size_of;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
pub fn sample_file(in_path: &Path, sample_offsets: &[u64]) -> io::Result<Hash> {
|
||||||
|
let in_file = File::open(in_path)?;
|
||||||
|
let metadata = in_file.metadata()?;
|
||||||
|
let mut buffer_file = BufReader::new(in_file);
|
||||||
|
|
||||||
|
let mut hasher = Hasher::default();
|
||||||
|
let sample_size = size_of::<Hash>();
|
||||||
|
let sample_size64 = sample_size as u64;
|
||||||
|
let mut buf = vec![0; sample_size];
|
||||||
|
|
||||||
|
let file_len = metadata.len();
|
||||||
|
if file_len < sample_size64 {
|
||||||
|
return Err(io::Error::new(ErrorKind::Other, "file too short!"));
|
||||||
|
}
|
||||||
|
for offset in sample_offsets {
|
||||||
|
if *offset > (file_len - sample_size64) / sample_size64 {
|
||||||
|
return Err(io::Error::new(ErrorKind::Other, "offset too large"));
|
||||||
|
}
|
||||||
|
buffer_file.seek(SeekFrom::Start(*offset * sample_size64))?;
|
||||||
|
trace!("sampling @ {} ", *offset);
|
||||||
|
match buffer_file.read(&mut buf) {
|
||||||
|
Ok(size) => {
|
||||||
|
assert_eq!(size, buf.len());
|
||||||
|
hasher.hash(&buf);
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Error sampling file");
|
||||||
|
return Err(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(hasher.result())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use rand::{thread_rng, Rng};
|
||||||
|
use std::fs::{create_dir_all, remove_file};
|
||||||
|
use std::io::Write;
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
extern crate hex;
|
||||||
|
|
||||||
|
fn tmp_file_path(name: &str) -> PathBuf {
|
||||||
|
use std::env;
|
||||||
|
let out_dir = env::var("FARF_DIR").unwrap_or_else(|_| "farf".to_string());
|
||||||
|
let mut rand_bits = [0u8; 32];
|
||||||
|
thread_rng().fill(&mut rand_bits[..]);
|
||||||
|
|
||||||
|
let mut path = PathBuf::new();
|
||||||
|
path.push(out_dir);
|
||||||
|
path.push("tmp");
|
||||||
|
create_dir_all(&path).unwrap();
|
||||||
|
|
||||||
|
path.push(format!("{}-{:?}", name, hex::encode(rand_bits)));
|
||||||
|
println!("path: {:?}", path);
|
||||||
|
path
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sample_file() {
|
||||||
|
solana_logger::setup();
|
||||||
|
let in_path = tmp_file_path("test_sample_file_input.txt");
|
||||||
|
let num_strings = 4096;
|
||||||
|
let string = "12foobar";
|
||||||
|
{
|
||||||
|
let mut in_file = File::create(&in_path).unwrap();
|
||||||
|
for _ in 0..num_strings {
|
||||||
|
in_file.write(string.as_bytes()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let num_samples = (string.len() * num_strings / size_of::<Hash>()) as u64;
|
||||||
|
let samples: Vec<_> = (0..num_samples).collect();
|
||||||
|
let res = sample_file(&in_path, samples.as_slice());
|
||||||
|
let ref_hash: Hash = Hash::new(&[
|
||||||
|
173, 251, 182, 165, 10, 54, 33, 150, 133, 226, 106, 150, 99, 192, 179, 1, 230, 144,
|
||||||
|
151, 126, 18, 191, 54, 67, 249, 140, 230, 160, 56, 30, 170, 52,
|
||||||
|
]);
|
||||||
|
let res = res.unwrap();
|
||||||
|
assert_eq!(res, ref_hash);
|
||||||
|
|
||||||
|
// Sample just past the end
|
||||||
|
assert!(sample_file(&in_path, &[num_samples]).is_err());
|
||||||
|
remove_file(&in_path).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sample_file_invalid_offset() {
|
||||||
|
let in_path = tmp_file_path("test_sample_file_invalid_offset_input.txt");
|
||||||
|
{
|
||||||
|
let mut in_file = File::create(&in_path).unwrap();
|
||||||
|
for _ in 0..4096 {
|
||||||
|
in_file.write("123456foobar".as_bytes()).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let samples = [0, 200000];
|
||||||
|
let res = sample_file(&in_path, &samples);
|
||||||
|
assert!(res.is_err());
|
||||||
|
remove_file(in_path).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_sample_file_missing_file() {
|
||||||
|
let in_path = tmp_file_path("test_sample_file_that_doesnt_exist.txt");
|
||||||
|
let samples = [0, 5];
|
||||||
|
let res = sample_file(&in_path, &samples);
|
||||||
|
assert!(res.is_err());
|
||||||
|
}
|
||||||
|
}
|
@ -2,18 +2,19 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-archiver"
|
name = "solana-archiver"
|
||||||
version = "0.21.0"
|
version = "1.0.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
console = "0.9.1"
|
console = "0.9.2"
|
||||||
solana-clap-utils = { path = "../clap-utils", version = "0.21.0" }
|
solana-clap-utils = { path = "../clap-utils", version = "1.0.0" }
|
||||||
solana-core = { path = "../core", version = "0.21.0" }
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.21.0" }
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.21.0" }
|
solana-metrics = { path = "../metrics", version = "1.0.0" }
|
||||||
solana-net-utils = { path = "../net-utils", version = "0.21.0" }
|
solana-archiver-lib = { path = "../archiver-lib", version = "1.0.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.21.0" }
|
solana-net-utils = { path = "../net-utils", version = "1.0.0" }
|
||||||
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
use clap::{crate_description, crate_name, App, Arg};
|
use clap::{crate_description, crate_name, App, Arg};
|
||||||
use console::style;
|
use console::style;
|
||||||
|
use solana_archiver_lib::archiver::Archiver;
|
||||||
use solana_clap_utils::{
|
use solana_clap_utils::{
|
||||||
input_validators::is_keypair,
|
input_validators::is_keypair,
|
||||||
keypair::{
|
keypair::{
|
||||||
@ -8,11 +9,10 @@ use solana_clap_utils::{
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
use solana_core::{
|
use solana_core::{
|
||||||
archiver::Archiver,
|
|
||||||
cluster_info::{Node, VALIDATOR_PORT_RANGE},
|
cluster_info::{Node, VALIDATOR_PORT_RANGE},
|
||||||
contact_info::ContactInfo,
|
contact_info::ContactInfo,
|
||||||
};
|
};
|
||||||
use solana_sdk::{commitment_config::CommitmentConfig, signature::KeypairUtil};
|
use solana_sdk::{commitment_config::CommitmentConfig, signature::Signer};
|
||||||
use std::{net::SocketAddr, path::PathBuf, process::exit, sync::Arc};
|
use std::{net::SocketAddr, path::PathBuf, process::exit, sync::Arc};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-banking-bench"
|
name = "solana-banking-bench"
|
||||||
version = "0.21.0"
|
version = "1.0.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
@ -10,11 +10,11 @@ homepage = "https://solana.com/"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.4.6"
|
log = "0.4.6"
|
||||||
rayon = "1.2.0"
|
rayon = "1.2.0"
|
||||||
solana-core = { path = "../core", version = "0.21.0" }
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
solana-ledger = { path = "../ledger", version = "0.21.0" }
|
solana-ledger = { path = "../ledger", version = "1.0.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.21.0" }
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.21.0" }
|
solana-runtime = { path = "../runtime", version = "1.0.0" }
|
||||||
solana-measure = { path = "../measure", version = "0.21.0" }
|
solana-measure = { path = "../measure", version = "1.0.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.21.0" }
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
rand = "0.6.5"
|
rand = "0.6.5"
|
||||||
crossbeam-channel = "0.3"
|
crossbeam-channel = "0.3"
|
||||||
|
@ -10,7 +10,7 @@ use solana_core::packet::to_packets_chunked;
|
|||||||
use solana_core::poh_recorder::PohRecorder;
|
use solana_core::poh_recorder::PohRecorder;
|
||||||
use solana_core::poh_recorder::WorkingBankEntry;
|
use solana_core::poh_recorder::WorkingBankEntry;
|
||||||
use solana_ledger::bank_forks::BankForks;
|
use solana_ledger::bank_forks::BankForks;
|
||||||
use solana_ledger::{blocktree::Blocktree, get_tmp_ledger_path};
|
use solana_ledger::{blockstore::Blockstore, get_tmp_ledger_path};
|
||||||
use solana_measure::measure::Measure;
|
use solana_measure::measure::Measure;
|
||||||
use solana_runtime::bank::Bank;
|
use solana_runtime::bank::Bank;
|
||||||
use solana_sdk::hash::Hash;
|
use solana_sdk::hash::Hash;
|
||||||
@ -139,11 +139,11 @@ fn main() {
|
|||||||
let mut verified: Vec<_> = to_packets_chunked(&transactions.clone(), PACKETS_PER_BATCH);
|
let mut verified: Vec<_> = to_packets_chunked(&transactions.clone(), PACKETS_PER_BATCH);
|
||||||
let ledger_path = get_tmp_ledger_path!();
|
let ledger_path = get_tmp_ledger_path!();
|
||||||
{
|
{
|
||||||
let blocktree = Arc::new(
|
let blockstore = Arc::new(
|
||||||
Blocktree::open(&ledger_path).expect("Expected to be able to open database ledger"),
|
Blockstore::open(&ledger_path).expect("Expected to be able to open database ledger"),
|
||||||
);
|
);
|
||||||
let (exit, poh_recorder, poh_service, signal_receiver) =
|
let (exit, poh_recorder, poh_service, signal_receiver) =
|
||||||
create_test_recorder(&bank, &blocktree, None);
|
create_test_recorder(&bank, &blockstore, None);
|
||||||
let cluster_info = ClusterInfo::new_with_invalid_keypair(Node::new_localhost().info);
|
let cluster_info = ClusterInfo::new_with_invalid_keypair(Node::new_localhost().info);
|
||||||
let cluster_info = Arc::new(RwLock::new(cluster_info));
|
let cluster_info = Arc::new(RwLock::new(cluster_info));
|
||||||
let banking_stage = BankingStage::new(
|
let banking_stage = BankingStage::new(
|
||||||
@ -162,9 +162,8 @@ fn main() {
|
|||||||
// If it is dropped before poh_service, then poh_service will error when
|
// If it is dropped before poh_service, then poh_service will error when
|
||||||
// calling send() on the channel.
|
// calling send() on the channel.
|
||||||
let signal_receiver = Arc::new(signal_receiver);
|
let signal_receiver = Arc::new(signal_receiver);
|
||||||
let signal_receiver2 = signal_receiver.clone();
|
let mut total_us = 0;
|
||||||
let mut total = 0;
|
let mut tx_total_us = 0;
|
||||||
let mut tx_total = 0;
|
|
||||||
let mut txs_processed = 0;
|
let mut txs_processed = 0;
|
||||||
let mut root = 1;
|
let mut root = 1;
|
||||||
let collector = Pubkey::new_rand();
|
let collector = Pubkey::new_rand();
|
||||||
@ -174,6 +173,7 @@ fn main() {
|
|||||||
chunk_len,
|
chunk_len,
|
||||||
num_threads,
|
num_threads,
|
||||||
};
|
};
|
||||||
|
let mut total_sent = 0;
|
||||||
for _ in 0..ITERS {
|
for _ in 0..ITERS {
|
||||||
let now = Instant::now();
|
let now = Instant::now();
|
||||||
let mut sent = 0;
|
let mut sent = 0;
|
||||||
@ -215,7 +215,7 @@ fn main() {
|
|||||||
sleep(Duration::from_millis(5));
|
sleep(Duration::from_millis(5));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if check_txs(&signal_receiver2, txes / CHUNKS, &poh_recorder) {
|
if check_txs(&signal_receiver, txes / CHUNKS, &poh_recorder) {
|
||||||
debug!(
|
debug!(
|
||||||
"resetting bank {} tx count: {} txs_proc: {}",
|
"resetting bank {} tx count: {} txs_proc: {}",
|
||||||
bank.slot(),
|
bank.slot(),
|
||||||
@ -224,7 +224,7 @@ fn main() {
|
|||||||
);
|
);
|
||||||
assert!(txs_processed < bank.transaction_count());
|
assert!(txs_processed < bank.transaction_count());
|
||||||
txs_processed = bank.transaction_count();
|
txs_processed = bank.transaction_count();
|
||||||
tx_total += duration_as_us(&now.elapsed());
|
tx_total_us += duration_as_us(&now.elapsed());
|
||||||
|
|
||||||
let mut poh_time = Measure::start("poh_time");
|
let mut poh_time = Measure::start("poh_time");
|
||||||
poh_recorder.lock().unwrap().reset(
|
poh_recorder.lock().unwrap().reset(
|
||||||
@ -256,20 +256,21 @@ fn main() {
|
|||||||
poh_time.as_us(),
|
poh_time.as_us(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
tx_total += duration_as_us(&now.elapsed());
|
tx_total_us += duration_as_us(&now.elapsed());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This signature clear may not actually clear the signatures
|
// This signature clear may not actually clear the signatures
|
||||||
// in this chunk, but since we rotate between CHUNKS then
|
// in this chunk, but since we rotate between CHUNKS then
|
||||||
// we should clear them by the time we come around again to re-use that chunk.
|
// we should clear them by the time we come around again to re-use that chunk.
|
||||||
bank.clear_signatures();
|
bank.clear_signatures();
|
||||||
total += duration_as_us(&now.elapsed());
|
total_us += duration_as_us(&now.elapsed());
|
||||||
debug!(
|
debug!(
|
||||||
"time: {} us checked: {} sent: {}",
|
"time: {} us checked: {} sent: {}",
|
||||||
duration_as_us(&now.elapsed()),
|
duration_as_us(&now.elapsed()),
|
||||||
txes / CHUNKS,
|
txes / CHUNKS,
|
||||||
sent,
|
sent,
|
||||||
);
|
);
|
||||||
|
total_sent += sent;
|
||||||
|
|
||||||
if bank.slot() > 0 && bank.slot() % 16 == 0 {
|
if bank.slot() > 0 && bank.slot() % 16 == 0 {
|
||||||
for tx in transactions.iter_mut() {
|
for tx in transactions.iter_mut() {
|
||||||
@ -285,11 +286,11 @@ fn main() {
|
|||||||
}
|
}
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"{{'name': 'banking_bench_total', 'median': '{}'}}",
|
"{{'name': 'banking_bench_total', 'median': '{}'}}",
|
||||||
total / ITERS as u64,
|
(1000.0 * 1000.0 * total_sent as f64) / (total_us as f64),
|
||||||
);
|
);
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"{{'name': 'banking_bench_tx_total', 'median': '{}'}}",
|
"{{'name': 'banking_bench_tx_total', 'median': '{}'}}",
|
||||||
tx_total / ITERS as u64,
|
(1000.0 * 1000.0 * total_sent as f64) / (tx_total_us as f64),
|
||||||
);
|
);
|
||||||
|
|
||||||
drop(verified_sender);
|
drop(verified_sender);
|
||||||
@ -301,5 +302,5 @@ fn main() {
|
|||||||
sleep(Duration::from_secs(1));
|
sleep(Duration::from_secs(1));
|
||||||
debug!("waited for poh_service");
|
debug!("waited for poh_service");
|
||||||
}
|
}
|
||||||
let _unused = Blocktree::destroy(&ledger_path);
|
let _unused = Blockstore::destroy(&ledger_path);
|
||||||
}
|
}
|
||||||
|
@ -2,40 +2,33 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-exchange"
|
name = "solana-bench-exchange"
|
||||||
version = "0.21.0"
|
version = "1.0.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.2.0"
|
|
||||||
bs58 = "0.3.0"
|
|
||||||
clap = "2.32.0"
|
clap = "2.32.0"
|
||||||
env_logger = "0.7.1"
|
|
||||||
itertools = "0.8.2"
|
itertools = "0.8.2"
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
num-derive = "0.3"
|
num-derive = "0.3"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
rand = "0.6.5"
|
rand = "0.6.5"
|
||||||
rayon = "1.2.0"
|
rayon = "1.2.0"
|
||||||
serde = "1.0.102"
|
serde_json = "1.0.46"
|
||||||
serde_derive = "1.0.102"
|
|
||||||
serde_json = "1.0.41"
|
|
||||||
serde_yaml = "0.8.11"
|
serde_yaml = "0.8.11"
|
||||||
solana-clap-utils = { path = "../clap-utils", version = "0.21.0" }
|
solana-clap-utils = { path = "../clap-utils", version = "1.0.0" }
|
||||||
solana-core = { path = "../core", version = "0.21.0" }
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
solana-genesis = { path = "../genesis", version = "0.21.0" }
|
solana-genesis = { path = "../genesis", version = "1.0.0" }
|
||||||
solana-client = { path = "../client", version = "0.21.0" }
|
solana-client = { path = "../client", version = "1.0.0" }
|
||||||
solana-drone = { path = "../drone", version = "0.21.0" }
|
solana-faucet = { path = "../faucet", version = "1.0.0" }
|
||||||
solana-exchange-program = { path = "../programs/exchange", version = "0.21.0" }
|
solana-exchange-program = { path = "../programs/exchange", version = "1.0.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.21.0" }
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.21.0" }
|
solana-metrics = { path = "../metrics", version = "1.0.0" }
|
||||||
solana-net-utils = { path = "../net-utils", version = "0.21.0" }
|
solana-net-utils = { path = "../net-utils", version = "1.0.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.21.0" }
|
solana-runtime = { path = "../runtime", version = "1.0.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.21.0" }
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
untrusted = "0.7.0"
|
|
||||||
ws = "0.9.1"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
solana-local-cluster = { path = "../local-cluster", version = "0.21.0" }
|
solana-local-cluster = { path = "../local-cluster", version = "1.0.0" }
|
||||||
|
@ -7,15 +7,15 @@ use rand::{thread_rng, Rng};
|
|||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use solana_client::perf_utils::{sample_txs, SampleStats};
|
use solana_client::perf_utils::{sample_txs, SampleStats};
|
||||||
use solana_core::gen_keys::GenKeys;
|
use solana_core::gen_keys::GenKeys;
|
||||||
use solana_drone::drone::request_airdrop_transaction;
|
|
||||||
use solana_exchange_program::{exchange_instruction, exchange_state::*, id};
|
use solana_exchange_program::{exchange_instruction, exchange_state::*, id};
|
||||||
|
use solana_faucet::faucet::request_airdrop_transaction;
|
||||||
use solana_genesis::Base64Account;
|
use solana_genesis::Base64Account;
|
||||||
use solana_metrics::datapoint_info;
|
use solana_metrics::datapoint_info;
|
||||||
use solana_sdk::{
|
use solana_sdk::{
|
||||||
client::{Client, SyncClient},
|
client::{Client, SyncClient},
|
||||||
commitment_config::CommitmentConfig,
|
commitment_config::CommitmentConfig,
|
||||||
pubkey::Pubkey,
|
pubkey::Pubkey,
|
||||||
signature::{Keypair, KeypairUtil},
|
signature::{Keypair, Signer},
|
||||||
timing::{duration_as_ms, duration_as_s},
|
timing::{duration_as_ms, duration_as_s},
|
||||||
transaction::Transaction,
|
transaction::Transaction,
|
||||||
{system_instruction, system_program},
|
{system_instruction, system_program},
|
||||||
@ -256,7 +256,7 @@ where
|
|||||||
trace!("Start trader thread");
|
trace!("Start trader thread");
|
||||||
let trader_thread = {
|
let trader_thread = {
|
||||||
let exit_signal = exit_signal.clone();
|
let exit_signal = exit_signal.clone();
|
||||||
let shared_txs = shared_txs.clone();
|
|
||||||
let client = clients[0].clone();
|
let client = clients[0].clone();
|
||||||
Builder::new()
|
Builder::new()
|
||||||
.name("solana-exchange-trader".to_string())
|
.name("solana-exchange-trader".to_string())
|
||||||
@ -701,7 +701,7 @@ fn verify_funding_transfer<T: SyncClient + ?Sized>(
|
|||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fund_keys(client: &dyn Client, source: &Keypair, dests: &[Arc<Keypair>], lamports: u64) {
|
pub fn fund_keys<T: Client>(client: &T, source: &Keypair, dests: &[Arc<Keypair>], lamports: u64) {
|
||||||
let total = lamports * (dests.len() as u64 + 1);
|
let total = lamports * (dests.len() as u64 + 1);
|
||||||
let mut funded: Vec<(&Keypair, u64)> = vec![(source, total)];
|
let mut funded: Vec<(&Keypair, u64)> = vec![(source, total)];
|
||||||
let mut notfunded: Vec<&Arc<Keypair>> = dests.iter().collect();
|
let mut notfunded: Vec<&Arc<Keypair>> = dests.iter().collect();
|
||||||
@ -824,7 +824,11 @@ pub fn fund_keys(client: &dyn Client, source: &Keypair, dests: &[Arc<Keypair>],
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_token_accounts(client: &dyn Client, signers: &[Arc<Keypair>], accounts: &[Keypair]) {
|
pub fn create_token_accounts<T: Client>(
|
||||||
|
client: &T,
|
||||||
|
signers: &[Arc<Keypair>],
|
||||||
|
accounts: &[Keypair],
|
||||||
|
) {
|
||||||
let mut notfunded: Vec<(&Arc<Keypair>, &Keypair)> = signers.iter().zip(accounts).collect();
|
let mut notfunded: Vec<(&Arc<Keypair>, &Keypair)> = signers.iter().zip(accounts).collect();
|
||||||
|
|
||||||
while !notfunded.is_empty() {
|
while !notfunded.is_empty() {
|
||||||
@ -968,7 +972,12 @@ fn generate_keypairs(num: u64) -> Vec<Keypair> {
|
|||||||
rnd.gen_n_keypairs(num)
|
rnd.gen_n_keypairs(num)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypair, amount: u64) {
|
pub fn airdrop_lamports<T: Client>(
|
||||||
|
client: &T,
|
||||||
|
faucet_addr: &SocketAddr,
|
||||||
|
id: &Keypair,
|
||||||
|
amount: u64,
|
||||||
|
) {
|
||||||
let balance = client.get_balance_with_commitment(&id.pubkey(), CommitmentConfig::recent());
|
let balance = client.get_balance_with_commitment(&id.pubkey(), CommitmentConfig::recent());
|
||||||
let balance = balance.unwrap_or(0);
|
let balance = balance.unwrap_or(0);
|
||||||
if balance >= amount {
|
if balance >= amount {
|
||||||
@ -980,7 +989,7 @@ pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypa
|
|||||||
info!(
|
info!(
|
||||||
"Airdropping {:?} lamports from {} for {}",
|
"Airdropping {:?} lamports from {} for {}",
|
||||||
amount_to_drop,
|
amount_to_drop,
|
||||||
drone_addr,
|
faucet_addr,
|
||||||
id.pubkey(),
|
id.pubkey(),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -989,7 +998,7 @@ pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypa
|
|||||||
let (blockhash, _fee_calculator) = client
|
let (blockhash, _fee_calculator) = client
|
||||||
.get_recent_blockhash_with_commitment(CommitmentConfig::recent())
|
.get_recent_blockhash_with_commitment(CommitmentConfig::recent())
|
||||||
.expect("Failed to get blockhash");
|
.expect("Failed to get blockhash");
|
||||||
match request_airdrop_transaction(&drone_addr, &id.pubkey(), amount_to_drop, blockhash) {
|
match request_airdrop_transaction(&faucet_addr, &id.pubkey(), amount_to_drop, blockhash) {
|
||||||
Ok(transaction) => {
|
Ok(transaction) => {
|
||||||
let signature = client.async_send_transaction(transaction).unwrap();
|
let signature = client.async_send_transaction(transaction).unwrap();
|
||||||
|
|
||||||
@ -1013,7 +1022,7 @@ pub fn airdrop_lamports(client: &dyn Client, drone_addr: &SocketAddr, id: &Keypa
|
|||||||
Err(err) => {
|
Err(err) => {
|
||||||
panic!(
|
panic!(
|
||||||
"Error requesting airdrop: {:?} to addr: {:?} amount: {}",
|
"Error requesting airdrop: {:?} to addr: {:?} amount: {}",
|
||||||
err, drone_addr, amount
|
err, faucet_addr, amount
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
use clap::{crate_description, crate_name, value_t, App, Arg, ArgMatches};
|
use clap::{crate_description, crate_name, value_t, App, Arg, ArgMatches};
|
||||||
use solana_core::gen_keys::GenKeys;
|
use solana_core::gen_keys::GenKeys;
|
||||||
use solana_drone::drone::DRONE_PORT;
|
use solana_faucet::faucet::FAUCET_PORT;
|
||||||
use solana_sdk::signature::{read_keypair_file, Keypair, KeypairUtil};
|
use solana_sdk::signature::{read_keypair_file, Keypair};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub entrypoint_addr: SocketAddr,
|
pub entrypoint_addr: SocketAddr,
|
||||||
pub drone_addr: SocketAddr,
|
pub faucet_addr: SocketAddr,
|
||||||
pub identity: Keypair,
|
pub identity: Keypair,
|
||||||
pub threads: usize,
|
pub threads: usize,
|
||||||
pub num_nodes: usize,
|
pub num_nodes: usize,
|
||||||
@ -27,7 +27,7 @@ impl Default for Config {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
entrypoint_addr: SocketAddr::from(([127, 0, 0, 1], 8001)),
|
entrypoint_addr: SocketAddr::from(([127, 0, 0, 1], 8001)),
|
||||||
drone_addr: SocketAddr::from(([127, 0, 0, 1], DRONE_PORT)),
|
faucet_addr: SocketAddr::from(([127, 0, 0, 1], FAUCET_PORT)),
|
||||||
identity: Keypair::new(),
|
identity: Keypair::new(),
|
||||||
num_nodes: 1,
|
num_nodes: 1,
|
||||||
threads: 4,
|
threads: 4,
|
||||||
@ -59,14 +59,14 @@ pub fn build_args<'a, 'b>(version: &'b str) -> App<'a, 'b> {
|
|||||||
.help("Cluster entry point; defaults to 127.0.0.1:8001"),
|
.help("Cluster entry point; defaults to 127.0.0.1:8001"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("drone")
|
Arg::with_name("faucet")
|
||||||
.short("d")
|
.short("d")
|
||||||
.long("drone")
|
.long("faucet")
|
||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(false)
|
.required(false)
|
||||||
.default_value("127.0.0.1:9900")
|
.default_value("127.0.0.1:9900")
|
||||||
.help("Location of the drone; defaults to 127.0.0.1:9900"),
|
.help("Location of the faucet; defaults to 127.0.0.1:9900"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("identity")
|
Arg::with_name("identity")
|
||||||
@ -174,9 +174,9 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
exit(1)
|
exit(1)
|
||||||
});
|
});
|
||||||
|
|
||||||
args.drone_addr = solana_net_utils::parse_host_port(matches.value_of("drone").unwrap())
|
args.faucet_addr = solana_net_utils::parse_host_port(matches.value_of("faucet").unwrap())
|
||||||
.unwrap_or_else(|e| {
|
.unwrap_or_else(|e| {
|
||||||
eprintln!("failed to parse drone address: {}", e);
|
eprintln!("failed to parse faucet address: {}", e);
|
||||||
exit(1)
|
exit(1)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ pub mod order_book;
|
|||||||
use crate::bench::{airdrop_lamports, create_client_accounts_file, do_bench_exchange, Config};
|
use crate::bench::{airdrop_lamports, create_client_accounts_file, do_bench_exchange, Config};
|
||||||
use log::*;
|
use log::*;
|
||||||
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
||||||
use solana_sdk::signature::KeypairUtil;
|
use solana_sdk::signature::Signer;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
@ -16,7 +16,7 @@ fn main() {
|
|||||||
|
|
||||||
let cli::Config {
|
let cli::Config {
|
||||||
entrypoint_addr,
|
entrypoint_addr,
|
||||||
drone_addr,
|
faucet_addr,
|
||||||
identity,
|
identity,
|
||||||
threads,
|
threads,
|
||||||
num_nodes,
|
num_nodes,
|
||||||
@ -73,7 +73,7 @@ fn main() {
|
|||||||
const NUM_SIGNERS: u64 = 2;
|
const NUM_SIGNERS: u64 = 2;
|
||||||
airdrop_lamports(
|
airdrop_lamports(
|
||||||
&client,
|
&client,
|
||||||
&drone_addr,
|
&faucet_addr,
|
||||||
&config.identity,
|
&config.identity,
|
||||||
fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS,
|
fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS,
|
||||||
);
|
);
|
||||||
|
@ -2,20 +2,21 @@ use log::*;
|
|||||||
use solana_bench_exchange::bench::{airdrop_lamports, do_bench_exchange, Config};
|
use solana_bench_exchange::bench::{airdrop_lamports, do_bench_exchange, Config};
|
||||||
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
use solana_core::gossip_service::{discover_cluster, get_multi_client};
|
||||||
use solana_core::validator::ValidatorConfig;
|
use solana_core::validator::ValidatorConfig;
|
||||||
use solana_drone::drone::run_local_drone;
|
|
||||||
use solana_exchange_program::exchange_processor::process_instruction;
|
use solana_exchange_program::exchange_processor::process_instruction;
|
||||||
use solana_exchange_program::id;
|
use solana_exchange_program::id;
|
||||||
use solana_exchange_program::solana_exchange_program;
|
use solana_exchange_program::solana_exchange_program;
|
||||||
|
use solana_faucet::faucet::run_local_faucet;
|
||||||
use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster};
|
use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster};
|
||||||
use solana_runtime::bank::Bank;
|
use solana_runtime::bank::Bank;
|
||||||
use solana_runtime::bank_client::BankClient;
|
use solana_runtime::bank_client::BankClient;
|
||||||
use solana_sdk::genesis_config::create_genesis_config;
|
use solana_sdk::genesis_config::create_genesis_config;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, Signer};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
#[ignore]
|
||||||
fn test_exchange_local_cluster() {
|
fn test_exchange_local_cluster() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
@ -46,16 +47,16 @@ fn test_exchange_local_cluster() {
|
|||||||
..ClusterConfig::default()
|
..ClusterConfig::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
let drone_keypair = Keypair::new();
|
let faucet_keypair = Keypair::new();
|
||||||
cluster.transfer(
|
cluster.transfer(
|
||||||
&cluster.funding_keypair,
|
&cluster.funding_keypair,
|
||||||
&drone_keypair.pubkey(),
|
&faucet_keypair.pubkey(),
|
||||||
2_000_000_000_000,
|
2_000_000_000_000,
|
||||||
);
|
);
|
||||||
|
|
||||||
let (addr_sender, addr_receiver) = channel();
|
let (addr_sender, addr_receiver) = channel();
|
||||||
run_local_drone(drone_keypair, addr_sender, Some(1_000_000_000_000));
|
run_local_faucet(faucet_keypair, addr_sender, Some(1_000_000_000_000));
|
||||||
let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap();
|
let faucet_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap();
|
||||||
|
|
||||||
info!("Connecting to the cluster");
|
info!("Connecting to the cluster");
|
||||||
let (nodes, _) =
|
let (nodes, _) =
|
||||||
@ -72,7 +73,7 @@ fn test_exchange_local_cluster() {
|
|||||||
const NUM_SIGNERS: u64 = 2;
|
const NUM_SIGNERS: u64 = 2;
|
||||||
airdrop_lamports(
|
airdrop_lamports(
|
||||||
&client,
|
&client,
|
||||||
&drone_addr,
|
&faucet_addr,
|
||||||
&config.identity,
|
&config.identity,
|
||||||
fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS,
|
fund_amount * (accounts_in_groups + 1) as u64 * NUM_SIGNERS,
|
||||||
);
|
);
|
||||||
|
@ -2,14 +2,14 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-streamer"
|
name = "solana-bench-streamer"
|
||||||
version = "0.21.0"
|
version = "1.0.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
solana-clap-utils = { path = "../clap-utils", version = "0.21.0" }
|
solana-clap-utils = { path = "../clap-utils", version = "1.0.0" }
|
||||||
solana-core = { path = "../core", version = "0.21.0" }
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
solana-logger = { path = "../logger", version = "0.21.0" }
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
solana-net-utils = { path = "../net-utils", version = "0.21.0" }
|
solana-net-utils = { path = "../net-utils", version = "1.0.0" }
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
use clap::{crate_description, crate_name, App, Arg};
|
use clap::{crate_description, crate_name, App, Arg};
|
||||||
use solana_core::packet::{Packet, Packets, PacketsRecycler, PACKET_DATA_SIZE};
|
use solana_core::packet::{Packet, Packets, PacketsRecycler, PACKET_DATA_SIZE};
|
||||||
use solana_core::result::Result;
|
|
||||||
use solana_core::streamer::{receiver, PacketReceiver};
|
use solana_core::streamer::{receiver, PacketReceiver};
|
||||||
use std::cmp::max;
|
use std::cmp::max;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
|
||||||
@ -8,7 +7,7 @@ use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
|
|||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use std::thread::{spawn, JoinHandle};
|
use std::thread::{spawn, JoinHandle, Result};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
|
@ -2,38 +2,36 @@
|
|||||||
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
authors = ["Solana Maintainers <maintainers@solana.com>"]
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
name = "solana-bench-tps"
|
name = "solana-bench-tps"
|
||||||
version = "0.21.0"
|
version = "1.0.0"
|
||||||
repository = "https://github.com/solana-labs/solana"
|
repository = "https://github.com/solana-labs/solana"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
homepage = "https://solana.com/"
|
homepage = "https://solana.com/"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bincode = "1.2.0"
|
bincode = "1.2.1"
|
||||||
clap = "2.33.0"
|
clap = "2.33.0"
|
||||||
log = "0.4.8"
|
log = "0.4.8"
|
||||||
rayon = "1.2.0"
|
rayon = "1.2.0"
|
||||||
serde = "1.0.102"
|
serde_json = "1.0.46"
|
||||||
serde_derive = "1.0.102"
|
|
||||||
serde_json = "1.0.41"
|
|
||||||
serde_yaml = "0.8.11"
|
serde_yaml = "0.8.11"
|
||||||
solana-clap-utils = { path = "../clap-utils", version = "0.21.0" }
|
solana-clap-utils = { path = "../clap-utils", version = "1.0.0" }
|
||||||
solana-core = { path = "../core", version = "0.21.0" }
|
solana-core = { path = "../core", version = "1.0.0" }
|
||||||
solana-genesis = { path = "../genesis", version = "0.21.0" }
|
solana-genesis = { path = "../genesis", version = "1.0.0" }
|
||||||
solana-client = { path = "../client", version = "0.21.0" }
|
solana-client = { path = "../client", version = "1.0.0" }
|
||||||
solana-drone = { path = "../drone", version = "0.21.0" }
|
solana-faucet = { path = "../faucet", version = "1.0.0" }
|
||||||
solana-librapay-api = { path = "../programs/librapay_api", version = "0.21.0", optional = true }
|
solana-librapay = { path = "../programs/librapay", version = "1.0.0", optional = true }
|
||||||
solana-logger = { path = "../logger", version = "0.21.0" }
|
solana-logger = { path = "../logger", version = "1.0.0" }
|
||||||
solana-metrics = { path = "../metrics", version = "0.21.0" }
|
solana-metrics = { path = "../metrics", version = "1.0.0" }
|
||||||
solana-measure = { path = "../measure", version = "0.21.0" }
|
solana-measure = { path = "../measure", version = "1.0.0" }
|
||||||
solana-net-utils = { path = "../net-utils", version = "0.21.0" }
|
solana-net-utils = { path = "../net-utils", version = "1.0.0" }
|
||||||
solana-runtime = { path = "../runtime", version = "0.21.0" }
|
solana-runtime = { path = "../runtime", version = "1.0.0" }
|
||||||
solana-sdk = { path = "../sdk", version = "0.21.0" }
|
solana-sdk = { path = "../sdk", version = "1.0.0" }
|
||||||
solana-move-loader-program = { path = "../programs/move_loader", version = "0.21.0", optional = true }
|
solana-move-loader-program = { path = "../programs/move_loader", version = "1.0.0", optional = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
serial_test = "0.2.0"
|
serial_test = "0.3.2"
|
||||||
serial_test_derive = "0.2.0"
|
serial_test_derive = "0.4.0"
|
||||||
solana-local-cluster = { path = "../local-cluster", version = "0.21.0" }
|
solana-local-cluster = { path = "../local-cluster", version = "1.0.0" }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
move = ["solana-librapay-api", "solana-move-loader-program"]
|
move = ["solana-librapay", "solana-move-loader-program"]
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
use clap::{crate_description, crate_name, App, Arg, ArgMatches};
|
use clap::{crate_description, crate_name, App, Arg, ArgMatches};
|
||||||
use solana_drone::drone::DRONE_PORT;
|
use solana_faucet::faucet::FAUCET_PORT;
|
||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
use solana_sdk::signature::{read_keypair_file, Keypair, KeypairUtil};
|
use solana_sdk::signature::{read_keypair_file, Keypair};
|
||||||
use std::{net::SocketAddr, process::exit, time::Duration};
|
use std::{net::SocketAddr, process::exit, time::Duration};
|
||||||
|
|
||||||
const NUM_LAMPORTS_PER_ACCOUNT_DEFAULT: u64 = solana_sdk::native_token::SOL_LAMPORTS;
|
const NUM_LAMPORTS_PER_ACCOUNT_DEFAULT: u64 = solana_sdk::native_token::LAMPORTS_PER_SOL;
|
||||||
|
|
||||||
/// Holds the configuration for a single run of the benchmark
|
/// Holds the configuration for a single run of the benchmark
|
||||||
pub struct Config {
|
pub struct Config {
|
||||||
pub entrypoint_addr: SocketAddr,
|
pub entrypoint_addr: SocketAddr,
|
||||||
pub drone_addr: SocketAddr,
|
pub faucet_addr: SocketAddr,
|
||||||
pub id: Keypair,
|
pub id: Keypair,
|
||||||
pub threads: usize,
|
pub threads: usize,
|
||||||
pub num_nodes: usize,
|
pub num_nodes: usize,
|
||||||
pub duration: Duration,
|
pub duration: Duration,
|
||||||
pub tx_count: usize,
|
pub tx_count: usize,
|
||||||
|
pub keypair_multiplier: usize,
|
||||||
pub thread_batch_sleep_ms: usize,
|
pub thread_batch_sleep_ms: usize,
|
||||||
pub sustained: bool,
|
pub sustained: bool,
|
||||||
pub client_ids_and_stake_file: String,
|
pub client_ids_and_stake_file: String,
|
||||||
@ -30,12 +31,13 @@ impl Default for Config {
|
|||||||
fn default() -> Config {
|
fn default() -> Config {
|
||||||
Config {
|
Config {
|
||||||
entrypoint_addr: SocketAddr::from(([127, 0, 0, 1], 8001)),
|
entrypoint_addr: SocketAddr::from(([127, 0, 0, 1], 8001)),
|
||||||
drone_addr: SocketAddr::from(([127, 0, 0, 1], DRONE_PORT)),
|
faucet_addr: SocketAddr::from(([127, 0, 0, 1], FAUCET_PORT)),
|
||||||
id: Keypair::new(),
|
id: Keypair::new(),
|
||||||
threads: 4,
|
threads: 4,
|
||||||
num_nodes: 1,
|
num_nodes: 1,
|
||||||
duration: Duration::new(std::u64::MAX, 0),
|
duration: Duration::new(std::u64::MAX, 0),
|
||||||
tx_count: 50_000,
|
tx_count: 50_000,
|
||||||
|
keypair_multiplier: 8,
|
||||||
thread_batch_sleep_ms: 1000,
|
thread_batch_sleep_ms: 1000,
|
||||||
sustained: false,
|
sustained: false,
|
||||||
client_ids_and_stake_file: String::new(),
|
client_ids_and_stake_file: String::new(),
|
||||||
@ -62,12 +64,12 @@ pub fn build_args<'a, 'b>(version: &'b str) -> App<'a, 'b> {
|
|||||||
.help("Rendezvous with the cluster at this entry point; defaults to 127.0.0.1:8001"),
|
.help("Rendezvous with the cluster at this entry point; defaults to 127.0.0.1:8001"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("drone")
|
Arg::with_name("faucet")
|
||||||
.short("d")
|
.short("d")
|
||||||
.long("drone")
|
.long("faucet")
|
||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("Location of the drone; defaults to entrypoint:DRONE_PORT"),
|
.help("Location of the faucet; defaults to entrypoint:FAUCET_PORT"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("identity")
|
Arg::with_name("identity")
|
||||||
@ -122,6 +124,13 @@ pub fn build_args<'a, 'b>(version: &'b str) -> App<'a, 'b> {
|
|||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("Number of transactions to send per batch")
|
.help("Number of transactions to send per batch")
|
||||||
)
|
)
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("keypair_multiplier")
|
||||||
|
.long("keypair-multiplier")
|
||||||
|
.value_name("NUM")
|
||||||
|
.takes_value(true)
|
||||||
|
.help("Multiply by transaction count to determine number of keypairs to create")
|
||||||
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("thread-batch-sleep-ms")
|
Arg::with_name("thread-batch-sleep-ms")
|
||||||
.short("z")
|
.short("z")
|
||||||
@ -180,9 +189,9 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(addr) = matches.value_of("drone") {
|
if let Some(addr) = matches.value_of("faucet") {
|
||||||
args.drone_addr = solana_net_utils::parse_host_port(addr).unwrap_or_else(|e| {
|
args.faucet_addr = solana_net_utils::parse_host_port(addr).unwrap_or_else(|e| {
|
||||||
eprintln!("failed to parse drone address: {}", e);
|
eprintln!("failed to parse faucet address: {}", e);
|
||||||
exit(1)
|
exit(1)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -208,7 +217,15 @@ pub fn extract_args<'a>(matches: &ArgMatches<'a>) -> Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(s) = matches.value_of("tx_count") {
|
if let Some(s) = matches.value_of("tx_count") {
|
||||||
args.tx_count = s.to_string().parse().expect("can't parse tx_account");
|
args.tx_count = s.to_string().parse().expect("can't parse tx_count");
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(s) = matches.value_of("keypair_multiplier") {
|
||||||
|
args.keypair_multiplier = s
|
||||||
|
.to_string()
|
||||||
|
.parse()
|
||||||
|
.expect("can't parse keypair-multiplier");
|
||||||
|
assert!(args.keypair_multiplier >= 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(t) = matches.value_of("thread-batch-sleep-ms") {
|
if let Some(t) = matches.value_of("thread-batch-sleep-ms") {
|
||||||
|
@ -4,15 +4,15 @@ use solana_bench_tps::cli;
|
|||||||
use solana_core::gossip_service::{discover_cluster, get_client, get_multi_client};
|
use solana_core::gossip_service::{discover_cluster, get_client, get_multi_client};
|
||||||
use solana_genesis::Base64Account;
|
use solana_genesis::Base64Account;
|
||||||
use solana_sdk::fee_calculator::FeeCalculator;
|
use solana_sdk::fee_calculator::FeeCalculator;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, Signer};
|
||||||
use solana_sdk::system_program;
|
use solana_sdk::system_program;
|
||||||
use std::{collections::HashMap, fs::File, io::prelude::*, path::Path, process::exit};
|
use std::{collections::HashMap, fs::File, io::prelude::*, path::Path, process::exit, sync::Arc};
|
||||||
|
|
||||||
/// Number of signatures for all transactions in ~1 week at ~100K TPS
|
/// Number of signatures for all transactions in ~1 week at ~100K TPS
|
||||||
pub const NUM_SIGNATURES_FOR_TXS: u64 = 100_000 * 60 * 60 * 24 * 7;
|
pub const NUM_SIGNATURES_FOR_TXS: u64 = 100_000 * 60 * 60 * 24 * 7;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup_with_filter("solana=info");
|
solana_logger::setup_with_default("solana=info");
|
||||||
solana_metrics::set_panic_hook("bench-tps");
|
solana_metrics::set_panic_hook("bench-tps");
|
||||||
|
|
||||||
let matches = cli::build_args(solana_clap_utils::version!()).get_matches();
|
let matches = cli::build_args(solana_clap_utils::version!()).get_matches();
|
||||||
@ -20,10 +20,11 @@ fn main() {
|
|||||||
|
|
||||||
let cli::Config {
|
let cli::Config {
|
||||||
entrypoint_addr,
|
entrypoint_addr,
|
||||||
drone_addr,
|
faucet_addr,
|
||||||
id,
|
id,
|
||||||
num_nodes,
|
num_nodes,
|
||||||
tx_count,
|
tx_count,
|
||||||
|
keypair_multiplier,
|
||||||
client_ids_and_stake_file,
|
client_ids_and_stake_file,
|
||||||
write_to_client_file,
|
write_to_client_file,
|
||||||
read_from_client_file,
|
read_from_client_file,
|
||||||
@ -34,9 +35,10 @@ fn main() {
|
|||||||
..
|
..
|
||||||
} = &cli_config;
|
} = &cli_config;
|
||||||
|
|
||||||
|
let keypair_count = *tx_count * keypair_multiplier;
|
||||||
if *write_to_client_file {
|
if *write_to_client_file {
|
||||||
info!("Generating {} keypairs", *tx_count * 2);
|
info!("Generating {} keypairs", keypair_count);
|
||||||
let (keypairs, _) = generate_keypairs(&id, *tx_count as u64 * 2);
|
let (keypairs, _) = generate_keypairs(&id, keypair_count as u64);
|
||||||
let num_accounts = keypairs.len() as u64;
|
let num_accounts = keypairs.len() as u64;
|
||||||
let max_fee =
|
let max_fee =
|
||||||
FeeCalculator::new(*target_lamports_per_signature, 0).max_lamports_per_signature;
|
FeeCalculator::new(*target_lamports_per_signature, 0).max_lamports_per_signature;
|
||||||
@ -80,12 +82,12 @@ fn main() {
|
|||||||
);
|
);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
client
|
Arc::new(client)
|
||||||
} else {
|
} else {
|
||||||
get_client(&nodes)
|
Arc::new(get_client(&nodes))
|
||||||
};
|
};
|
||||||
|
|
||||||
let (keypairs, move_keypairs, keypair_balance) = if *read_from_client_file && !use_move {
|
let (keypairs, move_keypairs) = if *read_from_client_file && !use_move {
|
||||||
let path = Path::new(&client_ids_and_stake_file);
|
let path = Path::new(&client_ids_and_stake_file);
|
||||||
let file = File::open(path).unwrap();
|
let file = File::open(path).unwrap();
|
||||||
|
|
||||||
@ -102,10 +104,10 @@ fn main() {
|
|||||||
last_balance = primordial_account.balance;
|
last_balance = primordial_account.balance;
|
||||||
});
|
});
|
||||||
|
|
||||||
if keypairs.len() < tx_count * 2 {
|
if keypairs.len() < keypair_count {
|
||||||
eprintln!(
|
eprintln!(
|
||||||
"Expected {} accounts in {}, only received {} (--tx_count mismatch?)",
|
"Expected {} accounts in {}, only received {} (--tx_count mismatch?)",
|
||||||
tx_count * 2,
|
keypair_count,
|
||||||
client_ids_and_stake_file,
|
client_ids_and_stake_file,
|
||||||
keypairs.len(),
|
keypairs.len(),
|
||||||
);
|
);
|
||||||
@ -115,13 +117,13 @@ fn main() {
|
|||||||
// This prevents the amount of storage needed for bench-tps accounts from creeping up
|
// This prevents the amount of storage needed for bench-tps accounts from creeping up
|
||||||
// across multiple runs.
|
// across multiple runs.
|
||||||
keypairs.sort_by(|x, y| x.pubkey().to_string().cmp(&y.pubkey().to_string()));
|
keypairs.sort_by(|x, y| x.pubkey().to_string().cmp(&y.pubkey().to_string()));
|
||||||
(keypairs, None, last_balance)
|
(keypairs, None)
|
||||||
} else {
|
} else {
|
||||||
generate_and_fund_keypairs(
|
generate_and_fund_keypairs(
|
||||||
&client,
|
client.clone(),
|
||||||
Some(*drone_addr),
|
Some(*faucet_addr),
|
||||||
&id,
|
&id,
|
||||||
*tx_count,
|
keypair_count,
|
||||||
*num_lamports_per_account,
|
*num_lamports_per_account,
|
||||||
*use_move,
|
*use_move,
|
||||||
)
|
)
|
||||||
@ -131,11 +133,5 @@ fn main() {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
do_bench_tps(
|
do_bench_tps(client, cli_config, keypairs, move_keypairs);
|
||||||
vec![client],
|
|
||||||
cli_config,
|
|
||||||
keypairs,
|
|
||||||
keypair_balance,
|
|
||||||
move_keypairs,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,12 @@ use solana_bench_tps::cli::Config;
|
|||||||
use solana_client::thin_client::create_client;
|
use solana_client::thin_client::create_client;
|
||||||
use solana_core::cluster_info::VALIDATOR_PORT_RANGE;
|
use solana_core::cluster_info::VALIDATOR_PORT_RANGE;
|
||||||
use solana_core::validator::ValidatorConfig;
|
use solana_core::validator::ValidatorConfig;
|
||||||
use solana_drone::drone::run_local_drone;
|
use solana_faucet::faucet::run_local_faucet;
|
||||||
use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster};
|
use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster};
|
||||||
#[cfg(feature = "move")]
|
#[cfg(feature = "move")]
|
||||||
use solana_sdk::move_loader::solana_move_loader_program;
|
use solana_sdk::move_loader::solana_move_loader_program;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, Signer};
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::{mpsc::channel, Arc};
|
||||||
use std::time::Duration;
|
use std::time::Duration;
|
||||||
|
|
||||||
fn test_bench_tps_local_cluster(config: Config) {
|
fn test_bench_tps_local_cluster(config: Config) {
|
||||||
@ -29,35 +29,36 @@ fn test_bench_tps_local_cluster(config: Config) {
|
|||||||
..ClusterConfig::default()
|
..ClusterConfig::default()
|
||||||
});
|
});
|
||||||
|
|
||||||
let drone_keypair = Keypair::new();
|
let faucet_keypair = Keypair::new();
|
||||||
cluster.transfer(
|
cluster.transfer(
|
||||||
&cluster.funding_keypair,
|
&cluster.funding_keypair,
|
||||||
&drone_keypair.pubkey(),
|
&faucet_keypair.pubkey(),
|
||||||
100_000_000,
|
100_000_000,
|
||||||
);
|
);
|
||||||
|
|
||||||
let client = create_client(
|
let client = Arc::new(create_client(
|
||||||
(cluster.entry_point_info.rpc, cluster.entry_point_info.tpu),
|
(cluster.entry_point_info.rpc, cluster.entry_point_info.tpu),
|
||||||
VALIDATOR_PORT_RANGE,
|
VALIDATOR_PORT_RANGE,
|
||||||
);
|
));
|
||||||
|
|
||||||
let (addr_sender, addr_receiver) = channel();
|
let (addr_sender, addr_receiver) = channel();
|
||||||
run_local_drone(drone_keypair, addr_sender, None);
|
run_local_faucet(faucet_keypair, addr_sender, None);
|
||||||
let drone_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap();
|
let faucet_addr = addr_receiver.recv_timeout(Duration::from_secs(2)).unwrap();
|
||||||
|
|
||||||
let lamports_per_account = 100;
|
let lamports_per_account = 100;
|
||||||
|
|
||||||
let (keypairs, move_keypairs, _keypair_balance) = generate_and_fund_keypairs(
|
let keypair_count = config.tx_count * config.keypair_multiplier;
|
||||||
&client,
|
let (keypairs, move_keypairs) = generate_and_fund_keypairs(
|
||||||
Some(drone_addr),
|
client.clone(),
|
||||||
|
Some(faucet_addr),
|
||||||
&config.id,
|
&config.id,
|
||||||
config.tx_count,
|
keypair_count,
|
||||||
lamports_per_account,
|
lamports_per_account,
|
||||||
config.use_move,
|
config.use_move,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let _total = do_bench_tps(vec![client], config, keypairs, 0, move_keypairs);
|
let _total = do_bench_tps(client, config, keypairs, move_keypairs);
|
||||||
|
|
||||||
#[cfg(not(debug_assertions))]
|
#[cfg(not(debug_assertions))]
|
||||||
assert!(_total > 100);
|
assert!(_total > 100);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Building the Solana book
|
Building the Solana book
|
||||||
---
|
---
|
||||||
|
|
||||||
Install the book's dependnecies, build, and test the book:
|
Install the book's dependencies, build, and test the book:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ ./build.sh
|
$ ./build.sh
|
||||||
|
@ -24,7 +24,7 @@ msc {
|
|||||||
... ;
|
... ;
|
||||||
Validator abox Validator [label="\nmax\nlockout\n"];
|
Validator abox Validator [label="\nmax\nlockout\n"];
|
||||||
|||;
|
|||;
|
||||||
StakerX => Cluster [label="StakeState::RedeemCredits()"];
|
Cluster box Cluster [label="credits redeemed (at epoch)"];
|
||||||
StakerY => Cluster [label="StakeState::RedeemCredits()"] ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
19
book/art/spv-bank-hash.bob
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
+----------+
|
||||||
|
| Bank-Hash|
|
||||||
|
+----------+
|
||||||
|
^
|
||||||
|
|
|
||||||
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
|
||||||
|
: :
|
||||||
|
: +--------------+ +-------------+ :
|
||||||
|
: Hash( | Accounts-Hash| + | Block-Merkle| ) :
|
||||||
|
: +--------------+ +-------------+ :
|
||||||
|
: ^ :
|
||||||
|
+~~~~~~~~~~~~~ | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
|
||||||
|
|
|
||||||
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
|
||||||
|
: +---------------+ +---------------+ +---------------+ :
|
||||||
|
: Hash( | Hash(Account1)| + | Hash(Account2)| + ... + | Hash(AccountN)| ) :
|
||||||
|
: +---------------+ +---------------+ +---------------+ :
|
||||||
|
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
|
||||||
|
|
@ -1,18 +0,0 @@
|
|||||||
+------------+
|
|
||||||
| Bank-Merkle|
|
|
||||||
+------------+
|
|
||||||
^ ^
|
|
||||||
/ \
|
|
||||||
+-----------------+ +-------------+
|
|
||||||
| Bank-Diff-Merkle| | Block-Merkle|
|
|
||||||
+-----------------+ +-------------+
|
|
||||||
^ ^
|
|
||||||
/ \
|
|
||||||
+------+ +--------------------------+
|
|
||||||
| Hash | | Previous Bank-Diff-Merkle|
|
|
||||||
+------+ +--------------------------+
|
|
||||||
^ ^
|
|
||||||
/ \
|
|
||||||
+---------------+ +---------------+
|
|
||||||
| Hash(Account1)| | Hash(Account2)|
|
|
||||||
+---------------+ +---------------+
|
|
@ -18,9 +18,9 @@
|
|||||||
| | `-------` `--------` `--+---------` | | | | |
|
| | `-------` `--------` `--+---------` | | | | |
|
||||||
| | ^ ^ | | | `------------` |
|
| | ^ ^ | | | `------------` |
|
||||||
| | | | v | | |
|
| | | | v | | |
|
||||||
| | | .--+--------. | | |
|
| | | .--+---------. | | |
|
||||||
| | | | Blocktree | | | |
|
| | | | Blockstore | | | |
|
||||||
| | | `-----------` | | .------------. |
|
| | | `------------` | | .------------. |
|
||||||
| | | ^ | | | | |
|
| | | ^ | | | | |
|
||||||
| | | | | | | Downstream | |
|
| | | | | | | Downstream | |
|
||||||
| | .--+--. .-------+---. | | | Validators | |
|
| | .--+--. .-------+---. | | | Validators | |
|
||||||
|
@ -5,9 +5,9 @@ cd "$(dirname "$0")"
|
|||||||
|
|
||||||
usage=$(cargo -q run -p solana-cli -- -C ~/.foo --help | sed 's|'"$HOME"'|~|g')
|
usage=$(cargo -q run -p solana-cli -- -C ~/.foo --help | sed 's|'"$HOME"'|~|g')
|
||||||
|
|
||||||
out=${1:-src/api-reference/cli.md}
|
out=${1:-src/cli/usage.md}
|
||||||
|
|
||||||
cat src/api-reference/.cli.md > "$out"
|
cat src/cli/.usage.md.header > "$out"
|
||||||
|
|
||||||
section() {
|
section() {
|
||||||
declare mark=${2:-"###"}
|
declare mark=${2:-"###"}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
cd "$(dirname "$0")"
|
|
||||||
|
|
||||||
make -j"$(nproc)" -B svg
|
|
||||||
|
|
||||||
#TODO figure out why book wants to change, but local and CI differ
|
|
||||||
exit 0
|
|
||||||
if [[ -n $CI ]]; then
|
|
||||||
# In CI confirm that no svgs need to be built
|
|
||||||
git diff --exit-code
|
|
||||||
fi
|
|
@ -3,4 +3,14 @@ set -e
|
|||||||
|
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
|
|
||||||
|
# md check
|
||||||
|
find src -name '*.md' -a \! -name SUMMARY.md |
|
||||||
|
while read -r file; do
|
||||||
|
if ! grep -q '('"${file#src/}"')' src/SUMMARY.md; then
|
||||||
|
echo "Error: $file missing from SUMMARY.md"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
make -j"$(nproc)" test
|
make -j"$(nproc)" test
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
BOB_SRCS=$(wildcard art/*.bob)
|
BOB_SRCS=$(wildcard art/*.bob)
|
||||||
MSC_SRCS=$(wildcard art/*.msc)
|
MSC_SRCS=$(wildcard art/*.msc)
|
||||||
MD_SRCS=$(wildcard src/*.md)
|
MD_SRCS=$(wildcard src/*.md src/*/*.md)
|
||||||
|
|
||||||
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/.gitbook/assets/%.svg) $(MSC_SRCS:art/%.msc=src/.gitbook/assets/%.svg)
|
SVG_IMGS=$(BOB_SRCS:art/%.bob=src/.gitbook/assets/%.svg) $(MSC_SRCS:art/%.msc=src/.gitbook/assets/%.svg)
|
||||||
|
|
||||||
|
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,210 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,201 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.7 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,183 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="304" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="304" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="184"/>
|
|
||||||
<line x1="4" x2="540" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="540" y1="184" y2="184"/>
|
|
||||||
<line x1="540" x2="540" y1="8" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="28" x2="28" y1="232" y2="296"/>
|
|
||||||
<line x1="28" x2="108" y1="232" y2="232"/>
|
|
||||||
<line x1="28" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="108" x2="164" y1="232" y2="232"/>
|
|
||||||
<line x1="164" x2="196" y1="232" y2="232"/>
|
|
||||||
<line x1="196" x2="196" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="40" y2="104"/>
|
|
||||||
<line x1="36" x2="180" y1="40" y2="40"/>
|
|
||||||
<line x1="36" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="108" x2="108" y1="104" y2="176"/>
|
|
||||||
<line x1="108" x2="124" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="136"/>
|
|
||||||
<line x1="124" x2="180" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="364" y1="136" y2="136"/>
|
|
||||||
<line x1="180" x2="180" y1="40" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="56" y2="88"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="56" y2="56"/>
|
|
||||||
<line x1="180" x2="180" y1="88" y2="104"/>
|
|
||||||
<line x1="180" x2="184" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="176"/>
|
|
||||||
<line x1="364" x2="420" y1="152" y2="152"/>
|
|
||||||
<line x1="420" x2="420" y1="104" y2="152"/>
|
|
||||||
<line x1="420" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="436" y1="104" y2="176"/>
|
|
||||||
<line x1="436" x2="508" y1="104" y2="104"/>
|
|
||||||
<line x1="508" x2="508" y1="40" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="176"/>
|
|
||||||
<line x1="164" x2="364" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="164" x2="164" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="88" y2="88"/>
|
|
||||||
<line x1="192" x2="364" y1="88" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="56" y2="88"/>
|
|
||||||
<line x1="364" x2="364" y1="88" y2="104"/>
|
|
||||||
<line x1="364" x2="420" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="232" y2="296"/>
|
|
||||||
<line x1="348" x2="364" y1="232" y2="232"/>
|
|
||||||
<line x1="348" x2="516" y1="296" y2="296"/>
|
|
||||||
<line x1="364" x2="436" y1="232" y2="232"/>
|
|
||||||
<line x1="436" x2="516" y1="232" y2="232"/>
|
|
||||||
<line x1="516" x2="516" y1="232" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="40" y2="56"/>
|
|
||||||
<line x1="364" x2="508" y1="40" y2="40"/>
|
|
||||||
<line x1="364" x2="360" y1="56" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="364" x2="364" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="192" y2="220"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="57" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="76">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="268">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="76">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="481" y="268">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,340 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.2 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,322 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="400" width="856" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="400" width="856" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="8" y2="152"/>
|
|
||||||
<line x1="4" x2="852" y1="8" y2="8"/>
|
|
||||||
<line x1="4" x2="852" y1="152" y2="152"/>
|
|
||||||
<line x1="852" x2="852" y1="8" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="248" y2="392"/>
|
|
||||||
<line x1="4" x2="852" y1="248" y2="248"/>
|
|
||||||
<line x1="4" x2="852" y1="392" y2="392"/>
|
|
||||||
<line x1="852" x2="852" y1="248" y2="392"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="56" y2="120"/>
|
|
||||||
<line x1="60" x2="196" y1="56" y2="56"/>
|
|
||||||
<line x1="60" x2="84" y1="120" y2="120"/>
|
|
||||||
<line x1="84" x2="84" y1="120" y2="144"/>
|
|
||||||
<line x1="84" x2="196" y1="120" y2="120"/>
|
|
||||||
<line x1="196" x2="196" y1="56" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="72" y2="72"/>
|
|
||||||
<line x1="196" x2="196" y1="104" y2="120"/>
|
|
||||||
<line x1="196" x2="200" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="60" x2="60" y1="296" y2="360"/>
|
|
||||||
<line x1="60" x2="84" y1="296" y2="296"/>
|
|
||||||
<line x1="60" x2="196" y1="360" y2="360"/>
|
|
||||||
<line x1="84" x2="196" y1="296" y2="296"/>
|
|
||||||
<line x1="196" x2="196" y1="296" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="196" x2="252" y1="312" y2="312"/>
|
|
||||||
<line x1="196" x2="196" y1="344" y2="360"/>
|
|
||||||
<line x1="196" x2="200" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="84" x2="84" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="84" x2="84" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="208" x2="260" y1="104" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="72" y2="104"/>
|
|
||||||
<line x1="260" x2="260" y1="104" y2="120"/>
|
|
||||||
<line x1="260" x2="284" y1="120" y2="120"/>
|
|
||||||
<line x1="284" x2="284" y1="120" y2="144"/>
|
|
||||||
<line x1="284" x2="396" y1="120" y2="120"/>
|
|
||||||
<line x1="396" x2="396" y1="104" y2="120"/>
|
|
||||||
<line x1="396" x2="400" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="208" x2="204" y1="344" y2="344"/>
|
|
||||||
<line x1="208" x2="260" y1="344" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="312" y2="344"/>
|
|
||||||
<line x1="260" x2="260" y1="344" y2="360"/>
|
|
||||||
<line x1="260" x2="396" y1="360" y2="360"/>
|
|
||||||
<line x1="396" x2="396" y1="344" y2="360"/>
|
|
||||||
<line x1="396" x2="400" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="56" y2="72"/>
|
|
||||||
<line x1="260" x2="396" y1="56" y2="56"/>
|
|
||||||
<line x1="260" x2="256" y1="72" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="56" y2="72"/>
|
|
||||||
<line x1="396" x2="396" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="296" y2="312"/>
|
|
||||||
<line x1="260" x2="284" y1="296" y2="296"/>
|
|
||||||
<line x1="260" x2="256" y1="312" y2="312"/>
|
|
||||||
<line x1="284" x2="396" y1="296" y2="296"/>
|
|
||||||
<line x1="396" x2="396" y1="296" y2="312"/>
|
|
||||||
<line x1="396" x2="396" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="396" x2="452" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="284" x2="284" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="284" x2="284" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="104" y2="104"/>
|
|
||||||
<line x1="408" x2="460" y1="104" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="72" y2="104"/>
|
|
||||||
<line x1="460" x2="460" y1="104" y2="120"/>
|
|
||||||
<line x1="460" x2="508" y1="120" y2="120"/>
|
|
||||||
<line x1="508" x2="508" y1="120" y2="144"/>
|
|
||||||
<line x1="508" x2="596" y1="120" y2="120"/>
|
|
||||||
<line x1="596" x2="596" y1="104" y2="120"/>
|
|
||||||
<line x1="596" x2="600" y1="104" y2="104"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="408" x2="404" y1="344" y2="344"/>
|
|
||||||
<line x1="408" x2="460" y1="344" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="312" y2="344"/>
|
|
||||||
<line x1="460" x2="460" y1="344" y2="360"/>
|
|
||||||
<line x1="460" x2="596" y1="360" y2="360"/>
|
|
||||||
<line x1="596" x2="596" y1="344" y2="360"/>
|
|
||||||
<line x1="596" x2="600" y1="344" y2="344"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="56" y2="72"/>
|
|
||||||
<line x1="460" x2="596" y1="56" y2="56"/>
|
|
||||||
<line x1="460" x2="456" y1="72" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="56" y2="72"/>
|
|
||||||
<line x1="596" x2="596" y1="72" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="296" y2="312"/>
|
|
||||||
<line x1="460" x2="508" y1="296" y2="296"/>
|
|
||||||
<line x1="460" x2="456" y1="312" y2="312"/>
|
|
||||||
<line x1="508" x2="596" y1="296" y2="296"/>
|
|
||||||
<line x1="596" x2="596" y1="296" y2="312"/>
|
|
||||||
<line x1="596" x2="596" y1="312" y2="344"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="596" x2="652" y1="312" y2="312"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="508" x2="508" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="508" x2="508" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="104" y2="104"/>
|
|
||||||
<line x1="608" x2="660" y1="104" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="72" y2="104"/>
|
|
||||||
<line x1="660" x2="660" y1="104" y2="120"/>
|
|
||||||
<line x1="660" x2="684" y1="120" y2="120"/>
|
|
||||||
<line x1="684" x2="684" y1="120" y2="144"/>
|
|
||||||
<line x1="684" x2="796" y1="120" y2="120"/>
|
|
||||||
<line x1="796" x2="796" y1="56" y2="120"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="608" x2="604" y1="344" y2="344"/>
|
|
||||||
<line x1="608" x2="660" y1="344" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="312" y2="344"/>
|
|
||||||
<line x1="660" x2="660" y1="344" y2="360"/>
|
|
||||||
<line x1="660" x2="796" y1="360" y2="360"/>
|
|
||||||
<line x1="796" x2="796" y1="296" y2="360"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="56" y2="72"/>
|
|
||||||
<line x1="660" x2="796" y1="56" y2="56"/>
|
|
||||||
<line x1="660" x2="656" y1="72" y2="72"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="660" x2="660" y1="296" y2="312"/>
|
|
||||||
<line x1="660" x2="684" y1="296" y2="296"/>
|
|
||||||
<line x1="660" x2="656" y1="312" y2="312"/>
|
|
||||||
<line x1="684" x2="796" y1="296" y2="296"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="684" x2="684" y1="160" y2="240"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="684" x2="684" y1="256" y2="284"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="92">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="161" y="332">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="28">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="353" y="268">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="92">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="332">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="28">
|
|
||||||
Above
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="457" y="268">
|
|
||||||
Below
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="489" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="92">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="561" y="332">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="92">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="689" y="332">
|
|
||||||
Neighbor
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="92">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="761" y="332">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 8.3 KiB |
@ -1,138 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,138 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,156 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,138 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,138 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,138 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="240" width="544" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="240" width="544" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="104" y2="232"/>
|
|
||||||
<line x1="4" x2="108" y1="104" y2="104"/>
|
|
||||||
<line x1="4" x2="540" y1="232" y2="232"/>
|
|
||||||
<line x1="108" x2="436" y1="104" y2="104"/>
|
|
||||||
<line x1="436" x2="540" y1="104" y2="104"/>
|
|
||||||
<line x1="540" x2="540" y1="104" y2="232"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="36" x2="36" y1="136" y2="200"/>
|
|
||||||
<line x1="36" x2="180" y1="136" y2="136"/>
|
|
||||||
<line x1="36" x2="180" y1="200" y2="200"/>
|
|
||||||
<line x1="180" x2="180" y1="136" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="152" y2="184"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="180" x2="356" y1="152" y2="152"/>
|
|
||||||
<line x1="180" x2="180" y1="184" y2="200"/>
|
|
||||||
<line x1="180" x2="184" y1="184" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="108" x2="108" y1="40" y2="92"/>
|
|
||||||
<line x1="108" x2="212" y1="40" y2="40"/>
|
|
||||||
<line x1="212" x2="212" y1="8" y2="40"/>
|
|
||||||
<line x1="212" x2="332" y1="8" y2="8"/>
|
|
||||||
<line x1="212" x2="212" y1="40" y2="72"/>
|
|
||||||
<line x1="212" x2="332" y1="72" y2="72"/>
|
|
||||||
<line x1="332" x2="332" y1="8" y2="40"/>
|
|
||||||
<line x1="332" x2="332" y1="40" y2="72"/>
|
|
||||||
<line x1="332" x2="436" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="436" x2="436" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="192" x2="188" y1="184" y2="184"/>
|
|
||||||
<line x1="192" x2="364" y1="184" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="152" y2="184"/>
|
|
||||||
<line x1="364" x2="364" y1="184" y2="200"/>
|
|
||||||
<line x1="364" x2="508" y1="200" y2="200"/>
|
|
||||||
<line x1="508" x2="508" y1="136" y2="200"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="364" x2="364" y1="136" y2="152"/>
|
|
||||||
<line x1="364" x2="508" y1="136" y2="136"/>
|
|
||||||
<line x1="364" x2="360" y1="152" y2="152"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="145" y="172">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="44">
|
|
||||||
Leader
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="140">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="172">
|
|
||||||
Validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="172">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,192 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="288" width="736" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="288" width="736" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="4" x2="4" y1="216" y2="280"/>
|
|
||||||
<line x1="4" x2="156" y1="216" y2="216"/>
|
|
||||||
<line x1="4" x2="172" y1="280" y2="280"/>
|
|
||||||
<line x1="156" x2="172" y1="216" y2="216"/>
|
|
||||||
<line x1="172" x2="172" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="104" y2="168"/>
|
|
||||||
<line x1="124" x2="204" y1="104" y2="104"/>
|
|
||||||
<line x1="124" x2="156" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="156" x2="156" y1="168" y2="204"/>
|
|
||||||
<line x1="156" x2="204" y1="168" y2="168"/>
|
|
||||||
<line x1="204" x2="292" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="168" y2="204"/>
|
|
||||||
<line x1="204" x2="292" y1="168" y2="168"/>
|
|
||||||
<line x1="292" x2="292" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="216" y2="280"/>
|
|
||||||
<line x1="188" x2="204" y1="216" y2="216"/>
|
|
||||||
<line x1="188" x2="356" y1="280" y2="280"/>
|
|
||||||
<line x1="204" x2="356" y1="216" y2="216"/>
|
|
||||||
<line x1="356" x2="356" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="204" x2="204" y1="40" y2="92"/>
|
|
||||||
<line x1="204" x2="276" y1="40" y2="40"/>
|
|
||||||
<line x1="276" x2="276" y1="8" y2="40"/>
|
|
||||||
<line x1="276" x2="444" y1="8" y2="8"/>
|
|
||||||
<line x1="276" x2="276" y1="40" y2="72"/>
|
|
||||||
<line x1="276" x2="444" y1="72" y2="72"/>
|
|
||||||
<line x1="444" x2="444" y1="8" y2="40"/>
|
|
||||||
<line x1="444" x2="444" y1="40" y2="72"/>
|
|
||||||
<line x1="444" x2="532" y1="40" y2="40"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="40" y2="92"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="380" x2="380" y1="216" y2="280"/>
|
|
||||||
<line x1="380" x2="532" y1="216" y2="216"/>
|
|
||||||
<line x1="380" x2="548" y1="280" y2="280"/>
|
|
||||||
<line x1="532" x2="548" y1="216" y2="216"/>
|
|
||||||
<line x1="548" x2="548" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="444" x2="444" y1="104" y2="168"/>
|
|
||||||
<line x1="444" x2="532" y1="104" y2="104"/>
|
|
||||||
<line x1="444" x2="532" y1="168" y2="168"/>
|
|
||||||
<line x1="532" x2="612" y1="104" y2="104"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="532" x2="532" y1="168" y2="204"/>
|
|
||||||
<line x1="532" x2="580" y1="168" y2="168"/>
|
|
||||||
<line marker-end="url(#triangle)" x1="580" x2="580" y1="168" y2="204"/>
|
|
||||||
<line x1="580" x2="612" y1="168" y2="168"/>
|
|
||||||
<line x1="612" x2="612" y1="104" y2="168"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="564" x2="564" y1="216" y2="280"/>
|
|
||||||
<line x1="564" x2="580" y1="216" y2="216"/>
|
|
||||||
<line x1="564" x2="732" y1="280" y2="280"/>
|
|
||||||
<line x1="580" x2="732" y1="216" y2="216"/>
|
|
||||||
<line x1="732" x2="732" y1="216" y2="280"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="252">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="153" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="217" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="44">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="321" y="252">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="44">
|
|
||||||
0
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="473" y="140">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="252">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="140">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="252">
|
|
||||||
Neighborhood
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="697" y="252">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 4.9 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,348 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.4 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,330 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="768" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="768" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line marker-end="url(#triangle)" x1="76" x2="76" y1="32" y2="172"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="124" x2="124" y1="24" y2="56"/>
|
|
||||||
<line x1="124" x2="164" y1="24" y2="24"/>
|
|
||||||
<line x1="124" x2="124" y1="56" y2="88"/>
|
|
||||||
<line x1="124" x2="164" y1="56" y2="56"/>
|
|
||||||
<line x1="124" x2="124" y1="88" y2="120"/>
|
|
||||||
<line x1="124" x2="164" y1="88" y2="88"/>
|
|
||||||
<line x1="124" x2="124" y1="120" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="120" y2="120"/>
|
|
||||||
<line x1="124" x2="124" y1="152" y2="184"/>
|
|
||||||
<line x1="124" x2="164" y1="152" y2="152"/>
|
|
||||||
<line x1="124" x2="164" y1="184" y2="184"/>
|
|
||||||
<line x1="164" x2="164" y1="24" y2="56"/>
|
|
||||||
<line x1="164" x2="164" y1="56" y2="88"/>
|
|
||||||
<line x1="164" x2="164" y1="88" y2="120"/>
|
|
||||||
<line x1="164" x2="164" y1="120" y2="152"/>
|
|
||||||
<line x1="164" x2="164" y1="152" y2="184"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="188" x2="188" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="200" x2="208" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="224" x2="236" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="232" x2="240" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="236" x2="236" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="260" x2="260" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="264" x2="272" y1="64" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="272" x2="280" y1="128" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="304" x2="316" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="316" x2="316" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="360" y1="136" y2="112"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="348" x2="348" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="368" x2="376" y1="96" y2="80"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="384" y1="48" y2="64"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="376" x2="388" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="388" x2="388" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="416" x2="424" y1="80" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="420" x2="420" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="436" x2="420" y1="104" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="448" x2="460" y1="112" y2="136"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="460" x2="460" y1="144" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="512" x2="640" y1="24" y2="24"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="108">
|
|
||||||
time
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="44">
|
|
||||||
L1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="76">
|
|
||||||
L2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="108">
|
|
||||||
L3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="140">
|
|
||||||
L4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="137" y="172">
|
|
||||||
L5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="140">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="185" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="209" y="108">
|
|
||||||
E3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="225" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="249" y="76">
|
|
||||||
E2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="140">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="257" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="289" y="108">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="305" y="172">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="313" y="44">
|
|
||||||
E1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="337" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="361" y="108">
|
|
||||||
E3'
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="377" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="393" y="76">
|
|
||||||
x
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="409" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="449" y="172">
|
|
||||||
xx
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="12">
|
|
||||||
validator
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="60">
|
|
||||||
vote(E1)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="92">
|
|
||||||
vote(E2)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="124">
|
|
||||||
slash(E3)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="156">
|
|
||||||
vote(E4)
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="513" y="188">
|
|
||||||
hang
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="553" y="188">
|
|
||||||
on
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="577" y="188">
|
|
||||||
to
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="593" y="12">
|
|
||||||
action
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="601" y="188">
|
|
||||||
E4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="625" y="188">
|
|
||||||
and
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="657" y="188">
|
|
||||||
E5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="681" y="188">
|
|
||||||
for
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="713" y="188">
|
|
||||||
more...
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 5.5 KiB |
@ -1,122 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,140 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.8 KiB |
@ -1,122 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,122 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,122 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="144" width="48" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="144" width="48" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,110 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon class="fg_fill" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon class="bg_fill" points="2,2 2,12 18,7 2,2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="fg_fill" cx="10" cy="10" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect class="fg_fill" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle class="bg_fill" cx="10" cy="10" r="4"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle class="bg_fill" cx="20" cy="20" r="6"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
rect.backdrop {
|
|
||||||
fill: white;
|
|
||||||
}
|
|
||||||
text{
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
circle {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
line {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
path {
|
|
||||||
fill: none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.fg_fill {
|
|
||||||
fill: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.bg_fill {
|
|
||||||
fill: white;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect class="backdrop" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,92 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="176" width="40" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="176" width="40" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="12" x2="12" y1="48" y2="128"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="16" x2="32" y1="48" y2="80"/>
|
|
||||||
<line x1="36" x2="32" y1="88" y2="80"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="88"/>
|
|
||||||
<line x1="36" x2="36" y1="96" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="44">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="9" y="140">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="33" y="172">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,122 +0,0 @@
|
|||||||
<svg class="bob" font-family="arial" font-size="14" height="208" width="96" xmlns="http://www.w3.org/2000/svg">
|
|
||||||
<defs>
|
|
||||||
<marker id="triangle" markerHeight="8" markerWidth="8" orient="auto" refX="4" refY="2" viewBox="0 0 8 4">
|
|
||||||
<polygon fill="black" points="0,0 0,4 8,2 0,0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="clear_triangle" markerHeight="10" markerWidth="10" orient="auto" refX="1" refY="7" viewBox="0 0 20 14">
|
|
||||||
<polygon fill="none" points="2,2 2,12 18,7 2,2" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="circle" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="black" r="8"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="square" markerHeight="5" markerWidth="5" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<rect fill="black" height="20" width="20" x="0" y="0"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="open_circle" markerHeight="10" markerWidth="10" orient="auto" refX="10" refY="10" viewBox="0 0 20 20">
|
|
||||||
<circle cx="10" cy="10" fill="white" r="4" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
<marker id="big_open_circle" markerHeight="20" markerWidth="20" orient="auto" refX="20" refY="20" viewBox="0 0 40 40">
|
|
||||||
<circle cx="20" cy="20" fill="white" r="6" stroke="black" stroke-width="2"/>
|
|
||||||
</marker>
|
|
||||||
</defs>
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
line,path {
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
line.dashed {
|
|
||||||
stroke-dasharray: 5;
|
|
||||||
}
|
|
||||||
circle.solid {
|
|
||||||
fill:black;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
circle.open {
|
|
||||||
fill:none;
|
|
||||||
stroke: black;
|
|
||||||
stroke-width: 2;
|
|
||||||
stroke-opacity: 1;
|
|
||||||
fill-opacity: 1;
|
|
||||||
stroke-linecap: round;
|
|
||||||
stroke-linejoin: miter;
|
|
||||||
}
|
|
||||||
tspan.head{
|
|
||||||
fill: none;
|
|
||||||
stroke: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
<rect fill="white" height="208" width="96" x="0" y="0"/>
|
|
||||||
<g>
|
|
||||||
<line x1="20" x2="24" y1="88" y2="80"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="88"/>
|
|
||||||
<line x1="20" x2="20" y1="96" y2="128"/>
|
|
||||||
<line x1="24" x2="40" y1="80" y2="48"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="16" y2="32"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="44" x2="44" y1="48" y2="96"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="48" x2="64" y1="16" y2="48"/>
|
|
||||||
<line x1="68" x2="64" y1="56" y2="48"/>
|
|
||||||
<line x1="68" x2="68" y1="64" y2="56"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="68" x2="68" y1="80" y2="160"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line x1="72" x2="80" y1="80" y2="96"/>
|
|
||||||
<line x1="80" x2="88" y1="96" y2="112"/>
|
|
||||||
<line x1="92" x2="88" y1="120" y2="112"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="120"/>
|
|
||||||
<line x1="92" x2="92" y1="128" y2="192"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="17" y="140">
|
|
||||||
5
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="12">
|
|
||||||
1
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="44">
|
|
||||||
2
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="41" y="108">
|
|
||||||
4
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="76">
|
|
||||||
3
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="65" y="172">
|
|
||||||
6
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<text x="89" y="204">
|
|
||||||
7
|
|
||||||
</text>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.9 KiB |
BIN
book/src/.gitbook/assets/p_ex_interest.png
Executable file
After Width: | Height: | Size: 542 KiB |
Before Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 256 KiB |
Before Width: | Height: | Size: 256 KiB |