-newmove received on mygames page should be added to storage if gtype == "live"
-and, on game page "mconnect" events => send newmove to them (better than current setup)
-also, mygames page should ask lastate infos to connected players if any (where it's not my turn)
-(maybe in component GameList, if g.type == "live" ...)
+# Functionality:
+On Game page "mconnect" events =>
+ send lastate to them (because they have the game infos) or just "your turn" - if their turn
+ remember them to send next "newmove" (or just "it's your turn") later - if not their turn
+ (=> listen for "mdisconnect" as well)
+From MyGames page: send "mconnect" to all online players (me included: potential multi-tabs)
+ When quit, send mdisconnect (relayed by server if no other MyGames tab).
+And remove current "notify through newmove" on server in sockets.js
+# Images:
Color black wildebeest and camels pieces in white instead of transparent.
+Color white grasshoppers as well. Adjust wormholes color and size.
+Better "Check3" king images: just horizontal red bars maybe (1 to 3).
+Center king image for Knightmate variant.
+# Misc:
Saw once a "double challenge" bug, one anonymous and a second one logged
Both were asked a challenge probably, and both challenges added as different ones.
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 50 50" version="1.1"><path d="M45.906 2.969c-.043.008-.086.02-.125.031A1.002 1.002 0 0 0 45 4c0 7.152-4.719 10.906-4.719 10.906l-.031.031c-.324.04-.64.102-.938.25-1 .399-2.32 1.102-3.718 2-.899.5-1.899 1.118-3 1.72 0 0-.094-.009-.094.093-.602.398-5.79 2.805-12.188 5.406.801.7 1.583 1.489 2.282 2.188 2 2.101 2.699 4.718 2 7.218-.801 2.602-2.989 4.68-5.688 5.282-.5.101-1.093.218-1.593.218-1.899 0-3.7-.82-5-2.218l-.626-.594c0 1-.374 2.293-.874 3.594.5.101.8.21 1 .312.398.102 1.976.594 4.374.594 4.102 0 7.72-1.988 10.72-4.688L26 30.5c-.102-.5.313-1.094.813-1.094.5-.101 1.093.282 1.093.782l.688 4.5a42.763 42.763 0 0 0 3.093-3.626l.782.657 3.125 6.812a.997.997 0 0 0 1.343.469s.395-.18.844-.25c.45-.07.735-.055.938.188a1.01 1.01 0 0 0 1.562-1.282c-.797-.957-2.011-1.035-2.812-.906-.25.04-.239.094-.438.156l-2.812-6.218a1.022 1.022 0 0 0-.282-.375l-1.062-.844a71.725 71.725 0 0 0 1.625-2.375c.898 2.601 1.906 4.218 3.406 4.218 1.899 0 7.407-3.511 7.407-8.812 0-1.86-.442-3.777-1.25-5.219 1.593-1.047 5.18-3.914 5.937-9.125a1.003 1.003 0 0 0-.277-.879 1.003 1.003 0 0 0-.88-.277.994.994 0 0 0-.843.844c-.703 4.836-4.125 7.23-5.188 7.875-.097-.082-.21-.149-.312-.219C44.07 13.805 47 9.883 47 4a1 1 0 0 0-1.094-1.031zm-41 12.094a2.935 2.935 0 0 0-1.593.53c-1.2.802-1.626 2.305-1.126 3.907L7 43.406c-1.398-.398-3.605-.511-6.406.688-.5.199-.7.812-.5 1.312.101.399.508.594.906.594.102 0 .3-.008.5.094 4-1.7 6.305-.196 6.406-.094.301.2.793.2 1.094 0 .3-.2.508-.602.406-1L8.5 40.687c0-.101.094-.085.094-.187 1.5-3.398 1.613-7.2 1.312-10 .399.5.696 1 1.094 1.5 1 1.3 1.813 2.492 2.813 3.594 1.199 1.3 2.886 1.804 4.687 1.406 1.898-.398 3.688-2.008 4.188-3.906.5-1.801 0-3.688-1.5-5.188-2.602-2.699-6.301-5.71-9.5-8.312-1.5-1.301-2.899-2.508-4-3.407-.875-.75-1.844-1.152-2.782-1.125zM40.5 21c.8 0 1.5.7 1.5 1.5s-.7 1.5-1.5 1.5-1.5-.7-1.5-1.5.7-1.5 1.5-1.5zm-38 10.313c-.602.199-1.21.398-1.813.5-.3 0-.488.292-.687.593-.102.301-.012.7.188 1 .101.102 1.406 1.696 3.406 3.094zm26.188 3.375c-.602.601-1.18 1.117-1.782 1.718l.282 1.907c0 .199.117.398.218.5l4.188 5c.3.398.82.48 1.218.28.301-.1 1.383-.491 1.782-.093.199.2.511.406.812.406.2 0 .492-.117.594-.218.398-.399.492-.977.094-1.376-.899-1.101-2.399-1.113-3.5-.812L29 37.812z" id="surface1"/><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description about="https://iconscout.com/legal#licenses" dc:title="grasshopper,filled" dc:description="grasshopper,filled" dc:publisher="Iconscout" dc:date="2017-12-07" dc:format="image/svg+xml" dc:language="en"><dc:creator><rdf:Bag><rdf:li>Icons8</rdf:li></rdf:Bag></dc:creator></rdf:Description></rdf:RDF></metadata></svg>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 50 50" version="1.1"><path d="M45.906 2.969c-.043.008-.086.02-.125.031A1.002 1.002 0 0 0 45 4c0 6.996-4.46 10.684-4.656 10.844a3.304 3.304 0 0 0-1.094.219.466.466 0 0 0-.063.03c-1.738.762-3.89 2.145-6.656 3.626-.043.02-.086.039-.125.062.059-.043-.59.348-1.437.75-.848.403-1.989.926-3.344 1.532a391.07 391.07 0 0 1-9.281 3.968c-3.73-3.3-8.149-6.738-10.594-8.875-.672-.582-1.441-.945-2.188-1.062a3.158 3.158 0 0 0-2.093.375c-1.203.703-1.707 2.304-1.219 3.937h-.031l.031.125L4.5 30.688c-1.04.328-2.527.812-3.688 1.03a1.01 1.01 0 0 0-.765.641c-.121.336-.055.711.172.985 0 0 2.445 3.058 5.718 4.5l1.125 5.593c-.214-.066-.156-.105-.406-.156-1.445-.285-3.539-.261-6.062.813a1.002 1.002 0 0 0-.254 1.789c.32.21.734.222 1.066.023 2.176-.926 3.797-.902 4.875-.687 1.078.215 1.532.593 1.532.593a1.001 1.001 0 0 0 1.563-1L8.499 40.5a.842.842 0 0 0 .094-.188c1.644-3.593 1.625-7.207 1.281-10.03 1.316 1.796 2.727 3.816 3.969 5.187h.031c1.07 1.16 2.48 1.668 3.813 1.593 1.332-.074 2.597-.671 3.562-1.562.965-.89 1.645-2.11 1.75-3.5.105-1.39-.422-2.895-1.688-4.188v-.03c-.417-.419-.878-.848-1.343-1.282a383.223 383.223 0 0 0 8.468-3.625c1.368-.61 2.536-1.148 3.407-1.563.808-.382 1.234-.582 1.625-.843l.125-.063c2.746-1.476 4.941-2.836 6.375-3.468.422-.165.699-.153 1.031 0 .332.152.691.488 1.031 1 .676 1.027 1.157 2.746 1.157 4.468 0 2.047-1.075 3.746-2.376 4.969a9.44 9.44 0 0 1-1.937 1.406c-.582.313-1.121.407-1.063.407-.042 0-.097.011-.25-.125-.152-.137-.347-.426-.562-.844-.434-.836-.902-2.16-1.344-3.782a1.002 1.002 0 0 0-1.812-.28c-.817 1.273-2.73 4.655-5.563 7.905L28 30.157a1 1 0 0 0-1.063-.875 1.008 1.008 0 0 0-.726.367c-.18.223-.254.508-.211.79l.531 3.468C23.621 36.734 20.074 39 16.094 39c-2.34 0-3.75-.531-3.75-.531a.994.994 0 0 0-1.024.14.995.995 0 0 0-.355.97 1 1 0 0 0 .691.765s1.778.656 4.438.656c4.218 0 7.855-2.07 10.812-4.688l.313 1.938a.997.997 0 0 0 .218.5l4.188 5a1 1 0 0 0 1.219.25s.394-.18.843-.25c.45-.07.735-.055.938.188.223.3.59.449.957.394a1.002 1.002 0 0 0 .574-1.676c-.797-.957-1.98-1.035-2.781-.906-.367.059-.41.129-.656.219l-3.563-4.282-.468-3.093c.199-.207.402-.414.593-.625a38.145 38.145 0 0 0 2.375-2.907l.813.657 3.125 6.812a.997.997 0 0 0 1.343.469s.395-.18.844-.25c.45-.07.735-.055.938.188a1.01 1.01 0 0 0 1.562-1.282c-.797-.957-2.011-1.035-2.812-.906-.25.04-.239.094-.438.156l-2.812-6.218a1.022 1.022 0 0 0-.282-.375l-1.093-.875a65 65 0 0 0 1.593-2.47c.25.743.485 1.618.782 2.188.285.547.59.996 1 1.375.41.38.988.657 1.593.657.711 0 1.258-.258 2-.657.743-.398 1.59-.949 2.376-1.687 1.574-1.477 3-3.684 3-6.438 0-1.86-.407-3.676-1.188-5.093 1.54-.989 5.227-3.836 6-9.157a1.003 1.003 0 0 0-.277-.879 1.003 1.003 0 0 0-.88-.277.994.994 0 0 0-.843.844c-.719 4.945-4.281 7.332-5.25 7.906-.086-.074-.16-.152-.25-.219C44.07 13.844 47 9.902 47 4a1 1 0 0 0-1.094-1.031zM4.844 17.063a1.26 1.26 0 0 1 .437 0c.332.054.73.226 1.157.593 2.542 2.227 6.984 5.684 10.625 8.907.003.003-.004.027 0 .03.113.31.37.544.687.626.004.004.027-.004.031 0 .746.676 1.461 1.336 2.094 1.968l.031.032c.907.941 1.153 1.828 1.094 2.625-.063.808-.48 1.59-1.125 2.187-.645.598-1.504.985-2.313 1.032-.808.046-1.539-.2-2.218-.938-1.801-1.988-3.328-4.594-6.375-8.25a1.002 1.002 0 0 0-1.215-.223 1.003 1.003 0 0 0-.504 1.13s1.21 4.75.406 9.437l-1-4.907-.031-.187a.879.879 0 0 0-.031-.094L4.187 19a1.169 1.169 0 0 0-.03-.125c-.34-1.023-.048-1.46.343-1.688.098-.058.215-.101.344-.125zM40.5 21a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zM4.906 32.656l.5 2.625c-1.004-.648-1.855-1.414-2.5-2.062.801-.23 1.383-.387 2-.563z" id="surface1"/><metadata><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http://purl.org/dc/elements/1.1/"><rdf:Description about="https://iconscout.com/legal#licenses" dc:title="grasshopper" dc:description="grasshopper" dc:publisher="Iconscout" dc:date="2017-12-07" dc:format="image/svg+xml" dc:language="en"><dc:creator><rdf:Bag><rdf:li>Icons8</rdf:li></rdf:Bag></dc:creator></rdf:Description></rdf:RDF></metadata></svg>
\ No newline at end of file
--- /dev/null
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+ <title>Layer 1</title>
+ <path id="svg_1" fill="#000" transform="translate(0,2048) scale(1,-1)" fill-rule="nonzero" d="m1024,205l-540,0q-40,100 -40,209q0,185 105,332t270,210q-71,33 -115,99t-45,151q0,105 70,182t172,89q-81,61 -81,161q0,84 59,144t145,60q84,0 144,-60t60,-144q0,-100 -81,-161q102,-12 172,-89t70,-182q0,-84 -45,-150t-116,-100q165,-63 270,-210t105,-332q0,-108 -39,-209l-540,0z"/>
+ <path d="m819,376c-1.10864,-2.65115 -1.43005,-3.20636 -1.81732,-3.81818c-0.43079,-0.68066 -0.92487,-1.41653 -1.48804,-2.2005c-0.60889,-0.8476 -1.27008,-1.75565 -2.86133,-3.64798c-0.87073,-1.03552 -1.84528,-2.10236 -2.89648,-3.24301c-1.13385,-1.23032 -2.37537,-2.5477 -3.71552,-3.98099c-1.45422,-1.5553 -3.04144,-3.23602 -6.55463,-7.10934c-1.97681,-2.17944 -4.06763,-4.53577 -6.26703,-7.047c-2.3103,-2.63788 -4.69867,-5.40512 -7.14899,-8.289c-2.52118,-2.96729 -5.09711,-6.00662 -10.25067,-12.33066c-2.61664,-3.21088 -5.22595,-6.49396 -7.86749,-9.84302c-2.69867,-3.42151 -5.44696,-6.94714 -8.27252,-10.58099c-2.91949,-3.75473 -5.93329,-7.65588 -12.35999,-15.90933c-3.41547,-4.38628 -6.95422,-8.9063 -10.56299,-13.5345c-3.65521,-4.68777 -7.31976,-9.39703 -10.94104,-14.1015c-3.57062,-4.63864 -7.07538,-9.15788 -13.49597,-17.864c-2.97205,-4.03 -5.71832,-7.89087 -8.29053,-11.57249c-2.44452,-3.49889 -4.73553,-6.86145 -6.91345,-10.08751c-2.09222,-3.09909 -4.07996,-6.11176 -7.96271,-11.84c-1.88171,-2.77608 -3.75427,-5.48759 -5.6145,-8.13901c-1.82922,-2.60718 -3.64941,-5.15764 -5.46149,-7.653c-1.78436,-2.45724 -3.54993,-4.87331 -7.09064,-9.54132c-1.73474,-2.28705 -3.47064,-4.52077 -5.1825,-6.7155c-1.68158,-2.1559 -3.3396,-4.2627 -4.95752,-6.32851c-1.58038,-2.01788 -3.13312,-3.97557 -6.02667,-7.78934c-1.37946,-1.81818 -2.68964,-3.59576 -3.92999,-5.33399c-1.19934,-1.68072 -2.33246,-3.32444 -3.39001,-4.938c-1.02209,-1.55947 -2.00916,-3.07068 -3.67999,-6.06133c-0.7948,-1.42258 -1.50128,-2.83826 -2.1615,-4.2285c-0.6449,-1.35799 -1.23981,-2.70664 -1.81049,-4.0395c-0.5636,-1.3162 -1.09601,-2.63194 -2.1947,-5.232c-0.5498,-1.30115 -1.11273,-2.59476 -1.68146,-3.8775c-0.56335,-1.27058 -1.12866,-2.51943 -1.69055,-3.7425c-0.54913,-1.19524 -1.08734,-2.35553 -2.12799,-4.54666c-0.48743,-1.02637 -0.95947,-2.00164 -1.401,-2.93401c-0.41974,-0.88636 -0.81396,-1.72973 -1.16699,-2.53799c-0.33398,-0.7646 -0.66193,-1.48513 -1.09863,-2.86134c-0.19977,-0.62952 -0.33636,-1.23968 -0.44702,-1.8195c-0.10492,-0.54971 -0.17834,-1.07628 -0.24902,-1.5765c-0.06726,-0.47612 -0.10406,-0.93633 -0.30396,-1.77066c-0.09442,-0.39422 -0.2287,-0.76503 -0.37201,-1.119c-0.13953,-0.34473 -0.2948,-0.67261 -0.44403,-0.993c-0.14545,-0.31228 -0.30652,-0.60992 -0.51733,-1.22134c-0.10205,-0.29589 -0.16907,-0.59618 -0.21899,-0.891c-0.04852,-0.28667 -0.07629,-0.56709 -0.09296,-0.837c-0.01587,-0.25748 -0.0202,-0.50133 -0.02136,-0.93867c-0.00049,-0.19017 -0.00055,-0.36139 0.00452,-0.5145c0.00452,-0.13624 0.01184,-0.25707 0.03149,-0.3615c0.01727,-0.09199 0.03271,-0.18232 0.13068,-0.29067c0.04773,-0.05276 0.11749,-0.08546 0.19049,-0.114c0.0777,-0.03036 0.16376,-0.05228 0.25348,-0.078c0.09399,-0.02693 0.19531,-0.04832 0.38934,-0.14133c0.10291,-0.04932 0.20178,-0.11667 0.3045,-0.186c0.10663,-0.07198 0.21503,-0.14935 0.33148,-0.222c0.11987,-0.07477 0.24329,-0.15697 0.5307,-0.25867c0.15192,-0.05376 0.31689,-0.08492 0.48596,-0.114c0.1723,-0.02964 0.34753,-0.05153 0.52203,-0.078c0.17285,-0.02621 0.34607,-0.04227 0.65863,-0.14133c0.14832,-0.04701 0.28595,-0.11616 0.42303,-0.186c0.14026,-0.07146 0.28375,-0.15067 0.44098,-0.222c0.16809,-0.07627 0.3526,-0.16115 0.80267,-0.25867c0.26227,-0.05682 0.55566,-0.08547 0.87152,-0.1095c0.33618,-0.02557 0.69092,-0.03843 1.06049,-0.0465c0.38141,-0.00833 0.77197,-0.00999 1.56799,-0.01067c0.40015,-0.00034 0.80133,0 1.20453,0c0.40613,0 0.81628,0 1.23145,0c0.4212,0 0.84937,-0.00032 1.73071,0c0.45496,0.00017 0.92004,-0.0002 1.39496,0.009c0.48511,0.0094 0.98041,0.0271 1.48505,0.063c0.51538,0.03666 1.04401,0.07384 2.12,0.26134c0.55768,0.09718 1.12451,0.23282 1.70398,0.39c0.59943,0.1626 1.21448,0.35448 1.84802,0.57c0.65924,0.22427 1.34271,0.46952 2.78131,1.04c0.76727,0.30426 1.56073,0.63686 2.38501,0.9855c0.85577,0.36196 1.74017,0.74325 2.65497,1.1385c0.94519,0.40839 1.91895,0.83327 3.96002,1.70933c1.06439,0.45686 2.16107,0.92152 3.28497,1.4085c1.15613,0.50095 2.34265,1.02319 3.55505,1.5795c1.24774,0.57254 2.53369,1.16103 5.15997,2.512c1.37213,0.70581 2.76324,1.47058 4.18048,2.27551c1.45355,0.82556 2.92798,1.69667 4.42352,2.6085c1.5282,0.9317 3.08209,1.89312 6.22931,3.94933c1.6156,1.05553 3.23999,2.15211 4.88104,3.2715c1.66034,1.13257 3.3288,2.28886 5.00696,3.4605c1.68921,1.17935 3.38171,2.37145 6.77869,4.768c1.69983,1.19923 3.39618,2.39762 5.091,3.5865c1.68658,1.18311 3.36505,2.35431 5.03699,3.5055c1.6554,1.13979 3.29022,2.26878 6.5387,4.408c1.58313,1.04253 3.14508,2.0392 4.66949,2.997c1.47174,0.92471 2.89087,1.79814 4.24646,2.619c1.27759,0.77361 2.47131,1.49071 4.58405,2.71734c0.89435,0.51924 1.68896,0.96973 2.39099,1.3575c0.61285,0.33851 1.14874,0.62532 1.617,0.8625c0.40271,0.20399 0.74957,0.37872 1.32532,0.61333c0.2334,0.09511 0.44122,0.16673 0.62402,0.2145c0.15613,0.0408 0.2926,0.06414 0.40796,0.0615c0.09772,-0.00224 0.19232,-0.01271 0.30133,-0.10933c0.05328,-0.04719 0.08551,-0.11752 0.11401,-0.19051c0.03033,-0.07771 0.05231,-0.16378 0.078,-0.25349c0.02692,-0.09395 0.04828,-0.1953 0.14136,-0.38934c0.04974,-0.10377 0.12097,-0.20825 0.19946,-0.327c0.09076,-0.13728 0.19836,-0.29673 0.31653,-0.489c0.13855,-0.22553 0.2995,-0.49072 0.65063,-1.184c0.21619,-0.42685 0.44244,-0.91831 0.68555,-1.47c0.26801,-0.60817 0.54779,-1.27835 0.8385,-2.01c0.31323,-0.78824 0.64423,-1.63514 1.30933,-3.52c0.36224,-1.02657 0.72198,-2.11224 1.09045,-3.2475c0.38232,-1.17804 0.76605,-2.39761 1.1535,-3.6525c0.3963,-1.28342 0.79492,-2.59207 1.58936,-5.26666c0.40228,-1.35437 0.80133,-2.72 1.20453,-4.095c0.40613,-1.385 0.81488,-2.78042 1.23145,-4.185c0.4198,-1.41542 0.84082,-2.84263 1.73071,-5.72c0.45032,-1.45618 0.9165,-2.91892 1.38599,-4.3905c0.47186,-1.47909 0.94879,-2.9632 1.422,-4.4535c0.47412,-1.49336 0.9541,-2.98681 1.85864,-5.98933c0.45117,-1.4976 0.88354,-2.99462 1.30054,-4.4865c0.4137,-1.48014 0.80902,-2.94961 1.18347,-4.4055c0.36914,-1.43515 0.72906,-2.84781 1.34937,-5.608c0.29956,-1.33287 0.56592,-2.63854 0.828,-3.9105c0.25525,-1.23871 0.49957,-2.44492 0.75598,-3.6135c0.24908,-1.13507 0.47559,-2.24248 1.08264,-4.30933c0.28955,-0.9857 0.62317,-1.92178 0.97205,-2.811c0.33435,-0.85207 0.68585,-1.65151 1.04395,-2.397c0.3371,-0.70169 0.66272,-1.35289 1.31738,-2.45867c0.28168,-0.47579 0.55511,-0.88977 0.81445,-1.248c0.23071,-0.31871 0.45068,-0.59049 0.6615,-0.816c0.18634,-0.19935 0.35773,-0.37338 0.69067,-0.60267c0.14063,-0.09685 0.27814,-0.1688 0.40955,-0.2055c0.11896,-0.03321 0.23987,-0.03585 0.3465,0.0015c0.11121,0.03895 0.2276,0.11518 0.41064,0.37067c0.11273,0.1573 0.20728,0.36102 0.32251,0.5895c0.13153,0.26081 0.27795,0.55835 0.45752,0.8865c0.20166,0.36848 0.42743,0.78229 1.05328,1.69067c0.36353,0.52759 0.79254,1.08141 1.26154,1.6755c0.50275,0.6368 1.0498,1.30461 1.63049,2.0085c0.61029,0.73983 1.25537,1.50788 2.60797,3.14933c0.71198,0.86404 1.44379,1.76202 2.19452,2.6985c0.77875,0.97145 1.57971,1.98637 2.40149,3.0495c0.85474,1.10578 1.74194,2.25875 3.57068,4.752c0.97137,1.32429 1.9599,2.71151 2.97601,4.1475c1.04535,1.47729 2.10828,2.99764 3.19202,4.5525c1.10364,1.58347 2.21851,3.1953 4.49866,6.46666c1.15356,1.65499 2.31482,3.31571 3.495,4.968c1.17981,1.65173 2.37048,3.28915 3.58496,4.896c1.20563,1.59515 2.39581,3.1812 4.92004,6.13599c1.23303,1.44332 2.50171,2.81114 3.77698,4.12051c1.2478,1.28116 2.50366,2.49554 3.75897,3.64349c1.21979,1.11549 2.41473,2.18547 4.79736,4.06934c1.12189,0.88708 2.23187,1.69363 3.31049,2.4435c1.03241,0.71777 2.03918,1.37619 3.01349,1.9845c0.92957,0.58038 1.82465,1.11858 3.50934,2.072c0.77728,0.4399 1.51813,0.84354 2.22003,1.215c0.6582,0.34834 1.27777,0.66451 1.85999,0.94501c0.53796,0.25919 1.03192,0.50042 1.91998,0.84c0.37726,0.14425 0.72229,0.25057 1.03351,0.3285c0.2771,0.06938 0.52838,0.11395 0.75452,0.1395c0.20306,0.02295 0.388,0.03037 0.71198,0.032c0.14532,0.00073 0.2829,0.0005 0.414,-0.009c0.12762,-0.00925 0.25403,-0.02747 0.37799,-0.063c0.12903,-0.03699 0.26672,-0.0854 0.54138,-0.26134c0.16071,-0.10296 0.32758,-0.24139 0.513,-0.4035c0.21228,-0.18555 0.44647,-0.40778 0.711,-0.66451c0.30096,-0.29211 0.63763,-0.62768 1.44263,-1.432c0.47485,-0.47447 0.99738,-0.99733 1.56604,-1.56599c0.61267,-0.61267 1.26733,-1.26734 1.96198,-1.96201c0.73267,-0.73267 1.50134,-1.50134 3.13867,-3.13866c0.86536,-0.86534 1.7627,-1.76268 2.69397,-2.694c0.96735,-0.96735 1.97272,-1.97268 3.01801,-3.018c1.08734,-1.08735 2.21893,-2.21844 4.62134,-4.62134c1.27863,-1.27888 2.62988,-2.6301 4.06952,-4.083c1.55658,-1.57095 3.24609,-3.28898 5.08649,-5.181c2.02295,-2.07968 4.24658,-4.37392 9.34399,-9.736c2.92596,-3.07789 6.03973,-6.38836 9.29553,-9.849c3.33484,-3.54467 6.68225,-7.11063 9.98846,-10.623c3.19751,-3.39692 6.21265,-6.62256 11.54938,-12.19467c2.17334,-2.26921 4.04279,-4.17982 5.62799,-5.7885c1.33252,-1.35226 2.46021,-2.47758 3.396,-3.4395c0.79883,-0.82113 1.51447,-1.53076 2.64264,-2.93867c0.5636,-0.70339 1.08447,-1.46054 1.59601,-2.2305c0.50983,-0.76745 0.98962,-1.53894 1.45203,-2.2935c0.44482,-0.72584 0.84723,-1.42617 1.61865,-2.64267c0.32935,-0.51934 0.63495,-0.96974 0.92401,-1.3485c0.25079,-0.32861 0.48267,-0.59973 0.70801,-0.7995c0.18939,-0.16791 0.36847,-0.3327 0.70129,-0.352c0.14667,-0.00851 0.29425,0.07086 0.41852,0.189c0.14679,0.13955 0.27588,0.3489 0.40948,0.603c0.15674,0.29814 0.31427,0.65612 0.672,1.54133c0.21375,0.529 0.44244,1.12308 0.69,1.7835c0.27271,0.7275 0.56311,1.52791 0.87,2.4045c0.33337,0.95232 0.69098,1.98444 1.44,4.312c0.41595,1.29255 0.84204,2.67498 1.28552,4.1415c0.46735,1.54543 0.94672,3.17011 1.43848,4.8705c0.51202,1.77058 1.03931,3.60962 2.10938,7.488c0.55951,2.02777 1.12061,4.11183 1.69501,6.243c0.58563,2.17282 1.17834,4.38244 1.78497,6.621c0.61334,2.26345 1.22723,4.54758 2.52002,9.136c0.64807,2.30014 1.31146,4.58801 1.98151,6.855c0.66199,2.23965 1.32611,4.43817 1.99048,6.585c0.64673,2.08981 1.27368,4.11269 2.52802,7.89333c0.58167,1.75317 1.15356,3.40543 1.71448,4.959c0.52893,1.46498 1.04681,2.83647 1.56152,4.113c0.48224,1.19596 0.93231,2.31645 1.89063,4.26133c0.42816,0.86893 0.86761,1.6503 1.2915,2.358c0.38892,0.64931 0.76733,1.22779 1.12054,1.746c0.31824,0.4669 0.62366,0.86937 1.08795,1.56267c0.18573,0.27739 0.33002,0.52288 0.44702,0.7335c0.09869,0.17757 0.17432,0.33115 0.24902,0.4545c0.06384,0.10543 0.12195,0.20972 0.30396,0.312c0.10327,0.05804 0.23651,0.08549 0.38104,0.10049c0.15704,0.0163 0.32825,0.01071 0.50696,-0.01649c0.18896,-0.02877 0.39148,-0.06638 0.77869,-0.25067c0.20679,-0.09841 0.40912,-0.23763 0.61798,-0.39899c0.22894,-0.17691 0.46753,-0.39027 0.72601,-0.633c0.28717,-0.26969 0.59808,-0.5779 1.32269,-1.30133c0.42023,-0.41956 0.87933,-0.87936 1.37549,-1.38c0.53448,-0.53931 1.10486,-1.11881 1.7085,-1.74c0.64014,-0.65874 1.3161,-1.35488 2.74933,-2.88c0.76758,-0.81677 1.55847,-1.67493 2.37598,-2.56651c0.84393,-0.92039 1.70789,-1.8705 2.59204,-2.8455c0.9032,-0.99599 1.82062,-2.0126 3.69867,-4.088c0.95477,-1.05514 1.91956,-2.1203 2.89948,-3.19051c0.98932,-1.08048 1.9931,-2.16671 3.01648,-3.25349c1.03296,-1.09692 2.07532,-2.20453 4.25067,-4.38934c1.10242,-1.10724 2.23413,-2.20329 3.37653,-3.3045c1.1496,-1.10815 2.31201,-2.21525 3.47552,-3.3315c1.16748,-1.12007 2.34521,-2.23594 4.64795,-4.53067c1.15198,-1.14801 2.28473,-2.31539 3.414,-3.486c1.12939,-1.17073 2.25165,-2.34833 3.37799,-3.522c1.12634,-1.17366 2.24493,-2.35493 4.54138,-4.65866c1.14734,-1.151 2.30817,-2.27869 3.47247,-3.3825c1.14917,-1.08948 2.29272,-2.14458 3.42749,-3.1575c1.10376,-0.98527 2.17261,-1.93874 4.26666,-3.62667c0.97021,-0.78205 1.91144,-1.48949 2.81104,-2.1345c0.84222,-0.60386 1.64233,-1.14418 2.39697,-1.6215c0.69318,-0.43842 1.32764,-0.83558 2.45868,-1.41067c0.46533,-0.23659 0.88171,-0.41553 1.24805,-0.543c0.31165,-0.10843 0.58374,-0.17735 0.81592,-0.201c0.19397,-0.01976 0.36914,-0.0284 0.60266,0.07734c0.09778,0.04424 0.17627,0.12757 0.24158,0.2355c0.08203,0.1355 0.15552,0.32652 0.25049,0.5685c0.11963,0.3049 0.25757,0.68717 0.67468,1.696c0.26929,0.65125 0.59412,1.39353 0.95691,2.2275c0.3999,0.91938 0.83643,1.91761 1.29907,2.9925c0.49219,1.1434 1.01465,2.34841 2.07727,4.94667c0.56104,1.37177 1.12195,2.7929 1.68604,4.257c0.57727,1.49854 1.15234,3.03282 1.72205,4.599c0.57776,1.58847 1.15833,3.19687 2.25867,6.47733c0.55457,1.65329 1.08887,3.32907 1.63196,5.0265c0.55286,1.72789 1.11401,3.49566 1.70398,5.3055c0.60791,1.86454 1.22998,3.79445 2.66406,7.83467c0.75928,2.13908 1.57361,4.31734 2.4209,6.50249c0.8407,2.1682 1.68945,4.27454 2.54712,6.2775c0.80713,1.88511 1.50684,3.64718 3.03198,6.38667c0.57886,1.03983 1.11865,1.84015 1.67542,2.316c0.42456,0.36288 0.90552,0.5074 1.28857,0.372c0.42041,-0.14861 0.80811,-0.56215 1.53601,-1.688c0.43811,-0.6776 0.84973,-1.47434 1.3125,-2.3415c0.50415,-0.94471 1.03735,-1.97327 1.62744,-3.0705c0.63135,-1.17395 1.29346,-2.43169 2.89331,-5.088c0.86743,-1.44024 1.82788,-2.92381 2.86951,-4.452c1.08716,-1.59499 2.26123,-3.2261 3.52649,-4.884c1.31067,-1.71733 2.67908,-3.48627 5.77075,-6.99734c1.61597,-1.83516 3.36023,-3.67007 5.20947,-5.544c1.93298,-1.95882 4.00867,-3.96764 6.22644,-6.048c2.34143,-2.19634 4.84216,-4.49507 10.39734,-9.408c3.02747,-2.67745 6.22412,-5.44318 9.52954,-8.2905c3.37061,-2.90344 6.78088,-5.81615 10.18652,-8.7135c3.35742,-2.85629 6.63428,-5.63268 12.78394,-10.82933c2.80103,-2.36692 5.41101,-4.57083 7.84509,-6.612c2.2594,-1.89463 4.35828,-3.64407 6.31494,-5.244c1.80701,-1.47762 3.46753,-2.84967 6.50671,-5.144c1.33899,-1.01079 2.59399,-1.8974 3.75452,-2.6775c1.04968,-0.7056 2.01038,-1.31144 2.88147,-1.8225c0.76611,-0.44949 1.43506,-0.83699 2.53064,-1.33333c0.40198,-0.1821 0.73047,-0.30577 0.99451,-0.3525c0.20081,-0.03555 0.36877,-0.0188 0.48145,0.0525c0.10913,0.06904 0.17664,0.19733 0.35742,0.46667c0.10645,0.1586 0.24097,0.32856 0.39001,0.5265c0.17114,0.22729 0.3645,0.49132 0.56995,0.8055c0.23523,0.35979 0.50098,0.77438 1.04004,1.83467c0.32202,0.63338 0.6438,1.3535 0.97192,2.151c0.35535,0.86363 0.7063,1.80338 1.04407,2.817c0.35767,1.07362 0.72644,2.21051 1.31726,4.69867c0.31433,1.32382 0.57288,2.71218 0.83252,4.1475c0.26733,1.47801 0.51929,2.99874 0.78748,4.5525c0.27344,1.58459 0.53113,3.20057 1.21338,6.46667c0.34644,1.6587 0.74695,3.32093 1.17151,4.9905c0.42749,1.68116 0.88586,3.36508 1.36047,5.0535c0.47644,1.69527 0.97021,3.3912 1.96802,6.78933c0.4989,1.69927 0.99756,3.39233 1.49548,5.073c0.4928,1.66332 0.98132,3.30269 1.46851,4.911c0.47668,1.57368 0.93835,3.10791 1.86938,6.016c0.43909,1.3717 0.87451,2.68053 1.30493,3.9255c0.40991,1.18564 0.81323,2.30623 1.21509,3.3585c0.37854,0.99129 0.7312,1.92355 1.47998,3.54934c0.33228,0.72144 0.66992,1.36883 1.00049,1.94849c0.30103,0.52802 0.59619,0.99416 0.88342,1.39951c0.25732,0.36324 0.4928,0.68489 0.94934,1.152c0.18347,0.18772 0.35791,0.3323 0.51904,0.438c0.13843,0.09083 0.27063,0.15202 0.39294,0.186c0.11084,0.03082 0.21875,0.04066 0.42139,0.04266c0.10022,0.00098 0.20215,0.00011 0.30444,-0.018c0.1073,-0.019 0.22046,-0.05828 0.33154,-0.126c0.12622,-0.07695 0.26538,-0.18421 0.53064,-0.52267c0.16663,-0.21259 0.32886,-0.48297 0.52649,-0.789c0.22778,-0.35268 0.48962,-0.75601 0.80554,-1.203c0.35779,-0.50618 0.76392,-1.07651 1.83472,-2.34133c0.62634,-0.73981 1.3457,-1.51669 2.1239,-2.3475c0.8269,-0.88274 1.70862,-1.79908 2.62805,-2.75249c0.94983,-0.98494 1.9314,-1.98754 3.91467,-4.06667c1.00342,-1.05191 2.00281,-2.11852 3.00903,-3.1905c1.01245,-1.07869 2.0304,-2.1657 3.06299,-3.2535c1.04016,-1.09588 2.08459,-2.20452 4.26135,-4.38933c1.10242,-1.10656 2.23108,-2.2011 3.37646,-3.2865c1.14661,-1.08663 2.30603,-2.15651 3.47546,-3.2055c1.16162,-1.042 2.31592,-2.07125 4.64807,-4.008c1.13684,-0.94411 2.27148,-1.84489 3.396,-2.706c1.09705,-0.84008 2.18091,-1.63645 3.25195,-2.382c1.03662,-0.72154 2.03967,-1.41763 4.01868,-2.57867c0.92432,-0.5423 1.82825,-1.01189 2.6925,-1.4295c0.80945,-0.39111 1.57471,-0.72556 2.28748,-1.0065c0.64587,-0.25457 1.224,-0.48334 2.18665,-0.73067c0.35852,-0.09212 0.65649,-0.14838 0.88049,-0.102c0.18323,0.03793 0.32654,0.17619 0.40356,0.366c0.0957,0.23591 0.12646,0.55707 0.21594,1.40266c0.05713,0.53934 0.11938,1.15658 0.2085,1.8465c0.09839,0.76218 0.22107,1.59238 0.37952,2.4855c0.17004,0.95806 0.35388,1.98043 0.91199,4.168c0.3009,1.17933 0.66772,2.3977 1.0575,3.6615c0.40344,1.30828 0.83862,2.65094 1.28259,4.0305c0.45435,1.41144 0.9325,2.84613 1.82666,5.808c0.45483,1.50674 0.88635,3.03596 1.30945,4.581c0.42615,1.55629 0.83911,3.12661 1.24646,4.707c0.40906,1.58695 0.81018,3.18112 1.61072,6.37867c0.40051,1.59956 0.79932,3.19753 1.19995,4.791c0.39929,1.58786 0.79858,3.1677 1.20007,4.737c0.39856,1.55804 0.79272,3.10323 1.59998,6.13866c0.39612,1.48961 0.79443,2.95013 1.19104,4.374c0.38477,1.38145 0.76355,2.71046 1.13696,3.978c0.354,1.20173 0.68262,2.33142 1.33862,4.31467c0.28235,0.85369 0.5542,1.61133 0.81909,2.277c0.23474,0.59005 0.46179,1.10358 0.69299,1.53899c0.20288,0.38214 0.38403,0.7267 0.82129,1.18401c0.18628,0.19478 0.39404,0.33678 0.59998,0.438c0.19495,0.09581 0.39856,0.15316 0.59998,0.186c0.19897,0.03245 0.40002,0.04196 0.80005,0.04266c0.20361,0.00036 0.43103,-0.00565 0.69897,-0.054c0.33826,-0.06103 0.7627,-0.18649 1.29297,-0.378c0.67017,-0.24206 1.49463,-0.57139 3.67468,-1.568c1.41711,-0.64782 3.05115,-1.44051 4.9126,-2.3715c2.10583,-1.05322 4.44727,-2.26373 7.02747,-3.6405c2.84204,-1.51651 5.94604,-3.19109 12.89331,-7.15466c3.88953,-2.21906 7.98352,-4.63321 12.28955,-7.12051c4.44983,-2.5703 9.00696,-5.17938 13.6665,-7.7235c4.66357,-2.54635 9.2655,-5.13206 18.54395,-9.32267c4.39563,-1.9853 8.71301,-3.63119 12.86548,-5.0685c3.93323,-1.36141 7.68689,-2.489 11.21851,-3.4395c3.2666,-0.87918 6.27405,-1.60926 11.41602,-2.65867c2.08557,-0.42564 3.87341,-0.74588 5.38647,-0.9765c1.2594,-0.19196 2.29968,-0.31667 3.14551,-0.3555c0.6759,-0.03104 1.22949,-0.05536 1.96802,0.16533c0.28003,0.08368 0.50122,0.22145 0.65698,0.3765c0.14014,0.13953 0.22937,0.30721 0.27905,0.4755c0.04822,0.16359 0.05994,0.33192 0.06396,0.648c0.00183,0.14549 0,0.284 0,0.4185c0,0.1335 0,0.269 0,0.4095c0,0.1485 0.00037,0.308 0,0.672c-0.00024,0.21067 -0.00037,0.4454 -0.00903,0.708c-0.00977,0.29477 -0.02893,0.62566 -0.06299,0.996c-0.03821,0.41507 -0.08582,0.87933 -0.26135,1.96267c-0.10229,0.63109 -0.23608,1.31918 -0.3855,2.0655c-0.16101,0.80439 -0.34253,1.66391 -0.53845,2.5785c-0.20764,0.96909 -0.43103,1.99059 -0.9093,4.18934c-0.25549,1.17429 -0.51929,2.39513 -0.79956,3.657c-0.28894,1.30082 -0.59167,2.63575 -0.9165,3.999c-0.33154,1.39146 -0.66687,2.80872 -1.45068,5.67733c-0.39868,1.45918 -0.83472,2.93 -1.29443,4.422c-0.46948,1.52406 -0.97156,3.07958 -1.50146,4.674c-0.54626,1.64365 -1.12109,3.33888 -2.37073,6.904c-0.66162,1.8877 -1.36182,3.85163 -2.11206,5.8965c-0.7854,2.14059 -1.62854,4.37799 -2.54395,6.7155c-0.96216,2.45705 -1.98096,5.0402 -4.34399,10.55467c-1.27417,2.97346 -2.65234,6.04797 -4.10095,9.204c-1.47925,3.22279 -3.01123,6.46889 -4.58704,9.70799c-1.56824,3.22357 -3.11731,6.40527 -6.31201,12.42134c-1.5105,2.84445 -3.02661,5.5379 -4.49695,8.11499c-1.41272,2.47609 -2.79761,4.84164 -4.11902,7.125c-1.27319,2.20004 -2.53516,4.3051 -4.71741,8.42667c-1.0415,1.96703 -1.98254,3.91573 -2.87097,5.82451c-0.86609,1.86076 -1.67371,3.69499 -2.45703,5.4915c-0.76733,1.75986 -1.48962,3.50052 -3.00525,6.85066c-0.74231,1.6409 -1.51074,3.24519 -2.28149,4.82401c-0.76147,1.55984 -1.53064,3.09286 -2.29053,4.608c-0.7511,1.49753 -1.5083,2.97073 -2.92798,5.90132c-0.69812,1.44099 -1.36584,2.87599 -2.01001,4.30051c-0.63586,1.4062 -1.24573,2.80124 -1.83008,4.1835c-0.57556,1.36147 -1.13574,2.7045 -2.15991,5.34933c-0.49805,1.28621 -0.96326,2.55313 -1.41907,3.78749c-0.44275,1.19897 -0.86768,2.36023 -1.29297,3.4725c-0.40759,1.06599 -0.7793,2.09109 -1.62134,3.90666c-0.38245,0.82463 -0.78906,1.57663 -1.20447,2.26651c-0.39465,0.6553 -0.80762,1.26083 -1.23157,1.8255c-0.41272,0.54962 -0.83911,1.07426 -1.73059,2.07466c-0.44958,0.50456 -0.91626,1.00104 -1.38599,1.5c-0.47168,0.50104 -0.94788,0.99954 -1.422,1.5c-0.47327,0.49954 -0.94897,0.99309 -1.85876,2c-0.44873,0.49663 -0.88293,0.99754 -1.30493,1.5c-0.41797,0.49759 -0.82324,0.99753 -1.21509,1.5c-0.38806,0.49756 -0.76965,0.99303 -1.47998,2c-0.35022,0.49644 -0.68323,0.99823 -1.01392,1.4955c-0.328,0.49339 -0.65063,0.98509 -0.97803,1.46851c-0.32532,0.48027 -0.64331,0.96227 -1.34131,1.86934c-0.34741,0.45154 -0.71777,0.88733 -1.09509,1.323c-0.38257,0.44171 -0.78052,0.88474 -1.18494,1.341c-0.41577,0.46906 -0.85107,0.94806 -1.71997,2.00266c-0.46082,0.55933 -0.92004,1.15225 -1.3905,1.76251c-0.48035,0.62305 -0.9624,1.25934 -1.45349,1.89749c-0.49255,0.64017 -0.97742,1.28424 -1.98938,2.50665c-0.49316,0.59573 -0.99548,1.16434 -1.49097,1.71902c-0.48584,0.54395 -0.96875,1.07147 -1.43701,1.59299c-0.45898,0.51114 -0.91797,1.00507 -1.73865,2.02133c-0.39856,0.49353 -0.76733,0.9967 -1.11902,1.5c-0.34705,0.49677 -0.67566,0.99817 -0.99304,1.5c-0.31519,0.4982 -0.61938,0.99957 -1.22131,2c-0.30054,0.49945 -0.59888,0.99884 -0.90454,1.491c-0.30371,0.48917 -0.61145,0.97064 -0.93152,1.43701c-0.31641,0.461 -0.62683,0.92007 -1.33057,1.73865c-0.34424,0.40048 -0.71716,0.77097 -1.09509,1.13702c-0.38196,0.37 -0.78149,0.7363 -1.18494,1.11899c-0.41675,0.39526 -0.8584,0.79886 -1.71997,1.74399c-0.46472,0.50977 -0.92029,1.06723 -1.38159,1.6485c-0.47083,0.59335 -0.93311,1.20407 -1.3905,1.81952c-0.45361,0.61023 -0.89099,1.21533 -1.72791,2.36533c-0.39026,0.53632 -0.76514,1.04819 -1.12805,1.54199c-0.35437,0.48218 -0.70544,0.95789 -1.05603,1.43402c-0.35474,0.48187 -0.71875,0.97488 -1.48267,2.02399c-0.41016,0.56326 -0.83411,1.151 -1.27197,1.75351c-0.44482,0.61215 -0.89307,1.22684 -1.34399,1.8345c-0.44373,0.59799 -0.87207,1.18298 -1.71729,2.24533c-0.38562,0.48468 -0.76038,0.92862 -1.11902,1.3425c-0.34021,0.3927 -0.67249,0.7619 -0.99304,1.11749c-0.31201,0.34607 -0.625,0.68115 -1.22131,1.37332c-0.30334,0.35208 -0.60168,0.71732 -0.90002,1.09052c-0.30164,0.37741 -0.60095,0.76291 -0.90002,1.1535c-0.3009,0.39307 -0.60022,0.7905 -1.19995,1.58932c-0.30017,0.39978 -0.59924,0.79919 -0.90002,1.1955c-0.29919,0.39435 -0.59851,0.78479 -0.90002,1.16852c-0.29846,0.37994 -0.59314,0.75641 -1.19995,1.46933c-0.29651,0.34833 -0.59924,0.68344 -0.89551,1.01849c-0.29443,0.33298 -0.5874,0.66589 -0.86853,1.00949c-0.28259,0.34543 -0.57251,0.69363 -1.06934,1.47202c-0.25671,0.40222 -0.48584,0.83298 -0.71399,1.272c-0.23059,0.44363 -0.45105,0.89545 -0.67798,1.34399c-0.22571,0.44611 -0.43652,0.89587 -0.94128,1.71732c-0.24402,0.397 -0.51221,0.76553 -0.78149,1.11902c-0.26294,0.34515 -0.53149,0.67227 -0.79053,0.99298c-0.25195,0.31195 -0.5105,0.6058 -0.92798,1.22134c-0.19934,0.29395 -0.36768,0.59607 -0.51904,0.89551c-0.14722,0.29138 -0.27502,0.58267 -0.39294,0.8685c-0.11462,0.27792 -0.21497,0.55219 -0.42139,1.06934c-0.09814,0.24588 -0.19873,0.48187 -0.30005,0.7095c-0.09875,0.22171 -0.19922,0.43668 -0.29993,0.64648c-0.09924,0.20654 -0.19958,0.40961 -0.40002,0.81067c-0.09998,0.19995 -0.19946,0.39963 -0.30444,0.59549c-0.10437,0.19482 -0.21289,0.38593 -0.33154,0.56851c-0.11768,0.18115 -0.23486,0.36411 -0.53064,0.66934c-0.14758,0.15234 -0.31482,0.28415 -0.48157,0.414c-0.16541,0.12881 -0.33301,0.25003 -0.49048,0.37799c-0.15356,0.12479 -0.31616,0.24011 -0.52795,0.54132c-0.10315,0.14682 -0.16992,0.31708 -0.22803,0.49051c-0.05933,0.17734 -0.104,0.36404 -0.15601,0.5535c-0.05334,0.19424 -0.09607,0.40012 -0.28271,0.78934c-0.09863,0.2056 -0.23242,0.40256 -0.37646,0.60001c-0.14783,0.20267 -0.31042,0.40051 -0.47546,0.60001c-0.16589,0.2005 -0.34033,0.39362 -0.64807,0.79999c-0.14917,0.19699 -0.28381,0.39841 -0.40942,0.60001c-0.12366,0.19846 -0.23792,0.39914 -0.34656,0.60001c-0.10779,0.19916 -0.20984,0.39975 -0.41064,0.79999c-0.10022,0.19971 -0.19934,0.39896 -0.30005,0.59549c-0.09949,0.19412 -0.19861,0.38437 -0.29993,0.56851c-0.09875,0.17953 -0.19336,0.35498 -0.40002,0.66934c-0.0968,0.14722 -0.19788,0.28186 -0.29553,0.40948c-0.09314,0.1217 -0.18457,0.2356 -0.26843,0.3465c-0.07983,0.10547 -0.16162,0.20331 -0.26941,0.41068c-0.05054,0.09726 -0.08411,0.19818 -0.11401,0.2955c-0.02869,0.09341 -0.0509,0.1842 -0.078,0.26849c-0.02551,0.07938 -0.04333,0.1629 -0.14124,0.26935c-0.0481,0.05228 -0.11646,0.08502 -0.18604,0.11398c-0.07166,0.02982 -0.14783,0.05145 -0.22205,0.078c-0.07312,0.02612 -0.1532,0.04385 -0.25867,0.14133c-0.05225,0.04834 -0.08557,0.11795 -0.11841,0.19052c-0.03528,0.07806 -0.06665,0.16479 -0.1095,0.25348c-0.04602,0.09515 -0.0946,0.20258 -0.27209,0.38934c-0.10205,0.10736 -0.23328,0.20184 -0.37195,0.29999c-0.14404,0.10193 -0.29529,0.1991 -0.44397,0.30002c-0.146,0.09912 -0.29614,0.18527 -0.51733,0.39999c-0.0968,0.09396 -0.16833,0.1976 -0.22351,0.29999c-0.05273,0.09787 -0.08899,0.20001 -0.12451,0.30002l-0.03357,0.10001l-0.03442,0.09998" id="svg_3" stroke-width="20" stroke="#000000" fill="none"/>
+ </g>
+</svg>
--- /dev/null
+<svg width="2048" height="2048" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
+ <g class="layer">
+ <title>Layer 1</title>
+ <path id="svg_1" fill="#000" transform="translate(0,2048) scale(1,-1)" fill-rule="nonzero" d="m1024,273l491,0q21,72 21,141q0,156 -86,283t-223,187q-66,5 -66,72q0,53 67,78q93,65 93,172q0,77 -52,135t-126,67q-60,5 -60,68q0,28 22,52q54,42 54,110q0,56 -40,96t-95,40q-57,0 -96,-40t-40,-96q0,-67 54,-110q22,-22 22,-52q0,-63 -59,-68q-75,-9 -126,-67t-52,-135q0,-107 93,-172q67,-26 67,-78q0,-67 -67,-72q-136,-60 -222,-187t-86,-283q0,-74 21,-141l491,0zm0,-68l-540,0q-40,100 -40,209q0,185 105,332t270,210q-71,33 -115,99t-45,151q0,105 70,182t172,89q-81,61 -81,161q0,84 59,144t145,60q84,0 144,-60t60,-144q0,-100 -81,-161q102,-12 172,-89t70,-182q0,-84 -45,-150t-116,-100q165,-63 270,-210t105,-332q0,-108 -39,-209l-540,0z"/>
+ <path id="svg_2" fill="#fff" fill-rule="nonzero" d="m1024,1775l491,0q21,-72 21,-141q0,-156 -86,-283t-223,-187q-66,-5 -66,-72q0,-53 67,-78q93,-65 93,-172q0,-77 -52,-135t-126,-67q-60,-5 -60,-68q0,-28 22,-52q54,-42 54,-110q0,-56 -40,-96t-95,-40q-57,0 -96,40t-40,96q0,67 54,110q22,22 22,52q0,63 -59,68q-75,9 -126,67t-52,135q0,107 93,172q67,26 67,78q0,67 -67,72q-136,60 -222,187t-86,283q0,74 21,141l491,0z"/>
+ <path d="m819.99966,388.28527c-1.10864,-2.65115 -1.43005,-3.20636 -1.81732,-3.81818c-0.43079,-0.68066 -0.92487,-1.41653 -1.48804,-2.2005c-0.60889,-0.8476 -1.27008,-1.75565 -2.86133,-3.64798c-0.87073,-1.03552 -1.84528,-2.10236 -2.89648,-3.24301c-1.13385,-1.23032 -2.37537,-2.5477 -3.71552,-3.98099c-1.45422,-1.5553 -3.04144,-3.23602 -6.55463,-7.10934c-1.97681,-2.17944 -4.06763,-4.53577 -6.26703,-7.047c-2.3103,-2.63788 -4.69867,-5.40512 -7.14899,-8.289c-2.52118,-2.96729 -5.09711,-6.00662 -10.25067,-12.33066c-2.61664,-3.21088 -5.22595,-6.49396 -7.86749,-9.84302c-2.69867,-3.42151 -5.44696,-6.94714 -8.27252,-10.58099c-2.91949,-3.75473 -5.93329,-7.65588 -12.35999,-15.90933c-3.41547,-4.38628 -6.95422,-8.9063 -10.56299,-13.5345c-3.65521,-4.68777 -7.31976,-9.39703 -10.94104,-14.1015c-3.57062,-4.63864 -7.07538,-9.15788 -13.49597,-17.864c-2.97205,-4.03 -5.71832,-7.89087 -8.29053,-11.57249c-2.44452,-3.49889 -4.73553,-6.86145 -6.91345,-10.08751c-2.09222,-3.09909 -4.07996,-6.11176 -7.96271,-11.84c-1.88171,-2.77608 -3.75427,-5.48759 -5.6145,-8.13901c-1.82922,-2.60718 -3.64941,-5.15764 -5.46149,-7.653c-1.78436,-2.45724 -3.54993,-4.87331 -7.09064,-9.54132c-1.73474,-2.28705 -3.47064,-4.52077 -5.1825,-6.7155c-1.68158,-2.1559 -3.3396,-4.2627 -4.95752,-6.32851c-1.58038,-2.01788 -3.13312,-3.97557 -6.02667,-7.78934c-1.37946,-1.81818 -2.68964,-3.59576 -3.92999,-5.33399c-1.19934,-1.68072 -2.33246,-3.32444 -3.39001,-4.938c-1.02209,-1.55947 -2.00916,-3.07068 -3.67999,-6.06133c-0.7948,-1.42258 -1.50128,-2.83826 -2.1615,-4.2285c-0.6449,-1.35799 -1.23981,-2.70664 -1.81049,-4.0395c-0.5636,-1.3162 -1.09601,-2.63194 -2.1947,-5.232c-0.5498,-1.30115 -1.11273,-2.59476 -1.68146,-3.8775c-0.56335,-1.27058 -1.12866,-2.51943 -1.69055,-3.7425c-0.54913,-1.19524 -1.08734,-2.35553 -2.12799,-4.54666c-0.48743,-1.02637 -0.95947,-2.00164 -1.401,-2.93401c-0.41974,-0.88636 -0.81396,-1.72973 -1.16699,-2.53799c-0.33398,-0.7646 -0.66193,-1.48513 -1.09863,-2.86134c-0.19977,-0.62952 -0.33636,-1.23968 -0.44702,-1.8195c-0.10492,-0.54971 -0.17834,-1.07628 -0.24902,-1.5765c-0.06726,-0.47612 -0.10406,-0.93633 -0.30396,-1.77066c-0.09442,-0.39422 -0.2287,-0.76503 -0.37201,-1.119c-0.13953,-0.34473 -0.2948,-0.67261 -0.44403,-0.993c-0.14545,-0.31228 -0.30652,-0.60992 -0.51733,-1.22134c-0.10205,-0.29589 -0.16907,-0.59618 -0.21899,-0.891c-0.04852,-0.28667 -0.07629,-0.56709 -0.09296,-0.837c-0.01587,-0.25748 -0.0202,-0.50133 -0.02136,-0.93867c-0.00049,-0.19017 -0.00055,-0.36139 0.00452,-0.5145c0.00452,-0.13624 0.01184,-0.25707 0.03149,-0.3615c0.01727,-0.09199 0.03271,-0.18232 0.13068,-0.29067c0.04773,-0.05276 0.11749,-0.08546 0.19049,-0.114c0.0777,-0.03036 0.16376,-0.05228 0.25348,-0.078c0.09399,-0.02693 0.19531,-0.04832 0.38934,-0.14133c0.10291,-0.04932 0.20178,-0.11667 0.3045,-0.186c0.10663,-0.07198 0.21503,-0.14935 0.33148,-0.222c0.11987,-0.07477 0.24329,-0.15697 0.5307,-0.25867c0.15192,-0.05376 0.31689,-0.08492 0.48596,-0.114c0.1723,-0.02964 0.34753,-0.05153 0.52203,-0.078c0.17285,-0.02621 0.34607,-0.04227 0.65863,-0.14133c0.14832,-0.04701 0.28595,-0.11616 0.42303,-0.186c0.14026,-0.07146 0.28375,-0.15067 0.44098,-0.222c0.16809,-0.07627 0.3526,-0.16115 0.80267,-0.25867c0.26227,-0.05682 0.55566,-0.08547 0.87152,-0.1095c0.33618,-0.02557 0.69092,-0.03843 1.06049,-0.0465c0.38141,-0.00833 0.77197,-0.00999 1.56799,-0.01067c0.40015,-0.00034 0.80133,0 1.20453,0c0.40613,0 0.81628,0 1.23145,0c0.4212,0 0.84937,-0.00032 1.73071,0c0.45496,0.00017 0.92004,-0.0002 1.39496,0.009c0.48511,0.0094 0.98041,0.0271 1.48505,0.063c0.51538,0.03666 1.04401,0.07384 2.12,0.26134c0.55768,0.09718 1.12451,0.23282 1.70398,0.39c0.59943,0.1626 1.21448,0.35448 1.84802,0.57c0.65924,0.22427 1.34271,0.46952 2.78131,1.04c0.76727,0.30426 1.56073,0.63686 2.38501,0.9855c0.85577,0.36196 1.74017,0.74325 2.65497,1.1385c0.94519,0.40839 1.91895,0.83327 3.96002,1.70933c1.06439,0.45686 2.16107,0.92152 3.28497,1.4085c1.15613,0.50095 2.34265,1.02319 3.55505,1.5795c1.24774,0.57254 2.53369,1.16103 5.15997,2.512c1.37213,0.70581 2.76324,1.47058 4.18048,2.27551c1.45355,0.82556 2.92798,1.69667 4.42352,2.6085c1.5282,0.9317 3.08209,1.89312 6.22931,3.94933c1.6156,1.05553 3.23999,2.15211 4.88104,3.2715c1.66034,1.13257 3.3288,2.28886 5.00696,3.4605c1.68921,1.17935 3.38171,2.37145 6.77869,4.768c1.69983,1.19923 3.39618,2.39762 5.091,3.5865c1.68658,1.18311 3.36505,2.35431 5.03699,3.5055c1.6554,1.13979 3.29022,2.26878 6.5387,4.408c1.58313,1.04253 3.14508,2.0392 4.66949,2.997c1.47174,0.92471 2.89087,1.79814 4.24646,2.619c1.27759,0.77361 2.47131,1.49071 4.58405,2.71734c0.89435,0.51924 1.68896,0.96973 2.39099,1.3575c0.61285,0.33851 1.14874,0.62532 1.617,0.8625c0.40271,0.20399 0.74957,0.37872 1.32532,0.61333c0.2334,0.09511 0.44122,0.16673 0.62402,0.2145c0.15613,0.0408 0.2926,0.06414 0.40796,0.0615c0.09772,-0.00224 0.19232,-0.01271 0.30133,-0.10933c0.05328,-0.04719 0.08551,-0.11752 0.11401,-0.19051c0.03033,-0.07771 0.05231,-0.16378 0.078,-0.25349c0.02692,-0.09395 0.04828,-0.1953 0.14136,-0.38934c0.04974,-0.10377 0.12097,-0.20825 0.19946,-0.327c0.09076,-0.13728 0.19836,-0.29673 0.31653,-0.489c0.13855,-0.22553 0.2995,-0.49072 0.65063,-1.184c0.21619,-0.42685 0.44244,-0.91831 0.68555,-1.47c0.26801,-0.60817 0.54779,-1.27835 0.8385,-2.01c0.31323,-0.78824 0.64423,-1.63514 1.30933,-3.52c0.36224,-1.02657 0.72198,-2.11224 1.09045,-3.2475c0.38232,-1.17804 0.76605,-2.39761 1.1535,-3.6525c0.3963,-1.28342 0.79492,-2.59207 1.58936,-5.26666c0.40228,-1.35437 0.80133,-2.72 1.20453,-4.095c0.40613,-1.385 0.81488,-2.78042 1.23145,-4.185c0.4198,-1.41542 0.84082,-2.84263 1.73071,-5.72c0.45032,-1.45618 0.9165,-2.91892 1.38599,-4.3905c0.47186,-1.47909 0.94879,-2.9632 1.422,-4.4535c0.47412,-1.49336 0.9541,-2.98681 1.85864,-5.98933c0.45117,-1.4976 0.88354,-2.99462 1.30054,-4.4865c0.4137,-1.48014 0.80902,-2.94961 1.18347,-4.4055c0.36914,-1.43515 0.72906,-2.84781 1.34937,-5.608c0.29956,-1.33287 0.56592,-2.63854 0.828,-3.9105c0.25525,-1.23871 0.49957,-2.44492 0.75598,-3.6135c0.24908,-1.13507 0.47559,-2.24248 1.08264,-4.30933c0.28955,-0.9857 0.62317,-1.92178 0.97205,-2.811c0.33435,-0.85207 0.68585,-1.65151 1.04395,-2.397c0.3371,-0.70169 0.66272,-1.35289 1.31738,-2.45867c0.28168,-0.47579 0.55511,-0.88977 0.81445,-1.248c0.23071,-0.31871 0.45068,-0.59049 0.6615,-0.816c0.18634,-0.19935 0.35773,-0.37338 0.69067,-0.60267c0.14063,-0.09685 0.27814,-0.1688 0.40955,-0.2055c0.11896,-0.03321 0.23987,-0.03585 0.3465,0.0015c0.11121,0.03895 0.2276,0.11518 0.41064,0.37067c0.11273,0.1573 0.20728,0.36102 0.32251,0.5895c0.13153,0.26081 0.27795,0.55835 0.45752,0.8865c0.20166,0.36848 0.42743,0.78229 1.05328,1.69067c0.36353,0.52759 0.79254,1.08141 1.26154,1.6755c0.50275,0.6368 1.0498,1.30461 1.63049,2.0085c0.61029,0.73983 1.25537,1.50788 2.60797,3.14933c0.71198,0.86404 1.44379,1.76202 2.19452,2.6985c0.77875,0.97145 1.57971,1.98637 2.40149,3.0495c0.85474,1.10578 1.74194,2.25875 3.57068,4.752c0.97137,1.32429 1.9599,2.71151 2.97601,4.1475c1.04535,1.47729 2.10828,2.99764 3.19202,4.5525c1.10364,1.58347 2.21851,3.1953 4.49866,6.46666c1.15356,1.65499 2.31482,3.31571 3.495,4.968c1.17981,1.65173 2.37048,3.28915 3.58496,4.896c1.20563,1.59515 2.39581,3.1812 4.92004,6.13599c1.23303,1.44332 2.50171,2.81114 3.77698,4.12051c1.2478,1.28116 2.50366,2.49554 3.75897,3.64349c1.21979,1.11549 2.41473,2.18547 4.79736,4.06934c1.12189,0.88708 2.23187,1.69363 3.31049,2.4435c1.03241,0.71777 2.03918,1.37619 3.01349,1.9845c0.92957,0.58038 1.82465,1.11858 3.50934,2.072c0.77728,0.4399 1.51813,0.84354 2.22003,1.215c0.6582,0.34834 1.27777,0.66451 1.85999,0.94501c0.53796,0.25919 1.03192,0.50042 1.91998,0.84c0.37726,0.14425 0.72229,0.25057 1.03351,0.3285c0.2771,0.06938 0.52838,0.11395 0.75452,0.1395c0.20306,0.02295 0.388,0.03037 0.71198,0.032c0.14532,0.00073 0.2829,0.0005 0.414,-0.009c0.12762,-0.00925 0.25403,-0.02747 0.37799,-0.063c0.12903,-0.03699 0.26672,-0.0854 0.54138,-0.26134c0.16071,-0.10296 0.32758,-0.24139 0.513,-0.4035c0.21228,-0.18555 0.44647,-0.40778 0.711,-0.66451c0.30096,-0.29211 0.63763,-0.62768 1.44263,-1.432c0.47485,-0.47447 0.99738,-0.99733 1.56604,-1.56599c0.61267,-0.61267 1.26733,-1.26734 1.96198,-1.96201c0.73267,-0.73267 1.50134,-1.50134 3.13867,-3.13866c0.86536,-0.86534 1.7627,-1.76268 2.69397,-2.694c0.96735,-0.96735 1.97272,-1.97268 3.01801,-3.018c1.08734,-1.08735 2.21893,-2.21844 4.62134,-4.62134c1.27863,-1.27888 2.62988,-2.6301 4.06952,-4.083c1.55658,-1.57095 3.24609,-3.28898 5.08649,-5.181c2.02295,-2.07968 4.24658,-4.37392 9.34399,-9.736c2.92596,-3.07789 6.03973,-6.38836 9.29553,-9.849c3.33484,-3.54467 6.68225,-7.11063 9.98846,-10.623c3.19751,-3.39692 6.21265,-6.62256 11.54938,-12.19467c2.17334,-2.26921 4.04279,-4.17982 5.62799,-5.7885c1.33252,-1.35226 2.46021,-2.47758 3.396,-3.4395c0.79883,-0.82113 1.51447,-1.53076 2.64264,-2.93867c0.5636,-0.70339 1.08447,-1.46054 1.59601,-2.2305c0.50983,-0.76745 0.98962,-1.53894 1.45203,-2.2935c0.44482,-0.72584 0.84723,-1.42617 1.61865,-2.64267c0.32935,-0.51934 0.63495,-0.96974 0.92401,-1.3485c0.25079,-0.32861 0.48267,-0.59973 0.70801,-0.7995c0.18939,-0.16791 0.36847,-0.3327 0.70129,-0.352c0.14667,-0.00851 0.29425,0.07086 0.41852,0.189c0.14679,0.13955 0.27588,0.3489 0.40948,0.603c0.15674,0.29814 0.31427,0.65612 0.672,1.54133c0.21375,0.529 0.44244,1.12308 0.69,1.7835c0.27271,0.7275 0.56311,1.52791 0.87,2.4045c0.33337,0.95232 0.69098,1.98444 1.44,4.312c0.41595,1.29255 0.84204,2.67498 1.28552,4.1415c0.46735,1.54543 0.94672,3.17011 1.43848,4.8705c0.51202,1.77058 1.03931,3.60962 2.10938,7.488c0.55951,2.02777 1.12061,4.11183 1.69501,6.243c0.58563,2.17282 1.17834,4.38244 1.78497,6.621c0.61334,2.26345 1.22723,4.54758 2.52002,9.136c0.64807,2.30014 1.31146,4.58801 1.98151,6.855c0.66199,2.23965 1.32611,4.43817 1.99048,6.585c0.64673,2.08981 1.27368,4.11269 2.52802,7.89333c0.58167,1.75317 1.15356,3.40543 1.71448,4.959c0.52893,1.46498 1.04681,2.83647 1.56152,4.113c0.48224,1.19596 0.93231,2.31645 1.89063,4.26133c0.42816,0.86893 0.86761,1.6503 1.2915,2.358c0.38892,0.64931 0.76733,1.22779 1.12054,1.746c0.31824,0.4669 0.62366,0.86937 1.08795,1.56267c0.18573,0.27739 0.33002,0.52288 0.44702,0.7335c0.09869,0.17757 0.17432,0.33115 0.24902,0.4545c0.06384,0.10543 0.12195,0.20972 0.30396,0.312c0.10327,0.05804 0.23651,0.08549 0.38104,0.10049c0.15704,0.0163 0.32825,0.01071 0.50696,-0.01649c0.18896,-0.02877 0.39148,-0.06638 0.77869,-0.25067c0.20679,-0.09841 0.40912,-0.23763 0.61798,-0.39899c0.22894,-0.17691 0.46753,-0.39027 0.72601,-0.633c0.28717,-0.26969 0.59808,-0.5779 1.32269,-1.30133c0.42023,-0.41956 0.87933,-0.87936 1.37549,-1.38c0.53448,-0.53931 1.10486,-1.11881 1.7085,-1.74c0.64014,-0.65874 1.3161,-1.35488 2.74933,-2.88c0.76758,-0.81677 1.55847,-1.67493 2.37598,-2.56651c0.84393,-0.92039 1.70789,-1.8705 2.59204,-2.8455c0.9032,-0.99599 1.82062,-2.0126 3.69867,-4.088c0.95477,-1.05514 1.91956,-2.1203 2.89948,-3.19051c0.98932,-1.08048 1.9931,-2.16671 3.01648,-3.25349c1.03296,-1.09692 2.07532,-2.20453 4.25067,-4.38934c1.10242,-1.10724 2.23413,-2.20329 3.37653,-3.3045c1.1496,-1.10815 2.31201,-2.21525 3.47552,-3.3315c1.16748,-1.12007 2.34521,-2.23594 4.64795,-4.53067c1.15198,-1.14801 2.28473,-2.31539 3.414,-3.486c1.12939,-1.17073 2.25165,-2.34833 3.37799,-3.522c1.12634,-1.17366 2.24493,-2.35493 4.54138,-4.65866c1.14734,-1.151 2.30817,-2.27869 3.47247,-3.3825c1.14917,-1.08948 2.29272,-2.14458 3.42749,-3.1575c1.10376,-0.98527 2.17261,-1.93874 4.26666,-3.62667c0.97021,-0.78205 1.91144,-1.48949 2.81104,-2.1345c0.84222,-0.60386 1.64233,-1.14418 2.39697,-1.6215c0.69318,-0.43842 1.32764,-0.83558 2.45868,-1.41067c0.46533,-0.23659 0.88171,-0.41553 1.24805,-0.543c0.31165,-0.10843 0.58374,-0.17735 0.81592,-0.201c0.19397,-0.01976 0.36914,-0.0284 0.60266,0.07734c0.09778,0.04424 0.17627,0.12757 0.24158,0.2355c0.08203,0.1355 0.15552,0.32652 0.25049,0.5685c0.11963,0.3049 0.25757,0.68717 0.67468,1.696c0.26929,0.65125 0.59412,1.39353 0.95691,2.2275c0.3999,0.91938 0.83643,1.91761 1.29907,2.9925c0.49219,1.1434 1.01465,2.34841 2.07727,4.94667c0.56104,1.37177 1.12195,2.7929 1.68604,4.257c0.57727,1.49854 1.15234,3.03282 1.72205,4.599c0.57776,1.58847 1.15833,3.19687 2.25867,6.47733c0.55457,1.65329 1.08887,3.32907 1.63196,5.0265c0.55286,1.72789 1.11401,3.49566 1.70398,5.3055c0.60791,1.86454 1.22998,3.79445 2.66406,7.83467c0.75928,2.13908 1.57361,4.31734 2.4209,6.50249c0.8407,2.1682 1.68945,4.27454 2.54712,6.2775c0.80713,1.88511 1.50684,3.64718 3.03198,6.38667c0.57886,1.03983 1.11865,1.84015 1.67542,2.316c0.42456,0.36288 0.90552,0.5074 1.28857,0.372c0.42041,-0.14861 0.80811,-0.56215 1.53601,-1.688c0.43811,-0.6776 0.84973,-1.47434 1.3125,-2.3415c0.50415,-0.94471 1.03735,-1.97327 1.62744,-3.0705c0.63135,-1.17395 1.29346,-2.43169 2.89331,-5.088c0.86743,-1.44024 1.82788,-2.92381 2.86951,-4.452c1.08716,-1.59499 2.26123,-3.2261 3.52649,-4.884c1.31067,-1.71733 2.67908,-3.48627 5.77075,-6.99734c1.61597,-1.83516 3.36023,-3.67007 5.20947,-5.544c1.93298,-1.95882 4.00867,-3.96764 6.22644,-6.048c2.34143,-2.19634 4.84216,-4.49507 10.39734,-9.408c3.02747,-2.67745 6.22412,-5.44318 9.52954,-8.2905c3.37061,-2.90344 6.78088,-5.81615 10.18652,-8.7135c3.35742,-2.85629 6.63428,-5.63268 12.78394,-10.82933c2.80103,-2.36692 5.41101,-4.57083 7.84509,-6.612c2.2594,-1.89463 4.35828,-3.64407 6.31494,-5.244c1.80701,-1.47762 3.46753,-2.84967 6.50671,-5.144c1.33899,-1.01079 2.59399,-1.8974 3.75452,-2.6775c1.04968,-0.7056 2.01038,-1.31144 2.88147,-1.8225c0.76611,-0.44949 1.43506,-0.83699 2.53064,-1.33333c0.40198,-0.1821 0.73047,-0.30577 0.99451,-0.3525c0.20081,-0.03555 0.36877,-0.0188 0.48145,0.0525c0.10913,0.06904 0.17664,0.19733 0.35742,0.46667c0.10645,0.1586 0.24097,0.32856 0.39001,0.5265c0.17114,0.22729 0.3645,0.49132 0.56995,0.8055c0.23523,0.35979 0.50098,0.77438 1.04004,1.83467c0.32202,0.63338 0.6438,1.3535 0.97192,2.151c0.35535,0.86363 0.7063,1.80338 1.04407,2.817c0.35767,1.07362 0.72644,2.21051 1.31726,4.69867c0.31433,1.32382 0.57288,2.71218 0.83252,4.1475c0.26733,1.47801 0.51929,2.99874 0.78748,4.5525c0.27344,1.58459 0.53113,3.20057 1.21338,6.46667c0.34644,1.6587 0.74695,3.32093 1.17151,4.9905c0.42749,1.68116 0.88586,3.36508 1.36047,5.0535c0.47644,1.69527 0.97021,3.3912 1.96802,6.78933c0.4989,1.69927 0.99756,3.39233 1.49548,5.073c0.4928,1.66332 0.98132,3.30269 1.46851,4.911c0.47668,1.57368 0.93835,3.10791 1.86938,6.016c0.43909,1.3717 0.87451,2.68053 1.30493,3.9255c0.40991,1.18564 0.81323,2.30623 1.21509,3.3585c0.37854,0.99129 0.7312,1.92355 1.47998,3.54934c0.33228,0.72144 0.66992,1.36883 1.00049,1.94849c0.30103,0.52802 0.59619,0.99416 0.88342,1.39951c0.25732,0.36324 0.4928,0.68489 0.94934,1.152c0.18347,0.18772 0.35791,0.3323 0.51904,0.438c0.13843,0.09083 0.27063,0.15202 0.39294,0.186c0.11084,0.03082 0.21875,0.04066 0.42139,0.04266c0.10022,0.00098 0.20215,0.00011 0.30444,-0.018c0.1073,-0.019 0.22046,-0.05828 0.33154,-0.126c0.12622,-0.07695 0.26538,-0.18421 0.53064,-0.52267c0.16663,-0.21259 0.32886,-0.48297 0.52649,-0.789c0.22778,-0.35268 0.48962,-0.75601 0.80554,-1.203c0.35779,-0.50618 0.76392,-1.07651 1.83472,-2.34133c0.62634,-0.73981 1.3457,-1.51669 2.1239,-2.3475c0.8269,-0.88274 1.70862,-1.79908 2.62805,-2.75249c0.94983,-0.98494 1.9314,-1.98754 3.91467,-4.06667c1.00342,-1.05191 2.00281,-2.11852 3.00903,-3.1905c1.01245,-1.07869 2.0304,-2.1657 3.06299,-3.2535c1.04016,-1.09588 2.08459,-2.20452 4.26135,-4.38933c1.10242,-1.10656 2.23108,-2.2011 3.37646,-3.2865c1.14661,-1.08663 2.30603,-2.15651 3.47546,-3.2055c1.16162,-1.042 2.31592,-2.07125 4.64807,-4.008c1.13684,-0.94411 2.27148,-1.84489 3.396,-2.706c1.09705,-0.84008 2.18091,-1.63645 3.25195,-2.382c1.03662,-0.72154 2.03967,-1.41763 4.01868,-2.57867c0.92432,-0.5423 1.82825,-1.01189 2.6925,-1.4295c0.80945,-0.39111 1.57471,-0.72556 2.28748,-1.0065c0.64587,-0.25457 1.224,-0.48334 2.18665,-0.73067c0.35852,-0.09212 0.65649,-0.14838 0.88049,-0.102c0.18323,0.03793 0.32654,0.17619 0.40356,0.366c0.0957,0.23591 0.12646,0.55707 0.21594,1.40266c0.05713,0.53934 0.11938,1.15658 0.2085,1.8465c0.09839,0.76218 0.22107,1.59238 0.37952,2.4855c0.17004,0.95806 0.35388,1.98043 0.91199,4.168c0.3009,1.17933 0.66772,2.3977 1.0575,3.6615c0.40344,1.30828 0.83862,2.65094 1.28259,4.0305c0.45435,1.41144 0.9325,2.84613 1.82666,5.808c0.45483,1.50674 0.88635,3.03596 1.30945,4.581c0.42615,1.55629 0.83911,3.12661 1.24646,4.707c0.40906,1.58695 0.81018,3.18112 1.61072,6.37867c0.40051,1.59956 0.79932,3.19753 1.19995,4.791c0.39929,1.58786 0.79858,3.1677 1.20007,4.737c0.39856,1.55804 0.79272,3.10323 1.59998,6.13866c0.39612,1.48961 0.79443,2.95013 1.19104,4.374c0.38477,1.38145 0.76355,2.71046 1.13696,3.978c0.354,1.20173 0.68262,2.33142 1.33862,4.31467c0.28235,0.85369 0.5542,1.61133 0.81909,2.277c0.23474,0.59005 0.46179,1.10358 0.69299,1.53899c0.20288,0.38214 0.38403,0.7267 0.82129,1.18401c0.18628,0.19478 0.39404,0.33678 0.59998,0.438c0.19495,0.09581 0.39856,0.15316 0.59998,0.186c0.19897,0.03245 0.40002,0.04196 0.80005,0.04266c0.20361,0.00036 0.43103,-0.00565 0.69897,-0.054c0.33826,-0.06103 0.7627,-0.18649 1.29297,-0.378c0.67017,-0.24206 1.49463,-0.57139 3.67468,-1.568c1.41711,-0.64782 3.05115,-1.44051 4.9126,-2.3715c2.10583,-1.05322 4.44727,-2.26373 7.02747,-3.6405c2.84204,-1.51651 5.94604,-3.19109 12.89331,-7.15466c3.88953,-2.21906 7.98352,-4.63321 12.28955,-7.12051c4.44983,-2.5703 9.00696,-5.17938 13.6665,-7.7235c4.66357,-2.54635 9.2655,-5.13206 18.54395,-9.32267c4.39563,-1.9853 8.71301,-3.63119 12.86548,-5.0685c3.93323,-1.36141 7.68689,-2.489 11.21851,-3.4395c3.2666,-0.87918 6.27405,-1.60926 11.41602,-2.65867c2.08557,-0.42564 3.87341,-0.74588 5.38647,-0.9765c1.2594,-0.19196 2.29968,-0.31667 3.14551,-0.3555c0.6759,-0.03104 1.22949,-0.05536 1.96802,0.16533c0.28003,0.08368 0.50122,0.22145 0.65698,0.3765c0.14014,0.13953 0.22937,0.30721 0.27905,0.4755c0.04822,0.16359 0.05994,0.33192 0.06396,0.648c0.00183,0.14549 0,0.284 0,0.4185c0,0.1335 0,0.269 0,0.4095c0,0.1485 0.00037,0.308 0,0.672c-0.00024,0.21067 -0.00037,0.4454 -0.00903,0.708c-0.00977,0.29477 -0.02893,0.62566 -0.06299,0.996c-0.03821,0.41507 -0.08582,0.87933 -0.26135,1.96267c-0.10229,0.63109 -0.23608,1.31918 -0.3855,2.0655c-0.16101,0.80439 -0.34253,1.66391 -0.53845,2.5785c-0.20764,0.96909 -0.43103,1.99059 -0.9093,4.18934c-0.25549,1.17429 -0.51929,2.39513 -0.79956,3.657c-0.28894,1.30082 -0.59167,2.63575 -0.9165,3.999c-0.33154,1.39146 -0.66687,2.80872 -1.45068,5.67733c-0.39868,1.45918 -0.83472,2.93 -1.29443,4.422c-0.46948,1.52406 -0.97156,3.07958 -1.50146,4.674c-0.54626,1.64365 -1.12109,3.33888 -2.37073,6.904c-0.66162,1.8877 -1.36182,3.85163 -2.11206,5.8965c-0.7854,2.14059 -1.62854,4.37799 -2.54395,6.7155c-0.96216,2.45705 -1.98096,5.0402 -4.34399,10.55467c-1.27417,2.97346 -2.65234,6.04797 -4.10095,9.204c-1.47925,3.22279 -3.01123,6.46889 -4.58704,9.70799c-1.56824,3.22357 -3.11731,6.40527 -6.31201,12.42134c-1.5105,2.84445 -3.02661,5.5379 -4.49695,8.11499c-1.41272,2.47609 -2.79761,4.84164 -4.11902,7.125c-1.27319,2.20004 -2.53516,4.3051 -4.71741,8.42667c-1.0415,1.96703 -1.98254,3.91573 -2.87097,5.82451c-0.86609,1.86076 -1.67371,3.69499 -2.45703,5.4915c-0.76733,1.75986 -1.48962,3.50052 -3.00525,6.85066c-0.74231,1.6409 -1.51074,3.24519 -2.28149,4.82401c-0.76147,1.55984 -1.53064,3.09286 -2.29053,4.608c-0.7511,1.49753 -1.5083,2.97073 -2.92798,5.90132c-0.69812,1.44099 -1.36584,2.87599 -2.01001,4.30051c-0.63586,1.4062 -1.24573,2.80124 -1.83008,4.1835c-0.57556,1.36147 -1.13574,2.7045 -2.15991,5.34933c-0.49805,1.28621 -0.96326,2.55313 -1.41907,3.78749c-0.44275,1.19897 -0.86768,2.36023 -1.29297,3.4725c-0.40759,1.06599 -0.7793,2.09109 -1.62134,3.90666c-0.38245,0.82463 -0.78906,1.57663 -1.20447,2.26651c-0.39465,0.6553 -0.80762,1.26083 -1.23157,1.8255c-0.41272,0.54962 -0.83911,1.07426 -1.73059,2.07466c-0.44958,0.50456 -0.91626,1.00104 -1.38599,1.5c-0.47168,0.50104 -0.94788,0.99954 -1.422,1.5c-0.47327,0.49954 -0.94897,0.99309 -1.85876,2c-0.44873,0.49663 -0.88293,0.99754 -1.30493,1.5c-0.41797,0.49759 -0.82324,0.99753 -1.21509,1.5c-0.38806,0.49756 -0.76965,0.99303 -1.47998,2c-0.35022,0.49644 -0.68323,0.99823 -1.01392,1.4955c-0.328,0.49339 -0.65063,0.98509 -0.97803,1.46851c-0.32532,0.48027 -0.64331,0.96227 -1.34131,1.86934c-0.34741,0.45154 -0.71777,0.88733 -1.09509,1.323c-0.38257,0.44171 -0.78052,0.88474 -1.18494,1.341c-0.41577,0.46906 -0.85107,0.94806 -1.71997,2.00266c-0.46082,0.55933 -0.92004,1.15225 -1.3905,1.76251c-0.48035,0.62305 -0.9624,1.25934 -1.45349,1.89749c-0.49255,0.64017 -0.97742,1.28424 -1.98938,2.50665c-0.49316,0.59573 -0.99548,1.16434 -1.49097,1.71902c-0.48584,0.54395 -0.96875,1.07147 -1.43701,1.59299c-0.45898,0.51114 -0.91797,1.00507 -1.73865,2.02133c-0.39856,0.49353 -0.76733,0.9967 -1.11902,1.5c-0.34705,0.49677 -0.67566,0.99817 -0.99304,1.5c-0.31519,0.4982 -0.61938,0.99957 -1.22131,2c-0.30054,0.49945 -0.59888,0.99884 -0.90454,1.491c-0.30371,0.48917 -0.61145,0.97064 -0.93152,1.43701c-0.31641,0.461 -0.62683,0.92007 -1.33057,1.73865c-0.34424,0.40048 -0.71716,0.77097 -1.09509,1.13702c-0.38196,0.37 -0.78149,0.7363 -1.18494,1.11899c-0.41675,0.39526 -0.8584,0.79886 -1.71997,1.74399c-0.46472,0.50977 -0.92029,1.06723 -1.38159,1.6485c-0.47083,0.59335 -0.93311,1.20407 -1.3905,1.81952c-0.45361,0.61023 -0.89099,1.21533 -1.72791,2.36533c-0.39026,0.53632 -0.76514,1.04819 -1.12805,1.54199c-0.35437,0.48218 -0.70544,0.95789 -1.05603,1.43402c-0.35474,0.48187 -0.71875,0.97488 -1.48267,2.02399c-0.41016,0.56326 -0.83411,1.151 -1.27197,1.75351c-0.44482,0.61215 -0.89307,1.22684 -1.34399,1.8345c-0.44373,0.59799 -0.87207,1.18298 -1.71729,2.24533c-0.38562,0.48468 -0.76038,0.92862 -1.11902,1.3425c-0.34021,0.3927 -0.67249,0.7619 -0.99304,1.11749c-0.31201,0.34607 -0.625,0.68115 -1.22131,1.37332c-0.30334,0.35208 -0.60168,0.71732 -0.90002,1.09052c-0.30164,0.37741 -0.60095,0.76291 -0.90002,1.1535c-0.3009,0.39307 -0.60022,0.7905 -1.19995,1.58932c-0.30017,0.39978 -0.59924,0.79919 -0.90002,1.1955c-0.29919,0.39435 -0.59851,0.78479 -0.90002,1.16852c-0.29846,0.37994 -0.59314,0.75641 -1.19995,1.46933c-0.29651,0.34833 -0.59924,0.68344 -0.89551,1.01849c-0.29443,0.33298 -0.5874,0.66589 -0.86853,1.00949c-0.28259,0.34543 -0.57251,0.69363 -1.06934,1.47202c-0.25671,0.40222 -0.48584,0.83298 -0.71399,1.272c-0.23059,0.44363 -0.45105,0.89545 -0.67798,1.34399c-0.22571,0.44611 -0.43652,0.89587 -0.94128,1.71732c-0.24402,0.397 -0.51221,0.76553 -0.78149,1.11902c-0.26294,0.34515 -0.53149,0.67227 -0.79053,0.99298c-0.25195,0.31195 -0.5105,0.6058 -0.92798,1.22134c-0.19934,0.29395 -0.36768,0.59607 -0.51904,0.89551c-0.14722,0.29138 -0.27502,0.58267 -0.39294,0.8685c-0.11462,0.27792 -0.21497,0.55219 -0.42139,1.06934c-0.09814,0.24588 -0.19873,0.48187 -0.30005,0.7095c-0.09875,0.22171 -0.19922,0.43668 -0.29993,0.64648c-0.09924,0.20654 -0.19958,0.40961 -0.40002,0.81067c-0.09998,0.19995 -0.19946,0.39963 -0.30444,0.59549c-0.10437,0.19482 -0.21289,0.38593 -0.33154,0.56851c-0.11768,0.18115 -0.23486,0.36411 -0.53064,0.66934c-0.14758,0.15234 -0.31482,0.28415 -0.48157,0.414c-0.16541,0.12881 -0.33301,0.25003 -0.49048,0.37799c-0.15356,0.12479 -0.31616,0.24011 -0.52795,0.54132c-0.10315,0.14682 -0.16992,0.31708 -0.22803,0.49051c-0.05933,0.17734 -0.104,0.36404 -0.15601,0.5535c-0.05334,0.19424 -0.09607,0.40012 -0.28271,0.78934c-0.09863,0.2056 -0.23242,0.40256 -0.37646,0.60001c-0.14783,0.20267 -0.31042,0.40051 -0.47546,0.60001c-0.16589,0.2005 -0.34033,0.39362 -0.64807,0.79999c-0.14917,0.19699 -0.28381,0.39841 -0.40942,0.60001c-0.12366,0.19846 -0.23792,0.39914 -0.34656,0.60001c-0.10779,0.19916 -0.20984,0.39975 -0.41064,0.79999c-0.10022,0.19971 -0.19934,0.39896 -0.30005,0.59549c-0.09949,0.19412 -0.19861,0.38437 -0.29993,0.56851c-0.09875,0.17953 -0.19336,0.35498 -0.40002,0.66934c-0.0968,0.14722 -0.19788,0.28186 -0.29553,0.40948c-0.09314,0.1217 -0.18457,0.2356 -0.26843,0.3465c-0.07983,0.10547 -0.16162,0.20331 -0.26941,0.41068c-0.05054,0.09726 -0.08411,0.19818 -0.11401,0.2955c-0.02869,0.09341 -0.0509,0.1842 -0.078,0.26849c-0.02551,0.07938 -0.04333,0.1629 -0.14124,0.26935c-0.0481,0.05228 -0.11646,0.08502 -0.18604,0.11398c-0.07166,0.02982 -0.14783,0.05145 -0.22205,0.078c-0.07312,0.02612 -0.1532,0.04385 -0.25867,0.14133c-0.05225,0.04834 -0.08557,0.11795 -0.11841,0.19052c-0.03528,0.07806 -0.06665,0.16479 -0.1095,0.25348c-0.04602,0.09515 -0.0946,0.20258 -0.27209,0.38934c-0.10205,0.10736 -0.23328,0.20184 -0.37195,0.29999c-0.14404,0.10193 -0.29529,0.1991 -0.44397,0.30002c-0.146,0.09912 -0.29614,0.18527 -0.51733,0.39999c-0.0968,0.09396 -0.16833,0.1976 -0.22351,0.29999c-0.05273,0.09787 -0.08899,0.20001 -0.12451,0.30002l-0.03357,0.10001l-0.03442,0.09998" id="svg_3" stroke-width="20" stroke="#000000" fill="none"/>
+ </g>
+</svg>
return 3;
}
- // NOTE: works also for extinction chess because depth is 3...
getComputerMove() {
const maxeval = V.INFINITY;
const color = this.turn;
// Some variants may show a bigger moves list to the human (Switching),
// thus the argument "computer" below (which is generally ignored)
- let moves1 = this.getAllValidMoves("computer");
+ let moves1 = this.getAllValidMoves();
if (moves1.length == 0)
// TODO: this situation should not happen
return null;
- // Can I mate in 1 ? (for Magnetic & Extinction)
- for (let i of shuffle(ArrayFun.range(moves1.length))) {
- this.play(moves1[i]);
- let finish = Math.abs(this.evalPosition()) >= V.THRESHOLD_MATE;
- if (!finish) {
- const score = this.getCurrentScore();
- if (["1-0", "0-1"].includes(score)) finish = true;
- }
- this.undo(moves1[i]);
- if (finish) return moves1[i];
- }
-
// Rank moves using a min-max at depth 2
for (let i = 0; i < moves1.length; i++) {
// Initial self evaluation is very low: "I'm checkmated"
// Initial enemy evaluation is very low too, for him
eval2 = (color == "w" ? 1 : -1) * maxeval;
// Second half-move:
- let moves2 = this.getAllValidMoves("computer");
+ let moves2 = this.getAllValidMoves();
for (let j = 0; j < moves2.length; j++) {
this.play(moves2[j]);
const score2 = this.getCurrentScore();
moves1.sort((a, b) => {
return (color == "w" ? 1 : -1) * (b.eval - a.eval);
});
+// console.log(moves1.map(m => { return [this.getNotation(m), m.eval]; }));
let candidates = [0]; //indices of candidates moves
for (let j = 1; j < moves1.length && moves1[j].eval == moves1[0].eval; j++)
if (score != "*")
return score == "1/2" ? 0 : (score == "1-0" ? 1 : -1) * maxeval;
if (depth == 0) return this.evalPosition();
- const moves = this.getAllValidMoves("computer");
+ const moves = this.getAllValidMoves();
let v = color == "w" ? -maxeval : maxeval;
if (color == "w") {
for (let i = 0; i < moves.length; i++) {
"Accept challenge?": "Accept challenge?",
Analyse: "Analyse",
"Analysis mode": "Analysis mode",
+ "Analysis disabled for this variant": "Analysis disabled for this variant",
"Any player": "Any player",
Apply: "Apply",
"Are you sure?": "Are you sure?",
Login: "Login",
Logout: "Logout",
"Logout successful!": "Logout successful!",
+ "Mispelled variant name": "Mispelled variant name",
"Missing email": "Missing email",
+ "Missing FEN": "Missing FEN",
"Missing instructions": "Missing instructions",
"Missing name": "Missing name",
"Missing solution": "Missing solution",
"participant(s):": "participant(s):",
Refuse: "Refuse",
Register: "Register",
- "Registration complete! Please check your emails": "Registration complete! Please check your emails",
+ "Registration complete! Please check your emails now": "Registration complete! Please check your emails now",
"Remove game?": "Remove game?",
Resign: "Resign",
"Resign the game?": "Resign the game?",
"Keep antiking in check": "Keep antiking in check",
"King crosses the board": "King crosses the board",
"Laws of attraction": "Laws of attraction",
+ "Long jumps over pieces": "Long jumps over pieces",
"Lose all pieces": "Lose all pieces",
"Mate any piece": "Mate any piece",
+ "Mate the knight": "Mate the knight",
"Middle battle": "Middle battle",
"Move like a knight": "Move like a knight",
"Move twice": "Move twice",
"Neverending rows": "Neverending rows",
"Pawns move diagonally": "Pawns move diagonally",
+ "Queen disguised as a pawn": "Queen disguised as a pawn",
"Reuse pieces": "Reuse pieces",
"Reverse captures": "Reverse captures",
"Run forward": "Run forward",
"Accept challenge?": "¿Acceptar el desafío?",
Analyse: "Analizar",
"Analysis mode": "Modo análisis",
+ "Analysis disabled for this variant": "Análisis deshabilitado para esta variante",
"Any player": "Cualquier jugador",
Apply: "Aplicar",
"Are you sure?": "¿Está usted seguro?",
Login: "Login",
Logout: "Logout",
"Logout successful!": "¡Desconexión exitosa!",
+ "Mispelled variant name": "Variante mal escrita",
"Missing email": "Email falta",
+ "Missing FEN": "FEN falta",
"Missing instructions": "Instrucciones faltan",
"Missing name": "Nombre falta",
"Missing solution": "Solución falta",
"participant(s):": "participante(s):",
Refuse: "Rechazar",
Register: "Registrarse",
- "Registration complete! Please check your emails": "¡Registro completo! Por favor revise sus correos electrónicos",
+ "Registration complete! Please check your emails now": "¡Registro completo! Revise sus correos electrónicos ahora",
"Remove game?": "¿Eliminar la partida?",
Resign: "Abandonar",
"Resign the game?": "¿Abandonar la partida?",
"Keep antiking in check": "Mantener el antirey en jaque",
"King crosses the board": "El rey cruza el tablero",
"Laws of attraction": "Las leyes de las atracciones",
+ "Long jumps over pieces": "Saltos largos sobre las piezas",
"Lose all pieces": "Perder todas las piezas",
"Mate any piece": "Matar cualquier pieza",
+ "Mate the knight": "Matar el caballo",
"Middle battle": "Batalla media",
"Move like a knight": "Moverse como un caballo",
"Move twice": "Mover dos veces",
"Neverending rows": "Filas interminables",
"Pawns move diagonally": "Peones se mueven en diagonal",
+ "Queen disguised as a pawn": "Reina disfrazada de peón",
"Reuse pieces": "Reutilizar piezas",
"Reverse captures": "Capturas invertidas",
"Run forward": "Correr hacia adelante",
"Accept challenge?": "Accepter le défi ?",
Analyse: "Analyser",
"Analysis mode": "Mode analyse",
+ "Analysis disabled for this variant": "Analyse désactivée pour cette variante",
"Any player": "N'importe qui",
Apply: "Appliquer",
"Authentication successful!": "Authentification réussie !",
Login: "Login",
Logout: "Logout",
"Logout successful!": "Déconnection réussie !",
+ "Mispelled variant name": "Variante mal orthographiée",
"Missing email": "Email manquant",
+ "Missing FEN": "FEN manquante",
"Missing instructions": "Instructions manquantes",
"Missing name": "Nom manquant",
"Missing solution": "Solution manquante",
"participant(s):": "participant(s) :",
Refuse: "Refuser",
Register: "S'enregistrer",
- "Registration complete! Please check your emails": "Enregistrement terminé ! Allez voir vos emails",
+ "Registration complete! Please check your emails now": "Enregistrement terminé ! Allez voir vos emails maintenant",
"Remove game?": "Supprimer la partie ?",
Resign: "Abandonner",
"Resign the game?": "Abandonner la partie ?",
"Keep antiking in check": "Gardez l'antiroi en échec",
"King crosses the board": "Le roi traverse l'échiquier",
"Laws of attraction": "Les lois de l'attraction",
+ "Long jumps over pieces": "Sauts longs par dessus les pièces",
"Lose all pieces": "Perdez toutes les pièces",
- "Mate any piece": "Mater n'importe quelle pièce",
+ "Mate any piece": "Matez n'importe quelle pièce",
+ "Mate the knight": "Matez le cavalier",
"Middle battle": "Bataille du milieu",
"Move like a knight": "Bougez comme un cavalier",
"Move twice": "Jouer deux coups",
"Neverending rows": "Rangées sans fin",
"Pawns move diagonally": "Les pions vont en diagonale",
+ "Queen disguised as a pawn": "Reine déguisée en pion",
"Reuse pieces": "Réutiliser les pièces",
"Reverse captures": "Captures inversées",
"Run forward": "Courir vers l'avant",
Possible knightrider moves after 1.d3 g6 2.Nc3 Bg7.
If 3.Nxd7, 3...Bxe5 e.p. is possible.
+p.
+ Due to the extended knight movement, a capture, check or even checkmate
+ could be played at move 1. On the following diagram 1.Nxe7 is mate,
+ and black in turn could play 1...Nxg2 trapping the queen.
+ Consequently, captures are disabled at move 1.
+
+figure.diagram-container
+ .diagram
+ | fen:nbqnbrkr/pppppppp/8/8/8/8/PPPPPPPP/RNKBQNBR:
+ figcaption 1.Nxe7# and 1...Nxg2: "knightriders' anomalies".
+
h3 Source
p
Posibles jugadas de caballero después de 1.d3 g6 2.Nc3 Bg7.
Si 3.Nxd7, 3...Bxe5 e.p. es posible.
+p.
+ Los movimientos del caballo se incrementan, una captura,
+ un jaque o incluso un jaque mate sería posible en el primer movimiento.
+ En el diagrama a continuación 1.Nxe7 es mate, y las negras al turno
+ podría jugar 1...Nxg2 atrapando a la dama.
+ Es por eso que las capturas solo están autorizadas desde el segundo movimiento.
+
+figure.diagram-container
+ .diagram
+ | fen:nbqnbrkr/pppppppp/8/8/8/8/PPPPPPPP/RNKBQNBR:
+ figcaption 1.Nxe7# y 1...Nxg2: "anomalías de caballeros".
+
h3 Fuente
p
Possibles coups de chevalier après 1.d3 g6 2.Nc3 Bg7.
Si 3.Nxd7, 3...Bxe5 e.p. est possible.
+p.
+ Les déplacements du cavalier étant augmentés, une capture,
+ un échec ou même un mat seraient possibles au premier coup.
+ Sur le diagramme ci-dessous 1.Nxe7 fait mat, et les noirsau trait
+ pourraient jouer 1...Nxg2 piégeant la dame.
+ C'est pourquoi les captures ne sont autorisées qu'à partir du second coup.
+
+figure.diagram-container
+ .diagram
+ | fen:nbqnbrkr/pppppppp/8/8/8/8/PPPPPPPP/RNKBQNBR:
+ figcaption 1.Nxe7# et 1...Nxg2 : "anomalies de chevaliers".
+
h3 Source
p
p.
This "small" difference alters the strategy a lot: guarding pieces is useless,
- for example, and the king cannot escape a check by capturing.
+ for example, and the king cannot escape a distant check by capturing.
h3 Source
p.
Esta "pequeña" diferencia altera enormemente la estrategia: defender las piezas
- es inútil, por ejemplo, y el rey no puede escapar un jaque capturando.
+ es inútil, por ejemplo, y el rey no puede escapar un jaque remota capturando.
h3 Fuente
p.
Cette "petite" différence altère beaucoup la stratégie : défendre les pièces
- est inutile, par exemple, et le roi ne pas échapper à un échec en capturant.
+ est inutile, par exemple, et le roi ne pas échapper à un échec distant en capturant.
h3 Source
El rey negro puede ir a c6: se mueve hacia la casilla no desaparecida
más cercano (si lo hay).
-figure.diagram de contenedores
+figure.diagram-container
.diagram
- | fen: rbkxxxbn / ppxppppx / 2qxxB2 / 4x2p / 3P1x2 / 3n1x2 / PPPxPPPP / RBxxxNKR b2, f2, b4, c5, g5, f6:
+ | fen:rbkxxxbn/ppxppppx/2qxxB2/4x2p/3P1x2/3n1x2/PPPxPPPP/RBxxxNKR b2,f2,b4,c5,g5,f6:
figcaption Posibles movimientos para el caballo en d3.
p.
}
static get VALUES() {
- return Object.assign(ChessRules.VALUES, {
- s: 1,
- u: 5,
- o: 3,
- c: 3,
- t: 9,
- l: 1000
- });
+ return Object.assign(
+ {
+ s: 1,
+ u: 5,
+ o: 3,
+ c: 3,
+ t: 9,
+ l: 1000
+ },
+ ChessRules.VALUES
+ );
}
getNotation(move) {
}
static get VALUES() {
- return Object.assign(ChessRules.VALUES, { a: 1000 });
+ return Object.assign(
+ { a: 1000 },
+ ChessRules.VALUES
+ );
}
static GenRandInitFen() {
return res.slice(0, -1); //remove last comma
}
+ getPotentialMovesFrom([x, y]) {
+ let moves = super.getPotentialMovesFrom([x,y]);
+ // Add en-passant captures from this square:
+ const L = this.epSquares.length;
+ if (!this.epSquares[L - 1]) return moves;
+ const squares = this.epSquares[L - 1];
+ const S = squares.length;
+ // Object describing the removed opponent's piece:
+ const pipoV = new PiPo({
+ x: squares[S-1].x,
+ y: squares[S-1].y,
+ c: V.GetOppCol(this.turn),
+ p: this.getPiece(squares[S-1].x, squares[S-1].y)
+ });
+ // Check if existing non-capturing moves could also capture en passant
+ moves.forEach(m => {
+ if (
+ m.appear[0].p != V.PAWN && //special pawn case is handled elsewhere
+ m.vanish.length <= 1 &&
+ [...Array(S-1).keys()].some(i => {
+ return m.end.x == squares[i].x && m.end.y == squares[i].y;
+ })
+ ) {
+ m.vanish.push(pipoV);
+ }
+ });
+ // Special case of the king knight's movement:
+ if (this.getPiece(x, y) == V.KING) {
+ V.steps[V.KNIGHT].forEach(step => {
+ const endX = x + step[0];
+ const endY = y + step[1];
+ if (
+ V.OnBoard(endX, endY) &&
+ [...Array(S-1).keys()].some(i => {
+ return endX == squares[i].x && endY == squares[i].y;
+ })
+ ) {
+ let enpassantMove = this.getBasicMove([x, y], [endX, endY]);
+ enpassantMove.vanish.push(pipoV);
+ moves.push(enpassantMove);
+ }
+ });
+ }
+ return moves;
+ }
+
// TODO: this getPotentialPawnMovesFrom() is mostly duplicated:
// it could be split in "capture", "promotion", "enpassant"...
getPotentialPawnMoves([x, y]) {
}
// Remove the "onestep" condition: knight promote to knightrider:
-
getPotentialKnightMoves(sq) {
return this.getSlideNJumpMoves(sq, V.steps[V.KNIGHT]);
}
+ filterValid(moves) {
+ const filteredMoves = super.filterValid(moves);
+ // If at least one full move made, everything is allowed:
+ if (this.movesCount >= 2)
+ return filteredMoves;
+ // Else, forbid captures:
+ return filteredMoves.filter(m => m.vanish.length == 1);
+ }
+
isAttackedByKnight(sq, colors) {
return this.isAttackedBySlideNJump(
sq,
);
}
- getPotentialMovesFrom([x, y]) {
- let moves = super.getPotentialMovesFrom([x,y]);
- // Add en-passant captures from this square:
- const L = this.epSquares.length;
- if (!this.epSquares[L - 1]) return moves;
- const squares = this.epSquares[L - 1];
- const S = squares.length;
- // Object describing the removed opponent's piece:
- const pipoV = new PiPo({
- x: squares[S-1].x,
- y: squares[S-1].y,
- c: V.GetOppCol(this.turn),
- p: this.getPiece(squares[S-1].x, squares[S-1].y)
- });
- // Check if existing non-capturing moves could also capture en passant
- moves.forEach(m => {
- if (
- m.appear[0].p != V.PAWN && //special pawn case is handled elsewhere
- m.vanish.length <= 1 &&
- [...Array(S-1).keys()].some(i => {
- return m.end.x == squares[i].x && m.end.y == squares[i].y;
- })
- ) {
- m.vanish.push(pipoV);
- }
- });
- // Special case of the king knight's movement:
- if (this.getPiece(x, y) == V.KING) {
- V.steps[V.KNIGHT].forEach(step => {
- const endX = x + step[0];
- const endY = y + step[1];
- if (
- V.OnBoard(endX, endY) &&
- [...Array(S-1).keys()].some(i => {
- return endX == squares[i].x && endY == squares[i].y;
- })
- ) {
- let enpassantMove = this.getBasicMove([x, y], [endX, endY]);
- enpassantMove.vanish.push(pipoV);
- moves.push(enpassantMove);
- }
- });
- }
- return moves;
- }
-
static get VALUES() {
return {
p: 1,
static get VALUES() {
return Object.assign(
- ChessRules.VALUES,
- { c: 5, m: 7 } //experimental
+ { c: 5, m: 7 }, //experimental
+ ChessRules.VALUES
);
}
--- /dev/null
+import { ChessRules } from "@/base_rules";
+import { ArrayFun } from "@/utils/array";
+import { randInt } from "@/utils/alea";
+
+export const VariantRules = class GrasshopperRules extends ChessRules {
+ static get GRASSHOPPER() {
+ return "g";
+ }
+
+ static get PIECES() {
+ return ChessRules.PIECES.concat([V.GRASSHOPPER]);
+ }
+
+ getPpath(b) {
+ return (b[1] == V.GRASSHOPPER ? "Grasshopper/" : "") + b;
+ }
+
+ getPotentialMovesFrom([x, y]) {
+ switch (this.getPiece(x, y)) {
+ case V.GRASSHOPPER:
+ return this.getPotentialGrasshopperMoves([x, y]);
+ default:
+ return super.getPotentialMovesFrom([x, y]);
+ }
+ }
+
+ getPotentialGrasshopperMoves([x, y]) {
+ let moves = [];
+ // Look in every direction until an obstacle (to jump) is met
+ for (const step of V.steps[V.ROOK].concat(V.steps[V.BISHOP])) {
+ let i = x + step[0];
+ let j = y + step[1];
+ while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
+ i += step[0];
+ j += step[1];
+ }
+ // Move is valid if the next square is empty or occupied by enemy
+ const nextSq = [i+step[0], j+step[1]];
+ if (V.OnBoard(nextSq[0], nextSq[1]) && this.canTake([x, y], nextSq))
+ moves.push(this.getBasicMove([x, y], nextSq));
+ }
+ return moves;
+ }
+
+ isAttacked(sq, colors) {
+ return (
+ super.isAttacked(sq, colors) ||
+ this.isAttackedByGrasshopper(sq, colors)
+ );
+ }
+
+ isAttackedByGrasshopper([x, y], colors) {
+ // Reversed process: is there an adjacent obstacle,
+ // and a grasshopper next in the same line?
+ for (const step of V.steps[V.ROOK].concat(V.steps[V.BISHOP])) {
+ const nextSq = [x+step[0], y+step[1]];
+ if (
+ V.OnBoard(nextSq[0], nextSq[1]) &&
+ this.board[nextSq[0]][nextSq[1]] != V.EMPTY
+ ) {
+ let i = nextSq[0] + step[0];
+ let j = nextSq[1] + step[1];
+ while (V.OnBoard(i, j) && this.board[i][j] == V.EMPTY) {
+ i += step[0];
+ j += step[1];
+ }
+ if (
+ V.OnBoard(i, j) &&
+ this.getPiece(i, j) == V.GRASSHOPPER &&
+ colors.includes(this.getColor(i, j))
+ ) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ static get VALUES() {
+ return Object.assign(
+ // TODO: grasshoppers power decline when less pieces on board...
+ { g: 3 },
+ ChessRules.VALUES
+ );
+ }
+
+ static GenRandInitFen() {
+ let pieces = { w: new Array(10), b: new Array(10) };
+ for (let c of ["w", "b"]) {
+ let positions = ArrayFun.range(8);
+
+ // Get random squares for grasshoppers (unconstrained)
+ let randIndex = randInt(8);
+ const grasshopper1Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+ randIndex = randInt(7);
+ const grasshopper2Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ // Knights
+ randIndex = randInt(6);
+ let knight1Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+ randIndex = randInt(5);
+ let knight2Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ // Queen
+ randIndex = randInt(4);
+ let queenPos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ let rook1Pos = positions[0];
+ let kingPos = positions[1];
+ let rook2Pos = positions[2];
+
+ pieces[c][rook1Pos] = "r";
+ pieces[c][knight1Pos] = "n";
+ pieces[c][grasshopper1Pos] = "g";
+ pieces[c][queenPos] = "q";
+ pieces[c][kingPos] = "k";
+ pieces[c][grasshopper2Pos] = "g";
+ pieces[c][knight2Pos] = "n";
+ pieces[c][rook2Pos] = "r";
+ }
+ return (
+ pieces["b"].join("") +
+ "/pppppppp/8/8/8/8/PPPPPPPP/" +
+ pieces["w"].join("").toUpperCase() +
+ " w 0 1111 -"
+ );
+ }
+};
--- /dev/null
+import { ChessRules, PiPo, Move } from "@/base_rules";
+import { ArrayFun } from "@/utils/array";
+import { randInt } from "@/utils/alea";
+
+export const VariantRules = class HiddenqueenRules extends ChessRules {
+ // Analyse in Hiddenqueen mode makes no sense
+ static get CanAnalyze() {
+ return false;
+ }
+
+ static get HIDDEN_QUEEN() {
+ return 't';
+ }
+
+ static get PIECES() {
+ return ChessRules.PIECES.concat(Object.values(V.HIDDEN_CODE));
+ }
+
+ getPiece(i, j) {
+ const piece = this.board[i][j].charAt(1);
+ if (
+ piece != V.HIDDEN_QUEEN ||
+ // 'side' is used to determine what I see: a pawn or a (hidden)queen?
+ this.getColor(i, j) == this.side
+ ) {
+ return piece;
+ }
+ return V.PAWN;
+ }
+
+ getPpath(b, color, score) {
+ if (b[1] == V.HIDDEN_QUEEN) {
+ // Supposed to be hidden.
+ if (score == "*" && (!color || color != b[0]))
+ return b[0] + "p";
+ return "Hiddenqueen/" + b[0] + "t";
+ }
+ return b;
+ }
+
+ isValidPawnMove(move) {
+ const color = move.vanish[0].c;
+ const pawnShift = color == "w" ? -1 : 1;
+ const startRank = color == "w" ? V.size.x - 2 : 1;
+ const lastRank = color == "w" ? 0 : V.size.x - 1;
+ return (
+ // The queen is discovered if she reaches the 8th rank,
+ // even if this would be a technically valid pawn move.
+ move.end.x != lastRank &&
+ (
+ (
+ move.end.x - move.start.x == pawnShift &&
+ (
+ (
+ // Normal move
+ move.end.y == move.start.y &&
+ this.board[move.end.x][move.end.y] == V.EMPTY
+ )
+ ||
+ (
+ // Capture
+ Math.abs(move.end.y - move.start.y) == 1 &&
+ this.board[move.end.x][move.end.y] != V.EMPTY
+ )
+ )
+ )
+ ||
+ (
+ // Two-spaces initial jump
+ move.start.x == startRank &&
+ move.end.y == move.start.y &&
+ move.end.x - move.start.x == 2 * pawnShift &&
+ this.board[move.end.x][move.end.y] == V.EMPTY
+ )
+ )
+ );
+ }
+
+ getPotentialMovesFrom([x, y]) {
+ if (this.getPiece(x, y) == V.HIDDEN_QUEEN) {
+ const pawnMoves = super.getPotentialPawnMoves([x, y]);
+ let queenMoves = super.getPotentialQueenMoves([x, y]);
+ // Remove from queen moves those corresponding to a pawn move:
+ queenMoves = queenMoves
+ .filter(m => !this.isValidPawnMove(m))
+ // Hidden queen is revealed if moving like a queen:
+ .map(m => {
+ m.appear[0].p = V.QUEEN;
+ return m;
+ });
+ return pawnMoves.concat(queenMoves);
+ }
+ return super.getPotentialMovesFrom([x, y]);
+ }
+
+ getPossibleMovesFrom(sq) {
+ this.side = this.turn;
+ return this.filterValid(this.getPotentialMovesFrom(sq));
+ }
+
+ static GenRandInitFen() {
+ let fen = ChessRules.GenRandInitFen();
+ // Place hidden queens at random:
+ let hiddenQueenPos = randInt(8);
+ let pawnRank = "PPPPPPPP".split("");
+ pawnRank[hiddenQueenPos] = "T";
+ fen = fen.replace("PPPPPPPP", pawnRank.join(""));
+ hiddenQueenPos = randInt(8);
+ pawnRank = "pppppppp".split("");
+ pawnRank[hiddenQueenPos] = "t";
+ fen = fen.replace("pppppppp", pawnRank.join(""));
+ return fen;
+ }
+
+ updateVariables(move) {
+ super.updateVariables(move);
+ if (move.vanish.length == 2 && move.vanish[1].p == V.KING)
+ // We took opponent king
+ this.kingPos[this.turn] = [-1, -1];
+ }
+
+ unupdateVariables(move) {
+ super.unupdateVariables(move);
+ const c = move.vanish[0].c;
+ const oppCol = V.GetOppCol(c);
+ if (this.kingPos[oppCol][0] < 0)
+ // Last move took opponent's king:
+ this.kingPos[oppCol] = [move.vanish[1].x, move.vanish[1].y];
+ }
+
+ getCurrentScore() {
+ const color = this.turn;
+ if (this.kingPos[color][0] < 0)
+ // King disappeared
+ return color == "w" ? "0-1" : "1-0";
+ return super.getCurrentScore();
+ }
+
+ // Search is biased, so not really needed to explore deeply
+ static get SEARCH_DEPTH() {
+ return 2;
+ }
+
+ static get VALUES() {
+ return Object.assign(
+ { t: 9 },
+ ChessRules.VALUES
+ );
+ }
+
+ getComputerMove() {
+ this.side = this.turn;
+ return super.getComputerMove();
+ }
+};
--- /dev/null
+import { ChessRules } from "@/base_rules";
+import { ArrayFun } from "@/utils/array";
+import { randInt } from "@/utils/alea";
+
+export const VariantRules = class KnightmateRules extends ChessRules {
+ static get COMMONER() {
+ return "c";
+ }
+
+ static get PIECES() {
+ return ChessRules.PIECES.concat([V.COMMONER]);
+ }
+
+ getPpath(b) {
+ return ([V.KING, V.COMMONER].includes(b[1]) ? "Knightmate/" : "") + b;
+ }
+
+ static GenRandInitFen() {
+ let pieces = { w: new Array(8), b: new Array(8) };
+ // Shuffle pieces on first and last rank
+ for (let c of ["w", "b"]) {
+ let positions = ArrayFun.range(8);
+
+ // Get random squares for bishops
+ let randIndex = 2 * randInt(4);
+ const bishop1Pos = positions[randIndex];
+ let randIndex_tmp = 2 * randInt(4) + 1;
+ const bishop2Pos = positions[randIndex_tmp];
+ positions.splice(Math.max(randIndex, randIndex_tmp), 1);
+ positions.splice(Math.min(randIndex, randIndex_tmp), 1);
+
+ // Get random squares for commoners
+ randIndex = randInt(6);
+ const commoner1Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+ randIndex = randInt(5);
+ const commoner2Pos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ // Get random square for queen
+ randIndex = randInt(4);
+ const queenPos = positions[randIndex];
+ positions.splice(randIndex, 1);
+
+ // Rooks and king positions are now fixed,
+ // because of the ordering rook-king-rook
+ const rook1Pos = positions[0];
+ const kingPos = positions[1];
+ const rook2Pos = positions[2];
+
+ // Finally put the shuffled pieces in the board array
+ pieces[c][rook1Pos] = "r";
+ pieces[c][commoner1Pos] = "c";
+ pieces[c][bishop1Pos] = "b";
+ pieces[c][queenPos] = "q";
+ pieces[c][kingPos] = "k";
+ pieces[c][bishop2Pos] = "b";
+ pieces[c][commoner2Pos] = "c";
+ pieces[c][rook2Pos] = "r";
+ }
+ // Add turn + flags + enpassant
+ return (
+ pieces["b"].join("") +
+ "/pppppppp/8/8/8/8/PPPPPPPP/" +
+ pieces["w"].join("").toUpperCase() +
+ " w 0 1111 -"
+ );
+ }
+
+ getPotentialMovesFrom([x, y]) {
+ switch (this.getPiece(x, y)) {
+ case V.COMMONER:
+ return this.getPotentialCommonerMoves([x, y]);
+ default:
+ return super.getPotentialMovesFrom([x, y]);
+ }
+ }
+
+ getPotentialCommonerMoves(sq) {
+ return this.getSlideNJumpMoves(
+ sq,
+ V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
+ "oneStep"
+ );
+ }
+
+ getPotentialKingMoves(sq) {
+ return super.getPotentialKnightMoves(sq).concat(super.getCastleMoves(sq));
+ }
+
+ isAttacked(sq, colors) {
+ return (
+ this.isAttackedByCommoner(sq, colors) ||
+ this.isAttackedByPawn(sq, colors) ||
+ this.isAttackedByRook(sq, colors) ||
+ this.isAttackedByBishop(sq, colors) ||
+ this.isAttackedByQueen(sq, colors) ||
+ this.isAttackedByKing(sq, colors)
+ );
+ }
+
+ isAttackedByKing(sq, colors) {
+ return this.isAttackedBySlideNJump(
+ sq,
+ colors,
+ V.KING,
+ V.steps[V.KNIGHT],
+ "oneStep"
+ );
+ }
+
+ isAttackedByCommoner(sq, colors) {
+ return this.isAttackedBySlideNJump(
+ sq,
+ colors,
+ V.COMMONER,
+ V.steps[V.ROOK].concat(V.steps[V.BISHOP]),
+ "oneStep"
+ );
+ }
+
+ static get VALUES() {
+ return {
+ p: 1,
+ r: 5,
+ c: 5, //the commoner is valuable
+ b: 3,
+ q: 9,
+ k: 1000
+ };
+ }
+};
static get VALUES() {
return Object.assign(
- ChessRules.VALUES,
- { c: 3, w: 7 } //experimental
+ { c: 3, w: 7 }, //experimental
+ ChessRules.VALUES
);
}
return this.isAttackedByJump(sq, colors, V.KING, V.steps[V.KING]);
}
+ // NOTE: altering move in getBasicMove doesn't work and wouldn't be logical.
+ // This is a side-effect on board generated by the move.
static PlayOnBoard(board, move) {
board[move.vanish[0].x][move.vanish[0].y] = V.HOLE;
for (let psq of move.appear) board[psq.x][psq.y] = psq.c + psq.p;
// then it doesn't trigger BaseGame.re_init() and the result is weird.
created: function() {
this.gameRef.vname = this.$route.params["vname"];
- this.gameRef.fen = this.$route.query["fen"].replace(/_/g, " ");
- this.initialize();
+ const routeFen = this.$route.query["fen"];
+ if (!routeFen) this.alertAndQuit("Missing FEN");
+ else {
+ this.gameRef.fen = routeFen.replace(/_/g, " ");
+ this.initialize();
+ }
},
methods: {
+ alertAndQuit: function(text, wrongVname) {
+ // Soon after component creation, st.tr might be uninitialized.
+ // Set a timeout to let a chance for the message to show translated.
+ const newUrl = "/variants" + (wrongVname ? "" : "/" + this.gameRef.vname);
+ setTimeout(() => {
+ alert(this.st.tr[text] || text);
+ this.$router.replace(newUrl);
+ }, 500);
+ },
initialize: async function() {
// Obtain VariantRules object
- const vModule = await import("@/variants/" + this.gameRef.vname + ".js");
- window.V = vModule.VariantRules;
- this.loadGame();
+ await import("@/variants/" + this.gameRef.vname + ".js")
+ .then((vModule) => {
+ window.V = vModule.VariantRules;
+ if (!V.CanAnalyze)
+ // Late check, in case the user tried to enter URL by hand
+ this.alertAndQuit("Analysis disabled for this variant");
+ else this.loadGame();
+ })
+ .catch((err) => { this.alertAndQuit("Mispelled variant name", true); });
},
loadGame: function() {
// NOTE: no need to set score (~unused)
return getDiagram(args);
},
re_setVariant: async function(vname) {
- const vModule = await import("@/variants/" + vname + ".js");
- this.V = window.V = vModule.VariantRules;
- this.gameInfo.vname = vname;
+ await import("@/variants/" + vname + ".js")
+ .then((vModule) => {
+ this.V = window.V = vModule.VariantRules;
+ this.gameInfo.vname = vname;
+ })
+ .catch((err) => {
+ // Soon after component creation, st.tr might be uninitialized.
+ // Set a timeout to let a chance for the message to show translated.
+ const text = "Mispelled variant name";
+ setTimeout(() => {
+ alert(this.st.tr[text] || text);
+ this.$router.replace("/variants");
+ }, 500);
+ });
},
startGame: function(mode) {
if (this.gameInProgress) return;
('Enpassant', 'Capture en passant'),
('Extinction', 'Capture all of a kind'),
('Grand', 'Big board'),
+ ('Grasshopper', 'Long jumps over pieces'),
('Hidden', 'Unidentified pieces'),
+ ('Hiddenqueen', 'Queen disguised as a pawn'),
+ ('Knightmate', 'Mate the knight'),
('Knightrelay', 'Move like a knight'),
('Losers', 'Lose all pieces'),
('Magnetic', 'Laws of attraction'),
const day = 86400000;
db.serialize(function() {
const query =
- "SELECT id, sessionToken, created " +
+ "SELECT id, sessionToken, created, name, email " +
"FROM Users";
db.all(query, (err, users) => {
users.forEach(u => {
- // Remove unlogged users for >1 day
+ // Remove unlogged users for > 24h
if (!u.sessionToken && tsNow - u.created > day)
+ {
+ notify(
+ u,
+ "Your account has been deleted because " +
+ "you didn't log in for 24h after registration"
+ );
db.run("DELETE FROM Users WHERE id = " + u.id);
+ }
});
});
});