Better Ball rules. Buggish but almost OK Synchrone variant
authorBenjamin Auder <benjamin.auder@somewhere>
Tue, 24 Mar 2020 00:37:00 +0000 (01:37 +0100)
committerBenjamin Auder <benjamin.auder@somewhere>
Tue, 24 Mar 2020 00:37:00 +0000 (01:37 +0100)
28 files changed:
TODO
client/README.md
client/public/images/pieces/Ball/bd.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bh.svg [new file with mode: 0644]
client/public/images/pieces/Ball/bw.svg [deleted file]
client/public/images/pieces/Ball/by.svg [deleted file]
client/public/images/pieces/Ball/wd.svg [new file with mode: 0644]
client/public/images/pieces/Ball/wh.svg [new file with mode: 0644]
client/public/images/pieces/Ball/ww.svg [deleted file]
client/public/images/pieces/Ball/wy.svg [deleted file]
client/public/index.html
client/src/base_rules.js
client/src/components/BaseGame.vue
client/src/components/Board.vue
client/src/translations/about/en.pug
client/src/translations/about/es.pug
client/src/translations/about/fr.pug
client/src/translations/rules/Ball/en.pug
client/src/translations/rules/Ball/es.pug
client/src/translations/rules/Ball/fr.pug
client/src/translations/rules/Synchrone/en.pug [new file with mode: 0644]
client/src/translations/rules/Synchrone/es.pug [new file with mode: 0644]
client/src/translations/rules/Synchrone/fr.pug [new file with mode: 0644]
client/src/variants/Ball.js
client/src/variants/Eightpieces.js
client/src/variants/Synchrone.js
client/src/variants/Twokings.js
client/src/views/Analyse.vue

diff --git a/TODO b/TODO
index 819ebc8..8d3eabc 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,6 @@
 # New variants
 # New variants
+Doublearmy: 2 kings remaining get mated.
+
 Landing pieces from empty board:
 https://www.chessvariants.com/diffsetup.dir/unachess.html
 Parachute v1 & 2
 Landing pieces from empty board:
 https://www.chessvariants.com/diffsetup.dir/unachess.html
 Parachute v1 & 2
@@ -12,10 +14,6 @@ Goal is still checkmate.
 Take(a)n(d)make : if capture a piece, take its power for the last of the turn and make a move like it.
 If a pawn taken: direction of the capturer.
 
 Take(a)n(d)make : if capture a piece, take its power for the last of the turn and make a move like it.
 If a pawn taken: direction of the capturer.
 
-Maxima, Interweave, Roccoco
-
-Synchrone Chess: allow to anticipate en-passant capture as well :)
-
 Dynamo chess
 
 Dynamo chess
 
-Omega chess (ask first)
+Maxima, Interweave, Roccoco
index 25bf68e..1aa3c00 100644 (file)
@@ -32,8 +32,9 @@ See [Configuration Reference](https://cli.vuejs.org/config/).
 
 ## Resources
 
 
 ## Resources
 
- - Vue.js + Vue router + Webpack,
- - mini.css,
- - Google font 'Open Sans'
+- Vue.js + Vue router,
+- Webpack,
+- mini.css
 
 Sounds and pieces images where found at various locations.
 
 Sounds and pieces images where found at various locations.
+Fonts were found on Google Fonts.
diff --git a/client/public/images/pieces/Ball/bd.svg b/client/public/images/pieces/Ball/bd.svg
new file mode 100644 (file)
index 0000000..8c5339c
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg18"
+   sodipodi:docname="bd.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata24">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs22" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview20"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1058.7119"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg18" />
+  <path
+     style="color:#000000;display:block;fill:#000000;fill-rule:nonzero"
+     d="m 490,643 q 4,9 13,27 17,42 17,50 -2,28 -29,28 -20,0 -47,-57 -4,-8 -12,-14 -27,-28 8,-47 32,-19 50,13 z m 590,371 q 70,92 69,205 -4,33 -38,33 -46,0 -36,-34 3,-55 -11,-91 -23,-57 -51,-85 -15,-30 18,-44 32,-15 49,16 z m -261,488 q -5,36 2,78 -60,-12 -113,-56 -32,-17 -15,-47 17,-31 47,-10 21,11 38,20 17,9 41,15 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 4,-23 3,-47 -1,-24 0,-46 97,-33 183,-82 86,-49 126,-106 48,-66 89,-156 41,-90 75,-219 34,-133 35,-266 1,-133 1,-259 0,-63 -3,-117 -3,-54 0,-55 z m -677,1423 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -37,-30 -81,-49 -212,-76 -307,-220 -7,-9 -45,-81 -20,-38 -34,-52 -19,-19 -55,-21 -56,-3 -87,54 -42,-12 -75,-10 -56,21 -81,45 -51,51 -66,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 404,821 q 29,20 6,48 -24,23 -53,4 -61,-40 -65,-105 1,-33 39,-31 36,3 35,37 8,32 38,47 z m 252,498 q 22,11 22,11 30,12 19,44 -12,30 -46,20 -118,-43 -163,-158 -7,-33 24,-45 31,-10 42,22 8,17 12,22 11,-9 29,-12 61,-10 71,54 3,22 -10,42 z"
+     display="block"
+     id="path2"
+     inkscape:connector-curvature="0" />
+  <g
+     id="g16"
+     transform="matrix(1,0,0,-1,0,2008)"
+     style="fill:#ffffff;fill-rule:nonzero">
+    <path
+       style="color:#000000;display:block"
+       d="m 490,1365 q 4,-9 13,-27 17,-42 17,-50 -2,-28 -29,-28 -20,0 -47,57 -4,8 -12,14 -27,28 8,47 32,19 50,-13 z"
+       display="block"
+       id="path4"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 1080,994 q 70,-92 69,-205 -4,-33 -38,-33 -46,0 -36,34 3,55 -11,91 -23,57 -51,85 -15,30 18,44 32,15 49,-16 z"
+       display="block"
+       id="path6"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 819,506 q -5,-36 2,-78 -60,12 -113,56 -32,17 -15,47 17,31 47,10 21,-11 38,-20 17,-9 41,-15 z"
+       display="block"
+       id="path8"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 1756,1774 q -1,0 2,-54 3,-54 3,-118 1,-125 0,-258 -1,-133 -36,-267 -34,-128 -75,-218 -41,-90 -89,-157 -72,-108 -196,-183 -124,-75 -259,-98 4,23 3,47 -1,24 0,46 97,33 183,82 86,49 126,106 48,66 89,156 41,90 75,219 34,133 35,266 1,133 1,259 0,63 -3,117 -3,54 0,55 z"
+       display="block"
+       id="path10"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 404,1187 q 29,-20 6,-48 -24,-23 -53,-4 -61,40 -65,105 1,33 39,31 36,-3 35,-37 8,-32 38,-47 z"
+       display="block"
+       id="path12"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 656,689 q 22,-11 22,-11 30,-12 19,-44 -12,-30 -46,-20 -118,43 -163,158 -7,33 24,45 31,10 42,-22 8,-17 12,-22 11,9 29,12 61,10 71,-54 3,-22 -10,-42 z"
+       display="block"
+       id="path14"
+       inkscape:connector-curvature="0" />
+  </g>
+  <path
+     style="fill:#aa0000;fill-opacity:1;stroke-width:8.67796612"
+     d="m 646.21921,175.7921 c -10.00828,10.0082 -6.30707,75.2883 7.31789,129.0694 27.57329,108.8385 73.24924,181.1348 197.493,312.5933 128.44638,135.9053 160.6095,189.813 169.0975,283.4197 l 4.725,52.1083 -33.83647,-22.2525 C 972.40607,918.4914 927.89153,896.0671 892.09492,880.8984 814.15749,847.8727 749.05703,807.3133 697.06758,759.3912 660.11356,725.3281 641.81606,699.5021 579.76729,593.8278 536.34666,519.8789 489.79786,506.2067 437.57098,552.0626 c -26.00964,22.8367 -34.35014,25.5487 -63.99469,20.8083 -67.1276,-10.7341 -154.55105,60.6648 -180.25316,147.2132 -33.0723,111.3665 -11.69934,184.2653 99.51191,339.4142 86.82291,121.1252 111.75745,175.1201 121.88812,263.9448 8.87757,77.8376 21.35225,103.8007 88.01133,183.175 l 32.96696,39.2554 -17.81128,56.2023 c -10.64395,33.5862 -19.77595,92.3966 -22.69362,146.1478 l -4.88234,89.9456 20.82256,-6.4593 c 69.74805,-21.6364 181.04741,-92.4125 256.8937,-163.3607 l 54.17301,-50.6745 20.73439,46.3355 c 24.62032,55.0195 87.52909,128.7762 109.83614,128.7762 16.95035,0 88.96959,-74.9661 108.73049,-113.1795 10.4458,-20.1998 20.4378,-24.5143 78.4435,-33.8717 281.7725,-45.4547 487.1035,-222.2127 620.3091,-533.9895 78.1472,-182.9086 102.0903,-333.0787 109.6803,-687.9084 l 5.4296,-253.8305 h -611.6812 c -336.42473,0 -614.28467,2.6034 -617.46659,5.7853 z M 1762.8767,315.3627 c 13.654,206.1902 2.6158,460.2011 -25.2131,580.1967 -34.5017,148.7685 -87.7838,281.2056 -154.8356,384.8571 -76.2582,117.8831 -159.8738,189.6003 -292.9046,251.2247 -65.0716,30.1433 -179.5274,65.7966 -187.0557,58.2683 -1.6178,-1.6178 -0.2907,-25.4936 2.9486,-53.0572 4.6832,-39.8466 9.4128,-51.037 23.0817,-54.6114 34.386,-8.9922 175.7428,-81.9213 215.8462,-111.3599 97.5639,-71.6185 192.5346,-263.6222 246.305,-497.959 11.9645,-52.1423 15.7265,-122.4629 18.9182,-353.6271 l 3.984,-288.5424 h 71.6612 71.6612 z M 507.37237,673.0288 c 20.55826,51.706 15.68732,78.4017 -14.30534,78.4017 -16.11508,0 -78.26025,-81.3404 -78.26025,-102.4331 0,-14.353 27.61574,-27.8896 52.04043,-25.5092 17.46106,1.7019 25.32851,11.3195 40.52516,49.5406 z M 360.47983,744.922 c 4.69917,5.9661 10.98909,21.1073 13.97759,33.647 2.98851,12.5399 15.24222,29.2265 27.23049,37.0815 37.59148,24.6308 23.39389,65.9495 -22.66105,65.9495 -48.06383,0 -106.80373,-90.7585 -85.04876,-131.408 9.9471,-18.5863 53.30676,-22.0223 66.50173,-5.27 z m 719.12927,262.6575 c 49.0435,49.0436 91.0188,201.7774 64.301,233.9703 -12.9227,15.5709 -57.148,17.6161 -66.1449,3.0588 -3.4481,-5.5791 -7.1601,-30.2561 -8.2488,-54.8377 -1.8989,-42.87 -35.3883,-126.2551 -55.7649,-138.8486 -15.31299,-9.4639 -9.6222,-37.6229 10.4438,-51.6777 25.5672,-17.9079 29.8089,-17.2699 55.4138,8.3349 z m -525.28107,197.4576 c 7.59653,16.6725 14.31795,19.1991 43.63712,16.4031 47.48399,-4.5284 68.50265,15.2454 68.50265,64.4454 0,29.4996 3.56342,38.2521 17.35593,42.6297 21.36617,6.7813 23.78917,48.9425 3.76768,65.5589 -11.14905,9.2528 -19.32737,9.24 -45.55933,-0.071 -94.58155,-33.5733 -185.04038,-152.38 -149.04466,-195.7522 16.50526,-19.8876 50.92201,-16.0799 61.34061,6.7864 z m 220.42209,272.8114 47.92107,23.5027 v 42.1668 c 0,39.7279 -1.12936,41.8185 -19.52543,36.1437 -51.63915,-15.9295 -119.32203,-61.1884 -119.32203,-79.7896 0,-19.8835 17.17128,-45.5263 30.48595,-45.5263 6.88566,0 34.08385,10.5762 60.44044,23.5027 z"
+     id="path26"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/bh.svg b/client/public/images/pieces/Ball/bh.svg
new file mode 100644 (file)
index 0000000..6dbea89
--- /dev/null
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg112"
+   sodipodi:docname="bh.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata118">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs116" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview114"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1024"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg112" />
+  <path
+     style="color:#000000;display:block;fill:#000000;fill-rule:nonzero"
+     d="m 490,643 q 4,9 13,27 17,42 17,50 -2,28 -29,28 -20,0 -47,-57 -4,-8 -12,-14 -27,-28 8,-47 32,-19 50,13 z m 590,371 q 70,92 69,205 -4,33 -38,33 -46,0 -36,-34 3,-55 -11,-91 -23,-57 -51,-85 -15,-30 18,-44 32,-15 49,16 z m -261,488 q -5,36 2,78 -60,-12 -113,-56 -32,-17 -15,-47 17,-31 47,-10 21,11 38,20 17,9 41,15 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 4,-23 3,-47 -1,-24 0,-46 97,-33 183,-82 86,-49 126,-106 48,-66 89,-156 41,-90 75,-219 34,-133 35,-266 1,-133 1,-259 0,-63 -3,-117 -3,-54 0,-55 z m -677,1423 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -37,-30 -81,-49 -212,-76 -307,-220 -7,-9 -45,-81 -20,-38 -34,-52 -19,-19 -55,-21 -56,-3 -87,54 -42,-12 -75,-10 -56,21 -81,45 -51,51 -66,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 404,821 q 29,20 6,48 -24,23 -53,4 -61,-40 -65,-105 1,-33 39,-31 36,3 35,37 8,32 38,47 z m 252,498 q 22,11 22,11 30,12 19,44 -12,30 -46,20 -118,-43 -163,-158 -7,-33 24,-45 31,-10 42,22 8,17 12,22 11,-9 29,-12 61,-10 71,54 3,22 -10,42 z"
+     display="block"
+     id="path96"
+     inkscape:connector-curvature="0" />
+  <g
+     id="g110"
+     transform="matrix(1,0,0,-1,0,2008)"
+     style="fill:#ffffff;fill-rule:nonzero">
+    <path
+       style="color:#000000;display:block"
+       d="m 490,1365 q 4,-9 13,-27 17,-42 17,-50 -2,-28 -29,-28 -20,0 -47,57 -4,8 -12,14 -27,28 8,47 32,19 50,-13 z"
+       display="block"
+       id="path98"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 1080,994 q 70,-92 69,-205 -4,-33 -38,-33 -46,0 -36,34 3,55 -11,91 -23,57 -51,85 -15,30 18,44 32,15 49,-16 z"
+       display="block"
+       id="path100"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 819,506 q -5,-36 2,-78 -60,12 -113,56 -32,17 -15,47 17,31 47,10 21,-11 38,-20 17,-9 41,-15 z"
+       display="block"
+       id="path102"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 1756,1774 q -1,0 2,-54 3,-54 3,-118 1,-125 0,-258 -1,-133 -36,-267 -34,-128 -75,-218 -41,-90 -89,-157 -72,-108 -196,-183 -124,-75 -259,-98 4,23 3,47 -1,24 0,46 97,33 183,82 86,49 126,106 48,66 89,156 41,90 75,219 34,133 35,266 1,133 1,259 0,63 -3,117 -3,54 0,55 z"
+       display="block"
+       id="path104"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 404,1187 q 29,-20 6,-48 -24,-23 -53,-4 -61,40 -65,105 1,33 39,31 36,-3 35,-37 8,-32 38,-47 z"
+       display="block"
+       id="path106"
+       inkscape:connector-curvature="0" />
+    <path
+       style="color:#000000;display:block"
+       d="m 656,689 q 22,-11 22,-11 30,-12 19,-44 -12,-30 -46,-20 -118,43 -163,158 -7,33 24,45 31,10 42,-22 8,-17 12,-22 11,9 29,12 61,10 71,-54 3,-22 -10,-42 z"
+       display="block"
+       id="path108"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/client/public/images/pieces/Ball/bw.svg b/client/public/images/pieces/Ball/bw.svg
deleted file mode 100644 (file)
index 6d4f960..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Layer_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 62 64"
-   xml:space="preserve"
-   sodipodi:docname="bw.svg"
-   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
-     id="defs28" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1060"
-     id="namedview26"
-     showgrid="false"
-     inkscape:zoom="14.75"
-     inkscape:cx="32.220339"
-     inkscape:cy="32"
-     inkscape:window-x="0"
-     inkscape:window-y="20"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="Layer_1" /><g
-     id="wildebeest__x5F_glyphs"
-     transform="matrix(0.8425369,0,0,0.89830508,4.8813559,3.5254237)"><path
-       d="m 25,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path2"
-       inkscape:connector-curvature="0" /><path
-       d="m 34,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path4"
-       inkscape:connector-curvature="0" /><path
-       d="M 11,36 V 24.7 c -0.1,0.2 -0.2,0.3 -0.4,0.5 -1.3,1.4 -3.1,2.3 -5,2.4 H 5 V 42.5 C 5,43.8 3.9,45 2.5,45 1.1,45 0,43.4 0,42 v 2.5 c 0,3.6 3,6.9 9,6.5 6.9,-0.5 7,-4.4 7,-6.4 C 12.9,43.2 11,39 11,36 Z"
-       id="path6"
-       inkscape:connector-curvature="0" /><path
-       d="M 11,12 C 11,8.1 14.1,5 18,5 H 28.8 C 26.6,2 22.9,0 17.5,0 10.6,0 5,5.6 5,12.5 V 19 h 6 z"
-       id="path8"
-       inkscape:connector-curvature="0" /><path
-       d="M 5.5,25.6 C 6.9,25.5 8.2,24.9 9.1,23.9 9.8,23 10.3,22 10.4,21 H 0.2 c 0.3,1.1 0.8,2.1 1.6,3 1.1,1.1 2.4,1.6 3.7,1.6 z"
-       id="path10"
-       inkscape:connector-curvature="0" /><path
-       d="m 51,12 v 7 h 6 V 12.5 C 57,5.6 51.4,0 44.5,0 39.1,0 35.5,2 33.2,5 H 44 c 3.9,0 7,3.1 7,7 z"
-       id="path12"
-       inkscape:connector-curvature="0" /><path
-       d="m 61.8,43 c -0.5,1.6 -2.3,2.9 -4,1.2 C 57.3,43.6 57,42.8 57,42 V 27.6 h -0.6 c -1.9,-0.1 -3.7,-1 -5,-2.4 C 51.3,25 51.1,24.9 51,24.7 V 36 c 0,3 -1.9,7.2 -5,8.6 0,2 0.1,5.9 7,6.4 6,0.4 9,-2.9 9,-6.5 V 43 Z"
-       id="path14"
-       inkscape:connector-curvature="0" /><path
-       d="m 52.9,23.8 c 0.9,1 2.2,1.7 3.6,1.7 1.3,0.1 2.6,-0.5 3.7,-1.6 0.8,-0.8 1.4,-1.9 1.6,-3 H 51.6 c 0.1,1.1 0.6,2.1 1.3,2.9 z"
-       id="path16"
-       inkscape:connector-curvature="0" /><path
-       d="M 49,36 V 21 h -6 c -2.2,0 -4,1.8 -4,4 V 52.6 L 37.4,57 h -13 L 23,53.6 V 25 c 0,-2.2 -1.8,-4 -4,-4 h -6 v 15 c 0,2.2 1.5,5.4 3.5,6.6 l 6.4,16.1 c 0.1,3 2.7,5.3 6.1,5.3 h 4 c 3.3,0 5.8,-2.2 5.9,-5.3 L 44.8,42.9 C 47.1,42.2 49,38.5 49,36 Z M 18,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z m 15,33 h -4 c -1.9,0 -3.8,-1 -4.1,-3 h 11.9 c -0.2,1.8 -1.7,3 -3.8,3 z M 44,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z"
-       id="path18"
-       inkscape:connector-curvature="0" /><path
-       d="m 43,19 h 6 V 12 C 49,9.2 46.8,7 44,7 H 18 c -2.8,0 -5,2.2 -5,5 v 7 h 6 c 3.3,0 6,2.7 6,6 v 20 h 1 c 2.1,0 3.9,1.1 5,2.7 1.1,-1.6 2.9,-2.7 5,-2.7 h 1 V 25 c 0,-3.3 2.7,-6 6,-6 z m -7,-1 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z m 0,-4 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z"
-       id="path20"
-       inkscape:connector-curvature="0" /></g><metadata
-     id="metadata23"><rdf:RDF><rdf:Description
-         about="https://iconscout.com/legal#licenses"
-         dc:title="wildebeest"
-         dc:description="wildebeest"
-         dc:publisher="Iconscout"
-         dc:date="2017-09-07"
-         dc:format="image/svg+xml"
-         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 13.491525,20.338983 0.0678,6.847458"
-     id="path19"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 48.187753,26.162712 0.01564,-5.688136"
-     id="path25"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 18.361946,43.58983 1.027885,-0.945762"
-     id="path27"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="M 43.638053,43.58983 42.101695,42.644068"
-     id="path29"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 29.146419,8.0169491 4.141717,-0.016949"
-     id="path31"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 24.867298,53.155092 -0.592722,-1.543213 -0.001,-13.050007 C 24.272475,24.222465 24.2981,25.110056 23.860117,24.242416 23.588471,23.704287 22.95384,23.043279 22.45206,22.775833 21.704131,22.377189 21.535948,22.359322 18.531519,22.359322 H 15.8 v 6.937205 c 0,7.710287 -0.0076,7.562258 0.454296,8.889152 0.501435,1.440583 1.344891,2.753735 2.167872,3.375092 0.240157,0.181321 0.38019,0.346543 0.435341,0.513651 l 0.0813,0.246348 -0.480734,0.45032 c -0.360366,0.337566 -0.461348,0.469707 -0.403304,0.527751 0.172807,0.172807 -0.05907,0.05965 -0.451264,-0.220206 -1.534243,-1.094813 -2.792258,-3.308081 -3.308513,-5.820778 -0.04595,-0.223652 -0.09525,-2.500176 -0.132515,-6.118874 -0.03264,-3.169491 -0.07528,-6.838136 -0.09477,-8.152542 -0.02413,-1.627526 -0.013,-2.389831 0.03487,-2.389831 0.04759,0 0.07039,-1.08961 0.07057,-3.372881 3.01e-4,-3.725439 0.03389,-4.152349 0.408062,-5.186423 0.334943,-0.925661 0.748533,-1.563658 1.483325,-2.2881535 0.845975,-0.8341211 1.458229,-1.1934301 2.620984,-1.5381585 0.365354,-0.1083183 0.865304,-0.1213238 5.402611,-0.1405417 l 5,-0.021178 v 0.2397694 0.2397694 h 2.101695 2.101695 V 8.2889663 8.0491191 l 4.830508,0.021441 c 4.807637,0.021339 4.832904,0.022174 5.336362,0.1762589 2.003853,0.6132865 3.455555,2.111906 4.115101,4.248096 l 0.188389,0.61017 0.0228,3.677966 c 0.0158,2.549403 8.47e-4,3.677966 -0.04874,3.677966 -0.04906,0 -0.07154,0.905201 -0.07154,2.881356 0,1.948169 0.02282,2.881356 0.07045,2.881356 0.04835,0 0.06309,1.70686 0.04696,5.440678 -0.02274,5.267391 -0.02806,5.459225 -0.166815,6.023003 -0.60213,2.446463 -1.832709,4.461596 -3.356453,5.496351 -0.388655,0.26393 -0.569269,0.305906 -0.390759,0.09082 0.04791,-0.05773 0.07514,-0.115541 0.06051,-0.128458 -0.01463,-0.01292 -0.31644,-0.200153 -0.670678,-0.416077 -0.354237,-0.215925 -0.652413,-0.398557 -0.662613,-0.40585 -0.08478,-0.06062 0.130034,-0.257541 0.447446,-0.410175 0.515893,-0.248079 1.433235,-1.186602 1.862796,-1.905809 0.426687,-0.714393 0.832807,-1.662729 1.054531,-2.462444 l 0.178568,-0.644068 0.01903,-7.271187 0.01902,-7.271186 h -2.676391 c -1.691994,0 -2.808534,0.02756 -3.035661,0.07492 -1.299614,0.271018 -2.376616,1.387144 -2.668856,2.76581 -0.07928,0.374007 -0.09503,2.510552 -0.09598,13.023676 L 37.698367,50.8 l -0.661048,1.948359 -0.661046,1.948358 -5.458126,7.94e-4 -5.458126,7.93e-4 -0.592722,-1.543213 z m 4.188372,-4.03788 c 0.425642,-0.425642 0.376391,-1.133108 -0.10122,-1.453975 -0.232209,-0.156002 -0.256625,-0.157859 -1.812385,-0.137803 l -1.577007,0.02033 -0.213909,0.21404 c -0.39611,0.396352 -0.33955,1.183981 0.104465,1.454741 0.188499,0.114947 0.362661,0.127347 1.791844,0.127575 l 1.583051,2.72e-4 0.225161,-0.225162 z m 7.551407,0.05072 c 0.483075,-0.40648 0.385213,-1.32968 -0.165335,-1.559714 -0.174614,-0.07296 -0.57845,-0.09635 -1.663216,-0.09635 -1.578472,0 -1.766953,0.03818 -1.981505,0.401387 -0.142924,0.241951 -0.15019,0.758923 -0.01436,1.021594 0.205792,0.397959 0.252995,0.407528 2.01027,0.407528 h 1.606832 z m -5.317156,-3.145408 c 0.338848,-0.461603 1.016621,-1.069251 1.535689,-1.376801 0.72215,-0.427878 1.381867,-0.606219 2.379354,-0.643212 l 0.862591,-0.03199 0.01939,-9.432718 0.01939,-9.432718 0.152471,-0.53844 c 0.526973,-1.860974 1.854887,-3.248954 3.610094,-3.773392 0.483102,-0.144346 0.646116,-0.152945 3.408428,-0.179785 l 2.901061,-0.02819 -0.01971,-3.638403 -0.0197,-3.638402 -0.209172,-0.584255 C 45.421746,11.305103 44.369254,10.297888 42.986441,9.9074701 42.566804,9.7889915 41.995452,9.7830508 31.020339,9.7830508 c -10.806814,0 -11.5529,0.00747 -11.966102,0.1197817 -1.216023,0.3305305 -2.199539,1.1369585 -2.747866,2.2530995 -0.470031,0.956765 -0.464601,0.902856 -0.490054,4.864407 l -0.02298,3.576271 h 2.530533 c 1.391793,0 2.784059,0.03179 3.093925,0.07064 2.004124,0.251296 3.646929,1.704191 4.292613,3.796384 l 0.156114,0.505854 0.01896,9.508474 0.01896,9.508475 0.693544,0.0012 c 1.413937,0.0024 2.470363,0.417126 3.467954,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.167748,-0.15156 0.303725,-0.336798 z"
-     id="path33"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 19.543394,29.460558 c -0.314382,-0.100737 -0.792209,-0.542603 -0.953415,-0.881661 -0.351674,-0.739659 -0.224415,-1.483645 0.352369,-2.060046 0.394395,-0.394132 0.758086,-0.531845 1.273725,-0.482299 0.876608,0.08423 1.557822,0.984879 1.460853,1.931427 -0.111582,1.089196 -1.142234,1.810221 -2.133532,1.492579 z"
-     id="path35"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 41.32493,29.390654 c -0.641139,-0.306689 -0.997845,-0.877086 -1.00572,-1.608212 -0.0059,-0.551804 0.183568,-0.9751 0.6011,-1.342626 0.513583,-0.452074 1.122318,-0.538687 1.713943,-0.243868 1.546485,0.770646 1.124603,3.189951 -0.579989,3.325983 -0.314523,0.0251 -0.455456,-2.64e-4 -0.729334,-0.131277 z"
-     id="path37"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="M 24.865072,53.155932 24.27143,51.613559 24.271769,38.833898 C 24.271972,31.285773 24.245921,25.804967 24.208096,25.445317 24.15764,24.965571 24.092359,24.731798 23.900368,24.34333 23.445834,23.423642 22.617144,22.72204 21.70378,22.483612 21.319075,22.383186 20.881212,22.3666 18.525904,22.36323 l -2.731663,-0.0039 0.02137,7.20339 0.02137,7.20339 0.180495,0.659032 c 0.4734,1.728506 1.403635,3.34181 2.360242,4.093364 0.268196,0.210707 0.425819,0.392362 0.478217,0.551131 0.07785,0.23589 0.07635,0.238652 -0.378512,0.697028 -0.256442,0.258422 -0.436428,0.492955 -0.4105,0.534906 0.09592,0.1552 -0.09785,0.06428 -0.48789,-0.228911 -1.470737,-1.105572 -2.685996,-3.175369 -3.216212,-5.477769 -0.137754,-0.598177 -0.146403,-0.86584 -0.198762,-6.150815 -0.03011,-3.038983 -0.07392,-6.722882 -0.09737,-8.186441 -0.03064,-1.912456 -0.02169,-2.661017 0.03179,-2.661017 0.05302,0 0.07441,-0.96355 0.07441,-3.351026 0,-1.980065 0.02938,-3.567994 0.07182,-3.881356 0.0948,-0.700089 0.444206,-1.713942 0.81527,-2.365648 0.562489,-0.987908 1.615981,-1.9547486 2.649167,-2.4312685 1.071624,-0.4942481 0.757103,-0.4696861 6.345103,-0.4955089 l 5.033899,-0.023262 V 8.288677 8.5288135 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 4.976342,0 5.115067,0.00845 6.072929,0.3697394 1.133115,0.4273964 2.273128,1.40118 2.923735,2.4974153 0.190649,0.321231 0.465198,0.92872 0.610109,1.349976 l 0.263475,0.76592 0.02119,3.711865 c 0.01477,2.586496 -6.1e-4,3.711864 -0.05079,3.711864 -0.09927,0 -0.100739,5.639038 -0.0015,5.738283 0.048,0.048 0.063,1.798617 0.04702,5.488135 -0.02114,4.880629 -0.03526,5.467044 -0.142497,5.915959 -0.601974,2.520035 -1.83244,4.525859 -3.454352,5.631058 -0.324497,0.221118 -0.484248,0.241322 -0.317269,0.04012 0.04792,-0.05773 0.07514,-0.114004 0.06051,-0.125045 -0.01463,-0.01104 -0.31644,-0.198838 -0.670678,-0.417328 -0.354237,-0.218489 -0.652413,-0.402657 -0.662613,-0.409262 -0.08706,-0.05637 0.131355,-0.257471 0.447446,-0.411982 0.463813,-0.226721 1.281552,-1.024025 1.695704,-1.653332 0.371493,-0.564485 0.829086,-1.515759 1.051677,-2.186293 0.390243,-1.175579 0.383038,-1.012531 0.383038,-8.668654 v -7.043358 h -2.674629 c -1.70137,0 -2.805362,0.02742 -3.033898,0.07536 -1.182093,0.247955 -2.169605,1.195355 -2.606797,2.500911 -0.119037,0.355474 -0.12646,0.97106 -0.159008,13.186441 l -0.03414,12.813559 -0.644068,1.880804 -0.644068,1.880805 -5.458779,5.42e-4 -5.458779,5.43e-4 -0.593641,-1.542373 z m 4.14554,-3.98527 c 0.508146,-0.427576 0.410097,-1.323368 -0.171444,-1.566352 -0.301108,-0.125811 -3.027675,-0.130568 -3.274421,-0.0057 -0.424218,0.214657 -0.59548,0.828718 -0.366002,1.312305 0.192217,0.40507 0.2904,0.425739 2.036731,0.428756 l 1.57107,0.0027 z m 7.605477,-0.01473 c 0.534716,-0.479157 0.313205,-1.485457 -0.354561,-1.610731 -0.127374,-0.02389 -0.877715,-0.03354 -1.667425,-0.02144 l -1.435836,0.022 -0.213904,0.21404 c -0.396103,0.396356 -0.33954,1.183984 0.104472,1.454741 0.188419,0.114899 0.36249,0.127347 1.783994,0.127575 l 1.575202,2.72e-4 0.208058,-0.186441 z m -5.335064,-3.121289 c 0.131086,-0.178573 0.400633,-0.477482 0.598995,-0.664241 1.011678,-0.9525 2.10527,-1.383961 3.50782,-1.383961 h 0.679717 l 0.01988,-9.474577 0.01988,-9.474576 0.155657,-0.508474 c 0.480117,-1.568373 1.435989,-2.744737 2.757368,-3.393414 0.99295,-0.487448 1.019577,-0.490715 4.254237,-0.522028 l 2.898305,-0.02806 v -3.475033 c 0,-3.95017 -0.0077,-4.020371 -0.554797,-5.072002 C 45.07089,10.986504 43.94992,10.112105 42.86446,9.8903472 42.614961,9.8393752 38.978724,9.8169491 30.96345,9.8169491 c -12.726879,0 -11.855989,-0.028943 -12.788228,0.4249989 -0.64266,0.312935 -1.517726,1.202643 -1.849146,1.880086 -0.488407,0.998334 -0.480471,0.922037 -0.509517,4.898305 l -0.02612,3.576271 h 2.576148 c 1.473783,0 2.801315,0.03132 3.102349,0.07319 1.969563,0.273941 3.535747,1.662003 4.239475,3.757321 l 0.15939,0.474576 0.01853,9.542373 0.01853,9.542373 0.69333,0.0012 c 1.413712,0.0024 2.470202,0.417177 3.467739,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.163744,-0.146106 0.294829,-0.32468 z"
-     id="path39"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04335,-0.220339 h 4.986743 4.986743 l -0.04269,0.220339 c -0.232307,1.199152 -1.116189,2.096397 -2.313193,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
-     id="path41"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 19.529332,29.456525 c -0.388514,-0.123715 -0.918287,-0.694794 -1.044982,-1.126457 -0.135012,-0.460004 -0.135309,-0.634102 -0.0018,-1.083523 0.126794,-0.426962 0.549453,-0.918859 0.944614,-1.099358 1.10635,-0.50535 2.382318,0.527304 2.249807,1.820792 -0.112351,1.096702 -1.140404,1.809268 -2.147594,1.488546 z"
-     id="path28"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 41.4417,29.464608 c -0.12249,-0.04148 -0.356375,-0.193071 -0.519746,-0.336875 -0.830178,-0.730752 -0.825155,-1.963033 0.011,-2.699048 0.510112,-0.449018 1.104191,-0.530288 1.701298,-0.232737 1.551687,0.773238 1.125605,3.211848 -0.579989,3.319471 -0.214421,0.01353 -0.490075,-0.0093 -0.612564,-0.05081 z"
-     id="path30"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 24.880657,53.223729 -0.572182,-1.474576 -0.03411,-13.254238 -0.03411,-13.254237 -0.152962,-0.450843 c -0.414948,-1.223022 -1.479741,-2.166476 -2.661495,-2.358206 -0.251982,-0.04088 -1.546671,-0.0715 -3.035728,-0.0718 l -2.596365,-5.12e-4 0.02193,7.20339 0.02193,7.20339 0.178371,0.651832 c 0.477104,1.743505 1.383217,3.297466 2.409402,4.132064 0.220639,0.179446 0.383294,0.376331 0.431451,0.522247 0.07674,0.232533 0.07402,0.237514 -0.379375,0.694412 -0.256443,0.258422 -0.436428,0.492955 -0.410501,0.534906 0.09408,0.152219 -0.09365,0.06647 -0.479796,-0.21917 -1.505019,-1.11328 -2.738185,-3.245706 -3.259448,-5.636334 -0.08511,-0.390334 -0.113685,-1.396637 -0.157914,-5.561313 -0.0297,-2.79661 -0.07614,-6.475935 -0.103205,-8.176278 -0.03659,-2.298664 -0.02926,-3.103858 0.02856,-3.139594 0.05678,-0.03509 0.07777,-0.942388 0.07777,-3.36119 0,-3.518015 0.03141,-4.002372 0.318627,-4.913363 0.314677,-0.998089 0.716849,-1.677929 1.439925,-2.4340838 0.747044,-0.7812176 1.597603,-1.3113598 2.592049,-1.6155893 0.492613,-0.1507043 0.53985,-0.1521909 5.530755,-0.174055 l 5.033898,-0.022052 V 8.288677 8.5288136 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 3.679858,0 4.704083,0.019178 5.101695,0.095524 2.239222,0.42996 3.981671,2.1383567 4.639205,4.5485437 0.12095,0.443341 0.128468,0.715531 0.114231,4.135593 -0.0084,2.01356 -0.03212,4.911865 -0.05275,6.440678 -0.02588,1.917763 -0.01495,2.822092 0.03524,2.916501 0.05058,0.09514 0.06619,1.789196 0.05122,5.559322 l -0.02153,5.422482 -0.209872,0.779661 c -0.625275,2.322853 -1.865617,4.293463 -3.300667,5.243975 -0.383614,0.254088 -0.560602,0.29 -0.384706,0.07806 0.04791,-0.05773 0.07514,-0.11383 0.06051,-0.124658 -0.01463,-0.01083 -0.31644,-0.196852 -0.670678,-0.413386 -0.354237,-0.216535 -0.652413,-0.400876 -0.662613,-0.409649 -0.06627,-0.05699 0.103367,-0.258403 0.281006,-0.333649 0.333065,-0.141082 0.995308,-0.671236 1.341954,-1.074291 0.948687,-1.103065 1.726992,-2.851277 1.885567,-4.235315 0.04136,-0.361024 0.06845,-3.298276 0.06878,-7.459899 l 5.56e-4,-6.864407 -2.593221,4.07e-4 c -1.426271,2.03e-4 -2.776271,0.03013 -3,0.06649 -0.5378,0.08738 -1.278339,0.459631 -1.679913,0.844448 -0.426032,0.408254 -0.828536,1.039993 -1.014485,1.592257 l -0.150023,0.445568 -0.01878,12.745763 -0.01878,12.745762 -0.659678,1.949153 -0.659678,1.949152 H 30.915582 25.45284 l -0.572183,-1.474576 z m 4.176258,-4.116827 c 0.28316,-0.300238 0.351448,-0.65617 0.198991,-1.037198 -0.199828,-0.499417 -0.276696,-0.52105 -1.93848,-0.54554 -1.606414,-0.02367 -1.840748,0.01675 -2.062963,0.355897 -0.176371,0.269174 -0.203228,0.719991 -0.06078,1.020182 0.193533,0.40784 0.329655,0.436465 2.089834,0.439476 l 1.551318,0.0027 0.222077,-0.235471 z m 7.47415,0.129661 c 0.346182,-0.242476 0.469962,-0.930659 0.238016,-1.323312 -0.223761,-0.378797 -0.406688,-0.412951 -2.08381,-0.389068 -1.402798,0.01998 -1.526507,0.03164 -1.664903,0.157013 -0.484449,0.438854 -0.4373,1.333331 0.08218,1.559034 0.340491,0.147937 3.216465,0.14486 3.428518,-0.0037 z m -5.386246,-3.039286 c 0.219147,-0.334461 0.89766,-1.011539 1.304892,-1.302135 0.872855,-0.622856 1.797089,-0.908701 2.938135,-0.908701 h 0.679724 l 0.01876,-9.508475 0.01876,-9.508474 0.224384,-0.644068 c 0.529212,-1.519035 1.40638,-2.558859 2.69087,-3.189847 0.992616,-0.487608 1.019351,-0.49089 4.254238,-0.522205 l 2.898305,-0.02806 -0.0013,-3.333336 c -7.46e-4,-1.845913 -0.03146,-3.541656 -0.06883,-3.800185 -0.216906,-1.500548 -1.355859,-2.902935 -2.796082,-3.442803 L 42.884746,9.8508475 31.427119,9.8317889 c -7.412733,-0.01233 -11.661069,0.00512 -12.033898,0.04943 -1.570077,0.1866001 -2.997951,1.5191011 -3.431966,3.2027331 -0.09267,0.359487 -0.115489,0.994354 -0.142707,3.970285 l -0.0324,3.542373 h 2.578291 c 2.668712,0 3.336394,0.04642 4.045729,0.281271 0.842199,0.27884 1.872893,1.045963 2.43329,1.811045 0.289587,0.395359 0.604922,1.014402 0.841303,1.651589 l 0.183034,0.493383 0.01853,9.576271 0.01853,9.576272 0.693335,0.0012 c 1.492866,0.0025 2.556358,0.443295 3.625403,1.502535 0.232977,0.230839 0.492299,0.520628 0.576271,0.643975 0.182471,0.268031 0.207686,0.272647 0.344954,0.06315 z"
-     id="path32"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04334,-0.220339 h 4.986742 4.986743 l -0.04268,0.220339 c -0.232308,1.199152 -1.11619,2.096397 -2.313194,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
-     id="path34"
-     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/by.svg b/client/public/images/pieces/Ball/by.svg
deleted file mode 100644 (file)
index 0632479..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Layer_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 62 64"
-   xml:space="preserve"
-   sodipodi:docname="by.svg"
-   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
-     id="defs28" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="960"
-     inkscape:window-height="1060"
-     id="namedview26"
-     showgrid="false"
-     inkscape:zoom="14.75"
-     inkscape:cx="32.355932"
-     inkscape:cy="32"
-     inkscape:window-x="0"
-     inkscape:window-y="20"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="Layer_1" /><g
-     id="wildebeest__x5F_glyphs"
-     transform="matrix(0.8425369,0,0,0.89830508,4.8813559,3.5254237)"><path
-       d="m 25,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path2"
-       inkscape:connector-curvature="0" /><path
-       d="m 34,49 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 3 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path4"
-       inkscape:connector-curvature="0" /><path
-       d="M 11,36 V 24.7 c -0.1,0.2 -0.2,0.3 -0.4,0.5 -1.3,1.4 -3.1,2.3 -5,2.4 H 5 V 42.5 C 5,43.8 3.9,45 2.5,45 1.1,45 0,43.4 0,42 v 2.5 c 0,3.6 3,6.9 9,6.5 6.9,-0.5 7,-4.4 7,-6.4 C 12.9,43.2 11,39 11,36 Z"
-       id="path6"
-       inkscape:connector-curvature="0" /><path
-       d="M 11,12 C 11,8.1 14.1,5 18,5 H 28.8 C 26.6,2 22.9,0 17.5,0 10.6,0 5,5.6 5,12.5 V 19 h 6 z"
-       id="path8"
-       inkscape:connector-curvature="0" /><path
-       d="M 5.5,25.6 C 6.9,25.5 8.2,24.9 9.1,23.9 9.8,23 10.3,22 10.4,21 H 0.2 c 0.3,1.1 0.8,2.1 1.6,3 1.1,1.1 2.4,1.6 3.7,1.6 z"
-       id="path10"
-       inkscape:connector-curvature="0" /><path
-       d="m 51,12 v 7 h 6 V 12.5 C 57,5.6 51.4,0 44.5,0 39.1,0 35.5,2 33.2,5 H 44 c 3.9,0 7,3.1 7,7 z"
-       id="path12"
-       inkscape:connector-curvature="0" /><path
-       d="m 61.8,43 c -0.5,1.6 -2.3,2.9 -4,1.2 C 57.3,43.6 57,42.8 57,42 V 27.6 h -0.6 c -1.9,-0.1 -3.7,-1 -5,-2.4 C 51.3,25 51.1,24.9 51,24.7 V 36 c 0,3 -1.9,7.2 -5,8.6 0,2 0.1,5.9 7,6.4 6,0.4 9,-2.9 9,-6.5 V 43 Z"
-       id="path14"
-       inkscape:connector-curvature="0" /><path
-       d="m 52.9,23.8 c 0.9,1 2.2,1.7 3.6,1.7 1.3,0.1 2.6,-0.5 3.7,-1.6 0.8,-0.8 1.4,-1.9 1.6,-3 H 51.6 c 0.1,1.1 0.6,2.1 1.3,2.9 z"
-       id="path16"
-       inkscape:connector-curvature="0" /><path
-       d="M 49,36 V 21 h -6 c -2.2,0 -4,1.8 -4,4 V 52.6 L 37.4,57 h -13 L 23,53.6 V 25 c 0,-2.2 -1.8,-4 -4,-4 h -6 v 15 c 0,2.2 1.5,5.4 3.5,6.6 l 6.4,16.1 c 0.1,3 2.7,5.3 6.1,5.3 h 4 c 3.3,0 5.8,-2.2 5.9,-5.3 L 44.8,42.9 C 47.1,42.2 49,38.5 49,36 Z M 18,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z m 15,33 h -4 c -1.9,0 -3.8,-1 -4.1,-3 h 11.9 c -0.2,1.8 -1.7,3 -3.8,3 z M 44,29 c -1.1,0 -2,-0.9 -2,-2 0,-1.1 0.9,-2 2,-2 1.1,0 2,0.9 2,2 0,1.1 -0.9,2 -2,2 z"
-       id="path18"
-       inkscape:connector-curvature="0" /><path
-       d="m 43,19 h 6 V 12 C 49,9.2 46.8,7 44,7 H 18 c -2.8,0 -5,2.2 -5,5 v 7 h 6 c 3.3,0 6,2.7 6,6 v 20 h 1 c 2.1,0 3.9,1.1 5,2.7 1.1,-1.6 2.9,-2.7 5,-2.7 h 1 V 25 c 0,-3.3 2.7,-6 6,-6 z m -7,-1 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z m 0,-4 h -9 c -0.6,0 -1,-0.4 -1,-1 0,-0.6 0.4,-1 1,-1 h 9 c 0.6,0 1,0.4 1,1 0,0.6 -0.4,1 -1,1 z"
-       id="path20"
-       inkscape:connector-curvature="0" /></g><metadata
-     id="metadata23"><rdf:RDF><rdf:Description
-         about="https://iconscout.com/legal#licenses"
-         dc:title="wildebeest"
-         dc:description="wildebeest"
-         dc:publisher="Iconscout"
-         dc:date="2017-09-07"
-         dc:format="image/svg+xml"
-         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 13.491525,20.338983 0.0678,6.847458"
-     id="path19"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 48.187753,26.162712 0.01564,-5.688136"
-     id="path25"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 18.361946,43.58983 1.027885,-0.945762"
-     id="path27"
-     inkscape:connector-curvature="0" /><path
-     style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="M 43.638053,43.58983 42.101695,42.644068"
-     id="path29"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     d="m 29.146419,8.0169491 4.141717,-0.016949"
-     id="path31"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 24.867298,53.155092 -0.592722,-1.543213 -0.001,-13.050007 C 24.272475,24.222465 24.2981,25.110056 23.860117,24.242416 23.588471,23.704287 22.95384,23.043279 22.45206,22.775833 21.704131,22.377189 21.535948,22.359322 18.531519,22.359322 H 15.8 v 6.937205 c 0,7.710287 -0.0076,7.562258 0.454296,8.889152 0.501435,1.440583 1.344891,2.753735 2.167872,3.375092 0.240157,0.181321 0.38019,0.346543 0.435341,0.513651 l 0.0813,0.246348 -0.480734,0.45032 c -0.360366,0.337566 -0.461348,0.469707 -0.403304,0.527751 0.172807,0.172807 -0.05907,0.05965 -0.451264,-0.220206 -1.534243,-1.094813 -2.792258,-3.308081 -3.308513,-5.820778 -0.04595,-0.223652 -0.09525,-2.500176 -0.132515,-6.118874 -0.03264,-3.169491 -0.07528,-6.838136 -0.09477,-8.152542 -0.02413,-1.627526 -0.013,-2.389831 0.03487,-2.389831 0.04759,0 0.07039,-1.08961 0.07057,-3.372881 3.01e-4,-3.725439 0.03389,-4.152349 0.408062,-5.186423 0.334943,-0.925661 0.748533,-1.563658 1.483325,-2.2881535 0.845975,-0.8341211 1.458229,-1.1934301 2.620984,-1.5381585 0.365354,-0.1083183 0.865304,-0.1213238 5.402611,-0.1405417 l 5,-0.021178 v 0.2397694 0.2397694 h 2.101695 2.101695 V 8.2889663 8.0491191 l 4.830508,0.021441 c 4.807637,0.021339 4.832904,0.022174 5.336362,0.1762589 2.003853,0.6132865 3.455555,2.111906 4.115101,4.248096 l 0.188389,0.61017 0.0228,3.677966 c 0.0158,2.549403 8.47e-4,3.677966 -0.04874,3.677966 -0.04906,0 -0.07154,0.905201 -0.07154,2.881356 0,1.948169 0.02282,2.881356 0.07045,2.881356 0.04835,0 0.06309,1.70686 0.04696,5.440678 -0.02274,5.267391 -0.02806,5.459225 -0.166815,6.023003 -0.60213,2.446463 -1.832709,4.461596 -3.356453,5.496351 -0.388655,0.26393 -0.569269,0.305906 -0.390759,0.09082 0.04791,-0.05773 0.07514,-0.115541 0.06051,-0.128458 -0.01463,-0.01292 -0.31644,-0.200153 -0.670678,-0.416077 -0.354237,-0.215925 -0.652413,-0.398557 -0.662613,-0.40585 -0.08478,-0.06062 0.130034,-0.257541 0.447446,-0.410175 0.515893,-0.248079 1.433235,-1.186602 1.862796,-1.905809 0.426687,-0.714393 0.832807,-1.662729 1.054531,-2.462444 l 0.178568,-0.644068 0.01903,-7.271187 0.01902,-7.271186 h -2.676391 c -1.691994,0 -2.808534,0.02756 -3.035661,0.07492 -1.299614,0.271018 -2.376616,1.387144 -2.668856,2.76581 -0.07928,0.374007 -0.09503,2.510552 -0.09598,13.023676 L 37.698367,50.8 l -0.661048,1.948359 -0.661046,1.948358 -5.458126,7.94e-4 -5.458126,7.93e-4 -0.592722,-1.543213 z m 4.188372,-4.03788 c 0.425642,-0.425642 0.376391,-1.133108 -0.10122,-1.453975 -0.232209,-0.156002 -0.256625,-0.157859 -1.812385,-0.137803 l -1.577007,0.02033 -0.213909,0.21404 c -0.39611,0.396352 -0.33955,1.183981 0.104465,1.454741 0.188499,0.114947 0.362661,0.127347 1.791844,0.127575 l 1.583051,2.72e-4 0.225161,-0.225162 z m 7.551407,0.05072 c 0.483075,-0.40648 0.385213,-1.32968 -0.165335,-1.559714 -0.174614,-0.07296 -0.57845,-0.09635 -1.663216,-0.09635 -1.578472,0 -1.766953,0.03818 -1.981505,0.401387 -0.142924,0.241951 -0.15019,0.758923 -0.01436,1.021594 0.205792,0.397959 0.252995,0.407528 2.01027,0.407528 h 1.606832 z m -5.317156,-3.145408 c 0.338848,-0.461603 1.016621,-1.069251 1.535689,-1.376801 0.72215,-0.427878 1.381867,-0.606219 2.379354,-0.643212 l 0.862591,-0.03199 0.01939,-9.432718 0.01939,-9.432718 0.152471,-0.53844 c 0.526973,-1.860974 1.854887,-3.248954 3.610094,-3.773392 0.483102,-0.144346 0.646116,-0.152945 3.408428,-0.179785 l 2.901061,-0.02819 -0.01971,-3.638403 -0.0197,-3.638402 -0.209172,-0.584255 C 45.421746,11.305103 44.369254,10.297888 42.986441,9.9074701 42.566804,9.7889915 41.995452,9.7830508 31.020339,9.7830508 c -10.806814,0 -11.5529,0.00747 -11.966102,0.1197817 -1.216023,0.3305305 -2.199539,1.1369585 -2.747866,2.2530995 -0.470031,0.956765 -0.464601,0.902856 -0.490054,4.864407 l -0.02298,3.576271 h 2.530533 c 1.391793,0 2.784059,0.03179 3.093925,0.07064 2.004124,0.251296 3.646929,1.704191 4.292613,3.796384 l 0.156114,0.505854 0.01896,9.508474 0.01896,9.508475 0.693544,0.0012 c 1.413937,0.0024 2.470363,0.417126 3.467954,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.167748,-0.15156 0.303725,-0.336798 z"
-     id="path33"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 19.543394,29.460558 c -0.314382,-0.100737 -0.792209,-0.542603 -0.953415,-0.881661 -0.351674,-0.739659 -0.224415,-1.483645 0.352369,-2.060046 0.394395,-0.394132 0.758086,-0.531845 1.273725,-0.482299 0.876608,0.08423 1.557822,0.984879 1.460853,1.931427 -0.111582,1.089196 -1.142234,1.810221 -2.133532,1.492579 z"
-     id="path35"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 41.32493,29.390654 c -0.641139,-0.306689 -0.997845,-0.877086 -1.00572,-1.608212 -0.0059,-0.551804 0.183568,-0.9751 0.6011,-1.342626 0.513583,-0.452074 1.122318,-0.538687 1.713943,-0.243868 1.546485,0.770646 1.124603,3.189951 -0.579989,3.325983 -0.314523,0.0251 -0.455456,-2.64e-4 -0.729334,-0.131277 z"
-     id="path37"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="M 24.865072,53.155932 24.27143,51.613559 24.271769,38.833898 C 24.271972,31.285773 24.245921,25.804967 24.208096,25.445317 24.15764,24.965571 24.092359,24.731798 23.900368,24.34333 23.445834,23.423642 22.617144,22.72204 21.70378,22.483612 21.319075,22.383186 20.881212,22.3666 18.525904,22.36323 l -2.731663,-0.0039 0.02137,7.20339 0.02137,7.20339 0.180495,0.659032 c 0.4734,1.728506 1.403635,3.34181 2.360242,4.093364 0.268196,0.210707 0.425819,0.392362 0.478217,0.551131 0.07785,0.23589 0.07635,0.238652 -0.378512,0.697028 -0.256442,0.258422 -0.436428,0.492955 -0.4105,0.534906 0.09592,0.1552 -0.09785,0.06428 -0.48789,-0.228911 -1.470737,-1.105572 -2.685996,-3.175369 -3.216212,-5.477769 -0.137754,-0.598177 -0.146403,-0.86584 -0.198762,-6.150815 -0.03011,-3.038983 -0.07392,-6.722882 -0.09737,-8.186441 -0.03064,-1.912456 -0.02169,-2.661017 0.03179,-2.661017 0.05302,0 0.07441,-0.96355 0.07441,-3.351026 0,-1.980065 0.02938,-3.567994 0.07182,-3.881356 0.0948,-0.700089 0.444206,-1.713942 0.81527,-2.365648 0.562489,-0.987908 1.615981,-1.9547486 2.649167,-2.4312685 1.071624,-0.4942481 0.757103,-0.4696861 6.345103,-0.4955089 l 5.033899,-0.023262 V 8.288677 8.5288135 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 4.976342,0 5.115067,0.00845 6.072929,0.3697394 1.133115,0.4273964 2.273128,1.40118 2.923735,2.4974153 0.190649,0.321231 0.465198,0.92872 0.610109,1.349976 l 0.263475,0.76592 0.02119,3.711865 c 0.01477,2.586496 -6.1e-4,3.711864 -0.05079,3.711864 -0.09927,0 -0.100739,5.639038 -0.0015,5.738283 0.048,0.048 0.063,1.798617 0.04702,5.488135 -0.02114,4.880629 -0.03526,5.467044 -0.142497,5.915959 -0.601974,2.520035 -1.83244,4.525859 -3.454352,5.631058 -0.324497,0.221118 -0.484248,0.241322 -0.317269,0.04012 0.04792,-0.05773 0.07514,-0.114004 0.06051,-0.125045 -0.01463,-0.01104 -0.31644,-0.198838 -0.670678,-0.417328 -0.354237,-0.218489 -0.652413,-0.402657 -0.662613,-0.409262 -0.08706,-0.05637 0.131355,-0.257471 0.447446,-0.411982 0.463813,-0.226721 1.281552,-1.024025 1.695704,-1.653332 0.371493,-0.564485 0.829086,-1.515759 1.051677,-2.186293 0.390243,-1.175579 0.383038,-1.012531 0.383038,-8.668654 v -7.043358 h -2.674629 c -1.70137,0 -2.805362,0.02742 -3.033898,0.07536 -1.182093,0.247955 -2.169605,1.195355 -2.606797,2.500911 -0.119037,0.355474 -0.12646,0.97106 -0.159008,13.186441 l -0.03414,12.813559 -0.644068,1.880804 -0.644068,1.880805 -5.458779,5.42e-4 -5.458779,5.43e-4 -0.593641,-1.542373 z m 4.14554,-3.98527 c 0.508146,-0.427576 0.410097,-1.323368 -0.171444,-1.566352 -0.301108,-0.125811 -3.027675,-0.130568 -3.274421,-0.0057 -0.424218,0.214657 -0.59548,0.828718 -0.366002,1.312305 0.192217,0.40507 0.2904,0.425739 2.036731,0.428756 l 1.57107,0.0027 z m 7.605477,-0.01473 c 0.534716,-0.479157 0.313205,-1.485457 -0.354561,-1.610731 -0.127374,-0.02389 -0.877715,-0.03354 -1.667425,-0.02144 l -1.435836,0.022 -0.213904,0.21404 c -0.396103,0.396356 -0.33954,1.183984 0.104472,1.454741 0.188419,0.114899 0.36249,0.127347 1.783994,0.127575 l 1.575202,2.72e-4 0.208058,-0.186441 z m -5.335064,-3.121289 c 0.131086,-0.178573 0.400633,-0.477482 0.598995,-0.664241 1.011678,-0.9525 2.10527,-1.383961 3.50782,-1.383961 h 0.679717 l 0.01988,-9.474577 0.01988,-9.474576 0.155657,-0.508474 c 0.480117,-1.568373 1.435989,-2.744737 2.757368,-3.393414 0.99295,-0.487448 1.019577,-0.490715 4.254237,-0.522028 l 2.898305,-0.02806 v -3.475033 c 0,-3.95017 -0.0077,-4.020371 -0.554797,-5.072002 C 45.07089,10.986504 43.94992,10.112105 42.86446,9.8903472 42.614961,9.8393752 38.978724,9.8169491 30.96345,9.8169491 c -12.726879,0 -11.855989,-0.028943 -12.788228,0.4249989 -0.64266,0.312935 -1.517726,1.202643 -1.849146,1.880086 -0.488407,0.998334 -0.480471,0.922037 -0.509517,4.898305 l -0.02612,3.576271 h 2.576148 c 1.473783,0 2.801315,0.03132 3.102349,0.07319 1.969563,0.273941 3.535747,1.662003 4.239475,3.757321 l 0.15939,0.474576 0.01853,9.542373 0.01853,9.542373 0.69333,0.0012 c 1.413712,0.0024 2.470202,0.417177 3.467739,1.361429 0.317271,0.300323 0.641412,0.650495 0.720312,0.778159 0.0789,0.127665 0.168878,0.232117 0.199949,0.232117 0.03107,0 0.163744,-0.146106 0.294829,-0.32468 z"
-     id="path39"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;fill-opacity:1;stroke-width:0.06779661"
-     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04335,-0.220339 h 4.986743 4.986743 l -0.04269,0.220339 c -0.232307,1.199152 -1.116189,2.096397 -2.313193,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
-     id="path41"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 19.529332,29.456525 c -0.388514,-0.123715 -0.918287,-0.694794 -1.044982,-1.126457 -0.135012,-0.460004 -0.135309,-0.634102 -0.0018,-1.083523 0.126794,-0.426962 0.549453,-0.918859 0.944614,-1.099358 1.10635,-0.50535 2.382318,0.527304 2.249807,1.820792 -0.112351,1.096702 -1.140404,1.809268 -2.147594,1.488546 z"
-     id="path28"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 41.4417,29.464608 c -0.12249,-0.04148 -0.356375,-0.193071 -0.519746,-0.336875 -0.830178,-0.730752 -0.825155,-1.963033 0.011,-2.699048 0.510112,-0.449018 1.104191,-0.530288 1.701298,-0.232737 1.551687,0.773238 1.125605,3.211848 -0.579989,3.319471 -0.214421,0.01353 -0.490075,-0.0093 -0.612564,-0.05081 z"
-     id="path30"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 24.880657,53.223729 -0.572182,-1.474576 -0.03411,-13.254238 -0.03411,-13.254237 -0.152962,-0.450843 c -0.414948,-1.223022 -1.479741,-2.166476 -2.661495,-2.358206 -0.251982,-0.04088 -1.546671,-0.0715 -3.035728,-0.0718 l -2.596365,-5.12e-4 0.02193,7.20339 0.02193,7.20339 0.178371,0.651832 c 0.477104,1.743505 1.383217,3.297466 2.409402,4.132064 0.220639,0.179446 0.383294,0.376331 0.431451,0.522247 0.07674,0.232533 0.07402,0.237514 -0.379375,0.694412 -0.256443,0.258422 -0.436428,0.492955 -0.410501,0.534906 0.09408,0.152219 -0.09365,0.06647 -0.479796,-0.21917 -1.505019,-1.11328 -2.738185,-3.245706 -3.259448,-5.636334 -0.08511,-0.390334 -0.113685,-1.396637 -0.157914,-5.561313 -0.0297,-2.79661 -0.07614,-6.475935 -0.103205,-8.176278 -0.03659,-2.298664 -0.02926,-3.103858 0.02856,-3.139594 0.05678,-0.03509 0.07777,-0.942388 0.07777,-3.36119 0,-3.518015 0.03141,-4.002372 0.318627,-4.913363 0.314677,-0.998089 0.716849,-1.677929 1.439925,-2.4340838 0.747044,-0.7812176 1.597603,-1.3113598 2.592049,-1.6155893 0.492613,-0.1507043 0.53985,-0.1521909 5.530755,-0.174055 l 5.033898,-0.022052 V 8.288677 8.5288136 h 2.101695 2.101695 V 8.2915254 8.0542373 h 4.604205 c 3.679858,0 4.704083,0.019178 5.101695,0.095524 2.239222,0.42996 3.981671,2.1383567 4.639205,4.5485437 0.12095,0.443341 0.128468,0.715531 0.114231,4.135593 -0.0084,2.01356 -0.03212,4.911865 -0.05275,6.440678 -0.02588,1.917763 -0.01495,2.822092 0.03524,2.916501 0.05058,0.09514 0.06619,1.789196 0.05122,5.559322 l -0.02153,5.422482 -0.209872,0.779661 c -0.625275,2.322853 -1.865617,4.293463 -3.300667,5.243975 -0.383614,0.254088 -0.560602,0.29 -0.384706,0.07806 0.04791,-0.05773 0.07514,-0.11383 0.06051,-0.124658 -0.01463,-0.01083 -0.31644,-0.196852 -0.670678,-0.413386 -0.354237,-0.216535 -0.652413,-0.400876 -0.662613,-0.409649 -0.06627,-0.05699 0.103367,-0.258403 0.281006,-0.333649 0.333065,-0.141082 0.995308,-0.671236 1.341954,-1.074291 0.948687,-1.103065 1.726992,-2.851277 1.885567,-4.235315 0.04136,-0.361024 0.06845,-3.298276 0.06878,-7.459899 l 5.56e-4,-6.864407 -2.593221,4.07e-4 c -1.426271,2.03e-4 -2.776271,0.03013 -3,0.06649 -0.5378,0.08738 -1.278339,0.459631 -1.679913,0.844448 -0.426032,0.408254 -0.828536,1.039993 -1.014485,1.592257 l -0.150023,0.445568 -0.01878,12.745763 -0.01878,12.745762 -0.659678,1.949153 -0.659678,1.949152 H 30.915582 25.45284 l -0.572183,-1.474576 z m 4.176258,-4.116827 c 0.28316,-0.300238 0.351448,-0.65617 0.198991,-1.037198 -0.199828,-0.499417 -0.276696,-0.52105 -1.93848,-0.54554 -1.606414,-0.02367 -1.840748,0.01675 -2.062963,0.355897 -0.176371,0.269174 -0.203228,0.719991 -0.06078,1.020182 0.193533,0.40784 0.329655,0.436465 2.089834,0.439476 l 1.551318,0.0027 0.222077,-0.235471 z m 7.47415,0.129661 c 0.346182,-0.242476 0.469962,-0.930659 0.238016,-1.323312 -0.223761,-0.378797 -0.406688,-0.412951 -2.08381,-0.389068 -1.402798,0.01998 -1.526507,0.03164 -1.664903,0.157013 -0.484449,0.438854 -0.4373,1.333331 0.08218,1.559034 0.340491,0.147937 3.216465,0.14486 3.428518,-0.0037 z m -5.386246,-3.039286 c 0.219147,-0.334461 0.89766,-1.011539 1.304892,-1.302135 0.872855,-0.622856 1.797089,-0.908701 2.938135,-0.908701 h 0.679724 l 0.01876,-9.508475 0.01876,-9.508474 0.224384,-0.644068 c 0.529212,-1.519035 1.40638,-2.558859 2.69087,-3.189847 0.992616,-0.487608 1.019351,-0.49089 4.254238,-0.522205 l 2.898305,-0.02806 -0.0013,-3.333336 c -7.46e-4,-1.845913 -0.03146,-3.541656 -0.06883,-3.800185 -0.216906,-1.500548 -1.355859,-2.902935 -2.796082,-3.442803 L 42.884746,9.8508475 31.427119,9.8317889 c -7.412733,-0.01233 -11.661069,0.00512 -12.033898,0.04943 -1.570077,0.1866001 -2.997951,1.5191011 -3.431966,3.2027331 -0.09267,0.359487 -0.115489,0.994354 -0.142707,3.970285 l -0.0324,3.542373 h 2.578291 c 2.668712,0 3.336394,0.04642 4.045729,0.281271 0.842199,0.27884 1.872893,1.045963 2.43329,1.811045 0.289587,0.395359 0.604922,1.014402 0.841303,1.651589 l 0.183034,0.493383 0.01853,9.576271 0.01853,9.576272 0.693335,0.0012 c 1.492866,0.0025 2.556358,0.443295 3.625403,1.502535 0.232977,0.230839 0.492299,0.520628 0.576271,0.643975 0.182471,0.268031 0.207686,0.272647 0.344954,0.06315 z"
-     id="path32"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#f9f9f9;fill-opacity:1;stroke-width:0.06779661"
-     d="m 28.327569,59.067597 c -0.951612,-0.230702 -1.739236,-0.830785 -2.115652,-1.611894 -0.128868,-0.267417 -0.25381,-0.585364 -0.27765,-0.70655 l -0.04334,-0.220339 h 4.986742 4.986743 l -0.04268,0.220339 c -0.232308,1.199152 -1.11619,2.096397 -2.313194,2.348163 -0.545438,0.114722 -4.683061,0.09099 -5.180959,-0.02972 z"
-     id="path34"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="m 30.624563,45.81302 c -0.644332,-0.788705 -1.520183,-1.386624 -2.48558,-1.696836 -0.307816,-0.09891 -0.700685,-0.152947 -1.303074,-0.179232 l -0.862396,-0.03763 -0.01896,-9.532713 -0.01896,-9.532712 -0.226779,-0.610169 C 25.148159,22.715241 24.218955,21.638383 22.966362,21.045485 22.011301,20.59342 21.902478,20.580608 18.726568,20.546318 l -2.870042,-0.03099 0.02518,-3.569531 0.02518,-3.56953 0.195122,-0.566253 c 0.437945,-1.270938 1.358541,-2.245263 2.579355,-2.729893 l 0.40678,-0.1614809 11.747202,-0.018432 c 12.993681,-0.020388 12.117285,-0.048132 12.99856,0.4114939 0.580598,0.30281 1.430354,1.17155 1.75084,1.789956 0.508037,0.980303 0.520347,1.097952 0.520347,4.973209 v 3.439622 l -2.864407,0.03169 c -2.702603,0.0299 -2.893024,0.04012 -3.371026,0.181072 -1.11397,0.328473 -2.149384,1.064344 -2.810411,1.997364 -0.378701,0.534525 -0.538274,0.85604 -0.804598,1.621138 l -0.217118,0.623738 -0.01951,9.465517 -0.01951,9.465518 -0.828062,0.03573 c -1.485183,0.06409 -2.508397,0.523905 -3.521008,1.582278 -0.176037,0.183991 -0.391825,0.431794 -0.47953,0.550671 l -0.15948,0.216145 z M 35.6698,19.599589 c 0.37757,-0.223036 0.512021,-0.817138 0.29055,-1.283855 -0.210957,-0.444558 -0.06822,-0.430988 -4.533231,-0.430988 -4.433017,0 -4.327142,-0.0094 -4.541225,0.40456 -0.131866,0.255 -0.132015,0.766101 -2.72e-4,1.020817 0.212228,0.410402 0.08885,0.399445 4.531061,0.402417 3.705602,0.0025 4.07431,-0.0073 4.253141,-0.112951 z m 0,-3.59322 c 0.37757,-0.223036 0.512021,-0.817138 0.29055,-1.283855 -0.210957,-0.444559 -0.06822,-0.430989 -4.533231,-0.430989 -4.433017,0 -4.327142,-0.0094 -4.541225,0.404561 -0.131866,0.255 -0.132015,0.766101 -2.72e-4,1.020816 0.212228,0.410403 0.08885,0.399446 4.531061,0.402417 3.705602,0.0025 4.07431,-0.0073 4.253141,-0.11295 z"
-     id="path3734"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="m 28.514503,60.930958 c -1.583316,-0.242351 -2.940251,-1.145069 -3.687796,-2.453351 -0.271133,-0.47451 -0.528636,-1.27161 -0.585755,-1.8132 -0.04252,-0.403196 -1.055151,-3.189642 -4.72433,-12.999946 l -0.133103,-0.355877 -0.337086,0.284235 -0.337086,0.284235 -0.318781,-0.318781 -0.318782,-0.318781 0.463424,-0.436859 c 0.435815,-0.410834 0.460538,-0.449998 0.414986,-0.657391 -0.03456,-0.15733 -0.221646,-0.384936 -0.652815,-0.794186 C 17.224399,40.332624 16.53643,39.085517 16.0173,37.21787 15.924,36.882215 15.907586,35.927468 15.886847,29.630508 l -0.02372,-7.203389 h 2.699958 c 2.207,0 2.772807,0.01897 3.098956,0.103926 1.273382,0.331673 2.308975,1.507721 2.475575,2.811328 0.03937,0.308046 0.06581,5.590552 0.06707,13.401378 l 0.0021,12.892903 0.601417,1.547774 0.601419,1.547775 h 5.507878 5.507878 l 0.670365,-1.961042 0.670365,-1.961043 0.0012,-12.344042 c 6.99e-4,-7.167851 0.02777,-12.596582 0.06456,-12.946292 0.148038,-1.407277 1.190737,-2.640355 2.535485,-2.99842 0.266132,-0.07086 0.981873,-0.09282 3.045138,-0.09344 l 2.69723,-8.04e-4 -0.02132,7.271186 -0.02132,7.271187 -0.179001,0.610169 c -0.604379,2.060177 -1.861018,3.862212 -3.037234,4.355428 -0.279671,0.117273 -0.244121,0.08584 -0.298859,0.264219 -0.03876,0.126299 0.04287,0.19908 0.63078,0.562429 l 0.675298,0.417357 -0.246514,0.395671 -0.246515,0.395671 -0.579129,-0.359324 c -0.388235,-0.240884 -0.593529,-0.333221 -0.622816,-0.280133 -0.02403,0.04355 -1.043572,2.931733 -2.265652,6.418174 -1.834529,5.233682 -2.237176,6.447134 -2.309212,6.959237 -0.109377,0.777578 -0.300361,1.357087 -0.633456,1.922118 -0.638071,1.082365 -1.643706,1.838325 -2.907036,2.18529 -0.472906,0.129881 -0.723331,0.144048 -2.824007,0.159769 -1.267797,0.0095 -2.486949,-0.01059 -2.709226,-0.04461 z m 4.994024,-1.765201 c 0.868195,-0.181051 1.697979,-0.781462 2.055751,-1.487492 0.188934,-0.372844 0.388054,-1.067519 0.331992,-1.158229 -0.02017,-0.03263 -2.277631,-0.05902 -5.049424,-0.05902 -4.456645,0 -5.012948,0.01152 -5.012948,0.103834 0,0.183179 0.271099,0.915704 0.433998,1.172689 0.390754,0.616441 1.254516,1.202657 2.059673,1.397854 0.495715,0.120178 4.633973,0.14443 5.180958,0.03036 z M 20.797623,29.420028 c 0.552567,-0.281898 0.968479,-0.984895 0.968479,-1.636977 0,-0.71115 -0.458348,-1.418982 -1.096651,-1.693573 -0.713765,-0.307053 -1.547441,-0.04515 -2.000378,0.628427 -0.84433,1.255632 0.03534,2.966648 1.474818,2.868625 0.207784,-0.01415 0.501964,-0.08907 0.653732,-0.166502 z m 21.901696,-0.0017 c 0.352182,-0.17967 0.726344,-0.619745 0.859713,-1.011162 0.423948,-1.244221 -0.530105,-2.561917 -1.762795,-2.434692 -0.916164,0.09456 -1.533625,0.825865 -1.533625,1.816394 0,0.567213 0.164016,0.963492 0.556381,1.344268 0.494409,0.479809 1.268661,0.59724 1.880326,0.285192 z"
-     id="path3736"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="M 10.452241,49.26674 C 9.6527692,49.173991 8.9059843,48.949371 8.1050848,48.560755 6.8656542,47.959353 6.1001422,47.215759 5.5246854,46.054237 5.0606077,45.117527 4.9491477,44.581969 4.9109098,43.105085 l -0.032473,-1.254238 0.1279689,0.338984 c 0.2043449,0.541298 0.3466223,0.778741 0.6805341,1.135719 0.4482888,0.479257 0.754104,0.622558 1.3333995,0.624813 0.8299278,0.0032 1.4795324,-0.447352 1.8880508,-1.3096 l 0.2136441,-0.450932 0.019359,-6.922387 0.019359,-6.922386 0.6247088,-0.0389 c 0.975663,-0.06076 1.987924,-0.437417 2.912844,-1.083853 l 0.389831,-0.272457 v -1.380007 c 0,-0.759004 -0.01167,-1.380007 -0.02594,-1.380007 -0.01426,0 -0.156307,0.200102 -0.31565,0.444671 -0.559097,0.858134 -1.57365,1.542434 -2.607568,1.758762 -0.6351027,0.132882 -0.9310848,0.12673 -1.5528077,-0.03228 C 7.5814134,26.104014 6.7063399,25.493875 6.1143479,24.637529 5.7252719,24.074711 5.3659415,23.345714 5.2002549,22.783051 L 5.0954441,22.427119 H 9.0578915 13.020339 V 21.477966 20.528814 H 11.083952 9.1475661 l 0.027214,-3.711865 c 0.025317,-3.453082 0.037108,-3.757657 0.1691219,-4.368695 0.959961,-4.4432621 4.057484,-7.7158697 8.210025,-8.6740897 0.763101,-0.1760892 2.613485,-0.2429101 3.678332,-0.1328315 1.981719,0.2048603 3.750204,0.8071568 5.208214,1.7737719 0.933643,0.6189766 1.639395,1.2817422 2.431051,2.2829774 l 0.224066,0.2833847 -5.003727,0.021665 c -5.601582,0.024253 -5.301187,-5.424e-4 -6.451811,0.5324806 -1.717118,0.7954443 -2.872613,2.2767766 -3.379265,4.3321846 -0.09072,0.368036 -0.113212,1.035784 -0.136445,4.050847 -0.01933,2.508803 -0.05002,3.61017 -0.100589,3.61017 -0.05141,0 -0.05862,0.771269 -0.02459,2.627118 0.0265,1.444915 0.07166,5.128814 0.100355,8.186441 0.04991,5.318844 0.05841,5.587182 0.196375,6.20339 0.576164,2.573315 1.927827,4.782318 3.531732,5.771853 l 0.479684,0.295943 6.1e-4,0.495488 c 0.0026,2.18039 -1.014758,3.773846 -2.905475,4.550958 -1.35118,0.555355 -3.316591,0.796252 -4.950178,0.606735 z"
-     id="path3738"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="m 49.359322,49.301913 c -0.798915,-0.09548 -1.664473,-0.269084 -2.177463,-0.436721 -2.278198,-0.744481 -3.356047,-2.144547 -3.488117,-4.530871 l -0.03989,-0.720762 0.425703,-0.237288 c 0.526989,-0.293746 1.479956,-1.219478 1.954149,-1.898305 0.665696,-0.952971 1.22202,-2.189184 1.577891,-3.50625 l 0.215845,-0.798835 0.02349,-5.508474 c 0.01626,-3.813322 0.0016,-5.508475 -0.04762,-5.508475 -0.04848,0 -0.07111,-0.895571 -0.07111,-2.813559 0,-1.938738 0.02237,-2.813559 0.07195,-2.813559 0.05016,0 0.06453,-1.134299 0.04744,-3.745763 L 47.827079,13.037288 47.6045,12.359322 C 46.952012,10.371873 45.606214,8.9241098 43.849443,8.319763 42.904348,7.9946405 42.665228,7.9820747 37.8,8.0018635 l -4.542373,0.018475 0.02129,0.220339 0.02129,0.2203389 H 31.228066 29.155932 V 8.0302872 7.5995574 l 0.518704,-0.043846 c 0.285287,-0.024116 1.201514,-0.043846 2.03606,-0.043846 h 1.517356 l 0.727876,-0.7288136 c 2.171957,-2.1747557 4.838837,-3.2009367 8.32365,-3.2028335 2.316076,-0.00126 4.213912,0.6238318 6.130592,2.0192408 0.682351,0.4967757 1.760772,1.6070289 2.322789,2.3913531 0.836163,1.1669093 1.554607,2.8065618 1.869585,4.2668158 0.236007,1.094146 0.282202,1.938753 0.282202,5.159726 v 3.111461 h -2.101695 -2.101695 v 0.915254 0.915254 h 4.101695 c 3.359746,0 4.101695,0.01625 4.101695,0.08982 0,0.0494 -0.07612,0.313606 -0.169143,0.587121 -0.502155,1.476395 -1.659845,2.713775 -2.992372,3.198351 -0.526753,0.191553 -1.5705,0.206283 -2.160519,0.03049 -1.115426,-0.332337 -2.034774,-1.122161 -2.691802,-2.312561 l -0.187098,-0.338983 -0.0012,1.271187 -0.0012,1.271186 -0.288136,0.0023 -0.288135,0.0023 0.450397,0.430988 c 1.117695,1.069528 2.597699,1.732198 3.871637,1.73352 l 0.457627,4.69e-4 v 6.663722 c 0,7.335896 -0.01577,7.04171 0.421369,7.861862 0.434298,0.814827 1.318418,1.274622 2.064575,1.073703 0.618854,-0.16664 1.297861,-0.842517 1.518717,-1.511716 0.16922,-0.512741 0.21634,-0.274769 0.180667,0.912429 -0.03642,1.211895 -0.103404,1.591824 -0.417991,2.370663 -0.27869,0.689968 -0.597267,1.153265 -1.224964,1.781427 -0.890029,0.890689 -1.918901,1.419763 -3.30556,1.699809 -0.484364,0.09782 -2.300731,0.179748 -2.762237,0.12459 z"
-     id="path3740"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="m 33.116624,49.19698 c -0.517167,-0.250947 -0.462355,-1.345902 0.07765,-1.551212 0.09563,-0.03636 0.820193,-0.06566 1.610139,-0.06511 1.539976,0.0011 1.653506,0.0221 1.898143,0.351652 0.248685,0.335 0.117405,1.091437 -0.220836,1.272458 -0.171397,0.09173 -3.174328,0.08478 -3.365097,-0.0078 z"
-     id="path3742"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#aa0000;fill-opacity:1;stroke-width:0.06779661"
-     d="m 25.386441,49.044068 c -0.196047,-0.196047 -0.230509,-0.277637 -0.230509,-0.54574 0,-0.173377 0.04628,-0.404725 0.102843,-0.514107 0.189825,-0.367081 0.361343,-0.40456 1.851418,-0.40456 1.545903,0 1.709615,0.02135 1.941435,0.253169 0.327,0.327 0.286747,1.017209 -0.07596,1.302516 -0.167122,0.131458 -0.265807,0.13923 -1.76786,0.13923 h -1.590857 z"
-     id="path3744"
-     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/wd.svg b/client/public/images/pieces/Ball/wd.svg
new file mode 100644 (file)
index 0000000..d10a14f
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg6"
+   sodipodi:docname="wd.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview8"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1058.7119"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6" />
+  <path
+     style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero"
+     d="m 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-49 8,-96 -2,-36 -34,-36 -37,0 -33,36 3,132 -94,226 -76,-80 -82,-186 -2,-35 -36,-31 -32,1 -32,37 0,0 2,8 -41,-13 -86,-37 -29,-20 -47,10 -18,30 16,47 43,22 65,33 -86,88 -196,142 12,-139 76,-263 17,-26 -8,-46 -28,-22 -47,7 -7,10 -20,36 -21,-21 -28,-31 -7,-9 -24,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,57 43,57 25,0 27,-28 0,-6 -16,-50 -9,-20 -24,-42 -19,-26 -17,-22 16,-57 53,-20 11,11 25,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,45 71,111 13,37 10,91 -9,34 34,34 32,0 36,-33 0,-113 -64,-206 21,-64 11,-140 -9,-61 -42,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z"
+     display="block"
+     id="path2"
+     inkscape:connector-curvature="0" />
+  <path
+     style="color:#000000;display:block;fill:#000000;fill-rule:nonzero"
+     d="m 697,1319 q 13,-20 10,-42 -10,-64 -71,-54 -18,3 -29,12 -4,-5 -12,-22 -11,-32 -42,-22 -31,12 -24,45 45,115 163,158 34,10 45,-20 12,-32 -18,-44 -6,-3 -11,-5 -5,-2 -11,-6 z M 400,842 q -29,-18 -35,-48 1,-33 -31,-36 -35,-4 -36,30 4,66 59,105 26,21 48,-4 22,-27 -5,-47 z m 679,815 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -37,-30 -81,-49 -212,-76 -307,-220 -7,-9 -45,-81 -20,-38 -34,-52 -19,-19 -55,-21 -56,-3 -87,54 -42,-12 -75,-10 -56,21 -81,45 -51,51 -66,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-49 8,-96 -2,-36 -34,-36 -37,0 -33,36 3,132 -94,226 -76,-80 -82,-186 -2,-35 -36,-31 -32,1 -32,37 0,0 2,8 -41,-13 -86,-37 -29,-20 -47,10 -18,30 16,47 43,22 65,33 -86,88 -196,142 12,-139 76,-263 17,-26 -8,-46 -28,-22 -47,7 -7,10 -20,36 -21,-21 -28,-31 -7,-9 -24,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,57 43,57 25,0 27,-28 0,-6 -16,-50 -9,-20 -24,-42 -19,-26 -17,-22 16,-57 53,-20 11,11 25,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,45 71,111 13,37 10,91 -9,34 34,34 32,0 36,-33 0,-113 -64,-206 21,-64 11,-140 -9,-61 -42,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z"
+     display="block"
+     id="path4"
+     inkscape:connector-curvature="0" />
+  <path
+     style="fill:#ffcc00;fill-opacity:1;stroke-width:8.67796612"
+     d="m 722.74458,280.6393 c 16.40726,109.4115 63.67577,182.6701 199.96743,309.9175 83.23649,77.713 104.10369,102.5993 129.91119,154.9325 38.7086,78.4943 53.3173,152.8139 42.3597,215.499 -7.3451,42.0189 -5.7974,51.4946 16.2498,99.4901 29.0323,63.2018 43.8935,142.6732 32.3551,173.0216 -6.0672,15.9577 -14.4923,21.2525 -33.8168,21.2525 -32.2052,0 -37.9061,-9.2458 -39.6909,-64.3713 -0.7855,-24.2568 -9.4727,-62.1541 -19.3051,-84.2163 C 1018.2276,1033.1343 978.35888,999.2764 852.82037,938.0551 701.93084,864.4709 624.80219,794.9675 554.20941,668.9661 506.59176,583.973 490.93259,567.6979 473.52368,585.1069 c -6.93497,6.9349 -1.83237,24.7258 18.68537,65.149 31.8715,62.792 32.79204,95.3592 2.8157,99.6156 -14.60744,2.0742 -23.42111,-4.3334 -34.71186,-25.2359 -8.32328,-15.4087 -25.37742,-39.895 -37.8981,-54.4138 -56.20367,-65.1735 -161.78391,-2.1435 -176.57684,105.4139 -8.3618,60.7976 10.55309,105.8294 105.67285,251.5819 102.82608,157.5609 123.8202,201.2119 124.04174,257.9078 0.18267,46.7461 30.82423,124.2095 62.51052,158.0299 l 17.97199,19.1823 16.79537,-21.3518 c 18.20256,-23.1408 40.68698,-27.4413 57.18992,-10.9383 15.47223,15.4722 13.27433,27.9693 -19.34645,110.002 -27.52833,69.2265 -54.37982,180.1677 -45.706,188.8416 5.77615,5.7761 128.94222,-79.1139 155.9892,-107.5128 l 24.11642,-25.3219 -35.49115,-16.0043 c -44.41077,-20.0264 -55.43387,-38.5441 -37.87079,-63.6189 16.49659,-23.5522 27.89964,-23.4312 78.03159,0.8278 l 40.34981,19.5254 13.0086,-19.5254 c 8.43604,-12.6622 21.72941,-19.5254 37.81868,-19.5254 20.06687,0 25.767,4.5624 29.81528,23.8644 17.49782,83.4285 25.29925,106.2769 48.89022,143.1864 14.49044,22.6712 29.64551,41.2204 33.67793,41.2204 13.11696,0 52.47762,-58.6544 69.59962,-103.716 9.1944,-24.1976 16.717,-62.6981 16.717,-85.5568 0,-47.5478 10.6948,-62.3882 44.9601,-62.3882 29.3042,0 37.8281,24.2325 30.4467,86.5564 -5.6719,47.891 -10.5631,47.0403 89.4746,15.561 145.9368,-45.9226 280.8633,-145.6645 363.2466,-268.5231 69.6749,-103.9064 133.4153,-263.4264 166.6274,-417.0104 20.2898,-93.8263 32.0005,-386.0828 21.5662,-538.2111 l -6.3985,-93.2881 H 1233.0542 716.56493 Z m -364.96444,484.428 c 7.50025,7.5002 13.63681,20.4873 13.63681,28.8602 0,8.3729 9.94031,24.5618 22.08958,35.9755 24.88653,23.3797 25.9875,57.3133 2.33977,72.1159 -31.07515,19.4519 -86.83428,-35.2232 -99.25463,-97.3249 -9.16803,-45.8402 29.76275,-71.0525 61.18847,-39.6267 z m 236.46459,439.7869 c 12.64983,15.6164 23.03712,18.9992 51.88393,16.8968 29.40919,-2.1434 38.62092,1.0166 49.8983,17.1173 7.60686,10.8603 13.83067,32.8953 13.83067,48.9665 0,19.4332 6.25147,34.2826 18.66417,44.3338 22.50576,18.2241 16.93304,57.2265 -9.36938,65.5746 -55.67266,17.6698 -191.53208,-102.0486 -191.53208,-168.7768 0,-44.2527 38.9045,-58.3327 66.62439,-24.1122 z"
+     id="path14"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/wh.svg b/client/public/images/pieces/Ball/wh.svg
new file mode 100644 (file)
index 0000000..eac3db5
--- /dev/null
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="100%"
+   width="100%"
+   version="1.1"
+   viewBox="0 0 2048 2048"
+   id="svg6"
+   sodipodi:docname="wh.svg"
+   inkscape:version="0.92.4 5da689c313, 2019-01-14">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs10" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="960"
+     inkscape:window-height="1060"
+     id="namedview8"
+     showgrid="false"
+     inkscape:zoom="0.11523438"
+     inkscape:cx="1041.3559"
+     inkscape:cy="1024"
+     inkscape:window-x="0"
+     inkscape:window-y="20"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg6" />
+  <path
+     style="color:#000000;display:block;fill:#ffffff;fill-rule:nonzero"
+     d="m 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-49 8,-96 -2,-36 -34,-36 -37,0 -33,36 3,132 -94,226 -76,-80 -82,-186 -2,-35 -36,-31 -32,1 -32,37 0,0 2,8 -41,-13 -86,-37 -29,-20 -47,10 -18,30 16,47 43,22 65,33 -86,88 -196,142 12,-139 76,-263 17,-26 -8,-46 -28,-22 -47,7 -7,10 -20,36 -21,-21 -28,-31 -7,-9 -24,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,57 43,57 25,0 27,-28 0,-6 -16,-50 -9,-20 -24,-42 -19,-26 -17,-22 16,-57 53,-20 11,11 25,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,45 71,111 13,37 10,91 -9,34 34,34 32,0 36,-33 0,-113 -64,-206 21,-64 11,-140 -9,-61 -42,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z"
+     display="block"
+     id="path2"
+     inkscape:connector-curvature="0" />
+  <path
+     style="color:#000000;display:block;fill:#000000;fill-rule:nonzero"
+     d="m 697,1319 q 13,-20 10,-42 -10,-64 -71,-54 -18,3 -29,12 -4,-5 -12,-22 -11,-32 -42,-22 -31,12 -24,45 45,115 163,158 34,10 45,-20 12,-32 -18,-44 -6,-3 -11,-5 -5,-2 -11,-6 z M 400,842 q -29,-18 -35,-48 1,-33 -31,-36 -35,-4 -36,30 4,66 59,105 26,21 48,-4 22,-27 -5,-47 z m 679,815 q 157,-10 291,-81 134,-71 228,-182 66,-78 124,-188 58,-110 94,-233 40,-143 50,-300 10,-157 11,-292 V 163 q 0,0 -155,0 -155,0 -404,0 H 647 q -9,0 -9,49 0,49 7,79 4,24 19,68 15,44 50,107 16,32 76,93 60,61 138,143 45,46 70,116 25,70 22,127 -37,-30 -81,-49 -212,-76 -307,-220 -7,-9 -45,-81 -20,-38 -34,-52 -19,-19 -55,-21 -56,-3 -87,54 -42,-12 -75,-10 -56,21 -81,45 -51,51 -66,102 -15,51 -16,110 0,84 104,222 122,159 130,242 0,36 7,81 6,31 25,60 13,20 17,27 4,7 17,23 9,12 15,18 6,6 15,18 11,13 28,30 -53,146 -43,301 199,-71 334,-223 33,113 130,183 80,-56 127,-148 z M 1756,234 q -1,0 2,54 3,54 3,118 1,125 0,258 -1,133 -36,267 -34,128 -75,218 -41,90 -89,157 -72,108 -196,183 -124,75 -259,98 9,-49 8,-96 -2,-36 -34,-36 -37,0 -33,36 3,132 -94,226 -76,-80 -82,-186 -2,-35 -36,-31 -32,1 -32,37 0,0 2,8 -41,-13 -86,-37 -29,-20 -47,10 -18,30 16,47 43,22 65,33 -86,88 -196,142 12,-139 76,-263 17,-26 -8,-46 -28,-22 -47,7 -7,10 -20,36 -21,-21 -28,-31 -7,-9 -24,-40 -17,-31 -26,-51 -9,-25 -8,-40 1,-15 3,-35 -9,-59 -40,-111 -31,-52 -81,-127 -47,-72 -72,-108 -25,-36 -38,-92 -9,-34 0,-82 9,-48 39,-76 46,-47 89,-43 14,0 37,11 23,11 37,42 26,57 43,57 25,0 27,-28 0,-6 -16,-50 -9,-20 -24,-42 -19,-26 -17,-22 16,-57 53,-20 11,11 25,41 14,30 44,81 35,59 75,96 40,37 71,60 18,13 44,30 26,17 70,35 35,14 77,34 42,20 76,53 46,45 71,111 13,37 10,91 -9,34 34,34 32,0 36,-33 0,-113 -64,-206 21,-64 11,-140 -9,-61 -42,-130 Q 1017,674 914,588 707,416 718,234 q 0,0 170,0 170,0 321,0 z"
+     display="block"
+     id="path4"
+     inkscape:connector-curvature="0" />
+</svg>
diff --git a/client/public/images/pieces/Ball/ww.svg b/client/public/images/pieces/Ball/ww.svg
deleted file mode 100644 (file)
index 561449c..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Layer_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 64 64"
-   xml:space="preserve"
-   sodipodi:docname="ww.svg"
-   inkscape:version="0.92.2 2405546, 2018-03-11"><defs
-     id="defs18" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="960"
-     inkscape:window-height="1200"
-     id="namedview16"
-     showgrid="false"
-     inkscape:zoom="3.6875"
-     inkscape:cx="33.084746"
-     inkscape:cy="32"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="Layer_1" /><g
-     id="wildebeest__x5F_line"
-     transform="matrix(0.86016949,0,0,0.89830508,4.0677966,3.2542373)"><path
-       d="m 63.2,42 c -0.5,-0.1 -0.9,0.2 -1.1,0.6 -0.4,1.2 -1.2,2.3 -1.6,2.3 -0.8,0 -1.5,-0.7 -1.5,-1.5 V 28.1 c 1,-0.4 1.9,-1 2.7,-1.8 C 63.1,24.9 63.9,22.9 64,21 64,20.7 63.9,20.5 63.7,20.3 63.5,20.1 63.3,20 63,20 H 59 V 13.5 C 59,6.1 52.9,0 45.5,0 37.9,0 34.2,3.7 32.4,7 H 31.6 C 29.8,3.7 26.1,0 18.5,0 11.1,0 5,6.1 5,13.5 V 20 H 1 C 0.7,20 0.5,20.1 0.3,20.3 0.1,20.5 0,20.8 0,21.1 0.1,23 1,24.9 2.3,26.4 3.1,27.2 4,27.8 5,28.1 V 43.4 C 5,44.3 4.3,45 3.5,45 3.2,45 2.4,43.9 1.9,42.7 1.7,42.2 1.3,42 0.8,42.1 0.3,42.1 0,42.5 0,43 v 2.5 c 0,2 0.8,3.9 2.3,5.2 C 3.4,51.8 5.5,53 9,53 h 1.1 C 18,52.4 18,47.6 18,45.5 v -0.6 c 0.1,0 0.2,0.1 0.3,0.1 L 24,59.2 c 0.1,2.9 2.4,4.8 6,4.8 h 4 c 3.6,0 5.9,-1.9 6,-4.8 l 5.7,-14.3 c 0.1,0 0.2,-0.1 0.3,-0.1 v 0.6 c 0,2.1 0,6.9 7.9,7.5 H 55 c 3.4,0 5.5,-1.2 6.7,-2.3 1.5,-1.4 2.3,-3.2 2.3,-5.2 V 43 c 0,-0.5 -0.3,-0.9 -0.8,-1 z m -9.1,9 C 48,50.5 48,47.5 48,45.5 V 44 43.8 c 1.9,-1.6 3,-4.6 3,-6.8 V 25.7 c 0.1,0.2 0.2,0.3 0.4,0.5 1.3,1.4 3.1,2.3 5,2.4 H 57 v 14.9 c 0,1.9 1.6,3.5 3.5,3.5 0.5,0 1,-0.2 1.4,-0.5 -0.2,1.1 -0.7,2 -1.5,2.8 -1.5,1.3 -3.6,1.9 -6.3,1.7 z M 35.2,61.9 C 34.8,62 34.5,62 34.3,62 H 29.7 C 29.4,62 29.1,62 28.8,61.9 28,61.8 27.1,61.4 26.5,60.7 26.2,60.3 26,59.7 26,59 h 12 c 0,0.7 -0.2,1.3 -0.5,1.7 -0.6,0.7 -1.5,1.1 -2.3,1.2 z M 16,44 v 1.5 c 0,2 0,5.1 -6.1,5.5 C 7.2,51.2 5,50.6 3.6,49.3 2.8,48.5 2.3,47.6 2.1,46.5 2.5,46.8 3,47 3.5,47 5.4,47 7,45.4 7,43.5 V 28.6 h 0.6 c 1.9,-0.1 3.7,-1 5,-2.4 0.1,-0.2 0.3,-0.3 0.4,-0.5 V 37 c 0,2.2 1.2,5.1 3,6.8 z M 5,22 h 7.4 c -0.1,1 -0.6,2 -1.3,2.8 -0.9,1 -2.2,1.7 -3.6,1.7 H 7 C 6.7,26.5 6.3,26.4 6,26.3 5.7,26.2 5.3,26 5,25.8 4.6,25.5 4.2,25.2 3.8,24.8 3,24 2.4,22.9 2.2,21.8 H 5 Z M 7,13.5 C 7,7.2 12.2,2 18.5,2 23.4,2 27,3.7 29.3,7 H 19 c -3.3,0 -6,2.7 -6,6 v 7 H 7 Z M 45.5,2 C 51.8,2 57,7.2 57,13.5 V 20 H 51 V 13 C 51,9.7 48.3,7 45,7 H 34.7 C 37,3.7 40.6,2 45.5,2 Z M 59,25.9 c -0.3,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.2 -1,0.2 H 56.5 C 55.1,26.5 53.8,25.9 52.9,24.9 52.2,24 51.7,23 51.6,22 h 10.2 c -0.3,1.1 -0.8,2.1 -1.6,3 -0.4,0.3 -0.8,0.7 -1.2,0.9 z M 33.4,9 H 45 c 2.2,0 4,1.8 4,4 v 7 h -5 c -2.2,0 -4.1,1.2 -5.2,3 -0.5,0.9 -0.8,1.9 -0.8,3 v 20 h -1 c -2.1,0 -3.9,1.1 -5,2.7 C 30.9,47.1 29.1,46 27,46 H 26 V 26 c 0,-1.1 -0.3,-2.1 -0.8,-3 -1,-1.8 -3,-3 -5.2,-3 h -5 v -7 c 0,-2.2 1.8,-4 4,-4 z M 29,50 H 26.1 C 26,49.7 26,49.3 26,49 v -1 h 1 c 2.2,0 4,1.8 4,4 v 1 h -1 c -1,0 -1.9,-0.4 -2.6,-1 H 29 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z m 4,2 c 0,-2.2 1.8,-4 4,-4 h 1 v 1 c 0,0.3 -0.1,0.7 -0.1,1 H 35 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 1.6 C 35.9,52.6 35,53 34,53 H 33 Z M 17.6,42.4 C 16.2,41.4 15,38.9 15,37 V 22 h 5 c 2.2,0 4,1.8 4,4 v 23 c 0,1.2 0.4,2.4 1,3.3 1.1,1.6 2.9,2.7 5,2.7 h 1 v 2 H 25.3 L 25,56.3 19.9,43.6 C 19.8,43.2 19.4,43 19,43 18.5,43 18.1,42.8 17.6,42.4 Z M 44.1,43.6 39,56.3 38.7,57 H 33 v -2 h 1 c 2.1,0 3.9,-1.1 5,-2.7 0.6,-1 1,-2.1 1,-3.3 V 26 c 0,-2.2 1.8,-4 4,-4 h 5 v 15 c 0,1.9 -1.2,4.4 -2.6,5.4 -0.5,0.4 -0.9,0.6 -1.4,0.6 -0.4,0 -0.8,0.2 -0.9,0.6 z"
-       id="path2"
-       inkscape:connector-curvature="0" /><circle
-       cx="19"
-       cy="28"
-       r="2"
-       id="circle4" /><circle
-       cx="45"
-       cy="28"
-       r="2"
-       id="circle6" /><path
-       d="m 28,13 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 9 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path8"
-       inkscape:connector-curvature="0" /><path
-       d="m 37,17 h -9 c -0.2,0 -0.4,0.1 -0.6,0.2 C 27.2,17.4 27,17.7 27,18 v 0.2 c 0.1,0.5 0.5,0.8 1,0.8 h 9 c 0.1,0 0.2,0 0.3,-0.1 0.4,-0.1 0.7,-0.5 0.7,-0.9 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path10"
-       inkscape:connector-curvature="0" /></g><metadata
-     id="metadata13"><rdf:RDF><rdf:Description
-         about="https://iconscout.com/legal#licenses"
-         dc:title="wildebeest"
-         dc:description="wildebeest"
-         dc:publisher="Iconscout"
-         dc:date="2017-09-06"
-         dc:format="image/svg+xml"
-         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 10.093588,18.454237 c 0.0077,-3.714673 0.376945,-5.860183 1.348243,-7.833169 1.424016,-2.8925858 4.235339,-4.8812246 7.606113,-5.3803177 1.656005,-0.245196 4.701309,0.2872518 6.351287,1.1104732 C 26.686798,6.9936277 28.8,8.766749 28.8,9.2047016 c 0,0.1098421 -2.288136,0.2376181 -5.084746,0.2839463 -5.681624,0.094121 -5.960615,0.1792924 -7.593841,2.3182781 -0.726819,0.951891 -0.747278,1.078129 -0.832028,5.133633 l -0.08689,4.157746 h -2.557182 -2.557181 z"
-     id="path20"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 9.4355826,26.775344 C 8.4616968,26.492285 6.9801261,25.089083 6.5443628,24.037057 6.3651498,23.604399 6.2654554,23.2044 6.3228198,23.148171 c 0.057364,-0.05623 1.9042988,-0.03439 4.1042992,0.04853 2.856587,0.107666 4,0.244191 4,0.477606 0,0.591465 -1.206694,2.131732 -2.03482,2.597316 -1.104972,0.621232 -2.017524,0.776699 -2.9567164,0.503724 z"
-     id="path22"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 23.803073,48.827119 c -2.588428,-6.785887 -2.746436,-7.118644 -3.380245,-7.118644 -0.80888,0 -1.830981,-0.987584 -2.582115,-2.494915 l -0.70173,-1.408188 v -7.268787 -7.268788 h 2.74764 2.74764 l 0.913377,0.968461 0.913377,0.968462 v 10.791134 c 0,6.094542 0.118597,11.416495 0.272495,12.227996 0.472313,2.490496 2.221382,4.174016 4.676657,4.501389 1.197747,0.159702 1.288136,0.226389 1.288136,0.950376 v 0.778622 H 28.323901 25.949497 Z M 21.72947,29.604106 c 0.30913,-0.392996 0.562055,-0.925691 0.562055,-1.183767 0,-0.837595 -1.060709,-1.898305 -1.898305,-1.898305 -0.837595,0 -1.898305,1.06071 -1.898305,1.898305 0,0.258076 0.252925,0.790771 0.562056,1.183767 0.755229,0.960119 1.917269,0.960119 2.672499,0 z"
-     id="path24"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 30.606223,45.782668 c -0.765195,-0.743937 -2.301372,-1.362329 -3.384233,-1.362329 -0.561728,0 -0.56653,-0.072 -0.646503,-9.694915 l -0.08057,-9.694916 -0.743363,-1.264534 C 24.562004,21.742431 23.5116,21.258072 20.054239,21.138841 l -2.915254,-0.100535 v -3.508891 c 0,-3.849925 0.222059,-4.646423 1.545461,-5.543381 0.718027,-0.486655 1.423074,-0.514848 12.875229,-0.514848 11.826939,0 12.133851,0.01338 12.881358,0.561651 1.406088,1.031315 1.714012,2.062852 1.714481,5.743434 l 4.2e-4,3.322034 h -2.654403 c -3.221159,0 -4.612633,0.566538 -5.884343,2.395808 L 36.8,24.669581 l -0.07745,9.875379 -0.07745,9.875379 -0.600513,0.0016 c -1.161882,0.0029 -2.658754,0.578804 -3.558981,1.369212 -0.500359,0.439322 -0.95465,0.785603 -1.009536,0.769514 -0.05489,-0.01608 -0.446315,-0.366148 -0.869841,-0.77791 z m 5.90322,-25.652886 c 0.509563,-0.509563 0.542694,-0.97595 0.100726,-1.417918 -0.455568,-0.455568 -8.656296,-0.455568 -9.111864,0 -0.472022,0.472022 -0.398954,1.231917 0.149153,1.55116 0.261846,0.152511 2.258902,0.280112 4.455205,0.284662 3.264903,0.0068 4.057253,-0.06838 4.40678,-0.417904 z m 0.294687,-3.925847 c 0.378539,-1.19267 -0.171196,-1.342918 -4.913525,-1.342918 h -4.436204 l -0.16629,0.662553 c -0.09146,0.364404 -0.08658,0.791523 0.01084,0.949153 0.113111,0.18302 1.830892,0.286599 4.753017,0.286599 4.373459,0 4.583689,-0.02457 4.752163,-0.555387 z"
-     id="path26"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 48.011313,17.05317 C 47.919797,13.05838 47.908472,12.993571 47.101331,11.845839 45.629876,9.7534731 45.103972,9.5916979 39.271528,9.4372881 L 34.149835,9.3016949 35.339324,8.1069361 c 1.507181,-1.5138575 3.361928,-2.3691566 5.982963,-2.7589871 4.601839,-0.6844383 8.618738,1.4739868 10.638513,5.716458 0.805713,1.692372 0.842876,1.927739 0.931335,5.898305 l 0.09214,4.135593 H 50.54413 48.103986 Z"
-     id="path28"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 51.028069,26.454237 c -1.062276,-0.536169 -2.409652,-2.192245 -2.426998,-2.983051 -0.0025,-0.111864 1.887065,-0.203389 4.198929,-0.203389 2.311864,0 4.20339,0.06904 4.20339,0.153421 0,0.724978 -1.661574,2.683539 -2.766194,3.26062 -1.023364,0.53463 -1.809424,0.47888 -3.209127,-0.227601 z"
-     id="path30"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 49.681356,48.858546 c -1.611294,-0.307665 -2.465437,-0.733788 -3.240682,-1.616743 -0.747978,-0.8519 -0.826643,-1.116269 -0.82218,-2.763104 0.0043,-1.570257 0.116704,-1.986024 0.816451,-3.018728 1.399229,-2.065018 1.619292,-3.334736 1.619292,-9.342979 V 26.691747 L 48.8,27.406064 c 0.871301,0.834562 2.471159,1.556648 3.448917,1.556648 h 0.686676 v 6.942067 c 0,5.863432 0.06889,7.087232 0.443348,7.876352 0.502746,1.059459 1.581008,1.723954 2.797422,1.723954 0.978677,0 0.994576,0.07166 0.274428,1.236885 -0.971252,1.571518 -4.251927,2.597275 -6.769435,2.116576 z"
-     id="path32"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 28.257627,58.601701 c -0.716904,-0.262068 -1.627119,-1.243293 -1.627119,-1.754057 0,-0.461606 0.341385,-0.495102 5.045964,-0.495102 4.489843,0 5.027821,0.04728 4.881356,0.42896 -0.09053,0.235927 -0.164608,0.542806 -0.164608,0.681952 0,0.139146 -0.39661,0.494811 -0.881356,0.790366 -0.744456,0.453904 -1.344708,0.534205 -3.864406,0.516977 -1.640678,-0.01122 -3.166102,-0.08731 -3.389831,-0.169096 z"
-     id="path34"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 28.549335,50.404863 c -0.288636,-0.182676 -0.185827,-0.2673 0.40678,-0.334831 0.646935,-0.07372 0.809528,-0.234833 0.88255,-0.874505 0.112283,-0.983609 -0.283444,-1.240336 -1.920021,-1.245612 -1.192113,-0.0038 -1.288136,-0.05469 -1.288136,-0.682118 0,-0.591134 0.118902,-0.677966 0.928346,-0.677966 1.587164,0 3.129479,1.832733 3.137939,3.728813 0.0018,0.394373 -1.561395,0.457133 -2.147458,0.08622 z"
-     id="path36"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 32.679763,49.505248 c 0.205834,-1.534611 1.641624,-2.915417 3.031509,-2.915417 0.835886,0 0.953135,0.0834 0.953135,0.677966 0,0.62417 -0.09825,0.677966 -1.238167,0.677966 -1.460703,0 -2.287257,0.375846 -2.287257,1.04005 0,0.676849 0.535125,1.128746 1.342373,1.133594 0.546053,0.0033 0.605953,0.05945 0.284746,0.267034 -0.223729,0.144584 -0.819458,0.26475 -1.323843,0.267033 l -0.917063,0.0042 z"
-     id="path38"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 9.9525425,48.793515 C 8.6071711,48.438561 7.4519295,47.728962 6.8552783,46.891042 6.0647597,45.780861 6.1468422,45.505085 7.2677967,45.505085 c 0.7486873,0 1.1912116,-0.214941 1.8983051,-0.922034 l 0.9220342,-0.922034 v -7.349153 -7.349152 h 0.822269 c 1.069545,0 2.348849,-0.546949 3.448917,-1.474537 l 0.881356,-0.743168 v 5.684927 c 0,6.222343 0.132493,6.970583 1.61614,9.12699 0.665318,0.967007 0.824457,1.477007 0.824117,2.64109 -5.97e-4,2.008069 -0.658172,3.196688 -2.189083,3.95688 -1.350714,0.670712 -4.180936,0.997006 -5.5393095,0.638621 z"
-     id="path23"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 32.59661,53.686172 c 0,-0.739533 0.08316,-0.800211 1.321907,-0.964537 1.645288,-0.218253 3.284148,-1.359924 3.988171,-2.778255 0.48172,-0.970477 0.530516,-1.915837 0.656024,-12.709482 0.14434,-12.413236 0.132124,-12.305973 1.526383,-13.402697 0.615878,-0.48445 1.093395,-0.563404 3.407485,-0.563404 h 2.691232 l -0.08374,7.38983 c -0.08,7.059811 -0.110979,7.440805 -0.693741,8.531245 -0.725945,1.358359 -1.911046,2.519603 -2.571368,2.519603 -0.67206,0 -0.80848,0.279561 -3.308333,6.779661 l -2.242337,5.830508 -2.345843,0.07835 -2.345844,0.07836 z M 43.986441,29.776271 c 1.119952,-1.119952 0.319595,-3.254237 -1.220339,-3.254237 -0.372882,0 -0.922034,0.244068 -1.220339,0.542373 -1.119952,1.119952 -0.319596,3.254237 1.220339,3.254237 0.372881,0 0.922034,-0.244068 1.220339,-0.542373 z"
-     id="path25"
-     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
diff --git a/client/public/images/pieces/Ball/wy.svg b/client/public/images/pieces/Ball/wy.svg
deleted file mode 100644 (file)
index e86bfe4..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   version="1.1"
-   id="Layer_1"
-   x="0px"
-   y="0px"
-   viewBox="0 0 64 64"
-   xml:space="preserve"
-   sodipodi:docname="wy.svg"
-   inkscape:version="0.92.4 5da689c313, 2019-01-14"><defs
-     id="defs18" /><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="960"
-     inkscape:window-height="1060"
-     id="namedview16"
-     showgrid="false"
-     inkscape:zoom="10.429825"
-     inkscape:cx="33.627119"
-     inkscape:cy="32"
-     inkscape:window-x="0"
-     inkscape:window-y="20"
-     inkscape:window-maximized="0"
-     inkscape:current-layer="Layer_1" /><g
-     id="wildebeest__x5F_line"
-     transform="matrix(0.86016949,0,0,0.89830508,4.0677966,3.2542373)"><path
-       d="m 63.2,42 c -0.5,-0.1 -0.9,0.2 -1.1,0.6 -0.4,1.2 -1.2,2.3 -1.6,2.3 -0.8,0 -1.5,-0.7 -1.5,-1.5 V 28.1 c 1,-0.4 1.9,-1 2.7,-1.8 C 63.1,24.9 63.9,22.9 64,21 64,20.7 63.9,20.5 63.7,20.3 63.5,20.1 63.3,20 63,20 H 59 V 13.5 C 59,6.1 52.9,0 45.5,0 37.9,0 34.2,3.7 32.4,7 H 31.6 C 29.8,3.7 26.1,0 18.5,0 11.1,0 5,6.1 5,13.5 V 20 H 1 C 0.7,20 0.5,20.1 0.3,20.3 0.1,20.5 0,20.8 0,21.1 0.1,23 1,24.9 2.3,26.4 3.1,27.2 4,27.8 5,28.1 V 43.4 C 5,44.3 4.3,45 3.5,45 3.2,45 2.4,43.9 1.9,42.7 1.7,42.2 1.3,42 0.8,42.1 0.3,42.1 0,42.5 0,43 v 2.5 c 0,2 0.8,3.9 2.3,5.2 C 3.4,51.8 5.5,53 9,53 h 1.1 C 18,52.4 18,47.6 18,45.5 v -0.6 c 0.1,0 0.2,0.1 0.3,0.1 L 24,59.2 c 0.1,2.9 2.4,4.8 6,4.8 h 4 c 3.6,0 5.9,-1.9 6,-4.8 l 5.7,-14.3 c 0.1,0 0.2,-0.1 0.3,-0.1 v 0.6 c 0,2.1 0,6.9 7.9,7.5 H 55 c 3.4,0 5.5,-1.2 6.7,-2.3 1.5,-1.4 2.3,-3.2 2.3,-5.2 V 43 c 0,-0.5 -0.3,-0.9 -0.8,-1 z m -9.1,9 C 48,50.5 48,47.5 48,45.5 V 44 43.8 c 1.9,-1.6 3,-4.6 3,-6.8 V 25.7 c 0.1,0.2 0.2,0.3 0.4,0.5 1.3,1.4 3.1,2.3 5,2.4 H 57 v 14.9 c 0,1.9 1.6,3.5 3.5,3.5 0.5,0 1,-0.2 1.4,-0.5 -0.2,1.1 -0.7,2 -1.5,2.8 -1.5,1.3 -3.6,1.9 -6.3,1.7 z M 35.2,61.9 C 34.8,62 34.5,62 34.3,62 H 29.7 C 29.4,62 29.1,62 28.8,61.9 28,61.8 27.1,61.4 26.5,60.7 26.2,60.3 26,59.7 26,59 h 12 c 0,0.7 -0.2,1.3 -0.5,1.7 -0.6,0.7 -1.5,1.1 -2.3,1.2 z M 16,44 v 1.5 c 0,2 0,5.1 -6.1,5.5 C 7.2,51.2 5,50.6 3.6,49.3 2.8,48.5 2.3,47.6 2.1,46.5 2.5,46.8 3,47 3.5,47 5.4,47 7,45.4 7,43.5 V 28.6 h 0.6 c 1.9,-0.1 3.7,-1 5,-2.4 0.1,-0.2 0.3,-0.3 0.4,-0.5 V 37 c 0,2.2 1.2,5.1 3,6.8 z M 5,22 h 7.4 c -0.1,1 -0.6,2 -1.3,2.8 -0.9,1 -2.2,1.7 -3.6,1.7 H 7 C 6.7,26.5 6.3,26.4 6,26.3 5.7,26.2 5.3,26 5,25.8 4.6,25.5 4.2,25.2 3.8,24.8 3,24 2.4,22.9 2.2,21.8 H 5 Z M 7,13.5 C 7,7.2 12.2,2 18.5,2 23.4,2 27,3.7 29.3,7 H 19 c -3.3,0 -6,2.7 -6,6 v 7 H 7 Z M 45.5,2 C 51.8,2 57,7.2 57,13.5 V 20 H 51 V 13 C 51,9.7 48.3,7 45,7 H 34.7 C 37,3.7 40.6,2 45.5,2 Z M 59,25.9 c -0.3,0.2 -0.7,0.3 -1,0.5 -0.3,0.1 -0.7,0.2 -1,0.2 H 56.5 C 55.1,26.5 53.8,25.9 52.9,24.9 52.2,24 51.7,23 51.6,22 h 10.2 c -0.3,1.1 -0.8,2.1 -1.6,3 -0.4,0.3 -0.8,0.7 -1.2,0.9 z M 33.4,9 H 45 c 2.2,0 4,1.8 4,4 v 7 h -5 c -2.2,0 -4.1,1.2 -5.2,3 -0.5,0.9 -0.8,1.9 -0.8,3 v 20 h -1 c -2.1,0 -3.9,1.1 -5,2.7 C 30.9,47.1 29.1,46 27,46 H 26 V 26 c 0,-1.1 -0.3,-2.1 -0.8,-3 -1,-1.8 -3,-3 -5.2,-3 h -5 v -7 c 0,-2.2 1.8,-4 4,-4 z M 29,50 H 26.1 C 26,49.7 26,49.3 26,49 v -1 h 1 c 2.2,0 4,1.8 4,4 v 1 h -1 c -1,0 -1.9,-0.4 -2.6,-1 H 29 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z m 4,2 c 0,-2.2 1.8,-4 4,-4 h 1 v 1 c 0,0.3 -0.1,0.7 -0.1,1 H 35 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 1.6 C 35.9,52.6 35,53 34,53 H 33 Z M 17.6,42.4 C 16.2,41.4 15,38.9 15,37 V 22 h 5 c 2.2,0 4,1.8 4,4 v 23 c 0,1.2 0.4,2.4 1,3.3 1.1,1.6 2.9,2.7 5,2.7 h 1 v 2 H 25.3 L 25,56.3 19.9,43.6 C 19.8,43.2 19.4,43 19,43 18.5,43 18.1,42.8 17.6,42.4 Z M 44.1,43.6 39,56.3 38.7,57 H 33 v -2 h 1 c 2.1,0 3.9,-1.1 5,-2.7 0.6,-1 1,-2.1 1,-3.3 V 26 c 0,-2.2 1.8,-4 4,-4 h 5 v 15 c 0,1.9 -1.2,4.4 -2.6,5.4 -0.5,0.4 -0.9,0.6 -1.4,0.6 -0.4,0 -0.8,0.2 -0.9,0.6 z"
-       id="path2"
-       inkscape:connector-curvature="0" /><circle
-       cx="19"
-       cy="28"
-       r="2"
-       id="circle4" /><circle
-       cx="45"
-       cy="28"
-       r="2"
-       id="circle6" /><path
-       d="m 28,13 c -0.6,0 -1,0.4 -1,1 0,0.6 0.4,1 1,1 h 9 c 0.6,0 1,-0.4 1,-1 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path8"
-       inkscape:connector-curvature="0" /><path
-       d="m 37,17 h -9 c -0.2,0 -0.4,0.1 -0.6,0.2 C 27.2,17.4 27,17.7 27,18 v 0.2 c 0.1,0.5 0.5,0.8 1,0.8 h 9 c 0.1,0 0.2,0 0.3,-0.1 0.4,-0.1 0.7,-0.5 0.7,-0.9 0,-0.6 -0.4,-1 -1,-1 z"
-       id="path10"
-       inkscape:connector-curvature="0" /></g><metadata
-     id="metadata13"><rdf:RDF><rdf:Description
-         about="https://iconscout.com/legal#licenses"
-         dc:title="wildebeest"
-         dc:description="wildebeest"
-         dc:publisher="Iconscout"
-         dc:date="2017-09-06"
-         dc:format="image/svg+xml"
-         dc:language="en"><dc:creator><rdf:Bag><rdf:li>Madeby Grids</rdf:li></rdf:Bag></dc:creator></rdf:Description><cc:Work
-         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 10.093588,18.454237 c 0.0077,-3.714673 0.376945,-5.860183 1.348243,-7.833169 1.424016,-2.8925858 4.235339,-4.8812246 7.606113,-5.3803177 1.656005,-0.245196 4.701309,0.2872518 6.351287,1.1104732 C 26.686798,6.9936277 28.8,8.766749 28.8,9.2047016 c 0,0.1098421 -2.288136,0.2376181 -5.084746,0.2839463 -5.681624,0.094121 -5.960615,0.1792924 -7.593841,2.3182781 -0.726819,0.951891 -0.747278,1.078129 -0.832028,5.133633 l -0.08689,4.157746 h -2.557182 -2.557181 z"
-     id="path20"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 9.4355826,26.775344 C 8.4616968,26.492285 6.9801261,25.089083 6.5443628,24.037057 6.3651498,23.604399 6.2654554,23.2044 6.3228198,23.148171 c 0.057364,-0.05623 1.9042988,-0.03439 4.1042992,0.04853 2.856587,0.107666 4,0.244191 4,0.477606 0,0.591465 -1.206694,2.131732 -2.03482,2.597316 -1.104972,0.621232 -2.017524,0.776699 -2.9567164,0.503724 z"
-     id="path22"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 23.803073,48.827119 c -2.588428,-6.785887 -2.746436,-7.118644 -3.380245,-7.118644 -0.80888,0 -1.830981,-0.987584 -2.582115,-2.494915 l -0.70173,-1.408188 v -7.268787 -7.268788 h 2.74764 2.74764 l 0.913377,0.968461 0.913377,0.968462 v 10.791134 c 0,6.094542 0.118597,11.416495 0.272495,12.227996 0.472313,2.490496 2.221382,4.174016 4.676657,4.501389 1.197747,0.159702 1.288136,0.226389 1.288136,0.950376 v 0.778622 H 28.323901 25.949497 Z M 21.72947,29.604106 c 0.30913,-0.392996 0.562055,-0.925691 0.562055,-1.183767 0,-0.837595 -1.060709,-1.898305 -1.898305,-1.898305 -0.837595,0 -1.898305,1.06071 -1.898305,1.898305 0,0.258076 0.252925,0.790771 0.562056,1.183767 0.755229,0.960119 1.917269,0.960119 2.672499,0 z"
-     id="path24"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 30.606223,45.782668 c -0.765195,-0.743937 -2.301372,-1.362329 -3.384233,-1.362329 -0.561728,0 -0.56653,-0.072 -0.646503,-9.694915 l -0.08057,-9.694916 -0.743363,-1.264534 C 24.562004,21.742431 23.5116,21.258072 20.054239,21.138841 l -2.915254,-0.100535 v -3.508891 c 0,-3.849925 0.222059,-4.646423 1.545461,-5.543381 0.718027,-0.486655 1.423074,-0.514848 12.875229,-0.514848 11.826939,0 12.133851,0.01338 12.881358,0.561651 1.406088,1.031315 1.714012,2.062852 1.714481,5.743434 l 4.2e-4,3.322034 h -2.654403 c -3.221159,0 -4.612633,0.566538 -5.884343,2.395808 L 36.8,24.669581 l -0.07745,9.875379 -0.07745,9.875379 -0.600513,0.0016 c -1.161882,0.0029 -2.658754,0.578804 -3.558981,1.369212 -0.500359,0.439322 -0.95465,0.785603 -1.009536,0.769514 -0.05489,-0.01608 -0.446315,-0.366148 -0.869841,-0.77791 z m 5.90322,-25.652886 c 0.509563,-0.509563 0.542694,-0.97595 0.100726,-1.417918 -0.455568,-0.455568 -8.656296,-0.455568 -9.111864,0 -0.472022,0.472022 -0.398954,1.231917 0.149153,1.55116 0.261846,0.152511 2.258902,0.280112 4.455205,0.284662 3.264903,0.0068 4.057253,-0.06838 4.40678,-0.417904 z m 0.294687,-3.925847 c 0.378539,-1.19267 -0.171196,-1.342918 -4.913525,-1.342918 h -4.436204 l -0.16629,0.662553 c -0.09146,0.364404 -0.08658,0.791523 0.01084,0.949153 0.113111,0.18302 1.830892,0.286599 4.753017,0.286599 4.373459,0 4.583689,-0.02457 4.752163,-0.555387 z"
-     id="path26"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 48.011313,17.05317 C 47.919797,13.05838 47.908472,12.993571 47.101331,11.845839 45.629876,9.7534731 45.103972,9.5916979 39.271528,9.4372881 L 34.149835,9.3016949 35.339324,8.1069361 c 1.507181,-1.5138575 3.361928,-2.3691566 5.982963,-2.7589871 4.601839,-0.6844383 8.618738,1.4739868 10.638513,5.716458 0.805713,1.692372 0.842876,1.927739 0.931335,5.898305 l 0.09214,4.135593 H 50.54413 48.103986 Z"
-     id="path28"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 51.028069,26.454237 c -1.062276,-0.536169 -2.409652,-2.192245 -2.426998,-2.983051 -0.0025,-0.111864 1.887065,-0.203389 4.198929,-0.203389 2.311864,0 4.20339,0.06904 4.20339,0.153421 0,0.724978 -1.661574,2.683539 -2.766194,3.26062 -1.023364,0.53463 -1.809424,0.47888 -3.209127,-0.227601 z"
-     id="path30"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 49.681356,48.858546 c -1.611294,-0.307665 -2.465437,-0.733788 -3.240682,-1.616743 -0.747978,-0.8519 -0.826643,-1.116269 -0.82218,-2.763104 0.0043,-1.570257 0.116704,-1.986024 0.816451,-3.018728 1.399229,-2.065018 1.619292,-3.334736 1.619292,-9.342979 V 26.691747 L 48.8,27.406064 c 0.871301,0.834562 2.471159,1.556648 3.448917,1.556648 h 0.686676 v 6.942067 c 0,5.863432 0.06889,7.087232 0.443348,7.876352 0.502746,1.059459 1.581008,1.723954 2.797422,1.723954 0.978677,0 0.994576,0.07166 0.274428,1.236885 -0.971252,1.571518 -4.251927,2.597275 -6.769435,2.116576 z"
-     id="path32"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 28.257627,58.601701 c -0.716904,-0.262068 -1.627119,-1.243293 -1.627119,-1.754057 0,-0.461606 0.341385,-0.495102 5.045964,-0.495102 4.489843,0 5.027821,0.04728 4.881356,0.42896 -0.09053,0.235927 -0.164608,0.542806 -0.164608,0.681952 0,0.139146 -0.39661,0.494811 -0.881356,0.790366 -0.744456,0.453904 -1.344708,0.534205 -3.864406,0.516977 -1.640678,-0.01122 -3.166102,-0.08731 -3.389831,-0.169096 z"
-     id="path34"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 28.549335,50.404863 c -0.288636,-0.182676 -0.185827,-0.2673 0.40678,-0.334831 0.646935,-0.07372 0.809528,-0.234833 0.88255,-0.874505 0.112283,-0.983609 -0.283444,-1.240336 -1.920021,-1.245612 -1.192113,-0.0038 -1.288136,-0.05469 -1.288136,-0.682118 0,-0.591134 0.118902,-0.677966 0.928346,-0.677966 1.587164,0 3.129479,1.832733 3.137939,3.728813 0.0018,0.394373 -1.561395,0.457133 -2.147458,0.08622 z"
-     id="path36"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 32.679763,49.505248 c 0.205834,-1.534611 1.641624,-2.915417 3.031509,-2.915417 0.835886,0 0.953135,0.0834 0.953135,0.677966 0,0.62417 -0.09825,0.677966 -1.238167,0.677966 -1.460703,0 -2.287257,0.375846 -2.287257,1.04005 0,0.676849 0.535125,1.128746 1.342373,1.133594 0.546053,0.0033 0.605953,0.05945 0.284746,0.267034 -0.223729,0.144584 -0.819458,0.26475 -1.323843,0.267033 l -0.917063,0.0042 z"
-     id="path38"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="M 9.9525425,48.793515 C 8.6071711,48.438561 7.4519295,47.728962 6.8552783,46.891042 6.0647597,45.780861 6.1468422,45.505085 7.2677967,45.505085 c 0.7486873,0 1.1912116,-0.214941 1.8983051,-0.922034 l 0.9220342,-0.922034 v -7.349153 -7.349152 h 0.822269 c 1.069545,0 2.348849,-0.546949 3.448917,-1.474537 l 0.881356,-0.743168 v 5.684927 c 0,6.222343 0.132493,6.970583 1.61614,9.12699 0.665318,0.967007 0.824457,1.477007 0.824117,2.64109 -5.97e-4,2.008069 -0.658172,3.196688 -2.189083,3.95688 -1.350714,0.670712 -4.180936,0.997006 -5.5393095,0.638621 z"
-     id="path23"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffffff;stroke-width:0.27118644"
-     d="m 32.59661,53.686172 c 0,-0.739533 0.08316,-0.800211 1.321907,-0.964537 1.645288,-0.218253 3.284148,-1.359924 3.988171,-2.778255 0.48172,-0.970477 0.530516,-1.915837 0.656024,-12.709482 0.14434,-12.413236 0.132124,-12.305973 1.526383,-13.402697 0.615878,-0.48445 1.093395,-0.563404 3.407485,-0.563404 h 2.691232 l -0.08374,7.38983 c -0.08,7.059811 -0.110979,7.440805 -0.693741,8.531245 -0.725945,1.358359 -1.911046,2.519603 -2.571368,2.519603 -0.67206,0 -0.80848,0.279561 -3.308333,6.779661 l -2.242337,5.830508 -2.345843,0.07835 -2.345844,0.07836 z M 43.986441,29.776271 c 1.119952,-1.119952 0.319595,-3.254237 -1.220339,-3.254237 -0.372882,0 -0.922034,0.244068 -1.220339,0.542373 -1.119952,1.119952 -0.319596,3.254237 1.220339,3.254237 0.372881,0 0.922034,-0.244068 1.220339,-0.542373 z"
-     id="path25"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 30.874717,46.123997 c -1.03374,-1.067627 -2.226309,-1.583039 -3.662864,-1.583039 h -0.698947 l -0.0033,-9.084524 c -0.0038,-10.198247 0.0048,-10.050539 -0.658097,-11.388282 -0.643108,-1.297846 -1.75778,-2.240984 -3.173713,-2.68532 -0.424738,-0.133288 -1.027353,-0.17455 -3.097391,-0.212085 l -2.570057,-0.0466 0.02927,-3.560306 0.02927,-3.560306 0.250471,-0.527334 c 0.371809,-0.782795 0.952146,-1.380999 1.694108,-1.746266 l 0.640119,-0.31513 H 31.59247 43.531408 l 0.531709,0.249392 c 0.66235,0.310668 1.141054,0.725571 1.51293,1.311289 0.557568,0.878192 0.59203,1.158964 0.59203,4.823471 v 3.329163 l -2.56476,0.04074 c -2.301214,0.03655 -2.62951,0.06198 -3.194889,0.247478 -1.654155,0.542708 -3.041626,2.018701 -3.494033,3.716956 -0.130707,0.490651 -0.159122,1.842601 -0.209915,9.987565 l -0.05875,9.4201 h -0.68378 c -1.414165,0 -2.602016,0.514514 -3.68317,1.595353 -0.388271,0.388157 -0.711863,0.700296 -0.719092,0.693641 -0.0072,-0.0067 -0.315468,-0.324335 -0.684975,-0.705955 z m 5.352229,-25.851618 c 0.572639,-0.292851 0.724479,-1.015775 0.313693,-1.493525 l -0.231306,-0.269013 -3.867516,-0.0297 c -2.127133,-0.01634 -4.056122,-0.0021 -4.286641,0.03159 -0.567647,0.08301 -0.875239,0.418352 -0.875239,0.95419 0,0.399932 0.213275,0.713519 0.575273,0.84585 0.295596,0.108056 8.155735,0.07108 8.371736,-0.03939 z m 0.361779,-3.810586 c 0.22682,-0.280211 0.24817,-0.98937 0.03617,-1.201372 -0.306003,-0.306003 -0.854892,-0.344968 -4.866976,-0.345504 l -4.007302,-5.34e-4 -0.235339,0.235339 c -0.177281,0.17728 -0.235339,0.337592 -0.235339,0.649818 0,0.524923 0.202131,0.817348 0.60049,0.868733 0.170697,0.02202 2.15867,0.0355 4.417718,0.02995 l 4.107358,-0.01008 z"
-     id="path27"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 25.548757,53.625483 c -0.168814,-0.435051 -1.228183,-3.185576 -2.354154,-6.112279 -1.366829,-3.552759 -2.115095,-5.377043 -2.251447,-5.489067 -0.112325,-0.09228 -0.318098,-0.168735 -0.457272,-0.169893 -0.966158,-0.008 -2.228745,-1.285847 -2.939799,-2.975236 -0.517484,-1.229488 -0.521725,-1.301144 -0.523524,-8.845536 l -0.0017,-6.980993 2.516821,0.03581 c 1.584223,0.02254 2.641167,0.07771 2.852396,0.148875 0.785418,0.264627 1.778765,1.30454 2.120152,2.219538 0.101443,0.271894 0.137043,2.604464 0.177855,11.653643 l 0.05103,11.313708 0.249126,0.680936 c 0.803333,2.195753 2.740104,3.585675 4.996418,3.585675 h 0.746887 v 0.862909 0.86291 H 28.293634 25.855691 Z M 21.113803,30.068477 c 1.110697,-0.504266 1.387664,-1.949768 0.551025,-2.875828 -0.430831,-0.476878 -0.781455,-0.615004 -1.425557,-0.561591 -1.550745,0.1286 -2.125867,2.063118 -0.943339,3.173078 0.497095,0.46659 1.160058,0.562993 1.817871,0.264341 z"
-     id="path29"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="M 10.453192,48.978756 C 9.4055713,48.833876 8.1413031,48.303327 7.4128628,47.702885 6.9600178,47.329612 6.3418112,46.399068 6.1369846,45.782393 6.0480509,45.514638 5.994631,45.276223 6.0182737,45.25258 c 0.023643,-0.02364 0.1992347,0.0223 0.3902046,0.10209 0.4501725,0.188094 1.0669967,0.184306 1.6374185,-0.01006 0.6209049,-0.211563 1.5028134,-1.041278 1.7958139,-1.689533 l 0.2279663,-0.504367 0.02634,-7.051991 0.02634,-7.051992 0.840692,-0.106114 c 1.412841,-0.178334 2.774032,-0.867431 3.748275,-1.897549 l 0.48788,-0.515862 0.0016,4.668357 c 0.0021,6.410897 0.07673,7.143077 0.907116,8.904114 0.445307,0.944386 0.851255,1.590057 1.360828,2.164434 l 0.319226,0.359822 v 1.22854 c 0,1.979651 -0.232265,2.822847 -1.005188,3.649165 -0.934671,0.999238 -2.795499,1.559107 -5.083121,1.529363 -0.527334,-0.0069 -1.088226,-0.03037 -1.246426,-0.05225 z"
-     id="path31"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 10.117886,18.054416 c 1.49e-4,-1.700652 0.04786,-3.480403 0.106017,-3.955004 0.512906,-4.1853877 3.499503,-7.6568744 7.516085,-8.7363594 0.954164,-0.2564385 3.949677,-0.2564407 5.12952,-3.7e-6 2.100303,0.4564979 3.716478,1.3083121 5.056048,2.6648179 0.381458,0.3862802 0.827432,0.885696 0.991053,1.1098129 l 0.297494,0.4074853 -4.586511,7.287e-4 c -2.745578,4.314e-4 -4.835909,0.041187 -5.207864,0.1015333 -1.644274,0.2667646 -3.190652,1.597688 -3.83589,3.301438 -0.189667,0.500816 -0.227813,0.842082 -0.294717,2.63667 -0.04227,1.133768 -0.07979,2.848801 -0.08339,3.811185 l -0.0065,1.74979 h -2.54079 -2.540791 z"
-     id="path33"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="M 9.4464639,26.910823 C 8.6578182,26.652423 7.6407032,25.870717 7.0162931,25.043112 6.5609519,24.439593 6.3471959,24.026068 6.1543867,23.375694 L 6.0051598,22.87233 h 1.1453787 c 0.6996666,0 1.1453788,0.03731 1.1453788,0.09588 0,0.062 1.1311696,0.09588 3.2017507,0.09588 h 3.201751 l -0.08824,0.407485 c -0.272793,1.259692 -1.355771,2.605387 -2.544794,3.16213 -0.561154,0.262752 -0.777359,0.309922 -1.517311,0.331036 -0.4746,0.01354 -0.9707736,-0.01072 -1.1026071,-0.05392 z"
-     id="path35"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 47.988111,17.814719 c -0.0019,-3.736295 -0.05328,-4.181005 -0.62177,-5.378082 C 46.921491,11.49991 45.905916,10.467423 45.01753,10.048711 44.046963,9.5912669 43.450017,9.545165 38.497413,9.545165 h -4.517869 l 0.315477,-0.4392939 c 1.364129,-1.8995169 3.624924,-3.2674577 6.264141,-3.7902496 1.05758,-0.2094917 4.04021,-0.180432 4.889823,0.047641 3.673351,0.9860881 6.43584,3.8887035 7.356276,7.7294215 0.173444,0.72373 0.200254,1.220182 0.239475,4.434398 l 0.04417,3.619428 H 50.539342 47.98978 l -0.0017,-3.331791 z"
-     id="path37"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 51.824931,26.960603 c -1.228558,-0.334454 -2.23299,-1.178996 -2.809713,-2.362453 -0.192736,-0.3955 -0.389857,-0.90246 -0.438047,-1.126577 l -0.08762,-0.407485 h 4.351474 4.351473 l -0.242733,0.647182 c -0.546417,1.456871 -1.363807,2.377035 -2.674853,3.011178 -0.65506,0.316846 -0.850106,0.367645 -1.390244,0.362082 -0.345557,-0.0036 -0.822439,-0.05933 -1.05974,-0.123927 z"
-     id="path39"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 32.457396,53.553573 v -0.862909 h 0.746888 c 1.449484,0 2.649797,-0.500482 3.686387,-1.537071 0.736256,-0.736256 1.269197,-1.72265 1.432117,-2.65063 0.06026,-0.343216 0.123028,-4.824589 0.162938,-11.632316 0.06264,-10.684273 0.07151,-11.09016 0.252192,-11.53287 0.265127,-0.649622 0.790928,-1.311244 1.329998,-1.673552 0.805419,-0.541322 1.174748,-0.600137 3.76853,-0.600137 h 2.331631 l -0.0014,6.975189 c -0.0015,7.541531 0.002,7.483337 -0.529444,8.825529 -0.652396,1.647793 -1.961273,2.981342 -2.934127,2.989438 -0.139174,0.0012 -0.342167,0.07761 -0.451094,0.169893 -0.224971,0.190596 -0.122739,-0.06098 -2.815032,6.92725 -1.107229,2.87397 -2.034995,5.279331 -2.061701,5.345248 -0.03705,0.09146 -0.625306,0.119848 -2.483212,0.119848 H 32.457396 Z M 43.30624,30.156691 c 0.421703,-0.117131 0.970487,-0.69449 1.13557,-1.194698 0.226103,-0.685096 -0.06147,-1.593193 -0.645633,-2.038752 -0.462276,-0.352596 -1.274888,-0.411629 -1.822258,-0.132382 -1.31678,0.671771 -1.246766,2.665207 0.115339,3.283925 0.442978,0.201217 0.720248,0.219878 1.216982,0.08191 z"
-     id="path41"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 49.874704,48.947941 c -1.62438,-0.254414 -2.847813,-0.78581 -3.528712,-1.532692 -0.714994,-0.784279 -0.944946,-1.641793 -0.944946,-3.523791 v -1.189555 l 0.419697,-0.494686 c 0.900468,-1.061359 1.50766,-2.258013 1.905099,-3.754568 0.194192,-0.73123 0.20537,-1.025763 0.239494,-6.310295 l 0.03579,-5.543264 0.648216,0.605501 c 1.120372,1.046545 2.359393,1.633234 3.71809,1.760554 l 0.69917,0.06552 0.02634,7.060026 0.02634,7.060025 0.25421,0.542232 c 0.628507,1.340615 2.252246,2.144207 3.380252,1.672896 0.205675,-0.08594 0.393299,-0.136905 0.416941,-0.113262 0.09571,0.09571 -0.304478,1.052683 -0.66763,1.596507 -0.612681,0.917499 -1.641424,1.59072 -3.000257,1.963406 -0.67861,0.186121 -2.799119,0.265286 -3.628108,0.135448 z"
-     id="path45"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 32.458121,50.41354 c 0.0012,-0.619314 0.189433,-1.556535 0.405963,-2.021822 0.114426,-0.245882 0.447574,-0.688129 0.740327,-0.98277 0.680059,-0.684444 1.33942,-0.950412 2.356162,-0.950412 h 0.715494 v 0.806177 0.806177 l -1.436162,0.03276 c -1.396149,0.03185 -1.443059,0.03966 -1.68367,0.280429 -0.180954,0.18107 -0.248935,0.351207 -0.252821,0.632739 -0.01071,0.776092 0.284708,0.989234 1.371097,0.989234 0.800802,0 0.791899,0.09178 -0.04742,0.488853 -0.500532,0.236793 -0.705004,0.278038 -1.378693,0.278102 l -0.791001,7.6e-5 7.24e-4,-0.359546 z"
-     id="path47"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 28.561883,50.494908 c -0.323231,-0.152915 -0.614278,-0.321043 -0.646771,-0.373619 -0.03692,-0.05974 0.245157,-0.108264 0.752095,-0.129382 0.964144,-0.04016 1.112043,-0.143674 1.177417,-0.824037 0.03845,-0.40014 0.0096,-0.510273 -0.196712,-0.750221 l -0.241776,-0.281233 -1.446615,-0.03276 -1.446615,-0.03276 v -0.806177 -0.806177 h 0.715495 c 0.914379,0 1.613046,0.254434 2.235556,0.814123 0.793654,0.713563 1.264356,1.880527 1.266895,3.140881 l 7.25e-4,0.359546 -0.791001,-7.6e-5 c -0.673689,-6.4e-5 -0.878161,-0.04131 -1.378693,-0.278102 z"
-     id="path49"
-     inkscape:connector-curvature="0" /><path
-     style="fill:#ffcc00;fill-opacity:1;stroke-width:0.09587888"
-     d="m 28.646275,58.778603 c -1.290571,-0.357671 -2.133369,-1.208551 -2.133369,-2.153826 v -0.290716 h 5.081581 5.08158 l -0.0021,0.311607 c -0.0053,0.779664 -0.705879,1.609265 -1.687197,1.997823 -0.53528,0.211947 -0.697434,0.224559 -3.200517,0.248928 -2.07511,0.0202 -2.743862,-0.004 -3.139969,-0.113816 z"
-     id="path51"
-     inkscape:connector-curvature="0" /></svg>
\ No newline at end of file
index f93aa0e..2219fe0 100644 (file)
@@ -14,6 +14,8 @@
     <link rel="stylesheet" href="mini-custom.min.css">
     <link rel="stylesheet"
       href="//fonts.googleapis.com/css?family=Open+Sans:400,700">
     <link rel="stylesheet" href="mini-custom.min.css">
     <link rel="stylesheet"
       href="//fonts.googleapis.com/css?family=Open+Sans:400,700">
+    <link rel="stylesheet"
+      href="https://fonts.googleapis.com/css?family=Fira+Code&display=swap">
   </head>
   <body>
     <div id="app"></div>
   </head>
   <body>
     <div id="app"></div>
index 52ec2c5..448604a 100644 (file)
@@ -85,6 +85,15 @@ export const ChessRules = class ChessRules {
     return V.CanFlip;
   }
 
     return V.CanFlip;
   }
 
+  // Some variants require turn indicator
+  // (generally when analysis or flip is diabled)
+  static get ShowTurn() {
+    return !V.CanAnalyze || V.ShowMoves != "all" || !V.CanFlip;
+  }
+  get showTurn() {
+    return V.ShowTurn;
+  }
+
   static get IMAGE_EXTENSION() {
     // All pieces should be in the SVG format
     return ".svg";
   static get IMAGE_EXTENSION() {
     // All pieces should be in the SVG format
     return ".svg";
@@ -1284,8 +1293,8 @@ export const ChessRules = class ChessRules {
     }
 
     let candidates = [0];
     }
 
     let candidates = [0];
-    for (let j = 1; j < moves1.length && moves1[j].eval == moves1[0].eval; j++)
-      candidates.push(j);
+    for (let i = 1; i < moves1.length && moves1[i].eval == moves1[0].eval; i++)
+      candidates.push(i);
     return moves1[candidates[randInt(candidates.length)]];
   }
 
     return moves1[candidates[randInt(candidates.length)]];
   }
 
index a49c31b..2517c78 100644 (file)
@@ -103,15 +103,13 @@ export default {
     showTurn: function() {
       return (
         this.game.score == '*' &&
     showTurn: function() {
       return (
         this.game.score == '*' &&
-        this.vr &&
-        (this.vr.showMoves != "all" || !this.vr.canFlip)
+        !!this.vr && this.vr.showTurn
       );
     },
     turn: function() {
       );
     },
     turn: function() {
-      if (!this.vr)
-        return "";
+      if (!this.vr) return "";
       if (this.vr.showMoves != "all")
       if (this.vr.showMoves != "all")
-        return this.st.tr[(this.vr.turn == 'w' ? "White" : "Black") + " to move"]
+        return this.st.tr[(this.vr.turn == 'w' ? "White" : "Black") + " to move"];
       // Cannot flip: racing king or circular chess
       return this.vr.movesCount == 0 && this.game.mycolor == "w"
         ? this.st.tr["It's your turn!"]
       // Cannot flip: racing king or circular chess
       return this.vr.movesCount == 0 && this.game.mycolor == "w"
         ? this.st.tr["It's your turn!"]
index 921a599..d89ee40 100644 (file)
@@ -55,6 +55,10 @@ export default {
       this.settings.highlight &&
       ["all","highlight"].includes(V.ShowMoves)
     );
       this.settings.highlight &&
       ["all","highlight"].includes(V.ShowMoves)
     );
+    const showCheck = (
+      this.settings.highlight &&
+      ["all","highlight","byrow"].includes(V.ShowMoves)
+    );
     const orientation = !V.CanFlip ? "w" : this.orientation;
     // Ensure that squares colors do not change when board is flipped
     const lightSquareMod = (sizeX + sizeY) % 2;
     const orientation = !V.CanFlip ? "w" : this.orientation;
     // Ensure that squares colors do not change when board is flipped
     const lightSquareMod = (sizeX + sizeY) % 2;
@@ -149,8 +153,8 @@ export default {
                   "in-shadow": inShadow(ci, cj),
                   "highlight-light": inHighlight(ci, cj) && lightSquare,
                   "highlight-dark": inHighlight(ci, cj) && !lightSquare,
                   "in-shadow": inShadow(ci, cj),
                   "highlight-light": inHighlight(ci, cj) && lightSquare,
                   "highlight-dark": inHighlight(ci, cj) && !lightSquare,
-                  "incheck-light": showLight && lightSquare && incheckSq[ci][cj],
-                  "incheck-dark": showLight && !lightSquare && incheckSq[ci][cj]
+                  "incheck-light": showCheck && lightSquare && incheckSq[ci][cj],
+                  "incheck-dark": showCheck && !lightSquare && incheckSq[ci][cj]
                 },
                 attrs: {
                   id: getSquareId({ x: ci, y: cj })
                 },
                 attrs: {
                   id: getSquareId({ x: ci, y: cj })
index c6b32fb..6d55194 100644 (file)
@@ -42,9 +42,10 @@ p.
 h3 Related links
 
 #links
 h3 Related links
 
 #links
-  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://www.chessvariants.com/") chessvariants.com
-  a(href="http://pychess-variants.herokuapp.com/") pychess-variants
+  a(href="https://greenchess.net/") greenchess.net
+  a(href="http://pychess-variants.herokuapp.com/") pychess-variants.com
+  a(href="https://musketeerchess.net/home/index.html") musketeerchess.net
   a(href="https://schemingmind.com/") schemingmind.com
   div
     a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
   a(href="https://schemingmind.com/") schemingmind.com
   div
     a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
index eb53940..66aa429 100644 (file)
@@ -39,9 +39,10 @@ p
 h3 Enlaces relacionados
 
 #links
 h3 Enlaces relacionados
 
 #links
-  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://www.chessvariants.com/") chessvariants.com
-  a(href="http://pychess-variants.herokuapp.com/") pychess-variants
+  a(href="https://greenchess.net/") greenchess.net
+  a(href="http://pychess-variants.herokuapp.com/") pychess-variants.com
+  a(href="https://musketeerchess.net/home/index.html") musketeerchess.net
   a(href="https://schemingmind.com/") schemingmind.com
   div
     a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
   a(href="https://schemingmind.com/") schemingmind.com
   div
     a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
index 3197837..b423603 100644 (file)
@@ -40,9 +40,10 @@ p.
 h3 Liens connexes
 
 #links
 h3 Liens connexes
 
 #links
-  a(href="https://greenchess.net/") greenchess.net
   a(href="https://www.chessvariants.com/") chessvariants.com
   a(href="https://www.chessvariants.com/") chessvariants.com
-  a(href="http://pychess-variants.herokuapp.com/") pychess-variants
+  a(href="https://greenchess.net/") greenchess.net
+  a(href="http://pychess-variants.herokuapp.com/") pychess-variants.com
+  a(href="https://musketeerchess.net/home/index.html") musketeerchess.net
   a(href="https://schemingmind.com/") schemingmind.com
   a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
   a(href="https://brainking.com/") brainking.com
   a(href="https://schemingmind.com/") schemingmind.com
   a(href="https://echekk.fr/spip.php?page=rubrique&id_rubrique=1") echekk.fr
   a(href="https://brainking.com/") brainking.com
index 49005d8..3525359 100644 (file)
@@ -12,17 +12,21 @@ ul
     disappear and grab the ball.
   li "Capturing" a friendly unit pass the ball to it.
 
     disappear and grab the ball.
   li "Capturing" a friendly unit pass the ball to it.
 
+p.
+  All pieces represent players on a field of some ball game,
+  so they can move up to two squares only for a better realism.
+
 figure.diagram-container
   .diagram.diag12
 figure.diagram-container
   .diagram.diag12
-    | fen:rnbqkwnbr/ppppp1ppp/9/5p3/4a4/9/2N4N1/PPPPPPPPP/R1BQKW1BR:
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4a4/5P3/9/PPPPP1PPP/RNBHQHNBR:
   .diagram.diag22
   .diagram.diag22
-    | fen:rnbqkwnbr/ppppp1ppp/9/9/4s4/9/2N4N1/PPPPPPPPP/R1BQKW1BR:
-  figcaption Left: before ...fxe5 (taking ball). Right: after ...fxe5.
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4S4/9/9/PPPPP1PPP/RNBHQHNBR:
+  figcaption Left: before fxe5 (taking ball). Right: after fxe5.
 
 p.
 
 p.
-  The piece sitting to the right of the king is a wildebeest (W).
-  It moves by jumping in L like a knight, or a little bit further:
-  three squares in one direction then one aside.
+  The piece sitting next to the queen is a champion (H).
+  It moves by jumping two squares in any direction (potentially over pieces),
+  or one square orthogonally.
 
 h3 End of the game
 
 
 h3 End of the game
 
@@ -32,16 +36,16 @@ p.
 
 figure.diagram-container
   .diagram.diag12
 
 figure.diagram-container
   .diagram.diag12
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1qPd2/1R2BH1HQ:
   .diagram.diag22
   .diagram.diag22
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1tPh2/1R2BH1HQ:
   figcaption.
   figcaption.
-    Left: before e5Pf6 (passing the ball).
-    Right: after the move. Then Wxe9# cannot be prevented.
+    Left: before g2Pe2 (passing the ball).
+    Right: after the move. Then ...Q(x)d1# cannot be prevented.
 
 p.
 
 p.
-  White pass the ball from the pawn at e5 to the wildebeest at f6.
-  Then, since the black bishop on e8 cannot move white will win by taking it: Wxe9#.
+  The black champion on g2 passes the ball to the black queen on e2.
+  Victory is then garanteed by playing a queen move on the first rank.
 
 h3 Source
 
 
 h3 Source
 
index 42922c4..cef6fa6 100644 (file)
@@ -12,19 +12,23 @@ ul
     mientras lo hace desaparecer.
   li "Capturar" una pieza amiga le pasa la pelota.
 
     mientras lo hace desaparecer.
   li "Capturar" una pieza amiga le pasa la pelota.
 
+p.
+  Todas las piezas representan jugadores en un área de juego de pelota,
+  entonces solo se mueven dos casillas como máximo para un mejor realismo.
+
 figure.diagram-container
   .diagram.diag12
 figure.diagram-container
   .diagram.diag12
-    | fen:rnbqkwnbr/ppppp1ppp/9/5p3/4a4/9/2N4N1/PPPPPPPPPP/R1BQKW1BR:
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4a4/5P3/9/PPPPP1PPP/RNBHQHNBR:
   .diagram.diag22
   .diagram.diag22
-    | fen:rnbqkwnbr/ppppp1ppp/9/9/4s4/9/2N4N1/PPPPPPPPPP/R1BQKW1BR:
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4S4/9/9/PPPPP1PPP/RNBHQHNBR:
   figcaption.
   figcaption.
-    Izquierda: antes de ...fxe5 (tomando la pelota).
-    Derecha: después de ...fxe5.
+    Izquierda: antes de fxe5 (tomando la pelota).
+    Derecha: después de fxe5.
 
 p.
 
 p.
-  La pieza a la derecha del rey es un ñu (W).
-  Se mueve realizando saltos en forma de L como el caballo,
-  o un poco más alargado: tres casillas y luego una en el lateral.
+  La pieza al lado de la dama es un campeón (H).
+  Se mueve saltando dos casillas en cualquier dirección
+  (potencialmente sobre piezas), o una casilla ortogonalmente.
 
 h3 Fin de la partida
 
 
 h3 Fin de la partida
 
@@ -34,17 +38,16 @@ p.
 
 figure.diagram-container
   .diagram.diag12
 
 figure.diagram-container
   .diagram.diag12
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1qPd2/1R2BH1HQ:
   .diagram.diag22
   .diagram.diag22
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1tPh2/1R2BH1HQ:
   figcaption.
   figcaption.
-    Izquierda: antes de e5Pf6 (pasando el globo).
-    Derecha: después del movimiento. Entonces Wxe9# no se puede prevenir.
+    Izquierda: antes de g2Pe2 (pasando el globo).
+    Derecha: después del movimiento. Entonces Q(x)d1# no se puede prevenir.
 
 p.
 
 p.
-  Las blancas pasan la pelota del peón e5 al ñu en f6.
-  Entonces, como el alfil negro no puede moverse,
-  la victoria está asegurada capturándolo con Wxe9#.
+  Las negras pasan el balón del campeón g2 a la dama en e2.
+  La victoria se asegura al jugar un movimiento de dama en la primera fila.
 
 h3 Fuente
 
 
 h3 Fuente
 
index 070021d..314bc5f 100644 (file)
@@ -12,17 +12,23 @@ ul
     tout en la faisant disparaître.
   li "Capturer" une pièce amie lui passe le ballon.
 
     tout en la faisant disparaître.
   li "Capturer" une pièce amie lui passe le ballon.
 
+p.
+  Toutes les pièces représentent des joueurs sur un terrain d'un certain
+  jeu de ballon, donc elles ne se déplacent que de deux cases au maximum
+  pour un meilleur réalisme.
+
 figure.diagram-container
   .diagram.diag12
 figure.diagram-container
   .diagram.diag12
-    | fen:rnbqkwnbr/ppppp1ppp/9/5p3/4a4/9/2N4N1/PPPPPPPPP/R1BQKW1BR:
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4a4/5P3/9/PPPPP1PPP/RNBHQHNBR:
   .diagram.diag22
   .diagram.diag22
-    | fen:rnbqkwnbr/ppppp1ppp/9/9/4s4/9/2N4N1/PPPPPPPPP/R1BQKW1BR:
-  figcaption Gauche : avant ...fxe5 (prenant le ballon). Droite : après ...fxe5.
+    | fen:rnbhq1nbr/ppppppppp/5h3/9/4S4/9/9/PPPPP1PPP/RNBHQHNBR:
+  figcaption Gauche : avant fxe5 (prenant le ballon). Droite : après fxe5.
 
 p.
 
 p.
-  La pièce située à droite du roi est un gnou (W).
-  Il se déplace en effectuant des sauts en L comme le cavalier,
-  ou bien un peu plus allongés : trois cases puis une sur le côté.
+  La pièce située à côté de la dame est un champion (H).
+  Il se déplace en effectuant des sauts de deux cases dans n'importe
+  quelle direction (potentiellement par dessus des pièces),
+  ou d'une case orthogonalement.
 
 h3 Fin de la partie
 
 
 h3 Fin de la partie
 
@@ -32,17 +38,17 @@ p.
 
 figure.diagram-container
   .diagram.diag12
 
 figure.diagram-container
   .diagram.diag12
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wW1p1/4S4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1qPd2/1R2BH1HQ:
   .diagram.diag22
   .diagram.diag22
-    | fen:rqnkb1nb1/pp1pppp1r/2p5p/4wY1p1/4P4/1P5B1/9/P1PPP1PPP/RQNK2NBR:
+    | fen:3rn1r2/1pp3pbp/2hp2n2/p1b1pp1p1/P6P1/2N3P1P/1PP2N3/1RB1tPh2/1R2BH1HQ:
   figcaption.
   figcaption.
-    Gauche : avant e5Pf6 (passant le ballon).
-    Droite : après le coup. Ensuite Wxe9# ne peut être empêché.
+    Gauche : avant g2Pe2 (passant le ballon).
+    Droite : après le coup. Ensuite ...Q(x)d1# ne peut être empêché.
 
 p.
 
 p.
-  Les blancs passent la balle du pion e5 vers le gnou en f6.
-  Ensuite, puisque le fou noir ne peut pas bouger la victoire est assurée
-  en le capturant par Wxe9#.
+  Les noirs passent la balle du champion g2 vers la dame en e2.
+  La victoire est alors assurée en jouant ensuite un coup de dame sur la
+  première rangée.
 
 h3 Source
 
 
 h3 Source
 
diff --git a/client/src/translations/rules/Synchrone/en.pug b/client/src/translations/rules/Synchrone/en.pug
new file mode 100644 (file)
index 0000000..7432208
--- /dev/null
@@ -0,0 +1,52 @@
+p.boxed
+  | Both players play a move "at the same time".
+  | Conflicts are resolved following a few simple rules.
+
+p.
+  In order to not rethink a big part of the code, the white move has to be
+  played before the black one. However, the black player doesn't see it.
+
+p So both players play "at the same time". Resolving rules:
+ul
+  li.
+    If both moves arrive on the same square, both pieces disappear except
+    if one is a king. In this case only the king remains.
+  li.
+    If a capture was intended but the target moved, the move is still played
+    but doesn't capture anything.
+p.
+  Such captures can be anticipated by capturing our own pieces.
+  If the enemy captures as predicted, his piece disappears.
+  If he doesn't, the self-capture isn't undone.
+
+figure.diagram-container
+  .diagram
+    | fen:rnb1kbnr/ppp1pppp/8/3qP3/8/8/PPPP1PPP/RNBQKBNR:
+  figcaption After 1.e4 d5 2.e5 Qxd5 (anticipating 2.exd5 which isn't played)
+
+h3 End of the game
+
+p.
+  Due to the simultaneity, it is possible that a king is captured for example
+  after escaping a check in a wrong way, as the following diagram shows.
+  So, capturing the king counts as a win, of highest priority.
+  A checkmate wins too, but if your king is captured and the other still on
+  the board (even if it is mated), you lose.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:r3r1bb/ppqRkppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  .diagram.diag22
+    | fen:r3r1bb/pp1qRppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  figcaption.
+    Left: before Rxe7 (white) and Qxd7 (black)
+    Right: after the move (1-0)
+
+h3 Source
+
+p
+  a(href="http://www.hexenspiel.de/engl/synchronous-chess/") Synchronous chess
+  | , modified to allow en-passant captures
+  | and disable the "exchange of captures" stage. 
+  a(href="http://www.pion.ch/echecs/variante.php?jeu=synchro") Another description
+  | &nbsp;(in French).
diff --git a/client/src/translations/rules/Synchrone/es.pug b/client/src/translations/rules/Synchrone/es.pug
new file mode 100644 (file)
index 0000000..1a98c95
--- /dev/null
@@ -0,0 +1,53 @@
+p.boxed
+  | Ambos jugadores hacen un movimiento "al mismo tiempo".
+  | Los conflictos se resuelven mediante unas pocas reglas simples.
+
+p.
+  Para no repensar una gran parte del código, el movimiento blanco debe ser
+  jugado antes del movimiento negro. Sin embargo, el jugador negro no lo ve.
+
+p Entonces los dos jugadores juegan "al mismo tiempo". Reglas de resolución:
+ul
+  li.
+    Si las dos jugadas alcanzan la mismo casilla, entonces las dos piezas
+    desaparecerá a menos que uno de ellos sea un rey.
+    En este caso solo queda el rey.
+  li.
+    Si se intenta una captura pero el objetivo se mueve, el movimiento
+    todavía se juega pero no capturó nada.
+p.
+  Tales capturas se pueden anticipar capturando nuestras propias piezas.
+  Si el oponente captura como se esperaba, entonces su pieza desaparece.
+  De lo contrario, la auto-captura no se deshace.
+
+figure.diagram-container
+  .diagram
+    | fen:rnb1kbnr/ppp1pppp/8/3qP3/8/8/PPPP1PPP/RNBQKBNR:
+  figcaption Después de 1.e4 d5 2.e5 Qxd5 (anticipando 2.exd5 que no se juega)
+
+h3 Fin de la partida
+
+p.
+  Debido a la simultaneidad, es posible que un rey sea capturado por
+  ejemplo cubriendo un jaque torpemente, como se muestra
+  el siguiente diagrama.
+  Jaque mate también gana, pero si tu rey es capturado mientras
+  que el otro todavía está en el tablero (incluso si es jaque mate), pierdes.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:r3r1bb/ppqRkppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  .diagram.diag22
+    | fen:r3r1bb/pp1qRppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  figcaption.
+    Izquierda: antes de Rxe7 (blanco) y Qxd7 (negro)
+    Derecha: después del movimiento (1-0)
+
+h3 Fuente
+
+p
+  a(href="http://www.hexenspiel.de/engl/synchronous-chess/") Ajedrez sincrónico
+  | , modificado para autorizar la captura en passant y cancelar la fase de
+  | "cambio de captura". 
+  a(href="http://www.pion.ch/echecs/variante.php?jeu=synchro") Otra descripción
+  | &nbsp;(en francés).
diff --git a/client/src/translations/rules/Synchrone/fr.pug b/client/src/translations/rules/Synchrone/fr.pug
new file mode 100644 (file)
index 0000000..1d7fe61
--- /dev/null
@@ -0,0 +1,53 @@
+p.boxed
+  | Les deux joueurs jouent un coup "en même temps".
+  | Les conflits sont résolus par quelques règles simples.
+
+p.
+  Afin de ne pas repenser une grosse partie du code, le coup blanc doit être
+  joué avant le coup noir. Cependant, le joueur des noirs ne le voit pas.
+
+p Ainsi les deux joueurs jouent "en même temps". Règles de résolution :
+ul
+  li.
+    Si les deux coups arrivent sur la même case, alors les deux pièces
+    disparaissent sauf si l'une des deux est un roi.
+    Dans ce cas seul le roi reste.
+  li.
+    Si une capture est tentée mais que la cible bouge, le coup est tout
+    de même joué mais ne capture rien.
+p.
+  De telles captures peuvent être anticipées en capturant nos propres pièces.
+  Si l'adversaire capture comme prévu, alors sa pièce disparaît.
+  Sinon, l'auto-capture n'est pas défaite.
+
+figure.diagram-container
+  .diagram
+    | fen:rnb1kbnr/ppp1pppp/8/3qP3/8/8/PPPP1PPP/RNBQKBNR:
+  figcaption Après 1.e4 d5 2.e5 Qxd5 (anticipant 2.exd5 qui n'est pas joué)
+
+h3 Fin de la partie
+
+p.
+  À cause de la simultanéité, il est possible qu'un roi soit capturé par
+  exemple en couvrant un échec maladroitement, comme le montre
+  le diagramme suivant.
+  Un échec et mat gagne également, mais si votre roi est capturé tandis
+  que l'autre est encore sur l'échquier (même s'il est maté), vous perdez.
+
+figure.diagram-container
+  .diagram.diag12
+    | fen:r3r1bb/ppqRkppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  .diagram.diag22
+    | fen:r3r1bb/pp1qRppp/8/2p1n3/7n/8/PPPPP1P1/RNBQNBK1:
+  figcaption.
+    Gauche : avant Rxe7 (blancs) et Qxd7 (noirs)
+    Droite : après le coup (1-0)
+
+h3 Source
+
+p
+  a(href="http://www.hexenspiel.de/engl/synchronous-chess/") Échecs synchronisés
+  | , modifés pour autoriser la prise en passant et annuler la phase
+  | "d'échange de captures". 
+  a(href="http://www.pion.ch/echecs/variante.php?jeu=synchro") Autre description
+  | .
index 5a23e9f..1bb7731 100644 (file)
@@ -1,5 +1,4 @@
 import { ChessRules, Move, PiPo } from "@/base_rules";
 import { ChessRules, Move, PiPo } from "@/base_rules";
-import { WildebeestRules } from "@/variants/Wildebeest";
 import { ArrayFun } from "@/utils/array";
 import { shuffle } from "@/utils/alea";
 
 import { ArrayFun } from "@/utils/array";
 import { shuffle } from "@/utils/alea";
 
@@ -8,7 +7,7 @@ export class BallRules extends ChessRules {
     return Object.assign(
       {},
       ChessRules.PawnSpecs,
     return Object.assign(
       {},
       ChessRules.PawnSpecs,
-      { promotions: ChessRules.PawnSpecs.promotions.concat([V.WILDEBEEST]) }
+      { promotions: ChessRules.PawnSpecs.promotions.concat([V.CHAMPION]) }
     );
   }
 
     );
   }
 
@@ -19,8 +18,8 @@ export class BallRules extends ChessRules {
     return false;
   }
 
     return false;
   }
 
-  static get WILDEBEEST() {
-    return 'w';
+  static get CHAMPION() {
+    return 'h';
   }
 
   static get BALL() {
   }
 
   static get BALL() {
@@ -42,7 +41,7 @@ export class BallRules extends ChessRules {
       'b': 'c',
       'q': 't',
       'k': 'l',
       'b': 'c',
       'q': 't',
       'k': 'l',
-      'w': 'y'
+      'h': 'd'
     };
   }
 
     };
   }
 
@@ -54,13 +53,13 @@ export class BallRules extends ChessRules {
       'c': 'b',
       't': 'q',
       'l': 'k',
       'c': 'b',
       't': 'q',
       'l': 'k',
-      'y': 'w'
+      'd': 'h'
     };
   }
 
   static get PIECES() {
     return ChessRules.PIECES
     };
   }
 
   static get PIECES() {
     return ChessRules.PIECES
-      .concat([V.WILDEBEEST])
+      .concat([V.CHAMPION])
       .concat(Object.keys(V.HAS_BALL_DECODE))
       .concat(['a']);
   }
       .concat(Object.keys(V.HAS_BALL_DECODE))
       .concat(['a']);
   }
@@ -109,7 +108,7 @@ export class BallRules extends ChessRules {
     let prefix = "";
     const withPrefix =
       Object.keys(V.HAS_BALL_DECODE)
     let prefix = "";
     const withPrefix =
       Object.keys(V.HAS_BALL_DECODE)
-      .concat([V.WILDEBEEST])
+      .concat([V.CHAMPION])
       .concat(['a']);
     if (withPrefix.includes(b[1])) prefix = "Ball/";
     return prefix + b;
       .concat(['a']);
     if (withPrefix.includes(b[1])) prefix = "Ball/";
     return prefix + b;
@@ -129,7 +128,7 @@ export class BallRules extends ChessRules {
 
   static GenRandInitFen(randomness) {
     if (randomness == 0)
 
   static GenRandInitFen(randomness) {
     if (randomness == 0)
-      return "rnbqkwnbr/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/RNBQKWNBR w 0 -";
+      return "rnbhqhnbr/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/RNBHQHNBR w 0 -";
 
     let pieces = { w: new Array(9), b: new Array(9) };
     for (let c of ["w", "b"]) {
 
     let pieces = { w: new Array(9), b: new Array(9) };
     for (let c of ["w", "b"]) {
@@ -140,7 +139,7 @@ export class BallRules extends ChessRules {
 
       // Get random squares for every piece, totally freely
       let positions = shuffle(ArrayFun.range(9));
 
       // Get random squares for every piece, totally freely
       let positions = shuffle(ArrayFun.range(9));
-      const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'k', 'q', 'w'];
+      const composition = ['b', 'b', 'r', 'r', 'n', 'n', 'h', 'h', 'q'];
       const rem2 = positions[0] % 2;
       if (rem2 == positions[1] % 2) {
         // Fix bishops (on different colors)
       const rem2 = positions[0] % 2;
       if (rem2 == positions[1] % 2) {
         // Fix bishops (on different colors)
@@ -160,7 +159,7 @@ export class BallRules extends ChessRules {
     );
   }
 
     );
   }
 
-  scanKings(fen) {}
+  scanKings() {}
 
   static get size() {
     return { x: 9, y: 9 };
 
   static get size() {
     return { x: 9, y: 9 };
@@ -174,7 +173,27 @@ export class BallRules extends ChessRules {
   }
 
   static get steps() {
   }
 
   static get steps() {
-    return WildebeestRules.steps;
+    return Object.assign(
+      {},
+      ChessRules.steps,
+      // Add champion moves
+      {
+        h: [
+          [-2, -2],
+          [-2, 0],
+          [-2, 2],
+          [0, -2],
+          [0, 2],
+          [2, -2],
+          [2, 0],
+          [2, 2],
+          [-1, 0],
+          [1, 0],
+          [0, -1],
+          [0, 1]
+        ]
+      }
+    );
   }
 
   // Because of the ball, getPiece() could be wrong:
   }
 
   // Because of the ball, getPiece() could be wrong:
@@ -242,17 +261,33 @@ export class BallRules extends ChessRules {
   // So base implementation is fine.
 
   getPotentialMovesFrom([x, y]) {
   // So base implementation is fine.
 
   getPotentialMovesFrom([x, y]) {
-    if (this.getPiece(x, y) == V.WILDEBEEST)
-      return this.getPotentialWildebeestMoves([x, y]);
+    if (this.getPiece(x, y) == V.CHAMPION)
+      return this.getPotentialChampionMoves([x, y]);
     return super.getPotentialMovesFrom([x, y]);
   }
 
     return super.getPotentialMovesFrom([x, y]);
   }
 
-  getPotentialWildebeestMoves(sq) {
-    return this.getSlideNJumpMoves(
-      sq,
-      V.steps[V.KNIGHT].concat(V.steps[WildebeestRules.CAMEL]),
-      "oneStep"
-    );
+  // "Sliders": at most 2 steps
+  getSlideNJumpMoves([x, y], steps, oneStep) {
+    let moves = [];
+    outerLoop: for (let step of steps) {
+      let i = x + step[0];
+      let j = y + step[1];
+      let stepCount = 1;
+      while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
+        moves.push(this.getBasicMove([x, y], [i, j]));
+        if (oneStep || stepCount == 2) continue outerLoop;
+        i += step[0];
+        j += step[1];
+        stepCount++;
+      }
+      if (V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
+        moves.push(this.getBasicMove([x, y], [i, j]));
+    }
+    return moves;
+  }
+
+  getPotentialChampionMoves(sq) {
+    return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], "oneStep");
   }
 
   filterValid(moves) {
   }
 
   filterValid(moves) {
@@ -292,8 +327,7 @@ export class BallRules extends ChessRules {
       n: 3,
       b: 3,
       q: 9,
       n: 3,
       b: 3,
       q: 9,
-      w: 7,
-      k: 5,
+      h: 4,
       a: 0 //ball: neutral
     };
   }
       a: 0 //ball: neutral
     };
   }
index 42df93e..fa80824 100644 (file)
@@ -146,7 +146,7 @@ export class EightpiecesRules extends ChessRules {
   static GenRandInitFen(randomness) {
     if (randomness == 0)
       // Deterministic:
   static GenRandInitFen(randomness) {
     if (randomness == 0)
       // Deterministic:
-      return "jsfqkbnr/pppppppp/8/8/8/8/PPPPPPPP/JSDQKBNR w 0 ahah - -";
+      return "jfsqkbnr/pppppppp/8/8/8/8/PPPPPPPP/JDSQKBNR w 0 ahah - -";
 
     let pieces = { w: new Array(8), b: new Array(8) };
     let flags = "";
 
     let pieces = { w: new Array(8), b: new Array(8) };
     let flags = "";
@@ -657,106 +657,6 @@ export class EightpiecesRules extends ChessRules {
     return this.filterValid(this.getPotentialMovesFrom(sentrySq));
   }
 
     return this.filterValid(this.getPotentialMovesFrom(sentrySq));
   }
 
-  prePlay(move) {
-    if (move.appear.length == 0 && move.vanish.length == 1)
-      // The sentry is about to push a piece: subTurn goes from 1 to 2
-      this.sentryPos = { x: move.end.x, y: move.end.y };
-    if (this.subTurn == 2 && move.vanish[0].p != V.PAWN) {
-      // A piece is pushed: forbid array of squares between start and end
-      // of move, included (except if it's a pawn)
-      let squares = [];
-      if ([V.KNIGHT,V.KING].includes(move.vanish[0].p))
-        // short-range pieces: just forbid initial square
-        squares.push({ x: move.start.x, y: move.start.y });
-      else {
-        const deltaX = move.end.x - move.start.x;
-        const deltaY = move.end.y - move.start.y;
-        const step = [
-          deltaX / Math.abs(deltaX) || 0,
-          deltaY / Math.abs(deltaY) || 0
-        ];
-        for (
-          let sq = {x: move.start.x, y: move.start.y};
-          sq.x != move.end.x || sq.y != move.end.y;
-          sq.x += step[0], sq.y += step[1]
-        ) {
-          squares.push({ x: sq.x, y: sq.y });
-        }
-      }
-      // Add end square as well, to know if I was pushed (useful for lancers)
-      squares.push({ x: move.end.x, y: move.end.y });
-      this.sentryPush.push(squares);
-    } else this.sentryPush.push(null);
-  }
-
-  play(move) {
-    this.prePlay(move);
-    move.flags = JSON.stringify(this.aggregateFlags());
-    this.epSquares.push(this.getEpSquare(move));
-    V.PlayOnBoard(this.board, move);
-    // Is it a sentry push? (useful for undo)
-    move.sentryPush = (this.subTurn == 2);
-    if (this.subTurn == 1) this.movesCount++;
-    if (move.appear.length == 0 && move.vanish.length == 1) this.subTurn = 2;
-    else {
-      // Turn changes only if not a sentry "pre-push"
-      this.turn = V.GetOppCol(this.turn);
-      this.subTurn = 1;
-    }
-    this.postPlay(move);
-  }
-
-  postPlay(move) {
-    if (move.vanish.length == 0 || this.subTurn == 2)
-      // Special pass move of the king, or sentry pre-push: nothing to update
-      return;
-    const c = move.vanish[0].c;
-    const piece = move.vanish[0].p;
-    const firstRank = c == "w" ? V.size.x - 1 : 0;
-
-    if (piece == V.KING) {
-      this.kingPos[c][0] = move.appear[0].x;
-      this.kingPos[c][1] = move.appear[0].y;
-      this.castleFlags[c] = [V.size.y, V.size.y];
-      return;
-    }
-    // Update castling flags if rooks are moved
-    const oppCol = V.GetOppCol(c);
-    const oppFirstRank = V.size.x - 1 - firstRank;
-    if (
-      move.start.x == firstRank && //our rook moves?
-      this.castleFlags[c].includes(move.start.y)
-    ) {
-      const flagIdx = (move.start.y == this.castleFlags[c][0] ? 0 : 1);
-      this.castleFlags[c][flagIdx] = V.size.y;
-    } else if (
-      move.end.x == oppFirstRank && //we took opponent rook?
-      this.castleFlags[oppCol].includes(move.end.y)
-    ) {
-      const flagIdx = (move.end.y == this.castleFlags[oppCol][0] ? 0 : 1);
-      this.castleFlags[oppCol][flagIdx] = V.size.y;
-    }
-  }
-
-  undo(move) {
-    this.epSquares.pop();
-    this.disaggregateFlags(JSON.parse(move.flags));
-    V.UndoOnBoard(this.board, move);
-    // Decrement movesCount except if the move is a sentry push
-    if (!move.sentryPush) this.movesCount--;
-    if (this.subTurn == 2) this.subTurn = 1;
-    else {
-      this.turn = V.GetOppCol(this.turn);
-      if (move.sentryPush) this.subTurn = 2;
-    }
-    this.postUndo(move);
-  }
-
-  postUndo(move) {
-    super.postUndo(move);
-    this.sentryPush.pop();
-  }
-
   isAttacked(sq, color) {
     return (
       super.isAttacked(sq, color) ||
   isAttacked(sq, color) {
     return (
       super.isAttacked(sq, color) ||
@@ -937,6 +837,106 @@ export class EightpiecesRules extends ChessRules {
 
   // Jailer doesn't capture or give check
 
 
   // Jailer doesn't capture or give check
 
+  prePlay(move) {
+    if (move.appear.length == 0 && move.vanish.length == 1)
+      // The sentry is about to push a piece: subTurn goes from 1 to 2
+      this.sentryPos = { x: move.end.x, y: move.end.y };
+    if (this.subTurn == 2 && move.vanish[0].p != V.PAWN) {
+      // A piece is pushed: forbid array of squares between start and end
+      // of move, included (except if it's a pawn)
+      let squares = [];
+      if ([V.KNIGHT,V.KING].includes(move.vanish[0].p))
+        // short-range pieces: just forbid initial square
+        squares.push({ x: move.start.x, y: move.start.y });
+      else {
+        const deltaX = move.end.x - move.start.x;
+        const deltaY = move.end.y - move.start.y;
+        const step = [
+          deltaX / Math.abs(deltaX) || 0,
+          deltaY / Math.abs(deltaY) || 0
+        ];
+        for (
+          let sq = {x: move.start.x, y: move.start.y};
+          sq.x != move.end.x || sq.y != move.end.y;
+          sq.x += step[0], sq.y += step[1]
+        ) {
+          squares.push({ x: sq.x, y: sq.y });
+        }
+      }
+      // Add end square as well, to know if I was pushed (useful for lancers)
+      squares.push({ x: move.end.x, y: move.end.y });
+      this.sentryPush.push(squares);
+    } else this.sentryPush.push(null);
+  }
+
+  play(move) {
+    this.prePlay(move);
+    move.flags = JSON.stringify(this.aggregateFlags());
+    this.epSquares.push(this.getEpSquare(move));
+    V.PlayOnBoard(this.board, move);
+    // Is it a sentry push? (useful for undo)
+    move.sentryPush = (this.subTurn == 2);
+    if (this.subTurn == 1) this.movesCount++;
+    if (move.appear.length == 0 && move.vanish.length == 1) this.subTurn = 2;
+    else {
+      // Turn changes only if not a sentry "pre-push"
+      this.turn = V.GetOppCol(this.turn);
+      this.subTurn = 1;
+    }
+    this.postPlay(move);
+  }
+
+  postPlay(move) {
+    if (move.vanish.length == 0 || this.subTurn == 2)
+      // Special pass move of the king, or sentry pre-push: nothing to update
+      return;
+    const c = move.vanish[0].c;
+    const piece = move.vanish[0].p;
+    const firstRank = c == "w" ? V.size.x - 1 : 0;
+
+    if (piece == V.KING) {
+      this.kingPos[c][0] = move.appear[0].x;
+      this.kingPos[c][1] = move.appear[0].y;
+      this.castleFlags[c] = [V.size.y, V.size.y];
+      return;
+    }
+    // Update castling flags if rooks are moved
+    const oppCol = V.GetOppCol(c);
+    const oppFirstRank = V.size.x - 1 - firstRank;
+    if (
+      move.start.x == firstRank && //our rook moves?
+      this.castleFlags[c].includes(move.start.y)
+    ) {
+      const flagIdx = (move.start.y == this.castleFlags[c][0] ? 0 : 1);
+      this.castleFlags[c][flagIdx] = V.size.y;
+    } else if (
+      move.end.x == oppFirstRank && //we took opponent rook?
+      this.castleFlags[oppCol].includes(move.end.y)
+    ) {
+      const flagIdx = (move.end.y == this.castleFlags[oppCol][0] ? 0 : 1);
+      this.castleFlags[oppCol][flagIdx] = V.size.y;
+    }
+  }
+
+  undo(move) {
+    this.epSquares.pop();
+    this.disaggregateFlags(JSON.parse(move.flags));
+    V.UndoOnBoard(this.board, move);
+    // Decrement movesCount except if the move is a sentry push
+    if (!move.sentryPush) this.movesCount--;
+    if (this.subTurn == 2) this.subTurn = 1;
+    else {
+      this.turn = V.GetOppCol(this.turn);
+      if (move.sentryPush) this.subTurn = 2;
+    }
+    this.postUndo(move);
+  }
+
+  postUndo(move) {
+    super.postUndo(move);
+    this.sentryPush.pop();
+  }
+
   static get VALUES() {
     return Object.assign(
       { l: 4.8, s: 2.8, j: 3.8 }, //Jeff K. estimations
   static get VALUES() {
     return Object.assign(
       { l: 4.8, s: 2.8, j: 3.8 }, //Jeff K. estimations
index e47941b..372bc1e 100644 (file)
+// TODO: debug, and forbid self-capture of king.
+
 import { ChessRules } from "@/base_rules";
 import { ChessRules } from "@/base_rules";
+import { randInt } from "@/utils/alea";
 
 export class SynchroneRules extends ChessRules {
 
 export class SynchroneRules extends ChessRules {
-  // TODO: getNotation retourne "?" si turn == "w"
-  // ==> byrows disparait, juste "showAll" et "None".
-  //
-  // play: si turn == "w", enregistrer le coup (whiteMove),
-  // mais ne rien faire ==> résolution après le coup noir.
-  //
-  // ==> un coup sur deux (coups blancs) est "vide" du point de vue de l'exécution.
+  static get CanAnalyze() {
+    return true; //false;
+  }
+
+  static get ShowMoves() {
+    return "byrow";
+  }
+
+  static IsGoodFen(fen) {
+    if (!ChessRules.IsGoodFen(fen)) return false;
+    const fenParsed = V.ParseFen(fen);
+    // 5) Check whiteMove
+    if (
+      (
+        fenParsed.turn == "w" &&
+        // NOTE: do not check really JSON stringified move...
+        (!fenParsed.whiteMove || fenParsed.whiteMove == "-")
+      )
+      ||
+      (fenParsed.turn == "b" && fenParsed.whiteMove != "-")
+    ) {
+      return false;
+    }
+    return true;
+  }
+
+  static IsGoodEnpassant(enpassant) {
+    const epArray = enpassant.split(",");
+    if (![2, 3].includes(epArray.length)) return false;
+    epArray.forEach(epsq => {
+      if (epsq != "-") {
+        const ep = V.SquareToCoords(epsq);
+        if (isNaN(ep.x) || !V.OnBoard(ep)) return false;
+      }
+    });
+    return true;
+  }
+
+  static ParseFen(fen) {
+    const fenParts = fen.split(" ");
+    return Object.assign(
+      ChessRules.ParseFen(fen),
+      { whiteMove: fenParts[5] }
+    );
+  }
+
+  static GenRandInitFen(randomness) {
+    return ChessRules.GenRandInitFen(randomness).slice(0, -1) + "-,- -";
+  }
+
+  getFen() {
+    return super.getFen() + " " + this.getWhitemoveFen();
+  }
+
+  getFenForRepeat() {
+    return super.getFenForRepeat() + "_" + this.getWhitemoveFen();
+  }
+
+  setOtherVariables(fen) {
+    const parsedFen = V.ParseFen(fen);
+    this.setFlags(parsedFen.flags);
+    const epArray = parsedFen.enpassant.split(",");
+    this.epSquares = [];
+    epArray.forEach(epsq => this.epSquares.push(this.getEpSquare(epsq)));
+    super.scanKings(fen);
+    // Also init whiteMove
+    this.whiteMove =
+      parsedFen.whiteMove != "-"
+        ? JSON.parse(parsedFen.whiteMove)
+        : null;
+  }
+
+  // After undo(): no need to re-set INIT_COL_KING
+  scanKings() {
+    this.kingPos = { w: [-1, -1], b: [-1, -1] };
+    for (let i = 0; i < V.size.x; i++) {
+      for (let j = 0; j < V.size.y; j++) {
+        if (this.getPiece(i, j) == V.KING)
+          this.kingPos[this.getColor(i, j)] = [i, j];
+      }
+    }
+  }
+
+  getEnpassantFen() {
+    const L = this.epSquares.length;
+    let res = "";
+    const start = L - 2 - (this.turn == 'b' ? 1 : 0);
+    for (let i=start; i < L; i++) {
+      if (!this.epSquares[i]) res += "-,";
+      else res += V.CoordsToSquare(this.epSquares[i]) + ",";
+    }
+    return res.slice(0, -1);
+  }
+
+  getWhitemoveFen() {
+    if (!this.whiteMove) return "-";
+    return JSON.stringify({
+      start: this.whiteMove.start,
+      end: this.whiteMove.end,
+      appear: this.whiteMove.appear,
+      vanish: this.whiteMove.vanish
+    });
+  }
+
+  // NOTE: lazy unefficient implementation (for now. TODO?)
+  getPossibleMovesFrom([x, y]) {
+    const moves = this.getAllValidMoves();
+    return moves.filter(m => {
+      return m.start.x == x && m.start.y == y;
+    });
+  }
+
+  getCaptures(x, y) {
+    const color = this.turn;
+    const sliderAttack = (xx, yy, allowedSteps) => {
+      const deltaX = xx - x,
+            absDeltaX = Math.abs(deltaX);
+      const deltaY = yy - y,
+            absDeltaY = Math.abs(deltaY);
+      const step = [ deltaX / absDeltaX || 0, deltaY / absDeltaY || 0 ];
+      if (
+        // Check that the step is a priori valid:
+        (absDeltaX != absDeltaY && deltaX != 0 && deltaY != 0) ||
+        allowedSteps.every(st => st[0] != step[0] || st[1] != step[1])
+      ) {
+        return null;
+      }
+      let sq = [ x + step[0], y + step[1] ];
+      while (sq[0] != xx || sq[1] != yy) {
+        // NOTE: no need to check OnBoard in this special case
+        if (this.board[sq[0]][sq[1]] != V.EMPTY) return null;
+        sq[0] += step[0];
+        sq[1] += step[1];
+      }
+      return this.getBasicMove([xx, yy], [x, y]);
+    };
+    // Can I take on the square [x, y] ?
+    // If yes, return the (list of) capturing move(s)
+    let moves = [];
+    for (let i=0; i<8; i++) {
+      for (let j=0; j<8; j++) {
+        if (this.getColor(i, j) == color) {
+          switch (this.getPiece(i, j)) {
+            case V.PAWN: {
+              // Pushed pawns move as enemy pawns
+              const shift = (color == 'w' ? 1 : -1);
+              if (x + shift == i && Math.abs(y - j) == 1)
+                moves.push(this.getBasicMove([i, j], [x, y]));
+              break;
+            }
+            case V.KNIGHT: {
+              const deltaX = Math.abs(i - x);
+              const deltaY = Math.abs(j - y);
+              if (
+                deltaX + deltaY == 3 &&
+                [1, 2].includes(deltaX) &&
+                [1, 2].includes(deltaY)
+              ) {
+                moves.push(this.getBasicMove([i, j], [x, y]));
+              }
+              break;
+            }
+            case V.KING:
+              if (Math.abs(i - x) <= 1 && Math.abs(j - y) <= 1)
+                moves.push(this.getBasicMove([i, j], [x, y]));
+              break;
+            case V.ROOK: {
+              const mv = sliderAttack(i, j, V.steps[V.ROOK]);
+              if (!!mv) moves.push(mv);
+              break;
+            }
+            case V.BISHOP: {
+              const mv = sliderAttack(i, j, V.steps[V.BISHOP]);
+              if (!!mv) moves.push(mv);
+              break;
+            }
+            case V.QUEEN: {
+              const mv = sliderAttack(
+                i, j, V.steps[V.ROOK].concat(V.steps[V.BISHOP]));
+              if (!!mv) moves.push(mv);
+              break;
+            }
+          }
+        }
+      }
+    }
+    return this.filterValid(moves);
+  }
+
+  getAllValidMoves() {
+    const color = this.turn;
+    // 0) Generate our possible moves
+    let myMoves = super.getAllValidMoves();
+    // Lookup table to quickly decide if a move is already in list:
+    let moveSet = {};
+    const getMoveHash = (move) => {
+      return (
+        "m" + move.start.x + move.start.y +
+              move.end.x + move.end.y +
+              // Also use m.appear[0].p for pawn promotions
+              move.appear[0].p
+      );
+    };
+    myMoves.forEach(m => moveSet[getMoveHash(m)] = true);
+    // 1) Generate all opponent's moves
+    this.turn = V.GetOppCol(color);
+    const oppMoves = super.getAllValidMoves();
+    this.turn = color;
+    // 2) Play each opponent's move, and see if captures are possible:
+    // --> capturing moving unit only (otherwise some issues)
+    oppMoves.forEach(m => {
+      V.PlayOnBoard(this.board, m);
+      // Can I take on [m.end.x, m.end.y] ?
+      // If yes and not already in list, add it (without the capturing part)
+      let capturingMoves = this.getCaptures(m.end.x, m.end.y);
+      capturingMoves.forEach(cm => {
+        const cmHash = getMoveHash(cm);
+        if (!moveSet[cmHash]) {
+          // The captured unit hasn't moved yet, so temporarily cancel capture
+          cm.vanish.pop();
+          // If m is itself a capturing move: then replace by self-capture
+          if (m.vanish.length == 2) cm.vanish.push(m.vanish[1]);
+          myMoves.push(cm);
+          moveSet[cmHash] = true;
+        }
+      });
+      V.UndoOnBoard(this.board, m);
+    });
+    return myMoves;
+  }
+
+  filterValid(moves) {
+    if (moves.length == 0) return [];
+    // filterValid can be called when it's "not our turn":
+    const color = moves[0].vanish[0].c;
+    return moves.filter(m => {
+      const piece = m.vanish[0].p;
+      if (piece == V.KING) {
+        this.kingPos[color][0] = m.appear[0].x;
+        this.kingPos[color][1] = m.appear[0].y;
+      }
+      V.PlayOnBoard(this.board, m);
+      let res = !this.underCheck(color);
+      V.UndoOnBoard(this.board, m);
+      if (piece == V.KING) this.kingPos[color] = [m.start.x, m.start.y];
+      return res;
+    });
+  }
+
+  atLeastOneMove(color) {
+    const curTurn = this.turn;
+    this.turn = color;
+    const res = super.atLeastOneMove();
+    this.turn = curTurn;
+    return res;
+  }
+
+  // White and black (partial) moves were played: merge
+  resolveSynchroneMove(move) {
+    const m1 = this.whiteMove;
+    const m2 = move;
+    // For PlayOnBoard (no need for start / end, irrelevant)
+    let smove = {
+      appear: [],
+      vanish: [
+        m1.vanish[0],
+        m2.vanish[0]
+      ]
+    };
+    if ((m1.end.x != m2.end.x) || (m1.end.y != m2.end.y)) {
+      // Easy case: two independant moves (which may (self-)capture)
+      smove.appear.push(m1.appear[0]);
+      smove.appear.push(m2.appear[0]);
+      // "Captured" pieces may have moved:
+      if (
+        m1.vanish.length == 2 &&
+        (
+          m2.end.x != m1.vanish[1].x ||
+          m2.end.y != m1.vanish[1].y
+        )
+      ) {
+        smove.vanish.push(m1.vanish[1]);
+      }
+      if (
+        m2.vanish.length == 2 &&
+        (
+          m1.end.x != m2.vanish[1].x ||
+          m1.end.y != m2.vanish[1].y
+        )
+      ) {
+        smove.vanish.push(m2.vanish[1]);
+      }
+    } else {
+      // Collision:
+      if (m1.vanish.length == 1 && m2.vanish.length == 1) {
+        // Easy case: both disappear except if one is a king
+        const p1 = m1.vanish[0].p;
+        const p2 = m2.vanish[0].p;
+        if ([p1, p2].includes(V.KING)) {
+          smove.appear.push({
+            x: m1.end.x,
+            y: m1.end.y,
+            p: V.KING,
+            c: (p1 == V.KING ? 'w' : 'b')
+          });
+        }
+      } else {
+        // One move is a self-capture and the other a normal capture:
+        // only the self-capture appears
+        console.log(m1);
+        console.log(m2);
+        const selfCaptureMove =
+          m1.vanish[1].c == m1.vanish[0].c
+            ? m1
+            : m2;
+        smove.appear.push({
+          x: m1.end.x,
+          y: m1.end.y,
+          p: selfCaptureMove.appear[0].p,
+          c: selfCaptureMove.vanish[0].c
+        });
+      }
+    }
+    return smove;
+  }
+
+  play(move) {
+    move.flags = JSON.stringify(this.aggregateFlags()); //save flags (for undo)
+    this.epSquares.push(this.getEpSquare(move));
+    // Do not play on board (would reveal the move...)
+    this.turn = V.GetOppCol(this.turn);
+    this.movesCount++;
+    this.postPlay(move);
+  }
+
+  updateCastleFlags(move) {
+    const firstRank = { 'w': V.size.x - 1, 'b': 0 };
+    move.appear.concat(move.vanish).forEach(av => {
+      for (let c of ['w', 'b']) {
+        if (av.x == firstRank[c] && this.castleFlags[c].includes(av.y)) {
+          const flagIdx = (av.y == this.castleFlags[c][0] ? 0 : 1);
+          this.castleFlags[c][flagIdx] = 8;
+        }
+      }
+    });
+  }
+
+  postPlay(move) {
+    if (this.turn == 'b') {
+      // NOTE: whiteMove is used read-only, so no need to copy
+      this.whiteMove = move;
+      return;
+    }
+
+    // A full turn just ended:
+    const smove = this.resolveSynchroneMove(move);
+    V.PlayOnBoard(this.board, smove);
+    this.whiteMove = null;
+
+    // Update king position + flags
+    let kingAppear = { 'w': false, 'b': false };
+    for (let i=0; i<smove.appear.length; i++) {
+      if (smove.appear[i].p == V.KING) {
+        const c = smove.appear[i].c;
+        kingAppear[c] = true;
+        this.kingPos[c][0] = smove.appear[i].x;
+        this.kingPos[c][1] = smove.appear[i].y;
+      }
+    }
+    for (let i=0; i<smove.vanish.length; i++) {
+      if (smove.vanish[i].p == V.KING) {
+        const c = smove.vanish[i].c;
+        if (!kingAppear[c]) {
+          this.kingPos[c][0] = -1;
+          this.kingPos[c][1] = -1;
+        }
+        break;
+      }
+    }
+    this.updateCastleFlags(smove);
+    move.smove = smove;
+  }
+
+  undo(move) {
+    this.epSquares.pop();
+    this.disaggregateFlags(JSON.parse(move.flags));
+    if (this.turn == 'w')
+      // Back to the middle of the move
+      V.UndoOnBoard(this.board, move.smove);
+    this.turn = V.GetOppCol(this.turn);
+    this.movesCount--;
+    this.postUndo(move);
+  }
+
+  postUndo(move) {
+    if (this.turn == 'w')
+      // Reset king positions: scan board
+      this.scanKings();
+  }
+
+  getCheckSquares(color) {
+    if (color == 'b') return [];
+    let res = [];
+    if (this.underCheck('w'))
+      res.push(JSON.parse(JSON.stringify(this.kingPos['w'])));
+    if (this.underCheck('b'))
+      res.push(JSON.parse(JSON.stringify(this.kingPos['b'])));
+    return res;
+  }
+
+  getCurrentScore() {
+    if (this.turn == 'b')
+      // Turn (white + black) not over yet
+      return "*";
+    // Was a king captured?
+    if (this.kingPos['w'][0] < 0) return "0-1";
+    if (this.kingPos['b'][0] < 0) return "1-0";
+    const whiteCanMove = this.atLeastOneMove('w');
+    const blackCanMove = this.atLeastOneMove('b');
+    if (whiteCanMove && blackCanMove) return "*";
+    // Game over
+    const whiteInCheck = this.underCheck('w');
+    const blackInCheck = this.underCheck('b');
+    if (
+      (whiteCanMove && !this.underCheck('b')) ||
+      (blackCanMove && !this.underCheck('w'))
+    ) {
+      return "1/2";
+    }
+    // Checkmate: could be mutual
+    if (!whiteCanMove && !blackCanMove) return "1/2";
+    return (whiteCanMove ? "1-0" : "0-1");
+  }
+
+  getComputerMove() {
+    const maxeval = V.INFINITY;
+    const color = this.turn;
+    let moves = this.getAllValidMoves();
+    if (moves.length == 0)
+      // TODO: this situation should not happen
+      return null;
+
+    if (Math.random() < 0.5)
+      // Return a random move
+      return moves[randInt(moves.length)];
+
+    // Rank moves at depth 1:
+    // try to capture something (not re-capturing)
+    moves.forEach(m => {
+      V.PlayOnBoard(this.board, m);
+      m.eval = this.evalPosition();
+      V.UndoOnBoard(this.board, m);
+    });
+    moves.sort((a, b) => {
+      return (color == "w" ? 1 : -1) * (b.eval - a.eval);
+    });
+    let candidates = [0];
+    for (let i = 1; i < moves.length && moves[i].eval == moves[0].eval; i++)
+      candidates.push(i);
+    return moves[candidates[randInt(candidates.length)]];
+  }
 };
 };
index ce30d65..68910e7 100644 (file)
@@ -34,7 +34,7 @@ export class TwokingsRules extends CoregalRules {
   }
 
   // Not scanning king positions. In this variant, scan the board everytime.
   }
 
   // Not scanning king positions. In this variant, scan the board everytime.
-  scanKings(fen) {}
+  scanKings() {}
 
   getCheckSquares(color) {
     let squares = [];
 
   getCheckSquares(color) {
     let squares = [];
index 484b804..557a2df 100644 (file)
@@ -96,7 +96,7 @@ export default {
     },
     adjustFenSize: function() {
       let fenInput = document.getElementById("fen");
     },
     adjustFenSize: function() {
       let fenInput = document.getElementById("fen");
-      fenInput.style.width = (this.curFen.length+1) + "ch";
+      fenInput.style.width = (this.curFen.length+3) + "ch";
     },
     tryGotoFen: function() {
       if (V.IsGoodFen(this.curFen)) {
     },
     tryGotoFen: function() {
       if (V.IsGoodFen(this.curFen)) {
@@ -107,3 +107,9 @@ export default {
   }
 };
 </script>
   }
 };
 </script>
+
+<style lang="sass" scoped=true>
+input#fen
+  // Use a Monospace font for input FEN width adjustment
+  font-family: "Fira Code"
+</style>