Will be used for variants with custom non-rectangular board (Hex, at least)
Or, with other board shapes (see greenchess.net for example)
-Merge variants 1, 2 (3) into one with sub-variant selection when starting a game (New Game + vs engine + analyse)
-E.g. Checkered 1 & 2 into one, and so on.
-Need additional field in variant code... in a generic way (radiobutton or select or checkbox?)
+debug import game + load
+
+TODEBUG: Avalanche computer play from here
+game.fen = "r2q1bnr/3pp3/n3k1p1/6Pp/3p1B1P/p5R1/1p6/4K1NR w 26 ihii 0";
+game.fenStart = "r2q1bnr/3pp3/n3k1p1/6Pp/3p1B1P/p5R1/1p6/4K1NR w 26 ihii 0";
+game.mycolor = 'w';
+Bd6,b1 then black promotes and win, but UI freezes.
+
+Merge Orda + Empire + Hoppelpoppel + Newzealand getSlideNJumpMoves() into base_rules.js
+=> allow to simplify getPawnMoves in RoyalRace (and some getXMoves in Shatranj)
+
+Option "free placement" in Hidden
#New variants:
Chessplode
https://brainking.com/fr/GameRules?tp=128 Massacre Chess
-CWDA : need game options (also useful at least for Monster)
PizzaKings https://www.chessvariants.com/unequal.dir/pizza-kings.html
https://en.m.wikipedia.org/wiki/Chess_with_different_armies#Pizza_Kings%5B11%5D_(John_Lawson)
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="45"
+ id="svg3128"
+ sodipodi:version="0.32"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+ version="1.0"
+ sodipodi:docname="bc.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3130">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 22.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="45 : 22.5 : 1"
+ inkscape:persp3d-origin="22.5 : 15 : 1"
+ id="perspective15" />
+ <inkscape:perspective
+ id="perspective12"
+ inkscape:persp3d-origin="22.5 : 15 : 1"
+ inkscape:vp_z="45 : 22.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 22.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313709"
+ inkscape:cx="21.843794"
+ inkscape:cy="17.466685"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ height="45px"
+ width="45px"
+ inkscape:grid-points="true"
+ showgrid="true"
+ inkscape:window-width="960"
+ inkscape:window-height="1060"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0"
+ originy="0"
+ spacingx="0.5"
+ spacingy="0.5"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3133">
+ <rdf:RDF>
+ <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>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 37.5,37.5 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 C 11.52378,39.180439 18.926218,40.754342 22.65,39.15 c 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
+ id="path4582"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 30.9,33.1 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
+ id="path4584"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 30.9,30.9 H 14.4"
+ id="path4590"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g3323"
+ inkscape:label="Layer 1"
+ transform="matrix(-0.84196464,0,0,-0.84196464,38.826174,36.60001)"
+ style="fill:#000000;fill-opacity:1">
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path3491"
+ d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="csccccccccccc"
+ id="path3495"
+ d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <circle
+ transform="rotate(180,21.764479,22)"
+ id="path3499"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="8.5"
+ cy="23.5"
+ r="0.5" />
+ <ellipse
+ transform="rotate(-149.99999,24.024104,20.986505)"
+ id="path3501"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="14.5"
+ cy="15.5"
+ rx="0.5"
+ ry="1.5" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path8049"
+ d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ <path
+ style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.64999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 14.4,30.9 H 30.9"
+ id="path3369"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 1#1"
+ style="display:inline" />
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="177.17"
+ height="177.17"
+ shape-rendering="geometricPrecision"
+ image-rendering="optimizeQuality"
+ fill-rule="evenodd"
+ clip-rule="evenodd"
+ viewBox="0 0 50 50"
+ version="1.1"
+ id="svg974"
+ sodipodi:docname="ba.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata978">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <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="namedview976"
+ showgrid="false"
+ inkscape:zoom="2.3931818"
+ inkscape:cx="11.490991"
+ inkscape:cy="50.539966"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg974"
+ showguides="false"
+ inkscape:snap-nodes="false" />
+ <defs
+ id="defs968">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1002">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop998" />
+ <stop
+ style="stop-color:#dcdbdb;stop-opacity:1"
+ offset="1"
+ id="stop1000" />
+ </linearGradient>
+ <linearGradient
+ id="0"
+ x1="21.376"
+ x2="77.64"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop963" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop965" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1002"
+ id="linearGradient1004"
+ x1="-41.790333"
+ y1="22.581646"
+ x2="-15.82877"
+ y2="22.581646"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient5398"
+ x1="0"
+ y1="0"
+ x2="0"
+ y2="1">
+ <stop
+ offset="20%"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop5394" />
+ <stop
+ offset="100%"
+ style="stop-color:#4d4d4d;stop-opacity:1"
+ id="stop5396" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(0.47111842,-0.19973575)"
+ id="0-1"
+ x1="21.253"
+ y1="37.591999"
+ x2="77.639999"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop3285" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop3287" />
+ </linearGradient>
+ </defs>
+ <g
+ id="g5357"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1"
+ transform="matrix(0.84130849,0,0,0.84130849,-76.526422,18.776438)">
+ <path
+ sodipodi:nodetypes="cccccccccccccccsccsc"
+ inkscape:connector-curvature="0"
+ id="path5349"
+ d="m 119.66608,20.578823 c 0.12511,0.773672 0.40427,1.44388 1.3,1.7 11.23011,-0.424319 16.82956,-5.233235 20.30001,-11.7 l 0.2,-2.099999 c -2.10707,-8.89280401 -8.15113,-13.4502442 -16.2,-15.8 -4.40015,-0.5317426 -7.59668,1.3815851 -10.20001,4.5 -2.59354,2.64077835 -4.39616,5.9439949 -5.3,10 -0.9084,3.60641 -5.79067,1.6990508 -4.9,-0.6 2.76583,-4.0566968 11.00069,-10.7605086 4.9,-12.3 -8.75831,-2.0518262 -7.05798,4.7061225 -5.2,6.20000004 1.23982,-0.5457366 2.00197,-1.22280981 2.4,-2.00000004 -0.25951,-0.4357328 -0.98217,-0.8162564 0,-1.4 0.5387,0.045976 0.81918,0.2856122 1,0.6 0,1 0.50403,1.1455069 -3.6,4 -7.640521,5.2325602 -3.73403,16.328533 2.94302,17.405035 2.93812,0.458135 3.4042,1.08673 5.28907,0.933469 0.49515,-0.04026 1.25166,0.522864 1.96791,0.561495 0.84449,-0.337075 4.5865,-0.641651 3.83596,-0.600198 0.37015,0.007 0.83701,-0.226033 1.09094,-0.03707 0.11828,0.08802 0.12726,0.435864 0.1731,0.637268 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path5353"
+ d="m 109.56608,17.578823 c -1.32838,4.066443 -4.04985,6.321863 -6.6,8.8 -0.20576,0.304421 0.14574,0.397532 1,0.3 3.90473,-1.863513 6.85963,-4.360243 8.1,-8 -0.78642,-0.41302 -1.31194,-1.08384 -2.5,-1.1 z"
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ </g>
+ <g
+ id="g14577"
+ transform="matrix(0.95,0,0,0.95,1.3708726,1.7010613)">
+ <rect
+ y="4.245285"
+ x="23.113207"
+ height="40.212261"
+ width="3.7735846"
+ id="rect14571"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <rect
+ transform="rotate(90)"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84308159;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect14573"
+ width="3.7735846"
+ height="47.641506"
+ x="23.231133"
+ y="-48.820751" />
+ </g>
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="path14587"
+ sodipodi:sides="64"
+ sodipodi:cx="25"
+ sodipodi:cy="44.457546"
+ sodipodi:r1="3.9412203"
+ sodipodi:r2="3.9364729"
+ sodipodi:arg1="0.78539816"
+ sodipodi:arg2="0.83448555"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 27.786864,47.24441 -0.28658,0.259741 -0.310659,0.2304 -0.331747,0.198841 -0.349638,0.165367 -0.364164,0.1303 -0.375182,0.09398 -0.382587,0.05675 L 25,48.398767 l -0.386307,-0.01898 -0.382587,-0.05675 -0.375182,-0.09398 -0.364164,-0.1303 -0.349638,-0.165367 -0.331747,-0.198841 -0.310659,-0.2304 -0.28658,-0.259741 -0.25974,-0.28658 -0.230401,-0.310659 -0.198841,-0.331746 -0.165367,-0.349639 -0.1303,-0.364164 -0.09398,-0.375182 -0.05675,-0.382587 -0.01898,-0.386307 0.01898,-0.386307 0.05675,-0.382587 0.09398,-0.375182 0.1303,-0.364163 0.165367,-0.349639 0.198841,-0.331746 0.230401,-0.310659 0.25974,-0.28658 0.28658,-0.259741 0.310659,-0.230401 0.331747,-0.198841 0.349638,-0.165367 0.364164,-0.130299 0.375182,-0.09398 0.382587,-0.05675 L 25,40.516326 l 0.386307,0.01898 0.382587,0.05675 0.375182,0.09398 0.364164,0.130299 0.349638,0.165367 0.331747,0.198841 0.310659,0.230401 0.28658,0.259741 0.25974,0.28658 0.230401,0.310659 0.198841,0.331746 0.165367,0.349639 0.1303,0.364163 0.09398,0.375182 0.05675,0.382587 0.01898,0.386307 -0.01898,0.386307 -0.05675,0.382587 -0.09398,0.375182 -0.1303,0.364164 -0.165367,0.349639 -0.198841,0.331746 -0.230401,0.310659 z"
+ transform="matrix(0,0.95,-0.95,0,47.806603,1.7010613)" />
+ <path
+ style="fill:#ffffff;stroke:none;stroke-width:0.84130847px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 9.0513062,23.758841 c -1.5224694,5.64797 0.8106772,8.495757 4.4978728,9.890942 l 0.420654,-0.673047 C 8.3833763,30.233472 9.3915535,25.423457 9.2978739,24.11563 9.2827431,23.904424 9.150848,23.762548 9.0513062,23.758841 Z"
+ id="path5359"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccsc" />
+ <path
+ style="fill:#ffffff;stroke-width:0.76650214"
+ d="m 19.617688,23.128129 c -0.279006,-0.14257 -0.415444,-0.213854 -0.415444,-0.213854 -0.382484,-0.149468 -0.499759,-0.428474 -0.363322,-0.83702 0.149468,-0.376353 0.441505,-0.505892 0.876112,-0.376353 1.492379,0.544983 2.524858,1.548334 3.096668,3.004688 0.09045,0.415444 -0.05825,0.700584 -0.454535,0.85695 -0.395515,0.123407 -0.662258,-0.01303 -0.797928,-0.421577 -0.104246,-0.213853 -0.17553,-0.357189 -0.226886,-0.415443 -0.142569,0.110376 -0.324229,0.187793 -0.551881,0.226883 -0.774167,0.123407 -1.226403,-0.213853 -1.34981,-1.025579 -0.03909,-0.279006 0.02606,-0.544983 0.188559,-0.797929"
+ id="path3879"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:1.29790962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 24.329544,34.771886 c 1.291628,-3.108895 2.461658,-6.045308 2.10449,-9.095101 -0.177235,-1.513395 -0.549622,-2.056607 -0.199499,-3.345737 0.44569,-1.640989 1.539073,-3.115915 2.735886,-4.344174"
+ id="path7508"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssc" />
+ <path
+ style="fill:none;stroke:#ffffff;stroke-width:1.29790962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 18.525608,34.64224 c 0.830395,-0.939643 0.643587,-0.695011 1.204359,-1.891915"
+ id="path7512"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="path14581"
+ sodipodi:sides="64"
+ sodipodi:cx="25.120873"
+ sodipodi:cy="6.1821945"
+ sodipodi:r1="3.7441592"
+ sodipodi:r2="3.7396493"
+ sodipodi:arg1="0.78539816"
+ sodipodi:arg2="0.83448555"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="M 27.768393,8.8297151 27.496142,9.0764689 27.201016,9.2953493 26.885857,9.4842483 26.5537,9.6413468 26.207745,9.7651317 25.851322,9.854411 25.487864,9.9083248 25.120873,9.9263539 24.753881,9.9083248 24.390423,9.854411 24.034,9.7651317 23.688045,9.6413468 23.355888,9.4842484 23.040729,9.2953493 22.745603,9.0764689 22.473352,8.8297151 22.226598,8.5574642 22.007718,8.2623381 21.818819,7.9471792 21.66172,7.6150224 21.537936,7.2690668 21.448656,6.912644 l -0.05391,-0.3634575 -0.01803,-0.3669918 0.01803,-0.3669918 0.05391,-0.3634574 0.08928,-0.3564228 0.123784,-0.3459557 0.157099,-0.3321567 0.188899,-0.315159 0.21888,-0.295126 0.246754,-0.272251 0.272251,-0.2467538 0.295126,-0.2188804 0.315159,-0.188899 0.332157,-0.1570985 0.345955,-0.1237849 0.356423,-0.089279 0.363458,-0.053914 0.366991,-0.018029 0.366992,0.018029 0.363458,0.053914 0.356423,0.089279 0.345955,0.1237849 0.332157,0.1570985 0.315159,0.188899 0.295126,0.2188804 0.272251,0.2467538 0.246754,0.2722509 0.21888,0.2951261 0.188899,0.315159 0.157099,0.3321567 0.123784,0.3459556 0.08928,0.3564229 0.05391,0.3634574 0.01803,0.3669918 -0.01803,0.3669918 -0.05391,0.3634574 -0.08928,0.3564228 -0.123784,0.3459557 -0.157099,0.3321567 -0.188899,0.315159 -0.21888,0.2951261 z" />
+ <path
+ d="m 27.768393,46.58325 -0.272251,0.246754 -0.295126,0.218881 -0.315159,0.188899 -0.332157,0.157098 -0.345955,0.123785 -0.356423,0.08928 -0.363458,0.05391 -0.366991,0.01803 -0.366992,-0.01803 -0.363458,-0.05391 -0.356423,-0.08928 -0.345955,-0.123785 -0.332157,-0.157098 -0.315159,-0.188899 -0.295126,-0.218881 -0.272251,-0.246754 -0.246754,-0.272251 -0.21888,-0.295126 -0.188899,-0.315159 -0.157099,-0.332156 -0.123784,-0.345956 -0.08928,-0.356423 -0.05391,-0.363457 -0.01803,-0.366992 0.01803,-0.366992 0.05391,-0.363457 0.08928,-0.356423 0.123784,-0.345956 0.157099,-0.332156 0.188899,-0.315159 0.21888,-0.295126 0.246754,-0.272251 0.272251,-0.246754 0.295126,-0.218881 0.315159,-0.188899 0.332157,-0.157098 0.345955,-0.123785 0.356423,-0.08928 0.363458,-0.05391 0.366991,-0.01803 0.366992,0.01803 0.363458,0.05391 0.356423,0.08928 0.345955,0.123785 0.332157,0.157098 0.315159,0.188899 0.295126,0.218881 0.272251,0.246754 0.246754,0.272251 0.21888,0.295126 0.188899,0.315159 0.157099,0.332156 0.123784,0.345956 0.08928,0.356423 0.05391,0.363457 0.01803,0.366992 -0.01803,0.366992 -0.05391,0.363457 -0.08928,0.356423 -0.123784,0.345956 -0.157099,0.332156 -0.188899,0.315159 -0.21888,0.295126 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="0.83448555"
+ sodipodi:arg1="0.78539816"
+ sodipodi:r2="3.7396493"
+ sodipodi:r1="3.7441592"
+ sodipodi:cy="43.935729"
+ sodipodi:cx="25.120873"
+ sodipodi:sides="64"
+ id="path14583"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ sodipodi:type="star" />
+ <path
+ d="M 27.786864,7.5038459 27.500284,7.7635868 27.189625,7.9939873 26.857878,8.1928283 26.50824,8.3581951 26.144076,8.488495 25.768894,8.5824732 25.386307,8.6392246 25,8.6582026 24.613693,8.6392246 24.231106,8.5824732 23.855924,8.488495 23.49176,8.3581951 23.142122,8.1928283 22.810375,7.9939873 22.499716,7.7635869 22.213136,7.503846 21.953396,7.2172661 21.722995,6.906607 21.524154,6.5748608 21.358787,6.2252221 l -0.1303,-0.3641639 -0.09398,-0.3751819 -0.05675,-0.3825868 -0.01898,-0.3863071 0.01898,-0.3863072 0.05675,-0.3825868 0.09398,-0.3751819 0.1303,-0.3641638 0.165367,-0.3496387 0.198841,-0.3317463 0.230401,-0.310659 0.25974,-0.2865799 0.28658,-0.2597409 0.310659,-0.2304004 0.331747,-0.1988411 0.349638,-0.1653668 0.364164,-0.13029989 0.375182,-0.0939782 0.382587,-0.0567514 L 25,0.77576208 l 0.386307,0.018978 0.382587,0.0567514 0.375182,0.0939782 0.364164,0.1302999 0.349638,0.1653668 0.331747,0.1988411 0.310659,0.2304004 0.28658,0.2597409 0.25974,0.2865799 0.230401,0.310659 0.198841,0.3317463 0.165367,0.3496386 0.1303,0.3641639 0.09398,0.3751819 0.05675,0.3825868 0.01898,0.3863072 -0.01898,0.3863071 -0.05675,0.3825868 -0.09398,0.3751819 -0.1303,0.3641639 -0.165367,0.3496386 -0.198841,0.3317463 -0.230401,0.310659 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="0.83448555"
+ sodipodi:arg1="0.78539816"
+ sodipodi:r2="3.9364729"
+ sodipodi:r1="3.9412203"
+ sodipodi:cy="4.7169824"
+ sodipodi:cx="25"
+ sodipodi:sides="64"
+ id="path14585"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ sodipodi:type="star"
+ transform="matrix(0,0.95,-0.95,0,49.262972,1.7010613)" />
+</svg>
--- /dev/null
+<?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="svg16"
+ sodipodi:docname="br.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata22">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs20" />
+ <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="namedview18"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg16" />
+ <path
+ style="color:#000000"
+ d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 564,460 V 358 h 920 v 102 z m 460,1092 H 512 v -46 l 73,-55 h 879 l 71,55 v 46 z m 0,-169 H 674 l 60,-47 v -57 h 580 v 57 l 60,47 z m 0,-546 H 734 v -46 l -60,-58 h 700 l -60,58 v 46 z m 0,-172 H 610 l -46,-43 v -58 h 920 v 58 l -46,43 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g14"
+ transform="matrix(1,0,0,-1,0,2048)">
+ <path
+ style="color:#000000"
+ d="m 564,1588 v 102 h 920 v -102 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="M 1024,496 H 512 v 46 l 73,55 h 879 l 71,-55 v -46 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="M 1024,665 H 674 l 60,47 v 57 h 580 v -57 l 60,-47 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="M 1024,1211 H 734 v 46 l -60,58 h 700 l -60,-58 v -46 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="M 1024,1383 H 610 l -46,43 v 58 h 920 v -58 l -46,-43 z"
+ display="block"
+ id="path12" />
+ </g>
+</svg>
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="177.17"
- height="177.17"
- shape-rendering="geometricPrecision"
- image-rendering="optimizeQuality"
- fill-rule="evenodd"
- clip-rule="evenodd"
- viewBox="0 0 50 50"
+ height="100%"
+ width="100%"
version="1.1"
- id="svg974"
- sodipodi:docname="ba.svg"
- inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ viewBox="0 0 2048 2048"
+ id="svg16"
+ sodipodi:docname="bh.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
<metadata
- id="metadata978">
+ id="metadata22">
<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 />
</cc:Work>
</rdf:RDF>
</metadata>
+ <defs
+ id="defs20" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:window-width="1920"
+ inkscape:window-width="960"
inkscape:window-height="1060"
- id="namedview976"
+ id="namedview18"
showgrid="false"
- inkscape:zoom="2.3931818"
- inkscape:cx="11.490991"
- inkscape:cy="50.539966"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
- inkscape:current-layer="svg974"
- showguides="false"
- inkscape:snap-nodes="false" />
- <defs
- id="defs968">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient1002">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop998" />
- <stop
- style="stop-color:#dcdbdb;stop-opacity:1"
- offset="1"
- id="stop1000" />
- </linearGradient>
- <linearGradient
- id="0"
- x1="21.376"
- x2="77.64"
- gradientUnits="userSpaceOnUse">
- <stop
- stop-color="#fff"
- id="stop963" />
- <stop
- offset="1"
- stop-color="#fff"
- stop-opacity="0"
- id="stop965" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient1002"
- id="linearGradient1004"
- x1="-41.790333"
- y1="22.581646"
- x2="-15.82877"
- y2="22.581646"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient5398"
- x1="0"
- y1="0"
- x2="0"
- y2="1">
- <stop
- offset="20%"
- style="stop-color:#000000;stop-opacity:1"
- id="stop5394" />
- <stop
- offset="100%"
- style="stop-color:#4d4d4d;stop-opacity:1"
- id="stop5396" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(0.47111842,-0.19973575)"
- id="0-1"
- x1="21.253"
- y1="37.591999"
- x2="77.639999"
- y2="37.469002"
- gradientUnits="userSpaceOnUse">
- <stop
- stop-color="#fff"
- id="stop3285" />
- <stop
- offset="1"
- stop-color="#fff"
- stop-opacity="0"
- id="stop3287" />
- </linearGradient>
- </defs>
+ inkscape:current-layer="svg16"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1290,564.11538 -42,102 q -102,22 -224,22 -121,0 -222,-22 l -42,-101 q 124,31 264,31 138,0 266,-32 z m -84,206 -29,70 v 27 q -76,11 -153,11 -75,0 -152,-11 l -1,-27 -27,-70 q 85,15 180,15 96,0 182,-15 z m -35,-378 q -40,30 -80,95 h -32 q 0,-49 23,-95 z m -206,0 q 23,49 23,95 h -32 q -39,-64 -81,-95 z m 59,-18 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m -37,744.00002 v -85 q 0,-37.00002 37,-37.00002 37,0 37,37.00002 v 86 h 90 q 35,0 35,36 0,36 -35,36 h -90 v 90 q 0,37 -37,37 -37,0 -37,-37 v -90 h -88 q -35,0 -35,-36 0,-36 35,-36 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
<g
- id="g5357"
- style="opacity:1;fill:#1f1a17;fill-opacity:1"
- transform="matrix(0.84130849,0,0,0.84130849,-76.526422,18.776438)">
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g14"
+ transform="matrix(1,0,0,-1,0,2030.1154)">
<path
- sodipodi:nodetypes="cccccccccccccccsccsc"
- inkscape:connector-curvature="0"
- id="path5349"
- d="m 119.66608,20.578823 c 0.12511,0.773672 0.40427,1.44388 1.3,1.7 11.23011,-0.424319 16.82956,-5.233235 20.30001,-11.7 l 0.2,-2.099999 c -2.10707,-8.89280401 -8.15113,-13.4502442 -16.2,-15.8 -4.40015,-0.5317426 -7.59668,1.3815851 -10.20001,4.5 -2.59354,2.64077835 -4.39616,5.9439949 -5.3,10 -0.9084,3.60641 -5.79067,1.6990508 -4.9,-0.6 2.76583,-4.0566968 11.00069,-10.7605086 4.9,-12.3 -8.75831,-2.0518262 -7.05798,4.7061225 -5.2,6.20000004 1.23982,-0.5457366 2.00197,-1.22280981 2.4,-2.00000004 -0.25951,-0.4357328 -0.98217,-0.8162564 0,-1.4 0.5387,0.045976 0.81918,0.2856122 1,0.6 0,1 0.50403,1.1455069 -3.6,4 -7.640521,5.2325602 -3.73403,16.328533 2.94302,17.405035 2.93812,0.458135 3.4042,1.08673 5.28907,0.933469 0.49515,-0.04026 1.25166,0.522864 1.96791,0.561495 0.84449,-0.337075 4.5865,-0.641651 3.83596,-0.600198 0.37015,0.007 0.83701,-0.226033 1.09094,-0.03707 0.11828,0.08802 0.12726,0.435864 0.1731,0.637268 z"
- style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ style="color:#000000"
+ d="m 1290,1466 -42,-102 q -102,-22 -224,-22 -121,0 -222,22 l -42,101 q 124,-31 264,-31 138,0 266,32 z"
+ display="block"
+ id="path4" />
<path
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path5353"
- d="m 109.56608,17.578823 c -1.32838,4.066443 -4.04985,6.321863 -6.6,8.8 -0.20576,0.304421 0.14574,0.397532 1,0.3 3.90473,-1.863513 6.85963,-4.360243 8.1,-8 -0.78642,-0.41302 -1.31194,-1.08384 -2.5,-1.1 z"
- style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- <g
- id="g14577"
- transform="matrix(0.95,0,0,0.95,1.3708726,1.7010613)">
- <rect
- y="4.245285"
- x="23.113207"
- height="40.212261"
- width="3.7735846"
- id="rect14571"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
- <rect
- transform="rotate(90)"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84308159;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="rect14573"
- width="3.7735846"
- height="47.641506"
- x="23.231133"
- y="-48.820751" />
+ style="color:#000000"
+ d="m 1206,1260 -29,-70 v -27 q -76,-11 -153,-11 -75,0 -152,11 l -1,27 -27,70 q 85,-15 180,-15 96,0 182,15 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1171,1638 q -40,-30 -80,-95 h -32 q 0,49 23,95 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 965,1638 q 23,-49 23,-95 h -32 q -39,64 -81,95 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="m 987,912 v 85 q 0,37 37,37 37,0 37,-37 v -86 h 90 q 35,0 35,-36 0,-36 -35,-36 h -90 v -90 q 0,-37 -37,-37 -37,0 -37,37 v 90 h -88 q -35,0 -35,36 0,36 35,36 z"
+ display="block"
+ id="path12" />
</g>
<path
- sodipodi:type="star"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="path14587"
- sodipodi:sides="64"
- sodipodi:cx="25"
- sodipodi:cy="44.457546"
- sodipodi:r1="3.9412203"
- sodipodi:r2="3.9364729"
- sodipodi:arg1="0.78539816"
- sodipodi:arg2="0.83448555"
- inkscape:flatsided="true"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="m 27.786864,47.24441 -0.28658,0.259741 -0.310659,0.2304 -0.331747,0.198841 -0.349638,0.165367 -0.364164,0.1303 -0.375182,0.09398 -0.382587,0.05675 L 25,48.398767 l -0.386307,-0.01898 -0.382587,-0.05675 -0.375182,-0.09398 -0.364164,-0.1303 -0.349638,-0.165367 -0.331747,-0.198841 -0.310659,-0.2304 -0.28658,-0.259741 -0.25974,-0.28658 -0.230401,-0.310659 -0.198841,-0.331746 -0.165367,-0.349639 -0.1303,-0.364164 -0.09398,-0.375182 -0.05675,-0.382587 -0.01898,-0.386307 0.01898,-0.386307 0.05675,-0.382587 0.09398,-0.375182 0.1303,-0.364163 0.165367,-0.349639 0.198841,-0.331746 0.230401,-0.310659 0.25974,-0.28658 0.28658,-0.259741 0.310659,-0.230401 0.331747,-0.198841 0.349638,-0.165367 0.364164,-0.130299 0.375182,-0.09398 0.382587,-0.05675 L 25,40.516326 l 0.386307,0.01898 0.382587,0.05675 0.375182,0.09398 0.364164,0.130299 0.349638,0.165367 0.331747,0.198841 0.310659,0.230401 0.28658,0.259741 0.25974,0.28658 0.230401,0.310659 0.198841,0.331746 0.165367,0.349639 0.1303,0.364163 0.09398,0.375182 0.05675,0.382587 0.01898,0.386307 -0.01898,0.386307 -0.05675,0.382587 -0.09398,0.375182 -0.1303,0.364164 -0.165367,0.349639 -0.198841,0.331746 -0.230401,0.310659 z"
- transform="matrix(0,0.95,-0.95,0,47.806603,1.7010613)" />
- <path
- style="fill:#ffffff;stroke:none;stroke-width:0.84130847px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 9.0513062,23.758841 c -1.5224694,5.64797 0.8106772,8.495757 4.4978728,9.890942 l 0.420654,-0.673047 C 8.3833763,30.233472 9.3915535,25.423457 9.2978739,24.11563 9.2827431,23.904424 9.150848,23.762548 9.0513062,23.758841 Z"
- id="path5359"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccsc" />
- <path
- style="fill:#ffffff;stroke-width:0.76650214"
- d="m 19.617688,23.128129 c -0.279006,-0.14257 -0.415444,-0.213854 -0.415444,-0.213854 -0.382484,-0.149468 -0.499759,-0.428474 -0.363322,-0.83702 0.149468,-0.376353 0.441505,-0.505892 0.876112,-0.376353 1.492379,0.544983 2.524858,1.548334 3.096668,3.004688 0.09045,0.415444 -0.05825,0.700584 -0.454535,0.85695 -0.395515,0.123407 -0.662258,-0.01303 -0.797928,-0.421577 -0.104246,-0.213853 -0.17553,-0.357189 -0.226886,-0.415443 -0.142569,0.110376 -0.324229,0.187793 -0.551881,0.226883 -0.774167,0.123407 -1.226403,-0.213853 -1.34981,-1.025579 -0.03909,-0.279006 0.02606,-0.544983 0.188559,-0.797929"
- id="path3879"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#ffffff;stroke-width:1.29790962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 24.329544,34.771886 c 1.291628,-3.108895 2.461658,-6.045308 2.10449,-9.095101 -0.177235,-1.513395 -0.549622,-2.056607 -0.199499,-3.345737 0.44569,-1.640989 1.539073,-3.115915 2.735886,-4.344174"
- id="path7508"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cssc" />
- <path
- style="fill:none;stroke:#ffffff;stroke-width:1.29790962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 18.525608,34.64224 c 0.830395,-0.939643 0.643587,-0.695011 1.204359,-1.891915"
- id="path7512"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc" />
- <path
- sodipodi:type="star"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="path14581"
- sodipodi:sides="64"
- sodipodi:cx="25.120873"
- sodipodi:cy="6.1821945"
- sodipodi:r1="3.7441592"
- sodipodi:r2="3.7396493"
- sodipodi:arg1="0.78539816"
- sodipodi:arg2="0.83448555"
- inkscape:flatsided="true"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="M 27.768393,8.8297151 27.496142,9.0764689 27.201016,9.2953493 26.885857,9.4842483 26.5537,9.6413468 26.207745,9.7651317 25.851322,9.854411 25.487864,9.9083248 25.120873,9.9263539 24.753881,9.9083248 24.390423,9.854411 24.034,9.7651317 23.688045,9.6413468 23.355888,9.4842484 23.040729,9.2953493 22.745603,9.0764689 22.473352,8.8297151 22.226598,8.5574642 22.007718,8.2623381 21.818819,7.9471792 21.66172,7.6150224 21.537936,7.2690668 21.448656,6.912644 l -0.05391,-0.3634575 -0.01803,-0.3669918 0.01803,-0.3669918 0.05391,-0.3634574 0.08928,-0.3564228 0.123784,-0.3459557 0.157099,-0.3321567 0.188899,-0.315159 0.21888,-0.295126 0.246754,-0.272251 0.272251,-0.2467538 0.295126,-0.2188804 0.315159,-0.188899 0.332157,-0.1570985 0.345955,-0.1237849 0.356423,-0.089279 0.363458,-0.053914 0.366991,-0.018029 0.366992,0.018029 0.363458,0.053914 0.356423,0.089279 0.345955,0.1237849 0.332157,0.1570985 0.315159,0.188899 0.295126,0.2188804 0.272251,0.2467538 0.246754,0.2722509 0.21888,0.2951261 0.188899,0.315159 0.157099,0.3321567 0.123784,0.3459556 0.08928,0.3564229 0.05391,0.3634574 0.01803,0.3669918 -0.01803,0.3669918 -0.05391,0.3634574 -0.08928,0.3564228 -0.123784,0.3459557 -0.157099,0.3321567 -0.188899,0.315159 -0.21888,0.2951261 z" />
- <path
- d="m 27.768393,46.58325 -0.272251,0.246754 -0.295126,0.218881 -0.315159,0.188899 -0.332157,0.157098 -0.345955,0.123785 -0.356423,0.08928 -0.363458,0.05391 -0.366991,0.01803 -0.366992,-0.01803 -0.363458,-0.05391 -0.356423,-0.08928 -0.345955,-0.123785 -0.332157,-0.157098 -0.315159,-0.188899 -0.295126,-0.218881 -0.272251,-0.246754 -0.246754,-0.272251 -0.21888,-0.295126 -0.188899,-0.315159 -0.157099,-0.332156 -0.123784,-0.345956 -0.08928,-0.356423 -0.05391,-0.363457 -0.01803,-0.366992 0.01803,-0.366992 0.05391,-0.363457 0.08928,-0.356423 0.123784,-0.345956 0.157099,-0.332156 0.188899,-0.315159 0.21888,-0.295126 0.246754,-0.272251 0.272251,-0.246754 0.295126,-0.218881 0.315159,-0.188899 0.332157,-0.157098 0.345955,-0.123785 0.356423,-0.08928 0.363458,-0.05391 0.366991,-0.01803 0.366992,0.01803 0.363458,0.05391 0.356423,0.08928 0.345955,0.123785 0.332157,0.157098 0.315159,0.188899 0.295126,0.218881 0.272251,0.246754 0.246754,0.272251 0.21888,0.295126 0.188899,0.315159 0.157099,0.332156 0.123784,0.345956 0.08928,0.356423 0.05391,0.363457 0.01803,0.366992 -0.01803,0.366992 -0.05391,0.363457 -0.08928,0.356423 -0.123784,0.345956 -0.157099,0.332156 -0.188899,0.315159 -0.21888,0.295126 z"
- inkscape:randomized="0"
- inkscape:rounded="0"
- inkscape:flatsided="true"
- sodipodi:arg2="0.83448555"
- sodipodi:arg1="0.78539816"
- sodipodi:r2="3.7396493"
- sodipodi:r1="3.7441592"
- sodipodi:cy="43.935729"
- sodipodi:cx="25.120873"
- sodipodi:sides="64"
- id="path14583"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- sodipodi:type="star" />
- <path
- d="M 27.786864,7.5038459 27.500284,7.7635868 27.189625,7.9939873 26.857878,8.1928283 26.50824,8.3581951 26.144076,8.488495 25.768894,8.5824732 25.386307,8.6392246 25,8.6582026 24.613693,8.6392246 24.231106,8.5824732 23.855924,8.488495 23.49176,8.3581951 23.142122,8.1928283 22.810375,7.9939873 22.499716,7.7635869 22.213136,7.503846 21.953396,7.2172661 21.722995,6.906607 21.524154,6.5748608 21.358787,6.2252221 l -0.1303,-0.3641639 -0.09398,-0.3751819 -0.05675,-0.3825868 -0.01898,-0.3863071 0.01898,-0.3863072 0.05675,-0.3825868 0.09398,-0.3751819 0.1303,-0.3641638 0.165367,-0.3496387 0.198841,-0.3317463 0.230401,-0.310659 0.25974,-0.2865799 0.28658,-0.2597409 0.310659,-0.2304004 0.331747,-0.1988411 0.349638,-0.1653668 0.364164,-0.13029989 0.375182,-0.0939782 0.382587,-0.0567514 L 25,0.77576208 l 0.386307,0.018978 0.382587,0.0567514 0.375182,0.0939782 0.364164,0.1302999 0.349638,0.1653668 0.331747,0.1988411 0.310659,0.2304004 0.28658,0.2597409 0.25974,0.2865799 0.230401,0.310659 0.198841,0.3317463 0.165367,0.3496386 0.1303,0.3641639 0.09398,0.3751819 0.05675,0.3825868 0.01898,0.3863072 -0.01898,0.3863071 -0.05675,0.3825868 -0.09398,0.3751819 -0.1303,0.3641639 -0.165367,0.3496386 -0.198841,0.3317463 -0.230401,0.310659 z"
- inkscape:randomized="0"
- inkscape:rounded="0"
- inkscape:flatsided="true"
- sodipodi:arg2="0.83448555"
- sodipodi:arg1="0.78539816"
- sodipodi:r2="3.9364729"
- sodipodi:r1="3.9412203"
- sodipodi:cy="4.7169824"
- sodipodi:cx="25"
- sodipodi:sides="64"
- id="path14585"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- sodipodi:type="star"
- transform="matrix(0,0.95,-0.95,0,49.262972,1.7010613)" />
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 1001.38,1832.1886 c -39.68505,-7.0772 -75.02345,-32.2286 -95.45407,-67.9376 -21.25638,-37.1523 -21.37604,-95.589 -0.27125,-132.4764 10.89005,-19.0338 28.95274,-35.9683 54.63044,-51.2181 3.55589,-2.1118 1.04506,-5.7062 -20.2524,-28.9921 -50.29807,-54.9942 -97.8562,-97.4176 -195.5163,-174.4069 -87.07894,-68.6477 -111.49189,-99.4061 -134.423,-169.3621 -16.51279,-50.3757 -18.66368,-63.721 -18.59505,-115.3741 0.0893,-67.2689 7.39393,-100.6648 32.85312,-150.20221 16.66889,-32.43355 29.18938,-49.76489 49.60848,-68.66983 16.97168,-15.7132 59.87612,-45.4002 94.37803,-65.30335 14.17854,-8.1792 18.85707,-12.03593 17.9341,-14.78394 -0.68681,-2.04487 -24.01181,-60.07851 -51.83335,-128.96367 l -50.5846,-125.24576 16.41494,-6.45924 c 39.09328,-15.38313 130.21966,-37.87882 171.23265,-42.27093 9.6404,-1.0324 15.65568,-2.7395 15.65568,-4.443 0,-1.52153 -7.56693,-10.6712 -16.81541,-20.33259 -19.1029,-19.9558 -61.04944,-48.64292 -79.43827,-54.32763 -6.66732,-2.06114 -24.41356,-4.0735 -41.74859,-4.73415 -28.19458,-1.07451 -36.55024,-0.20503 -128.7248,13.39503 -93.59186,13.80918 -101.09295,14.57798 -148.43941,15.21422 -98.33847,1.32144 -147.21685,-7.96129 -212.72091,-40.39887 -23.00263,-11.39089 -51.6868,-32.1845 -51.6868,-37.46858 0,-1.49762 91.60139,-152.92249 93.89453,-155.21563 0.49214,-0.49214 4.39946,1.77833 8.68293,5.04549 22.28363,16.99655 56.26452,26.27892 108.48483,29.63419 l 38.26954,2.45891 142.641,-20.12454 c 78.45254,-11.06849 154.24877,-20.70398 168.43603,-21.4122 46.32015,-2.31227 77.51576,5.06583 129.60247,30.65239 32.09237,15.76473 69.95855,43.51679 89.19581,65.37148 11.95072,13.57673 23.72853,37.63867 30.73723,62.79563 2.922,10.48828 5.8346,19.0696 6.4724,19.0696 0.6378,0 3.5449,-8.60275 6.4601,-19.1172 7.0485,-25.42218 16.5664,-45.32961 27.4913,-57.49997 14.8169,-16.5062 58.7505,-52.93964 78.4984,-65.09752 22.2312,-13.68671 58.3527,-28.14897 82.859,-33.17492 35.1123,-7.20112 57.7897,-5.40822 220.995,17.47216 l 150.7811,21.13857 35.9502,-2.44678 c 50.8848,-3.46323 89.8636,-14.2889 111.0223,-30.83448 3.0202,-2.36168 6.2932,-3.79831 7.2734,-3.19251 2.0752,1.28251 91.876,146.89376 93.9911,152.40582 3.4151,8.89962 -46.0577,40.38553 -88.6416,56.41408 -44.685,16.81937 -78.6753,22.07964 -150.827,23.34172 -53.2544,0.93153 -64.2086,0.48997 -88.1359,-3.55273 -15.0278,-2.53906 -62.2877,-9.44518 -105.022,-15.34693 -69.0316,-9.53349 -81.0622,-10.6087 -107.8506,-9.63896 -36.1015,1.30687 -47.646,4.70954 -76.7848,22.63183 -20.8229,12.80749 -61.2174,50.03607 -61.2174,56.41945 0,2.19345 4.274,3.75304 13.3363,4.86642 36.1666,4.44335 98.9431,19.40032 152.7622,36.3967 l 37.3736,11.80281 -51.878,128.80464 c -28.5329,70.84254 -51.6134,129.03578 -51.2899,129.3183 0.3235,0.2825 16.2751,10.318 35.4481,22.30112 74.2055,46.37853 101.6667,73.47477 128.4234,126.71691 21.9093,43.59628 31.3835,87.89135 31.3542,146.59065 -0.021,40.3905 -3.1992,60.6357 -16.3442,104.085 -23.24,76.8169 -55.4753,119.547 -135.385,179.4618 -77.8737,58.3883 -137.634,110.836 -184.6502,162.0553 -40.2461,43.844 -38.1758,39.2708 -22.2329,49.1113 76.8351,47.4253 81.6693,160.2541 9.3166,217.4456 -29.577,23.3793 -70.0827,33.9595 -105.6968,27.6083 z m 45.7354,-518.2274 c 12.6126,-6.5222 13.9945,-13.504 13.9945,-70.7066 v -51.1006 h 49.9408 c 55.9386,0 62.6909,-1.3729 70.6067,-14.3564 3.4274,-5.6216 4.6809,-11.7147 4.6809,-22.7534 0,-11.0387 -1.2535,-17.1319 -4.6809,-22.7534 -7.9158,-12.9835 -14.6681,-14.3565 -70.6067,-14.3565 h -49.9408 v -50.683 c 0,-48.9419 -0.1821,-50.9538 -5.2989,-58.564 -12.3193,-18.32216 -51.3027,-18.32216 -63.62196,0 -5.11685,7.6102 -5.29889,9.6221 -5.29889,58.564 v 50.683 h -48.78118 c -51.87795,0 -59.17071,1.2293 -68.3468,11.5202 -3.89236,4.3653 -4.63873,8.4827 -4.63873,25.5897 0,17.1069 0.74637,21.2243 4.63873,25.5896 9.17609,10.291 16.46885,11.5202 68.3468,11.5202 h 48.78118 v 52.3009 c 0,63.2867 0.83963,65.9522 23.05825,73.2001 8.5007,2.7729 28.5065,0.7847 37.167,-3.6938 z m 49.0048,-437.40333 c 19.6517,-1.36497 45.6456,-3.71333 57.7643,-5.21857 l 22.034,-2.73681 1.4307,-15.07588 c 1.0504,-11.06845 5.1957,-23.98043 15.5944,-48.57466 7.7901,-18.42432 13.6923,-33.97027 13.116,-34.54654 -0.5763,-0.57627 -13.3342,0.67406 -28.351,2.77849 -57.619,8.07466 -77.8861,9.33354 -151.3892,9.40352 -74.58956,0.071 -100.46218,-1.51696 -154.81578,-9.50196 -14.35003,-2.10812 -26.63998,-3.28394 -27.31102,-2.6129 -0.67104,0.67104 4.68538,16.24064 11.90313,34.59911 8.97766,22.83483 13.57532,38.14144 14.55451,48.45494 l 1.4313,15.07588 24.35334,2.85716 c 63.6325,7.46543 138.19612,9.36915 199.68532,5.09822 z m 50.6165,-193.30316 c 37.4044,-4.04651 100.2599,-14.54013 102.3934,-17.0944 2.8078,-3.36162 41.8406,-100.76455 40.7978,-101.80738 -0.5934,-0.59332 -12.9199,1.55622 -27.3924,4.77678 -151.8852,33.79898 -335.38904,33.56934 -482.04212,-0.60324 -10.82831,-2.52317 -20.12444,-4.151 -20.65808,-3.61736 -0.53362,0.53364 8.46032,23.68138 19.98657,51.43941 l 20.9568,50.46914 19.41587,4.02016 c 25.04472,5.18562 81.6526,12.77725 115.66956,15.51234 39.25656,3.15638 170.953,1.22316 210.8726,-3.09545 z M 988.30167,469.98768 c -1.72408,-19.02583 -9.69945,-50.1926 -17.14436,-66.99788 l -4.88062,-11.01699 h -46.70553 -46.70551 l 13.52413,11.50307 c 16.9296,14.3996 36.36791,37.02786 54.37347,63.29648 l 13.9106,20.29445 h 17.58773 17.58775 z m 110.14763,8.38151 c 12.0271,-19.93759 37.6167,-51.694 55.1667,-68.46114 l 18.7726,-17.93524 h -45.9896 -45.9896 l -2.9633,6.37826 c -10.2625,22.08988 -18.6556,56.33199 -18.6556,76.11087 v 12.60487 h 17.2061 17.206 z"
+ id="path194" />
</svg>
--- /dev/null
+<?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="bi.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg18" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g16"
+ transform="matrix(1,0,0,-1,0,2008)">
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ </g>
+</svg>
--- /dev/null
+<?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="svg12"
+ sodipodi:docname="bl.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata18">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs16" />
+ <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="namedview14"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg12" />
+ <path
+ style="color:#000000"
+ d="m 1588,765 q -83,30 -233,49 -150,19 -333,20 -178,0 -326,-18 -148,-18 -233,-49 l 50,-91 q 84,25 218,36 134,11 293,11 159,0 294,-11 135,-11 219,-37 z m 226,668 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z m -1578,0 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 1208,110 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z m -840,0 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z M 1640,255 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -96,32 -30,118 q -195,45 -490,45 -292,0 -488,-45 L 504,286 q 190,58 521,58 159,0 295,-16 136,-16 224,-41 z m -26,299 q -184,51 -490,51 -308,0 -496,-52 l 15,-101 q 189,49 481,49 291,0 474,-48 z m -494,1007 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g10"
+ transform="matrix(1,0,0,-1,0,2020)">
+ <path
+ style="color:#000000"
+ d="m 1588,1255 q -83,-30 -233,-49 -150,-19 -333,-20 -178,0 -326,18 -148,18 -233,49 l 50,91 q 84,-25 218,-36 134,-11 293,-11 159,0 294,11 135,11 219,37 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="m 1544,1733 -30,-118 q -195,-45 -490,-45 -292,0 -488,45 l -32,119 q 190,-58 521,-58 159,0 295,16 136,16 224,41 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1518,1434 q -184,-51 -490,-51 -308,0 -496,52 l 15,101 q 189,-49 481,-49 291,0 474,48 z"
+ display="block"
+ id="path8" />
+ </g>
+</svg>
--- /dev/null
+<?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="svg12"
+ sodipodi:docname="bo.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata18">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs16" />
+ <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="namedview14"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg12"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1588,765 q -83,30 -233,49 -150,19 -333,20 -178,0 -326,-18 -148,-18 -233,-49 l 50,-91 q 84,25 218,36 134,11 293,11 159,0 294,-11 135,-11 219,-37 z m 226,668 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z m -1578,0 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 1208,110 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z m -840,0 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z M 1640,255 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -96,32 -30,118 q -195,45 -490,45 -292,0 -488,-45 L 504,286 q 190,58 521,58 159,0 295,-16 136,-16 224,-41 z m -26,299 q -184,51 -490,51 -308,0 -496,-52 l 15,-101 q 189,49 481,49 291,0 474,-48 z m -494,1007 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g10"
+ transform="matrix(1,0,0,-1,0,2020)">
+ <path
+ style="color:#000000"
+ d="m 1588,1255 q -83,-30 -233,-49 -150,-19 -333,-20 -178,0 -326,18 -148,18 -233,49 l 50,91 q 84,-25 218,-36 134,-11 293,-11 159,0 294,11 135,11 219,37 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="m 1544,1733 -30,-118 q -195,-45 -490,-45 -292,0 -488,45 l -32,119 q 190,-58 521,-58 159,0 295,16 136,16 224,41 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1518,1434 q -184,-51 -490,-51 -308,0 -496,52 l 15,101 q 189,-49 481,-49 291,0 474,48 z"
+ display="block"
+ id="path8" />
+ </g>
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 990.63576,1587.0261 c -1.5896,-5.3512 -110.43644,-584.203 -110.43644,-587.30536 0,-1.3164 -0.8462,-2.39345 -1.88045,-2.39345 -1.03425,0 -48.74402,124.01991 -106.02169,275.59971 l -104.14124,275.5997 -32.56042,-5.6873 c -17.90822,-3.128 -32.71901,-5.8161 -32.91287,-5.9734 -0.67271,-0.5461 -5.47764,-432.0051 -5.46185,-490.4455 0.009,-37.9684 -0.80094,-58.48369 -2.29276,-57.9841 -1.26978,0.42521 -62.94003,103.0571 -137.04501,228.071 -74.10499,125.0138 -135.61488,228.2153 -136.68866,229.3366 -1.10856,1.1576 -11.87421,-1.8495 -24.91029,-6.9581 l -22.95798,-8.9969 42.39325,-310.0446 42.39325,-310.04454 43.89892,-76.18875 43.89892,-76.18876 14.20485,-79.28631 14.20485,-79.28632 -31.42828,-119.65781 -31.42829,-119.65781 5.3305,-4.52944 c 51.45416,-43.72167 205.12172,-78.05612 421.65666,-94.21214 77.94429,-5.81555 297.79297,-5.81555 375.73727,0 154.5719,11.53286 277.9724,32.20091 356.0227,59.62934 22.9502,8.06519 52.1299,22.48687 61.9913,30.63844 l 6.3266,5.22961 -32.3908,120.60703 -32.3909,120.60702 14.0146,80.01812 14.0145,80.01812 44.1964,76.1054 c 24.308,41.85794 44.6061,77.86609 45.1069,80.01812 1.0163,4.36695 82.0759,609.23218 82.0759,612.44878 0,2.2786 -38.2075,21.1718 -42.8155,21.1718 -1.6175,0 -64.2874,-103.3278 -139.2664,-229.6173 -74.9791,-126.2894 -137.0559,-229.61717 -137.9484,-229.61717 -0.8925,0 -2.3172,76.45207 -3.1661,169.89357 -0.8488,93.4414 -2.2224,216.9801 -3.0522,274.5304 l -1.5088,104.637 -32.6876,5.7309 -32.6875,5.731 -3.7723,-8.3158 c -2.0748,-4.5737 -48.9352,-128.6237 -104.1343,-275.6666 -55.1991,-147.043 -100.8315,-266.88131 -101.4054,-266.30743 -1.0856,1.08563 -111.7829,584.80223 -111.8704,589.90283 -0.038,2.1832 -8.3175,2.8992 -33.5243,2.8992 -29.87493,0 -33.60419,-0.4364 -34.68024,-4.0588 z M 1131.8505,832.67036 c 134.0802,-5.47702 245.2875,-17.4699 344.4258,-37.14371 40.2293,-7.98342 88.9165,-20.50535 107.4526,-27.63587 l 6.5602,-2.52356 -4.5377,-7.52621 c -2.4957,-4.13939 -14.1187,-24.48654 -25.8288,-45.21587 -11.7102,-20.72933 -22.7212,-37.6897 -24.469,-37.6897 -1.7477,0 -12.9074,2.61333 -24.7993,5.80739 -100.6107,27.02335 -263.0027,40.55474 -486.6543,40.55066 -162.82711,-0.002 -295.31158,-7.43739 -395.45187,-22.19097 -28.27908,-4.16633 -86.29041,-15.95538 -101.84087,-20.69608 -6.26208,-1.90904 -12.17542,-3.471 -13.14076,-3.471 -3.14998,0 -51.53898,90.70268 -49.42306,92.64095 3.24039,2.9683 36.609,13.31427 66.99132,20.77069 96.01038,23.56285 232.15372,39.64556 381.53568,45.07112 46.73281,1.69733 169.58256,1.27818 219.18006,-0.74784 z m 25.513,-197.18399 c 125.5572,-5.64749 232.6364,-18.01713 309.6354,-35.76861 46.2573,-10.66426 49.2066,-11.52238 50.4138,-14.66822 0.6666,-1.73712 -2.248,-25.01571 -6.4769,-51.73024 -5.7588,-36.37962 -8.5025,-48.57185 -10.9304,-48.57185 -1.7829,0 -11.2433,2.02068 -21.0233,4.49041 -73.4766,18.55504 -193.9285,33.8093 -312.2342,39.54194 -62.5147,3.02923 -216.6094,3.03085 -277.51092,0.002 -120.12046,-5.9722 -220.04315,-18.37399 -310.24867,-38.50618 -14.50139,-3.23644 -27.70967,-6.39998 -29.35169,-7.03009 -3.63667,-1.39554 -4.05418,0.50247 -11.55427,52.52703 -3.2183,22.32389 -6.33994,42.78202 -6.93696,45.46249 -0.99086,4.44864 1.08483,5.40716 23.80527,10.99296 98.63593,24.2495 218.79436,38.94969 360.03915,44.04715 47.73823,1.72287 197.35109,1.23538 242.37369,-0.78972 z m 82.3375,-191.0884 c 83.6212,-6.47782 140.8414,-13.16794 200.4465,-23.43587 34.3455,-5.91658 72.8761,-13.91723 74.3565,-15.43969 1.0899,-1.12093 31.3132,-118.73431 30.6752,-119.37226 -0.2886,-0.28858 -10.4303,2.00509 -22.5371,5.09705 -148.5852,37.94708 -370.9623,56.93092 -587.36888,50.1424 -174.3584,-5.46951 -295.66816,-20.10664 -400.21474,-48.28956 -16.97671,-4.57646 -31.20396,-7.94678 -31.61609,-7.48961 -0.90367,1.00247 30.42113,117.98206 32.02191,119.58282 1.88718,1.88719 38.68044,9.5931 74.93574,15.6944 83.87231,14.11462 144.87678,20.28692 273.27833,27.64967 7.65391,0.4389 80.19207,0.51583 161.19593,0.17094 107.9142,-0.45942 159.9883,-1.6115 194.8267,-4.31031 z"
+ id="path254" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 211.06228,1702.3635 c -40.19618,-8.0682 -77.21899,-36.4428 -95.26113,-73.009 -19.222869,-38.9592 -19.222869,-81.6479 0,-120.607 35.35448,-71.6533 125.71589,-96.2252 193.01271,-52.4858 73.64181,47.8633 84.60195,146.5692 23.07511,207.8121 -32.72531,32.5743 -77.93061,46.8997 -120.82669,38.2897 z"
+ id="path256" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 575.3614,1811.0409 c -31.01786,-5.9234 -64.95729,-29.5146 -84.50304,-58.738 -16.19805,-24.2181 -21.59757,-42.3652 -21.74497,-73.0821 -0.0983,-20.4875 0.86416,-27.2353 6.06328,-42.5089 7.76499,-22.8115 17.88033,-38.5781 35.32897,-55.0668 25.28745,-23.8962 49.38911,-34.2328 84.41168,-36.202 39.16039,-2.2018 71.1528,9.2226 99.61183,35.5713 28.12836,26.0426 41.35164,53.4444 43.47407,90.0887 2.35815,40.7137 -9.92257,72.1979 -39.82546,102.1007 -33.8572,33.8572 -75.87378,46.8017 -122.81636,37.8371 z"
+ id="path258" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 995.00793,1862.0717 c -20.59625,-3.871 -48.05656,-18.9318 -64.24114,-35.2336 -26.19284,-26.3825 -38.55801,-53.2916 -40.65729,-88.4785 -2.37601,-39.8254 12.07207,-77.0793 40.92585,-105.5261 26.45983,-26.0866 55.43969,-37.9016 92.96465,-37.9016 36.8754,0 65.5048,11.3374 92.1774,36.5027 28.1356,26.5457 42.4131,58.0565 42.7759,94.4066 0.3935,39.4434 -11.6724,69.0896 -39.5196,97.1007 -9.7542,9.8117 -23.6292,21.1647 -30.8332,25.2291 -25.3581,14.3063 -62.2673,19.7882 -93.59257,13.9007 z"
+ id="path260" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 1414.8131,1811.0457 c -30.9757,-5.8218 -65.4095,-30.4265 -85.0001,-60.737 -37.3987,-57.863 -20.9334,-141.0418 35.79,-180.8029 27.2093,-19.0727 53.44,-26.3528 87.0587,-24.1622 35.0115,2.2814 63.4058,15.399 88.5569,40.9116 26.5722,26.9541 38.0652,55.6325 37.7212,94.1253 -0.2637,29.5108 -5.9249,48.1899 -21.7982,71.9224 -31.479,47.065 -85.6041,69.4039 -142.3285,58.7428 z"
+ id="path262" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 1784.752,1701.1003 c -37.4639,-8.1129 -74.7598,-37.5935 -93.1408,-73.6232 -6.8569,-13.4406 -13.5551,-42.3052 -13.5098,-58.2173 0.1051,-36.8676 13.0288,-67.8094 39.4013,-94.3351 54.6279,-54.945 139.4617,-54.0241 193.5594,2.1012 26.1486,27.1288 37.0562,54.2562 37.0018,92.0251 -0.056,39.05 -12.5551,68.9908 -40.1827,96.2562 -33.314,32.8772 -77.4062,45.6946 -123.1292,35.7931 z"
+ id="path264" />
+</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="45"
- height="45"
- id="svg3128"
- sodipodi:version="0.32"
- inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
- version="1.0"
- sodipodi:docname="bc.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <defs
- id="defs3130">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 22.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="45 : 22.5 : 1"
- inkscape:persp3d-origin="22.5 : 15 : 1"
- id="perspective15" />
- <inkscape:perspective
- id="perspective12"
- inkscape:persp3d-origin="22.5 : 15 : 1"
- inkscape:vp_z="45 : 22.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 22.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="11.313709"
- inkscape:cx="21.843794"
- inkscape:cy="17.466685"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- height="45px"
- width="45px"
- inkscape:grid-points="true"
- showgrid="true"
- inkscape:window-width="960"
- inkscape:window-height="1060"
- inkscape:window-x="0"
- inkscape:window-y="20"
- inkscape:window-maximized="0">
- <inkscape:grid
- id="GridFromPre046Settings"
- type="xygrid"
- originx="0"
- originy="0"
- spacingx="0.5"
- spacingy="0.5"
- color="#0000ff"
- empcolor="#0000ff"
- opacity="0.2"
- empopacity="0.4"
- empspacing="5" />
- </sodipodi:namedview>
+ height="100%"
+ width="100%"
+ version="1.1"
+ viewBox="0 0 2048 2048"
+ id="svg16"
+ sodipodi:docname="bs.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
<metadata
- id="metadata3133">
+ id="metadata22">
<rdf:RDF>
<cc:Work
rdf:about="">
</cc:Work>
</rdf:RDF>
</metadata>
+ <defs
+ id="defs20" />
+ <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="namedview18"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg16"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 564,460 V 358 h 920 v 102 z m 460,1092 H 512 v -46 l 73,-55 h 879 l 71,55 v 46 z m 0,-169 H 674 l 60,-47 v -57 h 580 v 57 l 60,47 z m 0,-546 H 734 v -46 l -60,-58 h 700 l -60,58 v 46 z m 0,-172 H 610 l -46,-43 v -58 h 920 v 58 l -46,43 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
<g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- style="display:inline">
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g14"
+ transform="matrix(1,0,0,-1,0,2048)">
+ <path
+ style="color:#000000"
+ d="m 564,1588 v 102 h 920 v -102 z"
+ display="block"
+ id="path4" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 37.5,37.5 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 C 11.52378,39.180439 18.926218,40.754342 22.65,39.15 c 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
- id="path4582"
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0" />
+ style="color:#000000"
+ d="M 1024,496 H 512 v 46 l 73,55 h 879 l 71,-55 v -46 z"
+ display="block"
+ id="path6" />
<path
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 30.9,33.1 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
- id="path4584"
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0" />
+ style="color:#000000"
+ d="M 1024,665 H 674 l 60,47 v 57 h 580 v -57 l 60,-47 z"
+ display="block"
+ id="path8" />
<path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 30.9,30.9 H 14.4"
- id="path4590"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <g
- id="g3323"
- inkscape:label="Layer 1"
- transform="matrix(-0.84196464,0,0,-0.84196464,38.826174,36.60001)"
- style="fill:#000000;fill-opacity:1">
- <path
- sodipodi:nodetypes="cccc"
- id="path3491"
- d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="csccccccccccc"
- id="path3495"
- d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <circle
- transform="rotate(180,21.764479,22)"
- id="path3499"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- cx="8.5"
- cy="23.5"
- r="0.5" />
- <ellipse
- transform="rotate(-149.99999,24.024104,20.986505)"
- id="path3501"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- cx="14.5"
- cy="15.5"
- rx="0.5"
- ry="1.5" />
- <path
- sodipodi:nodetypes="cc"
- id="path8049"
- d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
+ style="color:#000000"
+ d="M 1024,1211 H 734 v 46 l -60,58 h 700 l -60,-58 v -46 z"
+ display="block"
+ id="path10" />
<path
- style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.64999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 14.4,30.9 H 30.9"
- id="path3369"
- inkscape:connector-curvature="0" />
+ style="color:#000000"
+ d="M 1024,1383 H 610 l -46,43 v 58 h 920 v -58 l -46,-43 z"
+ display="block"
+ id="path12" />
</g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Layer 1#1"
- style="display:inline" />
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 444.15855,1655.2535 v -186.3229 l 111.31279,-85.6227 111.31279,-85.6227 0.0168,-239.0875 0.0168,-239.08758 -85.81653,-85.52471 -85.81654,-85.52474 V 545.72977 442.99886 H 418.64552 342.10645 V 324.71121 206.42355 H 1024 1705.8936 v 118.28766 118.28765 h -76.5391 -76.5391 v 102.6437 102.6437 l -85.8165,85.79301 -85.8166,85.79302 0.048,238.90641 0.048,238.9065 111.2815,85.5664 111.2816,85.5664 v 186.3792 186.3793 h -135.6829 -135.6829 v -68.4213 -68.4213 h -85.8165 -85.8166 v 68.4213 68.4213 H 1024 887.15746 v -68.4213 -68.4213 h -85.81653 -85.81654 v 68.4213 68.4213 h -135.6829 -135.6829 v -186.323 z m 1092.42125,-125.504 v -24.2255 l -35.7866,-27.9602 -35.7866,-27.9602 H 1024.538 584.0693 l -36.19752,27.2526 -36.19753,27.2525 -0.12705,24.9332 -0.12705,24.9332 H 1024 1536.5798 Z m -162.7421,-147.2188 c -0.4252,-1.1719 -13.5586,-12.1936 -29.1854,-24.4926 l -28.4122,-22.3619 v -28.8528 -28.8528 H 1024 731.75991 v 28.8528 28.8528 l -28.41223,22.3619 c -15.62673,12.299 -28.76014,23.3207 -29.18535,24.4926 -0.46761,1.2887 137.77662,2.1307 349.83767,2.1307 212.0611,0 350.3053,-0.842 349.8377,-2.1307 z m -57.5976,-567.82123 v -22.58155 l 29.5384,-29.60418 29.5385,-29.60415 H 1024 672.68302 l 29.53844,29.60415 29.53845,29.60418 v 22.58155 22.58158 H 1024 1316.2401 Z m 146.2939,-170.43138 23.0198,-21.37991 V 593.25204 563.60589 H 1024 562.4462 l -9.7e-4,29.57191 -9.8e-4,29.57191 22.61479,21.33972 22.6148,21.33972 415.92016,0.11435 415.9202,0.11434 23.0198,-21.37989 z m 23.0198,-234.91003 V 357.18233 H 1024 562.4462 v 52.18573 52.18573 H 1024 1485.5538 Z"
+ id="path13" />
</svg>
--- /dev/null
+<?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="svg16"
+ sodipodi:docname="bb.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata22">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs20" />
+ <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="namedview18"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg16" />
+ <path
+ style="color:#000000"
+ d="m 1290,564.11538 -42,102 q -102,22 -224,22 -121,0 -222,-22 l -42,-101 q 124,31 264,31 138,0 266,-32 z m -84,206 -29,70 v 27 q -76,11 -153,11 -75,0 -152,-11 l -1,-27 -27,-70 q 85,15 180,15 96,0 182,-15 z m -35,-378 q -40,30 -80,95 h -32 q 0,-49 23,-95 z m -206,0 q 23,49 23,95 h -32 q -39,-64 -81,-95 z m 59,-18 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m -37,744.00002 v -85 q 0,-37.00002 37,-37.00002 37,0 37,37.00002 v 86 h 90 q 35,0 35,36 0,36 -35,36 h -90 v 90 q 0,37 -37,37 -37,0 -37,-37 v -90 h -88 q -35,0 -35,-36 0,-36 35,-36 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g14"
+ transform="matrix(1,0,0,-1,0,2030.1154)">
+ <path
+ style="color:#000000"
+ d="m 1290,1466 -42,-102 q -102,-22 -224,-22 -121,0 -222,22 l -42,101 q 124,-31 264,-31 138,0 266,32 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="m 1206,1260 -29,-70 v -27 q -76,-11 -153,-11 -75,0 -152,11 l -1,27 -27,70 q 85,-15 180,-15 96,0 182,15 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1171,1638 q -40,-30 -80,-95 h -32 q 0,49 23,95 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 965,1638 q 23,-49 23,-95 h -32 q -39,64 -81,95 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="m 987,912 v 85 q 0,37 37,37 37,0 37,-37 v -86 h 90 q 35,0 35,-36 0,-36 -35,-36 h -90 v -90 q 0,-37 -37,-37 -37,0 -37,37 v 90 h -88 q -35,0 -35,36 0,36 35,36 z"
+ display="block"
+ id="path12" />
+ </g>
+</svg>
--- /dev/null
+<?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="by.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="467.3522"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg18"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g16"
+ transform="matrix(1,0,0,-1,0,2008)">
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ <path
+ style="color:#000000"
+ 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" />
+ </g>
+ <path
+ style="fill:#b22222;stroke:#000000;stroke-width:2.31937"
+ d="m 488.87142,1784.2552 c 0.91197,-44.0642 2.53785,-68.3539 6.17677,-92.2778 5.5848,-36.7173 19.78055,-96.6332 30.12165,-127.1342 l 6.93115,-20.4434 -25.36948,-28.8543 c -31.8104,-36.1799 -46.57815,-55.8293 -65.66083,-87.3658 -23.12294,-38.2135 -27.40416,-54.2783 -31.68599,-118.8977 -1.34561,-20.3074 -4.18061,-41.5493 -6.8101,-51.0261 -13.81504,-49.7898 -51.8304,-116.8503 -111.75841,-197.146 -70.1169,-93.94758 -100.08176,-148.34791 -112.29242,-203.86358 -8.02004,-36.4631 -0.77459,-108.92027 15.29449,-152.95063 8.98275,-24.61329 21.905,-45.95684 43.1669,-71.29828 23.67791,-28.221 49.83164,-46.12553 91.18962,-62.42733 11.83618,-4.66538 14.2155,-4.83179 34.82529,-2.43577 12.16663,1.41444 27.83761,4.10307 34.82441,5.97473 12.36675,3.31287 12.79544,3.26727 16.18232,-1.72139 23.59996,-34.76126 45.64157,-48.431 78.13206,-48.45591 36.76503,-0.0283 57.49392,11.78041 77.78712,44.31288 4.37653,7.01608 18.68776,32.65913 31.80277,56.98457 31.45779,58.34719 47.95753,81.21716 87.1229,120.75926 60.07668,60.65455 128.38859,103.75776 223.86871,141.25585 41.15738,16.16385 65.07742,28.65931 90.82625,47.44629 8.7523,6.38587 16.572,11.61066 17.3771,11.61066 2.763,0 -1.6128,-52.19003 -6.189,-73.81577 C 1003.9542,821.54061 980.08332,766.12857 953.612,730.60022 945.53312,719.75719 910.3155,681.32936 875.35057,645.20505 737.28907,502.56553 730.40445,494.46376 703.11996,442.52509 c -29.513,-56.18087 -49.3902,-110.71452 -58.58231,-160.72215 -5.28883,-28.77268 -6.23125,-103.47202 -1.41189,-111.9094 l 2.98083,-5.21858 h 614.55031 614.5504 l -0.012,142.06116 c -0.025,321.51381 -13.6167,484.29854 -53.2956,638.29636 -48.531,188.35642 -152.3293,379.21502 -269.5877,495.70422 -108.1591,107.4496 -249.9584,181.2957 -395.1856,205.8043 -22.5484,3.8053 -69.061,9.4862 -77.6687,9.4862 -1.119,0 -4.6173,5.0967 -7.7739,11.3261 -11.8389,23.3628 -39.0232,60.7684 -60.9525,83.8704 -21.245,22.381 -54.10744,50.9235 -58.63095,50.9235 -1.10789,0 -10.95158,-7.3655 -21.87482,-16.3679 -45.28972,-37.3254 -83.59368,-93.1185 -101.38451,-147.6755 -3.0066,-9.22 -6.1704,-16.7869 -7.03065,-16.8154 -0.86025,-0.028 -8.01448,7.2061 -15.89826,16.0768 -7.8838,8.8707 -27.33994,27.9185 -43.23585,42.3284 -76.48028,69.3309 -156.55186,117.9659 -262.56995,159.4836 l -12.47311,4.8846 z M 1127.2118,1584.09 c 131.2364,-25.2329 270.496,-98.3698 363.4054,-190.8548 79.914,-79.549 152.0267,-203.9073 200.2111,-345.2641 35.732,-104.82526 55.6682,-191.50035 66.597,-289.53849 3.4897,-31.30459 4.2932,-429.13083 0.9896,-489.96603 l -1.9837,-36.53001 h -71.9119 -71.9119 l 1.9953,70.16082 c 2.5506,89.68944 1.4075,381.75875 -1.6725,427.34315 -7.6018,112.50508 -35.7937,236.19195 -81.2582,356.50546 -34.913,92.391 -87.9388,188.7798 -132.4478,240.7604 -23.1879,27.0804 -65.8116,59.9005 -111.9762,86.2215 -42.2507,24.0895 -107.7844,54.2113 -155.3975,71.4267 -11.4809,4.1511 -21.555,8.2066 -22.387,9.0121 -0.832,0.8055 -1.9037,22.5962 -2.3815,48.4237 -0.7634,41.2634 -0.4393,46.8388 2.6724,45.9672 1.9476,-0.5456 9.8035,-2.196 17.4574,-3.6676 z m -306.62097,-16.7786 c -1.02008,-7.9728 -1.70541,-26.1428 -1.52292,-40.3778 l 0.33179,-25.8818 -15.56385,-5.0044 c -8.56011,-2.7524 -28.01815,-11.7541 -43.24006,-20.0037 -36.62939,-19.8516 -42.15408,-21.4507 -53.59495,-15.5134 -17.24701,8.9504 -26.89987,38.5711 -16.61819,50.9945 7.73047,9.3407 51.66947,39.2722 72.6887,49.516 18.8954,9.2088 48.4573,19.797 57.51948,20.6019 1.02008,0.091 1.02008,-6.3584 0,-14.3313 z M 684.90348,1392.3705 c 13.60192,-8.4799 20.0642,-31.7604 12.89184,-46.4433 -3.42909,-7.0198 -7.88716,-10.7004 -21.9119,-18.0903 l -17.60698,-9.2774 4.35129,-9.2775 c 5.80164,-12.3698 4.76725,-41.761 -1.99985,-56.8245 -13.30776,-29.6228 -49.49033,-40.5435 -83.98048,-25.3473 -5.58366,2.4602 -10.56793,4.473 -11.07613,4.473 -0.50817,0 -4.76078,-7.9711 -9.45021,-17.7137 -9.45051,-19.6338 -17.33067,-26.3646 -30.78471,-26.2946 -10.31867,0.054 -24.99713,6.7879 -32.47112,14.8972 -4.9772,5.4002 -5.79842,8.4833 -5.79842,21.7687 0,13.88 1.15635,17.7765 11.20314,37.7516 27.82038,55.3127 68.61489,94.7912 126.08008,122.0127 30.40955,14.4051 47.15493,16.7185 60.55345,8.3654 z m 447.96372,-144.1511 c 14.4938,-7.7731 16.8959,-15.6846 15.6143,-51.4266 -1.6669,-46.4892 -11.9358,-86.4692 -32.9035,-128.1039 -14.2014,-28.1988 -41.8592,-68.3998 -49.9297,-72.57315 -10.173,-5.26065 -25.1583,-4.2559 -38.9378,2.61072 -13.649,6.80163 -18.9461,14.66393 -18.9461,28.12133 0,9.3315 2.0045,13.0136 17.4802,32.1103 11.2219,13.8477 33.4279,56.3747 40.1061,76.8078 6.6141,20.2369 10.4544,55.9952 8.5928,80.0108 -1.7889,23.0773 0.012,28.4664 11.1225,33.2998 11.0176,4.7925 38.1747,4.3056 47.8012,-0.8571 z M 398.93091,878.42895 c 25.99794,-12.82517 29.41972,-43.50381 6.43448,-57.68945 -22.60666,-13.95201 -35.71601,-32.19711 -38.53157,-53.62682 -2.88685,-21.97231 -13.94417,-30.40731 -40.00358,-30.51639 -18.76357,-0.0786 -26.40212,3.52948 -32.5203,15.36072 -8.55931,16.55188 1.33173,56.55934 20.69009,83.68766 9.9967,14.00911 32.15581,33.98885 45.66135,41.17049 12.15398,6.46296 27.1573,7.09563 38.26953,1.61379 z M 506.85734,745.63683 c 8.00679,-4.14046 13.84028,-14.3058 13.84028,-24.11783 0,-15.43612 -24.87066,-75.14627 -36.92247,-88.64451 -10.51923,-11.78173 -22.26464,-14.05728 -37.5356,-7.27214 -30.79584,13.68307 -34.9755,31.19844 -12.95415,54.28608 4.42343,4.63762 12.58298,17.16219 18.13234,27.83239 5.54936,10.67019 14.86593,24.358 20.7035,30.41734 8.94092,9.28062 11.97855,11.01699 19.27309,11.01699 4.76266,0 11.72101,-1.58324 15.46301,-3.51832 z"
+ id="path119" />
+</svg>
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="45"
+ height="45"
+ id="svg3128"
+ sodipodi:version="0.32"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+ version="1.0"
+ sodipodi:docname="wc.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs3130">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 22.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="45 : 22.5 : 1"
+ inkscape:persp3d-origin="22.5 : 15 : 1"
+ id="perspective15" />
+ <inkscape:perspective
+ id="perspective12"
+ inkscape:persp3d-origin="22.5 : 15 : 1"
+ inkscape:vp_z="45 : 22.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 22.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="8.0000004"
+ inkscape:cx="60.308779"
+ inkscape:cy="24.511479"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ height="45px"
+ width="45px"
+ inkscape:grid-points="true"
+ showgrid="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1060"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0">
+ <inkscape:grid
+ id="GridFromPre046Settings"
+ type="xygrid"
+ originx="0"
+ originy="0"
+ spacingx="0.5"
+ spacingy="0.5"
+ color="#0000ff"
+ empcolor="#0000ff"
+ opacity="0.2"
+ empopacity="0.4"
+ empspacing="5" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3133">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ style="display:inline">
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 37.725,38.008918 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 3.7237802,-1.069561 11.1262182,0.504342 14.8500002,-1.1 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
+ id="path4582"
+ sodipodi:nodetypes="ccccccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 31.125,33.608918 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
+ id="path4584"
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 31.125,31.408918 h -16.5"
+ id="path4590"
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0" />
+ <g
+ id="g3323"
+ inkscape:label="Layer 1"
+ transform="matrix(-0.84196464,0,0,-0.84196464,39.051174,37.108928)">
+ <path
+ sodipodi:nodetypes="cccc"
+ id="path3491"
+ d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="csccccccccccc"
+ id="path3495"
+ d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <circle
+ transform="rotate(180,21.764479,22)"
+ id="path3499"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="8.5"
+ cy="23.5"
+ r="0.5" />
+ <ellipse
+ transform="rotate(-149.99999,24.024104,20.986505)"
+ id="path3501"
+ style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ cx="14.5"
+ cy="15.5"
+ rx="0.5"
+ ry="1.5" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path8049"
+ d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
+ style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
+ <g
+ inkscape:groupmode="layer"
+ id="layer2"
+ inkscape:label="Layer 1#1"
+ style="display:inline" />
+</svg>
--- /dev/null
+<?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:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="177.17"
+ height="177.17"
+ shape-rendering="geometricPrecision"
+ image-rendering="optimizeQuality"
+ fill-rule="evenodd"
+ clip-rule="evenodd"
+ viewBox="0 0 50 50"
+ version="1.1"
+ id="svg974"
+ sodipodi:docname="wWaffle.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ <metadata
+ id="metadata978">
+ <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 />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <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="namedview976"
+ showgrid="false"
+ inkscape:zoom="2.3931818"
+ inkscape:cx="8.4123423"
+ inkscape:cy="122.97195"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg974"
+ showguides="false" />
+ <defs
+ id="defs968">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4543">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4539" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4541" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient1002">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop998" />
+ <stop
+ style="stop-color:#dcdbdb;stop-opacity:1"
+ offset="1"
+ id="stop1000" />
+ </linearGradient>
+ <linearGradient
+ id="0"
+ x1="21.376"
+ x2="77.64"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop963" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop965" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient1002"
+ id="linearGradient1004"
+ x1="-41.790333"
+ y1="22.581646"
+ x2="-15.82877"
+ y2="22.581646"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ id="linearGradient5398"
+ x1="0"
+ y1="0"
+ x2="0"
+ y2="1">
+ <stop
+ offset="20%"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop5394" />
+ <stop
+ offset="100%"
+ style="stop-color:#4d4d4d;stop-opacity:1"
+ id="stop5396" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(0.47111842,-0.19973575)"
+ id="0-1"
+ x1="21.253"
+ y1="37.591999"
+ x2="77.639999"
+ y2="37.469002"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop3285" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop3287" />
+ </linearGradient>
+ <linearGradient
+ gradientTransform="translate(50.633198,2.6998865)"
+ id="0-5"
+ x1="21.405001"
+ x2="77.639999"
+ gradientUnits="userSpaceOnUse">
+ <stop
+ stop-color="#fff"
+ id="stop3911" />
+ <stop
+ offset="1"
+ stop-color="#fff"
+ stop-opacity="0"
+ id="stop3913" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4543"
+ id="linearGradient4545"
+ x1="119.21609"
+ y1="11.441374"
+ x2="209.83548"
+ y2="11.441374"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <g
+ transform="matrix(0.95,0,0,0.95,1.1939867,1.6421008)"
+ id="g14577">
+ <rect
+ y="4.245285"
+ x="23.113207"
+ height="40.212261"
+ width="3.7735846"
+ id="rect14571"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
+ <rect
+ transform="rotate(90)"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84308159;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="rect14573"
+ width="3.7735846"
+ height="47.641506"
+ x="23.231133"
+ y="-48.820751" />
+ </g>
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="path14587"
+ sodipodi:sides="64"
+ sodipodi:cx="25"
+ sodipodi:cy="44.457546"
+ sodipodi:r1="3.9412203"
+ sodipodi:r2="3.9364729"
+ sodipodi:arg1="0.78539816"
+ sodipodi:arg2="0.83448555"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 27.786864,47.24441 -0.28658,0.259741 -0.310659,0.2304 -0.331747,0.198841 -0.349638,0.165367 -0.364164,0.1303 -0.375182,0.09398 -0.382587,0.05675 L 25,48.398767 l -0.386307,-0.01898 -0.382587,-0.05675 -0.375182,-0.09398 -0.364164,-0.1303 -0.349638,-0.165367 -0.331747,-0.198841 -0.310659,-0.2304 -0.28658,-0.259741 -0.25974,-0.28658 -0.230401,-0.310659 -0.198841,-0.331746 -0.165367,-0.349639 -0.1303,-0.364164 -0.09398,-0.375182 -0.05675,-0.382587 -0.01898,-0.386307 0.01898,-0.386307 0.05675,-0.382587 0.09398,-0.375182 0.1303,-0.364163 0.165367,-0.349639 0.198841,-0.331746 0.230401,-0.310659 0.25974,-0.28658 0.28658,-0.259741 0.310659,-0.230401 0.331747,-0.198841 0.349638,-0.165367 0.364164,-0.130299 0.375182,-0.09398 0.382587,-0.05675 L 25,40.516326 l 0.386307,0.01898 0.382587,0.05675 0.375182,0.09398 0.364164,0.130299 0.349638,0.165367 0.331747,0.198841 0.310659,0.230401 0.28658,0.259741 0.25974,0.28658 0.230401,0.310659 0.198841,0.331746 0.165367,0.349639 0.1303,0.364163 0.09398,0.375182 0.05675,0.382587 0.01898,0.386307 -0.01898,0.386307 -0.05675,0.382587 -0.09398,0.375182 -0.1303,0.364164 -0.165367,0.349639 -0.198841,0.331746 -0.230401,0.310659 z"
+ transform="matrix(0,0.95,-0.95,0,47.629715,1.6421021)" />
+ <g
+ id="g19380"
+ transform="matrix(0.77598955,0,0,0.77598955,5.3934327,3.4879779)">
+ <g
+ transform="matrix(1.0975945,0,0,1.0975945,-107.62233,17.126787)"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;stroke-width:1.54272723;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g5357">
+ <path
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 119.66608,20.578823 c 0.12511,0.773672 0.40427,1.44388 1.3,1.7 11.23011,-0.424319 16.82956,-5.233235 20.30001,-11.7 l 0.2,-2.099999 c -2.10707,-8.89280401 -8.15113,-13.4502442 -16.2,-15.8 -4.40015,-0.5317426 -7.59668,1.3815851 -10.20001,4.5 -2.59354,2.64077835 -4.39616,5.9439949 -5.3,10 -0.9084,3.60641 -5.79067,1.6990508 -4.9,-0.6 2.76583,-4.0566968 11.00069,-10.7605086 4.9,-12.3 -8.75831,-2.0518262 -7.05798,4.7061225 -5.2,6.20000004 1.23982,-0.5457366 2.00197,-1.22280981 2.4,-2.00000004 -0.25951,-0.4357328 -0.98217,-0.8162564 0,-1.4 0.5387,0.045976 0.81918,0.2856122 1,0.6 0,1 0.50403,1.1455069 -3.6,4 -7.640521,5.2325602 -2.06546,17.121851 4.61159,18.198353 1.32064,-0.324595 1.53284,-0.226663 2.43634,0.347926 l 3.15207,0.35372 c 2.39802,-0.822905 4.4665,-1.650139 5.70313,-3.159477 0.32094,-0.38845 0.4935,-0.247984 -0.60313,3.159477 z"
+ id="path5349"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccc" />
+ <path
+ style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 109.56608,17.578823 c -1.32838,4.066443 -4.04985,6.321863 -6.6,8.8 -0.20576,0.304421 0.14574,0.397532 1,0.3 3.90473,-1.863513 7.52129,-4.086217 8.76166,-7.725974 -0.78642,-0.41302 -1.9736,-1.357866 -3.16166,-1.374026 z"
+ id="path5353"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ </g>
+ <g
+ transform="matrix(0.79655895,0,0,0.79655895,-75.421737,16.247409)"
+ style="opacity:1;fill:#ffff00;fill-opacity:1;stroke-width:1.54272723;stroke-miterlimit:4;stroke-dasharray:none"
+ id="g5357-2">
+ <path
+ style="fill:url(#linearGradient4545);fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 133.58361,1.5558616 c -8.75606,10.1109584 -4.19979,7.5116959 -2.74223,10.1130104 -0.10968,5.65697 -1.90023,10.862018 -3.55112,15.867945 0.12511,0.773672 0.47829,1.517901 1.37402,1.774021 12.03339,-0.558199 18.98339,-7.721951 22.11462,-14.132179 l 0.43477,-2.601728 c -2.89219,-8.7881214 -9.12021,-14.2749978 -15.98474,-18.0311568 -3.95603,-2.012167 -6.44991,-1.8836905 -11.42192,-0.2457 -8.66328,7.0080302 -11.21253,16.0768238 -12.11637,20.1328288 -1.01612,3.667963 -15.446226,0.776698 -6.82456,-7.854079 3.2983,-3.3578275 11.23128,-10.4578594 4.9,-12.3 -8.75831,-2.0518262 -6.68787,4.85416494 -5.71815,5.60783029 0.8142,-0.43470477 0.7066,-0.35306049 1.38221,-0.98220829 -1.17923,-0.8361833 -0.84585,-1.8283785 0.25907,-2.5103183 1.26041,-0.7312468 2.29961,-0.5841371 3.68327,0.3779364 2.30121,3.99968414 -3.10867,6.3374791 -6.06121,8.5893156 -7.571668,6.8550703 0.11863,18.3130553 6.94372,20.6479193 l 0.77482,-1.497349 c 1.024,0.222539 2.43711,0.731241 3.93177,1.474031 0.11862,0.05895 -0.0661,1.049227 -0.0564,1.233499 0.78343,-0.270382 4.65893,-6.09553 4.7812,-6.115529 1.48143,0.230311 1.07354,3.434896 -1.37652,5.984803 4.20113,-1.72865 7.84001,-6.076464 9.2663,-9.632977 2.12212,-5.291587 -0.65644,-3.773127 -1.42504,-5.631192 C 125.75704,7.2456297 128.89,0.31884652 133.58364,1.5558406 Z"
+ id="path5349-8"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccscccsccc" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 111.72715,26.876138 c -1.99457,3.992422 -2.2307,3.850363 -4.55878,6.92067 -0.57956,1.378028 4.89591,-3.943837 5.76902,-6.496225 -1.02889,-0.498698 -0.43741,-0.404465 -1.21024,-0.424445 z"
+ id="path5353-9"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3879"
+ d="m 17.809955,22.804124 c -0.364,-0.186 -0.542,-0.279 -0.542,-0.279 -0.499,-0.195 -0.652,-0.559 -0.474,-1.092 0.195,-0.491 0.576,-0.66 1.143,-0.491 1.947,0.711 3.294,2.02 4.04,3.92 0.118,0.542 -0.076,0.914 -0.592999,1.118 -0.516001,0.161 -0.864001,-0.017 -1.041001,-0.55 -0.136,-0.279 -0.229,-0.466 -0.296,-0.542 -0.186,0.144 -0.423,0.245 -0.72,0.296 -1.01,0.161 -1.6,-0.279 -1.761,-1.338 -0.051,-0.364 0.034,-0.711 0.246,-1.041"
+ style="fill:#000000;stroke-width:1" />
+ </g>
+ <path
+ sodipodi:type="star"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ id="path14581"
+ sodipodi:sides="64"
+ sodipodi:cx="24.943983"
+ sodipodi:cy="6.1232343"
+ sodipodi:r1="3.7441592"
+ sodipodi:r2="3.7396493"
+ sodipodi:arg1="0.78539816"
+ sodipodi:arg2="0.83448555"
+ inkscape:flatsided="true"
+ inkscape:rounded="0"
+ inkscape:randomized="0"
+ d="m 27.591503,8.7707546 -0.27225,0.2467539 -0.295127,0.2188804 -0.315158,0.188899 -0.332157,0.1570984 -0.345956,0.123785 -0.356423,0.089279 -0.363457,0.053914 -0.366992,0.018029 L 24.576991,9.8493643 24.213534,9.7954505 23.857111,9.7061713 23.511155,9.5823863 23.178999,9.4252879 22.86384,9.2363889 22.568714,9.0175085 22.296463,8.7707547 22.049709,8.4985037 21.830828,8.2033777 21.641929,7.8882187 21.484831,7.556062 21.361046,7.2101063 l -0.08928,-0.3564228 -0.05391,-0.3634574 -0.01803,-0.3669918 0.01803,-0.3669918 0.05391,-0.3634574 0.08928,-0.3564229 0.123785,-0.3459556 0.157098,-0.3321568 0.188899,-0.3151589 0.218881,-0.2951261 0.246754,-0.2722509 0.272251,-0.2467538 0.295126,-0.2188804 0.315159,-0.1888991 0.332156,-0.1570984 0.345956,-0.1237849 0.356423,-0.089279 0.363457,-0.053914 0.366992,-0.018029 0.366992,0.018029 0.363457,0.053914 0.356423,0.089279 0.345956,0.1237849 0.332157,0.1570984 0.315158,0.188899 0.295127,0.2188804 0.27225,0.2467539 0.246754,0.2722509 0.218881,0.2951261 0.188899,0.3151589 0.157098,0.3321568 0.123785,0.3459556 0.08928,0.3564228 0.05391,0.3634575 0.01803,0.3669918 -0.01803,0.3669917 -0.05391,0.3634575 -0.08928,0.3564228 -0.123785,0.3459557 -0.157098,0.3321567 -0.188899,0.315159 -0.218881,0.295126 z" />
+ <path
+ d="m 27.591503,46.524287 -0.27225,0.246753 -0.295127,0.218881 -0.315158,0.188899 -0.332157,0.157098 -0.345956,0.123785 -0.356423,0.08928 -0.363457,0.05391 -0.366992,0.01803 -0.366992,-0.01803 -0.363457,-0.05391 -0.356423,-0.08928 -0.345956,-0.123785 -0.332156,-0.157098 -0.315159,-0.188899 -0.295126,-0.218881 -0.272251,-0.246753 -0.246754,-0.272251 -0.218881,-0.295126 -0.188899,-0.315159 -0.157098,-0.332157 -0.123785,-0.345956 -0.08928,-0.356423 -0.05391,-0.363457 -0.01803,-0.366992 0.01803,-0.366992 0.05391,-0.363457 0.08928,-0.356423 0.123785,-0.345955 0.157098,-0.332157 0.188899,-0.315159 0.218881,-0.295126 0.246754,-0.272251 0.272251,-0.246754 0.295126,-0.21888 0.315159,-0.188899 0.332156,-0.157099 0.345956,-0.123785 0.356423,-0.08928 0.363457,-0.05391 0.366992,-0.01803 0.366992,0.01803 0.363457,0.05391 0.356423,0.08928 0.345956,0.123785 0.332157,0.157099 0.315158,0.188899 0.295127,0.21888 0.27225,0.246754 0.246754,0.272251 0.218881,0.295126 0.188899,0.315159 0.157098,0.332156 0.123785,0.345956 0.08928,0.356423 0.05391,0.363457 0.01803,0.366992 -0.01803,0.366992 -0.05391,0.363457 -0.08928,0.356423 -0.123785,0.345956 -0.157098,0.332157 -0.188899,0.315159 -0.218881,0.295126 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="0.83448555"
+ sodipodi:arg1="0.78539816"
+ sodipodi:r2="3.7396493"
+ sodipodi:r1="3.7441592"
+ sodipodi:cy="43.876766"
+ sodipodi:cx="24.943983"
+ sodipodi:sides="64"
+ id="path14583"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ sodipodi:type="star" />
+ <path
+ d="M 27.786864,7.5038459 27.500284,7.7635868 27.189625,7.9939873 26.857878,8.1928283 26.50824,8.3581951 26.144076,8.488495 25.768894,8.5824732 25.386307,8.6392246 25,8.6582026 24.613693,8.6392246 24.231106,8.5824732 23.855924,8.488495 23.49176,8.3581951 23.142122,8.1928283 22.810375,7.9939873 22.499716,7.7635869 22.213136,7.503846 21.953396,7.2172661 21.722995,6.906607 21.524154,6.5748608 21.358787,6.2252221 l -0.1303,-0.3641639 -0.09398,-0.3751819 -0.05675,-0.3825868 -0.01898,-0.3863071 0.01898,-0.3863072 0.05675,-0.3825868 0.09398,-0.3751819 0.1303,-0.3641638 0.165367,-0.3496387 0.198841,-0.3317463 0.230401,-0.310659 0.25974,-0.2865799 0.28658,-0.2597409 0.310659,-0.2304004 0.331747,-0.1988411 0.349638,-0.1653668 0.364164,-0.13029989 0.375182,-0.0939782 0.382587,-0.0567514 L 25,0.77576208 l 0.386307,0.018978 0.382587,0.0567514 0.375182,0.0939782 0.364164,0.1302999 0.349638,0.1653668 0.331747,0.1988411 0.310659,0.2304004 0.28658,0.2597409 0.25974,0.2865799 0.230401,0.310659 0.198841,0.3317463 0.165367,0.3496386 0.1303,0.3641639 0.09398,0.3751819 0.05675,0.3825868 0.01898,0.3863072 -0.01898,0.3863071 -0.05675,0.3825868 -0.09398,0.3751819 -0.1303,0.3641639 -0.165367,0.3496386 -0.198841,0.3317463 -0.230401,0.310659 z"
+ inkscape:randomized="0"
+ inkscape:rounded="0"
+ inkscape:flatsided="true"
+ sodipodi:arg2="0.83448555"
+ sodipodi:arg1="0.78539816"
+ sodipodi:r2="3.9364729"
+ sodipodi:r1="3.9412203"
+ sodipodi:cy="4.7169824"
+ sodipodi:cx="25"
+ sodipodi:sides="64"
+ id="path14585"
+ style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
+ sodipodi:type="star"
+ transform="matrix(0,0.95,-0.95,0,49.086086,1.6421021)" />
+</svg>
--- /dev/null
+<?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="wg.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg18" />
+ <path
+ style="color:#000000"
+ d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 1639,376 H 409 V 273 H 1639 Z M 1484,580 H 564 V 444 h 920 z m -170,717 H 734 V 819 h 580 z m 222,239 v 239 h -137 v -137 h -308 v 137 H 956 V 1638 H 649 v 137 H 512 V 1536 Z M 1459,649 1356,751 H 693 L 588,649 Z m -110,716 127,103 H 572 l 128,-103 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g12"
+ transform="matrix(1,0,0,-1,0,2048)">
+ <path
+ style="color:#000000"
+ d="M 1639,1672 H 409 v 103 h 1230 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="M 1484,1468 H 564 v 136 h 920 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="M 1314,751 H 734 v 478 h 580 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="M 1536,512 V 273 H 1399 V 410 H 1091 V 273 H 956 V 410 H 649 V 273 H 512 v 239 z"
+ display="block"
+ id="path10" />
+ </g>
+ <path
+ style="color:#000000"
+ d="M 1459,649 1356,751 H 693 L 588,649 Z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path14" />
+ <path
+ style="color:#000000"
+ d="m 1349,1365 127,103 H 572 l 128,-103 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path16" />
+</svg>
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="177.17"
- height="177.17"
- shape-rendering="geometricPrecision"
- image-rendering="optimizeQuality"
- fill-rule="evenodd"
- clip-rule="evenodd"
- viewBox="0 0 50 50"
+ height="100%"
+ width="100%"
version="1.1"
- id="svg974"
- sodipodi:docname="wWaffle.svg"
- inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
+ viewBox="0 0 2048 2048"
+ id="svg18"
+ sodipodi:docname="wh.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
<metadata
- id="metadata978">
+ 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 />
</cc:Work>
</rdf:RDF>
</metadata>
+ <defs
+ id="defs22" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:window-width="1920"
+ inkscape:window-width="960"
inkscape:window-height="1060"
- id="namedview976"
+ id="namedview20"
showgrid="false"
- inkscape:zoom="2.3931818"
- inkscape:cx="8.4123423"
- inkscape:cy="122.97195"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1021.6806"
inkscape:window-x="0"
inkscape:window-y="20"
inkscape:window-maximized="0"
- inkscape:current-layer="svg974"
- showguides="false" />
- <defs
- id="defs968">
- <linearGradient
- inkscape:collect="always"
- id="linearGradient4543">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop4539" />
- <stop
- style="stop-color:#ffffff;stop-opacity:0;"
- offset="1"
- id="stop4541" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- id="linearGradient1002">
- <stop
- style="stop-color:#ffffff;stop-opacity:1"
- offset="0"
- id="stop998" />
- <stop
- style="stop-color:#dcdbdb;stop-opacity:1"
- offset="1"
- id="stop1000" />
- </linearGradient>
- <linearGradient
- id="0"
- x1="21.376"
- x2="77.64"
- gradientUnits="userSpaceOnUse">
- <stop
- stop-color="#fff"
- id="stop963" />
- <stop
- offset="1"
- stop-color="#fff"
- stop-opacity="0"
- id="stop965" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient1002"
- id="linearGradient1004"
- x1="-41.790333"
- y1="22.581646"
- x2="-15.82877"
- y2="22.581646"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient5398"
- x1="0"
- y1="0"
- x2="0"
- y2="1">
- <stop
- offset="20%"
- style="stop-color:#000000;stop-opacity:1"
- id="stop5394" />
- <stop
- offset="100%"
- style="stop-color:#4d4d4d;stop-opacity:1"
- id="stop5396" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(0.47111842,-0.19973575)"
- id="0-1"
- x1="21.253"
- y1="37.591999"
- x2="77.639999"
- y2="37.469002"
- gradientUnits="userSpaceOnUse">
- <stop
- stop-color="#fff"
- id="stop3285" />
- <stop
- offset="1"
- stop-color="#fff"
- stop-opacity="0"
- id="stop3287" />
- </linearGradient>
- <linearGradient
- gradientTransform="translate(50.633198,2.6998865)"
- id="0-5"
- x1="21.405001"
- x2="77.639999"
- gradientUnits="userSpaceOnUse">
- <stop
- stop-color="#fff"
- id="stop3911" />
- <stop
- offset="1"
- stop-color="#fff"
- stop-opacity="0"
- id="stop3913" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4543"
- id="linearGradient4545"
- x1="119.21609"
- y1="11.441374"
- x2="209.83548"
- y2="11.441374"
- gradientUnits="userSpaceOnUse" />
- </defs>
- <g
- transform="matrix(0.95,0,0,0.95,1.1939867,1.6421008)"
- id="g14577">
- <rect
- y="4.245285"
- x="23.113207"
- height="40.212261"
- width="3.7735846"
- id="rect14571"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
- <rect
- transform="rotate(90)"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.84308159;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="rect14573"
- width="3.7735846"
- height="47.641506"
- x="23.231133"
- y="-48.820751" />
- </g>
+ inkscape:current-layer="svg18"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1024,864.11538 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path2" />
<path
- sodipodi:type="star"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="path14587"
- sodipodi:sides="64"
- sodipodi:cx="25"
- sodipodi:cy="44.457546"
- sodipodi:r1="3.9412203"
- sodipodi:r2="3.9364729"
- sodipodi:arg1="0.78539816"
- sodipodi:arg2="0.83448555"
- inkscape:flatsided="true"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="m 27.786864,47.24441 -0.28658,0.259741 -0.310659,0.2304 -0.331747,0.198841 -0.349638,0.165367 -0.364164,0.1303 -0.375182,0.09398 -0.382587,0.05675 L 25,48.398767 l -0.386307,-0.01898 -0.382587,-0.05675 -0.375182,-0.09398 -0.364164,-0.1303 -0.349638,-0.165367 -0.331747,-0.198841 -0.310659,-0.2304 -0.28658,-0.259741 -0.25974,-0.28658 -0.230401,-0.310659 -0.198841,-0.331746 -0.165367,-0.349639 -0.1303,-0.364164 -0.09398,-0.375182 -0.05675,-0.382587 -0.01898,-0.386307 0.01898,-0.386307 0.05675,-0.382587 0.09398,-0.375182 0.1303,-0.364163 0.165367,-0.349639 0.198841,-0.331746 0.230401,-0.310659 0.25974,-0.28658 0.28658,-0.259741 0.310659,-0.230401 0.331747,-0.198841 0.349638,-0.165367 0.364164,-0.130299 0.375182,-0.09398 0.382587,-0.05675 L 25,40.516326 l 0.386307,0.01898 0.382587,0.05675 0.375182,0.09398 0.364164,0.130299 0.349638,0.165367 0.331747,0.198841 0.310659,0.230401 0.28658,0.259741 0.25974,0.28658 0.230401,0.310659 0.198841,0.331746 0.165367,0.349639 0.1303,0.364163 0.09398,0.375182 0.05675,0.382587 0.01898,0.386307 -0.01898,0.386307 -0.05675,0.382587 -0.09398,0.375182 -0.1303,0.364164 -0.165367,0.349639 -0.198841,0.331746 -0.230401,0.310659 z"
- transform="matrix(0,0.95,-0.95,0,47.629715,1.6421021)" />
+ style="color:#000000"
+ d="m 988,1120.1154 -83,1 q -34,0 -34,34 0,34 34,34 h 83 v 86 q 0,35 36,35 35,0 35,-35 v -86 h 86 q 33,0 33,-34 0,-34 -33,-34 h -86 v -82 q 0,-36 -35,-36 -36,0 -36,36 z m 36,-578.00002 q 68,0 132,11 64,11 125,28 -117,31 -257,31 -142,0 -257,-31 58,-16 123,-27 65,-11 134,-12 z m 0,1089.00002 q 68,0 68,68 0,68 -68,68 -68,0 -68,-68 0,-68 68,-68 z m 0,-949.00002 q 117,0 225,-23 l -48,123 q -88,14 -177,14 -91,0 -178,-14 l -48,-123 q 107,23 226,23 z m 0,182 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z m -36,-377 h -32 q -56,-90 -107,-113 -24,-12 -53,-22 -29,-10 -67,-10 -7,0 -107,16 -48,7 -76,15 -28,8 -44,10 -57,7 -133,-6 -46,-8 -86,-29 l 48,-78 q 12,12 31,15 19,3 36,8 42,7 80,2 13,-3 51,-7 38,-4 101,-15 75,-11 102,-11 105,0 161,40 34,26 64,72 30,46 31,113 z m 36,-113 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m 35,113 q 0,-66 30,-112 30,-46 66,-73 55,-40 161,-40 26,0 102,11 62,10 100,14 38,4 51,8 38,5 80,-2 16,-4 35,-7 19,-3 33,-16 l 48,78 q -41,21 -87,29 -76,13 -133,6 -17,-2 -44,-10 -27,-8 -75,-15 -101,-16 -107,-16 -39,0 -68,10 -29,10 -52,22 -53,24 -108,113 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path4" />
<g
- id="g19380"
- transform="matrix(0.77598955,0,0,0.77598955,5.3934327,3.4879779)">
- <g
- transform="matrix(1.0975945,0,0,1.0975945,-107.62233,17.126787)"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;stroke-width:1.54272723;stroke-miterlimit:4;stroke-dasharray:none"
- id="g5357">
- <path
- style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 119.66608,20.578823 c 0.12511,0.773672 0.40427,1.44388 1.3,1.7 11.23011,-0.424319 16.82956,-5.233235 20.30001,-11.7 l 0.2,-2.099999 c -2.10707,-8.89280401 -8.15113,-13.4502442 -16.2,-15.8 -4.40015,-0.5317426 -7.59668,1.3815851 -10.20001,4.5 -2.59354,2.64077835 -4.39616,5.9439949 -5.3,10 -0.9084,3.60641 -5.79067,1.6990508 -4.9,-0.6 2.76583,-4.0566968 11.00069,-10.7605086 4.9,-12.3 -8.75831,-2.0518262 -7.05798,4.7061225 -5.2,6.20000004 1.23982,-0.5457366 2.00197,-1.22280981 2.4,-2.00000004 -0.25951,-0.4357328 -0.98217,-0.8162564 0,-1.4 0.5387,0.045976 0.81918,0.2856122 1,0.6 0,1 0.50403,1.1455069 -3.6,4 -7.640521,5.2325602 -2.06546,17.121851 4.61159,18.198353 1.32064,-0.324595 1.53284,-0.226663 2.43634,0.347926 l 3.15207,0.35372 c 2.39802,-0.822905 4.4665,-1.650139 5.70313,-3.159477 0.32094,-0.38845 0.4935,-0.247984 -0.60313,3.159477 z"
- id="path5349"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccc" />
- <path
- style="fill:#1f1a17;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 109.56608,17.578823 c -1.32838,4.066443 -4.04985,6.321863 -6.6,8.8 -0.20576,0.304421 0.14574,0.397532 1,0.3 3.90473,-1.863513 7.52129,-4.086217 8.76166,-7.725974 -0.78642,-0.41302 -1.9736,-1.357866 -3.16166,-1.374026 z"
- id="path5353"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- <g
- transform="matrix(0.79655895,0,0,0.79655895,-75.421737,16.247409)"
- style="opacity:1;fill:#ffff00;fill-opacity:1;stroke-width:1.54272723;stroke-miterlimit:4;stroke-dasharray:none"
- id="g5357-2">
- <path
- style="fill:url(#linearGradient4545);fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 133.58361,1.5558616 c -8.75606,10.1109584 -4.19979,7.5116959 -2.74223,10.1130104 -0.10968,5.65697 -1.90023,10.862018 -3.55112,15.867945 0.12511,0.773672 0.47829,1.517901 1.37402,1.774021 12.03339,-0.558199 18.98339,-7.721951 22.11462,-14.132179 l 0.43477,-2.601728 c -2.89219,-8.7881214 -9.12021,-14.2749978 -15.98474,-18.0311568 -3.95603,-2.012167 -6.44991,-1.8836905 -11.42192,-0.2457 -8.66328,7.0080302 -11.21253,16.0768238 -12.11637,20.1328288 -1.01612,3.667963 -15.446226,0.776698 -6.82456,-7.854079 3.2983,-3.3578275 11.23128,-10.4578594 4.9,-12.3 -8.75831,-2.0518262 -6.68787,4.85416494 -5.71815,5.60783029 0.8142,-0.43470477 0.7066,-0.35306049 1.38221,-0.98220829 -1.17923,-0.8361833 -0.84585,-1.8283785 0.25907,-2.5103183 1.26041,-0.7312468 2.29961,-0.5841371 3.68327,0.3779364 2.30121,3.99968414 -3.10867,6.3374791 -6.06121,8.5893156 -7.571668,6.8550703 0.11863,18.3130553 6.94372,20.6479193 l 0.77482,-1.497349 c 1.024,0.222539 2.43711,0.731241 3.93177,1.474031 0.11862,0.05895 -0.0661,1.049227 -0.0564,1.233499 0.78343,-0.270382 4.65893,-6.09553 4.7812,-6.115529 1.48143,0.230311 1.07354,3.434896 -1.37652,5.984803 4.20113,-1.72865 7.84001,-6.076464 9.2663,-9.632977 2.12212,-5.291587 -0.65644,-3.773127 -1.42504,-5.631192 C 125.75704,7.2456297 128.89,0.31884652 133.58364,1.5558406 Z"
- id="path5349-8"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccscccsccc" />
- <path
- style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.54272723;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 111.72715,26.876138 c -1.99457,3.992422 -2.2307,3.850363 -4.55878,6.92067 -0.57956,1.378028 4.89591,-3.943837 5.76902,-6.496225 -1.02889,-0.498698 -0.43741,-0.404465 -1.21024,-0.424445 z"
- id="path5353-9"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc" />
- </g>
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g16"
+ transform="matrix(1,0,0,-1,0,2030.1154)">
+ <path
+ style="color:#000000"
+ d="m 1024,1488 q 68,0 132,-11 64,-11 125,-28 -117,-31 -257,-31 -142,0 -257,31 58,16 123,27 65,11 134,12 z"
+ display="block"
+ id="path6" />
<path
- inkscape:connector-curvature="0"
- id="path3879"
- d="m 17.809955,22.804124 c -0.364,-0.186 -0.542,-0.279 -0.542,-0.279 -0.499,-0.195 -0.652,-0.559 -0.474,-1.092 0.195,-0.491 0.576,-0.66 1.143,-0.491 1.947,0.711 3.294,2.02 4.04,3.92 0.118,0.542 -0.076,0.914 -0.592999,1.118 -0.516001,0.161 -0.864001,-0.017 -1.041001,-0.55 -0.136,-0.279 -0.229,-0.466 -0.296,-0.542 -0.186,0.144 -0.423,0.245 -0.72,0.296 -1.01,0.161 -1.6,-0.279 -1.761,-1.338 -0.051,-0.364 0.034,-0.711 0.246,-1.041"
- style="fill:#000000;stroke-width:1" />
+ style="color:#000000"
+ d="m 1024,399 q 68,0 68,-68 0,-68 -68,-68 -68,0 -68,68 0,68 68,68 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 1024,1348 q 117,0 225,23 l -48,-123 q -88,-14 -177,-14 -91,0 -178,14 l -48,123 q 107,-23 226,-23 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="m 988,1543 h -32 q -56,90 -107,113 -24,12 -53,22 -29,10 -67,10 -7,0 -107,-16 -48,-7 -76,-15 -28,-8 -44,-10 -57,-7 -133,6 -46,8 -86,29 l 48,78 q 12,-12 31,-15 19,-3 36,-8 42,-7 80,-2 13,3 51,7 38,4 101,15 75,11 102,11 105,0 161,-40 34,-26 64,-72 30,-46 31,-113 z"
+ display="block"
+ id="path12" />
+ <path
+ style="color:#000000"
+ d="m 1059,1543 q 0,66 30,112 30,46 66,73 55,40 161,40 26,0 102,-11 62,-10 100,-14 38,-4 51,-8 38,-5 80,2 16,4 35,7 19,3 33,16 l 48,-78 q -41,-21 -87,-29 -76,-13 -133,-6 -17,2 -44,10 -27,8 -75,15 -101,16 -107,16 -39,0 -68,-10 -29,-10 -52,-22 -53,-24 -108,-113 z"
+ display="block"
+ id="path14" />
</g>
<path
- sodipodi:type="star"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- id="path14581"
- sodipodi:sides="64"
- sodipodi:cx="24.943983"
- sodipodi:cy="6.1232343"
- sodipodi:r1="3.7441592"
- sodipodi:r2="3.7396493"
- sodipodi:arg1="0.78539816"
- sodipodi:arg2="0.83448555"
- inkscape:flatsided="true"
- inkscape:rounded="0"
- inkscape:randomized="0"
- d="m 27.591503,8.7707546 -0.27225,0.2467539 -0.295127,0.2188804 -0.315158,0.188899 -0.332157,0.1570984 -0.345956,0.123785 -0.356423,0.089279 -0.363457,0.053914 -0.366992,0.018029 L 24.576991,9.8493643 24.213534,9.7954505 23.857111,9.7061713 23.511155,9.5823863 23.178999,9.4252879 22.86384,9.2363889 22.568714,9.0175085 22.296463,8.7707547 22.049709,8.4985037 21.830828,8.2033777 21.641929,7.8882187 21.484831,7.556062 21.361046,7.2101063 l -0.08928,-0.3564228 -0.05391,-0.3634574 -0.01803,-0.3669918 0.01803,-0.3669918 0.05391,-0.3634574 0.08928,-0.3564229 0.123785,-0.3459556 0.157098,-0.3321568 0.188899,-0.3151589 0.218881,-0.2951261 0.246754,-0.2722509 0.272251,-0.2467538 0.295126,-0.2188804 0.315159,-0.1888991 0.332156,-0.1570984 0.345956,-0.1237849 0.356423,-0.089279 0.363457,-0.053914 0.366992,-0.018029 0.366992,0.018029 0.363457,0.053914 0.356423,0.089279 0.345956,0.1237849 0.332157,0.1570984 0.315158,0.188899 0.295127,0.2188804 0.27225,0.2467539 0.246754,0.2722509 0.218881,0.2951261 0.188899,0.3151589 0.157098,0.3321568 0.123785,0.3459556 0.08928,0.3564228 0.05391,0.3634575 0.01803,0.3669918 -0.01803,0.3669917 -0.05391,0.3634575 -0.08928,0.3564228 -0.123785,0.3459557 -0.157098,0.3321567 -0.188899,0.315159 -0.218881,0.295126 z" />
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 947.17182,471.41109 c -30.45334,-45.32634 -64.86074,-80.9966 -91.76761,-95.13576 -22.95398,-12.06198 -61.45362,-26.6333 -81.08074,-30.68739 -26.67391,-5.50965 -51.01232,-4.28682 -116.05835,5.8311 -72.89746,11.33921 -76.88494,12.10192 -119.01258,22.76439 -33.45007,8.46618 -33.89255,8.5119 -82.33748,8.50794 -66.52062,-0.005 -108.55722,-7.30624 -155.48269,-27.00384 l -17.29486,-7.25975 5.09615,-8.37924 c 2.80289,-4.60858 13.30666,-21.68954 23.34173,-37.95769 l 18.24557,-29.57846 9.70164,5.52032 c 5.33589,3.03617 22.74806,8.43988 38.6937,12.00823 40.29849,9.0181 76.74353,9.11601 142.641,0.38322 26.78868,-3.55006 60.80841,-8.50481 75.5994,-11.01056 85.2588,-14.44374 136.26154,-18.40583 179.53084,-13.94666 71.73861,7.39311 116.60421,29.22282 153.48533,74.67949 36.13568,44.53787 51.19578,79.03611 55.36431,126.823 l 1.65194,18.9377 h -15.28893 -15.28896 z"
+ id="path98" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 960.21744,609.71854 c -30.46594,-1.92131 -88.37044,-8.34131 -113.06287,-12.53553 -34.16061,-5.80248 -71.32671,-14.1993 -71.32671,-16.11462 0,-3.20983 87.1612,-22.0073 134.42087,-28.98966 62.98166,-9.30519 159.43327,-10.45377 215.80337,-2.56986 47.4172,6.63175 146.12,27.88938 146.12,31.46988 0,4.28726 -90.4772,20.37707 -143.8006,25.57245 -26.8902,2.61996 -142.34881,4.79472 -168.15406,3.16734 z"
+ id="path100" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1061.8034,464.453 c 3.254,-50.76824 23.7655,-92.95822 66.2041,-136.17488 32.4584,-33.05348 60.9141,-48.19648 108.9705,-57.98975 48.4347,-9.87036 92.2077,-8.96955 177.8351,3.6597 21.6861,3.1985 59.2598,8.3515 83.4972,11.45111 24.2374,3.09962 53.8564,7.35888 65.8201,9.46503 39.7549,6.99867 118.5147,-2.11356 143.1736,-16.56469 l 9.875,-5.78713 18.2456,29.57846 c 10.0351,16.26815 20.5389,33.34911 23.3417,37.95769 l 5.0962,8.37924 -17.2949,7.25975 c -46.8542,19.66769 -89.5876,26.97583 -157.802,26.98684 l -48.7067,0.008 -38.2695,-9.86495 c -45.6661,-11.77155 -163.9011,-30.71085 -191.723,-30.71085 -34.8132,0 -72.4411,10.70844 -114.0588,32.45977 -31.5375,16.48291 -63.3679,48.11742 -92.5737,92.00384 l -12.8686,19.33707 h -15.0685 -15.0685 z"
+ id="path102" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 926.58664,790.93079 c -48.45784,-4.4723 -76.71362,-8.51955 -79.27829,-11.35554 -1.96603,-2.17401 -48.13304,-117.97896 -47.38055,-118.84898 0.13937,-0.16115 13.29983,2.13616 29.24547,5.10512 122.21863,22.7562 264.35173,22.78487 389.07363,0.0785 15.6267,-2.84494 28.4122,-4.79397 28.4122,-4.33117 0,3.21136 -45.0594,115.95904 -47.1855,118.06753 -2.8563,2.83272 -47.2869,8.7649 -93.1361,12.43514 -37.9794,3.04026 -141.52393,2.37747 -179.75086,-1.15058 z"
+ id="path104" />
<path
- d="m 27.591503,46.524287 -0.27225,0.246753 -0.295127,0.218881 -0.315158,0.188899 -0.332157,0.157098 -0.345956,0.123785 -0.356423,0.08928 -0.363457,0.05391 -0.366992,0.01803 -0.366992,-0.01803 -0.363457,-0.05391 -0.356423,-0.08928 -0.345956,-0.123785 -0.332156,-0.157098 -0.315159,-0.188899 -0.295126,-0.218881 -0.272251,-0.246753 -0.246754,-0.272251 -0.218881,-0.295126 -0.188899,-0.315159 -0.157098,-0.332157 -0.123785,-0.345956 -0.08928,-0.356423 -0.05391,-0.363457 -0.01803,-0.366992 0.01803,-0.366992 0.05391,-0.363457 0.08928,-0.356423 0.123785,-0.345955 0.157098,-0.332157 0.188899,-0.315159 0.218881,-0.295126 0.246754,-0.272251 0.272251,-0.246754 0.295126,-0.21888 0.315159,-0.188899 0.332156,-0.157099 0.345956,-0.123785 0.356423,-0.08928 0.363457,-0.05391 0.366992,-0.01803 0.366992,0.01803 0.363457,0.05391 0.356423,0.08928 0.345956,0.123785 0.332157,0.157099 0.315158,0.188899 0.295127,0.21888 0.27225,0.246754 0.246754,0.272251 0.218881,0.295126 0.188899,0.315159 0.157098,0.332156 0.123785,0.345956 0.08928,0.356423 0.05391,0.363457 0.01803,0.366992 -0.01803,0.366992 -0.05391,0.363457 -0.08928,0.356423 -0.123785,0.345956 -0.157098,0.332157 -0.188899,0.315159 -0.218881,0.295126 z"
- inkscape:randomized="0"
- inkscape:rounded="0"
- inkscape:flatsided="true"
- sodipodi:arg2="0.83448555"
- sodipodi:arg1="0.78539816"
- sodipodi:r2="3.7396493"
- sodipodi:r1="3.7441592"
- sodipodi:cy="43.876766"
- sodipodi:cx="24.943983"
- sodipodi:sides="64"
- id="path14583"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60862446;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- sodipodi:type="star" />
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 971.81427,1489.269 c -33.7343,-34.0367 -67.92481,-65.5709 -100.89241,-93.0538 C 727.7932,1276.898 712.94334,1262.0988 689.43513,1215.3477 c -35.64978,-70.8972 -38.89555,-152.0899 -8.95504,-224.01025 17.47633,-41.98002 48.40993,-80.56982 83.42688,-104.0754 20.8143,-13.97185 67.23106,-35.85433 75.65918,-35.66836 3.8513,0.085 19.52694,1.82817 34.83475,3.87375 49.50664,6.61557 86.90237,8.81829 149.5991,8.81183 64.5397,-0.007 103.5443,-2.40639 155.2128,-9.54937 35.4041,-4.89449 34.5399,-5.05898 71.4319,13.59618 49.5753,25.06869 85.7117,60.84318 109.4786,108.38215 49.3986,98.80777 32.1307,215.45167 -44.2309,298.77907 -8.1005,8.8394 -51.2582,46.4757 -95.906,83.6361 -92.232,76.7649 -127.2998,108.6652 -166.9212,151.8437 -15.2675,16.6383 -28.314,30.1466 -28.992,30.0184 -0.6781,-0.1281 -24.1946,-23.4006 -52.25893,-51.7165 z m 74.36703,-183.3493 c 12.8571,-8.4243 13.7046,-12.2248 14.5769,-65.3684 l 0.808,-49.2261 47.8987,-0.7453 c 55.0636,-0.8567 59.784,-2.1479 66.1661,-18.0983 4.7794,-11.9451 4.7794,-22.9297 0,-34.8748 -6.3581,-15.8903 -11.0983,-17.1878 -66.1595,-18.1099 l -47.892,-0.8019 -0.8887,-46.7677 c -0.9815,-51.6509 -2.6343,-58.5058 -15.7406,-65.2833 -10.1912,-5.27 -34.187,-4.6222 -43.7036,1.1799 -12.77518,7.7888 -14.35645,15.0548 -14.35645,65.968 v 45.3021 l -41.16875,0.1009 c -48.20479,0.1183 -59.1611,1.7612 -67.52557,10.1257 -5.64188,5.642 -6.11429,7.6295 -6.11429,25.7236 0,18.0106 0.49019,20.0993 6.013,25.6222 8.62666,8.6266 18.87421,10.2104 66.46718,10.2726 l 42.32843,0.055 v 44.9378 c 0,48.9596 0.71455,55.7952 6.65597,63.6719 8.67818,11.505 39.13738,15.1598 52.63518,6.3157 z"
+ id="path106" />
<path
- d="M 27.786864,7.5038459 27.500284,7.7635868 27.189625,7.9939873 26.857878,8.1928283 26.50824,8.3581951 26.144076,8.488495 25.768894,8.5824732 25.386307,8.6392246 25,8.6582026 24.613693,8.6392246 24.231106,8.5824732 23.855924,8.488495 23.49176,8.3581951 23.142122,8.1928283 22.810375,7.9939873 22.499716,7.7635869 22.213136,7.503846 21.953396,7.2172661 21.722995,6.906607 21.524154,6.5748608 21.358787,6.2252221 l -0.1303,-0.3641639 -0.09398,-0.3751819 -0.05675,-0.3825868 -0.01898,-0.3863071 0.01898,-0.3863072 0.05675,-0.3825868 0.09398,-0.3751819 0.1303,-0.3641638 0.165367,-0.3496387 0.198841,-0.3317463 0.230401,-0.310659 0.25974,-0.2865799 0.28658,-0.2597409 0.310659,-0.2304004 0.331747,-0.1988411 0.349638,-0.1653668 0.364164,-0.13029989 0.375182,-0.0939782 0.382587,-0.0567514 L 25,0.77576208 l 0.386307,0.018978 0.382587,0.0567514 0.375182,0.0939782 0.364164,0.1302999 0.349638,0.1653668 0.331747,0.1988411 0.310659,0.2304004 0.28658,0.2597409 0.25974,0.2865799 0.230401,0.310659 0.198841,0.3317463 0.165367,0.3496386 0.1303,0.3641639 0.09398,0.3751819 0.05675,0.3825868 0.01898,0.3863072 -0.01898,0.3863071 -0.05675,0.3825868 -0.09398,0.3751819 -0.1303,0.3641639 -0.165367,0.3496386 -0.198841,0.3317463 -0.230401,0.310659 z"
- inkscape:randomized="0"
- inkscape:rounded="0"
- inkscape:flatsided="true"
- sodipodi:arg2="0.83448555"
- sodipodi:arg1="0.78539816"
- sodipodi:r2="3.9364729"
- sodipodi:r1="3.9412203"
- sodipodi:cy="4.7169824"
- sodipodi:cx="25"
- sodipodi:sides="64"
- id="path14585"
- style="opacity:1;fill:#1f1a17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.69328892;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
- sodipodi:type="star"
- transform="matrix(0,0.95,-0.95,0,49.086086,1.6421021)" />
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 997.32729,1762.3466 c -16.51064,-5.022 -26.29282,-13.3548 -33.30723,-28.3726 -5.20533,-11.1445 -6.07755,-16.1561 -6.09806,-35.0385 -0.0216,-19.8695 0.65961,-23.4011 6.93417,-35.9502 5.32746,-10.6549 9.47402,-15.4484 17.69378,-20.4544 22.68075,-13.8128 60.21935,-13.8128 82.90005,0 8.2198,5.006 12.3664,9.7995 17.6938,20.4544 6.2664,12.5327 6.9581,16.1067 6.9581,35.9502 0,19.8434 -0.6917,23.4174 -6.9581,35.9501 -4.307,8.6142 -9.9728,15.9127 -14.8709,19.1563 -17.8607,11.8278 -47.8295,15.3358 -70.94561,8.3047 z"
+ id="path108" />
</svg>
--- /dev/null
+<?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="wi.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg6" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path2" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path4" />
+</svg>
--- /dev/null
+<?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="svg34"
+ sodipodi:docname="wl.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata40">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs38" />
+ <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="namedview36"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg34" />
+ <path
+ style="color:#000000"
+ d="m 1024,1593 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z m 0,70 q 67,0 67,67 0,66 -67,66 -66,0 -66,-66 0,-67 66,-67 z M 1533,656 q -193,49 -505,49 -320,0 -511,-50 l 15,-96 q 195,46 496,46 299,0 488,-45 z m 25,60 65,115 q -48,-19 -98,-19 -134,0 -214,109 -60,-50 -134,-50 -96,0 -153,75 -64,-70 -153,-70 -72,0 -132,49 -84,-107 -217,-107 -51,0 -101,19 l 70,-120 q 194,56 533,56 345,0 534,-57 z m -448,239 -85,489 -85,-483 q 3,2 14,10 23,45 70,45 51,0 66,-45 6,-6 20,-16 z m 277,-19 v 463 L 1222,945 q 19,7 32,18 20,25 54,25 40,0 64,-35 3,-4 7,-8 4,-4 8,-9 z M 825,950 661,1399 V 942 q 3,4 9,10 20,42 66,42 38,0 62,-32 27,-12 27,-12 z M 571,894 356,1265 411,927 q 57,-40 111,-40 21,0 49,7 z m 903,-5 q 23,-7 51,-7 61,0 114,38 l 55,346 z m 60,-506 -30,113 q -196,43 -480,43 -281,0 -479,-43 L 514,382 q 186,56 511,56 317,0 509,-55 z m 106,-128 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -81,36 q -183,76 -531,76 -355,0 -537,-78 175,-69 534,-69 172,0 314,19 142,19 220,52 z M 604,1543 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z m 0,70 q 66,0 66,66 0,66 -66,66 -67,0 -67,-66 0,-66 67,-66 z m 840,0 q 67,0 67,66 0,66 -67,66 -66,0 -66,-66 0,-66 66,-66 z m 0,-70 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z M 236,1433 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 0,70 q 67,0 67,66 0,67 -67,67 -66,0 -66,-67 0,-66 66,-66 z m 1578,0 q 66,0 66,66 0,67 -66,67 -67,0 -67,-67 0,-66 67,-66 z m 0,-70 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g32"
+ transform="matrix(1,0,0,-1,0,2020)">
+ <path
+ style="color:#000000"
+ d="m 1024,357 q 67,0 67,-67 0,-66 -67,-66 -66,0 -66,66 0,67 66,67 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="m 1533,1364 q -193,-49 -505,-49 -320,0 -511,50 l 15,96 q 195,-46 496,-46 299,0 488,45 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1558,1304 65,-115 q -48,19 -98,19 -134,0 -214,-109 -60,50 -134,50 -96,0 -153,-75 -64,70 -153,70 -72,0 -132,-49 -84,107 -217,107 -51,0 -101,-19 l 70,120 q 194,-56 533,-56 345,0 534,57 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 1110,1065 -85,-489 -85,483 q 3,-2 14,-10 23,-45 70,-45 51,0 66,45 6,6 20,16 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="M 1387,1084 V 621 l -165,454 q 19,-7 32,-18 20,-25 54,-25 40,0 64,35 3,4 7,8 4,4 8,9 z"
+ display="block"
+ id="path12" />
+ <path
+ style="color:#000000"
+ d="M 825,1070 661,621 v 457 q 3,-4 9,-10 20,-42 66,-42 38,0 62,32 27,12 27,12 z"
+ display="block"
+ id="path14" />
+ <path
+ style="color:#000000"
+ d="m 571,1126 -215,-371 55,338 q 57,40 111,40 21,0 49,-7 z"
+ display="block"
+ id="path16" />
+ <path
+ style="color:#000000"
+ d="m 1474,1131 q 23,7 51,7 61,0 114,-38 l 55,-346 z"
+ display="block"
+ id="path18" />
+ <path
+ style="color:#000000"
+ d="m 1534,1637 -30,-113 q -196,-43 -480,-43 -281,0 -479,43 l -31,114 q 186,-56 511,-56 317,0 509,55 z"
+ display="block"
+ id="path20" />
+ <path
+ style="color:#000000"
+ d="m 1559,1729 q -183,-76 -531,-76 -355,0 -537,78 175,69 534,69 172,0 314,-19 142,-19 220,-52 z"
+ display="block"
+ id="path22" />
+ <path
+ style="color:#000000"
+ d="m 604,407 q 66,0 66,-66 0,-66 -66,-66 -67,0 -67,66 0,66 67,66 z"
+ display="block"
+ id="path24" />
+ <path
+ style="color:#000000"
+ d="m 1444,407 q 67,0 67,-66 0,-66 -67,-66 -66,0 -66,66 0,66 66,66 z"
+ display="block"
+ id="path26" />
+ <path
+ style="color:#000000"
+ d="m 236,517 q 67,0 67,-66 0,-67 -67,-67 -66,0 -66,67 0,66 66,66 z"
+ display="block"
+ id="path28" />
+ <path
+ style="color:#000000"
+ d="m 1814,517 q 66,0 66,-66 0,-67 -66,-67 -67,0 -67,67 0,66 67,66 z"
+ display="block"
+ id="path30" />
+ </g>
+</svg>
--- /dev/null
+<?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="svg34"
+ sodipodi:docname="wo.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <metadata
+ id="metadata40">
+ <rdf:RDF>
+ <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>
+ <defs
+ id="defs38" />
+ <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="namedview36"
+ showgrid="false"
+ inkscape:zoom="0.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1021.6806"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg34"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1024,1593 q -57,0 -96,40 -39,40 -40,97 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 41,-96 0,-57 -40,-97 -40,-40 -97,-40 z m 0,70 q 67,0 67,67 0,66 -67,66 -66,0 -66,-66 0,-67 66,-67 z M 1533,656 q -193,49 -505,49 -320,0 -511,-50 l 15,-96 q 195,46 496,46 299,0 488,-45 z m 25,60 65,115 q -48,-19 -98,-19 -134,0 -214,109 -60,-50 -134,-50 -96,0 -153,75 -64,-70 -153,-70 -72,0 -132,49 -84,-107 -217,-107 -51,0 -101,19 l 70,-120 q 194,56 533,56 345,0 534,-57 z m -448,239 -85,489 -85,-483 q 3,2 14,10 23,45 70,45 51,0 66,-45 6,-6 20,-16 z m 277,-19 v 463 L 1222,945 q 19,7 32,18 20,25 54,25 40,0 64,-35 3,-4 7,-8 4,-4 8,-9 z M 825,950 661,1399 V 942 q 3,4 9,10 20,42 66,42 38,0 62,-32 27,-12 27,-12 z M 571,894 356,1265 411,927 q 57,-40 111,-40 21,0 49,7 z m 903,-5 q 23,-7 51,-7 61,0 114,38 l 55,346 z m 60,-506 -30,113 q -196,43 -480,43 -281,0 -479,-43 L 514,382 q 186,56 511,56 317,0 509,-55 z m 106,-128 q -49,-43 -220,-72 -171,-29 -394,-29 -227,0 -399,30 -172,30 -217,75 l 63,240 -28,157 -88,153 -85,622 49,19 274,-462 6,550 68,12 209,-553 112,595 h 69 l 112,-593 207,551 69,-12 6,-550 275,463 47,-22 -83,-619 -89,-153 -28,-159 z m -81,36 q -183,76 -531,76 -355,0 -537,-78 175,-69 534,-69 172,0 314,19 142,19 220,52 z M 604,1543 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,40 56,0 96,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -96,-40 z m 0,70 q 66,0 66,66 0,66 -66,66 -67,0 -67,-66 0,-66 67,-66 z m 840,0 q 67,0 67,66 0,66 -67,66 -66,0 -66,-66 0,-66 66,-66 z m 0,-70 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,40 57,0 97,-40 40,-40 40,-96 0,-57 -40,-96 -40,-39 -97,-40 z M 236,1433 q -57,0 -96,39 -39,39 -40,97 0,56 39,96 39,40 97,41 57,0 97,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -97,-40 z m 0,70 q 67,0 67,66 0,67 -67,67 -66,0 -66,-67 0,-66 66,-66 z m 1578,0 q 66,0 66,66 0,67 -66,67 -67,0 -67,-67 0,-66 67,-66 z m 0,-70 q -57,0 -97,39 -40,39 -40,97 0,56 40,96 40,40 97,41 56,0 96,-40 40,-40 40,-97 0,-57 -40,-96 -40,-39 -96,-40 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g32"
+ transform="matrix(1,0,0,-1,0,2020)">
+ <path
+ style="color:#000000"
+ d="m 1024,357 q 67,0 67,-67 0,-66 -67,-66 -66,0 -66,66 0,67 66,67 z"
+ display="block"
+ id="path4" />
+ <path
+ style="color:#000000"
+ d="m 1533,1364 q -193,-49 -505,-49 -320,0 -511,50 l 15,96 q 195,-46 496,-46 299,0 488,45 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1558,1304 65,-115 q -48,19 -98,19 -134,0 -214,-109 -60,50 -134,50 -96,0 -153,-75 -64,70 -153,70 -72,0 -132,-49 -84,107 -217,107 -51,0 -101,-19 l 70,120 q 194,-56 533,-56 345,0 534,57 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 1110,1065 -85,-489 -85,483 q 3,-2 14,-10 23,-45 70,-45 51,0 66,45 6,6 20,16 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="M 1387,1084 V 621 l -165,454 q 19,-7 32,-18 20,-25 54,-25 40,0 64,35 3,4 7,8 4,4 8,9 z"
+ display="block"
+ id="path12" />
+ <path
+ style="color:#000000"
+ d="M 825,1070 661,621 v 457 q 3,-4 9,-10 20,-42 66,-42 38,0 62,32 27,12 27,12 z"
+ display="block"
+ id="path14" />
+ <path
+ style="color:#000000"
+ d="m 571,1126 -215,-371 55,338 q 57,40 111,40 21,0 49,-7 z"
+ display="block"
+ id="path16" />
+ <path
+ style="color:#000000"
+ d="m 1474,1131 q 23,7 51,7 61,0 114,-38 l 55,-346 z"
+ display="block"
+ id="path18" />
+ <path
+ style="color:#000000"
+ d="m 1534,1637 -30,-113 q -196,-43 -480,-43 -281,0 -479,43 l -31,114 q 186,-56 511,-56 317,0 509,55 z"
+ display="block"
+ id="path20" />
+ <path
+ style="color:#000000"
+ d="m 1559,1729 q -183,-76 -531,-76 -355,0 -537,78 175,69 534,69 172,0 314,-19 142,-19 220,-52 z"
+ display="block"
+ id="path22" />
+ <path
+ style="color:#000000"
+ d="m 604,407 q 66,0 66,-66 0,-66 -66,-66 -67,0 -67,66 0,66 67,66 z"
+ display="block"
+ id="path24" />
+ <path
+ style="color:#000000"
+ d="m 1444,407 q 67,0 67,-66 0,-66 -67,-66 -66,0 -66,66 0,66 66,66 z"
+ display="block"
+ id="path26" />
+ <path
+ style="color:#000000"
+ d="m 236,517 q 67,0 67,-66 0,-67 -67,-67 -66,0 -66,67 0,66 66,66 z"
+ display="block"
+ id="path28" />
+ <path
+ style="color:#000000"
+ d="m 1814,517 q 66,0 66,-66 0,-67 -66,-67 -67,0 -67,67 0,66 67,66 z"
+ display="block"
+ id="path30" />
+ </g>
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="M 889.47678,362.90619 C 730.17696,354.10255 593.79445,329.77628 507.96343,294.85644 l -13.79035,-5.61052 9.20338,-3.86817 c 30.41234,-12.78231 109.73294,-32.12785 171.17501,-41.74798 88.42775,-13.84533 173.4185,-19.73686 308.85963,-21.41004 180.2871,-2.22719 318.2009,7.74617 441.8392,31.95199 52.992,10.37474 127.5651,31.89837 127.5651,36.81841 0,2.61331 -35.7458,15.254 -72.9319,25.79067 -75.5906,21.41861 -154.9807,33.99216 -278.452,44.10033 -38.6307,3.16256 -264.80493,4.63078 -311.95472,2.02506 z"
+ id="path70" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 866.28312,534.5427 c -88.18293,-4.755 -182.28514,-14.66593 -253.197,-26.66694 -45.53136,-7.70566 -64.62258,-11.76771 -66.71693,-14.19539 -2.01445,-2.33506 -30.76576,-107.82364 -29.68288,-108.90651 0.40788,-0.40789 10.08794,1.84517 21.51122,5.00679 78.12793,21.62346 189.71561,37.19241 325.76623,45.45161 59.06158,3.58544 259.07664,3.5748 321.23214,-0.0172 128.3292,-7.41589 247.134,-23.8579 326.4508,-45.17911 11.1619,-3.00046 20.2944,-4.90317 20.2944,-4.22825 0,1.93989 -28.242,108.13763 -28.9644,108.91412 -1.3501,1.45121 -57.3734,11.93946 -94.0462,17.60662 -49.7773,7.69223 -109.3579,14.25153 -172.7085,19.01367 -58.2448,4.37833 -308.02102,6.53929 -369.93888,3.20056 z"
+ id="path72" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="M 888.3171,701.59761 C 777.74593,696.7451 681.16019,686.89563 601.87542,672.38728 c -28.37286,-5.19195 -81.33543,-16.88631 -83.01873,-18.33087 -0.658,-0.56468 13.39491,-92.31459 14.27719,-93.2142 0.23966,-0.24438 9.5828,1.59384 20.76253,4.08493 139.09659,30.99373 365.96638,46.54415 575.51679,39.44785 147.0785,-4.98072 241.5785,-14.38137 341.8322,-34.00468 23.3838,-4.57707 42.9629,-7.87516 43.5089,-7.32909 0.5461,0.54607 4.5855,21.21889 8.9764,45.9396 5.4341,30.59313 7.1951,45.43407 5.5145,46.47274 -3.5622,2.20157 -65.5875,15.20633 -98.1965,20.58874 -60.277,9.94925 -133.5157,17.73831 -219.1801,23.31015 -49.6787,3.23123 -266.75837,4.73757 -323.5515,2.24516 z"
+ id="path74" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1017.9812,937.83079 c -10.6763,-12.06104 -40.20143,-33.05464 -59.72727,-42.46868 -28.52808,-13.7543 -43.90956,-17.57057 -76.89493,-19.07823 -46.35255,-2.11863 -83.99585,8.05785 -121.79479,32.92599 -10.64881,7.00592 -19.67205,12.73803 -20.05161,12.73803 -0.37957,0 -9.32427,-9.03704 -19.87713,-20.08231 -43.14904,-45.16246 -89.89235,-70.42527 -149.55868,-80.83021 -38.09475,-6.64317 -92.13637,-3.27697 -128.35323,7.99498 -8.11863,2.5268 -15.1596,4.19574 -15.64659,3.70875 -0.63937,-0.63937 62.69896,-111.36656 65.27493,-114.11273 0.1945,-0.20735 9.74708,2.14989 21.22794,5.23832 32.87062,8.84242 95.92719,21.08624 141.48131,27.4717 103.85554,14.55775 182.67803,19.74622 325.8709,21.45036 231.10985,2.75044 401.53895,-11.39853 534.46105,-44.37082 22.8777,-5.67497 42.3314,-9.86347 43.2306,-9.30776 2.8275,1.7475 60.7508,105.58261 59.5616,106.77188 -0.6225,0.62249 -9.9939,-1.43632 -20.8253,-4.57514 -100.838,-29.2217 -214.059,5.9525 -275.4977,85.58851 l -9.3672,12.14171 -20.2413,-13.46339 c -36.5341,-24.30042 -70.7114,-34.64989 -114.4251,-34.64989 -56.423,0 -97.4043,16.34243 -134.9942,53.8327 -9.9636,9.9372 -18.4125,18.06764 -18.7753,18.06764 -0.3628,0 -2.6479,-2.24614 -5.078,-4.99141 z"
+ id="path76" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 359.23528,1250.1382 c 0.78932,-3.827 12.94057,-77.8704 27.00276,-164.5408 14.0622,-86.67054 25.87784,-157.89297 26.25698,-158.27212 0.37914,-0.37914 9.27789,-5.85121 19.77499,-12.16015 34.86477,-20.95435 73.20082,-30.03033 108.38013,-25.65878 10.66961,1.32585 21.45035,3.16938 23.9572,4.09672 4.0864,1.51166 -6.1819,20.21547 -99.25956,180.80223 -57.09962,98.5139 -104.65677,179.9205 -105.68257,180.9035 -1.02579,0.9831 -1.21926,-1.3437 -0.42993,-5.1706 z"
+ id="path78" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 662.41565,1168.9604 -0.0901,-222.65915 5.14528,6.24058 c 2.8299,3.43232 8.4919,10.89508 12.58221,16.5839 5.16924,7.18939 11.82408,12.5356 21.82459,17.53292 12.33224,6.16249 16.92646,7.18959 32.15896,7.18959 23.95519,0 36.84679,-4.78311 52.97173,-19.65385 11.20019,-10.32905 35.20688,-24.40108 35.20688,-20.63727 0,0.92209 -142.61927,392.28598 -156.6787,429.94458 -2.53101,6.7794 -3.04554,-28.5927 -3.12082,-214.5413 z"
+ id="path80" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1024.2976,1435.6874 c -0.1322,-1.2756 -18.6519,-106.9921 -41.15468,-234.9256 -22.50283,-127.9334 -40.36048,-233.15995 -39.68366,-233.83677 2.09904,-2.09903 10.50234,4.35981 13.1054,10.07289 4.7092,10.33557 23.49428,27.92978 35.6281,33.36948 9.59164,4.3 16.17004,5.4254 31.80724,5.4417 10.843,0.011 23.8017,-1.4104 28.7969,-3.1592 12.0351,-4.2135 28.8568,-19.92521 34.2127,-31.95506 4.3705,-9.81656 18.5355,-24.01416 19.8937,-19.93951 0.6118,1.83513 -78.6411,462.67967 -81.4761,473.77237 -0.489,1.9135 -0.9973,2.4354 -1.1296,1.1597 z"
+ id="path82" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1304.404,1169.4977 c -44.1415,-121.4824 -79.9899,-221.21083 -79.663,-221.61873 1.6178,-2.01887 22.063,10.66248 31.8514,19.75614 16.5379,15.36411 29.1817,20.35028 51.5299,20.32123 26.6439,-0.0346 38.3653,-5.8132 60.4288,-29.79101 l 17.27,-18.76831 v 225.53138 c 0,124.0423 -0.261,225.5123 -0.5799,225.4889 -0.3189,-0.023 -36.6956,-99.4371 -80.8372,-220.9196 z"
+ id="path84" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1584.1944,1075.5446 c -58.4976,-100.42384 -106.7415,-183.32285 -107.2087,-184.22005 -3.9048,-7.49958 63.9484,-10.02487 90.7716,-3.37824 25.7576,6.3826 70.7828,28.69932 70.9264,35.15469 0.028,1.27927 11.9597,76.9361 26.5138,168.1262 14.5542,91.1901 26.2133,166.0491 25.9092,166.3532 -0.3041,0.3041 -48.4146,-81.612 -106.9123,-182.0358 z"
+ id="path86" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1783.3806,1630.2605 c -12.07,-4.2822 -23.5325,-15.3987 -29.6328,-28.7384 -6.4346,-14.0707 -6.8306,-47.3018 -0.7516,-63.0553 8.3498,-21.6378 30.8402,-34.3581 60.7479,-34.3581 43.0628,0 65.2513,22.6607 64.7244,66.102 -0.1083,8.9295 -1.4739,20.7659 -3.0347,26.303 -3.8641,13.708 -18.5861,29.2285 -32.0888,33.8293 -13.4702,4.5898 -46.9244,4.5437 -59.9644,-0.082 z"
+ id="path88" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 1415.3883,1739.6942 c -21.6129,-7.7128 -33.5513,-25.0784 -35.8136,-52.0944 -3.5131,-41.9512 13.7421,-66.4513 51.0304,-72.4564 36.4408,-5.8686 67.565,9.5473 75.9954,37.6405 3.8123,12.7043 3.1662,41.886 -1.2199,55.0911 -4.6392,13.9675 -19.2604,28.1959 -33.295,32.4008 -12.1449,3.6387 -45.8399,3.2931 -56.6973,-0.5816 z"
+ id="path90" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 998.47196,1791.9871 c -26.32252,-8.5718 -39.4142,-29.0618 -39.4142,-61.6879 0,-39.9455 19.67585,-62.6986 56.63604,-65.4939 31.8922,-2.412 53.768,6.4143 65.4954,26.4256 5.4743,9.3411 6.5591,14.1418 7.3663,32.5996 1.115,25.4926 -1.8883,38.442 -11.6668,50.3052 -11.6137,14.0893 -22.7259,18.388 -49.4097,19.1137 -12.7565,0.347 -25.8097,-0.2211 -29.00704,-1.2623 z"
+ id="path92" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 570.56398,1737.4757 c -22.88704,-10.8199 -31.68544,-27.0374 -31.60473,-58.2549 0.0264,-10.2052 1.11843,-22.1018 2.42676,-26.4369 6.14979,-20.3769 22.07991,-33.2143 46.28194,-37.2965 29.29527,-4.9413 56.99662,3.419 69.77411,21.0578 18.36862,25.3571 13.77794,77.2331 -8.32662,94.0931 -11.99243,9.1471 -23.31337,12.1543 -46.08034,12.2406 -17.23538,0.065 -22.8959,-0.8765 -32.47112,-5.4032 z"
+ id="path94" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 206.21183,1630.2605 c -12.09745,-4.2919 -23.56007,-15.4279 -29.58126,-28.7384 -6.40416,-14.1571 -6.82809,-47.4419 -0.8031,-63.0553 8.34974,-21.6378 30.84019,-34.3581 60.74783,-34.3581 43.06283,0 65.25134,22.6607 64.72448,66.102 -0.29462,24.292 -4.20952,35.3624 -16.82976,47.5907 -6.25786,6.0636 -14.83371,11.6844 -20.34741,13.3364 -12.73523,3.8156 -46.10806,3.31 -57.91078,-0.8773 z"
+ id="path96" />
+</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="45"
- height="45"
- id="svg3128"
- sodipodi:version="0.32"
- inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
- version="1.0"
- sodipodi:docname="wc.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape">
- <defs
- id="defs3130">
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 22.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="45 : 22.5 : 1"
- inkscape:persp3d-origin="22.5 : 15 : 1"
- id="perspective15" />
- <inkscape:perspective
- id="perspective12"
- inkscape:persp3d-origin="22.5 : 15 : 1"
- inkscape:vp_z="45 : 22.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 22.5 : 1"
- sodipodi:type="inkscape:persp3d" />
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="8.0000004"
- inkscape:cx="60.308779"
- inkscape:cy="24.511479"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- height="45px"
- width="45px"
- inkscape:grid-points="true"
- showgrid="false"
- inkscape:window-width="1920"
- inkscape:window-height="1060"
- inkscape:window-x="0"
- inkscape:window-y="20"
- inkscape:window-maximized="0">
- <inkscape:grid
- id="GridFromPre046Settings"
- type="xygrid"
- originx="0"
- originy="0"
- spacingx="0.5"
- spacingy="0.5"
- color="#0000ff"
- empcolor="#0000ff"
- opacity="0.2"
- empopacity="0.4"
- empspacing="5" />
- </sodipodi:namedview>
+ height="100%"
+ width="100%"
+ version="1.1"
+ viewBox="0 0 2048 2048"
+ id="svg18"
+ sodipodi:docname="ws.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
<metadata
- id="metadata3133">
+ 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 />
</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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1021.6806"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg18"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ d="m 1161,1706 h 170 v 137 h 274 V 1468 L 1383,1297 V 819 L 1553,649 V 444 h 153 V 205 H 341 v 239 h 153 v 205 l 171,170 v 478 l -222,171 v 375 h 273 v -137 h 171 v 137 h 274 z M 1639,376 H 409 V 273 H 1639 Z M 1484,580 H 564 V 444 h 920 z m -170,717 H 734 V 819 h 580 z m 222,239 v 239 h -137 v -137 h -308 v 137 H 956 V 1638 H 649 v 137 H 512 V 1536 Z M 1459,649 1356,751 H 693 L 588,649 Z m -110,716 127,103 H 572 l 128,-103 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path2" />
<g
- inkscape:label="Layer 1"
- inkscape:groupmode="layer"
- id="layer1"
- style="display:inline">
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g12"
+ transform="matrix(1,0,0,-1,0,2048)">
+ <path
+ style="color:#000000"
+ d="M 1639,1672 H 409 v 103 h 1230 z"
+ display="block"
+ id="path4" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 37.725,38.008918 c -3.723781,-1.069562 -11.126219,0.473903 -14.85,-2.2 -3.723782,2.673903 -11.12622,1.130438 -14.8500002,2.2 0,0 -1.8104878,0.595658 -3.3,2.2 0.7447561,1.069561 1.8104878,1.08478 3.3,0.55 3.7237802,-1.069561 11.1262182,0.504342 14.8500002,-1.1 3.723781,1.604342 11.126219,0.03044 14.85,1.1 1.489512,0.53478 2.555244,0.519561 3.3,-0.55 -1.489512,-2.139123 -3.3,-2.2 -3.3,-2.2 z"
- id="path4582"
- sodipodi:nodetypes="ccccccccc"
- inkscape:connector-curvature="0" />
+ style="color:#000000"
+ d="M 1484,1468 H 564 v 136 h 920 z"
+ display="block"
+ id="path6" />
<path
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 31.125,33.608918 c -2.75,2.75 -13.75,2.75 -16.5,0 -0.55,-1.65 0,-2.2 0,-2.2 h 16.5 c 0,0 0.55,0.55 0,2.2 z"
- id="path4584"
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0" />
+ style="color:#000000"
+ d="M 1314,751 H 734 v 478 h 580 z"
+ display="block"
+ id="path8" />
<path
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1.64999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 31.125,31.408918 h -16.5"
- id="path4590"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <g
- id="g3323"
- inkscape:label="Layer 1"
- transform="matrix(-0.84196464,0,0,-0.84196464,39.051174,37.108928)">
- <path
- sodipodi:nodetypes="cccc"
- id="path3491"
- d="M 22.028958,36 C 11.528958,35 5.5289585,28 6.0289585,7 H 29.028958 c 0,9 -10,6.5 -8,21"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="csccccccccccc"
- id="path3495"
- d="m 20.028958,28 c -0.384461,-2.911278 5.552936,-7.368624 8,-9 3,-2 2.819198,-4.342892 5,-4 1.04172,0.944016 -1.413429,3.037549 0,3 1,0 -0.187332,-1.231727 1,-2 1,0 4.003161,-0.999999 4,4 0,2 -6,12 -6,12 0,0 -1.885866,1.902129 -2,3.5 0.726047,0.994369 0.5,2 0.5,3 -1,1 -3,-2.5 -3,-2.5 h -2 c 0,0 -0.781781,1.991926 -2.5,3 -1,0 -1,-3 -1,-3"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <circle
- transform="rotate(180,21.764479,22)"
- id="path3499"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- cx="8.5"
- cy="23.5"
- r="0.5" />
- <ellipse
- transform="rotate(-149.99999,24.024104,20.986505)"
- id="path3501"
- style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1.50000048;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- cx="14.5"
- cy="15.5"
- rx="0.5"
- ry="1.5" />
- <path
- sodipodi:nodetypes="cc"
- id="path8049"
- d="m 7.0289585,7 c -1,20 5.4999995,27.5 11.9999995,28.5"
- style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
+ style="color:#000000"
+ d="M 1536,512 V 273 H 1399 V 410 H 1091 V 273 H 956 V 410 H 649 V 273 H 512 v 239 z"
+ display="block"
+ id="path10" />
</g>
- <g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Layer 1#1"
- style="display:inline" />
+ <path
+ style="color:#000000"
+ d="M 1459,649 1356,751 H 693 L 588,649 Z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path14" />
+ <path
+ style="color:#000000"
+ d="m 1349,1365 127,103 H 572 l 128,-103 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path16" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="M 734.07927,1057.6308 V 819.89581 H 1024 1313.9207 v 237.73499 237.735 H 1024 734.07927 Z"
+ id="path56" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 642.46432,700.4574 -51.02605,-49.68534 432.56173,0.0234 432.5617,0.0234 -51.026,49.71003 -51.0261,49.71003 -330.5096,-0.0481 -330.50963,-0.0481 z"
+ id="path60" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 564.76557,511.42015 v -67.2616 H 1024 1483.2344 v 67.2616 67.26161 H 1024 564.76557 Z"
+ id="path62" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="M 409.36806,324.71121 V 274.84484 H 1024 1638.6319 v 49.86637 49.86636 H 1024 409.36806 Z"
+ id="path64" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="M 513.73952,1654.8675 V 1536.5798 H 1024 1534.2605 v 118.2877 118.2877 h -67.2616 -67.2616 v -68.4378 -68.4377 l -154.8177,0.5963 -154.8177,0.5963 -0.6148,67.8414 -0.6149,67.8415 h -66.0669 -66.06691 v -68.4213 -68.4213 H 802.50056 648.26274 v 68.4213 68.4213 h -67.26161 -67.26161 z"
+ id="path66" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 578.7646,1463.8788 c 1.86792,-1.716 30.26808,-24.6778 63.11148,-51.026 l 59.71527,-47.906 322.98005,0.02 322.9801,0.02 60.3035,48.8812 c 33.167,26.8847 61.2951,49.8374 62.507,51.006 1.3347,1.2872 -174.6518,2.1249 -446.3951,2.1249 -375.95171,0 -448.04853,-0.5053 -445.2023,-3.1201 z"
+ id="path68" />
</svg>
--- /dev/null
+<?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="wt.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg18" />
+ <path
+ style="color:#000000"
+ d="m 1024,864.11538 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path2" />
+ <path
+ style="color:#000000"
+ d="m 988,1120.1154 -83,1 q -34,0 -34,34 0,34 34,34 h 83 v 86 q 0,35 36,35 35,0 35,-35 v -86 h 86 q 33,0 33,-34 0,-34 -33,-34 h -86 v -82 q 0,-36 -35,-36 -36,0 -36,36 z m 36,-578.00002 q 68,0 132,11 64,11 125,28 -117,31 -257,31 -142,0 -257,-31 58,-16 123,-27 65,-11 134,-12 z m 0,1089.00002 q 68,0 68,68 0,68 -68,68 -68,0 -68,-68 0,-68 68,-68 z m 0,-949.00002 q 117,0 225,-23 l -48,123 q -88,14 -177,14 -91,0 -178,-14 l -48,-123 q 107,23 226,23 z m 0,182 q 97,0 186,-15 98,35 142,109 38,64.00002 38,141.00002 0,46 -23,101 -23,55 -75,101 -59,49 -129,107 -70,58 -139,137 -70,-78 -140,-136 -70,-58 -128,-108 -53,-45 -75,-100 -22,-55 -23,-102 0,-77 37,-141.00002 43,-74 143,-109 88,15 186,15 z m -36,-377 h -32 q -56,-90 -107,-113 -24,-12 -53,-22 -29,-10 -67,-10 -7,0 -107,16 -48,7 -76,15 -28,8 -44,10 -57,7 -133,-6 -46,-8 -86,-29 l 48,-78 q 12,12 31,15 19,3 36,8 42,7 80,2 13,-3 51,-7 38,-4 101,-15 75,-11 102,-11 105,0 161,40 34,26 64,72 30,46 31,113 z m 36,-113 q -14,-57 -34,-79 -20,-22 -53,-46 -36,-25 -85,-42 -49,-17 -109,-9 l -281,39 q -17,2 -30,0 -13,-2 -26,-2 -21,0 -53,-9 -32,-9 -51,-28 l -97,159 q 18,20 32,28 14,8 33,17 58,27 124,33 28,2 55,1 27,-1 56,2 54,-9 108,-16 54,-7 110,-16 60,0 81,12 11,6 35,22 24,16 48,47 -53,6 -108,20 -55,14 -97,31 l 104,258 q -78,45 -109,72 -31,27 -49,64 -26,46 -33,89.00002 -7,43 -7,77 1,60 28,132 27,72 104,130 63,48 123,99 60,51 119,119 -74,38 -74,121 0,56 39,96 39,40 97,40 56,0 96,-40 40,-40 40,-96 0,-82 -74,-121 58,-68 117,-119 59,-51 125,-99 75,-57 102,-129 27,-72 29,-133 0,-34 -7,-77 -7,-43.00002 -32,-89.00002 -20,-36 -50,-63 -30,-27 -108,-73 l 104,-258 q -44,-16 -99,-30 -55,-14 -106,-21 23,-31 47,-47 24,-16 36,-22 21,-12 81,-12 54,8 108,15 54,7 110,17 27,-3 54,-2 27,1 57,-1 64,-6 124,-33 18,-9 32,-17 14,-8 33,-28 l -98,-159 q -18,18 -50,27 -32,9 -53,10 -13,0 -26,2 -13,2 -31,0 l -280,-39 q -60,-9 -111,8 -51,17 -85,45 -33,27 -52,46 -19,19 -33,77 z m 35,113 q 0,-66 30,-112 30,-46 66,-73 55,-40 161,-40 26,0 102,11 62,10 100,14 38,4 51,8 38,5 80,-2 16,-4 35,-7 19,-3 33,-16 l 48,78 q -41,21 -87,29 -76,13 -133,6 -17,-2 -44,-10 -27,-8 -75,-15 -101,-16 -107,-16 -39,0 -68,10 -29,10 -52,22 -53,24 -108,113 z"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path4" />
+ <g
+ fill-rule="nonzero"
+ fill="#ffffff"
+ id="g16"
+ transform="matrix(1,0,0,-1,0,2030.1154)">
+ <path
+ style="color:#000000"
+ d="m 1024,1488 q 68,0 132,-11 64,-11 125,-28 -117,-31 -257,-31 -142,0 -257,31 58,16 123,27 65,11 134,12 z"
+ display="block"
+ id="path6" />
+ <path
+ style="color:#000000"
+ d="m 1024,399 q 68,0 68,-68 0,-68 -68,-68 -68,0 -68,68 0,68 68,68 z"
+ display="block"
+ id="path8" />
+ <path
+ style="color:#000000"
+ d="m 1024,1348 q 117,0 225,23 l -48,-123 q -88,-14 -177,-14 -91,0 -178,14 l -48,123 q 107,-23 226,-23 z"
+ display="block"
+ id="path10" />
+ <path
+ style="color:#000000"
+ d="m 988,1543 h -32 q -56,90 -107,113 -24,12 -53,22 -29,10 -67,10 -7,0 -107,-16 -48,-7 -76,-15 -28,-8 -44,-10 -57,-7 -133,6 -46,8 -86,29 l 48,78 q 12,-12 31,-15 19,-3 36,-8 42,-7 80,-2 13,3 51,7 38,4 101,15 75,11 102,11 105,0 161,-40 34,-26 64,-72 30,-46 31,-113 z"
+ display="block"
+ id="path12" />
+ <path
+ style="color:#000000"
+ d="m 1059,1543 q 0,66 30,112 30,46 66,73 55,40 161,40 26,0 102,-11 62,-10 100,-14 38,-4 51,-8 38,-5 80,2 16,4 35,7 19,3 33,16 l 48,-78 q -41,-21 -87,-29 -76,-13 -133,-6 -17,2 -44,10 -27,8 -75,15 -101,16 -107,16 -39,0 -68,-10 -29,-10 -52,-22 -53,-24 -108,-113 z"
+ display="block"
+ id="path14" />
+ </g>
+</svg>
--- /dev/null
+<?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="wy.svg"
+ inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+ <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" />
+ </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.43115234"
+ inkscape:cx="1024"
+ inkscape:cy="1024"
+ inkscape:window-x="0"
+ inkscape:window-y="20"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="svg6"
+ inkscape:document-rotation="0" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#ffffff"
+ id="path2" />
+ <path
+ style="color:#000000"
+ 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"
+ fill-rule="nonzero"
+ display="block"
+ fill="#000000"
+ id="path4" />
+ <path
+ style="fill:#ffd700;stroke:#000000;stroke-width:2.31937"
+ d="m 559.35852,1727.3477 c 9.06079,-80.4896 30.96157,-157.3391 65.9241,-231.3268 8.81211,-18.6482 16.01812,-36.4599 16.01335,-39.5817 -0.009,-6.148 -7.56023,-19.954 -13.62127,-24.9052 -8.50845,-6.9505 -23.01163,-12.0598 -30.16906,-10.6283 -8.56681,1.7133 -20.95447,14.6818 -28.99474,30.3542 -11.17391,21.7805 -10.49513,21.6397 -25.12557,5.2152 -14.15657,-15.8925 -26.48303,-35.5961 -47.82811,-76.4524 -19.22248,-36.7935 -21.55403,-46.1127 -20.98117,-83.8616 0.38977,-25.6833 -0.41451,-34.3003 -4.7286,-50.6617 -13.29917,-50.4375 -27.44043,-75.3004 -137.29082,-241.3821 -34.23287,-51.75629 -64.74473,-99.76717 -67.80412,-106.69082 -9.22738,-20.8822 -19.48412,-55.50166 -22.42987,-75.70726 -2.14635,-14.72236 -2.15475,-24.40668 -0.037,-42.62319 5.61799,-48.32424 16.73199,-71.93954 47.86344,-101.70141 41.34398,-39.5251 74.63083,-47.59174 115.63441,-28.02255 18.60917,8.88134 26.34854,18.17612 44.4146,53.34084 7.61093,14.8143 18.00494,31.15426 23.43933,36.84788 9.25706,9.69866 10.28119,10.16077 19.71461,8.89574 7.1632,-0.96058 11.73687,-3.33369 16.32857,-8.47222 8.70609,-9.74298 8.36187,-21.13743 -1.52556,-50.49735 -8.76528,-26.02778 -19.17411,-45.98108 -36.09186,-69.18668 -10.41734,-14.28915 -11.07455,-15.98236 -8.82277,-22.73046 3.60827,-10.81319 12.81838,-22.13545 19.33696,-23.77151 15.18744,-3.8118 32.37427,13.1965 51.06156,50.53117 18.53973,37.03983 50.25277,92.51769 65.38842,114.38852 36.55075,52.81542 95.54087,107.26047 165.20365,152.47502 24.75204,16.0653 37.70913,22.55546 88.21239,44.1854 58.99105,25.26516 78.72856,35.05207 101.76285,50.45945 49.28186,32.96403 91.78326,89.24783 111.13396,147.17233 6.6134,19.7965 10.4761,56.2908 8.6435,81.6618 -1.0359,14.3399 -0.6757,22.9786 1.0961,26.2892 3.8315,7.1592 16.265,11.4976 32.9227,11.4877 22.1985,-0.014 33.1486,-8.5653 37.6311,-29.3901 1.9376,-9.0013 -2.201,-55.6108 -7.0588,-79.4971 -7.742,-38.0692 -29.4755,-91.1989 -49.2332,-120.3556 -6.7301,-9.9317 -6.7799,-10.2371 -3.597,-22.0339 9.5875,-35.53484 12.734,-85.89565 7.7754,-124.45193 -5.2969,-41.18663 -23.4931,-96.93472 -45.6636,-139.9006 C 1025.2237,692.95819 984.67798,647.11052 916.14949,587.89016 851.8942,532.36257 814.3378,491.95926 782.03207,443.60623 741.91135,383.55625 720.72249,321.8015 719.52085,261.41783 l -0.51746,-26.00221 517.55701,-0.58494 517.5571,-0.58494 1.9809,34.21574 c 1.0895,18.81866 1.9809,131.28121 1.9809,249.91677 0,193.87563 -0.4252,219.22124 -4.2018,250.49151 -10.8217,89.60167 -30.343,173.95021 -62.2673,269.04644 -45.0901,134.3148 -110.1475,251.4853 -187.0231,336.8343 -73.5943,81.7062 -200.2441,157.846 -320.5509,192.71 -33.8937,9.8221 -73.2746,18.3845 -75.2894,16.3698 -0.6893,-0.6893 -0.1797,-6.3841 1.1325,-12.6551 1.3122,-6.2709 2.9624,-29.6667 3.6671,-51.9906 1.4545,-46.0731 -0.3387,-53.1058 -15.5234,-60.8798 -15.5306,-7.951 -40.8939,-3.6978 -48.3834,8.1136 -2.303,3.6319 -3.8322,16.8579 -5.028,43.4887 -1.9626,43.7034 -8.2256,73.0955 -22.7735,106.8751 -10.7052,24.857 -34.37011,61.0095 -53.4711,81.6869 l -14.56699,15.7693 -5.74662,-5.3321 c -9.19944,-8.5359 -25.33717,-30.322 -36.71183,-49.5614 -21.28951,-36.0097 -33.19532,-72.7737 -38.21605,-118.0074 -1.40865,-12.691 -4.06397,-25.9807 -5.90072,-29.5326 -5.19195,-10.0401 -15.63422,-14.2788 -31.60834,-12.8303 -22.19056,2.0122 -32.48959,12.0087 -32.88717,31.9213 -0.12571,6.2996 -0.42744,11.4602 -0.67032,11.4681 -3.8867,0.1259 -41.82513,-15.7572 -67.0746,-28.081 -17.99914,-8.785 -34.54083,-15.9727 -36.75933,-15.9727 -9.38427,0 -20.22603,7.8489 -26.88957,19.4667 -15.16798,26.4454 -8.99737,35.5152 41.84115,61.5003 l 38.15823,19.5037 -18.48509,17.1559 c -25.83771,23.9798 -63.0302,53.783 -90.40551,72.444 -19.66855,13.4075 -80.00822,48.8241 -83.1822,48.8241 -0.55725,0 -0.51381,-4.4358 0.0965,-9.8573 z M 715.6562,1396.26 c 14.68098,-4.0784 25.38117,-20.4073 25.38117,-38.7326 0,-13.4536 -5.34152,-20.1561 -23.65129,-29.6775 -9.31569,-4.8443 -17.2112,-9.016 -17.54559,-9.2705 -0.33438,-0.2545 1.62715,-5.5157 4.359,-11.6914 9.68991,-21.9057 1.30153,-58.3631 -17.0411,-74.0637 -16.67578,-14.2739 -47.44194,-16.3617 -70.33264,-4.773 l -10.41544,5.273 -8.17114,-16.9885 c -12.887,-26.7932 -25.488,-33.798 -46.31289,-25.7448 -26.6886,10.3206 -31.5787,31.9237 -14.99085,66.2253 19.88534,41.1203 45.45806,72.5797 80.01587,98.4351 19.34135,14.4707 69.13285,40.0363 81.1778,41.6811 3.82696,0.5225 7.47996,1.1006 8.11778,1.2846 0.63783,0.184 4.87202,-0.6967 9.40932,-1.9571 z M 391.0026,900.72719 c 10.89621,-4.3598 22.12955,-18.14574 24.32597,-29.85367 2.01293,-10.72983 -4.48453,-23.06665 -16.50389,-31.33619 -19.75275,-13.59025 -33.52457,-35.69146 -33.52457,-53.80068 0,-9.65039 -5.96597,-19.71377 -14.21643,-23.98025 -11.35557,-5.87219 -29.57001,-6.67655 -39.09672,-1.72655 -10.52292,5.46764 -13.87238,12.64274 -13.91427,29.80675 -0.0792,32.43354 14.48454,64.13742 41.058,89.37961 15.63834,14.85489 31.6994,25.14693 39.45884,25.28552 1.56875,0.0281 7.15463,-1.67053 12.41307,-3.77454 z"
+ id="path52" />
+</svg>
{
label: "Randomness",
variable: "randomness",
- defaut: 2,
+ defaut: 0,
options: [
{ label: "Deterministic", value: 0 },
{ label: "Symmetric random", value: 1 },
//return "R" + opts.randomness;
}
+ static IsValidOptions(opts) {
+ return true;
+ }
+
// Some variants don't have flags:
static get HasFlags() {
return true;
// Setup the initial random (asymmetric) position
static GenRandInitFen(options) {
- const randomness = parseInt(options.randomness, 10);
- if (!randomness || randomness == 0)
+ if (!options.randomness || options.randomness == 0)
// Deterministic:
return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 ahah -";
// Generic method to find possible moves of non-pawn pieces:
// "sliding or jumping"
- getSlideNJumpMoves([x, y], steps, oneStep) {
+ getSlideNJumpMoves([x, y], steps, nbSteps) {
let moves = [];
outerLoop: for (let step of steps) {
let i = x + step[0];
let j = y + step[1];
+ let stepCounter = 0;
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove([x, y], [i, j]));
- if (!!oneStep) continue outerLoop;
+ if (nbSteps && ++stepCounter >= nbSteps) continue outerLoop;
i += step[0];
j += step[1];
}
// What are the knight moves from square x,y ?
getPotentialKnightMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1);
}
// What are the bishop moves from square x,y ?
// What are the queen moves from square x,y ?
getPotentialQueenMoves(sq) {
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]));
}
// What are the king moves from square x,y ?
getPotentialKingMoves(sq) {
// Initialize with normal moves
let moves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
if (V.HasCastle && this.castleFlags[this.turn].some(v => v < V.size.y))
moves = moves.concat(this.getCastleMoves(sq));
return moves;
// Generic method for non-pawn pieces ("sliding or jumping"):
// is x,y attacked by a piece of given color ?
- isAttackedBySlideNJump([x, y], color, piece, steps, oneStep) {
+ isAttackedBySlideNJump([x, y], color, piece, steps, nbSteps) {
for (let step of steps) {
let rx = x + step[0],
ry = y + step[1];
- while (V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY && !oneStep) {
+ let stepCounter = 1;
+ while (
+ V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY &&
+ (!nbSteps || stepCounter < nbSteps)
+ ) {
rx += step[0];
ry += step[1];
+ stepCounter++;
}
if (
V.OnBoard(rx, ry) &&
baseGameDiv.tabIndex = 0;
baseGameDiv.addEventListener("click", this.focusBg);
baseGameDiv.addEventListener("keydown", this.handleKeys);
- baseGameDiv.addEventListener("wheel", this.handleScroll);
+ if (this.st.settings.scrollmove)
+ baseGameDiv.addEventListener("wheel", this.handleScroll);
}
document.getElementById("eogDiv")
.addEventListener("click", processModalClick);
pgn += '[Url "' + params.serverUrl + '/game/' + this.game.id + '"]\n';
if (!!this.game.cadence)
pgn += '[Cadence "' + this.game.cadence + '"]\n';
+ pgn += '[Options "' + JSON.stringify(this.game.options) + '"]\n';
pgn += '\n';
for (let i = 0; i < this.moves.length; i += 2) {
if (i > 0) pgn += " ";
return c.to || this.st.tr["Any player"];
return c.from.name || "@nonymous";
},
+ // TODO: duplicated from Hall
getRandomnessClass: function(c) {
- if (
- // TODO: one extra test here
- !Number.isInteger(c.options.randomness) &&
- !parseInt(c.options.randomness, 10)
- ) {
+ const opts = c.options;
+ if (opts.randomness === undefined && opts.random === undefined)
return {};
- }
- return {
- ["random-" + c.options.randomness]: true
- };
+ if (opts.randomness !== undefined)
+ return { ["random-" + opts.randomness]: true };
+ return { ["random-" + (opts.random ? 2 : 0)]: true };
}
}
};
type="checkbox"
v-model="st.settings.gotonext"
)
+ fieldset(v-if="desktopBrowser")
+ label(for="setScrollmove")
+ | {{ st.tr["Mouse scroll to replay moves"] }}
+ input#setScrollmove(
+ type="checkbox"
+ v-model="st.settings.scrollmove"
+ )
</template>
<script>
computed: {
flagImage: function() {
return `/images/flags/${this.st.lang}.svg`;
+ },
+ desktopBrowser: function() {
+ return !("ontouchstart" in window);
}
},
methods: {
case "Cadence":
game.cadence = value;
break;
+ case "Options":
+ game.options = value;
+ break;
}
idx++;
}
}
else c.fen = "";
+ if (!V.IsValidOptions(c.options)) return "Invalid options";
+
return "";
}
this.state.user.notify = json.notify;
});
// Settings initialized with values from localStorage
- const getItemDefaultTrue = (item) => {
+ const getItemDefault = (item, defaut) => {
const value = localStorage.getItem(item);
- if (!value) return true;
+ if (!value) return defaut;
return value == "true";
};
this.state.settings = {
bcolor: localStorage.getItem("bcolor") || "lichess",
- sound: getItemDefaultTrue("sound"),
- hints: getItemDefaultTrue("hints"),
- highlight: getItemDefaultTrue("highlight"),
- gotonext: getItemDefaultTrue("gotonext"),
+ sound: getItemDefault("sound", true),
+ hints: getItemDefault("hints", true),
+ highlight: getItemDefault("highlight", true),
+ gotonext: getItemDefault("gotonext", true),
+ scrollmove: getItemDefault("scrollmove", false)
};
const supportedLangs = ["en", "es", "fr"];
const navLanguage = navigator.language.substr(0, 2);
p ELO rating is purposely absent from this website.
p.
- Games start by default with a random asymmetric position.
- Random symmetric or even deterministic positions are available too,
- if you prefer more fairness (but also less fun? :-P ).
+ Most games can start from three initial setups: deterministic
+ (the usual one), or random – symmetric or not.
h3 Contribute
p El ranking ELO está ausente a propósito de este sitio.
p.
- Las partidas comienzan por defecto con una posición aleatoria no simétrica.
- Es posible una posición aleatoria simétrica o incluso determinista,
- si prefieres más justicia (¿pero también más aburrimiento? :-P).
+ La mayoría de los juegos pueden comenzar desde tres tipos de posiciones:
+ determinista (patrón habitual) o aleatorio – simétrico o no.
h3 Contribuir
p Le classement ELO est à dessein absent de ce site.
p.
- Les parties démarrent par défaut avec une position aléatoire non symétrique.
- Une position aléatoire symétrique ou même déterministe est possible,
- si vous préférez plus de justice (mais aussi plus d'ennui ? :-P ).
+ La plupart des jeux peuvent démarrer depuis trois types de positions :
+ déterministe (schéma habituel), ou aléatoire – symétrique ou non.
h3 Contribuer
"Any player": "Any player",
Apply: "Apply",
"Are you sure?": "Are you sure?",
+ "Army 1": "Army 1",
+ "Army 2": "Army 2",
"Asymmetric random": "Asymmetric random",
"Authentication successful!": "Authentication successful!",
"Back to list": "Back to list",
"Clear history": "Clear history",
Code: "Code",
Color: "Color",
+ "Colorbound Clobberers": "Colorbound Clobberers",
"Color option only for targeted challenge": "Color option only for targeted challenge",
"Connection token sent. Check your emails!": "Connection token sent. Check your emails!",
Contact: "Contact",
"Error: try to delete cookies": "Error: try to delete cookies",
"Errors in FEN": "Errors in FEN",
"Example game": "Example game",
+ Fide: "Fide",
+ Four: "Four",
Go: "Go",
green: "green",
Hall: "Hall",
"Imported games": "Imported games",
Instructions: "Instructions",
"Invalid email": "Invalid email",
+ "Invalid options": "Invalid options",
"It's your turn!": "It's your turn!",
"is not online": "is not online",
Language: "Language",
"Missing name": "Missing name",
"Missing solution": "Missing solution",
"Modifications applied!": "Modifications applied!",
+ "Mouse scroll to replay moves": "Mouse scroll to replay moves",
"Move played:": "Move played:",
"Mutual agreement": "Mutual agreement",
"My games": "My games",
"No subject. Send anyway?": "No subject. Send anyway?",
"Notifications by email": "Notifications by email",
"Number": "Number",
+ "Number of pawns": "Number of pawns",
+ "Nutty Knights": "Nutty Knights",
Observe: "Observe",
"Offer draw?": "Offer draw?",
"Opponent action": "Opponent action",
+ Options: "Options",
orange: "orange",
"Participant(s):": "Participant(s):",
"Play with": "Play with",
Previous_p: "Previous",
"Processing... Please wait": "Processing... Please wait",
Problems: "Problems",
+ Random: "Random",
+ Randomness: "Randomness",
Refuse: "Refuse",
Register: "Register",
"Registration complete! Please check your emails now": "Registration complete! Please check your emails now",
+ "Remarkable Rookies": "Remarkable Rookies",
Rematch: "Rematch",
"Rematch in progress": "Rematch in progress",
"Remove game?": "Remove game?",
"Show next game after a move": "Show next game after move",
"Show possible moves": "Show possible moves",
"Show solution": "Show solution",
+ Six: "Six",
Solution: "Solution",
"Sound alert at game start": "Sound alert at game start",
Stop: "Stop",
"The game was already imported": "The game was already imported",
"Three repetitions": "Three repetitions",
Time: "Time",
+ Two: "Two",
"Undetermined result": "Undetermined result",
Update: "Update",
"Upload a game": "Upload a game",
"White win": "White win",
"Who's there?": "Who's there?",
With: "With",
+ "With switch": "With switch",
with: "with",
"Wrong color": "Wrong color",
"Wrong time control": "Wrong time control",
"vg30": "Pieces can temporarily borrow powers from others.",
"vt31": "Miscelleanous",
"vg31": "These variants are not classified yet, generally because they are the only one of their kind on this website.",
-
- // Variants' options
- "Options": "Options",
- "Randomness": "Randomness",
- "With switch": "With switch",
};
"Any player": "Cualquier jugador",
Apply: "Aplicar",
"Are you sure?": "¿Está usted seguro?",
+ "Army 1": "Ejército 1",
+ "Army 2": "Ejército 2",
"Asymmetric random": "Aleatorio asimétrico",
"Authentication successful!": "¡Autenticación exitosa!",
"Back to list": "Volver a la lista",
"Clear history": "Clara historia",
Code: "Código",
Color: "Color",
+ "Colorbound Clobberers": "Batidores Unicolor",
"Color option only for targeted challenge": "Elección de color solo para desafíos específicos",
"Connection token sent. Check your emails!": "Token de conexión enviado. ¡Revisa tus correos!",
Contact: "Contacto",
"Error: try to delete cookies": "Error: intente eliminar las cookies",
"Errors in FEN": "FEN errónea",
"Example game": "Ejemplo de partida",
+ Fide: "Fide",
+ Four: "Cuatro",
Go: "Go",
green: "verde",
Hall: "Salón",
"Imported games": "Partidas importadas",
Instructions: "Instrucciones",
"Invalid email": "Email inválido",
+ "Invalid options": "Optiones inválidas",
"It's your turn!": "¡Es su turno!",
"is not online": "no está en línea",
Language: "Idioma",
"Missing name": "Nombre falta",
"Missing solution": "Solución falta",
"Modifications applied!": "¡Modificaciones aplicadas!",
+ "Mouse scroll to replay moves": "Pergamino mouse para repetir las jugadas",
"Move played:": "Movimiento jugado:",
"Mutual agreement": "Acuerdo mutuo",
"My games": "Mis partidas",
"No subject. Send anyway?": "Sin asunto. ¿Enviar sin embargo?",
"Notifications by email": "Notificaciones por email",
"Number": "Número",
+ "Number of pawns": "Número de peones",
+ "Nutty Knights": "Caballeros Locos",
"Offer draw?": "¿Ofrecer tablas?",
Observe: "Observar",
"Opponent action": "Acción del adversario",
+ Options: "Optiones",
orange: "naranja",
"Participant(s):": "Participante(s):",
"Play with": "Jugar con",
Previous_n: "Anterior",
"Processing... Please wait": "Procesando... por favor espere",
Problems: "Problemas",
+ Random: "Aleatorio",
+ Randomness: "Grado de azar",
Refuse: "Rechazar",
Register: "Inscribirse",
"Registration complete! Please check your emails now": "¡Registro completo! Revise sus correos electrónicos ahora",
+ "Remarkable Rookies": "Reclutas Notables",
Rematch: "Revancha",
"Rematch in progress": "Revancha en progreso",
"Remove game?": "¿Eliminar la partida?",
"Show next game after a move": "Mostrar la siguiente partida después de una jugada",
"Show possible moves": "Mostrar posibles movimientos",
"Show solution": "Mostrar la solución",
+ Six: "Seis",
Solution: "Solución",
"Sound alert at game start": "Alerta audible cuando comienza una partida",
Stop: "Interrupción",
"The game was already imported": "La partida ya ha sido importada",
"Three repetitions": "Tres repeticiones",
Time: "Tiempo",
+ Two: "Dos",
"Undetermined result": "Resultado indeterminado",
Update: "Actualización",
"Upload a game": "Enviar una partida",
"White win": "Las blancas ganan",
"Who's there?": "¿Quién está ahí?",
With: "Con",
+ "With switch": "Con switch",
with: "con",
"Wrong color": "Color incorrecto",
"Wrong time control": "Cadencia errónea",
"vg30": "Las piezas pueden temporalmente tomar prestados poderes de otras",
"vt31": "Varios",
"vg31": "Estas variantes aún no están clasificadas, en general porque son el único representante de su tipo en este sitio.",
-
- // Variants' options
- "Options": "Optiones",
- "Randomness": "Grado de azar",
- "With switch": "Con switch",
};
against the computer. Keep in mind that the "engine" is generally quite weak.
It's here for illustration and learning purpose only.
-.question.
- The initial position looks weird?
-.answer.
- Everything is randomized by default - when possible. This is the initial
- spirit of the website. However, you can change this for a practice game
- using the upper-right Settings menu ("randomness level"), and for a game
- from main Hall by changing this same parameter in the form.
-
.question.
The bot is too weak! Where should I continue?
.answer
en general bastante débil.
Se utiliza solo para ilustrar y aprender las reglas.
-.question.
- ¿Es extraña la posición inicial?
-.answer.
- Todo es aleatorio por defecto - cuando es posible. Es el espíritu
- inicial del sitio. Sin embargo, puede cambiar esto por una partida de
- entrenamiento a través de la configuración en la parte superior derecha
- ("grado de azar"), y para una partida del Salón principal cambiando el mismo
- parámetro en el formulario.
-
.question.
¡La computadora está jugando demasiado mal! ¿Dónde debo continuar?
.answer
en général plutôt faible.
Il sert à illustrer et à apprendre les règles seulement.
-.question.
- La position initiale est bizarre ?
-.answer.
- Tout est rendu aléatoire par défaut - quand c'est possible. C'est l'esprit
- initial du site. Cependant, vous pouvez changer cela pour une partie
- d'entraînement via les Réglages en haut à droite ("degré d'aléa"), et pour
- une partie depuis le Salon principal en changeant le même paramètre dans le
- formulaire.
-
.question.
L'ordinateur joue trop mal ! Où dois-je continuer ?
.answer
"Analysis disabled for this variant": "Analyse désactivée pour cette variante",
"Any player": "N'importe qui",
Apply: "Appliquer",
- "Authentication successful!": "Authentification réussie !",
"Are you sure?": "Étes vous sûr?",
+ "Army 1": "Armée 1",
+ "Army 2": "Armée 2",
"Asymmetric random": "Aléatoire asymétrique",
+ "Authentication successful!": "Authentification réussie !",
"Back to list": "Retour à la liste",
"Black": "Noirs",
"Black to move": "Trait aux noirs",
"Clear history": "Effacer l'historique",
Code: "Code",
Color: "Couleur",
+ "Colorbound Clobberers": "Tabasseurs Unicolores",
"Color option only for targeted challenge": "Choix de la couleur seulement pour défis ciblés",
"Connection token sent. Check your emails!": "Token de connection envoyé. Allez voir vos emails !",
Contact: "Contact",
"Error: try to delete cookies": "Erreur : essayez de supprimer les cookies",
"Errors in FEN": "FEN erronée",
"Example game": "Partie exemple",
+ Fide: "Fide",
+ Four: "Quatre",
Go: "Go",
green: "vert",
Hall: "Salon",
"Imported games": "Parties importées",
Instructions: "Instructions",
"Invalid email": "Email invalide",
+ "Invalid options": "Options invalides",
"It's your turn!": "À vous de jouer !",
"is not online": "n'est pas en ligne",
Language: "Langue",
"Missing name": "Nom manquant",
"Missing solution": "Solution manquante",
"Modifications applied!": "Modifications effectuées !",
+ "Mouse scroll to replay moves": "Défilement souris pour rejouer les coups",
"Move played:": "Coup joué :",
"Mutual agreement": "Accord mutuel",
"My games": "Mes parties",
"No subject. Send anyway?": "Pas de sujet. Envoyer quand-même ??",
"Notifications by email": "Notifications par email",
"Number": "Numéro",
+ "Number of pawns": "Nombre de pions",
+ "Nutty Knights": "Chevaliers Fous",
"Offer draw?": "Proposer nulle ?",
Observe: "Observer",
"Opponent action": "Action de l'adversaire",
+ Options: "Options",
orange: "orange",
"Participant(s):": "Participant(s) :",
"Play with": "Jouer avec",
Previous_n: "Précédente",
"Processing... Please wait": "Traitement en cours... Attendez SVP",
Problems: "Problèmes",
+ Random: "Aléatoire",
+ Randomness: "Degré d'aléa",
Refuse: "Refuser",
Register: "S'inscrire",
"Registration complete! Please check your emails now": "Enregistrement terminé ! Allez voir vos emails maintenant",
+ "Remarkable Rookies": "Recrues Remarquables",
Rematch: "Rejouer",
"Rematch in progress": "Revanche en cours",
"Remove game?": "Supprimer la partie ?",
"Show next game after a move": "Montrer la partie suivante après un coup",
"Show possible moves": "Montrer les coups possibles",
"Show solution": "Montrer la solution",
+ Six: "Six",
Solution: "Solution",
"Sound alert at game start": "Alerte sonore quand une partie démarre",
Stop: "Arrêt",
"The game was already imported": "La partie a déjà été importée",
"Three repetitions": "Triple répétition",
Time: "Temps",
+ Two: "Deux",
"Undetermined result": "Résultat indéterminé",
Update: "Mise à jour",
"Upload a game": "Envoyer une partie",
"White win": "Les blancs gagnent",
"Who's there?": "Qui est là ?",
With: "Avec",
+ "With switch": "Avec switch",
with: "avec",
"Wrong color": "Mauvaise couleur",
"Wrong time control": "Cadence erronée",
"vg30": "Les pièces peuvent temporairement emprunter des pouvoir aux autres",
"vt31": "Divers",
"vg31": "Ces variantes ne sont pas encore classées, en général car elles sont l'unique représentant de leur type sur ce site.",
-
- // Variants' options
- "Options": "Options",
- "Randomness": "Degré d'aléa",
- "With switch": "Avec switch",
};
h3 More information
p
- | The variant idea was suggested recently (2020) by Vincent Rothuis.
- | It is mentioned on
+ | The variant is mentioned on
a(href="https://www.chessvariants.com/other.dir/modest-various.html")
| this page
| .
h3 Más información
p
- | Esta idea fue sugerida recientemente (2020) por Vincent Rothuis.
- | La variante es mencionada en
+ | Esta variante es mencionada en
a(href="https://www.chessvariants.com/other.dir/modest-various.html")
| esta página
| .
h3 Plus d'information
p
- | Cette idée a été suggérée récemment (2020) par Vincent Rothuis.
- | La variante est mentionnée sur
+ | Cette variante est mentionnée sur
a(href="https://www.chessvariants.com/other.dir/modest-various.html")
| cette page
| .
p.boxed
- | TODO: other armies as well
- | Black pieces are replaced by a new army, where most pieces are quite
- | colorbound.
+ | White and black pieces are replaced by different armies.
-p Black pawns and king move as usual, but the other pieces do not:
+p.
+ Pawns and kings move as usual, but the other pieces generally do not.
+ Indeed, before the game start you must select two armies, defining
+ new movements for "rooks", "knights", "bishops" and "queens".
+
+p Pieces movements are described using these simple pieces:
ul
- li Rook = bishop + dabbabah (D),
- li Knight = wazir + alfil = "phoenix" (H),
- li Bishop = ferz + alfil + dabbabah (A),
- li Queen = bishop + knight = "princess" (S).
+ li Dabbabah = jump two squares orthogonally
+ li Alfil = jump two squares diagonally
+ li Wazir = one square orthogonally
+ li Ferz = one square diagonally
+ li Three leaper (L3) = jump three squares orthogonally
+ li Narrow knight = knight without "2+1 lateral moves"
+
+p Pawns can be promoted into a piece of any of the two armies playing.
+
+h3 The Colorbound Clobberers
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bd.svg")
+ img(src="/images/pieces/Cwda/ww.svg")
+ img(src="/images/pieces/Cwda/bf.svg")
+ img(src="/images/pieces/Cwda/wc.svg")
+
+ul
+ li Rook = bishop + dabbabah = "bede" (D),
+ li Knight = wazir + alfil = "waffle" (W),
+ li Bishop = ferz + alfil + dabbabah = "fad" (F),
+ li Queen = bishop + knight = "cardinal" (C).
+
+figure.diagram-container
+ .diagram.diag12
+ | fen:8/8/8/3D4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ .diagram.diag22
+ | fen:8/8/8/4w3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
+ figcaption.
+ Moves of the Bede on the left, and of the Waffle on the right.
+
p.
- The Ferz and Wazir move respectively like a single-step bishop, and
- single-step rook. The Alfil and Dabbabah move respectively like a
- double-step bishop and a double-step rook. They can both leap over a piece.
+ When castling large, the king and rook arrive respectively on
+ b1/b8 and c1/c8 so that the rook remains on the same color.
+
+h3 The Nutty Knights
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bg.svg")
+ img(src="/images/pieces/Cwda/wi.svg")
+ img(src="/images/pieces/Cwda/bt.svg")
+ img(src="/images/pieces/Cwda/wl.svg")
+
+ul
+ li Rook = rook forward and sideways + king backwards = "charging rook" (G),
+ li Knight = narrow knight + ferz = "fibnif" (I),
+ li.
+ Bishop = knight forward + king sideways and backwards =
+ "charging knight" (T),
+ li Queen = rook forward and sideways + knight forward + king = "colonel" (L).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3d4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ | fen:8/8/8/3i4/8/8/8/8 c7,c3,e7,e3,c4,c6,e6,e4:
.diagram.diag22
- | fen:8/8/8/4h3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
+ | fen:8/8/8/4T3/8/8/8/8 c6,d7,f7,g6,d5,f5,d4,e4,f4:
figcaption.
- Moves of the black rook on the left, and of the black knight on the right.
+ Moves of the Fibnif on the left, and of the Charging knight on the right.
+
+h3 The Remarkable Rookies
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bs.svg")
+ img(src="/images/pieces/Cwda/wy.svg")
+ img(src="/images/pieces/Cwda/bh.svg")
+ img(src="/images/pieces/Cwda/wo.svg")
+
+ul
+ li Rook = rook limited to 4 squares = "short rook" (S),
+ li Knight = dabbabah + wazir = "woody rook" (Y),
+ li Bishop = dabbabah + ferz + L3 = "half-duck" (H),
+ li Queen = rook + knight = "chancellor" (O).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3a4/8/8/8/8 c6,b7,e6,f7,e4,f3,c4,b3,d7,f5,d3,b5:
+ | fen:8/8/8/3y4/8/8/8/8 d3,b5,d7,f5,c5,d6,e5,d4:
.diagram.diag22
- | fen:8/8/8/4s3/8/8/8/8 a1,b2,c3,d4,f6,g7,h8,b8,c7,d6,f4,g3,h2,c6,d7,f7,g6,g4,f3,d3,c4:
+ | fen:8/8/8/4H3/8/8/8/8 c5,e7,g5,e3,b5,e8,h5,e2,d4,d6,f6,f4:
figcaption.
- Moves of the black bishop on the left, and of the black queen on the right.
+ Moves of the Woody rook on the left, and of the Half-duck on the right.
-p Pawns can be promoted into any piece (including those of the other team).
+h3 Fide army
-p.
- When castling large, the black king arrives on b8 and the a8 rook moves
- to c8, to remain on the same color.
+p The standard chess pieces.
h3 Source
p
- a(href="https://www.chessvariants.com/d.betza/chessvar/dan/colclob.html")
- | The colorbound clobberers
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | Chess with different armies
| on chessvariants.com.
p Inventor: Ralph Betza (1996)
p.boxed
- | Las piezas negras son reemplazadas por un nuevo equipo, que incluye
- | la mayoría de las piezas se estiraron para evolucionar en un solo color.
+ | Las piezas blancas y negras son reemplazadas por diferentes ejércitos.
p.
- Los peones negros y el rey mantienen sus movimientos habituales, pero este
- no es el caso para las otras piezas:
+ Los peones y los reyes se mueven como de costumbre, pero normalmente no
+ las otras piezas. De hecho, antes del inicio del juego debes
+ seleccionar dos ejércitos, definiendo nuevos movimientos para los
+ "torres", "caballos", "alfiles" y "damas".
+
+p Los movimientos de las piezas se describen utilizando estas piezas básicas:
ul
- li Torre = alfil + dabbabah (D),
- li Caballo = wazir + alfil = "phoenix" (H),
- li Alfil = ferz + elefante + dabbabah (A),
- li Dama = alfil + caballo = "princesa" (S).
+ li Dabbabah = saltar dos casillas ortogonalmente
+ li Alfil_A = saltar dos casillas en diagonal
+ li Wazir = una casilla ortogonalmente
+ li Ferz = una casilla diagonal
+ li Three leaper (L3) = saltar tres casillas ortogonalmente
+ li Narrow knight = Caballo sin "movimientos laterales 2+1"
+
+p.
+ Los peones pueden promocionarse en una pieza de cualquier
+ cuál de los ejércitos presentes.
+
+h3 Los Batidores Unicolor
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bd.svg")
+ img(src="/images/pieces/Cwda/ww.svg")
+ img(src="/images/pieces/Cwda/bf.svg")
+ img(src="/images/pieces/Cwda/wc.svg")
+
+ul
+ li Torre = alfil_A + dabbabah = "bede" (D),
+ li Caballo = wazir + alfil = "gofre" (W),
+ li Alfil = ferz + alfil_A + dabbabah = "fad" (F),
+ li Dama = alfil + caballo = "cardenal" (C).
+
+figure.diagram-container
+ .diagram.diag12
+ | fen:8/8/8/3D4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ .diagram.diag22
+ | fen:8/8/8/4w3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
+ figcaption Jugadas del Bede a la izquierda y del Gofre a la derecha.
+
p.
- El Ferz y el Wazir viajan respectivamente como un alfil y una torre,
- pero de una casilla solamente. El Elefante y el Dabbabah se mueven
- respectivamente de dos casillas como un alfil y una torre,
- posiblemente saltando sobre una pieza.
+ Después del gran enroque, el rey y la torre llegan respectivamente en b1/b8
+ y c1/c8 para que la torre permanezca al mismo color.
+
+h3 Los Caballeros Locos
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bg.svg")
+ img(src="/images/pieces/Cwda/wi.svg")
+ img(src="/images/pieces/Cwda/bt.svg")
+ img(src="/images/pieces/Cwda/wl.svg")
+
+ul
+ li.
+ Torre = torre hacia adelante y hacia los lados + rey atrás =
+ "torre de carga" (G),
+ li Caballo = narrow knight + ferz = "fibnif" (I),
+ li.
+ Alfil = caballo hacia adelante + rey lateralmente y hacia atrás =
+ "caballo de carga" (T),
+ li.
+ Dama = torre hacia adelante y hacia los lados + caballo hacia adelante
+ + rey = "coronel" (L).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3d4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ | fen:8/8/8/3i4/8/8/8/8 c7,c3,e7,e3,c4,c6,e6,e4:
.diagram.diag22
- | fen:8/8/8/4h3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
+ | fen:8/8/8/4T3/8/8/8/8 c6,d7,f7,g6,d5,f5,d4,e4,f4:
figcaption.
- Jugadas de la torre negra a la izquierda y del caballo negro a la derecha.
+ Jugadas del Fibnif a la izquierda, y del Caballo de carga a la derecha.
+
+h3 Las Reclutas Notables
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bs.svg")
+ img(src="/images/pieces/Cwda/wy.svg")
+ img(src="/images/pieces/Cwda/bh.svg")
+ img(src="/images/pieces/Cwda/wo.svg")
+
+ul
+ li Torre = torre limitada a 4 casillas = "torre corta" (S),
+ li Caballo = dabbabah + wazir = "torre arbolada" (Y),
+ li Alfil = dabbabah + ferz + L3 = "medio-pato" (H),
+ li Dama = torre + caballo = "canciller" (O).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3a4/8/8/8/8 c6,b7,e6,f7,e4,f3,c4,b3,d7,f5,d3,b5:
+ | fen:8/8/8/3y4/8/8/8/8 d3,b5,d7,f5,c5,d6,e5,d4:
.diagram.diag22
- | fen:8/8/8/4s3/8/8/8/8 a1,b2,c3,d4,f6,g7,h8,b8,c7,d6,f4,g3,h2,c6,d7,f7,g6,g4,f3,d3,c4:
+ | fen:8/8/8/4H3/8/8/8/8 c5,e7,g5,e3,b5,e8,h5,e2,d4,d6,f6,f4:
figcaption.
- Jugadas del alfil negro a la izquierda, y de la dama negra a la derecha.
+ Jugadas de la Torre arbolada a la izquierda y del Medio-pato a la derecha.
-p.
- Los peones pueden ser promovidos a cualquier piezas (incluidos las del
- otro equipo)
+h3 Ejército Fide
-p.
- Después del gran enroque, el rey negro llega en b8 y la torre a8 entra en c8,
- para permanecer en el mismo color.
+p Piezas de ajedrez estándar.
h3 Fuente
p
- a(href="https://www.chessvariants.com/d.betza/chessvar/dan/colclob.html")
- | Los "batidores unicolor"
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | Ajedrez con diferentes ejércitos.
| en chessvariants.com.
p Inventor: Ralph Betza (1996)
p.boxed
- | Les pièces noires sont remplacées par une nouvelle équipe, dont
- | la plupart des pièces tendent à évoluer sur une seule couleur.
+ | Les pièces noires et blanches sont remplacées par des armées différentes.
p.
- Les pions et le roi noirs conservent leur déplacements habituels, mais ce
- n'est pas le cas des autres pièces :
+ Les pions et rois se déplacent comme d'habitude, mais en général pas
+ les autres pièces. En effet, avant le début de la partie vous devez
+ sélectionner deux armées, définissant de nouveaux déplacements pour les
+ "tours", "cavaliers", "fous" et "dames".
+
+p Les mouvements des pièces sont décrits en utilisant ces pièces élmentaires :
ul
- li Tour = fou + dabbabah (D),
- li Cavalier = wazir + alfil = "phoenix" (H),
- li Fou = ferz + alfil + dabbabah (A),
- li Dame = fou + cavalier = "princesse" (S).
+ li Dabbabah = saute deux cases orthogonalement
+ li Alfil = saute deux cases en diagonale
+ li Wazir = une case orthogonalement
+ li Ferz = une case en diagonale
+ li Three leaper (L3) = saute trois cases orthogonalement
+ li Narrow knight = cavalier sans "coups latéraux 2+1"
+
+p.
+ Les pions peuvent se promouvoir en une pièce de n'importe
+ laquelle des armées présentes.
+
+h3 Les Tabasseurs Unicolores
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bd.svg")
+ img(src="/images/pieces/Cwda/ww.svg")
+ img(src="/images/pieces/Cwda/bf.svg")
+ img(src="/images/pieces/Cwda/wc.svg")
+
+ul
+ li Tour = fou + dabbabah = "bede" (D),
+ li Cavalier = wazir + alfil = "gaufre" (W),
+ li Fou = ferz + alfil + dabbabah = "fad" (F),
+ li Dame = fou + cavalier = "cardinal" (C).
+
+figure.diagram-container
+ .diagram.diag12
+ | fen:8/8/8/3D4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ .diagram.diag22
+ | fen:8/8/8/4w3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
+ figcaption Coups du Bede à gauche, et de la Gaufre à droite.
+
p.
- Le Ferz et le Wazir se déplacent respectivement comme un fou et une tour
- mais d'une seule case. L'Alfil et le Dabbabah se déplacent respectivement
- de deux cases comme un fou et une tour,
- en sautant éventuellement par dessus une pièce.
+ Après le grand roque, roi et tour arrivent respectivement en b1/b8 et c1/c8
+ afin que la tour reste sur la même couleur.
+
+h3 Les Chevaliers Fous
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bg.svg")
+ img(src="/images/pieces/Cwda/wi.svg")
+ img(src="/images/pieces/Cwda/bt.svg")
+ img(src="/images/pieces/Cwda/wl.svg")
+
+ul
+ li.
+ Tour = tour vers l'avant et latéralement + roi vers l'arrière =
+ "tour chargeante" (G),
+ li Cavalier = narrow knight + ferz = "fibnif" (I),
+ li.
+ Fou = cavalier vers l'avant + roi latéralement et vers l'arrière =
+ "cavalier chargeant" (T),
+ li.
+ Dame = tour vers l'avant et latéralement + cavalier vers l'avant + roi =
+ "colonel" (L).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3d4/8/8/8/8 a8,b7,c6,e4,f3,g2,h1,c4,b3,a2,e6,f7,g8,f5,d3,b5,d7:
+ | fen:8/8/8/3i4/8/8/8/8 c7,c3,e7,e3,c4,c6,e6,e4:
.diagram.diag22
- | fen:8/8/8/4h3/8/8/8/8 e6,f5,e4,d5,c7,g7,g3,c3:
- figcaption.
- Coups de la tour noire à gauche, et du cavalier noir à droite.
+ | fen:8/8/8/4T3/8/8/8/8 c6,d7,f7,g6,d5,f5,d4,e4,f4:
+ figcaption Coups du Fibnif à gauche, et du Cavalier chargeant à droite.
+
+h3 Les Recrues Remarquables
+
+figure.showPieces.text-center
+ img(src="/images/pieces/Cwda/bs.svg")
+ img(src="/images/pieces/Cwda/wy.svg")
+ img(src="/images/pieces/Cwda/bh.svg")
+ img(src="/images/pieces/Cwda/wo.svg")
+
+ul
+ li Tour = tour limitée à 4 cases = "tour courte" (S),
+ li Cavalier = dabbabah + wazir = "tour boisée" (Y),
+ li Fou = dabbabah + ferz + L3 = "demi-canard" (H),
+ li Dame = tour + cavalier = "chancelier" (O).
figure.diagram-container
.diagram.diag12
- | fen:8/8/8/3a4/8/8/8/8 c6,b7,e6,f7,e4,f3,c4,b3,d7,f5,d3,b5:
+ | fen:8/8/8/3y4/8/8/8/8 d3,b5,d7,f5,c5,d6,e5,d4:
.diagram.diag22
- | fen:8/8/8/4s3/8/8/8/8 a1,b2,c3,d4,f6,g7,h8,b8,c7,d6,f4,g3,h2,c6,d7,f7,g6,g4,f3,d3,c4:
- figcaption.
- Coups du fou noir à gauche, et de la dame noire à droite.
+ | fen:8/8/8/4H3/8/8/8/8 c5,e7,g5,e3,b5,e8,h5,e2,d4,d6,f6,f4:
+ figcaption Coups de la Tour boisée à gauche, et du Demi-canard à droite.
-p.
- Les pions peuvent être promus en n'importe quelle pièce (incluant celles
- de l'autre équipe).
+h3 Armée Fide
-p.
- Après le grand roque, le roi noir arrive en b8 et la tour a8 vient en c8,
- afin de rester sur la même couleur.
+p Les pièces d'échecs standard.
h3 Source
p
- a(href="https://www.chessvariants.com/d.betza/chessvar/dan/colclob.html")
- | Les "tabasseurs unicolores"
- | sur chessvariants.com.
+ a(href="https://www.chessvariants.com/unequal.dir/cwda.html")
+ | Échecs avec armées différentes
+ | sur chessvariants.com.
p Inventeur : Ralph Betza (1996)
return (
this.isAttackedBySlideNJump(sq, color, V.BN, V.steps[V.BISHOP]) ||
this.isAttackedBySlideNJump(
- sq, color, V.BN, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.BN, V.steps[V.KNIGHT], 1)
);
}
return (
this.isAttackedBySlideNJump(sq, color, V.RN, V.steps[V.ROOK]) ||
this.isAttackedBySlideNJump(
- sq, color, V.RN, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.RN, V.steps[V.KNIGHT], 1)
);
}
this.isAttackedBySlideNJump(
sq, color, V.QN, V.steps[V.BISHOP].concat(V.steps[V.ROOK])) ||
this.isAttackedBySlideNJump(
- sq, color, V.QN, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.QN, V.steps[V.KNIGHT], 1)
);
}
}
getPotentialMinirookMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.ROOK], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.ROOK], 1);
}
getPotentialMinibishopMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
getPotentialMiniqueenMoves(sq) {
- return (
- super.getSlideNJumpMoves(
- sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep")
- );
+ return super.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialMovesFrom(sq) {
return "Alapo/" + b + suffix;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rbqqbr/tcssct/6/6/TCSSCT/RBQQBR w 0";
const piece2pawn = {
let pieces = { w: new Array(6), b: new Array(6) };
// Shuffle pieces on first (and last rank if randomness == 2)
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
export class Align4Rules extends ChessRules {
- static GenRandInitFen(randomness) {
- const baseFen = ChessRules.GenRandInitFen(Math.min(randomness, 1));
+ static get Options() {
+ return {
+ check: [
+ {
+ label: "Random",
+ defaut: false,
+ variable: "random"
+ }
+ ]
+ };
+ }
+
+ static GenRandInitFen(options) {
+ const baseFen = ChessRules.GenRandInitFen(
+ { randomness: (options.random ? 1 : 0) });
return "4k3/8" + baseFen.substring(17, 50) + " -";
}
if (this.getColor(x, y) == 'w') return super.getPotentialKingMoves([x, y]);
// Black doesn't castle:
return super.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getAllValidMoves() {
return [];
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).slice(0, -2);
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).slice(0, -2);
}
getPotentialMovesFrom([x, y]) {
case V.KING:
// Do not allow castling to escape from check
oppMoves = super.getSlideNJumpMoves(
- [i, j],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [i, j], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
break;
}
for (let om of oppMoves) {
this.kingPos[this.turn] = [move.vanish[1].x, move.vanish[1].y];
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 -";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
export class Antiking1Rules extends BerolinaRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
getPotentialAntikingMoves(sq) {
// The antiking moves like a king (only captured colors differ)
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttacked(sq, color) {
// Antiking is not attacked by king:
if (this.getPiece(x, y) == V.ANTIKING) return false;
return this.isAttackedBySlideNJump(
- [x, y],
- color,
- V.KING,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], color, V.KING, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttackedByAntiking([x, y], color) {
// (Anti)King is not attacked by antiking
if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false;
return this.isAttackedBySlideNJump(
- [x, y],
- color,
- V.ANTIKING,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], color, V.ANTIKING, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
underCheck(color) {
getPotentialAntikingMoves(sq) {
// The antiking moves like a king (only captured colors differ)
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttacked(sq, color) {
// (Anti)King is not attacked by antiking
if ([V.KING, V.ANTIKING].includes(this.getPiece(x, y))) return false;
return this.isAttackedBySlideNJump(
- [x, y],
- color,
- V.ANTIKING,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], color, V.ANTIKING, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
underCheck(color) {
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbqkbnr/pppppppp/3A4/8/8/3a4/PPPPPPPP/RNBQKBNR w 0 ahah -";
let pieces = { w: new Array(8), b: new Array(8) };
let flags = "";
let antikingPos = { w: -1, b: -1 };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
antikingPos['b'] = antikingPos['w'];
flags += flags;
export class ApocalypseRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
export class ArenaRules extends ChessRules {
+ static get Lines() {
+ return [
+ [[2, 0], [2, 8]],
+ [[6, 0], [6, 8]]
+ ];
+ }
+
static get HasFlags() {
return false;
}
scanKings() {}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "-";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).slice(0, -6) + "-";
}
static InArena(x) {
}
getPotentialQueenMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- ).filter(m => {
- // Filter out moves longer than 3 squares
- return Math.max(
- Math.abs(m.end.x - m.start.x),
- Math.abs(m.end.y - m.start.y)) <= 3;
- });
+ return super.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3);
}
getPotentialKingMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- ).filter(m => {
- // Filter out moves longer than 3 squares
- return Math.max(
- Math.abs(m.end.x - m.start.x),
- Math.abs(m.end.y - m.start.y)) <= 3;
- });
+ return super.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 3);
}
getCheckSquares() {
export class AtarigoRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get Monochrome() {
return true;
}
export class Avalam2Rules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
this.play(moves[3]); //HACK... 3 = queen index
const res = this.getComputerMove();
this.undo(moves[3]);
+ if (Array.isArray(res)) return [moves[3]].concat(res);
return [moves[3], res];
}
// subTurn == 1 (necessarily)
);
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// No collision between 'n' and castle flags, so next replacement is fine
return (
- ChessRules.GenRandInitFen(randomness)
- .replace(/n/g, 'm').replace(/N/g, 'M')
+ ChessRules.GenRandInitFen(options).replace(/n/g, 'm').replace(/N/g, 'M')
);
}
}
getPotentialMammothMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.MAMMOTH], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.MAMMOTH], 1);
}
isAttacked(sq, color) {
}
isAttackedByMammoth(sq, color) {
- return (
- this.isAttackedBySlideNJump(
- sq, color, V.MAMMOTH, V.steps[V.MAMMOTH], "oneStep")
- );
+ return this.isAttackedBySlideNJump(
+ sq, color, V.MAMMOTH, V.steps[V.MAMMOTH], 1);
}
static get SEARCH_DEPTH() {
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "hbnrqrnhb/ppppppppp/9/9/4a4/9/9/PPPPPPPPP/HBNRQRNHB w 0 - -";
let pieces = { w: new Array(9), b: new Array(9) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
return moves;
}
- // "Sliders": at most 3 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 == 3) 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;
+ getSlideNJumpMoves(sq, steps, nbSteps) {
+ // "Sliders": at most 3 steps
+ return super.getSlideNJumpMoves(sq, steps, !nbSteps ? 3 : 1);
}
getPotentialPhoenixMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.PHOENIX], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.PHOENIX], 1);
}
getPmove(move) {
export class BarioRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
// Does not really seem necessary (although the author mention it)
// Instead, first move = pick a square for the king.
static get HasFlags() {
}
}
- getSlideNJumpMoves([x, y], steps, oneStep) {
- const piece = this.getPiece(x, y);
- let moves = [];
- outerLoop: for (let step of steps) {
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep !== undefined) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // Only king can take on occupied square:
- if (piece == V.KING && V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
- }
- return moves;
+ canTake([x1, y1], [x2, y2]) {
+ return (
+ this.getPiece(x1, y1) == V.KING &&
+ this.getColor(x1, y1) != this.getColor(x2, y2)
+ );
}
// Modify capturing moves among listed pawn moves
return false;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
// Deterministic:
return "rnbkqbnm/pppppppp/8/8/8/8/PPPPPPPP/MNBQKBNR w 0";
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
);
}
- // TODO(?): some duplicated code in 2 next functions
- getSlideNJumpMoves([x, y], steps, oneStep) {
- let moves = [];
- outerLoop: for (let loop = 0; loop < steps.length; loop++) {
- const step = steps[loop];
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // No capture check: handled elsewhere (next method)
- }
- return moves;
+ canTake() {
+ return false;
}
// Find possible captures from a square
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rqbnkbnr/pppppppp/8/8/8/8/PPPPPPPP/RQBNKBNR w 0 -";
// Place pieces at random but the king cannot be next to a rook or queen.
let pieces = { w: new Array(8), b: new Array(8) };
let flags = "";
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
export class BishopawnsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
getPotentialEmpressMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialPrincessMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
isAttackedByEmpress(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.EMPRESS, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.EMPRESS,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.EMPRESS, V.steps[V.KNIGHT], 1)
);
}
isAttackedByPrincess(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.PRINCESS, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.PRINCESS,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.PRINCESS, V.steps[V.KNIGHT], 1)
);
}
return 2;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"rnsbqkbenr/pppppppppp/91/91/91/91/PPPPPPPPPP/RNSBQKBENR w 0 ajaj -"
);
let pieces = { w: new Array(10), b: new Array(10) };
let flags = "";
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
return "*";
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
return (
- SuicideRules.GenRandInitFen(randomness).slice(0, -1) +
+ SuicideRules.GenRandInitFen(options).slice(0, -1) +
// Add Peach + Mario flags + capture counts
"1111 000000000000"
);
export class CheckeredRules extends ChessRules {
+ static get Options() {
+ return Object.assign(
+ {},
+ ChessRules.Options,
+ {
+ check: [
+ {
+ label: "With switch",
+ defaut: true,
+ variable: "switch"
+ }
+ ]
+ }
+ );
+ }
+
+ static AbbreviateOptions(opts) {
+ return (!opts["switch"] ? "NS" : "");
+ }
+
static board2fen(b) {
const checkered_codes = {
p: "s",
return (b[0] == "c" ? "Checkered/" : "") + b;
}
- static get Options() {
- return Object.assign(
- {},
- ChessRules.Options,
- {
- check: [
- {
- label: "With switch",
- defaut: true,
- variable: "switch"
- }
- ]
- }
- );
- }
-
- static AbbreviateOptions(opts) {
- return (!opts["switch"] ? "NS" : "");
- }
-
setOtherVariables(fen) {
super.setOtherVariables(fen);
// Local stack of non-capturing checkered moves:
isAttackedByKnight(sq, colors) {
return this.isAttackedBySlideNJump(
- sq,
- colors,
- V.KNIGHT,
- V.steps[V.KNIGHT],
- "oneStep"
- );
+ sq, colors, V.KNIGHT, V.steps[V.KNIGHT], "oneStep");
}
isAttackedByBishop(sq, colors) {
isAttackedByQueen(sq, colors) {
return this.isAttackedBySlideNJump(
- sq,
- colors,
- V.QUEEN,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP])
- );
+ sq, colors, V.QUEEN, V.steps[V.ROOK].concat(V.steps[V.BISHOP]));
}
isAttackedByKing(sq, colors) {
return this.isAttackedBySlideNJump(
- sq,
- colors,
- V.KING,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
+ sq, colors, V.KING,
+ V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep"
);
}
{ label: "Asymmetric random", value: 2 }
]
}
- ],
- check: []
+ ]
};
}
this.pawnFlags = flags;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return "8/8/pppppppp/rnbqkbnr/8/8/PPPPPPPP/RNBQKBNR " +
"w 0 1111111111111111";
}
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep !== undefined) continue outerLoop;
+ if (oneStep) continue outerLoop;
i = V.ComputeX(i + step[0]);
j += step[1];
}
);
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Capturing and non-capturing reserves:
- return ChessRules.GenRandInitFen(randomness) + " 00000000000000000000";
+ return ChessRules.GenRandInitFen(options) + " 00000000000000000000";
}
getFen() {
return moves;
}
- getSlideNJumpMoves([x, y], steps, oneStep) {
- let moves = [];
- const canTake = ChessRules.PIECES.includes(this.getPiece(x, y));
- outerLoop: for (let step of steps) {
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- if (V.OnBoard(i, j) && canTake && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
- }
- return moves;
+ canTake([x1, y1], [x2, y2]) {
+ return (
+ this.getColor(x1, y1) !== this.getColor(x2, y2) &&
+ ChessRules.PIECES.includes(this.getPiece(x1, y1))
+ );
}
getAllValidMoves() {
this.lastMoveEnd = [null];
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
- return "rnbqkbnr/8/pppppppp/8/8/PPPPPPPP/8/RNBQKBNR w 0 ahah";
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const baseFen = ChessRules.GenRandInitFen(options);
return (
baseFen.substr(0, 8) +
"/8/pppppppp/8/8/PPPPPPPP/8/" +
const piece = this.getPiece(x,y);
if ([V.PAWN, V.KING].includes(piece)) return moves;
const color = this.turn;
- const oneStep = (piece == V.PAWN);
let movements = {},
steps = [];
if (piece == V.QUEEN) steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
(piece != V.QUEEN && type != piece) ||
(piece == V.QUEEN && type == V.KNIGHT)
) {
+ const nbSteps = (type == V.KNIGHT ? 1 : undefined);
Array.prototype.push.apply(moves,
- this.getSlideNJumpMoves([x, y], V.steps[type], type == V.KNIGHT));
+ super.getSlideNJumpMoves([x, y], V.steps[type], nbSteps));
}
});
return moves;
return squares;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
// Castle flags here indicate pieces positions (if can castle)
return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 adehadeh -";
let pieces = { w: new Array(8), b: new Array(8) };
let flags = "";
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
getPotentialKingMoves([x, y]) {
let moves = this.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
const c = this.getColor(x, y);
if (this.castleFlags[c].slice(1, 3).includes(y))
moves = moves.concat(this.getCastleMoves([x, y]));
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness) + " 0000000000 -";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options) + " 0000000000 -";
}
getFen() {
if (move.vanish.length > 0) return super.getNotation(move);
// Rebirth:
let piece = move.appear[0].p;
- if (ChessRules.PIECES.includes(piece)) {
- if (move.appear[0].p != V.PAWN) piece = move.appear[0].p.toUpperCase();
+ let prefix = "";
+ const endNotation = "@" + V.CoordsToSquare(move.end);
+ if (piece != V.PAWN) {
+ if (ChessRules.PIECES.includes(piece)) prefix = piece.toUpperCase();
+ else piece = V.PromotionMap[piece].toUpperCase();
}
- else piece = V.PromotionMap[piece].toUpperCase();
- return piece + "@" + V.CoordsToSquare(move.end);
+ return prefix + endNotation;
}
};
-import { ChessRules, Move, PiPo } from "@/base_rules";
-import { ArrayFun } from "@/utils/array";
-import { randInt } from "@/utils/alea";
+import { ChessRules } from "@/base_rules";
export class CwdaRules extends ChessRules {
- static get PawnSpecs() {
- return Object.assign(
- {},
- ChessRules.PawnSpecs,
- {
- promotions:
- ChessRules.PawnSpecs.promotions.concat(
- [V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN])
- }
+ static get Options() {
+ return {
+ select: ChessRules.Options.select.concat([
+ {
+ label: "Army 1",
+ variable: "army1",
+ defaut: 'C',
+ options: [
+ { label: "Colorbound Clobberers", value: 'C' },
+ { label: "Nutty Knights", value: 'N' },
+ { label: "Remarkable Rookies", value: 'R' },
+ { label: "Fide", value: 'F' }
+ ]
+ },
+ {
+ label: "Army 2",
+ variable: "army2",
+ defaut: 'C',
+ options: [
+ { label: "Colorbound Clobberers", value: 'C' },
+ { label: "Nutty Knights", value: 'N' },
+ { label: "Remarkable Rookies", value: 'R' },
+ { label: "Fide", value: 'F' }
+ ]
+ }
+ ])
+ };
+ }
+
+ static AbbreviateOptions(opts) {
+ return opts["army1"] + opts["army2"];
+ }
+
+ static IsValidOptions(opts) {
+ // Both armies filled, avoid Fide vs Fide
+ return (
+ opts.army1 && opts.army2 &&
+ (opts.army1 != 'F' || opts.army2 != 'F')
);
}
getPpath(b) {
- if ([V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN].includes(b[1]))
- return "Cwda/" + b;
- return b;
- }
-
- static GenRandInitFen(randomness) {
- if (randomness == 0)
- return "dhaskahd/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 ahah -";
-
- // Mapping white --> black (at least at start):
- const piecesMap = {
- 'r': 'd',
- 'n': 'h',
- 'b': 'a',
- 'q': 's',
- 'k': 'k'
+ return (ChessRules.PIECES.includes(b[1]) ? "" : "Cwda/") + b;
+ }
+
+ static get PiecesMap() {
+ return {
+ // Colorbound Clobberers
+ 'C': {
+ 'r': 'd',
+ 'n': 'w',
+ 'b': 'f',
+ 'q': 'c',
+ 'k': 'k'
+ },
+ // Nutty Knights
+ 'N': {
+ 'r': 'g',
+ 'n': 'i',
+ 'b': 't',
+ 'q': 'l',
+ 'k': 'k'
+ },
+ // Remarkable Rookies
+ 'R': {
+ 'r': 's',
+ 'n': 'y',
+ 'b': 'h',
+ 'q': 'o',
+ 'k': 'k'
+ }
};
+ }
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const baseFen = ChessRules.GenRandInitFen(options.randomness);
+ let blackLine = baseFen.substr(0, 8);
+ if (options.army2 != 'F') {
+ blackLine = blackLine.split('')
+ .map(p => V.PiecesMap[options.army2][p]).join('');
+ }
+ let whiteLine = baseFen.substr(35, 8);
+ if (options.army1 != 'F') {
+ whiteLine = whiteLine.split('')
+ .map(p => V.PiecesMap[options.army1][p.toLowerCase()])
+ .join('').toUpperCase();
+ }
return (
- baseFen.substr(0, 8).split('').map(p => piecesMap[p]).join('') +
- baseFen.substr(8)
+ blackLine + baseFen.substring(8, 35) + whiteLine +
+ baseFen.substr(43) + " " + options.army1 + options.army2
);
}
+ setOtherVariables(fen) {
+ super.setOtherVariables(fen);
+ const armies = V.ParseFen(fen).armies;
+ this.army1 = armies.charAt(0);
+ this.army2 = armies.charAt(1);
+ }
+
+ static ParseFen(fen) {
+ return Object.assign(
+ { armies: fen.split(" ")[5] },
+ ChessRules.ParseFen(fen)
+ );
+ }
+
+ static IsGoodFen(fen) {
+ if (!ChessRules.IsGoodFen(fen)) return false;
+ const armies = V.ParseFen(fen).armies;
+ if (!armies || !armies.match(/^[CNRF]{2,2}$/)) return false;
+ return true;
+ }
+
+ getFen() {
+ return super.getFen() + " " + this.army1 + this.army2;
+ }
+
static get C_ROOK() {
return 'd';
}
static get C_KNIGHT() {
- return 'h';
+ return 'w';
}
static get C_BISHOP() {
- return 'a';
+ return 'f';
}
static get C_QUEEN() {
+ return 'c';
+ }
+ static get N_ROOK() {
+ return 'g';
+ }
+ static get N_KNIGHT() {
+ return 'i';
+ }
+ static get N_BISHOP() {
+ return 't';
+ }
+ static get N_QUEEN() {
+ return 'l';
+ }
+ static get R_ROOK() {
return 's';
}
+ static get R_KNIGHT() {
+ return 'y';
+ }
+ static get R_BISHOP() {
+ return 'h';
+ }
+ static get R_QUEEN() {
+ return 'o';
+ }
static get PIECES() {
- return (
- ChessRules.PIECES.concat([V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN])
- );
+ return ChessRules.PIECES.concat(
+ [V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN]).concat(
+ [V.N_ROOK, V.N_KNIGHT, V.N_BISHOP, V.N_QUEEN]).concat(
+ [V.R_ROOK, V.R_KNIGHT, V.R_BISHOP, V.R_QUEEN]);
}
- getPotentialMovesFrom([x, y]) {
- switch (this.getPiece(x, y)) {
- case V.C_ROOK: return this.getPotentialC_rookMoves([x, y]);
- case V.C_KNIGHT: return this.getPotentialC_knightMoves([x, y]);
- case V.C_BISHOP: return this.getPotentialC_bishopMoves([x, y]);
- case V.C_QUEEN: return this.getPotentialC_queenMoves([x, y]);
- default: return super.getPotentialMovesFrom([x, y]);
+ getPotentialMovesFrom(sq) {
+ switch (this.getPiece(sq[0], sq[1])) {
+ case V.C_ROOK: return this.getPotentialC_rookMoves(sq);
+ case V.C_KNIGHT: return this.getPotentialC_knightMoves(sq);
+ case V.C_BISHOP: return this.getPotentialC_bishopMoves(sq);
+ case V.C_QUEEN: return this.getPotentialC_queenMoves(sq);
+ case V.N_ROOK: return this.getPotentialN_rookMoves(sq);
+ case V.N_KNIGHT: return this.getPotentialN_knightMoves(sq);
+ case V.N_BISHOP: return this.getPotentialN_bishopMoves(sq);
+ case V.N_QUEEN: return this.getPotentialN_queenMoves(sq);
+ case V.R_ROOK: return this.getPotentialR_rookMoves(sq);
+ case V.R_KNIGHT: return this.getPotentialR_knightMoves(sq);
+ case V.R_BISHOP: return this.getPotentialR_bishopMoves(sq);
+ case V.R_QUEEN: return this.getPotentialR_queenMoves(sq);
+ case V.PAWN: {
+ // Can promote in anything from the two current armies
+ let promotions = [];
+ for (let army of ["army1", "army2"]) {
+ if (army == "army2" && this.army2 == this.army1) break;
+ switch (this[army]) {
+ case 'C': {
+ Array.prototype.push.apply(promotions,
+ [V.C_ROOK, V.C_KNIGHT, V.C_BISHOP, V.C_QUEEN]);
+ break;
+ }
+ case 'N': {
+ Array.prototype.push.apply(promotions,
+ [V.N_ROOK, V.N_KNIGHT, V.N_BISHOP, V.N_QUEEN]);
+ break;
+ }
+ case 'R': {
+ Array.prototype.push.apply(promotions,
+ [V.R_ROOK, V.R_KNIGHT, V.R_BISHOP, V.R_QUEEN]);
+ break;
+ }
+ case 'F': {
+ Array.prototype.push.apply(promotions,
+ [V.ROOK, V.KNIGHT, V.BISHOP, V.QUEEN]);
+ break;
+ }
+ }
+ }
+ return super.getPotentialPawnMoves(sq, promotions);
+ }
+ default: return super.getPotentialMovesFrom(sq);
}
return [];
}
static get steps() {
return Object.assign(
- {},
- ChessRules.steps,
{
// Dabbabah
'd': [
[1, -1],
[-1, 1],
[-1, -1]
+ ],
+ // Wazir
+ 'w': [
+ [-1, 0],
+ [0, -1],
+ [1, 0],
+ [0, 1]
+ ],
+ // Threeleaper
+ '$3': [
+ [-3, 0],
+ [0, -3],
+ [3, 0],
+ [0, 3]
+ ],
+ // Narrow knight
+ '$n': [
+ [-2, -1],
+ [-2, 1],
+ [2, -1],
+ [2, 1]
]
- }
+ },
+ ChessRules.steps,
);
}
getPotentialC_rookMoves(sq) {
return (
- this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps['d'], "oneStep"))
+ this.getSlideNJumpMoves(sq, V.steps.b).concat(
+ this.getSlideNJumpMoves(sq, V.steps.d, 1))
);
}
getPotentialC_knightMoves(sq) {
return (
- this.getSlideNJumpMoves(sq, V.steps['a'], "oneStep").concat(
- this.getSlideNJumpMoves(sq, V.steps[V.ROOK], "oneStep"))
+ this.getSlideNJumpMoves(sq, V.steps.a, 1).concat(
+ this.getSlideNJumpMoves(sq, V.steps.r, 1))
);
}
getPotentialC_bishopMoves(sq) {
return (
- this.getSlideNJumpMoves(sq, V.steps['d'], "oneStep").concat(
- this.getSlideNJumpMoves(sq, V.steps['a'], "oneStep")).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep"))
+ this.getSlideNJumpMoves(sq, V.steps.d, 1).concat(
+ this.getSlideNJumpMoves(sq, V.steps.a, 1)).concat(
+ this.getSlideNJumpMoves(sq, V.steps.b, 1))
);
}
getPotentialC_queenMoves(sq) {
return (
- this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep"))
+ this.getSlideNJumpMoves(sq, V.steps.b).concat(
+ this.getSlideNJumpMoves(sq, V.steps.n, 1))
+ );
+ }
+
+ getPotentialN_rookMoves(sq) {
+ const c = this.turn;
+ const rookSteps = [ [0, -1], [0, 1], [c == 'w' ? -1 : 1, 0] ];
+ const backward = (c == 'w' ? 1 : -1);
+ const kingSteps = [ [backward, -1], [backward, 0], [backward, 1] ];
+ return (
+ this.getSlideNJumpMoves(sq, rookSteps).concat(
+ this.getSlideNJumpMoves(sq, kingSteps, 1))
+ );
+ }
+
+ getPotentialN_knightMoves(sq) {
+ const backward = (this.turn == 'w' ? 1 : -1);
+ const kingSteps = [
+ [0, -1], [0, 1], [backward, -1], [backward, 0], [backward, 1]
+ ];
+ return (
+ this.getSlideNJumpMoves(sq, V.steps.$n, 1).concat(
+ this.getSlideNJumpMoves(sq, kingSteps, 1))
+ );
+ }
+
+ getPotentialN_bishopMoves(sq) {
+ const backward = (this.turn == 'w' ? 1 : -1);
+ const kingSteps = [
+ [0, -1], [0, 1], [backward, -1], [backward, 0], [backward, 1]
+ ];
+ const forward = -backward;
+ const knightSteps = [
+ [2*forward, -1], [2*forward, 1], [forward, -2], [forward, 2]
+ ];
+ return (
+ this.getSlideNJumpMoves(sq, knightSteps, 1).concat(
+ this.getSlideNJumpMoves(sq, kingSteps, 1))
+ );
+ }
+
+ getPotentialN_queenMoves(sq) {
+ const backward = (this.turn == 'w' ? 1 : -1);
+ const forward = -backward;
+ const kingSteps = [
+ [forward, -1], [forward, 1],
+ [backward, -1], [backward, 0], [backward, 1]
+ ];
+ const knightSteps = [
+ [2*forward, -1], [2*forward, 1], [forward, -2], [forward, 2]
+ ];
+ const rookSteps = [ [0, -1], [0, 1], [forward, 0] ];
+ return (
+ this.getSlideNJumpMoves(sq, rookSteps).concat(
+ this.getSlideNJumpMoves(sq, kingSteps, 1)).concat(
+ this.getSlideNJumpMoves(sq, knightSteps, 1))
+ );
+ }
+
+ getPotentialR_rookMoves(sq) {
+ return this.getSlideNJumpMoves(sq, V.steps.r, 4);
+ }
+
+ getPotentialR_knightMoves(sq) {
+ return (
+ this.getSlideNJumpMoves(sq, V.steps.d, 1).concat(
+ this.getSlideNJumpMoves(sq, V.steps.w, 1))
+ );
+ }
+
+ getPotentialR_bishopMoves(sq) {
+ return (
+ this.getSlideNJumpMoves(sq, V.steps.d, 1).concat(
+ this.getSlideNJumpMoves(sq, V.steps.f, 1)).concat(
+ this.getSlideNJumpMoves(sq, V.steps.$3, 1))
+ );
+ }
+
+ getPotentialR_queenMoves(sq) {
+ return (
+ this.getSlideNJumpMoves(sq, V.steps.r).concat(
+ this.getSlideNJumpMoves(sq, V.steps.n, 1))
);
}
getCastleMoves([x, y]) {
const color = this.getColor(x, y);
- const finalSquares = [
- // Black castle long in an unusual way:
- (color == 'w' ? [2, 3] : [1, 2]),
- [V.size.y - 2, V.size.y - 3]
- ];
+ let finalSquares = [ [2, 3], [V.size.y - 2, V.size.y - 3] ];
+ if (
+ (color == 'w' && this.army1 == 'C') ||
+ (color == 'b' && this.army2 == 'C')
+ ) {
+ // Colorbound castle long in an unusual way:
+ finalSquares[0] = [1, 2];
+ }
return super.getCastleMoves([x, y], finalSquares);
}
isAttacked(sq, color) {
- return (
- super.isAttacked(sq, color) ||
- this.isAttackedByC_rook(sq, color) ||
- this.isAttackedByC_knight(sq, color) ||
- this.isAttackedByC_bishop(sq, color) ||
- this.isAttackedByC_queen(sq, color)
- );
+ if (super.isAttackedByPawn(sq, color) || super.isAttackedByKing(sq, color))
+ return true;
+ for (let army of ['C', 'N', 'R', 'F']) {
+ if (
+ [this.army1, this.army2].includes(army) &&
+ (
+ this["isAttackedBy" + army + "_rook"](sq, color) ||
+ this["isAttackedBy" + army + "_knight"](sq, color) ||
+ this["isAttackedBy" + army + "_bishop"](sq, color) ||
+ this["isAttackedBy" + army + "_queen"](sq, color)
+ )
+ ) {
+ return true;
+ }
+ }
+ return false;
}
isAttackedByC_rook(sq, color) {
return (
- this.isAttackedBySlideNJump(sq, color, V.C_ROOK, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.C_ROOK, V.steps['d'], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.C_ROOK, V.steps.b) ||
+ this.isAttackedBySlideNJump(sq, color, V.C_ROOK, V.steps.d, 1)
);
}
isAttackedByC_knight(sq, color) {
return (
- this.isAttackedBySlideNJump(
- sq, color, V.C_KNIGHT, V.steps[V.ROOK], "oneStep") ||
- this.isAttackedBySlideNJump(
- sq, color, V.C_KNIGHT, V.steps['a'], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.C_KNIGHT, V.steps.r, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.C_KNIGHT, V.steps.a, 1)
);
}
isAttackedByC_bishop(sq, color) {
return (
- this.isAttackedBySlideNJump(
- sq, color, V.C_BISHOP, V.steps['d'], "oneStep") ||
- this.isAttackedBySlideNJump(
- sq, color, V.C_BISHOP, V.steps['a'], "oneStep") ||
- this.isAttackedBySlideNJump(
- sq, color, V.C_BISHOP, V.steps['f'], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.C_BISHOP, V.steps.d, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.C_BISHOP, V.steps.a, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.C_BISHOP, V.steps.f, 1)
);
}
isAttackedByC_queen(sq, color) {
return (
- this.isAttackedBySlideNJump(sq, color, V.C_QUEEN, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.C_QUEEN, V.steps[V.KNIGHT], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.C_QUEEN, V.steps.b) ||
+ this.isAttackedBySlideNJump(sq, color, V.C_QUEEN, V.steps.n, 1)
+ );
+ }
+
+ isAttackedByN_rook(sq, color) {
+ const rookSteps = [ [0, -1], [0, 1], [color == 'w' ? 1 : -1, 0] ];
+ const backward = (color == 'w' ? -1 : 1);
+ const kingSteps = [ [backward, -1], [backward, 0], [backward, 1] ];
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.N_ROOK, rookSteps) ||
+ this.isAttackedBySlideNJump(sq, color, V.N_ROOK, kingSteps, 1)
+ );
+ }
+
+ isAttackedByN_knight(sq, color) {
+ const backward = (color == 'w' ? -1 : 1);
+ const kingSteps = [
+ [0, -1], [0, 1], [backward, -1], [backward, 0], [backward, 1]
+ ];
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.N_KNIGHT, V.steps.$n) ||
+ this.isAttackedBySlideNJump(sq, color, V.N_KNIGHT, kingSteps, 1)
+ );
+ }
+
+ isAttackedByN_bishop(sq, color) {
+ const backward = (color == 'w' ? -1 : 1);
+ const kingSteps = [
+ [0, -1], [0, 1], [backward, -1], [backward, 0], [backward, 1]
+ ];
+ const forward = -backward;
+ const knightSteps = [
+ [2*forward, -1], [2*forward, 1], [forward, -2], [forward, 2]
+ ];
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.N_BISHOP, knightSteps, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.N_BISHOP, kingSteps, 1)
+ );
+ }
+
+ isAttackedByN_queen(sq, color) {
+ const backward = (color == 'w' ? -1 : 1);
+ const forward = -backward;
+ const kingSteps = [
+ [forward, -1], [forward, 1],
+ [backward, -1], [backward, 0], [backward, 1]
+ ];
+ const knightSteps = [
+ [2*forward, -1], [2*forward, 1], [forward, -2], [forward, 2]
+ ];
+ const rookSteps = [ [0, -1], [0, 1], [forward, 0] ];
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.N_QUEEN, knightSteps, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.N_QUEEN, kingSteps, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.N_QUEEN, rookSteps)
+ );
+ }
+
+ isAttackedByR_rook(sq, color) {
+ return this.isAttackedBySlideNJump(sq, color, V.R_ROOK, V.steps.r, 4);
+ }
+
+ isAttackedByR_knight(sq, color) {
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.R_KNIGHT, V.steps.d, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.R_KNIGHT, V.steps.w, 1)
+ );
+ }
+
+ isAttackedByR_bishop(sq, color) {
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.R_BISHOP, V.steps.d, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.R_BISHOP, V.steps.f, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.R_BISHOP, V.steps.$3, 1)
+ );
+ }
+
+ isAttackedByR_queen(sq, color) {
+ return (
+ this.isAttackedBySlideNJump(sq, color, V.R_QUEEN, V.steps.r) ||
+ this.isAttackedBySlideNJump(sq, color, V.R_QUEEN, V.steps.n, 1)
);
}
static get VALUES() {
return Object.assign(
- {},
- ChessRules.VALUES,
{
d: 4,
- h: 3,
- a: 5,
- s: 6
- }
+ w: 3,
+ f: 5,
+ c: 7,
+ g: 4,
+ i: 3,
+ t: 4,
+ l: 7,
+ s: 4,
+ y: 3,
+ h: 4,
+ o: 8
+ },
+ ChessRules.VALUES
);
}
let j = V.ComputeY(y + step[1]);
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep !== undefined) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j = V.ComputeY(j + step[1]);
}
return false;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "krbp4/rqnp4/nbpp4/pppp4/4PPPP/4PPBN/4PNQR/4PBRK w 0";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
return (L > 0 ? this.p2play[L-1] : "-");
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness) + " -";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options) + " -";
}
canMove(piece, color, [x, y]) {
export class DiscoduelRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
export class DobutsuRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
const c = this.turn;
const forward = (c == 'w' ? -1 : 1);
const steps = V.steps[V.ROOK].concat([[forward, 1], [forward, -1]]);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialElephantMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
getPotentialGiraffeMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.ROOK], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.ROOK], 1);
}
getAllValidMoves() {
return (b[1] == V.COMMONER ? "Doublearmy/" : "") + b;
}
- static GenRandInitFen(randomness) {
- const fen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const fen = ChessRules.GenRandInitFen(options);
const rows = fen.split(" ")[0].split("/");
return (
rows[0] + "/" +
getPotentialCommonerMoves(sq) {
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttacked(sq, color) {
isAttackedByCommoner(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.COMMONER,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, color, V.COMMONER, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
static get VALUES() {
return Object.assign(
- {},
- ChessRules.VALUES,
- { c: 5 }
+ { c: 5 },
+ ChessRules.VALUES
);
}
}
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "jfsqkbnr/pppppppp/8/8/8/8/PPPPPPPP/JDSQKBNR w 0 ahah - -";
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
const fenParts = baseFen.split(' ');
const posParts = fenParts[0].split('/');
getPotentialKingMoves(sq) {
const moves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
return (
this.subTurn == 1
? moves.concat(this.getCastleMoves(sq))
// Lowercase if black controls.
// Single piece (no prisoners): A@ to L@ (+ lowercase)
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
return { x: 9, y: 9 };
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen() {
return "9/9/9/9/9/9/9/9/9 w 0 12,12";
}
return (b[0] == 'w' ? "Empire/" : "") + b;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbqkbnr/pppppppp/8/8/8/PPPSSPPP/8/TECDKCET w 0 ah -";
// Mapping kingdom --> empire:
'K': 'K'
};
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
return (
baseFen.substr(0, 24) + "PPPSSPPP/8/" +
baseFen.substr(35, 8).split('').map(p => piecesMap[p]).join('') +
});
}
+ // TODO: some merging to do with Orda method (and into base_rules.js)
getSlideNJumpMoves_([x, y], steps, oneStep) {
let moves = [];
outerLoop: for (let step of steps) {
if (!step.onlyTake) moves.push(this.getBasicMove([x, y], [i, j]));
// NOTE: (bad) HACK here, since onlyTake is true only for Eagle
// capturing moves, which are oneStep...
- if (!!oneStep || !!step.onlyTake) continue outerLoop;
+ if (oneStep || step.onlyTake) continue outerLoop;
i += s[0];
j += s[1];
}
if (this.getColor(x, y) == 'b') return super.getPotentialKingMoves([x, y]);
// Empire doesn't castle:
return super.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialSoldierMoves([x, y]) {
if (!lastRank) steps.push([shiftX, 0]);
if (y > 0) steps.push([0, -1]);
if (y < 9) steps.push([0, 1]);
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
isAttacked(sq, color) {
isAttackedByEagle(sq, color) {
return super.isAttackedBySlideNJump(
- sq, color, V.EAGLE, V.steps[V.KNIGHT], "oneStep");
+ sq, color, V.EAGLE, V.steps[V.KNIGHT], 1);
}
isAttackedByCardinal(sq, color) {
return (
super.isAttackedBySlideNJump(
sq, color, V.DUKE,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep"
+ V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1
)
);
}
isAttackedBySoldier([x, y], color) {
const shiftX = (color == 'w' ? 1 : -1); //shift from king
return super.isAttackedBySlideNJump(
- [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], "oneStep");
+ [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], 1);
}
updateCastleFlags(move, piece) {
export class FanoronaRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
}
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbq1knbr/9/9/9/4a4/9/9/9/RNBQ1KNBR w 0";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
return moves;
}
- // No captures:
- 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) continue outerLoop;
- i += step[0];
- j += step[1];
- stepCount++;
- }
- }
- return moves;
+ canTake() {
+ return false;
}
// Extra arg "computer" to avoid trimming all redundant pass moves:
}
canTake([x1, y1], [x2, y2]) {
- return !this.isProtected([x2, y2]) && super.canTake([x1, y1], [x2, y2]);
+ return (
+ [V.QUEEN, V.KING].includes(this.getPiece(x1, y1)) &&
+ !this.isProtected([x2, y2]) &&
+ this.getColor(x1, y1) != this.getColor(x2, y2)
+ );
}
getPotentialMovesFrom([x, y]) {
}
}
- getSlideNJumpMoves([x, y], steps, oneStep) {
- const piece = this.getPiece(x, y);
- let moves = [];
- outerLoop: for (let step of steps) {
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep !== undefined) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // Only queen and king can take on occupied square:
- if (
- [V.KING, V.QUEEN].includes(piece) &&
- V.OnBoard(i, j) &&
- this.canTake([x, y], [i, j])
- ) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- }
- }
- return moves;
- }
-
// "Cannon/grasshopper pawn"
getPotentialPawnMoves([x, y]) {
const c = this.turn;
getPotentialKingMoves(sq) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
- return this.getSlideNJumpMoves(sq, steps, "oneStep");
+ return this.getSlideNJumpMoves(sq, steps, 1);
}
// NOTE: not really captures, but let's keep the name
}
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"wlqksaui/pppppppp/8/8/8/8/PPPPPPPP/IUASKQLW w 0"
);
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
// Deterministic:
return "enbqkbnm/pppppppp/8/8/8/8/PPPPPPPP/ENBQKBNM w 0 ahah -";
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
// Replace rooks by lancers with expected orientation:
const firstBlackRook = baseFen.indexOf('r'),
lastBlackRook = baseFen.lastIndexOf('r'),
]
})
);
- if (!!oneStep) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
isAttackedByBN(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.BN, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.BN, V.steps[V.KNIGHT], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.BN, V.steps[V.KNIGHT], 1)
);
}
isAttackedByRN(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.RN, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.RN, V.steps[V.KNIGHT], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.RN, V.steps[V.KNIGHT], 1)
);
}
isAttackedByKN(sq, color) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
return (
- this.isAttackedBySlideNJump(sq, color, V.KN, steps, "oneStep") ||
- this.isAttackedBySlideNJump(
- sq, color, V.KN, V.steps[V.KNIGHT], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.KN, steps, 1) ||
+ this.isAttackedBySlideNJump(sq, color, V.KN, V.steps[V.KNIGHT], 1)
);
}
isAttackedByKB(sq, color) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
return (
- this.isAttackedBySlideNJump(sq, color, V.KB, steps, "oneStep") ||
+ this.isAttackedBySlideNJump(sq, color, V.KB, steps, 1) ||
this.isAttackedBySlideNJump(sq, color, V.KB, V.steps[V.BISHOP])
);
}
isAttackedByKR(sq, color) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
return (
- this.isAttackedBySlideNJump(sq, color, V.KR, steps, "oneStep") ||
+ this.isAttackedBySlideNJump(sq, color, V.KR, steps, 1) ||
this.isAttackedBySlideNJump(sq, color, V.KR, V.steps[V.ROOK])
);
}
export class GomokuRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get Monochrome() {
return true;
}
getPotentialMarshallMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialCardinalMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
isAttackedByMarshall(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.MARSHALL, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.MARSHALL,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.MARSHALL, V.steps[V.KNIGHT], 1)
);
}
isAttackedByCardinal(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.CARDINAL, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.CARDINAL,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.CARDINAL, V.steps[V.KNIGHT], 1)
);
}
return 2;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"r8r/1nbqkmcbn1/pppppppppp/91/91/91/91/PPPPPPPPPP/1NBQKMCBN1/R8R " +
"w 0 -"
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on second and before-last rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
return 2;
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness)
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options)
.slice(0, -2)
.replace(
"/pppppppp/8/8/8/8/PPPPPPPP/",
export class HamiltonRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
export class HiddenRules extends ChessRules {
+ static get Options() {
+ // TODO: later, option "free placement"
+ return null;
+ }
+
static get HasFlags() {
return false;
}
return this.filterValid(this.getPotentialMovesFrom(sq));
}
- static GenRandInitFen(randomness) {
- let fen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ let fen = ChessRules.GenRandInitFen(options);
// Place hidden queens at random (always):
let hiddenQueenPos = randInt(8);
let pawnRank = "PPPPPPPP".split("");
export class HoppelpoppelRules extends ChessRules {
+ // TODO: merge with base_rules.js (see also Orda, Empire)
getSlideNJumpMoves_([x, y], steps, oneStep, options) {
options = options || {};
let moves = [];
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
if (!options.onlyTake) moves.push(this.getBasicMove([x, y], [i, j]));
- if (!!oneStep) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
isAttackedByKnight([x, y], color) {
return super.isAttackedBySlideNJump(
- [x, y],
- color,
- V.KNIGHT,
- V.steps[V.BISHOP]
- );
+ [x, y], color, V.KNIGHT, V.steps[V.BISHOP]);
}
isAttackedByBishop([x, y], color) {
return super.isAttackedBySlideNJump(
- [x, y],
- color,
- V.BISHOP,
- V.steps[V.KNIGHT],
- "oneStep"
- );
+ [x, y], color, V.BISHOP, V.steps[V.KNIGHT], 1);
}
};
export class HordeRules extends ChessRules {
+ static get Options() {
+ return {
+ check: [
+ {
+ label: "Random",
+ defaut: false,
+ variable: "random"
+ }
+ ]
+ };
+ }
+
static get HasFlags() {
return false;
}
return true;
}
- static GenRandInitFen(randomness) {
- if (randomness == 2) randomness--;
- const fen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const fen =
+ ChessRules.GenRandInitFen({ randomness: (options.random ? 1 : 0) });
return (
// 20 first chars are 3 rows + 3 slashes
fen.substr(0, 20)
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness) + " -";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options) + " -";
}
setOtherVariables(fen) {
this.getPiece(x, y) == V.KING
// No castling with enemy king (...yes, should eat it but...)
? super.getSlideNJumpMoves(
- [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep")
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1)
: super.getPotentialMovesFrom([x, y]);
return moves;
}
return true;
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).replace(/8/g, "cccccccc");
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).replace(/8/g, "cccccccc");
}
play(move) {
return false;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rbnkknbr/pppppppp/8/8/8/8/PPPPPPPP/RBNKKNBR w 0 - 000000";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
export class JanggiRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get Monochrome() {
return true;
}
if (y == 3) steps.push([shiftX, 1]);
else if (y == 5) steps.push([shiftX, -1]);
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
knightStepsFromRookStep(step) {
this.knightStepsFromRookStep(rookStep));
}
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
elephantStepsFromRookStep(step) {
}
}
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
palacePeopleMoves([x, y]) {
// At the middle: all directions available
Array.prototype.push.apply(steps, ChessRules.steps[V.BISHOP]);
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
getPotentialAdvisorMoves(sq) {
// In the middle of a palace: 4 one-diagonal-step to check
Array.prototype.push.apply(
moves,
- super.getSlideNJumpMoves([x, y],
- ChessRules.steps[V.BISHOP],
- "oneStep")
+ super.getSlideNJumpMoves([x, y], ChessRules.steps[V.BISHOP], 1)
);
}
return moves;
isAttackedByPawn([x, y], color) {
const shiftX = (color == 'w' ? 1 : -1); //shift from king
if (super.isAttackedBySlideNJump(
- [x, y], color, V.PAWN, [[shiftX, 0], [0, 1], [0, -1]], "oneStep")
+ [x, y], color, V.PAWN, [[shiftX, 0], [0, 1], [0, -1]], 1)
) {
return true;
}
}
}
return (
- super.isAttackedBySlideNJump([x, y], color, V.KNIGHT, steps, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.KNIGHT, steps, 1)
);
}
}
}
return (
- super.isAttackedBySlideNJump([x, y], color, V.ELEPHANT, steps, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.ELEPHANT, steps, 1)
);
}
);
}
- static GenRandInitFen(randomness) {
- const antikingFen = Antiking2Rules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const antikingFen = Antiking2Rules.GenRandInitFen(options);
return antikingFen.replace('a', 'J').replace('A', 'j');
}
getPotentialJokerMoves([x, y]) {
const moving =
- super.getSlideNJumpMoves([x, y], V.steps[V.KNIGHT], "oneStep")
+ super.getSlideNJumpMoves([x, y], V.steps[V.KNIGHT], 1)
.concat(super.getSlideNJumpMoves([x, y],
V.steps[V.ROOK].concat(V.steps[V.BISHOP])));
let swapping = [];
return ([V.KING, V.COMMONER].includes(b[1]) ? "Knightmate/" : "") + b;
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness)
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options)
.replace(/n/g, 'c').replace(/N/g, 'C');
}
getPotentialCommonerMoves(sq) {
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialKingMoves(sq) {
isAttackedByKing(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.KING,
- V.steps[V.KNIGHT],
- "oneStep"
- );
+ sq, color, V.KING, V.steps[V.KNIGHT], 1);
}
isAttackedByCommoner(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.COMMONER,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, color, V.COMMONER, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
static get VALUES() {
scanKings() {}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
return (
- ChessRules.GenRandInitFen(randomness)
+ ChessRules.GenRandInitFen(options)
.replace(/k/g, 'c').replace(/K/g, 'C')
.replace(/n/g, 'k').replace(/N/g, 'K')
);
getPotentialCommonerMoves(sq) {
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialKingMoves(sq) {
isAttackedByKing(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.KING,
- V.steps[V.KNIGHT],
- "oneStep"
- );
+ sq, color, V.KING, V.steps[V.KNIGHT], 1);
}
isAttackedByCommoner(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.COMMONER,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, color, V.COMMONER, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
postPlay() {}
export class KnightpawnsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
export class KonaneRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
getPotentialKingMoves(sq) {
return (
this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1
).concat(super.getCastleMoves(sq, null, true, ['r']))
);
}
steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
break;
}
- return super.isAttackedBySlideNJump(
- sq, oppCol, piece, steps, [V.KING, V.PAWN, V.KNIGHT].includes(piece))
+ const nbSteps = [V.KING, V.PAWN, V.KNIGHT].includes(piece) ? 1 : null;
+ return super.isAttackedBySlideNJump(sq, oppCol, piece, steps, nbSteps);
}
getPotentialMovesFrom([x, y]) {
export class MaharajahRules extends ChessRules {
+ static get Options() {
+ return {
+ check: [
+ {
+ label: "Random",
+ defaut: false,
+ variable: "random"
+ }
+ ]
+ };
+ }
+
static get HasEnpassant() {
return false;
}
}
}
- static GenRandInitFen(randomness) {
- const sFen = ChessRules.GenRandInitFen(Math.max(randomness, 1));
- return "3mm3/8/" + sFen.substring(18, 50);
+ static GenRandInitFen(options) {
+ const baseFen = ChessRules.GenRandInitFen(
+ { randomness: (options.random ? 1 : 0) });
+ return "3mm3/8/" + baseFen.substring(18, 50);
}
getFlagsFen() {
let moves = super.getPotentialQueenMoves(sq);
moves = moves.concat(super.getPotentialKnightMoves(sq));
const otherJumpMoves =
- super.getSlideNJumpMoves(sq, V.M_EXTRA_STEPS, "oneStep")
+ super.getSlideNJumpMoves(sq, V.M_EXTRA_STEPS, 1)
.filter(m =>
moves.every(mv => mv.end.x != m.end.x || mv.end.y != m.end.y));
return moves.concat(otherJumpMoves);
return 'f';
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbqkbnr/8/pppppppp/8/8/PPPPPPPP/8/RNBKQBNR w 0";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
getPotentialBishopMoves(sq) {
const forward = (this.turn == 'w' ? -1 : 1);
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP].concat([ [forward, 0] ]),
- "oneStep"
- );
+ sq, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
}
getPotentialQueenMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
isAttacked(sq, color) {
isAttackedByBishop(sq, color) {
const forward = (color == 'w' ? 1 : -1);
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.BISHOP,
- V.steps[V.BISHOP].concat([ [forward, 0] ]),
- "oneStep"
- );
+ sq, color, V.BISHOP, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
}
isAttackedByQueen(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.QUEEN,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ sq, color, V.QUEEN, V.steps[V.BISHOP], 1);
}
isAttackedByPromoted(sq, color) {
return super.isAttackedBySlideNJump(
- sq,
- color,
- V.PROMOTED,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ sq, color, V.PROMOTED, V.steps[V.BISHOP], 1);
}
static get VALUES() {
export class MaximaRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
if (piece == V.KING) j = j % V.size.y;
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
moves.push(this.getBasicMove(initSquare, [i, j]));
- if (!!oneStep) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
}
getPotentialGuardMoves(sq) {
- return (
- this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep",
- null
- )
- );
+ return this.getSlideNJumpMoves(
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep");
}
getNextMageSteps(step) {
}
isAttackedByGuard(sq, color) {
- return (
- super.isAttackedBySlideNJump(
- sq,
- color,
- V.GUARD,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- )
- );
+ return super.isAttackedBySlideNJump(
+ sq, color, V.GUARD, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getNextMageCheck(step) {
);
}
- static GenRandInitFen(randomness) {
- const antikingFen = Antiking2Rules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const antikingFen = Antiking2Rules.GenRandInitFen(options);
return antikingFen.replace('a', 'M').replace('A', 'm') + " -";
}
piece == V.KING
// No castling with enemy king (...yes, should eat it but...)
? super.getSlideNJumpMoves(
- [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep")
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1)
: super.getPotentialMovesFrom([x, y]);
return moves;
}
if (!lastRank) steps.push([shiftX, 0]);
if (y > 0) steps.push([0, -1]);
if (y < 9) steps.push([0, 1]);
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
insidePalace(x, y, c) {
return "1/2";
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Remove the en-passant + castle part of the FEN
- let fen = ChessRules.GenRandInitFen(randomness).slice(0, -6);
+ let fen = ChessRules.GenRandInitFen(options).slice(0, -6);
// Replace kings with queens
fen = fen.replace("k", "q").replace("K", "Q");
// Move pawns up:
export class MonsterRules extends ChessRules {
+ static get Options() {
+ return {
+ check: [
+ {
+ label: "Random",
+ defaut: false,
+ variable: "random"
+ }
+ ],
+ select: [
+ {
+ label: "Number of pawns",
+ variable: "pawnsCount",
+ defaut: 4,
+ options: [
+ { label: "Two", value: 2 },
+ { label: "Four", value: 4 },
+ { label: "Six", value: 6 }
+ ]
+ }
+ ]
+ };
+ }
+
+ static AbbreviateOptions(opts) {
+ return opts["pawnsCount"];
+ }
+
static IsGoodFlags(flags) {
// Only black can castle
return !!flags.match(/^[a-z]{2,2}$/);
}
- static GenRandInitFen(randomness) {
- if (randomness == 2) randomness--;
- const fen = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const baseFen = ChessRules.GenRandInitFen(
+ { randomness: (options.random ? 1 : 0) });
+ let pawnsLine = "";
+ switch (options.pawnsCount) {
+ case 2: pawnsLine = "3PP3"; break;
+ case 4: pawnsLine = "2PPPP2"; break;
+ case 6: pawnsLine = "1PPPPPP1"; break;
+ }
return (
// 26 first chars are 6 rows + 6 slashes
- fen.substr(0, 26)
+ baseFen.substr(0, 26) + pawnsLine + "/4K3 w 0 " +
// En passant available, and "half-castle"
- .concat("1PPPPPP1/4K3 w 0 ")
- .concat(fen.substr(-6, 2))
- .concat(" -")
+ baseFen.substr(-6, 2) + " -"
);
}
if (this.getColor(x, y) == 'b') return super.getPotentialKingMoves([x, y]);
// White doesn't castle:
return this.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttacked() {
return moves;
}
- getSlideNJumpMoves([x, y], steps, nbSteps) {
- let moves = [];
- outerLoop: for (let step of steps) {
- let i = x + step[0];
- let j = y + step[1];
- let stepCounter = 0;
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- stepCounter++;
- if (
- !!nbSteps &&
- // Next condition to remain compatible with super method
- (stepCounter >= nbSteps || isNaN(parseInt(nbSteps, 10)))
- ) {
- continue outerLoop;
- }
- i += step[0];
- j += step[1];
- }
- if (V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
- }
- return moves;
- }
-
// All types of leaps used here:
static get Leap2Ortho() {
return [ [-2, 0], [0, -2], [2, 0], [0, 2] ];
const steps =
V.steps[V.ROOK].concat(V.steps[V.BISHOP])
.concat(V.Leap2Ortho).concat(V.HorizontalKnight);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialUnicornMoves(sq) {
return (
super.getPotentialKnightMoves(sq)
- .concat(super.getSlideNJumpMoves(sq, V.CamelSteps, "oneStep"))
+ .concat(super.getSlideNJumpMoves(sq, V.CamelSteps, 1))
);
}
V.steps[V.ROOK].concat(V.steps[V.BISHOP])
.concat(V.Leap2Ortho)
.concat(V.Leap2Diago);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialHawkMoves(sq) {
const steps =
V.Leap2Ortho.concat(V.Leap2Diago)
.concat(V.Leap3Ortho).concat(V.Leap3Diago);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialFortressMoves(sq) {
const steps = V.Leap2Ortho.concat(V.VerticalKnight)
return (
- super.getSlideNJumpMoves(sq, steps, "oneStep")
+ super.getSlideNJumpMoves(sq, steps, 1)
.concat(this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 3))
);
}
getPotentialSpiderMoves(sq) {
const steps = V.Leap2Ortho.concat(V.steps[V.KNIGHT])
return (
- super.getSlideNJumpMoves(sq, steps, "oneStep")
+ super.getSlideNJumpMoves(sq, steps, 1)
.concat(this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 2))
);
}
return false;
}
- // Modify because of the limiyted steps options of some of the pieces here
- isAttackedBySlideNJump([x, y], color, piece, steps, nbSteps) {
- if (!!nbSteps && isNaN(parseInt(nbSteps, 10))) nbSteps = 1;
- for (let step of steps) {
- let rx = x + step[0],
- ry = y + step[1];
- let stepCounter = 1;
- while (
- V.OnBoard(rx, ry) && this.board[rx][ry] == V.EMPTY &&
- (!nbSteps || stepCounter < nbSteps)
- ) {
- rx += step[0];
- ry += step[1];
- stepCounter++;
- }
- if (
- V.OnBoard(rx, ry) &&
- this.board[rx][ry] != V.EMPTY &&
- this.getPiece(rx, ry) == piece &&
- this.getColor(rx, ry) == color
- ) {
- return true;
- }
- }
- return false;
- }
-
isAttackedByLeopard(sq, color) {
return (
super.isAttackedBySlideNJump(
- sq, color, V.LEOPARD, V.steps[V.KNIGHT], "oneStep") ||
+ sq, color, V.LEOPARD, V.steps[V.KNIGHT], 1) ||
this.isAttackedBySlideNJump(sq, color, V.LEOPARD, V.steps[V.BISHOP], 2)
);
}
const steps =
V.steps[V.ROOK].concat(V.steps[V.BISHOP])
.concat(V.Leap2Ortho).concat(V.HorizontalKnight);
- return super.isAttackedBySlideNJump(sq, color, V.CANNON, steps, "oneStep");
+ return super.isAttackedBySlideNJump(sq, color, V.CANNON, steps, 1);
}
isAttackedByUnicorn(sq, color) {
const steps = V.steps[V.KNIGHT].concat(V.CamelSteps)
return (
- super.isAttackedBySlideNJump(sq, color, V.UNICORN, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.UNICORN, steps, 1)
);
}
.concat(V.Leap2Ortho)
.concat(V.Leap2Diago);
return (
- super.isAttackedBySlideNJump(sq, color, V.ELEPHANT, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.ELEPHANT, steps, 1)
);
}
const steps =
V.Leap2Ortho.concat(V.Leap2Diago)
.concat(V.Leap3Ortho).concat(V.Leap3Diago);
- return super.isAttackedBySlideNJump(sq, color, V.HAWK, steps, "oneStep");
+ return super.isAttackedBySlideNJump(sq, color, V.HAWK, steps, 1);
}
isAttackedByFortress(sq, color) {
const steps = V.Leap2Ortho.concat(V.VerticalKnight)
return (
- super.isAttackedBySlideNJump(sq, color, V.FORTRESS, steps, "oneStep") ||
+ super.isAttackedBySlideNJump(sq, color, V.FORTRESS, steps, 1) ||
this.isAttackedBySlideNJump(sq, color, V.FORTRESS, V.steps[V.BISHOP], 3)
);
}
isAttackedBySpider(sq, color) {
const steps = V.Leap2Ortho.concat(V.steps[V.KNIGHT])
return (
- super.isAttackedBySlideNJump(sq, color, V.SPIDER, steps, "oneStep") ||
+ super.isAttackedBySlideNJump(sq, color, V.SPIDER, steps, 1) ||
this.isAttackedBySlideNJump(sq, color, V.SPIDER, V.steps[V.BISHOP], 2)
);
}
// NOTE: a lot copy-pasted from Hoppelpoppel
export class NewzealandRules extends ChessRules {
+ // TODO: merge with base_rules.js
getSlideNJumpMoves_([x, y], steps, oneStep, options) {
options = options || {};
let moves = [];
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
if (!options.onlyTake) moves.push(this.getBasicMove([x, y], [i, j]));
- if (!!oneStep) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
isAttackedByKnight([x, y], color) {
return super.isAttackedBySlideNJump(
- [x, y],
- color,
- V.KNIGHT,
- V.steps[V.ROOK]
- );
+ [x, y], color, V.KNIGHT, V.steps[V.ROOK]);
}
isAttackedByRook([x, y], color) {
return super.isAttackedBySlideNJump(
- [x, y],
- color,
- V.ROOK,
- V.steps[V.KNIGHT],
- "oneStep"
- );
+ [x, y], color, V.ROOK, V.steps[V.KNIGHT], 1);
}
};
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"wxxxxxxxxxxw/xcrnbqkbnrcx/xppppppppppx/x91x/x91x/x91x/" +
"x91x/x91x/x91x/xPPPPPPPPPPx/xCRNBQKBNRCx/WxxxxxxxxxxW " +
let flags = "";
// Shuffle pieces on first (and last rank if randomness == 2)
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
}
getPotentialChampionMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], 1);
}
getPotentialWizardMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.WIZARD], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.WIZARD], 1);
}
getCastleMoves([x, y]) {
isAttackedByWizard(sq, color) {
return (
this.isAttackedBySlideNJump(
- sq, color, V.WIZARD, V.steps[V.WIZARD], "oneStep")
+ sq, color, V.WIZARD, V.steps[V.WIZARD], 1)
);
}
isAttackedByChampion(sq, color) {
return (
this.isAttackedBySlideNJump(
- sq, color, V.CHAMPION, V.steps[V.CHAMPION], "oneStep")
+ sq, color, V.CHAMPION, V.steps[V.CHAMPION], 1)
);
}
return b;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "lhaykahl/8/pppppppp/8/8/8/PPPPPPPP/RNBQKBNR w 0 ah -";
// Mapping kingdom --> horde:
'k': 'k'
};
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
return (
baseFen.substr(0, 8).split('').map(p => piecesMap[p]).join('') +
// Skip 3 first rows + black castle flags
return [];
}
+ // TODO: merge this extension into base_rules.js
getSlideNJumpMoves([x, y], steps, oneStep, options) {
options = options || {};
let moves = [];
let j = y + step[1];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
if (!options.onlyTake) moves.push(this.getBasicMove([x, y], [i, j]));
- if (!!oneStep) continue outerLoop;
+ if (oneStep) continue outerLoop;
i += step[0];
j += step[1];
}
getPotentialLancerMoves(sq) {
const onlyMoves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.KNIGHT],
- "oneStep",
- { onlyMove: true }
- );
+ sq, V.steps[V.KNIGHT], "oneStep", { onlyMove: true });
const onlyTakes = this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK],
- null,
- { onlyTake: true }
- );
+ sq, V.steps[V.ROOK], null, { onlyTake: true });
return onlyMoves.concat(onlyTakes);
}
getPotentialArcherMoves(sq) {
const onlyMoves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.KNIGHT],
- "oneStep",
- { onlyMove: true }
- );
+ sq, V.steps[V.KNIGHT], "oneStep", { onlyMove: true });
const onlyTakes = this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP],
- null,
- { onlyTake: true }
- );
+ sq, V.steps[V.BISHOP], null, { onlyTake: true });
return onlyMoves.concat(onlyTakes);
}
getPotentialKheshigMoves(sq) {
- return super.getSlideNJumpMoves(
- sq,
- V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ const steps =
+ V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]);
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialYurtMoves(sq) {
return super.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP].concat([ [1, 0] ]),
- "oneStep"
- );
+ sq, V.steps[V.BISHOP].concat([ [1, 0] ]), 1);
}
getPotentialKingMoves([x, y]) {
if (this.getColor(x, y) == 'w') return super.getPotentialKingMoves([x, y]);
// Horde doesn't castle:
return super.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttacked(sq, color) {
}
isAttackedByKheshig(sq, color) {
- return super.isAttackedBySlideNJump(
- sq,
- color,
- V.KHESHIG,
- V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ const steps =
+ V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]);
+ return super.isAttackedBySlideNJump(sq, color, V.KHESHIG, steps, 1);
}
isAttackedByYurt(sq, color) {
return super.isAttackedBySlideNJump(
- sq,
- color,
- V.YURT,
- V.steps[V.BISHOP].concat([ [1, 0] ]),
- "oneStep"
- );
+ sq, color, V.YURT, V.steps[V.BISHOP].concat([ [1, 0] ]), 1);
}
updateCastleFlags(move, piece) {
return "Orda/" + b;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "lhafkahl/8/pppppppp/8/8/PPPPPPPP/8/LHAFKAHL w 0 ah -";
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on first (and last rank if randomness == 2)
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
getPotentialFalconMoves(sq) {
const onlyMoves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- null,
- { onlyMove: true }
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), null, { onlyMove: true });
const onlyTakes = this.getSlideNJumpMoves(
- sq,
- V.steps[V.KNIGHT],
- "oneStep",
- { onlyTake: true }
- );
+ sq, V.steps[V.KNIGHT], "oneStep", { onlyTake: true });
return onlyMoves.concat(onlyTakes);
}
isAttackedByFalcon(sq, color) {
return this.isAttackedBySlideNJump(
- sq, color, V.FALCON, V.steps[V.KNIGHT], "oneStep");
+ sq, color, V.FALCON, V.steps[V.KNIGHT], 1);
}
static get VALUES() {
this.pawnFlags = flags[1];
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add 16 pawns flags:
- return ChessRules.GenRandInitFen(randomness)
+ return ChessRules.GenRandInitFen(options)
.slice(0, -2) + "1111111111111111 -";
}
break;
case V.KING:
baseMoves = this.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
if (!noCastle && this.castleFlags[this.turn].some(v => v < V.size.y))
baseMoves = baseMoves.concat(this.getCastleMoves([x, y]));
break;
return moves;
}
- getSlideNJumpMoves([x, y], steps, oneStep) {
- let moves = [];
- outerLoop: for (let loop = 0; loop < steps.length; loop++) {
- const step = steps[loop];
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // No captures
- }
- return moves;
+ canTake() {
+ // No captures
+ return false;
}
underCheck(color) {
);
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add 16 pawns flags + empty umove:
- return ChessRules.GenRandInitFen(randomness)
+ return ChessRules.GenRandInitFen(options)
.slice(0, -2) + "1111111111111111 - -";
}
return true;
}
- static GenRandInitFen(randomness) {
- const baseFen = Pandemonium2Rules.GenRandInitFen(randomness)
+ static GenRandInitFen(options) {
+ const baseFen = Pandemonium2Rules.GenRandInitFen(options)
return baseFen.substr(0, 22) + "91/91/" + baseFen.substr(22);
}
return counts.join("");
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"rnbqkmcbnr/pppppppppp/91/91/91/91/PPPPPPPPPP/RNBQKMCBNR " +
"w 0 ajaj - 00000000000000"
let pieces = { w: new Array(10), b: new Array(10) };
let flags = "";
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
getPotentialMarshalMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialCardinalMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialScepterMoves(sq) {
const steps =
V.steps[V.KNIGHT].concat(V.steps[V.BISHOP]).concat(V.steps[V.ROOK]);
- return this.getSlideNJumpMoves(sq, steps, "oneStep");
+ return this.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialHorseMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.ROOK], "oneStep"));
+ this.getSlideNJumpMoves(sq, V.steps[V.ROOK], 1));
}
getPotentialDragonMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep"));
+ this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1));
}
getPotentialKingMoves(sq) {
// Initialize with normal moves
let moves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
const c = this.turn;
if (
this.castleFlags[c][0] < V.size.y ||
const steps =
V.steps[V.KNIGHT].concat(V.steps[V.ROOK]).concat(V.steps[V.BISHOP]);
return (
- super.isAttackedBySlideNJump(sq, color, V.SCEPTER, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.SCEPTER, steps, 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.HORSE, V.steps[V.BISHOP]) ||
super.isAttackedBySlideNJump(
- sq, color, V.HORSE, V.steps[V.ROOK], "oneStep")
+ sq, color, V.HORSE, V.steps[V.ROOK], 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.DRAGON, V.steps[V.ROOK]) ||
super.isAttackedBySlideNJump(
- sq, color, V.DRAGON, V.steps[V.BISHOP], "oneStep")
+ sq, color, V.DRAGON, V.steps[V.BISHOP], 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.MARSHAL, V.steps[V.ROOK]) ||
super.isAttackedBySlideNJump(
- sq,
- color,
- V.MARSHAL,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ sq, color, V.MARSHAL, V.steps[V.KNIGHT], 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.CARDINAL, V.steps[V.BISHOP]) ||
super.isAttackedBySlideNJump(
- sq,
- color,
- V.CARDINAL,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ sq, color, V.CARDINAL, V.steps[V.KNIGHT], 1)
);
}
export class ParachuteRules extends ChessRules {
+ static get Options() {
+ // TODO: later, allow variant, placing piece giving check maybe...
+ return null;
+ }
+
static get HasFlags() {
return false;
}
return true;
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
const bFen =
- ChessRules.GenRandInitFen(randomness)
+ ChessRules.GenRandInitFen(options)
// Remove castle flags
.slice(0, -6).concat("-");
const splitIdx = bFen.indexOf(' ');
export class PawnsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
export class PawnskingRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
getPotentialAmazonMoves(sq) {
return super.getPotentialQueenMoves(sq).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialEmpressMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialPrincessMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
return (
this.isAttackedBySlideNJump(sq, color, V.AMAZON, V.steps[V.BISHOP]) ||
this.isAttackedBySlideNJump(sq, color, V.AMAZON, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.AMAZON,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.AMAZON, V.steps[V.KNIGHT], 1)
);
}
isAttackedByEmpress(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.EMPRESS, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.EMPRESS,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.EMPRESS, V.steps[V.KNIGHT], 1)
);
}
isAttackedByPrincess(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.PRINCESS, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.PRINCESS,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.PRINCESS, V.steps[V.KNIGHT], 1)
);
}
return 2;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "esqakbnr/pppppppp/8/8/8/8/PPPPPPPP/ESQAKBNR w 0 ahah -";
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
const fenParts = baseFen.split(' ');
const posParts = fenParts[0].split('/');
this.subTurn = 1;
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add 2 knight flags
- return ChessRules.GenRandInitFen(randomness)
- .slice(0, -2) + "11 -";
+ return ChessRules.GenRandInitFen(options).slice(0, -2) + "11 -";
}
getFlagsFen() {
export class QueenpawnsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
export class RacingkingsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness) + " 0000000000";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options) + " 0000000000";
}
getFen() {
// NOTE: with this variant's special rule,
// some extra repetitions could be detected... TODO (...)
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).slice(0, -6) + "- null";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).slice(0, -6) + "- null";
}
setOtherVariables(fen) {
else steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
const extraMoves =
super.getSlideNJumpMoves(
- sq, steps, oneStep || [V.KNIGHT, V.KING].includes(pg))
+ sq, steps, (oneStep || [V.KNIGHT, V.KING].includes(pg) ? 1 : null))
.filter(m => {
return (
(piece != V.PAWN || m.end.x != lastRank) &&
// NOTE: not removing "dist" field; shouldn't matter much...
}
- getSlideNJumpMoves([x, y], steps, oneStep) {
- const piece = this.getPiece(x, y);
- let moves = [];
- outerLoop: for (let step of steps) {
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep !== undefined) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // Only king can take on occupied square:
- if (piece == V.KING && V.OnBoard(i, j) && this.canTake([x, y], [i, j]))
- moves.push(this.getBasicMove([x, y], [i, j]));
- }
- return moves;
+ canTake([x1, y1], [x2, y2]) {
+ return (
+ this.getPiece(x1, y1) == V.KING &&
+ this.getColor(x1, y1) != this.getColor(x2, y2)
+ );
}
// "Cannon/grasshopper pawn"
return false;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"91/1rqnbknqm1/1pppppppp1/91/91/91/91/1PPPPPPPP1/1MQNBKNQR1/91 w 0 -"
);
let pieces = { w: new Array(8), b: new Array(8) };
// Shuffle pieces on first and last rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
export class RollerballRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasEnpassant() {
return false;
}
const forward = (y <= 1 ? -1 : 1);
return (
super.getSlideNJumpMoves(
- [x, y], [[forward, -1], [forward, 0], [forward, 1]], "oneStep")
+ [x, y], [[forward, -1], [forward, 0], [forward, 1]], 1)
);
}
if (inMiddleY) {
const forward = (x <= 1 ? 1 : -1);
let moves =
super.getSlideNJumpMoves(
- [x, y], [[-1, forward], [0, forward], [1, forward]], "oneStep");
+ [x, y], [[-1, forward], [0, forward], [1, forward]], 1);
// Promotions may happen:
let extraMoves = [];
moves.forEach(m => {
const forward = (toRight ? 1 : -1);
return (
super.getSlideNJumpMoves(
- [x, y], [[-1, forward], [0, forward], [1, forward]], "oneStep")
+ [x, y], [[-1, forward], [0, forward], [1, forward]], 1)
);
}
const forward = (toUp ? -1 : 1);
return (
super.getSlideNJumpMoves(
- [x, y], [[forward, -1], [forward, 0], [forward, 1]], "oneStep")
+ [x, y], [[forward, -1], [forward, 0], [forward, 1]], 1)
);
}
if (y >= 5) multiStep.push([1, 0]);
else oneStep.push([1, 0]);
const c = this.turn;
- let moves = super.getSlideNJumpMoves([x, y], oneStep, "oneStep");
+ let moves = super.getSlideNJumpMoves([x, y], oneStep, 1);
for (let step of multiStep) {
let [i, j] = [x + step[0], y + step[1]];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
if (!multiStep[str]) oneStep.push(V.DictBishopSteps[str]);
});
const c = this.turn;
- let moves = super.getSlideNJumpMoves([x, y], oneStep, "oneStep");
+ let moves = super.getSlideNJumpMoves([x, y], oneStep, 1);
for (let step of Object.values(multiStep)) {
let [i, j] = [x + step[0], y + step[1]];
while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
? [ [forward, -1], [forward, 0], [forward, 1] ]
: [ [-1, forward], [0, forward], [1, forward] ];
return (
- super.isAttackedBySlideNJump([x, y], color, V.PAWN, steps, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.PAWN, steps, 1)
);
}
// In a corner: can be attacked by one square only
else step = [-1, 0];
}
return (
- super.isAttackedBySlideNJump([x, y], color, V.PAWN, [step], "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.PAWN, [step], 1)
);
}
if (y >= 5) multiStep.push([-1, 0]);
else oneStep.push([-1, 0]);
if (
- super.isAttackedBySlideNJump([x, y], color, V.ROOK, oneStep, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.ROOK, oneStep, 1)
) {
return true;
}
if (!multiStep[str]) oneStep.push(V.DictBishopSteps[str]);
});
if (
- super.isAttackedBySlideNJump([x, y], color, V.BISHOP, oneStep, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.BISHOP, oneStep, 1)
) {
return true;
}
export class RookpawnsRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get PawnSpecs() {
return Object.assign(
{},
return (b[1] == V.KNIGHT ? "Enpassant/" : "") + b;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "92/92/92/92/92/92/92/92/92/qrbnp1PNBRQ/krbnp1PNBRK w 0";
let pieces = { w: new Array(10), b: new Array(10) };
// Shuffle pieces on first and second rank
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = JSON.parse(JSON.stringify(pieces['w'])).reverse();
pieces['b'] =
pieces['b'].splice(5,10).reverse().concat(
);
}
+ // TODO: simplify this when base function is more general.
getPotentialPawnMoves([x, y]) {
// Normal moves (as a rook)
let moves =
isAttackedByPawn([x, y], color) {
// Pawns can capture forward and backward:
- for (let pawnShift of [-1, 1]) {
- if (0 < x + pawnShift && x + pawnShift < V.size.x) {
- for (let i of [-1, 1]) {
- if (
- y + i >= 0 &&
- y + i < V.size.y &&
- this.getPiece(x + pawnShift, y + i) == V.PAWN &&
- this.getColor(x + pawnShift, y + i) == color
- ) {
- return true;
- }
- }
- }
- }
- return false;
+ return this.isAttackedBySlideNJump(
+ sq, color, V.PAWN, V.steps[V.BISHOP], 1);
}
isAttackedByKnight(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.KNIGHT,
- V.steps[V.KNIGHT]
- );
+ sq, color, V.KNIGHT, V.steps[V.KNIGHT]);
}
getCurrentScore() {
export class RugbyRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
this.turn == 'w'
? [ [-1,-1], [-1,1], [0,1], [0,-1], [1,-1], [1,0], [1,1] ]
: [ [1,-1], [1,1], [0,1], [0,-1], [-1,-1], [-1,0], [-1,1] ];
- let addMoves = this.getSlideNJumpMoves(sq, steps, "oneStep");
+ let addMoves = this.getSlideNJumpMoves(sq, steps, 1);
return moves.concat(addMoves.filter(m => m.vanish.length == 1));
}
);
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
return (
- ChessRules.GenRandInitFen(randomness).slice(0, -2) +
+ ChessRules.GenRandInitFen(options).slice(0, -2) +
// Add pieceFlags + pocket
"1111111111111111 - 1111"
);
getPotentialHawkMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialElephantMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
isAttackedByHawk(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.HAWK, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.HAWK,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.HAWK, V.steps[V.KNIGHT], 1)
);
}
isAttackedByElephant(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.ELEPHANT, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.ELEPHANT,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.ELEPHANT, V.steps[V.KNIGHT], 1)
);
}
static get VALUES() {
return Object.assign(
- {},
- ChessRules.VALUES,
- { 'h': 5, 'e': 7 }
+ {
+ 'h': 5,
+ 'e': 7
+ },
+ ChessRules.VALUES
);
}
export class ScreenRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
}
getPotentialElephantMoves([x, y]) {
- return this.getSlideNJumpMoves([x, y], V.steps[V.ELEPHANT], "oneStep");
+ return this.getSlideNJumpMoves([x, y], V.steps[V.ELEPHANT], 1);
}
getPotentialCannonMoves([x, y]) {
isAttackedByElephant(sq, color) {
return (
this.isAttackedBySlideNJump(
- sq, color, V.ELEPHANT, V.steps[V.ELEPHANT], "oneStep"
+ sq, color, V.ELEPHANT, V.steps[V.ELEPHANT], 1
)
);
}
return 2;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"c8c/ernbqkbnre/pppppppppp/91/91/91/91/PPPPPPPPPP/ERNBQKBNRE/C8C " +
"w 0 bibi -"
let flags = "";
// Shuffle pieces on second (and before-last rank if randomness == 2)
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
];
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Remove castle flags and en-passant indication
- return ChessRules.GenRandInitFen(randomness).slice(0, -7);
+ return ChessRules.GenRandInitFen(options).slice(0, -7);
}
getPotentialBishopMoves(sq) {
- let moves = this.getSlideNJumpMoves(sq, V.ElephantSteps, "oneStep");
+ let moves = this.getSlideNJumpMoves(sq, V.ElephantSteps, 1);
// Complete with "repositioning moves": like a queen, without capture
- let repositioningMoves = this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP],
- "oneStep"
- ).filter(m => m.vanish.length == 1);
+ let repositioningMoves =
+ this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1)
+ .filter(m => m.vanish.length == 1);
return moves.concat(repositioningMoves);
}
getPotentialQueenMoves(sq) {
// Diagonal capturing moves
- let captures = this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP],
- "oneStep"
- ).filter(m => m.vanish.length == 2);
+ let captures =
+ this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1)
+ .filter(m => m.vanish.length == 2);
return captures.concat(
// Orthogonal non-capturing moves
- this.getSlideNJumpMoves(
- sq,
- V.steps[V.ROOK],
- "oneStep"
- ).filter(m => m.vanish.length == 1)
+ this.getSlideNJumpMoves(sq, V.steps[V.ROOK], 1)
+ .filter(m => m.vanish.length == 1)
);
}
isAttackedByBishop(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.BISHOP,
- V.ElephantSteps,
- "oneStep"
- );
+ sq, color, V.BISHOP, V.ElephantSteps, 1);
}
isAttackedByQueen(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.QUEEN,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ sq, color, V.QUEEN, V.steps[V.BISHOP], 1);
}
getCurrentScore() {
if (this.getColor(x, y) == 'b') return super.getPotentialKingMoves([x, y]);
// Clan doesn't castle:
return super.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialCaptainMoves(sq) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialNinjaMoves(sq) {
return (
super.getSlideNJumpMoves(sq, V.steps[V.BISHOP])
- .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep"))
+ .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1))
);
}
getPotentialDragonMoves(sq) {
return (
super.getSlideNJumpMoves(sq, V.steps[V.ROOK])
- .concat(super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep"))
+ .concat(super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1))
);
}
getPotentialMonkMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
getPotentialHorseMoves(sq) {
- return super.getSlideNJumpMoves(sq, [ [-2, 1], [-2, -1] ], "oneStep");
+ return super.getSlideNJumpMoves(sq, [ [-2, 1], [-2, -1] ], 1);
}
getPotentialLanceMoves(sq) {
isAttackedByCaptain(sq, color) {
const steps = V.steps[V.BISHOP].concat(V.steps[V.ROOK]);
return (
- super.isAttackedBySlideNJump(sq, color, V.CAPTAIN, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.CAPTAIN, steps, 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.NINJA, V.steps[V.BISHOP]) ||
super.isAttackedBySlideNJump(
- sq, color, V.NINJA, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.NINJA, V.steps[V.KNIGHT], 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.DRAGON, V.steps[V.ROOK]) ||
super.isAttackedBySlideNJump(
- sq, color, V.DRAGON, V.steps[V.BISHOP], "oneStep")
+ sq, color, V.DRAGON, V.steps[V.BISHOP], 1)
);
}
isAttackedByMonk(sq, color) {
return (
super.isAttackedBySlideNJump(
- sq, color, V.MONK, V.steps[V.BISHOP], "oneStep")
+ sq, color, V.MONK, V.steps[V.BISHOP], 1)
);
}
isAttackedByHorse(sq, color) {
return (
super.isAttackedBySlideNJump(
- sq, color, V.HORSE, [ [2, 1], [2, -1] ], "oneStep")
+ sq, color, V.HORSE, [ [2, 1], [2, -1] ], 1)
);
}
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL " +
"w 0 00000000000000"
let pieces1 = { w: new Array(4), b: new Array(4) };
let positions2 = { w: new Array(2), b: new Array(2) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces1['b'] = JSON.parse(JSON.stringify(pieces1['w'])).reverse();
positions2['b'] =
JSON.parse(JSON.stringify(positions2['w'])).reverse()
const forward = (this.turn == 'w' ? -1 : 1);
return this.getSlideNJumpMoves(
sq,
- [[forward, 0]],
+ [ [forward, 0] ],
{
promote: V.P_LANCE,
force: true
isAttackedBySilver([x, y], color) {
const shift = (color == 'w' ? 1 : -1);
- for (let step of V.steps[V.BISHOP].concat([[shift, 0]])) {
- const [i, j] = [x + step[0], y + step[1]];
- if (
- V.OnBoard(i, j) &&
- this.board[i][j] != V.EMPTY &&
- this.getColor(i, j) == color &&
- this.getPiece(i, j) == V.SILVER_G
- ) {
- return true;
- }
- }
- return false;
+ return this.isAttackedBySlideNJump(
+ sq, color, V.SILVER, V.steps[V.BISHOP].concat([ [shift, 0] ]), 1);
}
isAttackedByPawn([x, y], color) {
const shift = (color == 'w' ? 1 : -1);
- const [i, j] = [x + shift, y];
- return (
- V.OnBoard(i, j) &&
- this.board[i][j] != V.EMPTY &&
- this.getColor(i, j) == color &&
- this.getPiece(i, j) == V.PAWN
- );
+ return this.isAttackedBySlideNJump(sq, color, V.PAWN, [ [shift, 0] ], 1);
}
isAttackedByKnight(sq, color) {
const forward = (color == 'w' ? 2 : -2);
return this.isAttackedBySlideNJump(
- sq, color, V.KNIGHT, [[forward, 1], [forward, -1]], "oneStep");
+ sq, color, V.KNIGHT, [ [forward, 1], [forward, -1] ], 1);
}
isAttackedByLance(sq, color) {
isAttackedByDragon(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.P_ROOK, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.P_ROOK, V.steps[V.BISHOP], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.P_ROOK, V.steps[V.BISHOP], 1)
);
}
isAttackedByHorse(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.P_BISHOP, V.steps[V.BISHOP]) ||
- this.isAttackedBySlideNJump(
- sq, color, V.P_BISHOP, V.steps[V.ROOK], "oneStep")
+ this.isAttackedBySlideNJump(sq, color, V.P_BISHOP, V.steps[V.ROOK], 1)
);
}
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness) + " 0000000000";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options) + " 0000000000";
}
getFen() {
}
getPotentialDuchessMoves(sq) {
- return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], "oneStep");
+ return super.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
getPotentialCaptainMoves(sq) {
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialMortarMoves(sq) {
return (
super.getSlideNJumpMoves(sq, V.steps[V.ROOK])
- .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep"))
+ .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1))
);
}
getPotentialGeneralMoves(sq) {
const steps =
V.steps[V.BISHOP].concat(V.steps[V.ROOK]).concat(V.steps[V.KNIGHT]);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialArchbishopMoves(sq) {
return (
super.getSlideNJumpMoves(sq, V.steps[V.BISHOP])
- .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep"))
+ .concat(super.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1))
);
}
isAttackedByDuchess(sq, color) {
return (
super.isAttackedBySlideNJump(
- sq, color, V.DUCHESS, V.steps[V.BISHOP], "oneStep")
+ sq, color, V.DUCHESS, V.steps[V.BISHOP], 1)
);
}
isAttackedByCaptain(sq, color) {
const steps = V.steps[V.BISHOP].concat(V.steps[V.ROOK]);
return (
- super.isAttackedBySlideNJump(sq, color, V.DUCHESS, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.DUCHESS, steps, 1)
);
}
return (
super.isAttackedBySlideNJump(sq, color, V.MORTAR, V.steps[V.ROOK]) ||
super.isAttackedBySlideNJump(
- sq, color, V.MORTAR, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.MORTAR, V.steps[V.KNIGHT], 1)
);
}
const steps =
V.steps[V.BISHOP].concat(V.steps[V.ROOK]).concat(V.steps[V.KNIGHT]);
return (
- super.isAttackedBySlideNJump(sq, color, V.GENERAL, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, color, V.GENERAL, steps, 1)
);
}
super.isAttackedBySlideNJump(sq, color, V.ARCHBISHOP, V.steps[V.BISHOP])
||
super.isAttackedBySlideNJump(
- sq, color, V.ARCHBISHOP, V.steps[V.KNIGHT], "oneStep")
+ sq, color, V.ARCHBISHOP, V.steps[V.KNIGHT], 1)
);
}
export class SittuyinRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
getPotentialBishopMoves(sq) {
const forward = (this.turn == 'w' ? -1 : 1);
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP].concat([ [forward, 0] ]),
- "oneStep"
- );
+ sq, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
}
getPotentialQueenMoves(sq) {
- return this.getSlideNJumpMoves(
- sq,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP], 1);
}
getAllValidMoves() {
isAttackedByBishop(sq, color) {
const forward = (this.turn == 'w' ? 1 : -1);
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.BISHOP,
- V.steps[V.BISHOP].concat([ [forward, 0] ]),
- "oneStep"
- );
+ sq, color, V.BISHOP, V.steps[V.BISHOP].concat([ [forward, 0] ]), 1);
}
isAttackedByQueen(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.QUEEN,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ sq, color, V.QUEEN, V.steps[V.BISHOP], 1);
}
underCheck(color) {
return b;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "lgkcckwl/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 ah";
// Mapping white --> black (first knight --> general; TODO):
'g': 'g'
};
- const baseFen = ChessRules.GenRandInitFen(randomness).replace('n', 'g');
+ const baseFen = ChessRules.GenRandInitFen(options).replace('n', 'g');
return (
baseFen.substr(0, 8).split('').map(p => piecesMap[p]).join('') +
baseFen.substr(8)
getPotentialSpartanKingMoves(sq) {
// No castle:
const steps = V.steps[V.ROOK].concat(V.steps[V.BISHOP]);
- return super.getSlideNJumpMoves(sq, steps, "oneStep");
+ return super.getSlideNJumpMoves(sq, steps, 1);
}
getPotentialHopliteMoves([x, y]) {
const steps = V.steps[V.BISHOP].concat(V.steps['a']);
Array.prototype.push.apply(
moves,
- super.getSlideNJumpMoves([x, y], steps, "oneStep")
+ super.getSlideNJumpMoves([x, y], steps, 1)
);
return moves;
}
getPotentialCaptainMoves([x, y]) {
const steps = V.steps[V.ROOK].concat(V.steps['d']);
- return super.getSlideNJumpMoves([x, y], steps, "oneStep")
+ return super.getSlideNJumpMoves([x, y], steps, 1)
}
getPotentialGeneralMoves([x, y]) {
return (
- super.getSlideNJumpMoves([x, y], V.steps[V.BISHOP], "oneStep")
+ super.getSlideNJumpMoves([x, y], V.steps[V.BISHOP], 1)
.concat(super.getSlideNJumpMoves([x, y], V.steps[V.ROOK]))
);
}
getPotentialWarlordMoves([x, y]) {
return (
- super.getSlideNJumpMoves([x, y], V.steps[V.KNIGHT], "oneStep")
+ super.getSlideNJumpMoves([x, y], V.steps[V.KNIGHT], 1)
.concat(super.getSlideNJumpMoves([x, y], V.steps[V.BISHOP]))
);
}
}
isAttackedByHoplite(sq) {
- return super.isAttackedBySlideNJump(sq, 'b', V.PAWN, [[-1,0]], "oneStep");
+ return super.isAttackedBySlideNJump(sq, 'b', V.PAWN, [[-1,0]], 1);
}
isAttackedByLieutenant(sq) {
const steps = V.steps[V.BISHOP].concat(V.steps['a']);
return (
- super.isAttackedBySlideNJump(sq, 'b', V.LIEUTENANT, steps, "oneStep")
+ super.isAttackedBySlideNJump(sq, 'b', V.LIEUTENANT, steps, 1)
);
}
isAttackedByCaptain(sq) {
const steps = V.steps[V.ROOK].concat(V.steps['d']);
- return super.isAttackedBySlideNJump(sq, 'b', V.CAPTAIN, steps, "oneStep");
+ return super.isAttackedBySlideNJump(sq, 'b', V.CAPTAIN, steps, 1);
}
isAttackedByGeneral(sq) {
return (
super.isAttackedBySlideNJump(
- sq, 'b', V.GENERAL, V.steps[V.BISHOP], "oneStep") ||
+ sq, 'b', V.GENERAL, V.steps[V.BISHOP], 1) ||
super.isAttackedBySlideNJump(sq, 'b', V.GENERAL, V.steps[V.ROOK])
);
}
isAttackedByWarlord(sq) {
return (
super.isAttackedBySlideNJump(
- sq, 'b', V.WARLORD, V.steps[V.KNIGHT], "oneStep") ||
+ sq, 'b', V.WARLORD, V.steps[V.KNIGHT], 1) ||
super.isAttackedBySlideNJump(sq, 'b', V.WARLORD, V.steps[V.BISHOP])
);
}
return "1/2";
}
- static GenRandInitFen(randomness) {
- return SuicideRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ return SuicideRules.GenRandInitFen(options);
}
};
t: "q",
u: "r",
c: "b",
- o: "n",
- l: "k"
+ o: "n"
};
}
static get BOMB_CODE() {
q: "t",
r: "u",
b: "c",
- n: "o",
- k: "l"
+ n: "o"
};
}
);
}
- // Initiate the game by choosing a square for the bomb:
+ // Initiate the game by choosing a piece holding the bomb:
doClick(square) {
const c = this.turn;
if (
}
const [x, y] = square;
const piece = super.getPiece(x, y);
+ if (piece == V.KING) return null; //no bomb on king!
return new Move({
appear: [ new PiPo({ x: x, y: y, c: c, p: V.BOMB_CODE[piece] }) ],
vanish: [ new PiPo({ x: x, y: y, c: c, p: piece }) ],
export class Stealthbomb2Rules extends Stealthbomb1Rules {
- // Initiate the game by choosing a square for the bomb:
+ // Initiate the game by choosing a pawn holding the bomb:
doClick(square) {
const c = this.turn;
if (
});
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add empty cmove:
- return SuicideRules.GenRandInitFen(randomness) + " -";
+ return SuicideRules.GenRandInitFen(options) + " -";
}
getCmoveFen() {
return -super.evalPosition();
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w 0 -";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
});
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add empty smove:
- return ChessRules.GenRandInitFen(randomness) + " -";
+ return ChessRules.GenRandInitFen(options) + " -";
}
getSmoveFen() {
);
}
- static GenRandInitFen(randomness) {
- return ChessRules.GenRandInitFen(randomness).slice(0, -1) + "-,- -";
+ static GenRandInitFen(options) {
+ return ChessRules.GenRandInitFen(options).slice(0, -1) + "-,- -";
}
getFen() {
);
}
- static GenRandInitFen(randomness) {
- const res = ChessRules.GenRandInitFen(randomness);
+ static GenRandInitFen(options) {
+ const res = ChessRules.GenRandInitFen(options);
// Add initFen field:
return res.slice(0, -1) + res.split(' ')[0] + " -";
}
export class SynochessRules extends ChessRules {
+ static get Options() {
+ return {
+ check: [
+ {
+ label: "Random",
+ defaut: false,
+ variable: "random"
+ }
+ ]
+ };
+ }
+
static get LoseOnRepetition() {
return true;
}
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (!options.random)
return "rneakenr/8/1c4c1/1ss2ss1/8/8/PPPPPPPP/RNBQKBNR w 0 ah - 2";
// Mapping kingdom --> dynasty:
};
// Always symmetric (randomness = 1), because open files.
- const baseFen = ChessRules.GenRandInitFen(1);
+ const baseFen = ChessRules.GenRandInitFen({ randomness: 1 });
return (
baseFen.substr(0, 8).split("").map(p => piecesMap[p]).join("") +
"/8/1c4c1/1ss2ss1/" + baseFen.substr(22, 28) + " - 2"
getPotentialAdvisorMoves(sq) {
return super.getSlideNJumpMoves(
- sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep");
+ sq, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialKingMoves([x, y]) {
if (this.getColor(x, y) == 'w') return super.getPotentialKingMoves([x, y]);
// Dynasty doesn't castle:
return super.getSlideNJumpMoves(
- [x, y],
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
- "oneStep"
- );
+ [x, y], V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
getPotentialSoldierMoves([x, y]) {
if (!lastRank) steps.push([shiftX, 0]);
if (y > 0) steps.push([0, -1]);
if (y < 9) steps.push([0, 1]);
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
getPotentialElephantMoves([x, y]) {
- return this.getSlideNJumpMoves([x, y], V.steps[V.ELEPHANT], "oneStep");
+ return this.getSlideNJumpMoves([x, y], V.steps[V.ELEPHANT], 1);
}
// NOTE: (mostly) duplicated from Shako (TODO?)
}
isAttackedByAdvisor(sq, color) {
- return (
- super.isAttackedBySlideNJump(
- sq, color, V.ADVISOR,
- V.steps[V.ROOK].concat(V.steps[V.BISHOP]), "oneStep"
- )
- );
+ return super.isAttackedBySlideNJump(
+ sq, color, V.ADVISOR, V.steps[V.ROOK].concat(V.steps[V.BISHOP]), 1);
}
isAttackedByElephant(sq, color) {
- return (
- this.isAttackedBySlideNJump(
- sq, color, V.ELEPHANT, V.steps[V.ELEPHANT], "oneStep"
- )
- );
+ return this.isAttackedBySlideNJump(
+ sq, color, V.ELEPHANT, V.steps[V.ELEPHANT], 1);
}
isAttackedBySoldier([x, y], color) {
const shiftX = (color == 'w' ? 1 : -1); //shift from king
return super.isAttackedBySlideNJump(
- [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], "oneStep");
+ [x, y], color, V.SOLDIER, [[shiftX, 0], [0, 1], [0, -1]], 1);
}
getAllValidMoves() {
static get steps() {
return Object.assign(
- {},
- ChessRules.steps,
{
w: [
[-3, -1],
[2, 0],
[0, 2]
]
- }
+ },
+ ChessRules.steps,
);
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"2cwamwc2/1rnbqkbnr1/pppppppppp/91/91/" +
"91/91/PPPPPPPPPP/1RNBQKBNR1/2CWAMWC2/ " +
);
}
- const baseFen = V.ParseFen(ChessRules.GenRandInitFen(randomness));
+ const baseFen = V.ParseFen(ChessRules.GenRandInitFen(options));
const positionParts = baseFen.position.split("/");
const bFen = (
"1" + positionParts[0] +
getPotentialMarshallMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.ROOK]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialArchbishopMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.BISHOP]).concat(
- this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], "oneStep")
+ this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT], 1)
);
}
getPotentialChampionMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.CHAMPION], 1);
}
getPotentialWizardMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.WIZARD], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.WIZARD], 1);
}
isAttacked(sq, color) {
isAttackedByMarshall(sq, color) {
return (
this.isAttackedBySlideNJump(sq, color, V.MARSHALL, V.steps[V.ROOK]) ||
- this.isAttackedBySlideNJump(
- sq,
- color,
- V.MARSHALL,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ this.isAttackedBySlideNJump(sq, color, V.MARSHALL, V.steps[V.KNIGHT], 1)
);
}
isAttackedByArchbishop(sq, color) {
return (
- this.isAttackedBySlideNJump(sq, color, V.ARCHBISHOP, V.steps[V.BISHOP]) ||
this.isAttackedBySlideNJump(
- sq,
- color,
- V.ARCHBISHOP,
- V.steps[V.KNIGHT],
- "oneStep"
- )
+ sq, color, V.ARCHBISHOP, V.steps[V.BISHOP])
+ ||
+ this.isAttackedBySlideNJump(
+ sq, color, V.ARCHBISHOP, V.steps[V.KNIGHT], 1)
);
}
isAttackedByWizard(sq, color) {
- return (
- this.isAttackedBySlideNJump(
- sq, color, V.WIZARD, V.steps[V.WIZARD], "oneStep")
- );
+ return this.isAttackedBySlideNJump(
+ sq, color, V.WIZARD, V.steps[V.WIZARD], 1);
}
isAttackedByChampion(sq, color) {
- return (
- this.isAttackedBySlideNJump(
- sq, color, V.CHAMPION, V.steps[V.CHAMPION], "oneStep")
- );
+ return this.isAttackedBySlideNJump(
+ sq, color, V.CHAMPION, V.steps[V.CHAMPION], 1);
}
static get SEARCH_DEPTH() {
static get VALUES() {
return Object.assign(
- {},
- ChessRules.VALUES,
- { c: 4, w: 3, a: 6, m: 8 }
+ {
+ c: 4,
+ w: 3,
+ a: 6,
+ m: 8
+ },
+ ChessRules.VALUES
);
}
return super.getCurrentScore();
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen(options) {
// Add check flags (at 0)
- return ChessRules.GenRandInitFen(randomness).slice(0, -2) + "00";
+ return ChessRules.GenRandInitFen(options).slice(0, -2) + "00";
}
getFlagsFen() {
const [x, y] = [square[0], square[1]];
if ((color == 'w' && x != 7) || (color == 'b' && x != 0)) return null;
const selectedPiece = this.board[x][y][1];
+ // Prevent re-augmenting a chosen piece:
+ if (!ChessRules.PIECES.includes(selectedPiece)) return null;
return new Move({
appear: [
new PiPo({
return squares;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "rnqkkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNQKKBNR w 0 adehadeh -";
const replaceBishop = (fen, first, ch1, ch2) => {
};
const fen =
- CoregalRules.GenRandInitFen(randomness)
+ CoregalRules.GenRandInitFen(options)
.replace("q", "k").replace("Q", "K");
// Now replace a bishop by the queen,
// so that bishops are of different colors:
return false;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "RNBQKBNR/PPPPPPPP/8/8/8/8/pppppppp/rnbqkbnr w 0";
let pieces = { w: new Array(8), b: new Array(8) };
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
break;
}
isAttackedByPawn(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.PAWN,
- V.steps[V.BISHOP],
- "oneStep"
- );
+ sq, color, V.PAWN, V.steps[V.BISHOP], 1);
}
getNotation(move) {
}
getPotentialCamelMoves(sq) {
- return this.getSlideNJumpMoves(sq, V.steps[V.CAMEL], "oneStep");
+ return this.getSlideNJumpMoves(sq, V.steps[V.CAMEL], 1);
}
getPotentialWildebeestMoves(sq) {
return this.getSlideNJumpMoves(
- sq,
- V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]),
- "oneStep"
- );
+ sq, V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]), 1);
}
getPPpath(m) {
isAttackedByCamel(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.CAMEL,
- V.steps[V.CAMEL],
- "oneStep"
- );
+ sq, color, V.CAMEL, V.steps[V.CAMEL], 1);
}
isAttackedByWildebeest(sq, color) {
return this.isAttackedBySlideNJump(
- sq,
- color,
- V.WILDEBEEST,
- V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]),
- "oneStep"
- );
+ sq, color, V.WILDEBEEST, V.steps[V.KNIGHT].concat(V.steps[V.CAMEL]), 1);
}
getCurrentScore() {
return 2;
}
- static GenRandInitFen(randomness) {
- if (randomness == 0) {
+ static GenRandInitFen(options) {
+ if (options.randomness == 0) {
return (
"rnccwkqbbnr/ppppppppppp/92/92/92/92/92/92/PPPPPPPPPPP/RNBBQKWCCNR " +
"w 0 akak -"
let pieces = { w: new Array(11), b: new Array(11) };
let flags = "";
for (let c of ["w", "b"]) {
- if (c == 'b' && randomness == 1) {
+ if (c == 'b' && options.randomness == 1) {
pieces['b'] = pieces['w'];
flags += flags;
break;
};
}
- static GenRandInitFen(randomness) {
- if (randomness == 0)
+ static GenRandInitFen(options) {
+ if (options.randomness == 0)
return "cnwmkwnc/pppppppp/8/8/8/8/PPPPPPPP/CNWMKWNC w 0";
// Mapping new --> standard:
'k': 'k'
};
- const baseFen = ChessRules.GenRandInitFen(randomness);
+ const baseFen = ChessRules.GenRandInitFen(options);
return (
baseFen.substr(0, 8).split('').map(p => piecesMap[p]).join('') +
baseFen.substr(8, 27) +
export class XiangqiRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
// NOTE (TODO?) scanKings() could be more efficient (in Jangqi too)
static get Monochrome() {
if (y > 0) steps.push([0, -1]);
if (y < 9) steps.push([0, 1]);
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
knightStepsFromRookStep(step) {
this.knightStepsFromRookStep(rookStep));
}
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
getPotentialElephantMoves([x, y]) {
// "out of board" checks delayed to next method
}
}
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
getPotentialAdvisorMoves([x, y]) {
if (y == 3) step = [-direction, 1];
else step = [-direction, -1];
}
- return super.getSlideNJumpMoves([x, y], [step], "oneStep");
+ return super.getSlideNJumpMoves([x, y], [step], 1);
}
// In the middle of the palace:
return (
- super.getSlideNJumpMoves([x, y], ChessRules.steps[V.BISHOP], "oneStep")
+ super.getSlideNJumpMoves([x, y], ChessRules.steps[V.BISHOP], 1)
);
}
if (x > (c == 'w' ? V.size.x - 3 : 0)) steps.push([-1, 0]);
if (y > 3) steps.push([0, -1]);
if (y < 5) steps.push([0, 1]);
- return super.getSlideNJumpMoves([x, y], steps, "oneStep");
+ return super.getSlideNJumpMoves([x, y], steps, 1);
}
// In the middle of the palace:
return (
- super.getSlideNJumpMoves([x, y], ChessRules.steps[V.ROOK], "oneStep")
+ super.getSlideNJumpMoves([x, y], ChessRules.steps[V.ROOK], 1)
);
}
// The pawn necessarily crossed the river (attack on king)
const shiftX = (color == 'w' ? 1 : -1); //shift from king
return super.isAttackedBySlideNJump(
- [x, y], color, V.PAWN, [[shiftX, 0], [0, 1], [0, -1]], "oneStep");
+ [x, y], color, V.PAWN, [[shiftX, 0], [0, 1], [0, -1]], 1);
}
knightStepsFromBishopStep(step) {
}
}
return (
- super.isAttackedBySlideNJump([x, y], color, V.KNIGHT, steps, "oneStep")
+ super.isAttackedBySlideNJump([x, y], color, V.KNIGHT, steps, 1)
);
}
export class YoteRules extends ChessRules {
+ static get Options() {
+ return null;
+ }
+
static get HasFlags() {
return false;
}
);
}
- static GenRandInitFen(randomness) {
+ static GenRandInitFen() {
return "6/6/6/6/6 w 0 12,12 -,-";
}
return undefined;
}
- // TODO(?): some duplicated code in 2 next functions
- getSlideNJumpMoves([x, y], steps, oneStep) {
- let moves = [];
- outerLoop: for (let loop = 0; loop < steps.length; loop++) {
- const step = steps[loop];
- let i = x + step[0];
- let j = y + step[1];
- while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
- moves.push(this.getBasicMove([x, y], [i, j]));
- if (oneStep) continue outerLoop;
- i += step[0];
- j += step[1];
- }
- // No capture check: handled elsewhere (next method)
- }
- return moves;
- }
-
// follow steps from x,y until something is met.
// if met piece is opponent and same movement (asA): eat it!
findCaptures_aux([x, y], asA) {
return moves;
}
- canTake(sq1, sq2) {
+ canTake() {
return false; //captures handled separately
}
)
);
},
+ requestLastate: function(sid) {
+ // TODO: maybe also find opponent SID ?
+ //const oppSid =
+ // this.game.players.find(p => p.sid != this.st.user.sid).sid;
+ this.send("asklastate", { target: sid });
+ let counter = 1;
+ this.askLastate = setInterval(
+ () => {
+ // Ask at most 3 times:
+ // if no reply after that there should be a network issue.
+ if (
+ counter < 3 &&
+ !this.gotLastate &&
+ !!this.people[sid]
+ ) {
+ this.send("asklastate", { target: sid });
+ counter++;
+ }
+ else clearInterval(this.askLastate);
+ },
+ 1500
+ );
+ },
atCreation: function() {
document.addEventListener('visibilitychange', this.visibilityChange);
window.addEventListener('focus', this.onFocus);
"message", this.socketMessageListener);
this.conn = new WebSocket(this.connexionString);
this.conn.addEventListener("message", this.socketMessageListener);
+ const oppSid = this.getOppsid();
+ if (!!oppSid) this.requestLaststate(oppSid); //in case of
}
},
1000
this.game.type == "live" &&
this.game.players.some(p => p.sid == user.sid)
) {
- this.send("asklastate", { target: user.sid });
- let counter = 1;
- this.askLastate = setInterval(
- () => {
- // Ask at most 3 times:
- // if no reply after that there should be a network issue.
- if (
- counter < 3 &&
- !this.gotLastate &&
- !!this.people[user.sid]
- ) {
- this.send("asklastate", { target: user.sid });
- counter++;
- }
- else clearInterval(this.askLastate);
- },
- 1500
- );
+ this.requestLaststate(user.sid);
}
break;
}
)
| {{ v.display }}
// Variant-specific options (often at least randomness)
- fieldset(v-if="!!newchallenge.V")
- div(v-for="select of newchallenge.V.Options.select")
+ fieldset(v-if="!!newchallenge.V && newchallenge.V.Options")
+ div(v-for="select of newchallenge.V.Options.select || []")
label(:for="select.variable + '_opt'") {{ st.tr[select.label] }} *
select(:id="select.variable + '_opt'")
option(
:selected="o.value == select.defaut"
)
| {{ st.tr[o.label] }}
- div(v-for="check of newchallenge.V.Options.check")
+ div(v-for="check of newchallenge.V.Options.check || []")
label(:for="check.variable + '_opt'") {{ st.tr[check.label] }} *
input(
:id="check.variable + '_opt'"
}
},
created: function() {
- // TODO: remove this patch soon:
- this.presetChalls.forEach(pc => {
- if (!pc.options) pc.options = { randomness: pc.randomness };
- });
document.addEventListener('visibilitychange', this.visibilityChange);
window.addEventListener('focus', this.onFocus);
window.addEventListener('blur', this.onBlur);
this.conn = null;
},
getRandomnessClass: function(pc) {
- if (
- // TODO: one extra test here
- !Number.isInteger(pc.options.randomness) &&
- !parseInt(pc.options.randomness, 10)
- ) {
+ const opts = pc.options;
+ if (opts.randomness === undefined && opts.random === undefined)
return {};
- }
- return {
- ["random-" + pc.options.randomness]: true
- };
+ if (opts.randomness !== undefined)
+ return { ["random-" + opts.randomness]: true };
+ return { ["random-" + (opts.random ? 2 : 0)]: true };
},
anonymousCount: function() {
let count = 0;
error = this.st.tr["Wrong color"];
}
}
- if (!!error) {
- alert(error);
- return;
- }
- window.V = this.newchallenge.V;
- error = checkChallenge(this.newchallenge);
if (error) {
alert(error);
return;
}
- // NOTE: "from" information is not required here
- let chall = Object.assign({}, this.newchallenge);
- chall.options = {};
+ window.V = this.newchallenge.V;
+ let chall = Object.assign({ options: {} }, this.newchallenge);
// Get/set options variables (if any) / TODO: v-model?!
- for (const check of this.newchallenge.V.Options.check) {
+ for (const check of this.newchallenge.V.Options.check || []) {
const elt = document.getElementById(check.variable + "_opt");
if (elt.checked) chall.options[check.variable] = true;
}
- for (const select of this.newchallenge.V.Options.select) {
+ for (const select of this.newchallenge.V.Options.select || []) {
const elt = document.getElementById(select.variable + "_opt");
- chall.options[select.variable] = elt.value;
+ chall.options[select.variable] = parseInt(elt.value, 10) || elt.value;
+ }
+ error = checkChallenge(chall);
+ if (error) {
+ alert(this.st.tr[error]);
+ return;
}
chall.options.abridged = V.AbbreviateOptions(chall.options);
// Add only if not already issued (not counting FEN):
+ // NOTE: "from" information is not required here
if (this.challenges.some(c =>
(
c.from.sid == this.st.user.sid ||
.card
label.modal-close(for="modalOptions")
h3 {{ st.tr["Options"] }}
- fieldset(v-if="!!V")
- div(v-for="select of V.Options.select")
- label(:for="select.variable + '_opt'") {{ st.tr[select.label] }} *
+ fieldset(v-if="!!V && V.Options")
+ div(v-for="select of V.Options.select || []")
+ label(:for="select.variable + '_opt'") {{ st.tr[select.label] }}
select(:id="select.variable + '_opt'")
option(
v-for="o of select.options"
:selected="o.value == select.defaut"
)
| {{ st.tr[o.label] }}
- div(v-for="check of V.Options.check")
- label(:for="check.variable + '_opt'") {{ st.tr[check.label] }} *
+ div(v-for="check of V.Options.check || []")
+ label(:for="check.variable + '_opt'") {{ st.tr[check.label] }}
input(
:id="check.variable + '_opt'"
type="checkbox"
setOptions: function() {
let options = {};
// Get/set options variables / TODO: v-model?!
- for (const check of this.V.Options.check) {
+ for (const check of this.V.Options.check || []) {
const elt = document.getElementById(check.variable + "_opt");
if (elt.checked) options[check.variable] = true;
}
- for (const select of this.V.Options.select) {
+ for (const select of this.V.Options.select || []) {
const elt = document.getElementById(select.variable + "_opt");
- options[select.variable] = elt.value;
+ options[select.variable] = parseInt(elt.value, 10) || elt.value;
+ }
+ if (!V.IsValidOptions(options)) {
+ alert(this.st.tr["Invalid options"]);
+ return;
}
document.getElementById("modalOptions").checked = false;
if (this.whatNext == "analyze") this.gotoAnalyze(options);
CompgameStorage.remove(game.vname);
game = null;
}
- if (!!game || Object.keys(V.Options).length == 0) next(game);
+ if (!!game || !V.Options) next(game);
else askOptions();
});
}
else {
- if (Object.keys(V.Options).length == 0) next();
+ if (!V.Options) next();
else askOptions();
}
},
CompgameStorage.remove(this.gameInfo.vname);
},
gotoAnalyze: function(options) {
- if (!options && Object.keys(V.Options).length > 0) {
+ if (!options && V.Options) {
this.whatNext = "analyze";
doClick("modalOptions");
}
h3 {{ st.tr["vt" + g] }}
p {{ st.tr["vg" + g] }}
ul
- li(v-for="v of variantGroup.get(g)")
+ li(v-for="v of sortVariants(variantGroup.get(g))")
a(:href="getLink(v)") {{ v.display }}
|  –
| {{ st.tr[v.description] }}
}
},
methods: {
+ sortVariants: function(group) {
+ return group.sort( (v1, v2) => v1.name.localeCompare(v2.name) );
+ },
// oninput listener, required for smartphones:
setCurPrefix: function(e) {
this.curPrefix = e.target.value;